@cyberart-io/engine 0.0.10 → 0.0.12

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/headless.js CHANGED
@@ -5,4 +5,4 @@
5
5
  * Not an OSI open-source license.
6
6
  */
7
7
 
8
- var pu=Object.defineProperty;var As=(e,t)=>()=>(e&&(t=e(e=0)),t);var fu=(e,t)=>{for(var n in t)pu(e,n,{get:t[n],enumerable:!0})};var Fu={};function Vu(e,t){let n=e.indexOf(Ys);if(n===-1)return null;let r=n+Ys.length,o=`const __cyberSkip=new Set(${JSON.stringify(t)});const __cyberOrig=registerProcessor;registerProcessor=(n,p)=>__cyberSkip.has(n)?undefined:__cyberOrig(n,p);`;return e.slice(0,r)+o+e.slice(r)}var Pi,lr,Lu,Tn,Ys,Xs=As(()=>{"use strict";Pi=/AudioWorkletProcessor with name:\s*["'`][^"'`]+["'`]\s+is already registered/i,lr="__cyberartWorkletPatchApplied";typeof window<"u"&&!window[lr]&&(window.addEventListener("error",e=>{let t=e?.message??"";Pi.test(t)&&(e.preventDefault(),e.stopImmediatePropagation())},!0),window.addEventListener("unhandledrejection",e=>{let t=e?.reason,n=typeof t=="string"?t:t?.message??"";Pi.test(n)&&e.preventDefault()}),window[lr]=!0);Lu=!1,Tn=(...e)=>{Lu&&console.log("[workletPatch]",...e)},Ys="((AudioWorkletProcessor,registerProcessor)=>{";if(typeof AudioWorklet<"u"&&!AudioWorklet.prototype[lr]){let e=new WeakMap,t=/registerProcessor\s*\(\s*['"`]([^'"`]+)['"`]/g,n=AudioWorklet.prototype.addModule,r=0;AudioWorklet.prototype.addModule=async function(o,s){let a=++r,d=e.get(this);d||(d=new Set,e.set(this,d)),Tn(`#${a} addModule`,{url:o.slice(0,64),isBlob:o.startsWith("blob:"),knownBefore:[...d]});let m=o,u=null;if(o.startsWith("blob:")){let y=null;try{y=await(await fetch(o)).text()}catch(k){Tn(`#${a} blob fetch failed`,k)}if(y!==null){let k=new Set;for(let R of y.matchAll(t))k.add(R[1]);if(k.size>0){let R=[...k].filter(b=>d.has(b)),T=[...k].filter(b=>!d.has(b));if(R.length>0&&T.length===0){Tn(`#${a} short-circuit \u2014 all processors already registered`,R);return}if(R.length>0&&T.length>0){let b=Vu(y,R);if(b!==null){let x=new Blob([b],{type:"application/javascript"});u=URL.createObjectURL(x),m=u,Tn(`#${a} rewrote blob; skipping`,R,"allowing",T)}else Tn(`#${a} blob rewrite failed; passing original through`)}T.forEach(b=>d.add(b))}}}return n.call(this,m,s).then(()=>{u&&URL.revokeObjectURL(u)},y=>{u&&URL.revokeObjectURL(u);let k=(y&&y.message)??"";if(!(Pi.test(k)||/already registered/i.test(k)))throw y})},AudioWorklet.prototype[lr]=!0}});var Zs={};fu(Zs,{AUDIO_LIBRARIES:()=>xi,adaptersFor:()=>mr,importTone:()=>pr,normalizeAudioLibraries:()=>fr});async function pr(){let e=await import("tone");if(typeof e.start=="function")return e;let t=e.default;return t&&typeof t.start=="function"?t:e}function fr(e){if(!e)return[];let t=Array.isArray(e)?e:[e],n=[];for(let r of t){if(!(r in xi)){console.warn(`Unknown audio library "${r}"`);continue}let i=r;n.includes(i)||n.push(i)}return n}function mr(e){return e.map(t=>xi[t])}var Qs,xi,Ti=As(()=>{"use strict";Qs={id:"tone",async load(){await Promise.resolve().then(()=>(Xs(),Fu))},async unlock(){await Qs.load(),await(await pr()).start()},async resumeIfSuspended(){let e=await pr();e.context.state==="suspended"&&await e.context.resume()},async suspendIfRunning(){let t=(await pr()).context.rawContext;"suspend"in t&&t.state==="running"&&await t.suspend()}},xi={tone:Qs}});var Ce=class extends Error{constructor(n,r){super(r?`Headless Canvas2D does not support ${n}: ${r}`:`Headless Canvas2D does not support ${n}`);this.name="HeadlessUnsupportedOperationError";this.operation=n}},Ot=class{constructor(t,n,r,i,o,s=0,a=0){this.stops=[];this.kind=t,this.x0=n,this.y0=r,this.x1=i,this.y1=o,this.r0=s,this.r1=a}addColorStop(t,n){if(!Number.isFinite(t)||t<0||t>1)throw new Ce("addColorStop","offset must be in [0, 1]");this.stops.push({offset:t,color:ir(n)}),this.stops.sort((r,i)=>r.offset-i.offset)}colorAt(t){let n=t<0?0:t>1?1:t;if(this.stops.length===0)return{r:0,g:0,b:0,a:0};if(this.stops.length===1||n<=this.stops[0].offset)return this.stops[0].color;let r=this.stops[this.stops.length-1];if(n>=r.offset)return r.color;for(let i=1;i<this.stops.length;i++){let o=this.stops[i],s=this.stops[i-1];if(n<=o.offset){let a=o.offset-s.offset,d=a===0?0:(n-s.offset)/a;return Su(s.color,o.color,d)}}return r.color}},gi={a:1,b:0,c:0,d:1,e:0,f:0},mu={black:"#000000",white:"#ffffff",red:"#ff0000",green:"#008000",blue:"#0000ff",cyan:"#00ffff",magenta:"#ff00ff",yellow:"#ffff00",gold:"#ffd700",orange:"#ffa500",navy:"#000080",gray:"#808080",grey:"#808080",transparent:"#00000000"},Xt=new WeakMap,Ds,ws=!1,Si=class{constructor(t,n,r,i){this.context=null;this.onDeviceReset=null;this.canvas=t,this.width=Math.max(0,n|0),this.height=Math.max(0,r|0),this.alpha=i.alpha!==!1,this.pixels=new Uint8ClampedArray(this.width*this.height*4),this.glyphAtlas=i.glyphAtlas??Ds??_s(),this.alpha||this.fillOpaqueBlack()}resize(t,n,r=!1){let i=Math.max(0,t|0),o=Math.max(0,n|0);i!==this.width||o!==this.height?(this.width=i,this.height=o,this.pixels=new Uint8ClampedArray(i*o*4)):r&&this.pixels.fill(0),this.alpha||this.fillOpaqueBlack()}fillOpaqueBlack(){let t=this.pixels;for(let n=3;n<t.length;n+=4)t[n]=255}};function gu(e,t,n){let r=n??new Uint8ClampedArray(e*t*4);if(r.length!==e*t*4)throw new Ce("createImageFixture","data length must be width*height*4");return{__headlessImage:!0,width:e,height:t,data:r}}function ki(e){Ds=e}function hu(e){return Xt.get(e)}function Ei(e,t={}){let n=Xt.get(e);if(n?.context)return n.context;let r=Math.max(0,Number(e.width)||0),i=Math.max(0,Number(e.height)||0),o=new Si(e,r,i,t);Xt.set(e,o);let s=yu(o);return o.context=s,s}function Os(e){let t=Xt.get(e);if(t)return t.resize(e.width,e.height,!1),Zt(t.width,t.height,t.pixels)}function yu(e){let t={...gi},n=[],r="#000000",i="#000000",o={r:0,g:0,b:0,a:255},s={r:0,g:0,b:0,a:255},a=1,d="source-over",m=1,u="butt",y="10px sans-serif",k="start",R="alphabetic",T=null,b=!0,x=[],F=null,U=(l,v)=>{F={points:[C(l,v)],closed:!1},x.push(F)},O=(l,v)=>{if(!F){U(l,v);return}F.points.push(C(l,v))},$=()=>{if(!F||F.points.length===0)return;F.closed=!0;let l=F.points[0];F.points.push({x:l.x,y:l.y})},C=(l,v)=>({x:t.a*l+t.c*v+t.e,y:t.b*l+t.d*v+t.f}),p=()=>{if(d!=="source-over"&&d!=="copy")throw new Ce("globalCompositeOperation",d)},E=()=>{e.resize(e.canvas.width,e.canvas.height,!1)},c=()=>{t={...gi},n.length=0,x.length=0,F=null,T=null,r="#000000",i="#000000",o={r:0,g:0,b:0,a:255},s={r:0,g:0,b:0,a:255},a=1,d="source-over",m=1,u="butt",y="10px sans-serif",k="start",R="alphabetic",b=!0};e.onDeviceReset=c;let f=(l,v,P,_=d)=>{if(l<0||v<0||l>=e.width||v>=e.height||T&&T[v*e.width+l]===0)return;let N=(v*e.width+l)*4,W=e.pixels;if(_==="copy"){W[N]=P.r,W[N+1]=P.g,W[N+2]=P.b,W[N+3]=e.alpha?P.a:255;return}let j=Math.round(P.a/255*a*255);if(j<=0)return;if(j>=255){W[N]=P.r,W[N+1]=P.g,W[N+2]=P.b,W[N+3]=255;return}let H=j/255,g=W[N+3]/255,S=H+g*(1-H);if(S<=0){W[N]=0,W[N+1]=0,W[N+2]=0,W[N+3]=e.alpha?0:255;return}W[N]=Math.round((P.r*H+W[N]*g*(1-H))/S),W[N+1]=Math.round((P.g*H+W[N+1]*g*(1-H))/S),W[N+2]=Math.round((P.b*H+W[N+2]*g*(1-H))/S),W[N+3]=e.alpha?Math.round(S*255):255},h=(l,v,P,_)=>{if(!(l instanceof Ot))return v;let N=rr(t,P+.5,_+.5);return vu(l,N.x,N.y)},A=(l,v,P,_,N)=>{p(),E();let W=yi(l,e.width,e.height);if(W)for(let j=W.minY;j<=W.maxY;j++)for(let H=W.minX;H<=W.maxX;H++){let g=H+.5,S=j+.5;Ps(l,g,S,_)&&f(H,j,h(v,P,H,j),N)}},L=l=>{p(),E();let v=Math.sqrt(Math.abs(t.a*t.d-t.b*t.c)),P=m*(v===0?1:v)/2,_=yi(l,e.width,e.height,P+1);if(_)for(let N=_.minY;N<=_.maxY;N++)for(let W=_.minX;W<=_.maxX;W++)Eu(l,W+.5,N+.5,P,u)&&f(W,N,h(i,s,W,N))},w=(l,v)=>{if(l instanceof Ot){v==="fillStyle"?(r=l,o={r:0,g:0,b:0,a:255}):(i=l,s={r:0,g:0,b:0,a:255});return}if(typeof l!="string")throw new Ce(v,String(l));let P=ir(l);v==="fillStyle"?(r=l,o=P):(i=l,s=P)},B={get canvas(){return e.canvas},get fillStyle(){return r},set fillStyle(l){w(l,"fillStyle")},get strokeStyle(){return i},set strokeStyle(l){w(l,"strokeStyle")},get globalAlpha(){return a},set globalAlpha(l){a=Ms(l)},get globalCompositeOperation(){return d},set globalCompositeOperation(l){if(l!=="source-over"&&l!=="copy")throw new Ce("globalCompositeOperation",l);d=l},get lineWidth(){return m},set lineWidth(l){m=Number.isFinite(l)&&l>0?l:1},get lineCap(){return u},set lineCap(l){if(l!=="butt"&&l!=="round"&&l!=="square")throw new Ce("lineCap",String(l));u=l},get font(){return y},set font(l){y=l},get textAlign(){return k},set textAlign(l){if(l!=="start"&&l!=="left"&&l!=="center"&&l!=="right"&&l!=="end")throw new Ce("textAlign",String(l));k=l},get textBaseline(){return R},set textBaseline(l){R=l},get imageSmoothingEnabled(){return b},set imageSmoothingEnabled(l){b=!!l},imageSmoothingQuality:"low",lineJoin:"miter",miterLimit:10,lineDashOffset:0,shadowBlur:0,shadowColor:"rgba(0, 0, 0, 0)",shadowOffsetX:0,shadowOffsetY:0,setGlyphAtlas(l){e.glyphAtlas=l},save(){n.push({transform:{...t},fillStyle:r,strokeStyle:i,fillStyleRaw:r,strokeStyleRaw:i,globalAlpha:a,globalCompositeOperation:d,lineWidth:m,lineCap:u,font:y,textAlign:k,textBaseline:R,clip:T?T.slice():null,imageSmoothingEnabled:b})},restore(){let l=n.pop();l&&(t=l.transform,r=l.fillStyleRaw,i=l.strokeStyleRaw,r instanceof Ot?o={r:0,g:0,b:0,a:255}:o=ir(r),i instanceof Ot?s={r:0,g:0,b:0,a:255}:s=ir(i),a=l.globalAlpha,d=l.globalCompositeOperation,m=l.lineWidth,u=l.lineCap,y=l.font,k=l.textAlign,R=l.textBaseline,T=l.clip,b=l.imageSmoothingEnabled)},beginPath(){x.length=0,F=null},closePath:$,moveTo:U,lineTo:O,rect(l,v,P,_){U(l,v),O(l+P,v),O(l+P,v+_),O(l,v+_),$()},quadraticCurveTo(l,v,P,_){let N=F?.points[F.points.length-1];if(!N){U(P,_);return}let W=rr(t,N.x,N.y);Ru(W.x,W.y,l,v,P,_,16,(j,H)=>{F.points.push(C(j,H))})},bezierCurveTo(l,v,P,_,N,W){let j=F?.points[F.points.length-1];if(!j){U(N,W);return}let H=rr(t,j.x,j.y);Cu(H.x,H.y,l,v,P,_,N,W,24,(g,S)=>{F.points.push(C(g,S))})},arc(l,v,P,_,N,W=!1){if(P<0)throw new Ce("arc","negative radius");let j=xs(l,v,P,_,N,W);if(j.length===0)return;let H=j[0];F?F.points.push(C(H.x,H.y)):U(H.x,H.y);for(let g=1;g<j.length;g++)F.points.push(C(j[g].x,j[g].y))},ellipse(l,v,P,_,N,W,j,H=!1){if(P<0||_<0)throw new Ce("ellipse","negative radius");let g=xs(0,0,1,W,j,H),S=Math.cos(N),I=Math.sin(N);for(let M=0;M<g.length;M++){let q=g[M].x*P,X=g[M].y*_,J=l+q*S-X*I,Z=v+q*I+X*S;M===0&&!F?U(J,Z):O(J,Z)}},fill(l="nonzero"){A(hi(x),r,o,l)},stroke(){L(hi(x))},clip(l="nonzero"){let v=new Uint8Array(e.width*e.height),P=hi(x),_=yi(P,e.width,e.height);if(_)for(let N=_.minY;N<=_.maxY;N++)for(let W=_.minX;W<=_.maxX;W++)Ps(P,W+.5,N+.5,l)&&(v[N*e.width+W]=1);if(!T){T=v;return}for(let N=0;N<T.length;N++)T[N]=T[N]&&v[N]?1:0},fillRect(l,v,P,_){A(G(l,v,P,_),r,o,"nonzero")},strokeRect(l,v,P,_){L(G(l,v,P,_))},clearRect(l,v,P,_){let N=e.alpha?{r:0,g:0,b:0,a:0}:{r:0,g:0,b:0,a:255};A(G(l,v,P,_),"#000000",N,"nonzero","copy")},fillText(l,v,P){D(String(l),v,P,r,o,!0)},strokeText(l,v,P){D(String(l),v,P,i,s,!1)},measureText(l){return{width:Ts(String(l),y,e.glyphAtlas)}},translate(l,v){t=nr(t,{a:1,b:0,c:0,d:1,e:l,f:v})},rotate(l){let v=Math.cos(l),P=Math.sin(l);t=nr(t,{a:v,b:P,c:-P,d:v,e:0,f:0})},scale(l,v){t=nr(t,{a:l,b:0,c:0,d:v,e:0,f:0})},transform(l,v,P,_,N,W){t=nr(t,{a:l,b:v,c:P,d:_,e:N,f:W})},setTransform(l,v,P,_,N,W){if(l&&typeof l=="object"){t={a:l.a,b:l.b,c:l.c,d:l.d,e:l.e,f:l.f};return}t={a:Number(l)||0,b:Number(v)||0,c:Number(P)||0,d:Number(_)||0,e:Number(N)||0,f:Number(W)||0}},resetTransform(){t={...gi}},getTransform(){return{...t}},createLinearGradient(l,v,P,_){return new Ot("linear",l,v,P,_)},createRadialGradient(l,v,P,_,N,W){if(P<0||W<0)throw new Ce("createRadialGradient","negative radius");return new Ot("radial",l,v,_,N,P,W)},createImageData(l,v){return typeof l=="object"?xt(new Uint8ClampedArray(l.width*l.height*4),l.width,l.height):xt(new Uint8ClampedArray(l*(v??0)*4),l,v??0)},getImageData(l,v,P,_){E();let N=l|0,W=v|0,j=P|0,H=_|0,g=new Uint8ClampedArray(j*H*4);for(let S=0;S<H;S++)for(let I=0;I<j;I++){let M=N+I,q=W+S,X=(S*j+I)*4;if(M<0||q<0||M>=e.width||q>=e.height)continue;let J=(q*e.width+M)*4;g[X]=e.pixels[J],g[X+1]=e.pixels[J+1],g[X+2]=e.pixels[J+2],g[X+3]=e.pixels[J+3]}return xt(g,j,H)},putImageData(l,v,P){E();let _=v|0,N=P|0,W=l.data;for(let j=0;j<l.height;j++)for(let H=0;H<l.width;H++){let g=_+H,S=N+j;if(g<0||S<0||g>=e.width||S>=e.height)continue;let I=(j*l.width+H)*4,M=(S*e.width+g)*4;e.pixels[M]=W[I],e.pixels[M+1]=W[I+1],e.pixels[M+2]=W[I+2],e.pixels[M+3]=e.alpha?W[I+3]:255}},drawImage(l,...v){let P=bu(l),_=0,N=0,W=P.width,j=P.height,H,g,S,I;if(v.length===2)H=v[0],g=v[1],S=W,I=j;else if(v.length===4)H=v[0],g=v[1],S=v[2],I=v[3];else if(v.length===8)_=v[0],N=v[1],W=v[2],j=v[3],H=v[4],g=v[5],S=v[6],I=v[7];else throw new Ce("drawImage","invalid argument count");p(),E();let M=[C(H,g),C(H+S,g),C(H+S,g+I),C(H,g+I)],q=Math.max(0,Math.floor(Math.min(...M.map(Q=>Q.x)))),X=Math.min(e.width-1,Math.ceil(Math.max(...M.map(Q=>Q.x)))),J=Math.max(0,Math.floor(Math.min(...M.map(Q=>Q.y)))),Z=Math.min(e.height-1,Math.ceil(Math.max(...M.map(Q=>Q.y))));for(let Q=J;Q<=Z;Q++)for(let ve=q;ve<=X;ve++){let Ie=rr(t,ve+.5,Q+.5),Re=(Ie.x-H)/S,ae=(Ie.y-g)/I;if(Re<0||ae<0||Re>=1||ae>=1)continue;let V=Math.floor(_+Re*W),z=Math.floor(N+ae*j);if(V<0||z<0||V>=P.width||z>=P.height)continue;let ne=(z*P.width+V)*4;f(ve,Q,{r:P.data[ne],g:P.data[ne+1],b:P.data[ne+2],a:P.data[ne+3]})}},setLineDash(l){if(l.length>0)throw new Ce("setLineDash","non-empty dash")},getLineDash(){return[]},createPattern(){throw new Ce("createPattern")}};function G(l,v,P,_){let N=C(l,v),W=C(l+P,v),j=C(l+P,v+_),H=C(l,v+_);return[{closed:!0,points:[N,W,j,H,N]}]}function D(l,v,P,_,N,W){p();let j=e.glyphAtlas,H=Ns(y),g=H/j.cellHeight,S=Ts(l,y,j),I=v;k==="center"?I=v-S/2:(k==="right"||k==="end")&&(I=v-S);let M=P;R==="top"||R==="hanging"?M=P:R==="middle"?M=P-H/2:M=P-H;let q=I,X=(j.cellWidth+1)*g;for(let J of l){let Z=j.glyphs[J]??j.glyphs[J.toUpperCase()];if(!Z){q+=X;continue}for(let Q=0;Q<j.cellHeight;Q++)for(let ve=0;ve<j.cellWidth;ve++){if(Z[Q*j.cellWidth+ve]===0)continue;if(!W){let Le=ve===0||Z[Q*j.cellWidth+ve-1]===0,Je=ve===j.cellWidth-1||Z[Q*j.cellWidth+ve+1]===0,Et=Q===0||Z[(Q-1)*j.cellWidth+ve]===0,$t=Q===j.cellHeight-1||Z[(Q+1)*j.cellWidth+ve]===0;if(!Le&&!Je&&!Et&&!$t)continue}let Ie=q+ve*g,Re=M+Q*g,ae=q+(ve+1)*g,V=M+(Q+1)*g,z=C(Ie,Re),ne=C(ae,V),re=Math.max(0,Math.floor(Math.min(z.x,ne.x))),oe=Math.min(e.width-1,Math.ceil(Math.max(z.x,ne.x))-1),fe=Math.max(0,Math.floor(Math.min(z.y,ne.y))),He=Math.min(e.height-1,Math.ceil(Math.max(z.y,ne.y))-1);for(let Le=fe;Le<=He;Le++)for(let Je=re;Je<=oe;Je++)f(Je,Le,h(_,N,Je,Le))}q+=X}}return new Proxy(B,{get(l,v,P){if(Reflect.has(l,v))return Reflect.get(l,v,P);if(typeof v=="symbol")return;let _=String(v);if(!(_==="then"||_==="toJSON"))return(...N)=>{throw new Ce(_)}},set(l,v,P,_){if(v==="shadowBlur"&&P)throw new Ce("shadowBlur");if((v==="shadowOffsetX"||v==="shadowOffsetY")&&P)throw new Ce(String(v));if(v==="filter"&&P&&P!=="none")throw new Ce("filter",String(P));if(Reflect.has(l,v))return Reflect.set(l,v,P,_);throw new Ce(String(v))}})}function bu(e){if(e&&typeof e=="object"&&"__headlessImage"in e){let t=e;return{width:t.width,height:t.height,data:t.data}}if(e&&typeof e=="object"&&"data"in e&&"width"in e&&"height"in e){let t=e;if(t.data instanceof Uint8ClampedArray)return{width:t.width,height:t.height,data:t.data}}if(typeof HTMLCanvasElement<"u"&&e instanceof HTMLCanvasElement){let t=Xt.get(e);if(!t)throw new Ce("drawImage","source canvas has no headless surface");return{width:t.width,height:t.height,data:t.pixels}}throw new Ce("drawImage","source must be ImageData, a headless canvas, or createImageFixture()")}function vu(e,t,n){if(e.kind==="linear"){let s=e.x1-e.x0,a=e.y1-e.y0,d=s*s+a*a,m=d===0?0:((t-e.x0)*s+(n-e.y0)*a)/d;return e.colorAt(m)}let r=Math.hypot(t-e.x1,n-e.y1),i=e.r1-e.r0,o=i===0?0:(r-e.r0)/i;return e.colorAt(o)}function Su(e,t,n){return{r:Math.round(e.r+(t.r-e.r)*n),g:Math.round(e.g+(t.g-e.g)*n),b:Math.round(e.b+(t.b-e.b)*n),a:Math.round(e.a+(t.a-e.a)*n)}}function nr(e,t){return{a:e.a*t.a+e.c*t.b,b:e.b*t.a+e.d*t.b,c:e.a*t.c+e.c*t.d,d:e.b*t.c+e.d*t.d,e:e.a*t.e+e.c*t.f+e.e,f:e.b*t.e+e.d*t.f+e.f}}function rr(e,t,n){let r=e.a*e.d-e.b*e.c;if(r===0)return{x:t,y:n};let i=e.d/r,o=-e.b/r,s=-e.c/r,a=e.a/r,d=(e.c*e.f-e.d*e.e)/r,m=(e.b*e.e-e.a*e.f)/r;return{x:i*t+s*n+d,y:o*t+a*n+m}}function hi(e){return e.map(t=>({closed:t.closed,points:t.points.map(n=>({x:n.x,y:n.y}))}))}function yi(e,t,n,r=0){let i=1/0,o=1/0,s=-1/0,a=-1/0;for(let d of e)for(let m of d.points)i=Math.min(i,m.x),o=Math.min(o,m.y),s=Math.max(s,m.x),a=Math.max(a,m.y);return Number.isFinite(i)?{minX:Math.max(0,Math.floor(i-r)),minY:Math.max(0,Math.floor(o-r)),maxX:Math.min(t-1,Math.ceil(s+r)),maxY:Math.min(n-1,Math.ceil(a+r))}:null}function Ps(e,t,n,r){let i=0,o=0;for(let s of e){let a=s.points;if(!(a.length<2))for(let d=1;d<a.length;d++){let m=a[d-1],u=a[d],y=ku(m.x,m.y,u.x,u.y,t,n);i+=y,y!==0&&(o+=1)}}return r==="evenodd"?o%2===1:i!==0}function ku(e,t,n,r,i,o){if(t<=o==r<=o)return 0;let s=e+(o-t)/(r-t)*(n-e);return i<s?r>t?1:-1:0}function Eu(e,t,n,r,i){for(let o of e){let s=o.points;for(let a=1;a<s.length;a++){let d=s[a-1],m=s[a];if(i==="round"){if(Iu(t,n,d.x,d.y,m.x,m.y)<=r)return!0;continue}let u=m.x-d.x,y=m.y-d.y,k=Math.hypot(u,y);if(k===0){if(Math.hypot(t-d.x,n-d.y)<=r)return!0;continue}let R=u/k,T=y/k,b=d.x,x=d.y,F=m.x,U=m.y;i==="square"&&(b-=R*r,x-=T*r,F+=R*r,U+=T*r);let O=F-b,$=U-x,C=O*O+$*$,p=((t-b)*O+(n-x)*$)/C;if(p<0||p>1)continue;let E=b+p*O,c=x+p*$;if(Math.hypot(t-E,n-c)<=r)return!0}}return!1}function Iu(e,t,n,r,i,o){let s=i-n,a=o-r,d=s*s+a*a;if(d===0)return Math.hypot(e-n,t-r);let m=((e-n)*s+(t-r)*a)/d;return m=m<0?0:m>1?1:m,Math.hypot(e-(n+m*s),t-(r+m*a))}function Ru(e,t,n,r,i,o,s,a){for(let d=1;d<=s;d++){let m=d/s,u=1-m;a(u*u*e+2*u*m*n+m*m*i,u*u*t+2*u*m*r+m*m*o)}}function Cu(e,t,n,r,i,o,s,a,d,m){for(let u=1;u<=d;u++){let y=u/d,k=1-y,R=k*k,T=y*y;m(R*k*e+3*R*y*n+3*k*T*i+T*y*s,R*k*t+3*R*y*r+3*k*T*o+T*y*a)}}function xs(e,t,n,r,i,o){let s=r,a=i;!o&&a<s&&(a+=Math.PI*2),o&&s<a&&(s+=Math.PI*2);let d=a-s,m=Math.max(8,Math.min(360,Math.ceil(Math.abs(d)*Math.max(n,1)))),u=[];for(let y=0;y<=m;y++){let k=s+d*y/m;u.push({x:e+Math.cos(k)*n,y:t+Math.sin(k)*n})}return u}function Ms(e){return Number.isFinite(e)?e<0?0:e>1?1:e:1}function ir(e){let t=e.trim().toLowerCase(),r=mu[t]??t;if(r==="transparent")return{r:0,g:0,b:0,a:0};if(r[0]==="#"){let o=r.slice(1);if(o.length===3)return{r:parseInt(o[0]+o[0],16),g:parseInt(o[1]+o[1],16),b:parseInt(o[2]+o[2],16),a:255};if(o.length===6)return{r:parseInt(o.slice(0,2),16),g:parseInt(o.slice(2,4),16),b:parseInt(o.slice(4,6),16),a:255};if(o.length===8)return{r:parseInt(o.slice(0,2),16),g:parseInt(o.slice(2,4),16),b:parseInt(o.slice(4,6),16),a:parseInt(o.slice(6,8),16)}}let i=r.match(/^rgba?\(\s*([0-9.]+)\s*,\s*([0-9.]+)\s*,\s*([0-9.]+)(?:\s*,\s*([0-9.]+))?\s*\)$/);if(i)return{r:bi(Number(i[1])),g:bi(Number(i[2])),b:bi(Number(i[3])),a:i[4]===void 0?255:Math.round(Ms(Number(i[4]))*255)};throw new Ce("fillStyle",e)}function bi(e){return Number.isFinite(e)?e<0?0:e>255?255:Math.round(e):0}function Ns(e){let t=e.match(/([0-9]+(?:\.[0-9]+)?)px/);return t?Number(t[1]):10}function Ts(e,t,n){let r=Ns(t)/n.cellHeight;return e.length*(n.cellWidth+1)*r}function xt(e,t,n){if(typeof ImageData=="function")try{return new ImageData(e,t,n)}catch{try{let r=new ImageData(t,n);return r.data.set(e),r}catch{}}return{data:e,width:t,height:n,colorSpace:"srgb"}}function _s(){let n={" ":new Uint8Array(35)},r={0:[14,17,19,21,25,17,14],1:[4,12,4,4,4,4,14],2:[14,17,1,2,4,8,31],3:[14,17,1,6,1,17,14],4:[2,6,10,18,31,2,2],5:[31,16,30,1,1,17,14],6:[14,16,30,17,17,17,14],7:[31,1,2,4,8,8,8],8:[14,17,17,14,17,17,14],9:[14,17,17,15,1,1,14],A:[14,17,17,31,17,17,17],B:[30,17,17,30,17,17,30],C:[14,17,16,16,16,17,14],D:[30,17,17,17,17,17,30],E:[31,16,16,30,16,16,31],F:[31,16,16,30,16,16,16],G:[14,17,16,23,17,17,14],H:[17,17,17,31,17,17,17],I:[14,4,4,4,4,4,14],K:[17,18,20,24,20,18,17],L:[16,16,16,16,16,16,31],M:[17,27,21,21,17,17,17],N:[17,25,21,19,17,17,17],O:[14,17,17,17,17,17,14],P:[30,17,17,30,16,16,16],R:[30,17,17,30,20,18,17],S:[15,16,16,14,1,1,30],T:[31,4,4,4,4,4,4],U:[17,17,17,17,17,17,14],V:[17,17,17,17,17,10,4],W:[17,17,17,21,21,21,10],Y:[17,17,10,4,4,4,4],Z:[31,1,2,4,8,16,31],".":[0,0,0,0,0,0,4],"-":[0,0,0,31,0,0,0],"+":[0,4,4,31,4,4,0],"*":[0,21,14,31,14,21,0],"!":[4,4,4,4,4,0,4],"?":[14,17,1,2,4,0,4],"/":[1,2,2,4,8,8,16],":":[0,4,0,0,0,4,0],"\u2713":[1,1,2,2,20,8,0]};for(let[i,o]of Object.entries(r)){let s=new Uint8Array(35);for(let a=0;a<7;a++)for(let d=0;d<5;d++)s[a*5+d]=o[a]&1<<4-d?1:0;n[i]=s,n[i.toLowerCase()]=s}return{cellWidth:5,cellHeight:7,glyphs:n}}var Ls=new Uint32Array(256);for(let e=0;e<256;e++){let t=e;for(let n=0;n<8;n++)t=t&1?3988292384^t>>>1:t>>>1;Ls[e]=t>>>0}function Au(e){let t=4294967295;for(let n=0;n<e.length;n++)t=Ls[(t^e[n])&255]^t>>>8;return(t^4294967295)>>>0}function wu(e){let t=1,n=0;for(let r=0;r<e.length;r++)t=(t+e[r])%65521,n=(n+t)%65521;return(n<<16|t)>>>0}function wn(e){return new Uint8Array([e>>>24&255,e>>>16&255,e>>>8&255,e&255])}function vi(e,t){let n=new Uint8Array(8+t.length+4);n.set(wn(t.length),0),n[4]=e.charCodeAt(0),n[5]=e.charCodeAt(1),n[6]=e.charCodeAt(2),n[7]=e.charCodeAt(3),n.set(t,8);let r=n.subarray(4,8+t.length);return n.set(wn(Au(r)),8+t.length),n}function Pu(e){let t=[];for(let s=0;s<e.length;s+=65535){let a=e.subarray(s,Math.min(s+65535,e.length)),d=s+65535>=e.length,m=new Uint8Array(5+a.length);m[0]=d?1:0,m[1]=a.length&255,m[2]=a.length>>>8&255;let u=~a.length&65535;m[3]=u&255,m[4]=u>>>8&255,m.set(a,5),t.push(m)}t.length===0&&t.push(new Uint8Array([1,0,0,255,255]));let r=t.reduce((s,a)=>s+a.length,0),i=new Uint8Array(2+r+4);i[0]=120,i[1]=1;let o=2;for(let s of t)i.set(s,o),o+=s.length;return i.set(wn(wu(e)),o),i}function Qt(e,t,n){let r=e*4,i=new Uint8Array(t*(1+r));for(let y=0;y<t;y++){let k=y*(1+r);i[k]=0,i.set(n.subarray(y*r,(y+1)*r),k+1)}let o=new Uint8Array(13);o.set(wn(e),0),o.set(wn(t),4),o[8]=8,o[9]=6;let s=new Uint8Array([137,80,78,71,13,10,26,10]),a=[vi("IHDR",o),vi("IDAT",Pu(i)),vi("IEND",new Uint8Array(0))],d=s.length+a.reduce((y,k)=>y+k.length,0),m=new Uint8Array(d);m.set(s,0);let u=s.length;for(let y of a)m.set(y,u),u+=y.length;return m}function Zt(e,t,n){let r=Qt(e,t,n),i="";for(let o=0;o<r.length;o++)i+=String.fromCharCode(r[o]);return`data:image/png;base64,${globalThis.btoa(i)}`}function Ii(e){let t=[137,80,78,71,13,10,26,10];for(let m=0;m<8;m++)if(e[m]!==t[m])throw new Ce("decodePng","invalid signature");let n=0,r=0,i=[],o=8;for(;o<e.length;){let m=e[o]<<24|e[o+1]<<16|e[o+2]<<8|e[o+3],u=String.fromCharCode(e[o+4],e[o+5],e[o+6],e[o+7]),y=e.subarray(o+8,o+8+m);if(u==="IHDR"){if(n=y[0]<<24|y[1]<<16|y[2]<<8|y[3],r=y[4]<<24|y[5]<<16|y[6]<<8|y[7],y[8]!==8||y[9]!==6)throw new Ce("decodePng","only 8-bit RGBA is supported")}else if(u==="IDAT")for(let k=0;k<y.length;k++)i.push(y[k]);else if(u==="IEND")break;o+=12+m}let s=xu(new Uint8Array(i)),a=n*4,d=new Uint8ClampedArray(n*r*4);for(let m=0;m<r;m++){let u=m*(1+a);if(s[u]!==0)throw new Ce("decodePng",`unsupported scanline filter ${s[u]}`);d.set(s.subarray(u+1,u+1+a),m*a)}return xt(d,n,r)}function xu(e){if(e.length<6)throw new Ce("decodePng","truncated zlib");let t=[],n=2;for(;n<e.length-4;){let s=e[n]&1;if((e[n]>>>1&3)!==0)throw new Ce("decodePng","only stored deflate blocks are supported");n+=1;let d=e[n]|e[n+1]<<8;if(n+=4,t.push(e.subarray(n,n+d)),n+=d,s)break}let r=t.reduce((s,a)=>s+a.length,0),i=new Uint8Array(r),o=0;for(let s of t)i.set(s,o),o+=s.length;return i}function or(e){let t=e.indexOf(","),n=t>=0?e.slice(t+1):e,r=globalThis.atob(n),i=new Uint8Array(r.length);for(let o=0;o<r.length;o++)i[o]=r.charCodeAt(o);return i}function Vs(){if(!ws){ws=!0;for(let e of["width","height"]){let t=Object.getOwnPropertyDescriptor(HTMLCanvasElement.prototype,e);if(!t?.set||!t.get)continue;let n=t.set;Object.defineProperty(HTMLCanvasElement.prototype,e,{configurable:!0,enumerable:t.enumerable,get:t.get,set(r){n.call(this,r);let i=Xt.get(this);i&&(i.resize(this.width,this.height,!0),i.onDeviceReset?.())}})}}}var Fs=()=>{let e=["ms","moz","webkit","o"];for(let t=0;t<e.length&&!window.requestAnimationFrame;++t)window.requestAnimationFrame=window[e[t]+"RequestAnimationFrame"],window.cancelAnimationFrame=window[e[t]+"CancelAnimationFrame"]||window[e[t]+"CancelRequestAnimationFrame"]},ot=window.devicePixelRatio||1,en=/Headless/i.test(navigator.userAgent),Cy=/Android|webOS|iPhone|iPad|iPod|BlackBerry/i.test(navigator.userAgent)||/Android|webOS|iPhone|iPad|iPod|BlackBerry/i.test(navigator.platform);function $s(){return Math.min(window.innerWidth,window.innerHeight)}var Ri="data-cyberart-canvas",tn=class{constructor(t,n,r=1,i={}){this.width=t,this.height=n;let o=i.container,s=i.adoptFromDocument??!o,a=o?o.querySelector(`canvas[${Ri}]`)??o.querySelector("canvas"):null;if(a)this.canvas=a,this.adopted=!0;else if(s){let d=document.getElementById("canvas")??document.querySelector("canvas");d?(this.canvas=d,this.adopted=!0):(this.canvas=document.createElement("canvas"),this.canvas.setAttribute("id","canvas"),this.adopted=!1)}else this.canvas=document.createElement("canvas"),this.adopted=!1;this.canvas.hasAttribute(Ri)||this.canvas.setAttribute(Ri,""),this.canvas.style.display="block",this.canvas.style.margin="auto",this.ctx=this.canvas.getContext("2d",{colorSpace:"display-p3",alpha:!1}),this.ctx.globalAlpha=r,this.ctx.imageSmoothingEnabled=!1,this.setSize(t,n)}setSize(t,n){this.width=t,this.height=n,this.canvas.width=t,this.canvas.height=n,this.canvas.style.width=`${t/ot}px`,this.canvas.style.height=`${n/ot}px`,this.imageData=this.ctx.createImageData(t,n),this.ctx.putImageData(this.imageData,0,0)}_blank(t=1){let n=t?Math.max(t,.03):1;this.ctx.fillStyle=`rgba(0,0,0,${n})`,this.ctx.fillRect(0,0,this.width,this.height)}clearAll(){this.ctx.save(),this.ctx.globalAlpha=1,this._blank(),this.ctx.restore()}};function sr(e,t){let n=e/t,r,i;return n>1?(r=e,i=~~(e/n)):(i=t,r=~~(t*n)),{width:r,height:i,iWidth:1/r,iHeight:1/i,area:r*i,largeDim:Math.max(r,i),smallDim:Math.min(r,i),aspectRatio:n}}function Bs(e,t=window.innerWidth,n=window.innerHeight){let r=$s(),i,o;return n<t?e>1?t>=r*e?(i=r*e,o=r):(i=t,o=i/e):(i=r*e,o=r):e>1?(i=r,o=r/e):n<r/e?(o=n,i=o*e):(i=r,o=r/e),[i,o]}var Ci=class{constructor(t=!1,n=!0){this.debugMode=t,this.actionMap={},this.listening=n,this.checkKeypress=this.checkKeypress.bind(this),this.registerAction=this.registerAction.bind(this),this.listening&&window.addEventListener("keydown",this.checkKeypress,!1)}checkKeypress({key:t}){this.debugMode&&console.log(`Pressed ${t}`),t in this.actionMap&&this.actionMap[t]()}inject(t){this.checkKeypress({key:t})}registerAction(t,n,r=!1){if(t.length!==1)throw new Error(`Only single-character actions may be registered. Cannot register: ${t}`);if(t in this.actionMap&&!r)throw new Error(`Action already exists for code: ${t}`);this.actionMap[t]=n}destroy(){this.listening&&window.removeEventListener("keydown",this.checkKeypress,!1),this.actionMap={}}},ar=Ci;var Ai=class{constructor(t,n={}){this.x=-1;this.y=-1;this.isDown=!1;this.clicks=[];this.canvas=t,this.listening=n.listen!==!1,this.onPointerDown=this.onPointerDown.bind(this),this.onPointerMove=this.onPointerMove.bind(this),this.onPointerUp=this.onPointerUp.bind(this),this.listening&&(t.addEventListener("pointerdown",this.onPointerDown),t.addEventListener("pointermove",this.onPointerMove),t.addEventListener("pointerup",this.onPointerUp))}toCanvasCoords(t){let n=this.canvas.getBoundingClientRect();return{x:(t.clientX-n.left)*(this.canvas.width/n.width),y:(t.clientY-n.top)*(this.canvas.height/n.height)}}onPointerDown(t){let{x:n,y:r}=this.toCanvasCoords(t);this.x=n,this.y=r,this.isDown=!0,this.clicks.push({x:n,y:r})}onPointerMove(t){let{x:n,y:r}=this.toCanvasCoords(t);this.x=n,this.y=r}onPointerUp(t){let{x:n,y:r}=this.toCanvasCoords(t);this.x=n,this.y=r,this.isDown=!1}hasClick(){return this.clicks.length>0}consumeClick(){return this.clicks.shift()??null}inject(t,n,r){this.x=n,this.y=r,t==="down"?(this.isDown=!0,this.clicks.push({x:n,y:r})):t==="up"&&(this.isDown=!1)}destroy(){this.listening&&(this.canvas.removeEventListener("pointerdown",this.onPointerDown),this.canvas.removeEventListener("pointermove",this.onPointerMove),this.canvas.removeEventListener("pointerup",this.onPointerUp))}},Hs=Ai;function dr(){return{now:()=>performance.now()}}function qs(e=0){let t=e;return{now:()=>t,set(n){t=n},advance(n){t+=n}}}var Pn=(e,t,n,r)=>({now:e,startTime:t,elapsedSinceStart:e-t,deltaSinceLastUpdate:n===null?0:e-n,deltaSinceLastRender:r===null?0:e-r}),cr=class{constructor(t,n,r,i,o,s={}){this.startTime=0;this.lastUpdateAt=null;this.lastRenderAt=null;this.clockOffsetMs=0;this.pauseStartedAt=null;this.renderAnimation=this.renderAnimation.bind(this),this.dimensionContext=sr(t,n),this.R=r,this.gameManager=s.gameManager,this.hostChannel=s.hostChannel,this.clock=s.clock??dr(),this.kind=s.kind??"render",this.keyboardManager=new ar(!1,s.captureKeyboard??!0),this.kind!=="calculation"&&(this.canvas=new tn(this.dimensionContext.width,this.dimensionContext.height,1,s.canvasMount),this.drawingContext=this.canvas.ctx,this.pointerManager=new Hs(this.canvas.canvas,{listen:s.listenToPointer!==!1})),this.animationCart=o;let a=s.customState;this.featureState=o.getDefaultFeatureState?.(this.R,this.dimensionContext,i,this.keyboardManager,a,this.pointerManager,this.gameManager,this.hostChannel),this.cartState=o.getDefaultState(this.R,this.dimensionContext,i,this.keyboardManager,a,this.pointerManager,this.gameManager,this.featureState,this.hostChannel),this.startTime=this.clock.now(),this.canvas?.clearAll()}captureFramebuffer(){let t=this.canvas?.imageData;if(!t)return new ImageData(this.dimensionContext.width,this.dimensionContext.height);let n=new ImageData(t.width,t.height);return n.data.set(t.data),n}restoreFramebuffer(t){let n=this.canvas?.imageData,r=this.drawingContext;return!n||!r||n.width!==t.width||n.height!==t.height||n.data.length!==t.data.length?!1:(n.data.set(t.data),r.putImageData(n,0,0),!0)}setPaused(t){let n=this.clock.now();if(t){this.pauseStartedAt===null&&(this.pauseStartedAt=n);return}this.pauseStartedAt!==null&&(this.clockOffsetMs+=n-this.pauseStartedAt,this.pauseStartedAt=null)}resolveNow(t){let n=this.pauseStartedAt!==null?t-this.pauseStartedAt:0;return t-this.clockOffsetMs-n}getElapsedSinceStart(t=this.clock.now()){return Math.max(0,this.resolveNow(t)-this.startTime)}restoreClock(t,n){this.pauseStartedAt=null,this.lastUpdateAt=null,this.lastRenderAt=null;let r=Math.max(0,t);if(typeof n=="number"&&Number.isFinite(n)){this.startTime=n,this.clockOffsetMs=this.clock.now()-n-r;return}this.clockOffsetMs=0,this.startTime=this.clock.now()-r}getRandomState(){return this.R.getState()}injectKey(t){this.keyboardManager.inject(t)}injectPointer(t,n,r){this.pointerManager?.inject(t,n,r)}async updateAnimationState(t,n,r=this.clock.now()){let i=this.resolveNow(r),o=Pn(i,this.startTime,this.lastUpdateAt,this.lastRenderAt);this.cartState=this.animationCart.update(this.R,t,n,this.dimensionContext,this.cartState,this.keyboardManager,this.pointerManager,this.gameManager,o,this.featureState,this.hostChannel),this.lastUpdateAt=i}async renderAnimation(t,n,r=this.clock.now()){let i=this.resolveNow(r),o=Pn(i,this.startTime,this.lastUpdateAt,this.lastRenderAt),s=this.drawingContext,a=this.canvas?.imageData;this.kind!=="calculation"&&this.animationCart.render&&s&&a&&this.animationCart.render(this.R,t,n,this.dimensionContext,this.cartState,s,a,this.pointerManager,this.gameManager,o,this.featureState,this.hostChannel),this.lastRenderAt=i}getCanvas(){return this.canvas?.canvas}getDrawDetails(){let t=this.canvas?.canvas;if(!t)throw new Error("calculation cart has no canvas");return[t,0,0,this.dimensionContext.width,this.dimensionContext.height]}teardown(){try{this.animationCart.teardown?.(this.cartState,this.featureState)}catch(t){console.error("Error during cart teardown",t)}this.keyboardManager.destroy(),this.pointerManager?.destroy()}};var ur=class extends tn{constructor(t,n,r=1,i=!0,o={}){if(super(t,n,r,o),this.adopted)return;let s=o.container;if(s){this.canvas.parentNode!==s&&s.appendChild(this.canvas);return}if(i){let a=document.getElementById("canvas");a&&a!==this.canvas&&a.parentNode===document.body&&document.body.removeChild(a),document.body.appendChild(this.canvas)}}};function Ks(e){let t=parseInt(e.substring(0,8),16),n=parseInt(e.substring(8,8),16),r=parseInt(e.substring(16,8),16),i=parseInt(e.substring(24,8),16);return{next:()=>{t|=0,n|=0,r|=0,i|=0;let s=(t+n|0)+i|0;return i=i+1|0,t=n^n>>>9,n=r+(r<<3)|0,r=r<<21|r>>>11,r=r+s|0,(s>>>0)/4294967296},getRegs:()=>({a:t,b:n,c:r,d:i}),setRegs:s=>{t=s.a,n=s.b,r=s.c,i=s.d}}}var nn=class{constructor(t){this.seed=t.hash,this.useA=!1,this.genA=Ks(t.hash.substring(2,32)),this.genB=Ks(t.hash.substring(34,32)),this.prngA=this.genA.next,this.prngB=this.genB.next;for(let n=0;n<1e6;n+=2)this.prngA(),this.prngB()}getState(){let t=this.genA.getRegs(),n=this.genB.getRegs();return{seed:this.seed,useA:this.useA,prngA:{a:t.a,b:t.b,c:t.c,d:t.d},prngB:{a:n.a,b:n.b,c:n.c,d:n.d}}}setState(t){if(t.seed!==this.seed)throw new Error(`Random.setState: seed ${t.seed} does not match ${this.seed}`);this.useA=t.useA,this.genA.setRegs(t.prngA),this.genB.setRegs(t.prngB)}r_zero_one(){return this.useA=!this.useA,this.useA?this.prngA():this.prngB()}dec(t,n){return t===void 0?this.r_zero_one():n===void 0?t*this.r_zero_one():t+(n-t)*this.r_zero_one()}int(t,n){return n===void 0&&(n=t,t=0),Math.floor(this.dec(t,n))}bool(t=.5){return this.r_zero_one()<t}sign(){return this.bool()?1:-1}choose(t){return t[this.int(t.length)]}};var js="bafybeicjwcq5lxxtfnyj4p2ugcr7ctyb5wl62cbcechj6tsabdq5whcs7u",Gs="https://salmon-just-firefly-671.mypinata.cloud/ipfs/";function Tu(e){return e.endsWith("/")?e:`${e}/`}var xn=null;function Du(e){return[...Array(e)].map(()=>Math.floor(Math.random()*16).toString(16)).join("")}function Ou(e){return e&&e.length>0?e:[{cid:js}]}function Mu(e){return e.startsWith("0x")?e:`0x${e}`}var Us=/^(0[xX])?[0-9a-fA-F]{64}$/;function Nu(e){let t="",n=2166136261,r=522970236;for(let i=0;t.length<64;i++){for(let o=0;o<e.length;o++)n^=e.charCodeAt(o)+i,n=Math.imul(n,16777619),r^=e.charCodeAt(o)+i*17,r=Math.imul(r,16777619);t+=(n>>>0).toString(16).padStart(8,"0"),t+=(r>>>0).toString(16).padStart(8,"0")}return`0x${t.slice(0,64)}`}function Ws(e){let t=typeof e=="number"?String(e):e;return Us.test(t)?`0x${(t.startsWith("0x")||t.startsWith("0X")?t.slice(2):t).toLowerCase()}`:Nu(t)}function Js(e,t){if(typeof e=="number"||t==="deterministic")return Ws(e);let n=String(e);return Us.test(n)?Ws(n):n.startsWith("0x")||n.startsWith("0X")?n:`0x${n}`}function _u(e){if(!e&&typeof tokenData<"u"&&tokenData?.hash)return{hash:tokenData.hash,tokenId:String(tokenData.tokenId),externalAssetDependencies:Ou(tokenData.externalAssetDependencies),preferredIPFSGateway:Tu(tokenData.preferredIPFSGateway||Gs),preferredArweaveGateway:tokenData.preferredArweaveGateway};let t=typeof window<"u"?new URLSearchParams(window.location.search):new URLSearchParams;return{hash:e?Mu(e):t.get("hash")||`0x${Du(64)}`,tokenId:"18009999",externalAssetDependencies:[{cid:js}],preferredIPFSGateway:Gs}}function wi(e){let t=e?.useCache!==!1;if(t&&xn&&!e?.hash)return xn;let n=_u(e?.hash);return t?xn=n:xn||(xn=n),n}function zs(e){return new Array(32).fill(null).map((t,n)=>parseInt(e.hash.slice(2+n*2,4+n*2),16))}Ti();var gr="$cyberartTa",Ge=class extends Error{constructor(t){super(t),this.name="IncompatibleCartStateError"}},Di={Float32Array,Float64Array,Int8Array,Int16Array,Int32Array,Uint8Array,Uint8ClampedArray,Uint16Array,Uint32Array};function $u(e){for(let t of Object.keys(Di))if(e instanceof Di[t])return t}function na(e){return ArrayBuffer.isView(e)&&!(e instanceof DataView)}function ut(e){if(e===null||typeof e!="object"||Array.isArray(e))return!1;let t=Object.getPrototypeOf(e);return t===Object.prototype||t===null}function Oi(e){return ut(e)?typeof e[gr]=="string"&&Array.isArray(e.d):!1}function Bu(e){return e==null?!1:typeof e=="function"?!0:!(typeof e!="object"||Array.isArray(e)||na(e)||ut(e))}var Hu=new Set(["audioContextStarted","midiSynths","keepRatioPrimed","audioInitStarted","musicSeekApplied"]);function ea(e){return e===null?"null":Oi(e)?String(e[gr]):Array.isArray(e)?"array":ut(e)?"object":typeof e}function qu(e,t){return e===t||e==="null"||t==="null"}function ta(e){return e.trim().toLowerCase().replace(/^0x/,"")}function ra(e,t,n,r){if(!(!n&&!r)&&ta(e)!==ta(t))throw new Ge(`Generative cart state is for seed "${t}", but the live token is "${e}"`)}function rn(e){return typeof e=="number"&&Number.isFinite(e)&&e>0}function ia(e,t){let n=e.dimensions;if(n&&rn(n.width)&&rn(n.height))return n;if(t&&rn(t.width)&&rn(t.height))return{width:t.width,height:t.height};if(ut(e.state)){let r=e.state.containerWidth,i=e.state.containerHeight;if(rn(r)&&rn(i))return{width:r,height:i}}return null}function on(e,t=new WeakSet){if(e===null||typeof e=="string"||typeof e=="boolean")return e;if(typeof e=="number")return Number.isFinite(e)?e:null;if(!(typeof e=="function"||typeof e>"u"||typeof e=="bigint"||typeof e=="symbol")){if(na(e)){let n=$u(e);return n?{[gr]:n,d:Array.from(e)}:void 0}if(typeof e=="object"&&!t.has(e)){t.add(e);try{if(Array.isArray(e)){let i=[],o=0;for(let s of e){let a=on(s,t);a!==void 0&&(i.push(a),o++)}return e.length>0&&o===0?void 0:i}if(!ut(e)||Bu(e))return;let n=Object.keys(e),r={};for(let i of n){if(Hu.has(i))continue;let o=on(e[i],t);o!==void 0&&(r[i]=o)}return n.length>0&&Object.keys(r).length===0?void 0:r}finally{t.delete(e)}}}}function Dn(e){if(Oi(e)){let t=Di[e[gr]];return t?new t(e.d.map(n=>Number(n))):e}if(Array.isArray(e))return e.map(t=>Dn(t));if(ut(e)){let t={};for(let n of Object.keys(e))t[n]=Dn(e[n]);return t}return e}function Mi(e,t,n,r,i=!0){if(i&&n&&r&&n!==r)throw new Ge(`Cart state is for "${r}", but the live cart is "${n}"`);if(!ut(t)){if(i)throw new Ge("Cart state snapshot is empty");return}let o=Object.keys(t);if(o.length===0){if(i)throw new Ge("Cart state snapshot is empty");return}let s=on(e);if(!ut(s)||Object.keys(s).length===0){if(i)throw new Ge("Live cart has no serializable state");return}let a=o.filter(d=>d in s);if(a.length===0){if(i)throw new Ge("Cart state snapshot does not overlap the live cart shape");return}for(let d of a){let m=ea(s[d]),u=ea(t[d]);if(!qu(m,u))throw new Ge(`Cart state field "${d}" has type ${u}, live cart expects ${m}`);if(m==="object"){let y=t[d],k=e[d];ut(y)&&!Oi(y)&&Mi(k,y,void 0,void 0,!1)}}}function oa(e,t){if(!ut(e)||!ut(t))return;let n=on(e);if(ut(n))for(let r of Object.keys(t))r in n&&(e[r]=Dn(t[r]))}function It(e){let t=typeof e=="string"?JSON.parse(e):e;if(!t||typeof t!="object")throw new Ge("Cart state bundle is not an object");if(t.version!==1)throw new Ge(`Unsupported cart state version ${String(t.version)}`);if(typeof t.seed!="string"||typeof t.framesElapsed!="number")throw new Ge("Cart state bundle is missing seed or framesElapsed");return t}var ze="cyberart.asset.ready",We="cyberart.asset.failed";function Mt(e){try{return JSON.parse(JSON.stringify(e))}catch{return e}}function sa(e){return{type:e.status==="ready"?ze:We,kind:"state",payload:e.detail===void 0?{id:e.id}:{id:e.id,detail:e.detail}}}function Gu(e){if(!e||typeof e!="object")return 0;let t=e;return typeof t.startTime=="number"&&typeof t.lastSimulationUpdateAt=="number"?Math.max(0,t.lastSimulationUpdateAt-t.startTime):0}function Wu(e,t){if(typeof window.resizeTo!="function")return!1;try{if(window.top!==window)return!1}catch{return!1}let n=Math.max(1,Math.round(e)),r=Math.max(1,Math.round(t)),i=Math.max(0,window.outerWidth-window.innerWidth),o=Math.max(0,window.outerHeight-window.innerHeight);try{window.resizeTo(n+i,r+o)}catch{return!1}return Math.abs(window.innerWidth-n)<=8&&Math.abs(window.innerHeight-r)<=8}var ju=[[0,0],[16,9],[9,16],[4,3],[3,4],[2,1],[1,2],[3,1],[1,3],[1,1]],_i=ju[0],Uu=_i[0]/_i[1],Ni=30,Ju=120,zu=3840/2160,Yu=2160/3840,hr=class{constructor(t=Ni,n=!1,r=window.innerWidth,i=window.innerHeight,o=!0,s,a={}){this.framesElapsed=0;this.frameRate=Ni;this._paused=!1;this.savedToken=!1;this.prepared=!1;this.loopRunning=!1;this.fallbackAudio=[];this.audioLibrariesInternal=[];this.virtualClock=null;this.scriptedActions=[];this.initialScriptedActions=[];this.appliedActions=[];this.consumedActionIndexes=new Set;this.outboundEvents=[];this.consecutiveErrorCount=0;this.lastErrorLogAt=0;this.reinitStayPaused=!1;this.reinitPending=!1;this.lastExportedFramebuffer=null;this.pinnedOutput=null;this.pinViewportAtImport=null;this.importing=!1;this.drawLoop=this.drawLoop.bind(this),this.loadCart=this.loadCart.bind(this),this.prepareCart=this.prepareCart.bind(this),this.beginPlayback=this.beginPlayback.bind(this),this.reinit=this.reinit.bind(this),this.tuneFramerate=this.tuneFramerate.bind(this),this.container=a.container,this.seed=a.seed,this.captureKeyboard=a.captureKeyboard??!0,this.customState=a.customState,this.hostChannel=a.hostChannel,this.fallbackAudio=fr(a.audio),this.audioLibrariesInternal=this.fallbackAudio,this.kind=a.kind??"render",this.onFrameTiming=a.onFrameTiming;let d=a.deterministic;this.deterministic=!!d;let m=d&&typeof d=="object"?d:{};if(this.deterministic){if(a.clock){let u=a.clock;if(typeof u.advance!="function")throw new Error("deterministic mode requires a virtual clock with advance()");this.virtualClock=u,this.clock=u}else this.virtualClock=qs(m.origin??0),this.clock=this.virtualClock;this.initialScriptedActions=Mt(m.actions??[]),this.scriptedActions=Mt(this.initialScriptedActions)}else this.clock=a.clock??dr();this.isBodyCanvas=this.container?!1:o,this.autoMode=n,this.aspectRatio=Uu,this.selectedAsp=_i,this.isFullscreen=!!document.fullscreenElement,this.updateFrameRate(t),this.tempUnpause=!1,this.synchronous=en,this.containerWidth=r,this.containerHeight=i,this.gameManager=s,this.init(!0)}setGameManager(t){this.gameManager=t}reinit(t){if(!this.importing){if(this.shouldKeepPinnedOutput()){this.fitPinnedCanvas();return}this.reinitPending||(this.reinitStayPaused=this._paused,this.reinitPending=!0),this.paused=!0,clearTimeout(this.reinitTimeout),this.reinitTimeout=setTimeout(()=>{if(this.importing){this.paused=this.reinitStayPaused,this.reinitPending=!1;return}this.updateInProgress?this.reinit(t):(this.requestedAnimationFrame&&cancelAnimationFrame(this.requestedAnimationFrame),this.clearPinnedOutput(),this.init(),this.reloadCart(),this.paused=this.reinitStayPaused,this.reinitPending=!1)},150)}}initSeed(){this.tokenData=this.seed?wi({hash:this.seed,useCache:!1}):wi(),this.rawParams=zs(this.tokenData),this.mintNo=parseInt(this.tokenData.tokenId)%1e6,console.log("token",this.mintNo,this.tokenData.hash)}init(t=!1){t&&this.initSeed(),this.pureAspectUpdate(this.selectedAsp);let n=this.aspectRatio,[r,i]=Bs(n,this.containerWidth,this.containerHeight);r*=ot,i*=ot,this.width=~~r,this.height=~~i,this.atCenterX=this.width/2,this.atCenterY=this.height/2,this.kind!=="calculation"&&(this.mainCanvas?this.mainCanvas.setSize(this.width,this.height):this.mainCanvas=new ur(this.width,this.height,1,this.isBodyCanvas,this.canvasMountOptions()))}loadCart(t){this.prepareCart(t)&&this.beginPlayback()}prepareCart(t){if(this.prepared)return!0;try{let n=~~(this.width/1),r=~~(this.height/this.width*n),i=new nn(this.tokenData),o=new cr(n,r,i,this.rawParams,t,{gameManager:this.gameManager,canvasMount:this.canvasMountOptions(),customState:this.customState,captureKeyboard:this.deterministic?!1:this.captureKeyboard,hostChannel:this.hostChannel,clock:this.clock,listenToPointer:!this.deterministic,kind:this.kind});return this.animation=o,this.animationCart=t,this.paused=!1,this.framesElapsed=0,this.outboundEvents=[],this.scriptedActions=Mt(this.initialScriptedActions),this.appliedActions=[],this.consumedActionIndexes=new Set,this.outboundUnsubscribe?.(),this.outboundUnsubscribe=void 0,this.deterministic&&this.hostChannel&&(this.outboundUnsubscribe=this.hostChannel.onEvent(s=>{this.outboundEvents.push(s)})),this.R=i,this.applyCartFrameRate(t,o),this.resolveAudioLibraries(t),this.prepared=!0,!0}catch(n){return console.error(n),!1}}applyCartFrameRate(t,n){let r=t.metadata,i=r?.frameRate??Ni,o=n.cartState?.visualMode??n.featureState?.visualMode,s=o&&r?.frameRateByVisualMode?r.frameRateByVisualMode[o]:void 0;this.updateFrameRate(typeof s=="number"&&s>0?s:i)}get audioLibraries(){return this.audioLibrariesInternal}get needsAudio(){return this.audioLibrariesInternal.length>0}resolveAudioLibraries(t){this.audioLibrariesInternal=fr(t.metadata?.audio)}async unlockAudio(){if(this.audioLibrariesInternal.length===0)return;let t=mr(this.audioLibrariesInternal);if(en){for(let n of t)await n.load();return}for(let n of t)await n.unlock()}async resumeAudioLibraries(){if(!(this.paused||en))for(let t of mr(this.audioLibrariesInternal))try{await t.resumeIfSuspended()}catch(n){console.error(`Failed to resume audio library "${t.id}" after reload`,n)}}beginPlayback(){!this.prepared||this.loopRunning||(this.prepared=!1,this.loopRunning=!0,this.consecutiveErrorCount=0,!this.deterministic&&(this.requestedAnimationFrame=requestAnimationFrame(this.drawLoop)))}get isPrepared(){return this.prepared}get isLoopRunning(){return this.loopRunning}get isDeterministic(){return this.deterministic}getClock(){return{now:this.clock.now(),framesElapsed:this.framesElapsed,frameRate:this.frameRate}}getRandomState(){return this.requirePreparedAnimation().getRandomState()}schedule(t){this.scriptedActions.push(Mt(t))}async getReplayMetadata(){let t=await this.exportState();return{seed:this.tokenData.hash,clock:this.getClock(),rng:this.getRandomState(),actions:Mt(this.scriptedActions),applied:Mt(this.appliedActions),events:Mt(this.outboundEvents),state:t.state}}async step(t=1){if(!this.deterministic)throw new Error("step() requires createRuntime({ deterministic: true })");this.requirePreparedAnimation(),this.prepared&&!this.loopRunning&&this.beginPlayback(),this.paused=!1;let n=Math.max(0,Math.floor(t));for(let r=0;r<n&&this.animation;r++){let i=this.framesElapsed;if(this.applyScheduledActions(i),await this.processFrame(this.clock.now(),{ignorePause:!0,scheduleNext:!1}),this.framesElapsed===i||(this.virtualClock?.advance(this.targetDrawTime),!this.loopRunning))break}}async advance(t){let n=Math.max(0,Math.round(t/this.targetDrawTime));await this.step(n)}applyScheduledActions(t){let n=this.animation;n&&this.scriptedActions.forEach((r,i)=>{r.atFrame===t&&(this.consumedActionIndexes.has(i)||(this.consumedActionIndexes.add(i),r.type==="pointer"?n.injectPointer(r.pointer.kind,r.pointer.x,r.pointer.y):r.type==="key"?n.injectKey(r.key):r.type==="event"?this.hostChannel?.dispatch(r.event):r.type==="asset"&&this.hostChannel?.dispatch(sa(r)),this.appliedActions.push({frame:t,action:r})))})}get paused(){return this._paused}set paused(t){this._paused!==t&&(this._paused=t,this.animation?.setPaused(t))}async waitUntilUpdateIdle(){for(;this.updateInProgress;)await new Promise(t=>{this.deterministic?queueMicrotask(t):typeof requestAnimationFrame=="function"?requestAnimationFrame(()=>t()):setTimeout(t,0)})}requirePreparedAnimation(){if(!this.animation)throw new Error("No prepared cart");return this.animation}async exportState(){let t=this.requirePreparedAnimation(),n=this._paused;this.paused=!0,await this.waitUntilUpdateIdle();try{this.kind!=="calculation"?this.lastExportedFramebuffer=t.captureFramebuffer():this.lastExportedFramebuffer=null;let r=t.getCanvas();return{version:1,cartId:this.animationCart?.metadata?.id,generative:this.animationCart?.metadata?.generative,seed:this.tokenData.hash,framesElapsed:this.framesElapsed,elapsedSinceStart:t.getElapsedSinceStart(),dimensions:{width:r?.width??this.width,height:r?.height??this.height,cssWidth:this.containerWidth,cssHeight:this.containerHeight,dpr:ot},state:on(t.cartState)}}finally{this.paused=n}}async exportStateJSON(){return JSON.stringify(await this.exportState())}peekExportedFramebuffer(){return this.lastExportedFramebuffer}peekSeed(){return this.tokenData?.hash}isGenerative(){return this.animationCart?.metadata?.generative===!0}async importState(t,n){let r=this.requirePreparedAnimation(),i=It(t),o=this._paused,s=this.loopRunning;this.paused=!0,await this.waitUntilUpdateIdle(),Mi(r.cartState,i.state,this.animationCart?.metadata?.id,i.cartId),ra(this.tokenData.hash,i.seed,this.animationCart?.metadata?.generative,i.generative),clearTimeout(this.reinitTimeout),this.reinitPending=!1,this.importing=!0;let a=ia(i,n?.framebuffer??this.lastExportedFramebuffer);if(a){this.pinOutputSize(a);let u=a.cssWidth??a.width/ot,y=a.cssHeight??a.height/ot;Wu(u,y),this.syncContainerFromDom(),this.pinViewportAtImport={w:this.containerWidth,h:this.containerHeight}}let d=this.customState,m=!1;try{if(this.customState=Dn(i.state),this.unloadCart(),!this.prepareCart(this.animationCart))throw new Error("Failed to prepare cart while loading state");this.animation.cartState!==this.customState&&oa(this.animation.cartState,i.state),this.framesElapsed=i.framesElapsed;let u=this.animation,y=u.cartState,k=typeof i.elapsedSinceStart=="number"?i.elapsedSinceStart:Gu(y);u.restoreClock(k,typeof y?.startTime=="number"?y.startTime:void 0),o&&u.setPaused(!0);let R=n?.framebuffer??this.lastExportedFramebuffer;this.kind!=="calculation"&&(R&&u.restoreFramebuffer(R)?y.keepRatioPrimed=!0:await u.renderAnimation(this.framesElapsed,this.rawParams)),this.fitPinnedCanvas(),m=!0}catch(u){throw this.clearPinnedOutput(),this.customState=d,this.paused=o,this.animationCart&&(this.syncContainerFromDom(),this.init(),this.reloadCart()),u}finally{this.importing=!1,m&&(this.customState=d,this.paused=o,s&&this.beginPlayback())}}unloadCart(){this.loopRunning=!1,this.requestedAnimationFrame&&cancelAnimationFrame(this.requestedAnimationFrame),this.drawLoopTimeout&&clearTimeout(this.drawLoopTimeout),this.animation?.teardown(),this.animation=void 0,this.prepared=!1,this.audioLibrariesInternal=this.fallbackAudio,this.mainCanvas?.clearAll()}reloadCart(t=!1){let n=this.animationCart;if(!n)return;this.pinnedOutput&&(this.clearPinnedOutput(),this.syncContainerFromDom(),this.init());let r=this.reinitPending?this.reinitStayPaused:this._paused;this.unloadCart(),t&&this.initSeed(),this.loadCart(n),this.paused=r,!this.paused&&!en&&this.resumeAudioLibraries()}getFrameRate(){return this.frameRate}updateFrameRate(t){if(this.frameRate=t,t>=1)this.targetDrawTime=1e3/t;else{let r=1/(2-t);this.targetDrawTime=1e3/r}this.drawTime=this.targetDrawTime}canvasMountOptions(){return{container:this.container,adoptFromDocument:!this.container}}syncContainerFromDom(){if(this.container){this.containerWidth=this.container.clientWidth||this.containerWidth,this.containerHeight=this.container.clientHeight||this.containerHeight;return}this.containerWidth=window.innerWidth,this.containerHeight=window.innerHeight}pinOutputSize(t){this.pinnedOutput=t,this.width=~~t.width,this.height=~~t.height,this.atCenterX=this.width/2,this.atCenterY=this.height/2,this.aspectRatio=this.width/this.height,this.mainCanvas&&this.mainCanvas.setSize(this.width,this.height)}shouldKeepPinnedOutput(){return this.pinnedOutput?(this.syncContainerFromDom(),this.viewportMatches(this.pinnedCssSize())?!0:!!(this.pinViewportAtImport&&this.viewportMatches(this.pinViewportAtImport))):!1}pinnedCssSize(){let t=this.pinnedOutput;return{w:t.cssWidth??t.width/ot,h:t.cssHeight??t.height/ot}}viewportMatches(t){return Math.abs(this.containerWidth-t.w)<8&&Math.abs(this.containerHeight-t.h)<8}fitPinnedCanvas(){let t=this.pinnedOutput,n=this.canvas;if(!t||!n)return;this.container&&!this.container.style.position&&(this.container.style.position="relative");let r=this.containerWidth||window.innerWidth,i=this.containerHeight||window.innerHeight,o=t.width/ot,s=t.height/ot;if(o<1||s<1||r<1||i<1)return;let a=Math.min(r/o,i/s),d=o*a,m=s*a;n.style.position="absolute",n.style.left="50%",n.style.top="50%",n.style.transform="translate(-50%, -50%)",n.style.margin="0",n.style.width=`${d}px`,n.style.height=`${m}px`,n.style.imageRendering=Math.abs(a-1)<.01?"auto":"pixelated"}clearPinnedOutput(){let t=this.canvas;this.pinnedOutput=null,this.pinViewportAtImport=null,t&&(t.style.position="",t.style.left="",t.style.top="",t.style.transform="",t.style.imageRendering="",t.style.width="",t.style.height="",t.style.margin="auto")}get canvas(){return this.animation?.getCanvas()??this.mainCanvas?.canvas}destroy(){this.outboundUnsubscribe?.(),this.outboundUnsubscribe=void 0,this.clearPinnedOutput(),this.unloadCart(),clearTimeout(this.reinitTimeout),this.mainCanvas&&!this.mainCanvas.adopted&&this.mainCanvas.canvas.remove()}drawIt(){}tuneFramerate(t){let n=this.lastCall||t;this.lastCall=t,this.drawTime=Math.max(0,this.drawTime+this.targetDrawTime-this.lastCall+n)}async processFrame(t,n={}){let r=n.ignorePause===!0,i=n.scheduleNext!==!1;if(!this.loopRunning&&!r)return;let o=!1,s,a="update",d=this.onFrameTiming,m=0,u=0,y=0;try{if(r||!this.paused||this.tempUnpause){if(!en&&!r&&this.tuneFramerate(t),!this.animation)return;a="update",this.updateInProgress=!0;let R=d?performance.now():0;if(await this.animation.updateAnimationState(this.framesElapsed,this.rawParams,t),d&&(m=performance.now()-R),this.updateInProgress=!1,this.kind!=="calculation"){a="render";let T=d?performance.now():0;await this.animation.renderAnimation(this.framesElapsed,this.rawParams,t),d&&(u=performance.now()-T)}if(this.autoMode&&this.animation.cartState.saveToken&&!this.savedToken&&!new URLSearchParams(window.location.search).get("hash")){let x=localStorage.getItem("goodones"),F=JSON.stringify(x?[...JSON.parse(x),this.tokenData.hash]:[this.tokenData.hash]);localStorage.setItem("goodones",F),this.savedToken=!0,this.mainCanvas&&localStorage.setItem(this.tokenData.hash,this.mainCanvas.canvas.toDataURL("image/png")),window.location.reload(),this.loopRunning=!1;return}this.framesElapsed++,this.tempUnpause&&(this.tempUnpause=!1)}a="draw";let k=d?performance.now():0;this.drawIt(),d&&(y=performance.now()-k)}catch(k){o=!0,s=k,this.handleFrameError(k,a)}finally{this.updateInProgress=!1,d&&!o&&d({frame:this.framesElapsed,updateMs:m,renderMs:u,drawMs:y,totalMs:m+u+y})}o?(this.consecutiveErrorCount++,this.consecutiveErrorCount>=Ju&&(this.loopRunning=!1,this.onError?.(s,{phase:a,consecutive:this.consecutiveErrorCount,stopped:!0}))):this.consecutiveErrorCount=0,!(!this.loopRunning||!i)&&(this.drawLoopTimeout=setTimeout(()=>{this.requestedAnimationFrame=requestAnimationFrame(this.drawLoop)},this.drawTime))}async drawLoop(t){await this.processFrame(t,{scheduleNext:!0})}handleFrameError(t,n){let r=performance.now();r-this.lastErrorLogAt>=1e3&&(this.lastErrorLogAt=r,console.error(`Animation ${n} error:`,t)),this.consecutiveErrorCount===0&&this.onError?.(t,{phase:n,consecutive:1,stopped:!1})}pureAspectUpdate(t){if(t[0]===0&&t[1]===0){let r=this.containerWidth||window.innerWidth,i=this.containerHeight||window.innerHeight,o=r/i;this.aspectRatio=Math.min(zu,Math.max(Yu,o))}else this.aspectRatio=t[0]/t[1]}};var Xu="HostChannel has been destroyed",yr=class{constructor(){this.inbound=[];this.listeners=[];this.closed=!1}dispatch(t){this.requireOpen(),this.inbound.push(t),this.inbound.length>32&&this.inbound.splice(0,this.inbound.length-32)}consume(){if(this.requireOpen(),this.inbound.length===0)return[];let t=this.inbound;return this.inbound=[],t}emit(t){this.requireOpen();for(let n of this.listeners)n(t)}onEvent(t){return this.requireOpen(),this.listeners.push(t),()=>{this.listeners=this.listeners.filter(n=>n!==t)}}clearInbound(){this.requireOpen(),this.inbound=[]}clear(){this.inbound=[],this.listeners=[]}close(){this.closed=!0,this.clear()}requireOpen(){if(this.closed)throw new Error(Xu)}};var je=2,Vi=1,Fi="0.0.5",da="0",ca="1970-01-01T00:00:00.000Z";function Ue(e){if(e===null||typeof e!="object"||Array.isArray(e))return!1;let t=Object.getPrototypeOf(e);return t===Object.prototype||t===null}function vr(e){return JSON.parse(JSON.stringify(e))}function Ee(e,t,n,r){e.push(r?{code:t,detail:n,path:r}:{code:t,detail:n})}function ua(e,t,n){try{let r=JSON.stringify(e);if(r===void 0){Ee(n,"invalid-field",`${t} is not JSON-serializable`,t);return}return JSON.parse(r)}catch{Ee(n,"invalid-field",`${t} is not JSON-serializable`,t);return}}function Ne(e){return typeof e=="string"&&e.length>0}function br(e){return typeof e=="number"&&Number.isFinite(e)}function Qu(e){return typeof e=="string"&&Number.isFinite(Date.parse(e))}function $i(e){return!Ue(e)||typeof e.schemaVersion=="number"?!1:typeof e.version=="number"&&typeof e.seed=="string"&&typeof e.framesElapsed=="number"&&"state"in e}function Sr(e){if(Ue(e)){if(typeof e.schemaVersion=="number")return Number.isInteger(e.schemaVersion)?e.schemaVersion:void 0;if($i(e))return Vi}}function Li(e,t,n){try{return vr(It(e))}catch(r){let i=r instanceof Error?r.message:"engineState is not a cart state bundle";Ee(n,"invalid-engine-state",i,t);return}}function Zu(e,t,n){if(!Ue(e)){Ee(n,"invalid-field","cart must be an object",t);return}Ne(e.id)||Ee(n,"invalid-field","cart.id must be a non-empty string",`${t}.id`),Ne(e.version)||Ee(n,"invalid-field","cart.version must be a non-empty string",`${t}.version`);let r={id:typeof e.id=="string"?e.id:"",version:typeof e.version=="string"?e.version:""};return e.generative!==void 0&&(typeof e.generative!="boolean"?Ee(n,"invalid-field","cart.generative must be a boolean",`${t}.generative`):r.generative=e.generative),r.id&&r.version?r:void 0}function el(e,t,n){if(!Ue(e)){Ee(n,"invalid-field","clock must be an object",t);return}if(!br(e.framesElapsed)){Ee(n,"invalid-field","clock.framesElapsed must be a finite number",`${t}.framesElapsed`);return}let r={framesElapsed:e.framesElapsed};return e.elapsedSinceStart!==void 0&&(br(e.elapsedSinceStart)?r.elapsedSinceStart=e.elapsedSinceStart:Ee(n,"invalid-field","clock.elapsedSinceStart must be a finite number",`${t}.elapsedSinceStart`)),e.now!==void 0&&(br(e.now)?r.now=e.now:Ee(n,"invalid-field","clock.now must be a finite number",`${t}.now`)),e.frameRate!==void 0&&(br(e.frameRate)?r.frameRate=e.frameRate:Ee(n,"invalid-field","clock.frameRate must be a finite number",`${t}.frameRate`)),r}function tl(e,t,n){if(e===void 0)return;if(!Array.isArray(e)){Ee(n,"invalid-field","modules must be an array",t);return}let r=[];return e.forEach((i,o)=>{let s=`${t}[${o}]`;if(!Ue(i)||!Ne(i.id)||!Ne(i.version)){Ee(n,"invalid-field","module refs need non-empty id and version",s);return}r.push({id:i.id,version:i.version})}),r}function nl(e,t,n){if(e===void 0)return;if(!Array.isArray(e)){Ee(n,"invalid-field","assets must be an array",t);return}let r=[];return e.forEach((i,o)=>{let s=`${t}[${o}]`;if(!Ue(i)||!Ne(i.id)){Ee(n,"invalid-field","asset refs need a non-empty id",s);return}let a={id:i.id};i.version!==void 0&&(Ne(i.version)?a.version=i.version:Ee(n,"invalid-field","asset.version must be a non-empty string",`${s}.version`)),i.ref!==void 0&&(Ne(i.ref)?a.ref=i.ref:Ee(n,"invalid-field","asset.ref must be a non-empty string",`${s}.ref`)),r.push(a)}),r}function rl(e,t,n){if(e===void 0)return;if(!Ue(e)||!Ne(e.seed)){Ee(n,"invalid-field","rng must include a seed",t);return}if(!Ue(e.prngA)||!Ue(e.prngB)){Ee(n,"invalid-field","rng must include prngA and prngB",t);return}if(typeof e.useA!="boolean"){Ee(n,"invalid-field","rng.useA must be a boolean",`${t}.useA`);return}return ua(e,t,n)}function il(e,t,n){if(e===void 0)return;if(!Ue(e)){Ee(n,"invalid-field","provenance must be an object",t);return}let r={};if(e.source!==void 0&&(Ne(e.source)?r.source=e.source:Ee(n,"invalid-field","provenance.source must be a non-empty string",`${t}.source`)),e.integrity!==void 0&&(!Ue(e.integrity)||!Ne(e.integrity.alg)||!Ne(e.integrity.hash)?Ee(n,"invalid-field","provenance.integrity needs alg and hash strings",`${t}.integrity`):r.integrity={alg:e.integrity.alg,hash:e.integrity.hash}),e.publisher!==void 0&&(Ne(e.publisher)?r.publisher=e.publisher:Ee(n,"invalid-field","provenance.publisher must be a non-empty string",`${t}.publisher`)),e.version!==void 0&&(Ne(e.version)?r.version=e.version:Ee(n,"invalid-field","provenance.version must be a non-empty string",`${t}.version`)),e.signature!==void 0&&(!Ue(e.signature)||!Ne(e.signature.id)||!Ne(e.signature.alg)?Ee(n,"invalid-field","provenance.signature needs id and alg strings",`${t}.signature`):r.signature={id:e.signature.id,alg:e.signature.alg}),e.grants!==void 0)if(!Array.isArray(e.grants))Ee(n,"invalid-field","provenance.grants must be an array",`${t}.grants`);else{let i=[];e.grants.forEach((o,s)=>{Ne(o)?i.push(o):Ee(n,"invalid-field","provenance.grants entries must be non-empty strings",`${t}.grants[${s}]`)}),r.grants=i}return r}function la(e,t){e.schemaVersion!==void 0&&e.schemaVersion!==je&&Ee(t,"invalid-schema",`defineSnapshot produces schema ${je}`,"schemaVersion"),Ne(e.seed)||Ee(t,"invalid-field","seed must be a non-empty string","seed");let n=e.runtimeVersion===void 0?Fi:e.runtimeVersion;Ne(n)||Ee(t,"invalid-field","runtimeVersion must be a non-empty string","runtimeVersion");let r=e.createdAt===void 0?new Date().toISOString():e.createdAt;Qu(r)||Ee(t,"invalid-field","createdAt must be an ISO-8601 date","createdAt");let i=Zu(e.cart,"cart",t),o=el(e.clock,"clock",t),s=Li(e.engineState,"engineState",t),a=tl(e.modules,"modules",t),d=nl(e.assets,"assets",t),m=rl(e.rng,"rng",t),u=il(e.provenance,"provenance",t),y;if(e.hostState!==void 0&&(y=ua(e.hostState,"hostState",t)),e.hostStateRef!==void 0&&!Ne(e.hostStateRef)&&Ee(t,"invalid-field","hostStateRef must be a non-empty string","hostStateRef"),t.length>0||!i||!o||!s||!Ne(e.seed))return;let k={schemaVersion:je,runtimeVersion:n,cart:i,seed:e.seed,clock:o,engineState:s,createdAt:r};return a&&a.length>0&&(k.modules=a),m&&(k.rng=m),y!==void 0&&(k.hostState=y),Ne(e.hostStateRef)&&(k.hostStateRef=e.hostStateRef),d&&d.length>0&&(k.assets=d),u&&(u.source||u.integrity||u.publisher||u.version||u.signature||u.grants)&&(k.provenance=u),k}function Bi(e){if(!Ue(e))return{ok:!1,errors:[{code:"invalid-snapshot",detail:"Snapshot input is not an object"}]};let t=[],n=la(e,t);return!n||t.length>0?{ok:!1,errors:t}:{ok:!0,snapshot:n}}function kr(e,t){return Ne(e.cartId)?Bi({cart:{id:e.cartId,version:t?.cartVersion??da,generative:e.generative},modules:t?.modules,seed:e.seed,rng:t?.rng,clock:t?.clock??{framesElapsed:e.framesElapsed,elapsedSinceStart:e.elapsedSinceStart},engineState:e,hostState:t?.hostState,hostStateRef:t?.hostStateRef,assets:t?.assets,createdAt:t?.createdAt,provenance:t?.provenance,runtimeVersion:t?.runtimeVersion}):{ok:!1,errors:[{code:"invalid-field",detail:"cart.id is required",path:"cart.id"}]}}function aa(e){let t=vr(e),n={schemaVersion:Vi,engineState:t,seed:t.seed,clock:{framesElapsed:t.framesElapsed,elapsedSinceStart:t.elapsedSinceStart}};return t.cartId&&(n.cart={id:t.cartId,version:da,generative:t.generative}),n}function Hi(e){let t=e;if(typeof e=="string")try{t=JSON.parse(e)}catch{return{ok:!1,errors:[{code:"invalid-json",detail:"Snapshot JSON could not be parsed"}]}}if(!Ue(t))return{ok:!1,errors:[{code:"invalid-snapshot",detail:"Snapshot is not an object"}]};if($i(t))try{return{ok:!0,snapshot:aa(It(t))}}catch(r){return{ok:!1,errors:[{code:"invalid-engine-state",detail:r instanceof Error?r.message:"Cart state bundle is invalid"}]}}let n=Sr(t);if(n===void 0)return{ok:!1,errors:[{code:"invalid-snapshot",detail:"Snapshot is missing schemaVersion and is not a cart state bundle",path:"schemaVersion"}]};if(n===Vi){let r=[],i=Li(t.engineState,"engineState",r);return!i||r.length>0?{ok:!1,errors:r}:{ok:!0,snapshot:aa(i)}}if(n!==je){if(n>je)return{ok:!1,errors:[{code:"unsupported-schema",detail:`Snapshot schema ${n} is newer than ${je}`,path:"schemaVersion"}]};let r=[],i=Li(t.engineState,"engineState",r);return i?{ok:!0,snapshot:{schemaVersion:n,engineState:i,seed:typeof t.seed=="string"?t.seed:i.seed,clock:{framesElapsed:i.framesElapsed,elapsedSinceStart:i.elapsedSinceStart}}}:{ok:!1,errors:r.length?r:[{code:"invalid-snapshot",detail:`Snapshot schema ${n} is missing engineState`,path:"engineState"}]}}return On(t)}function On(e){if(!Ue(e))return{ok:!1,errors:[{code:"invalid-snapshot",detail:"Snapshot is not an object"}]};if(e.schemaVersion!==je)return{ok:!1,errors:[{code:"invalid-schema",detail:`Expected snapshot schema ${je}`,path:"schemaVersion"}]};let t=[],n=la(e,t);return!n||t.length>0?{ok:!1,errors:t}:{ok:!0,snapshot:n}}function sn(e){return e.map(t=>t.detail).join("; ")}function pa(e){if($i(e))return It(e);if(Ue(e)&&e.engineState!==void 0)return It(e.engineState);throw new Error("Legacy snapshot is missing engine state")}function ol(){return[{from:1,to:2,migrate:cl}]}function sl(e){let t=[...e?.migrations??ol()],n=new Map;for(let r of t){if(!Number.isInteger(r.from)||!Number.isInteger(r.to)||r.to!==r.from+1)throw new Error(`Snapshot migration must step from n to n+1 (got ${String(r.from)} \u2192 ${String(r.to)})`);if(typeof r.migrate!="function")throw new Error(`Snapshot migration ${r.from} \u2192 ${r.to} is missing migrate()`);if(n.has(r.from))throw new Error(`Duplicate snapshot migration from schema ${r.from}`);n.set(r.from,r)}return{migrations:t,get(r){return n.get(r)}}}var al=sl();function dl(){return al}function cl(e){let t=pa(e),n=kr(t,{createdAt:ca,runtimeVersion:Fi});if(n.ok===!1)throw new Error(sn(n.errors));return n.snapshot}function fa(e){try{return vr(e)}catch{return}}function ma(e,t=dl()){let n=fa(e);if(n===void 0)return{ok:!1,errors:[{code:"invalid-snapshot",detail:"Snapshot is not JSON-serializable"}]};let r=n,i=Sr(r);if(i===void 0){let o=Hi(r);if(o.ok===!1)return o;r=o.snapshot,i=o.snapshot.schemaVersion}if(i>je)return{ok:!1,errors:[{code:"unsupported-schema",detail:`Snapshot schema ${i} is newer than ${je}`,path:"schemaVersion"}]};if(i===je)return On(r);for(;i<je;){let o=t.get(i);if(!o)return{ok:!1,errors:[{code:"missing-migration",detail:`No snapshot migration from schema ${i} to ${i+1}`,path:"schemaVersion"}]};let s;try{s=o.migrate(fa(r))}catch(d){let m=d instanceof Error?d.message:"Migration threw";return{ok:!1,errors:[{code:"invalid-migration-result",detail:`Migration ${o.from} \u2192 ${o.to} failed: ${m}`,path:"schemaVersion"}]}}let a=Sr(s);if(a!==o.to)return{ok:!1,errors:[{code:"invalid-migration-result",detail:`Migration ${o.from} \u2192 ${o.to} produced schema ${String(a)}`,path:"schemaVersion"}]};if(o.to===je){let d=On(s);if(d.ok===!1)return{ok:!1,errors:[{code:"invalid-migration-result",detail:`Migration ${o.from} \u2192 ${o.to} did not produce a valid snapshot`,path:"schemaVersion"},...d.errors]};r=d.snapshot}else r=s;i=o.to}return On(r)}function ga(e,t){let n=e;if(typeof e=="string")try{n=JSON.parse(e)}catch{return{ok:!1,errors:[{code:"invalid-json",detail:"Snapshot JSON could not be parsed"}]}}if(!n||typeof n!="object")return{ok:!1,errors:[{code:"invalid-snapshot",detail:"Snapshot is not an object"}]};if(typeof n.schemaVersion=="number"){let i=ma(n,t);if(i.ok===!1)return i;try{return{ok:!0,bundle:It(i.snapshot.engineState),snapshot:i.snapshot}}catch(o){return{ok:!1,errors:[{code:"invalid-engine-state",detail:o instanceof Error?o.message:"engineState is not a cart state bundle",path:"engineState"}]}}}try{return{ok:!0,bundle:It(n)}}catch(i){return{ok:!1,errors:[{code:"invalid-engine-state",detail:i instanceof Error?i.message:"Cart state bundle is invalid"}]}}}function ha(e,t){let n=Hi(e);return n.ok===!1?n:ma(n.snapshot,t)}var ul=["image","audio","font","spritesheet"],ll=["timeout","cors","not-found","invalid","aborted","resolver","undeclared","hash-mismatch","unsigned"],Mn="cyberart:fallback/silent",ya="Asset preloader has been destroyed",pl=4,fl=new Set(ul),ml=new Set(ll),gl={timeout:"asset load timed out",cors:"CORS blocked this asset","not-found":"asset was not found",invalid:"asset declaration or resource is invalid",aborted:"asset load was aborted",resolver:"asset resolver failed",undeclared:"asset is not declared on the cart manifest","hash-mismatch":"asset bytes do not match the declared hash",unsigned:"asset bytes are missing or unsigned"};function Ln(e){return typeof e=="string"&&fl.has(e)}function hl(e){return typeof e=="string"&&ml.has(e)}function _n(e){if(!e||typeof e!="object")return!1;let t=e;return typeof t.id=="string"&&typeof t.ref=="string"&&hl(t.code)&&typeof t.message=="string"}function xe(e){return{id:e.id,ref:e.ref,code:e.code,message:e.message&&e.message.length>0?e.message:gl[e.code]}}function an(e,t){return{type:e==="ready"?ze:We,kind:"state",payload:t}}function ba(e){if(!e?.aborted)return;let t=new Error("aborted");throw t.name="AbortError",t}function yl(e){return e instanceof Error&&e.name==="AbortError"||typeof DOMException<"u"&&e instanceof DOMException&&e.name==="AbortError"}function qi(e){return e?{...e}:void 0}function Rt(e){let t={id:e.id,ref:e.ref,type:e.type,url:e.url};return e.integrity!==void 0&&(t.integrity=e.integrity),e.provenance&&(t.provenance=qi(e.provenance)),e.cors!==void 0&&(t.cors=e.cors),e.usedFallback&&(t.usedFallback=!0),e.managed&&(t.managed=!0),t}function Nn(e){return{id:e.id,ref:e.ref,code:e.code,message:e.message}}function bl(e){if(e.state==="ready"){let t={state:"ready",resource:Rt(e.resource)};return e.failure&&(t.failure=Nn(e.failure)),t}return e.state==="failed"?{state:"failed",failure:Nn(e.failure)}:{state:e.state}}function vl(e){let t="";for(let n=0;n<e.length;n++)t+=e[n].toString(16).padStart(2,"0");return t}async function Sl(e){let t=await crypto.subtle.digest("SHA-256",e);return vl(new Uint8Array(t))}function kl(e){let t="";for(let r=0;r<e.length;r++)t+=String.fromCharCode(e[r]);return`data:application/octet-stream;base64,${typeof btoa=="function"?btoa(t):Buffer.from(e).toString("base64")}`}function Er(e){let t=e.declared,n=e.fetchBytes,r=e.hashBytes??Sl;return{async resolve(i,o){ba(o);let s=t[i.ref];if(!s)throw xe({id:i.id,ref:i.ref,code:"undeclared",message:`undeclared asset ref "${i.ref}"`});if(!s.hash||typeof s.hash!="string")throw xe({id:i.id,ref:i.ref,code:"unsigned",message:`unsigned asset "${i.ref}"`});let a=await n(s.url);if(ba(o),!a)throw xe({id:i.id,ref:i.ref,code:"unsigned",message:`no signed bytes for "${s.url}"`});if(await r(a)!==s.hash)throw xe({id:i.id,ref:i.ref,code:"hash-mismatch",message:`hash mismatch for "${i.ref}"`});return{id:i.id,ref:i.ref,type:i.type,url:kl(a),integrity:`sha256-${s.hash}`,cors:"omit",provenance:i.provenance}}}}function El(e){if(!e||typeof e!="object")return xe({id:"",ref:"",code:"invalid",message:"declaration is required"});if(typeof e.id!="string"||e.id.length===0)return xe({id:typeof e.id=="string"?e.id:"",ref:typeof e.ref=="string"?e.ref:"",code:"invalid",message:"id is required"});if(typeof e.ref!="string"||e.ref.length===0)return xe({id:e.id,ref:"",code:"invalid",message:"ref is required"});if(!Ln(e.type))return xe({id:e.id,ref:e.ref,code:"invalid",message:`unsupported type ${String(e.type)}`});if(e.integrity!==void 0&&typeof e.integrity!="string")return xe({id:e.id,ref:e.ref,code:"invalid",message:"integrity must be a string"});if(e.timeoutMs!==void 0&&(typeof e.timeoutMs!="number"||!Number.isFinite(e.timeoutMs)||e.timeoutMs<0))return xe({id:e.id,ref:e.ref,code:"invalid",message:"timeoutMs must be a non-negative finite number"})}function va(e){return{id:e.id,ref:Mn,type:e.type,url:Mn,usedFallback:!0,cors:"omit"}}function Sa(e,t){return _n(t)?{id:e.id,ref:e.ref,code:t.code,message:t.message}:yl(t)?xe({id:e.id,ref:e.ref,code:"aborted"}):xe({id:e.id,ref:e.ref,code:"resolver",message:t instanceof Error?t.message:String(t)})}function ka(e,t){if(!t||typeof t.url!="string"||t.url.length===0)throw xe({id:e.id,ref:e.ref,code:"invalid",message:"resolver returned no url"});if(t.integrity&&e.integrity&&t.integrity!==e.integrity)throw xe({id:e.id,ref:e.ref,code:"invalid",message:"integrity mismatch"});let n=Rt(t);return n.id=e.id,n.ref=t.ref||e.ref,n.type=e.type,!n.integrity&&e.integrity&&(n.integrity=e.integrity),!n.provenance&&e.provenance&&(n.provenance=qi(e.provenance)),n}function dn(e){if(typeof e?.resolver?.resolve!="function")throw new Error("createAssetPreloader: resolver is required");let t=e.emitEvents!==!1,n=e.wallClockTimeout!==!1,r=new Map,i=[],o=new Map,s=new Map,a=new Map,d=new Map,m=new Map,u=new Set,y=!1;function k(w){return w.code==="aborted"||w.code==="timeout"}function R(w,B,G){let D=Sa(w,G);return D.code==="timeout"?D:B.aborted?xe({id:w.id,ref:w.ref,code:"aborted"}):D}function T(w,B){let G=m.get(w);G||(G=new Set,m.set(w,G)),G.add(B)}function b(w){if(w?.state==="ready")return`${w.resource.type}\0${w.resource.ref}`}function x(w,B){for(let[G,D]of m)if(G!==B&&D.has(w))return!0;for(let[G,D]of r)if(G!==B&&b(D)===w)return!0;return!1}function F(w,B){let G=new Set(m.get(w)),D=b(B);D&&G.add(D),m.delete(w);for(let l of G)x(l,w)||a.delete(l)}function U(){let w=0,B=0,G=0,D=0,l={};for(let[v,P]of r)l[v]=bl(P),P.state==="pending"||P.state==="loading"?w+=1:P.state==="failed"?G+=1:(B+=1,(P.resource.usedFallback||P.failure)&&(D+=1));return{total:r.size,pending:w,ready:B,failed:G,fallbacks:D,items:l,failures:i.map(Nn)}}function O(){if(u.size===0)return;let w=U();for(let B of u)B(w)}function $(w){i.push(Nn(w))}function C(w){y||!t||!e.dispatch||e.dispatch(w)}function p(w){if(w?.managed&&w.url.startsWith("blob:")&&!(typeof URL>"u"||typeof URL.revokeObjectURL!="function"))try{URL.revokeObjectURL(w.url)}catch{}}function E(w,B){if(y)return;let G=r.get(w);G?.state==="ready"&&p(G.resource),r.set(w,B),O()}function c(w){if(w.fallback!==void 0)return w.fallback==="silent"?{id:`${w.id}::fallback`,ref:Mn,type:w.type}:typeof w.fallback=="string"?{id:`${w.id}::fallback`,ref:w.fallback,type:w.type}:{...w.fallback,id:typeof w.fallback.id=="string"&&w.fallback.id.length>0?w.fallback.id:`${w.id}::fallback`}}function f(w,B,G){let D=`${w.type}\0${w.ref}`,l=a.get(D);if(l)return B.aborted?Promise.reject(xe({id:w.id,ref:w.ref,code:"aborted"})):(T(G,D),Promise.resolve(Rt(l.resource)));if(B.aborted)return Promise.reject(xe({id:w.id,ref:w.ref,code:"aborted"}));let v=d.get(D);if(!v){let _=new AbortController,N={id:w.id,ref:w.ref,type:w.type};w.integrity!==void 0&&(N.integrity=w.integrity),w.provenance&&(N.provenance=qi(w.provenance)),v={promise:Promise.resolve().then(()=>e.resolver.resolve(N,_.signal)).then(j=>{let H=ka(w,j);if(_.signal.aborted)throw xe({id:w.id,ref:w.ref,code:"aborted"});return a.set(D,{resource:Rt(H)}),H}).catch(j=>{throw Sa(w,j)}).finally(()=>{d.delete(D)}),controller:_,waiters:0},d.set(D,v)}let P=v;return P.waiters+=1,new Promise((_,N)=>{let W=!1,j=(g,S)=>{W||(W=!0,B.removeEventListener("abort",H),P.waiters-=1,S&&P.waiters<=0&&P.controller.abort(),g())},H=()=>{j(()=>N(xe({id:w.id,ref:w.ref,code:"aborted"})),!0)};if(B.aborted){H();return}B.addEventListener("abort",H,{once:!0}),P.promise.then(g=>{if(!W){if(B.aborted){H();return}T(G,D),j(()=>_(Rt(g)),!1)}},g=>{if(!W){if(B.aborted){H();return}j(()=>N(g),!1)}})})}function h(w,B,G){if(B.aborted)return Promise.reject(xe({id:w.id,ref:w.ref,code:"aborted"}));if(w.ref===Mn)return Promise.resolve(va(w));let D=new AbortController,l=()=>D.abort();B.addEventListener("abort",l,{once:!0});let v=w.timeoutMs??e.timeoutMs,P,_=!1;return n&&v!==void 0&&v>0&&Number.isFinite(v)&&(P=setTimeout(()=>{_=!0,D.abort()},v)),f(w,D.signal,G).then(N=>{let W=ka(w,N);return W.id=w.id,W}).catch(N=>{throw _?xe({id:w.id,ref:w.ref,code:"timeout"}):N}).finally(()=>{P!==void 0&&clearTimeout(P),B.removeEventListener("abort",l)})}async function A(w,B,G,D){try{return{resource:await h(w,B,D)}}catch(l){let v=R(w,B,l);if(k(v)||B.aborted||G>=pl)throw v;let P=c(w);if(!P)throw v;if(B.aborted)throw xe({id:w.id,ref:w.ref,code:"aborted"});if(w.fallback==="silent"||P.ref===Mn)return{resource:va(w),failure:v};try{let _=await A(P,B,G+1,D);return{resource:{...Rt(_.resource),id:w.id,usedFallback:!0},failure:v}}catch(_){let N=_n(_)&&!k(_)&&!B.aborted?_:R(w,B,_);throw!k(N)&&!B.aborted&&$(v),N}}}async function L(w,B){if(y)throw new Error(ya);let G=r.get(w.id);if(G?.state==="ready"||G?.state==="failed")return;let D=o.get(w.id);if(D){await D;return}let l=(async()=>{let v=El(w);if(v){E(w.id,{state:"failed",failure:v}),$(v),C(an("failed",{id:w.id,ref:w.ref,failure:v}));return}E(w.id,{state:"loading"});let P=s.get(w.id)??new AbortController;s.has(w.id)||s.set(w.id,P);try{let _=await A(w,P.signal,B,w.id);if(y)return;if(P.signal.aborted){let N=xe({id:w.id,ref:w.ref,code:"aborted"});E(w.id,{state:"failed",failure:N}),$(N),C(an("failed",{id:w.id,ref:w.ref,failure:N}));return}if(_.resource.id=w.id,_.failure){E(w.id,{state:"ready",resource:_.resource,failure:_.failure}),$(_.failure),C(an("failed",{id:w.id,ref:w.ref,failure:_.failure,resource:Rt(_.resource)})),C(an("ready",{id:w.id,ref:_.resource.ref,resource:Rt(_.resource),failure:_.failure}));return}E(w.id,{state:"ready",resource:_.resource}),C(an("ready",{id:w.id,ref:w.ref,resource:Rt(_.resource)}))}catch(_){if(y)return;let N=_n(_)&&!k(_)&&!P.signal.aborted?{...Nn(_),id:w.id}:R(w,P.signal,_);E(w.id,{state:"failed",failure:N}),$(N),C(an("failed",{id:w.id,ref:w.ref,failure:N}))}finally{s.get(w.id)===P&&s.delete(w.id)}})();o.set(w.id,l);try{await l}finally{o.delete(w.id)}}return{async preload(w){if(y)throw new Error(ya);let B=Array.isArray(w)?w:[];for(let G of B)G&&typeof G.id=="string"&&G.id.length>0&&(r.has(G.id)||r.set(G.id,{state:"pending"}),s.has(G.id)||s.set(G.id,new AbortController));return O(),await Promise.all(B.map(G=>L(G,0))),U()},get(w){let B=r.get(w);if(B?.state==="ready")return Rt(B.resource)},getProgress(){return U()},onProgress(w){return u.add(w),()=>{u.delete(w)}},abort(w){if(!y){if(w!==void 0){s.get(w)?.abort();return}for(let B of s.values())B.abort()}},forget(w){if(y)return;if(w===void 0){for(let G of r.values())G.state==="ready"&&p(G.resource);r.clear(),i.length=0,a.clear(),m.clear(),O();return}let B=r.get(w);B?.state==="ready"&&p(B.resource),F(w,B),r.delete(w);for(let G=i.length-1;G>=0;G--)i[G].id===w&&i.splice(G,1);O()},dispose(){if(!y){y=!0;for(let w of s.values())w.abort();s.clear();for(let w of r.values())w.state==="ready"&&p(w.resource);r.clear(),i.length=0,o.clear();for(let w of d.values())w.controller.abort();a.clear(),d.clear(),m.clear(),u.clear()}}}}var Ea=.25;function cn(e){return e.error===void 0?{state:e.state}:{state:e.state,error:e.error}}function Ki(e){return!Number.isFinite(e)||e<0?0:e>1?1:e}function Il(e){return e instanceof Error&&e.message?e.message:String(e)}async function Rl(){let{adaptersFor:e}=await Promise.resolve().then(()=>(Ti(),Zs)),t=e(["tone"]),n=typeof navigator<"u"&&/Headless/i.test(navigator.userAgent);for(let r of t)n?await r.load():await r.unlock()}function Cl(e){if(!e||typeof e!="object")return;let t=e.id;return typeof t=="string"&&t.length>0?t:void 0}function Ia(e={}){let t=e.toneStart??Rl,n=!!e.reducedSensory,r=new Set,i=new Map,o=new Map,s=new Map,a=[],d={state:"locked"},m,u=!1,y=!1;function k(O){for(let $ of a.slice())$(O)}function R(O,$){let C=i.get(O);if(C)return $&&!C.participantId&&(C.participantId=$),C;let p={id:O,participantId:$,gain:1,muted:!1,duckGain:1,priority:0,manualDuck:!1};return i.set(O,p),p}function T(O){return u||O.muted?0:Ki(O.gain*O.duckGain)}function b(O){return{id:O.id,participantId:O.participantId,gain:O.gain,muted:O.muted,duckGain:O.duckGain,priority:O.priority,effectiveGain:T(O)}}function x(){let O=-1/0;for(let $ of s.values())$.priority>O&&(O=$.priority);for(let $ of i.values())if(!$.manualDuck){if(O===-1/0){$.duckGain=1;continue}$.duckGain=$.priority<O?Ea:1}}async function F(){if(y||d.state==="unlocked")return cn(d);if(m)return await m,cn(d);d={state:"unlocking"},m=(async()=>{try{await t(),d={state:"unlocked"}}catch(O){d={state:"failed",error:Il(O)}}})();try{await m}finally{m=void 0}return cn(d)}return{unlock:F,status(){return cn(d)},authorize(O){y||typeof O!="string"||O.length===0||r.add(O)},revoke(O){y||r.delete(O)},isAuthorized(O){return O===void 0||O.length===0?r.size===0:r.size===0?!0:r.has(O)},setChannelGain(O,$,C){y||typeof O!="string"||O.length===0||(R(O,C).gain=Ki($))},setPriority(O,$,C){y||typeof O!="string"||O.length===0||(R(O,C).priority=Number.isFinite($)?$:0,x())},mute(){y||(u=!0,k({type:"mute"}))},unmute(){y||(u=!1,k({type:"mute"}))},muteChannel(O,$){y||typeof O!="string"||O.length===0||(R(O,$).muted=!0,k({type:"mute"}))},unmuteChannel(O){if(y)return;let $=i.get(O);$&&($.muted=!1,k({type:"mute"}))},duck(O,$=Ea){if(y||typeof O!="string"||O.length===0)return;let C=R(O);C.manualDuck=!0,C.duckGain=Ki($)},unduck(O){if(y)return;let $=i.get(O);$&&($.manualDuck=!1,x())},effectiveGain(O){let $=i.get(O);return $?T($):u?0:1},handleHostEvent(O){if(y||!O||typeof O!="object")return;let $=Cl(O.payload);if($){if(O.type===ze){o.set($,"ready"),k({type:"asset",id:$,status:"ready"});return}O.type===We&&(o.set($,"failed"),k({type:"asset",id:$,status:"failed"}))}},assetStatus(O){return o.get(O)},noteCueStarted(O){if(y)return;s.set(O.idempotencyKey,{idempotencyKey:O.idempotencyKey,channelId:O.channelId,participantId:O.participantId,priority:O.priority});let $=R(O.channelId,O.participantId);O.priority>$.priority&&($.priority=O.priority),x()},noteCueEnded(O){s.delete(O)&&x()},teardown(O){if(!y&&!(typeof O!="string"||O.length===0)){r.delete(O);for(let[$,C]of[...s.entries()])C.participantId===O&&s.delete($);for(let[$,C]of[...i.entries()])C.participantId===O&&i.delete($);x(),k({type:"teardown",participantId:O})}},onNotice(O){return a.push(O),()=>{let $=a.indexOf(O);$>=0&&a.splice($,1)}},inspect(){let O=[...o.entries()].sort(([C],[p])=>C<p?-1:C>p?1:0),$={};for(let[C,p]of O)$[C]=p;return{status:cn(d),reducedSensory:n,muted:u,authorized:[...r].sort(),channels:[...i.values()].sort((C,p)=>C.id<p.id?-1:C.id>p.id?1:0).map(b),assets:$}},destroy(){y||(y=!0,s.clear(),i.clear(),r.clear(),k({type:"destroy"}),a.length=0)},get reducedSensory(){return n},get muted(){return u}}}function Ra(e,t){let n=e.dispatch.bind(e);e.dispatch=r=>{t.handleHostEvent(r),n(r)}}function Ir(e){Fs();let{container:t,seed:n,captureKeyboard:r=!1,audio:i,deterministic:o,assets:s,audioBroker:a,audioParticipantId:d,kind:m="render",onFrameTiming:u}=e,y=n===void 0?void 0:Js(n,o?"deterministic":"live"),k=new yr;if(a&&(Ra(k,a),d&&a.authorize(d)),s&&typeof s.resolver?.resolve!="function")throw new Error("createRuntime: assets.resolver is required");let R=s?dn({resolver:s.resolver,timeoutMs:s.timeoutMs,emitEvents:s.emitEvents??!o,wallClockTimeout:!o,dispatch:f=>k.dispatch(f)}):void 0,T=!1,b=null,x,F=u,U=!1,O=t.clientWidth||window.innerWidth,$=t.clientHeight||window.innerHeight,C=new hr(30,!1,O,$,!1,void 0,{container:t,seed:y,captureKeyboard:r,hostChannel:k,audio:i,deterministic:o,kind:m,onFrameTiming:u}),p=()=>{let f=t.clientWidth||window.innerWidth,h=t.clientHeight||window.innerHeight;return f===C.containerWidth&&h===C.containerHeight?!1:(C.containerWidth=f,C.containerHeight=h,!0)},E=null;return!C.isDeterministic&&typeof ResizeObserver<"u"&&(E=new ResizeObserver(()=>{if(T||!b)return;p()&&U&&C.reinit()}),E.observe(t)),C.onError=(f,h)=>{x?.(f,h)},{get tokenData(){return C.tokenData},get hostChannel(){return k},get assets(){return R},get audioBroker(){return a},get kind(){return m},get onError(){return x},set onError(f){x=f},get onFrameTiming(){return F},set onFrameTiming(f){F=f,C.onFrameTiming=f},mount(f,h={}){if(T)throw new Error("createRuntime: cannot mount on a destroyed runtime");b?.destroy(),U=!1,C.customState=h.initialState,C.setGameManager(h.gameManager);let A=h.onEvent?k.onEvent(h.onEvent):()=>{};if(a&&d&&a.authorize(d),!C.prepareCart(f))throw A(),new Error("createRuntime: failed to prepare cart");let L=!1,w={async start(){if(!L){if(p()&&C.isPrepared&&(C.init(),C.unloadCart(),!C.prepareCart(f)))throw new Error("createRuntime: failed to prepare cart");C.needsAudio&&(a?await a.unlock():await C.unlockAudio(),L)||(U=!0,C.beginPlayback())}},pause(){L||(C.paused=!0)},resume(){L||(C.paused=!1)},dispatch(B){L||k.dispatch(B)},snapshot(){if(L)return{seed:"",pngDataUrl:""};let B=C.canvas;return{seed:C.tokenData.hash,metadata:f.metadata,pngDataUrl:B?B.toDataURL("image/png"):""}},destroy(){L||(L=!0,U=!1,A(),k.clearInbound(),C.unloadCart(),b===w&&(b=null))},reload(){if(!L){if(!U){if(C.isPrepared&&(C.unloadCart(),!C.prepareCart(f)))throw new Error("createRuntime: failed to prepare cart");return}C.reloadCart()}},reinit(B){if(!L){if(!U){p();return}C.reinit(B)}},getCartState(){return C.animation?.cartState},exportState(){return L?Promise.reject(new Error("Cart handle has been destroyed")):C.exportState()},exportStateJSON(){return L?Promise.reject(new Error("Cart handle has been destroyed")):C.exportStateJSON()},async importState(B,G){if(L)throw new Error("Cart handle has been destroyed");let D=B,l=B;if(typeof B=="string")try{l=JSON.parse(B)}catch{await C.importState(B,G);return}if(l&&typeof l=="object"&&typeof l.schemaVersion=="number"){let v=ga(l);if(v.ok===!1)throw new Ge(sn(v.errors));await C.importState(v.bundle,G);return}await C.importState(typeof D=="string"?D:l,G)},async exportSnapshot(B){if(L)throw new Error("Cart handle has been destroyed");let G=await C.exportState(),D=C.getClock(),l=kr(G,{...B,rng:C.getRandomState(),clock:{framesElapsed:G.framesElapsed,elapsedSinceStart:G.elapsedSinceStart,now:D.now,frameRate:D.frameRate}});if(l.ok===!1)throw new Ge(sn(l.errors));return l.snapshot},async exportSnapshotJSON(B){return JSON.stringify(await w.exportSnapshot(B))},async importSnapshot(B,G){if(L)throw new Error("Cart handle has been destroyed");let D=ha(B);if(D.ok===!1)throw new Ge(sn(D.errors));await C.importState(D.snapshot.engineState,G)},peekExportedFramebuffer(){return L?null:C.peekExportedFramebuffer()},peekSeed(){if(!L)return C.peekSeed()},isGenerative(){return L?!1:C.isGenerative()},async step(B=1){if(L)throw new Error("Cart handle has been destroyed");await C.step(B)},async advance(B){if(L)throw new Error("Cart handle has been destroyed");await C.advance(B)},schedule(B){L||C.schedule(B)},getClock(){if(L)throw new Error("Cart handle has been destroyed");return C.getClock()},getRandomState(){if(L)throw new Error("Cart handle has been destroyed");return C.getRandomState()},getReplayMetadata(){return L?Promise.reject(new Error("Cart handle has been destroyed")):C.getReplayMetadata()},get canvas(){return C.canvas},get paused(){return C.paused},set paused(B){L||(C.paused=B)},get tokenData(){return C.tokenData},get isPrepared(){return C.isPrepared},get isLoopRunning(){return C.isLoopRunning},get needsAudio(){return C.needsAudio},get audioLibraries(){return C.audioLibraries}};return b=w,w},async unlockAudio(){if(a){C.needsAudio&&await a.unlock();return}await C.unlockAudio()},destroy(){T||(T=!0,b?.destroy(),b=null,a&&d&&a.teardown(d),E?.disconnect(),E=null,R?.dispose(),k.close(),C.destroy())}}}var Ca="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAADUlEQVR42mP8z8BQDwAEhQGAhKmMIQAAAABJRU5ErkJggg==",Aa=320,wa=180,Al="Headless harness has been destroyed",Pa=!1;function Rr(e={}){if(e.glyphAtlas&&ki(e.glyphAtlas),typeof globalThis.ImageData>"u"){class n{constructor(i,o,s){this.colorSpace="srgb";typeof i=="number"?(this.width=i,this.height=o??0,this.data=new Uint8ClampedArray(this.width*this.height*4)):(this.data=i,this.width=o??0,this.height=s??i.length/4/this.width)}}globalThis.ImageData=n}Vs();let t=HTMLCanvasElement.prototype;t.getContext=function(r,i){return String(r??"2d").toLowerCase()!=="2d"?null:Ei(this,{alpha:i?.alpha!==!1,glyphAtlas:e.glyphAtlas})},t.toDataURL=function(r){if(r&&r!=="image/png")throw new Ce(`toDataURL(${r})`);return Os(this)??Ca},Pa=!0}function wl(e,t){let n=document.createElement("div");return Object.defineProperty(n,"clientWidth",{value:e,configurable:!0}),Object.defineProperty(n,"clientHeight",{value:t,configurable:!0}),document.body.appendChild(n),n}function Pl(e){let t=e.indexOf(","),n=t>=0?e.slice(t+1):e,r=globalThis.atob(n),i=new Uint8Array(r.length);for(let o=0;o<r.length;o++)i[o]=r.charCodeAt(o);return i}function xl(){return typeof process<"u"&&!!process.versions?.node}async function Tl(e,t){if(!xl())throw new Error("captureFrame(path) requires Node.js; omit the path to get the snapshot only");let n;try{({writeFile:n}=await import("node:fs/promises"))}catch(r){let i=r instanceof Error?r.message:String(r);throw new Error(`captureFrame(path) could not load node:fs/promises (${i}). Omit the path, or run under Node.`)}try{await n(e,Pl(t))}catch(r){let i=r instanceof Error?r.message:String(r);throw new Error(`captureFrame could not write ${e}: ${i}`)}}function Dl(e){Pa||Rr();let t=e.width??Aa,n=e.height??wa,r=wl(t,n),i=[],o=[],s=!1,a=e.onEvent,d=e.onError,m=Ir({container:r,seed:e.seed,deterministic:{origin:e.origin,actions:e.actions??[]}});m.onError=(T,b)=>{o.push({error:T,info:b}),d?.(T,b)},Object.defineProperty(m,"onError",{configurable:!0,enumerable:!0,get(){return d},set(T){d=T}});let u=T=>{i.push(T),a?.(T)},y=m.mount(e.cart,{initialState:e.initialState,gameManager:e.gameManager,onEvent:u}),k=()=>{if(s)throw new Error(Al)};return{runtime:m,container:r,get events(){return i.slice()},get errors(){return o.slice()},get cart(){return y},async step(T=1){k(),await y.step(T)},async advance(T){k(),await y.advance(T)},schedule(T){k(),y.schedule(T)},dispatch(T){k(),y.dispatch(T)},start(){return k(),y.start()},pause(){k(),y.pause()},resume(){k(),y.resume()},get paused(){return y.paused},key(T){k(),y.schedule({type:"key",atFrame:y.getClock().framesElapsed,key:T})},click(T,b){k(),y.schedule({type:"pointer",atFrame:y.getClock().framesElapsed,pointer:{kind:"down",x:T,y:b}})},async inspect(){k();let T=await y.getReplayMetadata();return{state:T.state,events:i.slice(),errors:o.slice(),replay:T,clock:y.getClock()}},async captureFrame(T){k();let b=y.snapshot();return T&&await Tl(T,b.pngDataUrl),b},remount(T={}){return k(),i.length=0,o.length=0,"onEvent"in T&&(a=T.onEvent),y=m.mount(e.cart,{initialState:T.initialState??e.initialState,gameManager:T.gameManager??e.gameManager,onEvent:u}),y},destroy(){if(!s){s=!0;try{y.destroy()}finally{try{m.destroy()}finally{r.remove()}}}}}}var xa="CYBERART_UPDATE_GOLDEN";function Ta(e=typeof process<"u"?process.env:void 0){let t=e?.[xa];return t==="1"||t==="true"}function Gi(e){return Ii(or(e))}function Da(e,t,n={}){if(e.width!==t.width||e.height!==t.height){let u=Ml(e,t);return{match:!1,differingPixels:e.width*e.height,width:e.width,height:e.height,artifacts:u,updatedGolden:!1}}let r=n.tolerance??0,i=n.perceptualThreshold,o=n.maxDifferingPixels??0,s=new Uint8ClampedArray(e.width*e.height*4),a=0;for(let u=0;u<e.data.length;u+=4){let y=Math.abs(e.data[u]-t.data[u]),k=Math.abs(e.data[u+1]-t.data[u+1]),R=Math.abs(e.data[u+2]-t.data[u+2]),T=Math.abs(e.data[u+3]-t.data[u+3]),b=.299*y+.587*k+.114*R,x=n.alphaTolerance??r;(i!==void 0?b<=i&&T<=x:y<=r&&k<=r&&R<=r&&T<=x)?(s[u]=0,s[u+1]=0,s[u+2]=0,s[u+3]=255):(a+=1,s[u]=255,s[u+1]=0,s[u+2]=255,s[u+3]=255)}let d=Wi(t,e,xt(s,e.width,e.height),a);return n.updateGolden===!0||Ta()?{match:!0,differingPixels:0,width:e.width,height:e.height,artifacts:Wi(e,e,xt(s,e.width,e.height),0),updatedGolden:!0}:{match:a<=o,differingPixels:a,width:e.width,height:e.height,artifacts:d,updatedGolden:!1}}function Oa(e,t,n={}){let r=Da(e,t,n);if(!r.match){let i=new Error(`Visual assertion failed: ${r.differingPixels} differing pixels (${r.width}\xD7${r.height}). Review expected/actual/diff PNG buffers on the result.`);throw i.visual=r,i}return r}function Ol(e,t,n={}){return Oa(Gi(e),Gi(t),n)}function Wi(e,t,n,r){let i=Qt(e.width,e.height,e.data),o=Qt(t.width,t.height,t.data),s=Qt(n.width,n.height,n.data);return{expectedPng:i,actualPng:o,diffPng:s,expectedDataUrl:Zt(e.width,e.height,e.data),actualDataUrl:Zt(t.width,t.height,t.data),diffDataUrl:Zt(n.width,n.height,n.data),differingPixels:r}}function Ml(e,t){let n=Math.max(e.width,t.width),r=Math.max(e.height,t.height),i=new Uint8ClampedArray(n*r*4);for(let o=0;o<i.length;o+=4)i[o]=255,i[o+1]=0,i[o+2]=255,i[o+3]=255;return Wi(t,e,xt(i,n,r),n*r)}async function Nl(e,t,n={}){let{mkdir:r,writeFile:i}=await import("node:fs/promises"),{join:o}=await import("path");await r(e,{recursive:!0});let s=o(e,n.expected??"expected.png"),a=o(e,n.actual??"actual.png"),d=o(e,n.diff??"diff.png");return await i(s,t.expectedPng),await i(a,t.actualPng),await i(d,t.diffPng),{expectedPath:s,actualPath:a,diffPath:d}}var Ma="cyberart.state.save",Na="cyberart.state.load";var Cr=1,Tt="cyberart.diagnostic.rejected",ji=8,_l=new Set(["intent","state","diagnostic"]),Ll=new Set([Ma,Na]);function Ar(e){return typeof e=="string"&&_l.has(e)}function Vl(e){if(e.kind!==void 0)return Ar(e.kind)?e.kind:void 0;if(!(typeof e.type!="string"||e.type.length===0)){if(Ll.has(e.type))return"intent";for(let t of e.type.split("."))if(Ar(t))return t}}function Fl(e,t){let n=e.split("."),r=t.split(".");if(n.length!==r.length)return!1;for(let i=0;i<n.length;i++)if(n[i]!=="*"&&n[i]!==r[i])return!1;return!0}function Bt(e,t){for(let n of e)if(Fl(n,t))return!0;return!1}function $l(e){if(e===void 0)return{ok:!0,value:void 0};try{return{ok:!0,value:JSON.parse(JSON.stringify(e))}}catch{return{ok:!1}}}function Ui(e,t){if(!e||typeof e.type!="string"||e.type.length===0)return{ok:!1,reason:"malformed",detail:"type is required"};if(e.schemaVersion!==void 0&&e.schemaVersion!==Cr)return{ok:!1,reason:"malformed",detail:`unsupported schemaVersion ${String(e.schemaVersion)}`};let n=Vl(e);if(!n)return{ok:!1,reason:"malformed",detail:`cannot infer kind from type "${e.type}"`};let r=$l(e.payload);if(!r.ok)return{ok:!1,reason:"malformed",detail:"payload is not JSON-serializable"};let i=t.createId(),o=typeof e.correlationId=="string"&&e.correlationId.length>0?e.correlationId:i,s=typeof e.causationId=="string"&&e.causationId.length>0?e.causationId:t.causationId,a=typeof e.target=="string"&&e.target.length>0?e.target:void 0,d=t.maxHops??ji,m=t.parentHops===void 0?d:Math.max(0,t.parentHops-1),u=typeof e.idempotencyKey=="string"&&e.idempotencyKey.length>0?e.idempotencyKey:void 0,y={schemaVersion:Cr,type:e.type,kind:n,source:t.source,id:i,correlationId:o,seq:t.seq,hops:m};return a&&(y.target=a),s&&(y.causationId=s),u&&(y.idempotencyKey=u),r.value!==void 0&&(y.payload=r.value),{ok:!0,envelope:y}}var Bl=new Set(["rate-limited","storm-detected","hop-limit","loop-detected","not-subscribed"]),Hl=8,ql=8,Kl=16,Gl=256,Wl=256,jl=["*.intent.*"];function _a(e={}){let t=e.hostSource??"host",n="router",r=e.maxPerTurn??Hl,i=e.maxCausationDepth??ql,o=e.maxHops??ji,s=e.maxCorrelationPerTurn??Kl,a=e.maxIndex??Gl,d=e.maxDecisions??Wl,m=e.maxPerWindow,u=e.windowMs??1e3,y=e.now??Date.now,k=0,R=e.createId??(()=>`evt-${++k}`),T=new Map,b=[],x=[],F=new Map,U=new Map,O=new Map,$=[],C=0,p=0,E=0;function c(V){try{return JSON.parse(JSON.stringify(V))}catch{return V}}function f(V){for($.push(V);$.length>d;)$.shift();for(let z of x)try{z(c(V))}catch{}}function h(V,z){let ne={outcome:z.outcome,source:z.source,type:V.type,kind:V.kind,envelopeId:V.id,deliveredTo:z.deliveredTo,hops:V.hops,seq:V.seq,correlationId:V.correlationId,schemaVersion:V.schemaVersion,turn:E,time:y()};return z.reason&&(ne.reason=z.reason),z.detail&&(ne.detail=z.detail),z.priorEnvelopeId&&(ne.priorEnvelopeId=z.priorEnvelopeId),V.target&&(ne.target=V.target),V.causationId&&(ne.causationId=V.causationId),V.idempotencyKey&&(ne.idempotencyKey=V.idempotencyKey),V.payload!==void 0&&(ne.payload=c(V.payload)),ne}let A=[],L=!1;function w(V,z,ne){for(V.set(z,ne);V.size>a;){let re=V.keys().next().value;if(re===void 0)break;V.delete(re)}}function B(V){w(F,V.id,{type:V.type,source:V.source,causationId:V.causationId,hops:V.hops,correlationId:V.correlationId,idempotencyKey:V.idempotencyKey})}function G(V,z){z&&(V.correlationId||(V.correlationId=z.correlationId),V.causationId||(V.causationId=z.id),!V.idempotencyKey&&z.idempotencyKey&&(V.idempotencyKey=`${z.idempotencyKey}::${V.type}`))}function D(V,z){if(V){let ne=F.get(V);return ne?ne.hops:o}return z}function l(V,z){return`${V}\0${z}`}function v(V,z){V.idempotencyKey&&w(O,l(V.source,V.idempotencyKey),z)}function P(V,z){if(z)return O.get(l(V,z))}function _(V){return P(V.source,V.idempotencyKey)}function N(V){return V.seq+=1,V.seq}function W(V,z){if(!(typeof z.causationId=="string"&&z.causationId.length>0))return V.lastDelivered}function j(V){let z=new Set,ne=new Set([`${V.type}\0${V.source}`]),re=V.causationId,oe=0;for(;re;){if(oe+=1,oe>i||z.has(re))return!0;z.add(re);let fe=F.get(re);if(!fe)break;let He=`${fe.type}\0${fe.source}`;if(ne.has(He))return!0;ne.add(He),re=fe.causationId}return!1}function H(V){let z=(U.get(V)??0)+1;return U.set(V,z),z}function g(V,z){m!==void 0&&(V.emitTimestamps=V.emitTimestamps.filter(ne=>z-ne<u))}function S(V,z){return(z.kind==="state"||z.kind==="diagnostic")&&!V.authoritative?!1:Bt(V.emit,z.type)}function I(V){for(let z of b)if(Bt(z.patterns,V.type))try{z.listener(V)}catch{}}function M(V){let z=[];if(V.target){let ne=T.get(V.target);return!ne||!Bt(ne.subscribe,V.type)||(ne.channel.dispatch(V),ne.lastDelivered={id:V.id,hops:V.hops,correlationId:V.correlationId,idempotencyKey:V.idempotencyKey},z.push(ne.id)),z}for(let ne of T.values())Bt(ne.subscribe,V.type)&&(ne.channel.dispatch(V),ne.lastDelivered={id:V.id,hops:V.hops,correlationId:V.correlationId,idempotencyKey:V.idempotencyKey},z.push(ne.id));return z}function q(V,z,ne,re,oe,fe,He){let Le={reason:re,eventType:z,source:ne};oe&&(Le.detail=oe),p+=1;let Je=R(),Et={schemaVersion:Cr,type:Tt,kind:"diagnostic",source:n,id:Je,correlationId:fe??Je,seq:p,hops:0,payload:Le};He&&(Et.causationId=He),B(Et);let $t=T.get(V);$t&&$t.channel.dispatch(Et),I(Et)}function X(V,z,ne,re,oe){if(q(V,oe?.type??(typeof z.type=="string"?z.type:""),oe?.source??V,ne,re,oe?.correlationId,oe?.id),oe?.idempotencyKey&&!Bl.has(ne)&&v(oe,{status:"rejected"}),oe)f(h(oe,{outcome:"rejected",reason:ne,detail:re,source:V,deliveredTo:[]}));else{let fe={outcome:"rejected",reason:ne,source:V,type:typeof z.type=="string"?z.type:"",deliveredTo:[],turn:E,time:y()};re&&(fe.detail=re),typeof z.idempotencyKey=="string"&&(fe.idempotencyKey=z.idempotencyKey),f(fe)}}function J(V,z){B(V),v(V,{status:"accepted",envelope:V}),H(V.correlationId),I(V);let ne=M(V);f(h(V,{outcome:"accepted",source:z,deliveredTo:ne}))}function Z(V,z,ne,re){let oe=re?.type??(typeof z.type=="string"?z.type:""),fe={outcome:"duplicate",reason:"duplicate",detail:ne.status==="accepted"?"idempotent accepted":"idempotent rejected",source:V,type:oe,deliveredTo:[],turn:E,time:y()};re?(fe.kind=re.kind,fe.envelopeId=re.id,fe.hops=re.hops,fe.seq=re.seq,fe.correlationId=re.correlationId,fe.schemaVersion=re.schemaVersion,re.target&&(fe.target=re.target),re.causationId&&(fe.causationId=re.causationId),re.idempotencyKey&&(fe.idempotencyKey=re.idempotencyKey),re.payload!==void 0&&(fe.payload=c(re.payload))):typeof z.idempotencyKey=="string"&&(fe.idempotencyKey=z.idempotencyKey),ne.status==="accepted"&&(fe.priorEnvelopeId=ne.envelope.id,fe.envelopeId||(fe.envelopeId=ne.envelope.id)),f(fe)}function Q(V,z,ne,re){if(!ne.ok){X(V,z,"malformed",ne.detail);return}let oe=ne.envelope,fe=_(oe);if(fe)return Z(V,z,fe,oe),fe.status==="accepted"?fe.envelope:void 0;if(oe.hops<1){X(V,z,"hop-limit","no hops remaining",oe);return}if(oe.target&&oe.target!==t){let He=T.get(oe.target);if(!He){X(V,z,"unknown-target",`unknown target "${oe.target}"`,oe);return}if(!Bt(He.subscribe,oe.type)){X(V,z,"not-subscribed",`target "${oe.target}" does not subscribe to ${oe.type}`,oe);return}}if(re){if(!S(re,oe)){X(V,z,"unauthorized","source may not emit this event",oe);return}if(re.emitsThisTurn+=1,re.emitsThisTurn>r){X(V,z,"rate-limited","maxPerTurn exceeded",oe);return}if(m!==void 0){let Le=y();if(g(re,Le),re.emitTimestamps.push(Le),re.emitTimestamps.length>m){X(V,z,"rate-limited","maxPerWindow exceeded",oe);return}}if(j(oe)){X(V,z,"loop-detected","causation chain cycle or depth exceeded",oe);return}if((U.get(oe.correlationId)??0)+1>s){X(V,z,"storm-detected","correlationId storm",oe);return}if(e.validate){let Le;try{Le=e.validate(oe)}catch(Je){let Et=Je instanceof Error?Je.message:"validate threw";X(V,z,"host-rejected",Et,oe);return}if(Le!==!0){X(V,z,"host-rejected",Le.detail,oe);return}}}else{if(j(oe)){X(V,z,"loop-detected","causation chain cycle or depth exceeded",oe);return}if((U.get(oe.correlationId)??0)+1>s){X(V,z,"storm-detected","correlationId storm",oe);return}}return J(oe,V),oe}function ve(V,z){let ne=T.get(V);if(!ne)return;let re={...z},oe=W(ne,re);G(re,oe);let fe=P(ne.id,re.idempotencyKey);if(fe){Z(V,re,fe);return}let He=N(ne),Le=Ui(re,{source:ne.id,createId:R,seq:He,causationId:oe?.id,maxHops:o,parentHops:D(re.causationId??oe?.id,oe?.hops)});Q(V,re,Le,ne)}function Ie(V,z){let ne=z?.cause,re={...V};G(re,ne);let oe=P(t,re.idempotencyKey);if(oe)return Z(t,re,oe),oe.status==="accepted"?oe.envelope:void 0;C+=1;let fe=Ui(re,{source:t,createId:R,seq:C,causationId:re.causationId,maxHops:o,parentHops:D(re.causationId,ne?.hops)});return Q(t,re,fe,void 0)}function Re(){if(!L){L=!0;try{for(;A.length>0;){let V=A.shift();V&&(V.kind==="cart"?ve(V.participantId,V.event):V.result=Ie(V.event,V.extras))}}finally{L=!1}}}function ae(V){A.push(V),Re()}return{attach(V,z,ne={}){if(V===t||V===n)throw new Error(`createEventRouter: "${V}" is a reserved participant id`);for(let fe of T.values())if(fe.channel===z&&fe.id!==V)throw new Error(`createEventRouter: channel already attached as "${fe.id}"`);T.get(V)?.unsubscribe();let oe={id:V,channel:z,emit:ne.emit??jl,subscribe:ne.subscribe??[],authoritative:ne.authoritative===!0,seq:0,emitsThisTurn:0,emitTimestamps:[],unsubscribe:()=>{}};oe.unsubscribe=z.onEvent(fe=>{ae({kind:"cart",participantId:V,event:fe})}),T.set(V,oe)},detach(V){let z=T.get(V);z&&(z.unsubscribe(),T.delete(V))},publish(V,z){let ne={kind:"publish",event:V,extras:z};return ae(ne),ne.result},subscribe(V,z){let ne={patterns:V,listener:z};return b.push(ne),()=>{let re=b.indexOf(ne);re>=0&&b.splice(re,1)}},subscribeDecision(V){return x.push(V),()=>{let z=x.indexOf(V);z>=0&&x.splice(z,1)}},inspectParticipants(){return[...T.values()].map(V=>({id:V.id,emit:V.emit.slice(),subscribe:V.subscribe.slice(),authoritative:V.authoritative}))},inspectDecisions(){return $.map(V=>c(V))},turn(){E+=1,U.clear();for(let V of T.values())V.emitsThisTurn=0,V.lastDelivered=void 0,m!==void 0&&g(V,y())}}}var Ul=320,Jl=180,zl=1024,Yl="Runtime group has been destroyed";function Xl(e){let t="";for(let n=0;n<32;n++){let r=e.charCodeAt(n%Math.max(e.length,1))+n*17&255;t+=r.toString(16).padStart(2,"0")}return`0x${t}`}function Ql(e,t){let n=document.createElement("div");return Object.defineProperty(n,"clientWidth",{value:e,configurable:!0}),Object.defineProperty(n,"clientHeight",{value:t,configurable:!0}),document.body.appendChild(n),n}function Va(e){let t=e.capability,n={},r=e.emit??t?.emit,i=e.subscribe??t?.subscribe,o=e.authoritative??t?.authoritative;return r&&(n.emit=r),i&&(n.subscribe=i),o!==void 0&&(n.authoritative=o),n}function La(e){try{return JSON.parse(JSON.stringify(e))}catch{return e}}function Zl(e){let t=new Set([Tt,"*.*","*.*.*","*.*.*.*","*.*.*.*.*"]);for(let n of e){let r=Va(n);for(let i of r.emit??[])t.add(i);for(let i of r.subscribe??[])t.add(i)}return[...t]}function wr(e){if(!e.participants.length)throw new Error("createRuntimeGroup: at least one participant is required");let t=new Set;for(let p of e.participants){if(!p.id)throw new Error("createRuntimeGroup: participant id is required");if(t.has(p.id))throw new Error(`createRuntimeGroup: duplicate participant id "${p.id}"`);t.add(p.id)}let n=e.origin??0,r=e.width??Ul,i=e.height??Jl,o=e.maxTrace??zl,s=[...e.participants].sort((p,E)=>p.id.localeCompare(E.id)),a=[],d=new Map,m=0,u=e.createId??e.router?.createId??(()=>`evt-${++m}`),y=e.now??e.router?.now??(()=>{let p=a[0];if(!p)return n;try{return p.cart.getClock().now}catch{return n}}),k=_a({...e.router,createId:u,now:y,validate:e.validate??e.router?.validate}),R=[],T=!1,b=!1,x=()=>{},F=p=>E=>{p.events.push(E),p.userOnEvent?.(E)},U=()=>{if(b)throw new Error(Yl)},O=()=>{x();for(let p of a){try{k.detach(p.id)}catch{}try{p.runtime.destroy()}catch{}p.ownsContainer&&p.container.remove()}a.length=0,d.clear()};try{for(let p of s){let E=p.width??r,c=p.height??i,f=!p.container,h=p.container??Ql(E,c),A=Ir({container:h,seed:p.seed??Xl(p.id),deterministic:{origin:n},audioBroker:e.audioBroker,audioParticipantId:e.audioBroker?p.id:void 0,kind:p.kind??"render"}),L={id:p.id,kind:p.kind??"render",cartDef:p.cart,initialState:p.initialState,gameManager:p.gameManager,userOnEvent:p.onEvent,runtime:A,container:h,ownsContainer:f,cart:void 0,events:[],errors:[],suspended:!1};A.onError=(w,B)=>{L.errors.push({error:w,info:B})},k.attach(p.id,A.hostChannel,Va(p)),L.cart=A.mount(p.cart,{initialState:p.initialState,gameManager:p.gameManager,onEvent:F(L)}),a.push(L),d.set(L.id,L)}x=k.subscribe(Zl(s),p=>{for(R.push(La(p));R.length>o;)R.shift()})}catch(p){throw O(),p}let $=p=>({id:p.id,kind:p.kind,runtime:p.runtime,container:p.container,get events(){return p.events.slice()},get errors(){return p.errors.slice()},get cart(){return p.cart}});return{router:k,origin:n,get paused(){return T},get audioBroker(){return e.audioBroker},participant(p){U();let E=d.get(p);if(!E)throw new Error(`createRuntimeGroup: unknown participant "${p}"`);return $(E)},async step(p=1){if(U(),T)return;let E=Math.max(0,Math.floor(p));for(let c=0;c<E;c++){k.turn();for(let f of a)if(!f.suspended)try{await f.cart.step(1)}catch(h){f.errors.push({error:h,info:{phase:"update",consecutive:f.errors.length+1,stopped:!1}})}}},pause(){U(),T=!0;for(let p of a)p.cart.pause()},resume(){U(),T=!1;for(let p of a)p.cart.resume()},reset(){U(),R.length=0;for(let p of a)p.events.length=0,p.errors.length=0,p.suspended=!1,p.cart=p.runtime.mount(p.cartDef,{initialState:p.initialState,gameManager:p.gameManager,onEvent:F(p)});k.turn()},resize(p,E){U();let c=Math.max(1,p|0),f=Math.max(1,E|0);for(let h of a){Object.defineProperty(h.container,"clientWidth",{value:c,configurable:!0}),Object.defineProperty(h.container,"clientHeight",{value:f,configurable:!0});let A=h.cart.canvas;A&&(A.width=c,A.height=f)}},detach(p){U();let E=d.get(p);if(!E)throw new Error(`createRuntimeGroup: unknown participant "${p}"`);try{k.detach(E.id)}catch{}try{E.runtime.destroy()}catch{}e.audioBroker&&e.audioBroker.teardown(E.id),E.ownsContainer&&E.container.remove();let c=a.indexOf(E);c>=0&&a.splice(c,1),d.delete(p)},suspendParticipant(p){U();let E=d.get(p);if(!E)throw new Error(`createRuntimeGroup: unknown participant "${p}"`);E.suspended=!0,E.cart.pause()},resumeParticipant(p){U();let E=d.get(p);if(!E)throw new Error(`createRuntimeGroup: unknown participant "${p}"`);E.suspended=!1,T||E.cart.resume()},isParticipantSuspended(p){U();let E=d.get(p);if(!E)throw new Error(`createRuntimeGroup: unknown participant "${p}"`);return E.suspended},dispatch(p,E){U();let c=d.get(p);if(!c)throw new Error(`createRuntimeGroup: unknown participant "${p}"`);c.cart.dispatch(E)},publish(p,E){return U(),k.publish(p,E)},inspectParticipants(){U();let p=new Map(a.map(E=>[E.id,E.kind]));return k.inspectParticipants().map(E=>({...E,kind:p.get(E.id)??"render"}))},async inspect(){U();let p={},E={},c=new Map(k.inspectParticipants().map(A=>[A.id,A]));for(let A of a){let L=await A.cart.getReplayMetadata(),w=A.cart.getClock();E[A.id]=w;let B=c.get(A.id);p[A.id]={state:L.state,events:A.events.slice(),errors:A.errors.slice(),kind:A.kind,clock:w,emit:B?.emit.slice()??[],subscribe:B?.subscribe.slice()??[],authoritative:B?.authoritative===!0,suspended:A.suspended}}let f=R.map(A=>La(A)),h=a.filter(A=>A.suspended).map(A=>A.id).sort();return{participants:p,trace:f,diagnostics:{paused:T,participantIds:a.map(A=>A.id),suspendedIds:h,clocks:E,rejections:f.filter(A=>A.type===Tt).map(A=>A.payload)}}},destroy(){if(!b){b=!0,T=!1;try{O()}finally{R.length=0}}}}}function ep(e){return Rr(),wr(e)}var Ji=1,zi=512,ht="[REDACTED]",Ht=["prompt","credentials","credential","authorization","apiKey","secret"],tp=new Set([ze,We]);function Ye(e){try{return JSON.parse(JSON.stringify(e))}catch{return e}}function Pr(e,t){if(e==null)return e;if(Array.isArray(e))return e.map(i=>Pr(i,t));if(typeof e!="object")return e;let n=e,r={};for(let[i,o]of Object.entries(n))r[i]=t.has(i)?ht:Pr(o,t);return r}function np(e){return e instanceof Error&&typeof e.message=="string"?e.message:"error"}function rp(e,t){return t?!(t.types&&!t.types.includes(e.type)||t.sources&&!t.sources.includes(e.source)||t.outcomes&&!t.outcomes.includes(e.outcome)||t.correlationId&&e.correlationId!==t.correlationId):!0}function Fa(e){return JSON.stringify({outcome:e.outcome,reason:e.reason,source:e.source,target:e.target,type:e.type,kind:e.kind,envelopeId:e.envelopeId,priorEnvelopeId:e.priorEnvelopeId,correlationId:e.correlationId,causationId:e.causationId,hops:e.hops,seq:e.seq,idempotencyKey:e.idempotencyKey,deliveredTo:e.deliveredTo,payload:e.payload})}function Yi(e,t){if(e.length!==t.length)return{ok:!1,detail:`record count ${t.length} !== ${e.length}`};for(let n=0;n<e.length;n++){let r=Fa(e[n]),i=Fa(t[n]);if(r!==i)return{ok:!1,detail:`record ${n} differs`}}return{ok:!0}}function $a(e){let t=new Map,n=[];for(let o of e){if(o.outcome==="duplicate"){n.push(void 0);continue}let s={envelopeId:o.envelopeId,type:o.type,source:o.source,outcome:o.outcome,children:[]};o.reason&&(s.reason=o.reason),n.push(s),o.envelopeId&&!t.has(o.envelopeId)&&t.set(o.envelopeId,s)}let r=new Set;for(let o=0;o<e.length;o++){let s=e[o],a=n[o];if(!a)continue;let d=s.causationId?t.get(s.causationId):void 0;d&&d!==a&&(d.children.push(a),r.add(a))}let i=[];for(let o of n)o&&!r.has(o)&&i.push(o);return i}function Ba(e,t){let n={id:e.id,emit:e.emit.slice(),subscribe:e.subscribe.slice(),authoritative:e.authoritative,errorCount:0};return t&&(n.kind=t),n}function ip(e,t,n){let r=t.errors[t.errors.length-1],i={id:e,kind:t.kind,emit:t.emit.slice(),subscribe:t.subscribe.slice(),authoritative:t.authoritative,clock:Ye(t.clock),state:Pr(t.state,n),errorCount:t.errors.length};return r&&(i.lastError=np(r.error)),i}function xr(e={}){let t=new Set([...Ht,...e.redactedKeys??[]]),n=e.maxRecords??zi,r=e.registry,i=0,o=0,s=!1,a=[],d=[],m,u=[],y=0,k=[],R={},T=()=>{},b=()=>{if(s)throw new Error("Replay inspector has been destroyed")},x=$=>{let C=r?.get($.type),p={index:o,turn:$.turn,time:$.time,outcome:$.outcome,source:$.source,type:$.type,deliveredTo:$.deliveredTo.slice(),payload:Pr($.payload,t)};for(o+=1,$.reason&&(p.reason=$.reason),$.detail&&(p.detail=$.detail),$.target&&(p.target=$.target),$.kind&&(p.kind=$.kind),$.envelopeId&&(p.envelopeId=$.envelopeId),$.priorEnvelopeId&&(p.priorEnvelopeId=$.priorEnvelopeId),$.correlationId&&(p.correlationId=$.correlationId),$.causationId&&(p.causationId=$.causationId),$.hops!==void 0&&(p.hops=$.hops),$.seq!==void 0&&(p.seq=$.seq),$.idempotencyKey&&(p.idempotencyKey=$.idempotencyKey),$.schemaVersion!==void 0&&(p.schemaVersion=$.schemaVersion),C&&(p.payloadSchemaVersion=C.payloadSchema.version),a.push(p);a.length>n;)a.shift(),i+=1},F=$=>a.filter(C=>rp(C,$)).map(C=>Ye(C)),U=$=>$?$.inspectParticipants().map(C=>Ba(C,C.kind)):k.map(C=>Ye(C)),O={watchRouter($){if(b(),T(),k=$.inspectParticipants().map(p=>Ba(p)),a.length===0)for(let p of $.inspectDecisions())x(p);let C=$.subscribeDecision(p=>x(p));return T=()=>{C(),T=()=>{}},d.push(T),T},bind($){b(),m&&T(),m=$,y=$.origin,O.watchRouter($.router),k=U($);let C={publish(p,E){b();let c={kind:"publish",event:Ye(p)};return E?.cause&&(c.extras={cause:Ye(E.cause)}),u.push(c),$.publish(p,E)},dispatch(p,E){b();let c=Ye(E);typeof c.type=="string"&&tp.has(c.type)?u.push({kind:"asset",participantId:p,event:c}):u.push({kind:"dispatch",participantId:p,event:c}),$.dispatch(p,E)},async step(p=1){b(),u.push({kind:"step",frames:p}),await $.step(p)},async report(){b();let p=await $.inspect(),E=[];for(let c of Object.keys(p.participants).sort())E.push(ip(c,p.participants[c],t));k=E,R={};for(let c of E)R[c.id]=Ye(c.state);return O.report()},async exportTrace(p){return await C.report(),O.exportTrace(p)},unbind(){T(),m=void 0}};return C},importTrace($){b();let C=typeof $=="string"?JSON.parse($):$;if(C.schemaVersion!==Ji)throw new Error("Replay inspector: unsupported export schemaVersion");i=0,o=0,a.length=0,u=Ye(C.tape??[]),y=C.origin??0,k=Ye(C.participants??[]),R=Ye(C.snapshots??{});for(let p of C.records??[])x({outcome:p.outcome,reason:p.reason,detail:p.detail,source:p.source,type:p.type,kind:p.kind,envelopeId:p.envelopeId,priorEnvelopeId:p.priorEnvelopeId,target:p.target,deliveredTo:p.deliveredTo,hops:p.hops,seq:p.seq,correlationId:p.correlationId,causationId:p.causationId,idempotencyKey:p.idempotencyKey,schemaVersion:p.schemaVersion,payload:p.payload,turn:p.turn,time:p.time})},exportTrace($){return b(),{schemaVersion:Ji,origin:y,redactedKeys:[...t],participants:Ye(k),tape:Ye(u),records:F($),snapshots:Ye(R)}},report($){b();let C=F($);return{schemaVersion:Ji,participants:Ye(k),records:C,trees:$a(C),dropped:i}},causationTree($){b();let C=F($?{correlationId:$}:void 0);return $a(C)},records(){return b(),a.map($=>Ye($))},reset(){b(),a.length=0,u=[],i=0,o=0,R={},m&&(k=U(m))},destroy(){if(!s){for(s=!0,T();d.length>0;)d.pop()?.();a.length=0,u=[],k=[],R={},m=void 0}}};return O}async function Xi(e,t,n={}){let r=xr({redactedKeys:n.redactedKeys??e.redactedKeys,maxRecords:n.maxRecords,registry:n.registry}),i=r.bind(t);try{for(let s of e.tape)s.kind==="publish"?i.publish(s.event,s.extras):s.kind==="dispatch"||s.kind==="asset"?i.dispatch(s.participantId,s.event):await i.step(s.frames);let o=await i.report();return{inspector:r,report:o}}catch(o){throw r.destroy(),o}}var Tr=1,qa=zi,Qi=["binding-conflict","asset-failure","revision-rollback","sequence-interruption","text-only-fallback"],Ka=["state-projection","binding","content-revision","staging","asset","sequence","presentation","snapshot"],Ga=[...Ht,"privatePrompt","signedUrl","signedURL","signed_url","presignedUrl","password"],op=new Set(Qi),sp=new Set(Ka),ap=new Set(["signedUrl","signedURL","signed_url","presignedUrl","presignedURL"]),dp=/[?&](X-Amz-Signature|X-Amz-Credential|X-Amz-Security-Token|X-Goog-Signature|Signature|sig)=/i,cp=/https?:\/\/[^\s"'<>)\]]+/gi,up="Selection trace has been destroyed",lp=new Set(Qi);function pp(e){return typeof e=="string"&&op.has(e)}function fp(e){return typeof e=="string"&&sp.has(e)}function Xe(e){try{return JSON.parse(JSON.stringify(e))}catch{return e}}function Ha(e){return/^https?:\/\//i.test(e)?dp.test(e):!1}function Wa(e){return Ha(e)?ht:e.replace(cp,t=>Ha(t)?ht:t)}function yt(e,t){if(e==null)return e;if(typeof e=="string")return Wa(e);if(Array.isArray(e))return e.map(i=>yt(i,t));if(typeof e!="object")return e;let n=e,r={};for(let[i,o]of Object.entries(n))t.has(i)||ap.has(i)?r[i]=ht:r[i]=yt(o,t);return r}function ja(e,t,n){if(e==null)return e;if(Array.isArray(e))return e.map(o=>ja(o,t,n));if(typeof e!="object")return ht;let r=e,i={};for(let[o,s]of Object.entries(r))t.has(o)?i[o]=yt(s,n):i[o]=ht;return i}function mp(e,t){return t?!(t.kinds&&!t.kinds.includes(e.kind)||t.reasons&&!t.reasons.includes(e.reason)||t.correlationId&&e.correlationId!==t.correlationId||t.causationId&&e.causationId!==t.causationId||t.envelopeId&&e.envelopeId!==t.envelopeId||t.contentId&&![e.requestedContent?.contentId,e.activatedContent?.contentId].includes(t.contentId)||t.sequenceId&&e.sequence?.sequenceId!==t.sequenceId):!0}function gp(e,t,n){return lp.has(e)||n>=1?!0:n<=0?!1:(t*2654435761>>>0)/4294967296<n}function hp(e,t){if(!e)return[];let n=new Set;for(let r of t)r.correlationId&&n.add(r.correlationId),r.causationId&&n.add(r.causationId),r.envelopeId&&n.add(r.envelopeId);return n.size===0?[]:e.records().filter(r=>r.correlationId!==void 0&&n.has(r.correlationId)||r.causationId!==void 0&&n.has(r.causationId)||r.envelopeId!==void 0&&n.has(r.envelopeId))}function yp(e,t){return e.recordSelectionDecision(t)}function bp(e,t){return{...Xe(e),selectionTrace:t}}function vp(e={}){let t=new Set([...Ga,...e.redactedKeys??[]]),n=new Set(e.projectionWhitelist??[]),r=e.maxRecords??qa,i=e.sampleRate??1,o=e.inspector,s=0,a=0,d=0,m=!1,u=[],y=[],k={},R=()=>{if(m)throw new Error(up)},T=O=>u.filter($=>mp($,O)).map($=>Xe($)),b=O=>ja(O,n,t),x=(O,$)=>{let C={index:$,kind:O.kind,reason:O.reason,summary:Wa(String(O.summary))};return O.turn!==void 0&&(C.turn=O.turn),O.time!==void 0&&(C.time=O.time),O.correlationId&&(C.correlationId=O.correlationId),O.causationId&&(C.causationId=O.causationId),O.envelopeId&&(C.envelopeId=O.envelopeId),O.initiatingEventType&&(C.initiatingEventType=O.initiatingEventType),O.projectionRevision!==void 0&&(C.projectionRevision=O.projectionRevision),O.projection!==void 0?C.projection=b(O.projection):O.hostState!==void 0&&(C.projection=b(O.hostState)),O.bindings&&(C.bindings=yt(Xe(O.bindings.slice()),t)),O.winningBindingId!==void 0&&(C.winningBindingId=O.winningBindingId),O.rejectedBindingIds&&(C.rejectedBindingIds=O.rejectedBindingIds.slice()),O.defaultFallback!==void 0&&(C.defaultFallback=O.defaultFallback),O.requestedContent&&(C.requestedContent=yt(Xe(O.requestedContent),t)),O.activatedContent!==void 0&&(C.activatedContent=O.activatedContent?yt(Xe(O.activatedContent),t):null),O.staging&&(C.staging=yt(Xe(O.staging),t)),O.lastKnownGood!==void 0&&(C.lastKnownGood=O.lastKnownGood?yt(Xe(O.lastKnownGood),t):null),O.asset&&(C.asset=yt(Xe(O.asset),t)),O.sequence&&(C.sequence=yt(Xe(O.sequence),t)),O.presentation&&(C.presentation=yt(Xe(O.presentation),t)),O.snapshot&&(C.snapshot=Xe(O.snapshot)),C},F=O=>{for(u.push(O);u.length>r;)u.shift(),s+=1};return{recordSelectionDecision(O){R();let $=d;if(d+=1,!gp(O.reason,$,i))return a+=1,null;let C=x(O,$);return F(C),Xe(C)},records(O){return R(),T(O)},query(O){return R(),T(O)},chain(O){return R(),T({correlationId:O})},exportTrace(O){R();let $=T(O),C=y.length>0?y.filter(E=>O?.correlationId?E.correlationId===O.correlationId:!0):hp(o,$),p={schemaVersion:Tr,redactedKeys:[...t],projectionWhitelist:[...n],dropped:s,sampledOut:a,records:$,inspectorRecords:Xe(C)};return k.revision!==void 0&&(p.snapshotRevision=k.revision),k.schemaVersion!==void 0&&(p.snapshotSchemaVersion=k.schemaVersion),k.seed&&(p.snapshotSeed=k.seed),p},importTrace(O){R();let $=typeof O=="string"?JSON.parse(O):O;if($.schemaVersion!==Tr)throw new Error("Selection trace: unsupported export schemaVersion");s=$.dropped??0,a=$.sampledOut??0,d=0,u.length=0,y=Xe($.inspectorRecords??[]),k={},$.snapshotRevision!==void 0&&(k.revision=$.snapshotRevision),$.snapshotSchemaVersion!==void 0&&(k.schemaVersion=$.snapshotSchemaVersion),$.snapshotSeed&&(k.seed=$.snapshotSeed);for(let C of $.records??[]){let p=typeof C.index=="number"?C.index:d;d=Math.max(d,p+1),F(Xe(C))}},report(O){return R(),{schemaVersion:Tr,records:T(O),dropped:s,sampledOut:a}},setSnapshotProvenance(O){R(),k={...k,...O}},reset(){R(),u.length=0,y=[],s=0,a=0,d=0,k={}},destroy(){m||(m=!0,u.length=0,y=[],k={})}}}var un="cue.started",Vn="cue.completed",ln="cue.cancelled",qt="cue.replaced";function Sp(e,t){let n=e<0?0:e>1?1:e;return t==="ease-out"?1-(1-n)*(1-n):n}function Ua(e){return{type:e.type,atFrame:e.atFrame,name:e.name,idempotencyKey:e.idempotencyKey,progress:e.progress}}function Dr(e){return{name:e.name,idempotencyKey:e.idempotencyKey,phase:e.phase,startFrame:e.startFrame,durationFrames:e.durationFrames,delayFrames:e.delayFrames,easing:e.easing,progress:e.progress,repeatIndex:e.repeatIndex}}function Zi(e){return e.startFrame+e.delayFrames}function kp(e,t){if(!e||typeof e!="object")return{ok:!1,reason:"invalid",detail:"spec is required"};if(typeof e.name!="string"||e.name.length===0)return{ok:!1,reason:"invalid",detail:"name is required"};if(typeof e.idempotencyKey!="string"||e.idempotencyKey.length===0)return{ok:!1,reason:"invalid",detail:"idempotencyKey is required"};if(typeof e.durationFrames!="number"||!Number.isFinite(e.durationFrames)||e.durationFrames<0)return{ok:!1,reason:"invalid",detail:"durationFrames must be a non-negative finite number"};let n=e.startFrame===void 0?t:e.startFrame;if(typeof n!="number"||!Number.isFinite(n))return{ok:!1,reason:"invalid",detail:"startFrame must be finite"};let r=e.delayFrames??0;if(typeof r!="number"||!Number.isFinite(r)||r<0)return{ok:!1,reason:"invalid",detail:"delayFrames must be a non-negative finite number"};let i=e.easing??"linear";if(i!=="linear"&&i!=="ease-out")return{ok:!1,reason:"invalid",detail:"unsupported easing"};let o=e.onDuplicate??"replace";if(o!=="ignore"&&o!=="replace"&&o!=="reject")return{ok:!1,reason:"invalid",detail:"unsupported onDuplicate"};let s=0;if(e.repeat)if("forever"in e.repeat&&e.repeat.forever)s="forever";else if("count"in e.repeat){if(typeof e.repeat.count!="number"||!Number.isFinite(e.repeat.count)||e.repeat.count<0)return{ok:!1,reason:"invalid",detail:"repeat.count must be >= 0"};s=Math.floor(e.repeat.count)}else return{ok:!1,reason:"invalid",detail:"unsupported repeat"};let a=e.reducedMotion??"complete";return a!=="skip"&&a!=="complete"&&(typeof a!="object"||typeof a.durationFrames!="number"||!Number.isFinite(a.durationFrames)||a.durationFrames<0)?{ok:!1,reason:"invalid",detail:"unsupported reducedMotion"}:{name:e.name,idempotencyKey:e.idempotencyKey,startFrame:n,durationFrames:e.durationFrames,delayFrames:r,easing:i,repeatRemaining:s,repeatIndex:0,reducedMotion:a,onDuplicate:o,phase:"scheduled",progress:0}}function Ep(e,t){if(!t)return e;let n=e.reducedMotion;return n==="skip"||n==="complete"?{...e,durationFrames:0,delayFrames:0,startFrame:e.startFrame}:{...e,durationFrames:n.durationFrames}}function Dt(e={}){let t=!!e.reducedMotion,n=e.originFrame??0,r=new Map,i=[];function o(b){i.push(b)}function s(b,x){let F=Zi(b)-Zi(x);return F!==0?F:b.name<x.name?-1:b.name>x.name?1:b.idempotencyKey<x.idempotencyKey?-1:b.idempotencyKey>x.idempotencyKey?1:0}function a(b,x){o({type:x,atFrame:n,name:b.name,idempotencyKey:b.idempotencyKey,progress:b.progress})}function d(b){if(b.phase="completed",b.progress=1,a(b,Vn),b.repeatRemaining==="forever"||b.repeatRemaining>0){if(typeof b.repeatRemaining=="number"&&(b.repeatRemaining-=1),b.repeatIndex+=1,b.phase="scheduled",b.progress=0,b.startFrame=n,b.delayFrames=0,b.durationFrames===0){r.delete(b.idempotencyKey);return}b.phase="active",a(b,un)}else r.delete(b.idempotencyKey)}function m(b){if(b.phase==="cancelled"||b.phase==="completed")return;let x=Zi(b);if(!(n<x)){if(b.phase==="scheduled"&&(b.phase="active",b.progress=b.durationFrames===0?1:0,a(b,un),b.durationFrames===0)){d(b);return}if(b.phase==="active"){let F=n-x;F>=b.durationFrames?(b.progress=1,d(b)):b.progress=Sp(b.durationFrames===0?1:F/b.durationFrames,b.easing)}}}function u(){let b=[...r.values()].sort(s);for(let x of b)m(x)}function y(b){let x=kp(b,n);if("ok"in x&&x.ok===!1)return x;let F=Ep(x,t),U=r.get(F.idempotencyKey);if(U&&(U.phase==="scheduled"||U.phase==="active")){if(U.onDuplicate==="reject"||F.onDuplicate==="reject")return{ok:!1,reason:"duplicate",detail:`cue ${F.idempotencyKey} is already ${U.phase}`};if(U.onDuplicate==="ignore"||F.onDuplicate==="ignore")return{ok:!0,cue:Dr(U)};U.phase="cancelled",U.progress=U.progress,a(U,qt),r.delete(U.idempotencyKey)}r.set(F.idempotencyKey,F),m(F);let O=r.get(F.idempotencyKey)??F;return{ok:!0,cue:Dr(O)}}function k(b){let x=r.get(b);return!x||x.phase==="completed"||x.phase==="cancelled"?!1:(x.phase="cancelled",a(x,ln),r.delete(b),!0)}function R(){for(let b of[...r.values()].sort(s))(b.phase==="scheduled"||b.phase==="active")&&(b.phase="cancelled",a(b,ln));r.clear(),i.length=0,n=e.originFrame??0}function T(b=1){let x=Number.isFinite(b)?Math.max(0,Math.floor(b)):0,F=i.length;for(let U=0;U<x;U++)n+=1,u();return i.slice(F).map(Ua)}return{play:y,step:T,cancel:k,reset:R,snapshot(){return{frame:n,reducedMotion:t,cues:[...r.values()].sort(s).map(Dr),events:i.map(Ua)}},get(b){let x=r.get(b);return x?Dr(x):void 0},setReducedMotion(b){t=!!b},get frame(){return n},get reducedMotion(){return t}}}var za="audio.cue.scheduled",eo="audio.cue.started",Ya="audio.cue.skipped",Fn="audio.cue.failed";var Nr=1,Ip=["scheduled","active","completed","cancelled"],Rp=["linear","ease-out"],Cp=["locked","unlocking","unlocked","failed"],Ap=["scheduled","started","skipped"];function wp(e){return e===za||e===eo||e===Ya||e===Fn}function pn(e){return!!e&&typeof e=="object"&&!Array.isArray(e)}function At(e){return typeof e=="string"&&e.length>0}function Ct(e){return typeof e=="number"&&Number.isFinite(e)}function Pp(e){return e==="scheduled"||e==="started"||e==="skipped"||e==="failed"||e==="completed"}function Ja(e){return e==="reduced-sensory"||e==="muted"||e==="unauthorized"||e==="asset-failed"||e==="torn-down"||e==="invalid"}function ye(e,t,n){let r={code:e,detail:t};return n&&(r.path=n),r}function $n(e){let t=e;if(typeof e=="string")try{t=JSON.parse(e)}catch{return{ok:!1,errors:[ye("invalid-json","snapshot JSON is invalid")]}}if(!pn(t))return{ok:!1,errors:[ye("invalid-snapshot","snapshot must be a JSON object")]};let n=[];t.schemaVersion!==Nr&&n.push(ye("unsupported-schema",`unsupported audio cue snapshot schemaVersion ${String(t.schemaVersion)}`,"schemaVersion")),Ct(t.frame)||n.push(ye("invalid-snapshot","frame must be finite","frame")),typeof t.reducedSensory!="boolean"&&n.push(ye("invalid-snapshot","reducedSensory must be a boolean","reducedSensory")),t.muted!==void 0&&typeof t.muted!="boolean"&&n.push(ye("invalid-snapshot","muted must be a boolean","muted")),t.unlock!==void 0&&(!pn(t.unlock)||!Cp.includes(t.unlock.state)?n.push(ye("invalid-snapshot","unlock.state must be locked, unlocking, unlocked, or failed","unlock")):t.unlock.error!==void 0&&typeof t.unlock.error!="string"&&n.push(ye("invalid-snapshot","unlock.error must be a string","unlock.error"))),Array.isArray(t.cues)||n.push(ye("invalid-snapshot","cues must be an array","cues")),Array.isArray(t.events)||n.push(ye("invalid-snapshot","events must be an array","events"));let r=new Set,i=[];Array.isArray(t.cues)&&t.cues.forEach((a,d)=>{let m=`cues[${d}]`,u=xp(a,m,n);if(u){if(r.has(u.idempotencyKey)){n.push(ye("unknown-cue",`duplicate cue idempotencyKey "${u.idempotencyKey}"`,m));return}r.add(u.idempotencyKey),i.push(u)}});let o=[];return Array.isArray(t.events)&&t.events.forEach((a,d)=>{let m=`events[${d}]`,u=Op(a,m,n);u&&o.push(u)}),n.length>0?{ok:!1,errors:n}:{ok:!0,snapshot:{schemaVersion:Nr,frame:t.frame,reducedSensory:t.reducedSensory,cues:i,events:o}}}function xp(e,t,n){if(!pn(e)){n.push(ye("invalid-snapshot","cue must be an object",t));return}if(!At(e.idempotencyKey)){n.push(ye("unknown-cue","cue idempotencyKey is required",`${t}.idempotencyKey`));return}if(!At(e.name)){n.push(ye("invalid-snapshot","cue name is required",`${t}.name`));return}if(!At(e.assetId)){n.push(ye("invalid-snapshot","cue assetId is required",`${t}.assetId`));return}if(!At(e.channelId)){n.push(ye("invalid-snapshot","cue channelId is required",`${t}.channelId`));return}if(!Pp(e.audioPhase)){n.push(ye("invalid-snapshot","cue audioPhase is invalid",`${t}.audioPhase`));return}if(e.audioPhase==="completed"||e.audioPhase==="failed"){n.push(ye("invalid-snapshot","completed and failed cues belong in the event log, not the live cues array",`${t}.audioPhase`));return}if(!Ip.includes(e.phase)){n.push(ye("invalid-snapshot","cue phase is invalid",`${t}.phase`));return}if(!Rp.includes(e.easing)){n.push(ye("invalid-snapshot","cue easing is invalid",`${t}.easing`));return}if(!Ct(e.startFrame)){n.push(ye("invalid-snapshot","cue startFrame must be finite",`${t}.startFrame`));return}if(!Ct(e.durationFrames)||e.durationFrames<0){n.push(ye("invalid-snapshot","cue durationFrames must be a non-negative finite number",`${t}.durationFrames`));return}if(!Ct(e.delayFrames)||e.delayFrames<0){n.push(ye("invalid-snapshot","cue delayFrames must be a non-negative finite number",`${t}.delayFrames`));return}if(!Ct(e.progress)){n.push(ye("invalid-snapshot","cue progress must be finite",`${t}.progress`));return}if(!Ct(e.repeatIndex)){n.push(ye("invalid-snapshot","cue repeatIndex must be finite",`${t}.repeatIndex`));return}if(!Ct(e.priority)){n.push(ye("invalid-snapshot","cue priority must be finite",`${t}.priority`));return}if(e.participantId!==void 0&&!At(e.participantId)){n.push(ye("invalid-snapshot","cue participantId must be a non-empty string",`${t}.participantId`));return}let r=Tp(e.repeat,`${t}.repeat`,n);if(e.repeat!==void 0&&r===void 0)return;let i={name:e.name,idempotencyKey:e.idempotencyKey,phase:e.phase,startFrame:e.startFrame,durationFrames:e.durationFrames,delayFrames:e.delayFrames,easing:e.easing,progress:e.progress,repeatIndex:e.repeatIndex,assetId:e.assetId,channelId:e.channelId,priority:e.priority,audioPhase:e.audioPhase};return typeof e.participantId=="string"&&(i.participantId=e.participantId),r&&(i.repeat=r),i}function Tp(e,t,n){if(e!==void 0){if(!pn(e)){n.push(ye("invalid-snapshot","repeat must be an object",t));return}if(e.forever===!0)return{forever:!0};if("count"in e){if(!Ct(e.count)||e.count<0){n.push(ye("invalid-snapshot","repeat.count must be a non-negative finite number",t));return}return{count:e.count}}n.push(ye("invalid-snapshot","repeat must be { count } or { forever: true }",t))}}function Dp(e){if(e.repeat){if("forever"in e.repeat&&e.repeat.forever)return{forever:!0};if("count"in e.repeat)return{count:Math.max(0,Math.floor(e.repeat.count)-Math.floor(e.repeatIndex))}}}function Op(e,t,n){if(!pn(e)){n.push(ye("invalid-snapshot","event must be an object",t));return}if(!wp(e.type)){n.push(ye("invalid-snapshot","event type is unknown",`${t}.type`));return}if(!At(e.idempotencyKey)){n.push(ye("unknown-cue","event idempotencyKey is required",`${t}.idempotencyKey`));return}if(!At(e.name)){n.push(ye("invalid-snapshot","event name is required",`${t}.name`));return}if(!At(e.assetId)){n.push(ye("invalid-snapshot","event assetId is required",`${t}.assetId`));return}if(!At(e.channelId)){n.push(ye("invalid-snapshot","event channelId is required",`${t}.channelId`));return}if(!Ct(e.atFrame)){n.push(ye("invalid-snapshot","event atFrame must be finite",`${t}.atFrame`));return}if(!Ct(e.progress)){n.push(ye("invalid-snapshot","event progress must be finite",`${t}.progress`));return}if(e.participantId!==void 0&&!At(e.participantId)){n.push(ye("invalid-snapshot","event participantId must be a non-empty string",`${t}.participantId`));return}if(e.reason!==void 0&&!Ja(e.reason)){n.push(ye("invalid-snapshot","event reason is unknown",`${t}.reason`));return}let r={type:e.type,atFrame:e.atFrame,name:e.name,idempotencyKey:e.idempotencyKey,assetId:e.assetId,channelId:e.channelId,progress:e.progress};return typeof e.participantId=="string"&&(r.participantId=e.participantId),Ja(e.reason)&&(r.reason=e.reason),r}function Or(e){let t={type:e.type,atFrame:e.atFrame,name:e.name,idempotencyKey:e.idempotencyKey,assetId:e.assetId,channelId:e.channelId,progress:e.progress};return e.participantId!==void 0&&(t.participantId=e.participantId),e.reason!==void 0&&(t.reason=e.reason),t}function Mp(e){return{name:e.name,idempotencyKey:e.idempotencyKey,startFrame:e.startFrame,durationFrames:e.durationFrames,delayFrames:e.delayFrames,easing:e.easing,repeat:e.repeat,reducedMotion:e.reducedMotion,onDuplicate:e.onDuplicate}}function Mr(e,t,n){let r={name:e.name,idempotencyKey:e.idempotencyKey,phase:t?.phase??(e.audioPhase==="started"?"active":"scheduled"),startFrame:t?.startFrame??n,durationFrames:t?.durationFrames??0,delayFrames:t?.delayFrames??0,easing:t?.easing??"linear",progress:t?.progress??0,repeatIndex:t?.repeatIndex??0,assetId:e.assetId,channelId:e.channelId,participantId:e.participantId,priority:e.priority,audioPhase:e.audioPhase};return e.repeat&&(r.repeat=e.repeat),r}function Np(e={}){let t=e.broker,n=!!(e.reducedSensory??t?.reducedSensory),r=Dt({originFrame:e.originFrame}),i=new Map,o=[],s=new Set,a=0;function d(p){o.push(p)}function m(p,E,c){let f=r.get(E.idempotencyKey);return Or({type:p,atFrame:r.frame,name:E.name,idempotencyKey:E.idempotencyKey,assetId:E.assetId,channelId:E.channelId,participantId:E.participantId,reason:c?.reason,progress:c?.progress??f?.progress??0})}function u(p,E){s.delete(p.idempotencyKey),t?.noteCueEnded(p.idempotencyKey),p.audioPhase="failed",d(m(Fn,p,{reason:E})),r.cancel(p.idempotencyKey),i.delete(p.idempotencyKey)}function y(p,E){s.delete(p.idempotencyKey),p.audioPhase="skipped",d(m(Ya,p,{reason:E}))}function k(p){s.delete(p.idempotencyKey),p.audioPhase="started",t?.noteCueStarted({idempotencyKey:p.idempotencyKey,channelId:p.channelId,participantId:p.participantId,priority:p.priority}),d(m(eo,p))}function R(p){if(p.audioPhase!=="scheduled")return;if(t&&!t.isAuthorized(p.participantId)){y(p,"unauthorized"),r.cancel(p.idempotencyKey),i.delete(p.idempotencyKey);return}if(n||t?.reducedSensory){y(p,"reduced-sensory");return}if(t?.muted||t&&t.effectiveGain(p.channelId)===0){y(p,"muted");return}let E=t?.assetStatus(p.assetId);if(!t){k(p);return}if(E==="failed"){u(p,"asset-failed");return}if(E==="ready"){k(p);return}s.add(p.idempotencyKey)}function T(p,E){for(let c of[...s]){let f=i.get(c);if(!f){s.delete(c);continue}if(!(p&&f.assetId!==p)){if(E==="failed"||t?.assetStatus(f.assetId)==="failed"){u(f,"asset-failed");continue}(E==="ready"||t?.assetStatus(f.assetId)==="ready")&&R(f)}}}function b(p){for(let E of[...i.values()])E.participantId===p&&(E.audioPhase==="scheduled"||E.audioPhase==="started")&&u(E,"torn-down")}function x(p){for(let E of p){let c=i.get(E.idempotencyKey);if(c)if(E.type===un)R(c);else if(E.type===Vn){if(s.delete(c.idempotencyKey),t?.noteCueEnded(c.idempotencyKey),r.get(c.idempotencyKey)){c.audioPhase="scheduled";continue}c.audioPhase==="scheduled"?u(c,"asset-failed"):(c.audioPhase==="started"&&(c.audioPhase="completed"),i.delete(c.idempotencyKey))}else E.type===ln?(s.delete(c.idempotencyKey),t?.noteCueEnded(c.idempotencyKey),(c.audioPhase==="scheduled"||c.audioPhase==="started")&&(c.audioPhase="failed"),i.delete(c.idempotencyKey)):E.type===qt&&(s.delete(c.idempotencyKey),t?.noteCueEnded(c.idempotencyKey),i.delete(c.idempotencyKey))}}function F(){let p=o.slice(a).map(Or);return a=o.length,p}let U=t?.onNotice(p=>{if(p.type==="asset"){if(p.status==="failed"){for(let E of[...i.values()])E.assetId===p.id&&(E.audioPhase==="scheduled"||E.audioPhase==="started")&&u(E,"asset-failed");return}T(p.id,p.status);return}if(p.type==="teardown"){b(p.participantId);return}if(p.type==="destroy")for(let E of[...i.values()])(E.audioPhase==="scheduled"||E.audioPhase==="started")&&u(E,"torn-down")});function O(){for(let p of i.values())t?.noteCueEnded(p.idempotencyKey);i.clear(),s.clear(),o.length=0,a=0,r.reset()}function $(p){if(!p||typeof p!="object")return{ok:!1,reason:"invalid",detail:"spec is required"};if(typeof p.assetId!="string"||p.assetId.length===0)return{ok:!1,reason:"invalid",detail:"assetId is required"};let E=r.snapshot().events.length,c=r.play(Mp(p));if(!c.ok)return c;let f=r.snapshot().events.slice(E),h=f.some(D=>D.type===qt);if(!h&&i.has(p.idempotencyKey)){let D=i.get(p.idempotencyKey);return{ok:!0,cue:Mr(D,c.cue,r.frame)}}if(h){let D=i.get(p.idempotencyKey);D&&(s.delete(D.idempotencyKey),t?.noteCueEnded(D.idempotencyKey),i.delete(D.idempotencyKey))}let A=p.channelId??p.participantId??"master",L={name:p.name,idempotencyKey:p.idempotencyKey,assetId:p.assetId,channelId:A,participantId:p.participantId,priority:Number.isFinite(p.priority)?p.priority:0,audioPhase:"scheduled"};p.repeat&&(L.repeat=p.repeat),i.set(L.idempotencyKey,L),typeof p.gain=="number"&&t?.setChannelGain(A,p.gain,p.participantId),typeof p.priority=="number"&&t?.setPriority(A,p.priority,p.participantId),d(m(za,L)),x(f.filter(D=>D.type!==qt));let w=i.get(L.idempotencyKey);w&&w.audioPhase==="scheduled"&&t?.assetStatus(w.assetId)==="failed"&&u(w,"asset-failed"),F();let B=i.get(L.idempotencyKey)??L,G=r.get(L.idempotencyKey)??c.cue;return{ok:!0,cue:Mr(B,G,r.frame)}}function C(){return{schemaVersion:Nr,frame:r.frame,reducedSensory:n,cues:[...i.values()].map(p=>Mr(p,r.get(p.idempotencyKey),r.frame)).sort((p,E)=>p.name!==E.name?p.name<E.name?-1:1:p.idempotencyKey<E.idempotencyKey?-1:p.idempotencyKey>E.idempotencyKey?1:0),events:o.map(Or)}}return{play:$,step(p=1){let E=r.step(p);return x(E),F()},cancel(p){let E=i.get(p),c=r.cancel(p);return E&&(s.delete(p),t?.noteCueEnded(p),i.delete(p)),c},reset:O,snapshot(){return C()},restore(p){let E=$n(p);if(!E.ok)return E;let c=Dt({originFrame:E.snapshot.frame}),f=new Map,h=new Set,A=E.snapshot.events.map(Or);for(let G=0;G<E.snapshot.cues.length;G+=1){let D=E.snapshot.cues[G],l={name:D.name,idempotencyKey:D.idempotencyKey,assetId:D.assetId,channelId:D.channelId,participantId:D.participantId,priority:D.priority,audioPhase:D.audioPhase};if(D.repeat&&(l.repeat=D.repeat),f.set(l.idempotencyKey,l),Ap.includes(D.audioPhase)){let v=c.play({name:D.name,idempotencyKey:D.idempotencyKey,startFrame:D.startFrame,durationFrames:D.durationFrames,delayFrames:D.delayFrames,easing:D.easing,repeat:Dp(D),onDuplicate:"replace"});if(!v.ok)return{ok:!1,errors:[ye("invalid-snapshot",v.detail,`cues[${G}]`)]}}}let L=t?{muted:t.muted,assets:{...t.inspect().assets},started:[...i.values()].filter(G=>G.audioPhase==="started").map(G=>({idempotencyKey:G.idempotencyKey,channelId:G.channelId,participantId:G.participantId,priority:G.priority}))}:null,w={reducedSensory:n,presentation:r,records:new Map(i),pending:new Set(s),events:o.slice(),eventCursor:a},B=G=>{n=w.reducedSensory,r=w.presentation,i.clear();for(let[D,l]of w.records)i.set(D,l);s.clear();for(let D of w.pending)s.add(D);if(o.length=0,o.push(...w.events),a=w.eventCursor,t&&L){L.muted?t.mute():t.unmute();for(let[D,l]of Object.entries(L.assets))t.handleHostEvent({type:l==="ready"?ze:We,kind:"state",payload:{id:D}});for(let D of[...i.values()])t.noteCueEnded(D.idempotencyKey);for(let D of L.started)t.noteCueStarted(D)}return{ok:!1,errors:G}};try{for(let l of i.values())t?.noteCueEnded(l.idempotencyKey);i.clear(),s.clear(),o.length=0,n=E.snapshot.reducedSensory,r=c;for(let[l,v]of f)i.set(l,v);o.push(...A),a=o.length;let G=new Set,D=new Set;for(let l of E.snapshot.events)l.type===eo&&G.add(l.assetId),l.type===Fn&&l.reason==="asset-failed"&&D.add(l.assetId);if(t){for(let l of G)t.handleHostEvent({type:ze,kind:"state",payload:{id:l}});for(let l of D)t.handleHostEvent({type:We,kind:"state",payload:{id:l}})}for(let l of E.snapshot.cues)if(l.audioPhase==="started"&&t?.noteCueStarted({idempotencyKey:l.idempotencyKey,channelId:l.channelId,participantId:l.participantId,priority:l.priority}),l.audioPhase==="scheduled"){let v=r.get(l.idempotencyKey),P=t?.assetStatus(l.assetId);v?.phase==="active"&&P!=="ready"&&P!=="failed"&&h.add(l.idempotencyKey)}for(let l of h)s.add(l);return{ok:!0,snapshot:C()}}catch(G){let D=G instanceof Error?G.message:String(G);return B([ye("invalid-snapshot",D)])}},get(p){let E=i.get(p);if(E)return Mr(E,r.get(p),r.frame)},dispose(){U?.(),O()},get frame(){return r.frame},setReducedSensory(p){n=!!p},get reducedSensory(){return n}}}function to(e={}){let t=Ia({toneStart:async()=>{},reducedSensory:e.reducedSensory}),n=Np({broker:t,originFrame:e.originFrame,reducedSensory:e.reducedSensory});return{broker:t,timeline:n,unlock(){return t.unlock()},play(r){return n.play(r)},step(r){return n.step(r)},handleHostEvent(r){t.handleHostEvent(r)},snapshot(){return{...n.snapshot(),unlock:t.status(),muted:t.muted}},restore(r){let i=$n(r);if(!i.ok)return i;let o,s=r;if(typeof r=="string")try{s=JSON.parse(r)}catch{return i}pn(s)&&typeof s.muted=="boolean"&&(o=s.muted);let a=t.muted,d=n.restore(i.snapshot);return d.ok?(o===!0?t.mute():o===!1&&t.unmute(),{ok:!0,snapshot:{...n.snapshot(),unlock:t.status(),muted:t.muted}}):(a?t.mute():t.unmute(),d)},setReducedSensory(r){n.setReducedSensory(r)},get reducedSensory(){return n.reducedSensory},destroy(){n.dispose(),t.destroy()}}}var Xa=1,_p=["layer","mask","sprite"],Lp=["show","hide","replace","crossfade"],Vp=":incoming",Fp="visual.layer.revealed",Qa="visual.layer.hidden",$p="visual.layer.transition-started",Bp="visual.layer.transition-completed",Za="visual.layer.failed";var Hp="host.state.accepted";var qp="Visual layer controller has been destroyed",Kp=new Set(_p),Gp=new Set(Lp);function Wp(e){return typeof e=="string"&&Kp.has(e)}function jp(e){return typeof e=="string"&&Gp.has(e)}function Up(e){return`${e}${Vp}`}function Jp(e){return{frame:e.captureComposedFrame(),layers:e.inspect()}}function zp(e){return{data:new Uint8ClampedArray(e.data),width:e.width,height:e.height,colorSpace:e.colorSpace??"srgb"}}function fn(e){return JSON.parse(JSON.stringify(e))}function _r(e){if(!(!e||typeof e!="object"||Array.isArray(e)))return e}function Yp(e){let t=_r(e);return typeof t?.id=="string"&&t.id.length>0?t.id:void 0}function Xp(e){if(!e||typeof e!="object")return;let t=e;if(!(typeof t.id!="string"||typeof t.ref!="string"||typeof t.code!="string"||typeof t.message!="string"))return t}function st(e,t){if(t)return e.versions.find(n=>n.id===t)}function ed(e){return e?{...e}:null}function no(e){if(!e?.compositor)throw new Error("createVisualLayerController: compositor is required");if(!e.layers?.length)throw new Error("createVisualLayerController: at least one layer is required");let t=e.compositor,n=e.preloader,r=!!e.reducedMotion,i=e.fallback??"keep-prior",o=Dt({originFrame:e.originFrame,reducedMotion:r}),s=e.sceneId??null,a=!1,d=0,m=new Map,u=new Map,y=new Map,k=new Map,R=[],T=[],b=()=>{if(a)throw new Error(qp)};function x(g){R.push(g),e.dispatch&&e.dispatch({type:g.type,kind:g.type===Za?"diagnostic":"state",payload:g})}function F(g){T.push(g),x({type:Za,atFrame:g.atFrame,layerId:g.layerId,version:g.version,progress:0,code:g.code})}function U(g,S){y.set(g,S)}function O(g){let S=y.get(g);if(S)return S;if(n?.get(g))return"ready";let I=n?.getProgress().items[g];return I?.state==="failed"?"failed":I?.state==="ready"?"ready":"pending"}function $(g){let S=u.get(g);if(S)return S.kind==="canvas"?{kind:"canvas",canvas:S.canvas}:{kind:"image",image:S.image}}function C(g,S){let I=st(g.declaration,S);return I?O(I.assetId)==="ready"&&!!$(I.assetId):!1}function p(g){return g.overrideVersion&&C(g,g.overrideVersion)?g.overrideVersion:g.committedVersion}function E(g,S){let I=st(g.declaration,S);return I?ed(k.get(I.assetId))??ed(I.provenance)??null:null}function c(g,S=0){return o.get(g)?.progress??S}function f(g,S,I){try{t.layer(g)}catch{t.addLayer({id:g,order:S,visible:!1,opacity:0,pointerEvents:I.pointerEvents??"none",blend:I.blend,clip:I.clip??void 0,clearPolicy:I.clearPolicy})}}function h(g){try{t.setLayer(g.incomingLayerId,{visible:!1,opacity:0})}catch{}}function A(){for(let g of m.values()){let S=p(g),I=st(g.declaration,S),M=g.transition,q=M?c(M.cueKey):0,X=M?.kind==="crossfade"&&M.toVersion!==null&&C(g,M.toVersion);f(g.compositorLayerId,g.order,g);let J=g.visible,Z=1;M?.kind==="hide"?(Z=1-q,q>=1&&(J=!1)):M?.kind==="show"?(J=C(g,M.toVersion),Z=J?M.durationFrames===0?1:q:0):X&&(Z=1-q);let Q=I?$(I.assetId):void 0;if(t.setLayer(g.compositorLayerId,{order:g.order,visible:J&&!!Q,opacity:Z,blend:g.blend,clip:g.clip??void 0,pointerEvents:g.pointerEvents,clearPolicy:g.clearPolicy,source:Q}),X&&M){let ve=st(g.declaration,M.toVersion),Ie=ve?$(ve.assetId):void 0;if(Ie){try{t.layer(g.incomingLayerId)}catch{t.addLayer({id:g.incomingLayerId,order:g.order+1,visible:!1,opacity:0,pointerEvents:"none",blend:g.blend,clip:g.clip??void 0,clearPolicy:g.clearPolicy})}t.setLayer(g.incomingLayerId,{order:g.order+1,visible:!0,opacity:q,blend:g.blend,clip:g.clip??void 0,pointerEvents:"none",clearPolicy:g.clearPolicy,source:Ie});continue}}h(g)}}function L(g){let S=p(g);return{id:g.declaration.id,kind:g.kind,visible:g.visible&&!!(S&&C(g,S)),activeVersion:S,pendingVersion:g.pendingVersion,committedVersion:g.committedVersion,opacity:t.layer(g.compositorLayerId).opacity,order:g.order,provenance:E(g,S),overrideVersion:g.overrideVersion,transition:g.transition?{kind:g.transition.kind,progress:c(g.transition.cueKey),fromVersion:g.transition.fromVersion,toVersion:g.transition.toVersion,cueKey:g.transition.cueKey,startFrame:g.transition.startFrame,durationFrames:g.transition.durationFrames,delayFrames:g.transition.delayFrames,easing:g.transition.easing}:null}}function w(g,S,I){g.committedVersion=S,g.pendingVersion=null,g.transition=null,g.visible=I,A(),x({type:I?Fp:Qa,atFrame:o.frame,layerId:g.declaration.id,version:S,progress:1})}function B(g){g.visible=!1,g.pendingVersion=null,g.transition=null,A(),x({type:Qa,atFrame:o.frame,layerId:g.declaration.id,version:g.committedVersion??void 0,progress:1})}function G(g,S,I,M){let q=g.fallback;g.transition=null,g.pendingVersion=null,q==="hide"?g.visible=!1:typeof q=="object"&&q.version&&C(g,q.version)&&(g.committedVersion=q.version,g.visible=!0),A(),F({code:M?"asset-failed":"missing-source",layerId:g.declaration.id,version:S??void 0,assetId:I,message:M?M.message:`visual layer "${g.declaration.id}" kept the prior valid frame`,atFrame:o.frame,failure:M})}function D(g){let S=g.transition;if(S?.kind==="hide")return B(g),!0;let I=g.pendingVersion??S?.toVersion??null;if(!I)return g.transition=null,!0;if(!st(g.declaration,I))return G(g,I),!0;if(C(g,I))return w(g,I,!0),!0;let M=st(g.declaration,I).assetId;return O(M)==="failed"?(G(g,I,M),!0):(g.transition=null,g.pendingVersion=I,A(),!1)}function l(){for(let g of m.values())if(!g.transition&&g.pendingVersion){if(C(g,g.pendingVersion))w(g,g.pendingVersion,!0);else if(O(st(g.declaration,g.pendingVersion)?.assetId??"")==="failed"){let S=st(g.declaration,g.pendingVersion);G(g,g.pendingVersion,S?.assetId)}}for(let g of m.values())g.overrideVersion&&C(g,g.overrideVersion)&&g.committedVersion!==g.overrideVersion&&w(g,g.overrideVersion,!0)}function v(g,S){U(g,"failed");for(let I of m.values()){let M=I.declaration.versions.find(Q=>Q.assetId===g);if(!M)continue;let q=st(I.declaration,I.pendingVersion),X=st(I.declaration,I.transition?.toVersion??null),J=st(I.declaration,I.overrideVersion);if(q?.assetId===g||X?.assetId===g||J?.assetId===g){I.transition&&o.cancel(I.transition.cueKey),J?.assetId===g&&(I.overrideVersion=null),G(I,M.id,g,S);continue}F({code:"asset-failed",layerId:I.declaration.id,version:M.id,assetId:g,message:S?.message??`asset "${g}" failed; prior frame kept`,atFrame:o.frame,failure:S}),A()}}function P(g){for(let S of g){let I=[...m.values()].find(M=>M.transition?.cueKey===S.idempotencyKey);if(!(!I||!I.transition))if(S.type===un)x({type:$p,atFrame:S.atFrame,layerId:I.declaration.id,version:I.transition.toVersion??void 0,kind:I.transition.kind,progress:S.progress}),A();else if(S.type===Vn){let M=I.transition.kind,q=I.transition.toVersion??void 0;D(I),x({type:Bp,atFrame:S.atFrame,layerId:I.declaration.id,version:q,kind:M,progress:1})}else(S.type===ln||S.type===qt)&&(I.transition=null,A())}}function _(){let g=R.slice(d).map(S=>fn(S));return d=R.length,g}for(let g of e.layers){if(!g?.id)throw new Error("createVisualLayerController: layer id is required");if(m.has(g.id))throw new Error(`createVisualLayerController: duplicate layer id "${g.id}"`);if(!Wp(g.kind))throw new Error(`createVisualLayerController: layer "${g.id}" kind is invalid`);if(!g.versions?.length)throw new Error(`createVisualLayerController: layer "${g.id}" needs versions`);let S=new Set;for(let Z of g.versions){if(!Z?.id||!Z.assetId)throw new Error(`createVisualLayerController: layer "${g.id}" versions need id and assetId`);if(S.has(Z.id))throw new Error(`createVisualLayerController: layer "${g.id}" duplicate version "${Z.id}"`);S.add(Z.id),Z.provenance&&k.set(Z.assetId,{...Z.provenance})}if(g.initialVersion&&!S.has(g.initialVersion))throw new Error(`createVisualLayerController: layer "${g.id}" unknown initialVersion`);let I=g.compositorLayerId??g.id,M=g.incomingLayerId??Up(I),q=g.order??0,X=g.pointerEvents??(g.kind==="mask"?"none":"auto"),J={declaration:g,compositorLayerId:I,incomingLayerId:M,kind:g.kind,order:q,blend:g.blend??"source-over",clip:g.clip?{...g.clip}:null,pointerEvents:X,clearPolicy:g.clearPolicy??"opaque",fallback:g.fallback??i,visible:!!g.initialVersion,committedVersion:g.initialVersion??null,pendingVersion:null,overrideVersion:null,transition:null};m.set(g.id,J),f(I,q,J)}A();function N(g){if(b(),!g||typeof g!="object")return{ok:!1,reason:"invalid",detail:"spec is required"};if(!g.layerId)return{ok:!1,reason:"invalid",detail:"layerId is required"};let S=m.get(g.layerId);if(!S)return{ok:!1,reason:"invalid",detail:`unknown layer "${g.layerId}"`};if(!jp(g.kind))return{ok:!1,reason:"invalid",detail:"unsupported kind"};if(g.kind!=="hide"&&!g.toVersion)return{ok:!1,reason:"invalid",detail:"toVersion is required"};if(g.toVersion&&!st(S.declaration,g.toVersion))return{ok:!1,reason:"invalid",detail:`unknown version "${g.toVersion}"`};let I={name:g.name,idempotencyKey:g.idempotencyKey,startFrame:g.startFrame,durationFrames:g.durationFrames,delayFrames:g.delayFrames,easing:g.easing,repeat:g.repeat,reducedMotion:g.reducedMotion,onDuplicate:g.onDuplicate??"replace"},M=o.snapshot().events.length,q=o.play(I);if(!q.ok)return q;let X=o.snapshot().events.slice(M);return S.pendingVersion=g.kind==="hide"?S.committedVersion:g.toVersion??null,S.transition={kind:g.kind,cueKey:g.idempotencyKey,fromVersion:g.fromVersion??S.committedVersion,toVersion:g.kind==="hide"?S.committedVersion:g.toVersion??null,startFrame:q.cue.startFrame,durationFrames:q.cue.durationFrames,delayFrames:q.cue.delayFrames,easing:q.cue.easing},P(X),A(),_(),q}function W(g){let S=_r(g),I=typeof S?.sceneId=="string"?S.sceneId:void 0;if(e.sceneId&&I&&I!==e.sceneId)return;I&&(s=I);let M=typeof S?.layerId=="string"?S.layerId:typeof S?.overlayId=="string"?S.overlayId:void 0,q=typeof S?.version=="string"?S.version:void 0;if(M&&q){N({name:`visual:${M}:replace`,idempotencyKey:`visual:${M}:accepted`,layerId:M,kind:"replace",toVersion:q,durationFrames:2});return}for(let X of e.onAccepted??[])N({name:`visual:${X.layerId}:${X.kind??"replace"}`,idempotencyKey:X.idempotencyKey??`visual:${X.layerId}:accepted`,layerId:X.layerId,kind:X.kind??"replace",toVersion:X.toVersion,durationFrames:X.durationFrames??2,delayFrames:X.delayFrames,easing:X.easing})}function j(){let g=[...m.values()].map(I=>{let M=L(I);return{id:I.declaration.id,kind:I.kind,visible:I.visible,committedVersion:I.committedVersion,pendingVersion:I.pendingVersion,activeVersion:M.activeVersion,opacity:M.opacity,order:I.order,overrideVersion:I.overrideVersion,provenance:M.provenance,fallback:I.fallback,transition:M.transition}}).sort((I,M)=>I.id<M.id?-1:I.id>M.id?1:0),S={};for(let[I,M]of[...y.entries()].sort(([q],[X])=>q<X?-1:q>X?1:0))S[I]=M;return fn({schemaVersion:Xa,frame:o.frame,sceneId:s,reducedMotion:r,layers:g,assets:S,events:R.map(I=>fn(I)),diagnostics:T.map(I=>fn(I))})}function H(g){b();let S=[],I=J=>{let Z={code:"invalid-snapshot",layerId:"",message:J,atFrame:o.frame};return{ok:!1,errors:[...S,Z]}},M=g;if(typeof g=="string")try{M=JSON.parse(g)}catch{return I("snapshot JSON is invalid")}if(!M||typeof M!="object"||Array.isArray(M))return I("snapshot must be an object");let q=M;if(q.schemaVersion!==Xa)return I("unsupported visual layer snapshot schema");if(typeof q.frame!="number"||!Number.isFinite(q.frame))return I("frame must be finite");if(!Array.isArray(q.layers))return I("layers must be an array");if(typeof q.reducedMotion=="boolean"&&(r=q.reducedMotion),o=Dt({originFrame:q.frame,reducedMotion:!1}),s=typeof q.sceneId=="string"||q.sceneId===null?q.sceneId:s,R.length=0,T.length=0,d=0,Array.isArray(q.events)&&(R.push(...q.events.map(J=>fn(J))),d=R.length),Array.isArray(q.diagnostics)&&T.push(...q.diagnostics.map(J=>fn(J))),y.clear(),q.assets&&typeof q.assets=="object")for(let[J,Z]of Object.entries(q.assets))(Z==="ready"||Z==="failed"||Z==="pending")&&y.set(J,Z);let X=new Map(q.layers.map(J=>[J.id,J]));for(let J of m.values()){let Z=X.get(J.declaration.id);Z&&(J.visible=!!Z.visible,J.committedVersion=Z.committedVersion??null,J.pendingVersion=Z.pendingVersion??null,J.overrideVersion=Z.overrideVersion??null,J.transition=null,Z.transition&&o.play({name:`visual:${J.declaration.id}:${Z.transition.kind}`,idempotencyKey:Z.transition.cueKey,startFrame:Z.transition.startFrame,durationFrames:Z.transition.durationFrames,delayFrames:Z.transition.delayFrames,easing:Z.transition.easing,onDuplicate:"replace"}).ok&&(J.transition={kind:Z.transition.kind,cueKey:Z.transition.cueKey,fromVersion:Z.transition.fromVersion,toVersion:Z.transition.toVersion,startFrame:Z.transition.startFrame,durationFrames:Z.transition.durationFrames,delayFrames:Z.transition.delayFrames,easing:Z.transition.easing}))}return A(),o.setReducedMotion(r),{ok:!0,snapshot:j()}}return{registerSource(g,S){if(b(),typeof g!="string"||g.length===0)throw new Error("createVisualLayerController: assetId is required");if(S instanceof HTMLCanvasElement)u.set(g,{kind:"canvas",canvas:S});else if(S&&"data"in S&&"width"in S)u.set(g,{kind:"image",image:zp(S)});else throw new Error("createVisualLayerController: source must be ImageData or canvas");l(),A()},handleHostEvent(g){if(b(),!g||typeof g!="object")return;if(g.type===Hp){W(g.payload);return}let S=Yp(g.payload);if(S){if(g.type===ze){U(S,"ready");let M=_r(g.payload)?.resource;if(M&&typeof M=="object"&&"provenance"in M){let q=M.provenance;q&&k.set(S,{...q})}l(),A();return}if(g.type===We){let I=_r(g.payload);v(S,Xp(I?.failure))}}},override(g,S){b();let I=m.get(g);if(!I)throw new Error(`createVisualLayerController: unknown layer "${g}"`);if(S===null){I.overrideVersion=null,A();return}if(!st(I.declaration,S))throw new Error(`createVisualLayerController: unknown version "${S}" on "${g}"`);if(I.overrideVersion=S,C(I,S)){I.transition&&o.cancel(I.transition.cueKey),w(I,S,!0);return}A()},play:N,setReducedMotion(g){b(),r=!!g,o.setReducedMotion(r)},step(g=1){b();let S=o.step(g);return P(S),l(),A(),_()},snapshot(){return b(),j()},restore:H,inspect(){return b(),A(),[...m.values()].map(L).sort((g,S)=>g.id<S.id?-1:g.id>S.id?1:0)},captureComposedFrame(){return b(),A(),t.captureComposedFrame()},destroy(){a||(a=!0,o.reset(),R.length=0,T.length=0)},get frame(){return o.frame},get sceneId(){return s},get compositor(){return t},get reducedMotion(){return r}}}var Qp=["loading","ready","error","unsupported"],Zp=["keyboard","pointer","audio","assets","hostChannel"],ef=["image","audio","font","spritesheet"],tf=["tone","midi"],io=["source-over","screen"],nd=["transparent","opaque"],nf=["render","calculation"],Bn=["audio","controller","network","persistence","fullscreen"],rf=new Set(Qp),rd=new Set(Zp),td=new Set(ef),id=new Set(tf),of=new Set(["version","id","runtime","phases","managers","assets","acceptedEvents","emittedEvents","permissions","integrations","surface","layers","modules","kind","grants"]),sf=new Set(["minContractVersion","features"]),af=new Set(["kinds","declarations"]),df=new Set(["id","kind"]),cf=new Set(["emit","subscribe","authoritative"]),od=new Set(["alpha","clearPolicy"]),sd=new Set(["compositor","blend"]),ad=new Set(["refs"]),uf=new Set(["id","version"]),Lr=/^[a-z0-9][a-z0-9.-]*$/i,dd=new Set(io),cd=new Set(nd),ud=new Set(nf),ro=new Set(Bn),lf=new Set(["contractVersion","features","integrations","managers","emit","subscribe","surface","layers","modules","kinds","grants"]);function ce(e,t,n){return n?{code:e,detail:t,path:n}:{code:e,detail:t}}function at(e){return e!==null&&typeof e=="object"&&!Array.isArray(e)}function dt(e,t,n){let r=[];for(let i of Object.keys(e))t.has(i)||r.push(ce("unknown-field",`unknown field "${i}"`,n?`${n}.${i}`:i));return r}function pf(e){if(typeof e!="string"||e.length===0)return!1;let t=e.split(".");return t.some(n=>n.length===0)?!1:t.every(n=>n==="*"||/^[a-z0-9][a-z0-9-]*$/i.test(n))}function ff(e,t){let n=e.split("."),r=t.split(".");if(n.length!==r.length)return!1;for(let i=0;i<n.length;i++)if(n[i]!=="*"&&n[i]!==r[i])return!1;return!0}function Vr(e,t){for(let n of t)if(e===n||ff(n,e))return!0;return!1}function mn(e){let t=new Set,n=[];for(let r of e)t.has(r)||(t.add(r),n.push(r));return n}function oo(e,t,n){if(!Array.isArray(e))return{ok:!1,errors:[ce("invalid-field",`${t} must be an array`,t)]};let r=[],i=[];return e.forEach((o,s)=>{let a=`${t}[${s}]`;if(typeof o!="string"||o.length===0){r.push(ce("invalid-field",`${t} entries must be non-empty strings`,a));return}let d=n(o,a);d?r.push(d):i.push(o)}),r.length>0?{ok:!1,errors:r}:{ok:!0,values:i}}function gn(e,t){return oo(e,t,(n,r)=>pf(n)?void 0:ce("invalid-pattern",`invalid event pattern "${n}"`,r))}function lt(e,t,n,r,i){return oo(e,t,(o,s)=>n.has(o)?void 0:ce(r,`invalid ${i} "${o}"`,s))}function ld(e,t){return oo(e,t,(n,r)=>/^[a-z0-9][a-z0-9.-]*$/i.test(n)?void 0:ce("invalid-feature",`invalid feature tag "${n}"`,r))}function pd(e,t){if(!Array.isArray(e))return{ok:!1,errors:[ce("invalid-module",`${t} must be an array`,t)]};let n=[],r=[];return e.forEach((i,o)=>{let s=`${t}[${o}]`;if(!at(i)){n.push(ce("invalid-module","module ref must be an object",s));return}n.push(...dt(i,uf,s)),(typeof i.id!="string"||i.id.length===0||!Lr.test(i.id))&&n.push(ce("invalid-module",`invalid module id "${String(i.id)}"`,`${s}.id`)),(typeof i.version!="string"||i.version.length===0||!Lr.test(i.version))&&n.push(ce("invalid-module",`invalid module version "${String(i.version)}"`,`${s}.version`)),typeof i.id=="string"&&Lr.test(i.id)&&typeof i.version=="string"&&Lr.test(i.version)&&r.push({id:i.id,version:i.version})}),n.length>0?{ok:!1,errors:n}:{ok:!0,values:r}}function mf(e){let t=new Set,n=[];for(let r of e){let i=`${r.id}@${r.version}`;t.has(i)||(t.add(i),n.push({id:r.id,version:r.version}))}return n}function gf(e){if(!at(e))return[ce("invalid-manifest","capability manifest must be a JSON object")];let t=[...dt(e,of,"")];if(e.version!==void 0&&e.version!==1&&t.push(ce("invalid-version","capability manifest version must be 1","version")),(typeof e.id!="string"||e.id.length===0)&&t.push(ce("invalid-id","id is required","id")),!at(e.runtime))t.push(ce("invalid-runtime","runtime is required","runtime"));else{t.push(...dt(e.runtime,sf,"runtime"));let a=e.runtime.minContractVersion;(typeof a!="number"||!Number.isInteger(a)||a<1)&&t.push(ce("invalid-runtime","runtime.minContractVersion must be an integer >= 1","runtime.minContractVersion"));let d=ld(e.runtime.features,"runtime.features");d.ok||t.push(...d.errors)}let n=lt(e.phases,"phases",rf,"invalid-phase","phase");n.ok||t.push(...n.errors);let r=lt(e.managers,"managers",rd,"invalid-manager","manager");if(r.ok||t.push(...r.errors),!at(e.assets))t.push(ce("invalid-assets","assets is required","assets"));else{t.push(...dt(e.assets,af,"assets"));let a=lt(e.assets.kinds,"assets.kinds",td,"invalid-asset-kind","asset kind");a.ok||t.push(...a.errors),Array.isArray(e.assets.declarations)?e.assets.declarations.forEach((d,m)=>{let u=`assets.declarations[${m}]`;if(!at(d)){t.push(ce("invalid-assets","asset declaration must be an object",u));return}t.push(...dt(d,df,u)),(typeof d.id!="string"||d.id.length===0)&&t.push(ce("invalid-assets","asset declaration id is required",`${u}.id`)),(typeof d.kind!="string"||!td.has(d.kind))&&t.push(ce("invalid-asset-kind",`invalid asset kind "${String(d.kind)}"`,`${u}.kind`))}):t.push(ce("invalid-assets","assets.declarations must be an array","assets.declarations"))}let i=gn(e.acceptedEvents,"acceptedEvents");i.ok||t.push(...i.errors);let o=gn(e.emittedEvents,"emittedEvents");if(o.ok||t.push(...o.errors),!at(e.permissions))t.push(ce("invalid-permissions","permissions is required","permissions"));else{t.push(...dt(e.permissions,cf,"permissions"));let a=gn(e.permissions.emit,"permissions.emit");a.ok||t.push(...a.errors);let d=gn(e.permissions.subscribe,"permissions.subscribe");d.ok||t.push(...d.errors),e.permissions.authoritative!==void 0&&typeof e.permissions.authoritative!="boolean"&&t.push(ce("invalid-permissions","permissions.authoritative must be a boolean","permissions.authoritative"))}let s=lt(e.integrations,"integrations",id,"invalid-integration","integration");if(s.ok||t.push(...s.errors),e.surface!==void 0&&(at(e.surface)?(t.push(...dt(e.surface,od,"surface")),e.surface.alpha!==void 0&&typeof e.surface.alpha!="boolean"&&t.push(ce("invalid-surface","surface.alpha must be a boolean","surface.alpha")),e.surface.clearPolicy!==void 0&&(typeof e.surface.clearPolicy!="string"||!cd.has(e.surface.clearPolicy))&&t.push(ce("invalid-clear-policy",`invalid clear policy "${String(e.surface.clearPolicy)}"`,"surface.clearPolicy"))):t.push(ce("invalid-surface","surface must be an object","surface"))),e.layers!==void 0){if(!at(e.layers))t.push(ce("invalid-layers","layers must be an object","layers"));else if(t.push(...dt(e.layers,sd,"layers")),e.layers.compositor!==void 0&&typeof e.layers.compositor!="boolean"&&t.push(ce("invalid-layers","layers.compositor must be a boolean","layers.compositor")),e.layers.blend!==void 0){let a=lt(e.layers.blend,"layers.blend",dd,"invalid-blend","blend mode");a.ok||t.push(...a.errors)}}if(e.modules!==void 0){if(!at(e.modules))t.push(ce("invalid-module","modules must be an object","modules"));else if(t.push(...dt(e.modules,ad,"modules")),e.modules.refs!==void 0){let a=pd(e.modules.refs,"modules.refs");a.ok||t.push(...a.errors)}}if(e.kind!==void 0&&(typeof e.kind!="string"||!ud.has(e.kind))&&t.push(ce("invalid-kind",`invalid cart kind "${String(e.kind)}"`,"kind")),e.grants!==void 0){let a=lt(e.grants,"grants",ro,"invalid-grant","grant");a.ok||t.push(...a.errors)}return t}function hf(e){let t=[];return e.emittedEvents.forEach((n,r)=>{Vr(n,e.permissions.emit)||t.push(ce("undeclared-permission",`emitted event "${n}" is not covered by permissions.emit`,`emittedEvents[${r}]`))}),e.acceptedEvents.forEach((n,r)=>{Vr(n,e.permissions.subscribe)||t.push(ce("undeclared-permission",`accepted event "${n}" is not covered by permissions.subscribe`,`acceptedEvents[${r}]`))}),t}function yf(e){let t=mn(e.assets.kinds),n=e.assets.declarations.map(o=>({id:o.id,kind:o.kind})),r={emit:[...e.permissions.emit],subscribe:[...e.permissions.subscribe]};e.permissions.authoritative===!0&&(r.authoritative=!0);let i={version:1,id:e.id,runtime:{minContractVersion:e.runtime.minContractVersion,features:[...e.runtime.features]},phases:mn(e.phases),managers:mn(e.managers),assets:{kinds:t,declarations:n},acceptedEvents:[...e.acceptedEvents],emittedEvents:[...e.emittedEvents],permissions:r,integrations:mn(e.integrations)};if(e.surface){let o={};e.surface.alpha===!0&&(o.alpha=!0),e.surface.clearPolicy&&(o.clearPolicy=e.surface.clearPolicy),(o.alpha!==void 0||o.clearPolicy!==void 0)&&(i.surface=o)}if(e.layers){let o={};e.layers.compositor===!0&&(o.compositor=!0),e.layers.blend&&e.layers.blend.length>0&&(o.blend=mn(e.layers.blend)),(o.compositor!==void 0||o.blend!==void 0)&&(i.layers=o)}if(e.modules?.refs&&e.modules.refs.length>0){let o=mf(e.modules.refs);o.length>0&&(i.modules={refs:o})}return e.kind==="calculation"&&(i.kind="calculation"),e.grants&&e.grants.length>0&&(i.grants=mn(e.grants)),i}function so(e){let t=gf(e);if(t.length>0)return{ok:!1,errors:t};let n=yf(e);return t.push(...hf(n)),t.length>0?{ok:!1,errors:t}:{ok:!0,manifest:n}}function Fr(e,t){let n=so(e),r=n.ok?[]:[...n.errors];if(!at(t))return{ok:!1,errors:[ce("invalid-host","host capabilities must be a JSON object")]};r.push(...dt(t,lf,"host")),typeof t.contractVersion!="number"||!Number.isInteger(t.contractVersion)||t.contractVersion<1?r.push(ce("invalid-host","host.contractVersion must be an integer >= 1","host.contractVersion")):n.ok&&t.contractVersion<n.manifest.runtime.minContractVersion&&r.push(ce("unsupported-runtime",`host contract version ${t.contractVersion} is below required ${n.manifest.runtime.minContractVersion}`,"runtime.minContractVersion"));let i=ld(t.features,"host.features");if(!i.ok)r.push(...i.errors);else if(n.ok){let a=new Set(i.values);n.manifest.runtime.features.forEach((d,m)=>{a.has(d)||r.push(ce("unsupported-feature",`host does not support required feature "${d}"`,`runtime.features[${m}]`))})}let o=lt(t.integrations,"host.integrations",id,"invalid-integration","integration");if(!o.ok)r.push(...o.errors);else if(n.ok){let a=new Set(o.values);n.manifest.integrations.forEach((d,m)=>{a.has(d)||r.push(ce("missing-integration",`host does not provide required integration "${d}"`,`integrations[${m}]`))})}if(t.managers!==void 0){let a=lt(t.managers,"host.managers",rd,"invalid-manager","manager");if(!a.ok)r.push(...a.errors);else if(n.ok){let d=new Set(a.values);n.manifest.managers.forEach((m,u)=>{d.has(m)||r.push(ce("missing-manager",`host does not provide required manager "${m}"`,`managers[${u}]`))})}}if(t.emit!==void 0){let a=gn(t.emit,"host.emit");a.ok?n.ok&&n.manifest.permissions.emit.forEach((d,m)=>{Vr(d,a.values)||r.push(ce("unknown-permission",`host does not allow emit permission "${d}"`,`permissions.emit[${m}]`))}):r.push(...a.errors)}if(t.subscribe!==void 0){let a=gn(t.subscribe,"host.subscribe");a.ok?n.ok&&n.manifest.permissions.subscribe.forEach((d,m)=>{Vr(d,a.values)||r.push(ce("unknown-permission",`host does not allow subscribe permission "${d}"`,`permissions.subscribe[${m}]`))}):r.push(...a.errors)}if(t.surface!==void 0&&(at(t.surface)?(r.push(...dt(t.surface,od,"host.surface")),t.surface.alpha!==void 0&&typeof t.surface.alpha!="boolean"&&r.push(ce("invalid-host","host.surface.alpha must be a boolean","host.surface.alpha")),t.surface.clearPolicy!==void 0&&(Array.isArray(t.surface.clearPolicy)?t.surface.clearPolicy:[t.surface.clearPolicy]).forEach((d,m)=>{(typeof d!="string"||!cd.has(d))&&r.push(ce("invalid-clear-policy",`invalid clear policy "${String(d)}"`,Array.isArray(t.surface?.clearPolicy)?`host.surface.clearPolicy[${m}]`:"host.surface.clearPolicy"))})):r.push(ce("invalid-host","host.surface must be an object","host.surface"))),t.layers!==void 0){if(!at(t.layers))r.push(ce("invalid-host","host.layers must be an object","host.layers"));else if(r.push(...dt(t.layers,sd,"host.layers")),t.layers.compositor!==void 0&&typeof t.layers.compositor!="boolean"&&r.push(ce("invalid-host","host.layers.compositor must be a boolean","host.layers.compositor")),t.layers.blend!==void 0){let a=lt(t.layers.blend,"host.layers.blend",dd,"invalid-blend","blend mode");a.ok||r.push(...a.errors)}}let s;if(t.modules!==void 0)if(!at(t.modules))r.push(ce("invalid-host","host.modules must be an object","host.modules"));else if(r.push(...dt(t.modules,ad,"host.modules")),t.modules.refs!==void 0){let a=pd(t.modules.refs,"host.modules.refs");a.ok?s=a.values:r.push(...a.errors)}else s=[];if(n.ok&&n.manifest.surface){let a=n.manifest.surface,d=t.surface;a.alpha===!0&&d?.alpha!==!0&&r.push(ce("unsupported-surface","host does not provide an alpha-capable surface","surface.alpha")),a.clearPolicy&&((Array.isArray(d?.clearPolicy)?d.clearPolicy:d?.clearPolicy?[d.clearPolicy]:[]).includes(a.clearPolicy)||r.push(ce("unsupported-surface",`host does not provide clear policy "${a.clearPolicy}"`,"surface.clearPolicy")))}if(n.ok&&n.manifest.layers){let a=n.manifest.layers,d=t.layers;if(a.compositor===!0&&d?.compositor!==!0&&r.push(ce("unsupported-layer","host does not provide a compositor","layers.compositor")),a.blend){let m=new Set(d?.blend??[]);a.blend.forEach((u,y)=>{m.has(u)||r.push(ce("unsupported-layer",`host does not provide blend mode "${u}"`,`layers.blend[${y}]`))})}}if(n.ok&&n.manifest.modules?.refs){let a=t.modules===void 0?[]:s??[];n.manifest.modules.refs.forEach((d,m)=>{a.some(u=>u.id===d.id&&u.version===d.version)||r.push(ce("unsupported-module",`host does not provide required module "${d.id}@${d.version}"`,`modules.refs[${m}]`))})}if(n.ok&&n.manifest.grants&&n.manifest.grants.length>0){let a=t.grants===void 0?{ok:!0,values:[]}:lt(t.grants,"host.grants",ro,"invalid-grant","grant");if(!a.ok)r.push(...a.errors);else{let d=new Set(a.values);n.manifest.grants.forEach((m,u)=>{d.has(m)||r.push(ce("ungranted-capability",`host does not grant "${m}"`,`grants[${u}]`))})}}else if(t.grants!==void 0){let a=lt(t.grants,"host.grants",ro,"invalid-grant","grant");a.ok||r.push(...a.errors)}if(t.kinds!==void 0){let a=lt(t.kinds,"host.kinds",ud,"invalid-kind","cart kind");if(!a.ok)r.push(...a.errors);else if(n.ok){let d=n.manifest.kind??"render";a.values.includes(d)||r.push(ce("unsupported-kind",`host does not support cart kind "${d}"`,"kind"))}}return r.length>0?{ok:!1,errors:r}:{ok:!0}}var yd=io;var bf="Compositor has been destroyed";function vf(e){return Number.isFinite(e)?e<0?0:e>1?1:e:1}function Sf(e){let t=e.trim().toLowerCase();if(t[0]!=="#")throw new Error(`createCompositor: host.color must be #rgb or #rrggbb, got "${e}"`);let n=t.slice(1);if(n.length===3)return{r:parseInt(n[0]+n[0],16),g:parseInt(n[1]+n[1],16),b:parseInt(n[2]+n[2],16),a:255};if(n.length===6)return{r:parseInt(n.slice(0,2),16),g:parseInt(n.slice(2,4),16),b:parseInt(n.slice(4,6),16),a:255};throw new Error(`createCompositor: host.color must be #rgb or #rrggbb, got "${e}"`)}function kf(e){return{data:new Uint8ClampedArray(e.data),width:e.width,height:e.height,colorSpace:e.colorSpace??"srgb"}}function Ef(e,t){if(e===void 0||e.kind==="participant")return{kind:"participant"};if(e.kind==="canvas"){if(!e.canvas)throw new Error(`createCompositor: layer "${t}" canvas source is required`);return{kind:"canvas",canvas:e.canvas}}if(e.kind==="image"){if(!e.image||!e.image.data)throw new Error(`createCompositor: layer "${t}" image source is required`);return{kind:"image",image:kf(e.image)}}throw new Error(`createCompositor: layer "${t}" source.kind must be participant, image, or canvas`)}function ao(e,t){if(!e.id)throw new Error("createCompositor: layer id is required");if(!Number.isFinite(e.order))throw new Error(`createCompositor: layer "${e.id}" order is required`);let n=e.blend??"source-over";if(n!=="source-over"&&n!=="screen")throw new Error(`createCompositor: layer "${e.id}" blend must be source-over or screen`);let r=e.pointerEvents??"auto";if(r!=="auto"&&r!=="none")throw new Error(`createCompositor: layer "${e.id}" pointerEvents must be auto or none`);let i=e.clearPolicy??t;if(i!=="transparent"&&i!=="opaque")throw new Error(`createCompositor: layer "${e.id}" clearPolicy is invalid`);let o=Ef(e.source,e.id);return{id:e.id,order:e.order,visible:e.visible!==!1,opacity:vf(e.opacity??1),blend:n,clip:e.clip?{...e.clip}:null,pointerEvents:r,clearPolicy:i,sourceKind:o.kind,source:o}}function fd(e){return{id:e.id,order:e.order,visible:e.visible,opacity:e.opacity,blend:e.blend,clip:e.clip?{...e.clip}:null,pointerEvents:e.pointerEvents,clearPolicy:e.clearPolicy,sourceKind:e.source.kind}}function md(e){return[...e].sort((t,n)=>t.order-n.order||t.id.localeCompare(n.id))}function co(e,t){return 255-Math.round((255-e)*(255-t)/255)}function If(e,t,n,r,i,o,s,a){let d=o/255*s;if(d<=0)return;let m=e[t],u=e[t+1],y=e[t+2],k=e[t+3]/255,R=n,T=r,b=i;a==="screen"&&(R=co(m,n),T=co(u,r),b=co(y,i));let x=d+k*(1-d);if(x<=0){e[t]=0,e[t+1]=0,e[t+2]=0,e[t+3]=0;return}e[t]=Math.round((R*d+m*k*(1-d))/x),e[t+1]=Math.round((T*d+u*k*(1-d))/x),e[t+2]=Math.round((b*d+y*k*(1-d))/x),e[t+3]=Math.round(x*255)}function Rf(e,t,n){if(e.width===t&&e.height===n)return{data:new Uint8ClampedArray(e.data),width:t,height:n,colorSpace:e.colorSpace??"srgb"};let r=new Uint8ClampedArray(t*n*4);for(let i=0;i<n;i++){let o=Math.min(e.height-1,Math.floor(i*e.height/n));for(let s=0;s<t;s++){let a=Math.min(e.width-1,Math.floor(s*e.width/t)),d=(o*e.width+a)*4,m=(i*t+s)*4;r[m]=e.data[d],r[m+1]=e.data[d+1],r[m+2]=e.data[d+2],r[m+3]=e.data[d+3]}}return{data:r,width:t,height:n,colorSpace:e.colorSpace??"srgb"}}function Cf(e,t){for(let n=0;n<e.length;n+=4)e[n]=t.r,e[n+1]=t.g,e[n+2]=t.b,e[n+3]=t.a}function gd(e,t,n){return e?t>=e.x&&n>=e.y&&t<e.x+e.width&&n<e.y+e.height:!0}function hd(e){let t=e.getContext("2d");if(!t)throw new Error("createCompositor: layer canvas has no 2d context");return t.getImageData(0,0,e.width,e.height)}function $r(e,t){e&&(e.style.zIndex=String(t.order),e.style.pointerEvents=t.pointerEvents==="none"?"none":"auto",e.style.visibility=t.visible?"visible":"hidden")}function bd(e){if(!e.layers.length)throw new Error("createCompositor: at least one layer is required");let t=new Set,n=e.clearPolicy??"transparent";if(n!=="transparent"&&n!=="opaque")throw new Error("createCompositor: clearPolicy must be transparent or opaque");let r=new Map;for(let p of e.layers){let E=ao(p,n);if(t.has(E.id))throw new Error(`createCompositor: duplicate layer id "${E.id}"`);t.add(E.id),r.set(E.id,E)}let i=e.group,o=e.dpr&&e.dpr>0?e.dpr:1,s=Math.max(1,(e.width??320)|0),a=Math.max(1,(e.height??180)|0),d=o,m=e.offscreen!==!1,u=!e.target;if(!m&&!e.target)throw new Error("createCompositor: target canvas is required when offscreen is false");let y=e.target??document.createElement("canvas"),k=y.getContext("2d",{alpha:!0});if(!k)throw new Error("createCompositor: host canvas has no 2d context");let R=!1,T=()=>{if(R)throw new Error(bf)},b=()=>({width:Math.max(1,Math.round(s*d)),height:Math.max(1,Math.round(a*d))}),x=()=>{let p=b();y.width!==p.width&&(y.width=p.width),y.height!==p.height&&(y.height=p.height),y.style.width=`${s}px`,y.style.height=`${a}px`},F=()=>md([...r.values()]).map(fd),U=p=>{if(p.source.kind==="image")return p.source.image;if(p.source.kind==="canvas")try{return hd(p.source.canvas)}catch{return}try{let c=i.participant(p.id).cart.canvas;return c?($r(c,p),hd(c)):void 0}catch{return}},O=(p,E,c)=>{if(p.fill(0),n==="opaque"&&!e.host?.image&&!e.host?.color&&p.fill(0),e.host?.image){let f=Rf(e.host.image,E,c);p.set(f.data);return}e.host?.color&&Cf(p,Sf(e.host.color))},$=()=>{let{width:p,height:E}=b();x();let c=k.createImageData(p,E);O(c.data,p,E);for(let f of md([...r.values()])){if(!f.visible||f.opacity<=0)continue;let h=U(f);if(!h)continue;let A=f.clearPolicy==="transparent",L=Math.min(p,h.width),w=Math.min(E,h.height);for(let B=0;B<w;B++)for(let G=0;G<L;G++){if(!gd(f.clip,G,B))continue;let D=(B*h.width+G)*4,l=h.data[D],v=h.data[D+1],P=h.data[D+2],_=h.data[D+3];A&&l===0&&v===0&&P===0||_<=0||If(c.data,(B*p+G)*4,l,v,P,_,f.opacity,f.blend)}}return k.putImageData(c,0,0),c};x();for(let p of F())try{$r(i.participant(p.id).cart.canvas,p)}catch{}return{get canvas(){return y},get width(){return s},get height(){return a},get dpr(){return d},compose(){return T(),$()},captureComposedFrame(){T();let p=$();return{imageData:p,pngDataUrl:y.toDataURL("image/png"),width:p.width,height:p.height,declaredOrder:F()}},resize(p,E,c){T(),s=Math.max(1,p|0),a=Math.max(1,E|0),c!==void 0&&(d=c>0?c:1);let f=b();i.resize(f.width,f.height),x()},setLayer(p,E){T();let c=r.get(p);if(!c)throw new Error(`createCompositor: unknown layer "${p}"`);let f=ao({id:p,order:E.order??c.order,visible:E.visible??c.visible,opacity:E.opacity??c.opacity,blend:E.blend??c.blend,clip:E.clip===void 0?c.clip??void 0:E.clip,pointerEvents:E.pointerEvents??c.pointerEvents,clearPolicy:E.clearPolicy??c.clearPolicy,source:E.source??c.source},n);r.set(p,f);try{$r(i.participant(p).cart.canvas,f)}catch{}},addLayer(p){if(T(),r.has(p.id))throw new Error(`createCompositor: duplicate layer id "${p.id}"`);let E=ao(p,n);r.set(E.id,E);try{$r(i.participant(E.id).cart.canvas,E)}catch{}},layer(p){T();let E=r.get(p);if(!E)throw new Error(`createCompositor: unknown layer "${p}"`);return fd(E)},layers(){return T(),F()},pointerTarget(p,E){T();let c=p|0,f=E|0,h=[...F()].reverse();for(let A of h){if(!A.visible||A.pointerEvents==="none"||!gd(A.clip,c,f))continue;let L=r.get(A.id);if(L&&L.source.kind!=="participant")return A.id;try{i.participant(A.id)}catch{continue}return A.id}},unmountLayer(p){if(T(),!r.has(p))throw new Error(`createCompositor: unknown layer "${p}"`);r.delete(p);try{i.detach(p)}catch{}},inspect(){T();let p=F();return{viewport:{width:s,height:a,dpr:d},clearPolicy:n,layers:p,declaredOrder:p.map(E=>E.id)}},destroy(){R||(R=!0,u&&y.parentNode&&y.remove())}}}function Sd(e){let t=e.devicePixelRatio??1,{contentWidth:n,contentHeight:r,viewportWidth:i,viewportHeight:o,mode:s}=e,a=i/n,d=o/r,m=s==="contain"?Math.min(a,d):Math.max(a,d),u=n*m,y=r*m,k=(i-u)/2,R=(o-y)/2,T=Br(-k/u),b=Br(-R/y),x=Br(i/u),F=Br(o/y);return{mode:s,contentWidth:n,contentHeight:r,viewportWidth:i,viewportHeight:o,devicePixelRatio:t,scale:m,offsetX:k,offsetY:R,canvasWidth:i*t,canvasHeight:o*t,visibleNormalizedRect:{x:T,y:b,width:Math.min(x,1-T),height:Math.min(F,1-b)}}}function Af(e,t){return{x:t.offsetX+e.x*t.contentWidth*t.scale,y:t.offsetY+e.y*t.contentHeight*t.scale}}function qr(e,t){return{x:(e.x-t.offsetX)/(t.contentWidth*t.scale),y:(e.y-t.offsetY)/(t.contentHeight*t.scale)}}function wf(e,t){return{x:e.x/t.devicePixelRatio,y:e.y/t.devicePixelRatio}}function Pf(e,t){return qr(wf(e,t),t)}function xf(e,t){let n=Af({x:e.x,y:e.y},t);return{x:n.x,y:n.y,width:e.width*t.contentWidth*t.scale,height:e.height*t.contentHeight*t.scale}}function kd(e,t,n,r){let o=(r?.space??"canvas")==="css"?qr(e,t):Pf(e,t);for(let s of n.regions)if(Kr(s,o))return s}function Ed(e,t){let n=Hr(e);if(n)return xf(n,t)}function Id(e){let t=[];e.version!==1&&t.push({code:"version-mismatch",detail:`expected version 1, got ${String(e.version)}`});let n=new Set,r=i=>{if(n.has(i)){t.push({code:"duplicate-id",id:i,detail:`duplicate id ${i}`});return}n.add(i)};for(let i of e.landmarks)r(i.id),vd(i.point)||t.push({code:"out-of-bounds",id:i.id,detail:`landmark ${i.id} is outside 0\u20131`});for(let i of e.regions){r(i.id);let o=Hr(i);if(!i.rect&&!i.polygon){t.push({code:"invalid-shape",id:i.id,detail:`region ${i.id} has neither rect nor polygon`});continue}if(i.polygon&&i.polygon.length<3&&t.push({code:"invalid-shape",id:i.id,detail:`region ${i.id} polygon needs at least 3 points`}),o&&!Tf(o)&&t.push({code:"out-of-bounds",id:i.id,detail:`region ${i.id} is outside 0\u20131`}),i.polygon){for(let s of i.polygon)if(!vd(s)){t.push({code:"out-of-bounds",id:i.id,detail:`region ${i.id} has a vertex outside 0\u20131`});break}}}for(let i=0;i<e.regions.length;i+=1){let o=e.regions[i],s=Hr(o);if(s)for(let a=i+1;a<e.regions.length;a+=1){let d=e.regions[a],m=Hr(d);m&&Df(s,m)&&t.push({code:"overlap",id:o.id,with:d.id,detail:`region ${o.id} overlaps ${d.id}`})}}return{ok:t.length===0,diagnostics:t}}function Br(e){return e<=0?0:e>=1?1:e}function vd(e){return e.x>=0&&e.x<=1&&e.y>=0&&e.y<=1}function Tf(e){return e.x>=0&&e.y>=0&&e.width>=0&&e.height>=0&&e.x+e.width<=1&&e.y+e.height<=1}function Df(e,t){return e.x<t.x+t.width&&e.x+e.width>t.x&&e.y<t.y+t.height&&e.y+e.height>t.y}function Hr(e){if(e.rect)return e.rect;if(!e.polygon||e.polygon.length===0)return;let t=1/0,n=1/0,r=-1/0,i=-1/0;for(let o of e.polygon)t=Math.min(t,o.x),n=Math.min(n,o.y),r=Math.max(r,o.x),i=Math.max(i,o.y);return{x:t,y:n,width:r-t,height:i-n}}function Kr(e,t){return e.polygon&&e.polygon.length>=3?Of(t,e.polygon):e.rect?t.x>=e.rect.x&&t.x<e.rect.x+e.rect.width&&t.y>=e.rect.y&&t.y<e.rect.y+e.rect.height:!1}function Of(e,t){let n=!1;for(let r=0,i=t.length-1;r<t.length;i=r,r+=1){let o=t[r],s=t[i];o.y>e.y!=s.y>e.y&&e.x<(s.x-o.x)*(e.y-o.y)/(s.y-o.y)+o.x&&(n=!n)}return n}var Rd=1,Mf=["mask","polygon","rect","depth"],Nf=["pass-through","absorb","exclusive","depth-ordered"];var _f=["idle","hover","focus","selected"],Lf="Semantic layer controller has been destroyed",Ev=new Set(Mf),Vf=new Set(Nf),Ff=new Set(yd);function Cd(e){return typeof e=="string"&&Vf.has(e)}function lo(e){return typeof e=="string"&&Ff.has(e)}function Od(e){let t=[];return e.mask&&t.push("mask"),e.polygon&&e.polygon.length>=3&&t.push("polygon"),e.rect&&t.push("rect"),typeof e.depth=="number"&&Number.isFinite(e.depth)&&t.push("depth"),t}function Ad(e){return e.selected?"selected":e.focus?"focus":e.hover?"hover":"idle"}function po(e){return JSON.parse(JSON.stringify(e))}function wd(){return{hover:!1,focus:!1,selected:!1}}function uo(e,t){return{hover:t?.hover??e.hover,focus:t?.focus??e.focus,selected:t?.selected??e.selected}}function hn(e){return po(e)}function Hn(e){return po(e??{})}function Pd(e,t){let n=e.visuals[t]??e.visuals.idle;return{opacity:n?.opacity??1,blend:n?.blend??e.blend,version:n?.version}}function $f(e,t){let n=e.bounds??{x:0,y:0,width:1,height:1};if(t.x<n.x||t.x>=n.x+n.width||t.y<n.y||t.y>=n.y+n.height||!Number.isInteger(e.width)||!Number.isInteger(e.height)||e.width<1||e.height<1||e.alpha.length!==e.width*e.height)return!1;let r=(t.x-n.x)/n.width,i=(t.y-n.y)/n.height,o=Math.min(e.width-1,Math.max(0,Math.floor(r*e.width))),s=Math.min(e.height-1,Math.max(0,Math.floor(i*e.height)));return(e.alpha[s*e.width+o]??0)>.5}function Bf(e,t){return e.mask?$f(e.mask,t):e.polygon&&e.polygon.length>=3?Kr({id:"",polygon:e.polygon},t):e.rect?Kr({id:"",rect:e.rect},t):typeof e.depth=="number"&&Number.isFinite(e.depth)?t.x>=0&&t.x<=1&&t.y>=0&&t.y<=1:!1}function Hf(e,t){let n=e.hitTest==="exclusive"?1:0,r=t.hitTest==="exclusive"?1:0;if(n!==r)return r-n;let i=e.geometry.depth??0,o=t.geometry.depth??0;return i!==o?o-i:t.order-e.order}function qf(e,t){if(!Number.isInteger(t.width)||!Number.isInteger(t.height)||t.width<1||t.height<1)throw new Error(`region "${e}" mask size is invalid`);if(!Array.isArray(t.alpha)||t.alpha.length!==t.width*t.height)throw new Error(`region "${e}" mask alpha length must be width*height`)}function xd(e,t){if(!t||typeof t!="object")throw new Error(`region "${e}" geometry is required`);if(t.mask&&qf(e,t.mask),t.polygon&&t.polygon.length>0&&t.polygon.length<3)throw new Error(`region "${e}" polygon needs 3+ points`);if(Od(t).length===0)throw new Error(`region "${e}" needs mask, polygon, rect, or depth`)}function Td(e,t){if(t!==void 0){if(!t||typeof t!="object")throw new Error(`region "${e}" visuals must be an object`);for(let n of _f){let r=t[n];if(r&&r.blend!==void 0&&!lo(r.blend))throw new Error(`region "${e}" ${n} blend is invalid`)}}}function Dd(e,t){return e instanceof Error?e.message:t}function Kf(e,t){try{return e.layer(t),!0}catch{return!1}}function fo(e){if(!e?.regions?.length)throw new Error("createSemanticLayerController: at least one region is required");let t=e.compositor,n=e.visualLayers,r=e.originFrame??0,i=!1,o=new Map,s=()=>{if(i)throw new Error(Lf)};function a(b){let x=Ad(b.state);return{id:b.declaration.id,geometryKinds:Od(b.geometry),hitTest:b.hitTest,blend:b.blend,order:b.order,depth:b.geometry.depth??0,state:{...b.state},appearance:x,a11y:b.a11y?{...b.a11y}:null,visual:Pd(b,x)}}function d(b){let x=Ad(b.state),F=Pd(b,x);if(b.visualLayerId&&n&&F.version&&n.override(b.visualLayerId,F.version),b.compositorLayerId&&t){if(!Kf(t,b.compositorLayerId))return;t.setLayer(b.compositorLayerId,{opacity:F.opacity,blend:F.blend,pointerEvents:b.hitTest==="pass-through"?"none":"auto"})}}function m(b){return{geometry:hn(b.geometry),hitTest:b.hitTest,blend:b.blend,order:b.order,compositorLayerId:b.compositorLayerId,visualLayerId:b.visualLayerId,visuals:Hn(b.visuals),state:{...b.state},a11y:b.a11y?{...b.a11y}:null}}function u(b,x){b.geometry=hn(x.geometry),b.hitTest=x.hitTest,b.blend=x.blend,b.order=x.order,b.compositorLayerId=x.compositorLayerId,b.visualLayerId=x.visualLayerId,b.visuals=Hn(x.visuals),b.state={...x.state},b.a11y=x.a11y?{...x.a11y}:null}for(let b of e.regions){if(!b?.id)throw new Error("createSemanticLayerController: region id is required");if(o.has(b.id))throw new Error(`createSemanticLayerController: duplicate region id "${b.id}"`);if(xd(b.id,b.geometry),Td(b.id,b.visuals),b.hitTest&&!Cd(b.hitTest))throw new Error(`createSemanticLayerController: region "${b.id}" hitTest is invalid`);if(b.blend&&!lo(b.blend))throw new Error(`createSemanticLayerController: region "${b.id}" blend is invalid`);let x={declaration:b,geometry:hn(b.geometry),hitTest:b.hitTest??"absorb",blend:b.blend??"source-over",order:b.order??0,compositorLayerId:b.compositorLayerId??null,visualLayerId:b.visualLayerId??null,visuals:Hn(b.visuals),state:uo(wd(),b.initialState),a11y:null};o.set(b.id,x),d(x)}function y(){return[...o.values()].map(a).sort((b,x)=>b.id<x.id?-1:b.id>x.id?1:0)}function k(b){let x=[...o.values()].filter(F=>F.hitTest!=="pass-through"&&Bf(F.geometry,b));return x.sort(Hf),x[0]?.hitTest==="exclusive"?x.filter(F=>F.hitTest==="exclusive"):x[0]?.hitTest==="absorb"?[x[0]]:x}function R(){let b=[...o.values()].map(x=>({id:x.declaration.id,geometry:hn(x.geometry),hitTest:x.hitTest,blend:x.blend,order:x.order,compositorLayerId:x.compositorLayerId,visualLayerId:x.visualLayerId,visuals:Hn(x.visuals),state:{...x.state},a11y:x.a11y?{...x.a11y}:null})).sort((x,F)=>x.id<F.id?-1:x.id>F.id?1:0);return po({schemaVersion:Rd,frame:r,regions:b})}function T(b){s();let x=[],F=f=>({ok:!1,errors:[...x,f]}),U=b;if(typeof b=="string")try{U=JSON.parse(b)}catch{return F("snapshot JSON is invalid")}if(!U||typeof U!="object"||Array.isArray(U))return F("snapshot must be an object");let O=U;if(O.schemaVersion!==Rd)return F("unsupported semantic layer snapshot schema");if(typeof O.frame!="number"||!Number.isFinite(O.frame))return F("frame must be finite");if(!Array.isArray(O.regions))return F("regions must be an array");let $=O.regions,C=new Map;for(let f of $){if(!f||typeof f.id!="string"||f.id.length===0){x.push("region id is required");continue}C.has(f.id)&&x.push(`duplicate region "${f.id}"`),C.set(f.id,f),o.has(f.id)||x.push(`unknown region "${f.id}"`),Cd(f.hitTest)||x.push(`region "${f.id}" hitTest is invalid`),lo(f.blend)||x.push(`region "${f.id}" blend is invalid`),(typeof f.order!="number"||!Number.isFinite(f.order))&&x.push(`region "${f.id}" order must be finite`);try{xd(f.id,f.geometry),Td(f.id,f.visuals)}catch(h){x.push(Dd(h,`region "${f.id}" is invalid`))}}for(let f of o.keys())C.has(f)||x.push(`missing region "${f}"`);if(x.length>0)return{ok:!1,errors:x};let p=r,E=new Map;for(let f of o.values())E.set(f.declaration.id,m(f));let c=()=>{r=p;for(let f of o.values()){let h=E.get(f.declaration.id);h&&u(f,h)}for(let f of o.values())d(f)};r=O.frame;for(let f of o.values()){let h=C.get(f.declaration.id);f.geometry=hn(h.geometry),f.hitTest=h.hitTest,f.blend=h.blend,f.order=h.order,f.compositorLayerId=h.compositorLayerId??null,f.visualLayerId=h.visualLayerId??null,f.visuals=Hn(h.visuals),f.state=uo(wd(),h.state),f.a11y=h.a11y&&typeof h.a11y.name=="string"&&typeof h.a11y.role=="string"?{name:h.a11y.name,role:h.a11y.role}:null}try{for(let f of o.values())d(f)}catch(f){return c(),F(Dd(f,"visual layer apply failed"))}return{ok:!0,snapshot:R()}}return{list(){return s(),y()},inspect(){return s(),y()},inspectPublished(){return s(),y().map(b=>({id:b.id,geometryKinds:b.geometryKinds,a11y:b.a11y}))},get(b){s();let x=o.get(b);return x?a(x):void 0},geometryOf(b){s();let x=o.get(b);return x?hn(x.geometry):void 0},setRegionState(b,x){s();let F=o.get(b);if(!F)throw new Error(`createSemanticLayerController: unknown region "${b}"`);let U={...F.state};F.state=uo(F.state,x);try{d(F)}catch(O){throw F.state=U,O}},setRegionA11y(b,x){s();let F=o.get(b);if(!F)throw new Error(`createSemanticLayerController: unknown region "${b}"`);F.a11y=x?{name:x.name,role:x.role}:null},hitTest(b){s();let x=k(b);return x[0]?a(x[0]):void 0},hitTestAll(b){return s(),k(b).map(a)},snapshot(){return s(),R()},restore:T,destroy(){i||(i=!0,o.clear())},get frame(){return r}}}var Gf=new Set(["string","number","boolean","object","array"]);function ct(e,t,n){return n?{code:e,detail:t,path:n}:{code:e,detail:t}}function Wf(e){if(!(typeof e!="string"||e.length===0)){for(let t of e.split("."))if(Ar(t))return t}}function jf(e){let t=e.split(".");return t.length===0?"*":(t[t.length-1]="*",t.join("."))}function Uf(e){let t=[];if(!e||typeof e!="object")return[ct("invalid-schema","payload schema is required")];if((typeof e.version!="number"||!Number.isInteger(e.version)||e.version<1)&&t.push(ct("invalid-version","payload schema version must be an integer >= 1")),!e.fields||typeof e.fields!="object"||Array.isArray(e.fields))return t.push(ct("invalid-fields","payload schema fields must be an object")),t;for(let[n,r]of Object.entries(e.fields)){if(!n){t.push(ct("invalid-field","field name is required",n));continue}(!r||typeof r!="object"||!Gf.has(r.type))&&t.push(ct("invalid-field-type",`field "${n}" type must be string | number | boolean | object | array`,n))}return t}function Jf(e){return e===null?"null":e===void 0?"undefined":Array.isArray(e)?"array":typeof e=="string"?"string":typeof e=="number"&&Number.isFinite(e)?"number":typeof e=="boolean"?"boolean":typeof e=="object"?"object":"other"}function zf(e,t){if(t===void 0){let i=Object.entries(e.fields).filter(([,o])=>o.optional!==!0);return i.length===0?{ok:!0,payload:void 0}:{ok:!1,errors:i.map(([o])=>ct("missing-field",`payload is missing required field "${o}"`,o))}}if(t===null||typeof t!="object"||Array.isArray(t))return{ok:!1,errors:[ct("invalid-payload","payload must be a JSON object")]};let n=t,r=[];for(let[i,o]of Object.entries(e.fields)){if(!(i in n)||n[i]===void 0){o.optional!==!0&&r.push(ct("missing-field",`payload is missing required field "${i}"`,i));continue}let s=Jf(n[i]);s!==o.type&&r.push(ct("field-type",`payload.${i} expected ${o.type}, got ${s}`,i))}return r.length>0?{ok:!1,errors:r}:{ok:!0,payload:t}}function Yf(e,t,n){let r=jf(e);return{type:e,kind:t,payloadSchema:{version:n.version,fields:{...n.fields}},emitPattern:r,subscribePattern:r,toManifest(){let i={};for(let[o,s]of Object.entries(this.payloadSchema.fields))i[o]={type:s.type,optional:s.optional===!0};return{type:this.type,kind:this.kind,version:this.payloadSchema.version,fields:i,emitPattern:this.emitPattern,subscribePattern:this.subscribePattern}},validatePayload(i){return zf(this.payloadSchema,i)}}}function mo(e,t,n){let r=[];if(typeof t!="string"||t.length===0)r.push(ct("invalid-type","event type is required"));else if(t.split(".").some(i=>i.length===0))r.push(ct("invalid-type",`event type "${t}" has empty dotted segments`));else{let i=Wf(t);i?i!==e&&r.push(ct("kind-mismatch",`type "${t}" infers kind "${i}" but this helper defines "${e}"`)):r.push(ct("kind-mismatch",`type "${t}" has no "${e}" segment; dotted names like host.presentation.* need e.g. host.presentation.${e}.cue-started`))}return r.push(...Uf(n)),r.length>0?{ok:!1,errors:r}:{ok:!0,contract:Yf(t,e,n)}}function Md(e,t){return mo("intent",e,t)}function me(e,t){return mo("state",e,t)}function tt(e,t){return mo("diagnostic",e,t)}var Nd=1,ho="presentation.sequence.state.requested",yo="presentation.sequence.state.preloading",bo="presentation.sequence.state.ready",vo="presentation.sequence.state.started",So="presentation.sequence.state.step-started",ko="presentation.sequence.state.step-completed",Eo="presentation.sequence.state.skipped",Io="presentation.sequence.state.interrupted",Ld="presentation.sequence.state.failed",Ro="presentation.sequence.state.completed",Vd="presentation.sequence.diagnostic.lifecycle",Xf=[ho,yo,bo,vo,So,ko,Eo,Io,Ld,Ro,Vd],Qf=["audio","caption","semantic-region","visual-layer","cue"],Zf=["replace","queue","reject","ignore"],em=["duration","immediate"],tm=["unavailable","failed","unauthorized","muted"],nm=["requested","preloading","ready","playing","paused","skipped","interrupted","failed","completed"],rm=new Set(Qf),im=new Set(Zf),om=new Set(em),sm=new Set(tm),am=new Set(Xf),dm="Presentation sequence player has been destroyed";function de(e,t,n){return n?{code:e,detail:t,path:n}:{code:e,detail:t}}function Ve(e){return JSON.parse(JSON.stringify(e))}function Fe(e){return!!e&&typeof e=="object"&&!Array.isArray(e)}function Te(e){return typeof e=="string"&&e.length>0}function go(e,t,n){if(typeof e=="function"){n.push(de("callbacks-forbidden","authored sequences must not contain callbacks",t));return}if(Array.isArray(e)){e.forEach((r,i)=>go(r,`${t}[${i}]`,n));return}if(Fe(e))for(let[r,i]of Object.entries(e))go(i,t?`${t}.${r}`:r,n)}function yn(e){return typeof e=="number"&&Number.isFinite(e)&&e>=0}function bt(){return{version:1,fields:{sequenceId:{type:"string"},invocationId:{type:"string"},idempotencyKey:{type:"string"},stepId:{type:"string",optional:!0},fallbackId:{type:"string",optional:!0},reason:{type:"string",optional:!0}}}}function vt(e){if(!e.ok)throw new Error(e.errors.map(t=>t.detail).join("; "));return e.contract}function cm(){return[vt(me(ho,bt())),vt(me(yo,bt())),vt(me(bo,bt())),vt(me(vo,bt())),vt(me(So,bt())),vt(me(ko,bt())),vt(me(Eo,bt())),vt(me(Io,bt())),vt(me(Ld,bt())),vt(me(Ro,bt())),vt(tt(Vd,bt()))]}function um(e){return typeof e=="string"&&am.has(e)}function lm(e){if(e)return"timeline"in e?e.timeline:e}function pm(e,t,n){return n?!t||t==="skip"||t==="complete"?0:t.durationFrames:e}function fm(e,t){return(e.kind==="relative"||e.kind==="simultaneous"?e.delayFrames??0:0)+t}function mm(e,t,n){if(!Fe(e)||!Te(e.kind)){n.push(de("invalid-timing","timing.kind is required",t));return}if(e.kind==="absolute"){yn(e.atFrame)||n.push(de("invalid-timing","timing.atFrame must be >= 0",t));return}if(e.kind==="relative"){e.afterStepId!==void 0&&!Te(e.afterStepId)&&n.push(de("invalid-timing","timing.afterStepId must be a string",t)),e.delayFrames!==void 0&&!yn(e.delayFrames)&&n.push(de("invalid-timing","timing.delayFrames must be >= 0",t));return}if(e.kind==="simultaneous"){Te(e.withStepId)||n.push(de("invalid-timing","timing.withStepId is required",t)),e.order!==void 0&&!yn(e.order)&&n.push(de("invalid-timing","timing.order must be >= 0",t)),e.delayFrames!==void 0&&!yn(e.delayFrames)&&n.push(de("invalid-timing","timing.delayFrames must be >= 0",t));return}n.push(de("invalid-timing",`unsupported timing.kind "${String(e.kind)}"`,t))}function gm(e,t,n,r){if(!Fe(e)||!Te(e.kind)){r.push(de("invalid-effect","effect.kind is required",n));return}e.kind!==t&&r.push(de("kind-mismatch",`effect.kind "${e.kind}" must match track kind "${t}"`,n)),e.kind==="audio"&&!Te(e.assetBinding)&&r.push(de("invalid-effect","assetBinding is required",n)),e.kind==="caption"&&(Te(e.textBinding)||r.push(de("invalid-effect","textBinding is required",n)),typeof e.visible!="boolean"&&r.push(de("invalid-effect","visible must be boolean",n))),e.kind==="semantic-region"&&(Te(e.regionBinding)||r.push(de("invalid-effect","regionBinding is required",n)),Fe(e.state)||r.push(de("invalid-effect","state is required",n))),e.kind==="visual-layer"&&(Te(e.layerBinding)||r.push(de("invalid-effect","layerBinding is required",n)),e.transition!=="show"&&e.transition!=="hide"&&r.push(de("invalid-effect","transition must be show or hide",n))),e.kind==="cue"&&!Te(e.name)&&r.push(de("invalid-effect","cue name is required",n))}function hm(e){let t=new Map;for(let n of e.tracks)for(let r of n.steps)t.set(r.id,{track:n,step:r});return t}function qn(e){let t=[];if(go(e,"",t),!Fe(e))return{ok:!1,errors:[de("invalid-definition","sequence must be a JSON object")]};if(Te(e.id)||t.push(de("invalid-id","id is required","id")),!Array.isArray(e.tracks)||e.tracks.length===0)return t.push(de("invalid-tracks","tracks must be a non-empty array","tracks")),{ok:!1,errors:t};let n=e.interruptionPolicy??"replace";im.has(String(n))||t.push(de("invalid-policy","unsupported interruptionPolicy","interruptionPolicy"));let r=new Set,i=new Set,o=[];e.tracks.forEach((u,y)=>{let k=`tracks[${y}]`;if(!Fe(u)){t.push(de("invalid-track","track must be an object",k));return}if(!Te(u.id)){t.push(de("invalid-track","track id is required",`${k}.id`));return}if(i.has(u.id)&&t.push(de("duplicate-track",`duplicate track id "${u.id}"`,k)),i.add(u.id),!rm.has(String(u.kind))){t.push(de("invalid-kind","unsupported track kind",`${k}.kind`));return}if(!Array.isArray(u.steps)||u.steps.length===0){t.push(de("invalid-steps","track steps are required",`${k}.steps`));return}let R=[];u.steps.forEach((T,b)=>{let x=`${k}.steps[${b}]`;if(!Fe(T)){t.push(de("invalid-step","step must be an object",x));return}if(!Te(T.id)){t.push(de("invalid-step","step id is required",`${x}.id`));return}r.has(T.id)&&t.push(de("duplicate-step",`duplicate step id "${T.id}"`,x)),r.add(T.id),yn(T.durationFrames)||t.push(de("invalid-duration","durationFrames must be >= 0",`${x}.durationFrames`)),T.delayFrames!==void 0&&!yn(T.delayFrames)&&t.push(de("invalid-delay","delayFrames must be >= 0",`${x}.delayFrames`)),T.completion!==void 0&&!om.has(String(T.completion))&&t.push(de("invalid-completion","unsupported completion rule",`${x}.completion`)),mm(T.timing,`${x}.timing`,t),gm(T.effect,String(u.kind),`${x}.effect`,t),R.push(Ve(T))}),o.push({id:u.id,kind:u.kind,steps:R})});let s=[],a=new Set;e.fallbacks!==void 0&&(Array.isArray(e.fallbacks)?e.fallbacks.forEach((u,y)=>{let k=`fallbacks[${y}]`;if(!Fe(u)||!Te(u.id)){t.push(de("invalid-fallback","fallback id is required",k));return}a.has(u.id)&&t.push(de("duplicate-fallback",`duplicate fallback id "${u.id}"`,k)),a.add(u.id);let R=u.when;if((!Fe(R)||R.capability!=="audio"||!sm.has(String(R.status)))&&t.push(de("invalid-fallback","unsupported fallback.when",`${k}.when`)),u.omitTrackIds!==void 0)if(!Array.isArray(u.omitTrackIds))t.push(de("invalid-fallback","omitTrackIds must be an array",k));else for(let T of u.omitTrackIds)i.has(String(T))||t.push(de("unknown-track",`omitTrackIds references unknown track "${String(T)}"`,k));s.push(Ve(u))}):t.push(de("invalid-fallbacks","fallbacks must be an array","fallbacks")));let d={id:String(e.id??""),tracks:o,interruptionPolicy:n,fallbacks:s},m=hm(d);for(let{step:u}of m.values())u.timing.kind==="relative"&&u.timing.afterStepId&&(m.has(u.timing.afterStepId)||t.push(de("unknown-step",`afterStepId "${u.timing.afterStepId}" does not exist`,`steps.${u.id}`))),u.timing.kind==="simultaneous"&&!m.has(u.timing.withStepId)&&t.push(de("unknown-step",`withStepId "${u.timing.withStepId}" does not exist`,`steps.${u.id}`));return t.length>0?{ok:!1,errors:t}:{ok:!0,sequence:Ve(d)}}function _d(e,t,n,r){let i=[];for(let u of e.tracks)if(!t.has(u.id))for(let y of u.steps)i.push({track:u,step:y});let o=new Map(i.map(u=>[u.step.id,u])),s=new Map,a=new Set;function d(u){let y=s.get(u);if(y!==void 0)return y;let k=o.get(u);if(!k||a.has(u))return n;a.add(u);let R=fm(k.step.timing,k.step.delayFrames??0),T=n+R;if(k.step.timing.kind==="absolute")T=n+k.step.timing.atFrame+(k.step.delayFrames??0);else if(k.step.timing.kind==="relative"&&k.step.timing.afterStepId){let b=o.get(k.step.timing.afterStepId);if(b){let x=d(b.step.id),F=m(b.step);T=x+F+R}}else k.step.timing.kind==="simultaneous"&&(T=d(k.step.timing.withStepId)+R);return a.delete(u),s.set(u,T),T}function m(u){return u.completion==="immediate"?0:pm(u.durationFrames,u.reducedMotion,r)}return i.map(({track:u,step:y})=>{let k=d(y.id),R=m(y),T=y.timing.kind==="simultaneous"?y.timing.order??0:0;return{id:y.id,trackId:u.id,trackKind:u.kind,order:T,startFrame:k,durationFrames:R,endFrame:k+R,effect:Ve(y.effect),restoreOnComplete:y.restoreOnComplete===!0,reducedSensory:y.reducedSensory??"keep"}}).sort(Fd)}function Fd(e,t){return e.startFrame!==t.startFrame?e.startFrame-t.startFrame:e.order!==t.order?e.order-t.order:e.trackId!==t.trackId?e.trackId<t.trackId?-1:1:e.id<t.id?-1:e.id>t.id?1:0}function Nt(e,t){if(!t)return;let n=e?.[t];return Te(n)?n:void 0}function ym(e,t){let n=e.snapshot().events;for(let r=n.length-1;r>=0;r--){let i=n[r];if(i&&i.idempotencyKey===t&&i.type===Fn)return i.reason??"asset-failed"}}function bm(e,t,n,r){if(!t.tracks.some(s=>s.kind==="audio"))return"ok";if(!e)return"unavailable";let o=(r&&"broker"in r?r:void 0)?.broker;if(o?.muted)return"muted";for(let s of t.tracks)if(s.kind==="audio")for(let a of s.steps){if(a.effect.kind!=="audio")continue;let d=Nt(n.assets,a.effect.assetBinding);if(!d)continue;let m=Nt(n.channels,a.effect.channelBinding);if(o&&!o.isAuthorized(m)&&o.inspect().authorized.length>0)return"unauthorized";if(o?.assetStatus(d)==="failed")return"failed"}return"ok"}function Co(e={}){let t=e.originFrame??0,n=!!e.reducedMotion,r=!!e.reducedSensory,i=e.semantic,o=e.visual,s=lm(e.audio),a=e.audio,d=new Map,m=Dt({originFrame:t,reducedMotion:n}),u=t,y=!1,k=!1,R=null,T=null,b=[],x=new Map,F=[],U=new Map;for(let S of e.sequences??[]){let I=qn(S);I.ok&&d.set(I.sequence.id,I.sequence)}function O(){if(k)throw new Error(dm)}function $(S){F.push(Ve(S))}function C(S,I,M){let q={type:I,atFrame:u,sequenceId:S.sequenceId,invocationId:S.invocationId,idempotencyKey:S.idempotencyKey};M?.stepId&&(q.stepId=M.stepId),S.selectedFallbackId&&(q.fallbackId=S.selectedFallbackId),M?.reason&&(q.reason=M.reason),$(q)}function p(S){let I=[...S.steps.values()].filter(q=>q.phase==="completed").map(q=>q.resolved.id).sort(),M=[...S.steps.values()].filter(q=>q.phase==="active").map(q=>q.resolved.id).sort();return{sequenceId:S.sequenceId,invocationId:S.invocationId,idempotencyKey:S.idempotencyKey,phase:S.phase,playhead:Math.max(0,u-S.startedAtFrame),startedAtFrame:S.startedAtFrame,completedStepIds:I,activeStepIds:M,selectedFallbackId:S.selectedFallbackId,compiledReducedMotion:S.compiledReducedMotion}}function E(S,I){return Fd(S.resolved,I.resolved)}function c(S,I){return`${S.invocationId}:${I}`}function f(S,I){return`${S.invocationId}:${I}`}function h(S){if(S.audioKey&&s?.cancel(S.audioKey),S.captionId){let I=x.get(S.captionId);I&&x.set(S.captionId,{...I,visible:!1})}if(S.regionId&&S.regionKeys&&i){let I={};for(let M of S.regionKeys)I[M]=!1;i.setRegionState(S.regionId,I)}S.visualLayerId&&o&&S.visualTransition==="hide"?o.play({name:`sequence:${S.visualLayerId}:restore`,idempotencyKey:`sequence:${S.visualLayerId}:restore:${u}`,layerId:S.visualLayerId,kind:"show",toVersion:S.visualVersion,durationFrames:0,onDuplicate:"replace"}):S.visualLayerId&&o&&S.visualTransition==="show"&&o.play({name:`sequence:${S.visualLayerId}:restore`,idempotencyKey:`sequence:${S.visualLayerId}:restore:${u}`,layerId:S.visualLayerId,kind:"hide",durationFrames:0,onDuplicate:"replace"}),S.cueKey&&m.cancel(S.cueKey)}function A(S,I){let{resolved:M}=I,q={},X=r||M.reducedSensory==="skip-audio"||M.reducedSensory==="complete";if(M.effect.kind==="audio"){let J=Nt(S.bindings.assets,M.effect.assetBinding);if(J&&s&&!X){let Z=f(S,M.id);s.play({name:M.id,idempotencyKey:Z,assetId:J,channelId:Nt(S.bindings.channels,M.effect.channelBinding),durationFrames:M.durationFrames,onDuplicate:"replace"}),q.audioKey=Z,ym(s,Z)&&(I.applied=q,w(S,"failed"),s.cancel(Z),q.audioKey=void 0)}}else if(M.effect.kind==="caption"){let J=Nt(S.bindings.captions,M.effect.textBinding)??"",Z=c(S,M.effect.textBinding);x.set(Z,{id:Z,text:J,visible:M.effect.visible}),q.captionId=Z}else if(M.effect.kind==="semantic-region"){let J=Nt(S.bindings.regions,M.effect.regionBinding);J&&i&&(i.setRegionState(J,M.effect.state),q.regionId=J,q.regionKeys=["hover","focus","selected"].filter(Z=>M.effect.kind==="semantic-region"&&M.effect.state[Z]!==void 0))}else if(M.effect.kind==="visual-layer"){let J=Nt(S.bindings.layers,M.effect.layerBinding),Z=Nt(S.bindings.versions,M.effect.versionBinding);J&&o&&(o.play({name:`sequence:${M.id}`,idempotencyKey:f(S,M.id),layerId:J,kind:M.effect.transition,toVersion:M.effect.transition==="hide"?void 0:Z,durationFrames:M.durationFrames,onDuplicate:"replace"}),q.visualLayerId=J,q.visualVersion=Z??o.inspect().find(Q=>Q.id===J)?.committedVersion??void 0,q.visualTransition=M.effect.transition)}else if(M.effect.kind==="cue"){let J=f(S,M.id);m.play({name:M.effect.name,idempotencyKey:J,durationFrames:M.durationFrames,easing:M.effect.easing,onDuplicate:"replace"}),q.cueKey=J}I.applied=q}function L(S,I,M){if(I.phase==="active"){if(M){I.applied&&h(I.applied),I.phase="skipped";return}I.resolved.restoreOnComplete&&I.applied?h(I.applied):I.applied?.audioKey&&I.resolved.effect.kind,I.phase="completed",C(S,ko,{stepId:I.resolved.id})}}function w(S,I){let M=d.get(S.sequenceId);if(!M)return!1;let q=(M.fallbacks??[]).find(J=>J.when.capability==="audio"&&J.when.status===I);if(!q)return!1;if(S.selectedFallbackId===q.id)return!0;S.selectedFallbackId=q.id;let X=new Set(q.omitTrackIds??[]);for(let J of S.steps.values())X.has(J.resolved.trackId)&&(J.phase==="pending"?J.phase="skipped":J.phase==="active"&&L(S,J,!0));return!0}function B(S){let I=[...S.steps.values()].filter(M=>M.phase==="pending"&&M.resolved.startFrame<=u).sort(E);for(let M of I)M.phase="active",C(S,So,{stepId:M.resolved.id}),A(S,M),M.resolved.durationFrames===0&&M.phase==="active"&&L(S,M,!1)}function G(S){let I=[...S.steps.values()].filter(M=>M.phase==="active"&&u>=M.resolved.endFrame).sort(E);for(let M of I)L(S,M,!1)}function D(S){return S.phase==="playing"||S.phase==="paused"||S.phase==="ready"||S.phase==="preloading"||S.phase==="requested"}function l(S){!D(S)||[...S.steps.values()].some(M=>M.phase==="pending"||M.phase==="active")||(S.phase="completed",S.nextAvailable=!0,C(S,Ro),R===S&&(R=null,y=!1),W())}function v(S,I){for(let M of[...S.steps.values()].sort(E))M.phase==="active"?L(S,M,!0):M.phase==="pending"&&(M.phase="skipped")}function P(S,I,M,q,X=u,J=n){let Z=_d(S,q,X,J),Q=new Map;for(let ve of Z)Q.set(ve.id,{resolved:ve,phase:"pending",applied:null});return{sequenceId:S.id,invocationId:I.invocationId,idempotencyKey:I.idempotencyKey??I.invocationId,bindings:Ve(I.bindings??{}),interruptionPolicy:S.interruptionPolicy??"replace",selectedFallbackId:M,phase:"requested",startedAtFrame:u,steps:Q,nextAvailable:!1,compiledReducedMotion:J}}function _(S,I){if(!Te(I.invocationId))return{ok:!1,reason:"invalid",detail:"invocationId is required"};let M=I.idempotencyKey??I.invocationId;if(U.get(M)&&R&&R.idempotencyKey===M)return{ok:!0,invocation:p(R)};let X=I.bindings??{};$({type:ho,atFrame:u,sequenceId:S.id,invocationId:I.invocationId,idempotencyKey:M});let J={sequenceId:S.id,invocationId:I.invocationId,idempotencyKey:M,bindings:Ve(X),interruptionPolicy:S.interruptionPolicy??"replace",selectedFallbackId:null,phase:"preloading",startedAtFrame:u,steps:new Map,nextAvailable:!1,compiledReducedMotion:n};C(J,yo);let Q=bm(s,S,X,a),ve=null,Ie=new Set;if(Q!=="ok"){let ae=(S.fallbacks??[]).find(V=>V.when.capability==="audio"&&V.when.status===Q);if(ae){ve=ae.id;for(let V of ae.omitTrackIds??[])Ie.add(V)}else if(Q==="unavailable"||Q==="failed")for(let V of S.tracks)V.kind==="audio"&&Ie.add(V.id)}if(r)for(let ae of S.tracks)ae.kind==="audio"&&Ie.add(ae.id);let Re=P(S,{...I,idempotencyKey:M},ve,Ie);return Re.phase="ready",C(Re,bo),Re.phase="playing",C(Re,vo),R=Re,T={sequenceId:S.id,options:{...I,idempotencyKey:M}},U.set(M,Re.invocationId),G(Re),B(Re),l(Re),{ok:!0,invocation:p(Re)}}function N(S){if(!R||!D(R))return;let I=R;v(I,!0),I.phase="interrupted",I.nextAvailable=!0,C(I,Io,{reason:S}),R=null,y=!1}function W(){if(R||y)return;let S=b.shift();if(!S)return;let I=d.get(S.sequenceId);I&&_(I,S.options)}function j(S,I){let M=new Set;if(I){let q=(S.fallbacks??[]).find(X=>X.id===I);for(let X of q?.omitTrackIds??[])M.add(X)}return _d(S,M,t,n).map(q=>({sequenceId:S.id,stepId:q.id,trackId:q.trackId,kind:q.trackKind,startFrame:q.startFrame,durationFrames:q.durationFrames,order:q.order,effect:Ve(q.effect)}))}function H(){return Ve({schemaVersion:Nd,frame:u,reducedMotion:n,reducedSensory:r,paused:y,active:R?p(R):null,queue:b.map(S=>({sequenceId:S.sequenceId,invocationId:S.options.invocationId,idempotencyKey:S.options.idempotencyKey??S.options.invocationId,bindings:Ve(S.options.bindings??{})})),captions:[...x.values()].sort((S,I)=>S.id<I.id?-1:1),events:F.map(S=>Ve(S)),bindings:R?Ve(R.bindings):null})}function g(S){for(let I of[...S.steps.values()].sort(E)){if(I.phase!=="active")continue;let M=Math.max(0,I.resolved.endFrame-u);I.resolved={...I.resolved,durationFrames:M,endFrame:u+M},A(S,I)}}return{define(S){O();let I=qn(S);return I.ok&&d.set(I.sequence.id,I.sequence),I},playSequence(S,I){O();let M=d.get(S);if(!M)return{ok:!1,reason:"unknown-sequence",detail:`unknown sequence "${S}"`};let q=I.idempotencyKey??I.invocationId;if(R&&D(R)&&R.idempotencyKey===q)return{ok:!0,invocation:p(R)};if(R&&D(R)){let X=R.interruptionPolicy;if(X==="reject")return{ok:!1,reason:"busy",detail:"sequence is already playing"};if(X==="ignore")return{ok:!0,invocation:p(R)};if(X==="queue")return b.push({sequenceId:S,options:{...I,idempotencyKey:q}}),{ok:!0,invocation:{sequenceId:S,invocationId:I.invocationId,idempotencyKey:q,phase:"requested",playhead:0,startedAtFrame:u,completedStepIds:[],activeStepIds:[],selectedFallbackId:null,compiledReducedMotion:n}};N("replace")}return _(M,{...I,idempotencyKey:q})},skip(S){if(O(),!R||!D(R)||S&&R.invocationId!==S)return!1;let I=R;return v(I,!0),I.phase="skipped",I.nextAvailable=!0,C(I,Eo),R=null,y=!1,W(),!0},replay(S){O();let I=R&&D(R)?R:null,M=I?{sequenceId:I.sequenceId,options:{invocationId:I.invocationId,idempotencyKey:I.idempotencyKey,bindings:Ve(I.bindings)}}:T;if(!M)return{ok:!1,reason:"invalid",detail:"no sequence to replay"};if(S&&M.options.invocationId!==S)return{ok:!1,reason:"invalid",detail:"unknown invocation"};let q=d.get(M.sequenceId);return q?(U.delete(M.options.idempotencyKey??M.options.invocationId),I&&(v(I,!0),R=null,y=!1),_(q,M.options)):{ok:!1,reason:"unknown-sequence",detail:`unknown sequence "${M.sequenceId}"`}},pause(){return O(),!R||R.phase!=="playing"?!1:(y=!0,R.phase="paused",!0)},resume(){return O(),!R||R.phase!=="paused"?!1:(y=!1,R.phase="playing",!0)},cancel(S){return O(),!R||!D(R)||S&&R.invocationId!==S?!1:(N("cancel"),W(),!0)},step(S=1){O();let I=Number.isFinite(S)?Math.max(0,Math.floor(S)):0,M=F.length;if(y)return[];for(let q=0;q<I;q++)u+=1,m.step(1),s?.step(1),o?.step(1),R&&D(R)?(G(R),B(R),l(R)):W();return F.slice(M).map(q=>Ve(q))},snapshot(){return O(),H()},restore(S){O();let I={frame:u,paused:y,active:R,queue:b.slice(),captions:new Map(x),events:F.slice(),seenKeys:new Map(U),presentation:m,reducedMotion:n,reducedSensory:r},M=Q=>{u=I.frame,y=I.paused,R=I.active,b.length=0,b.push(...I.queue),x.clear();for(let[ve,Ie]of I.captions)x.set(ve,Ie);F.length=0,F.push(...I.events),U.clear();for(let[ve,Ie]of I.seenKeys)U.set(ve,Ie);return m=I.presentation,n=I.reducedMotion,r=I.reducedSensory,{ok:!1,errors:Q}},q=S;if(typeof S=="string")try{q=JSON.parse(S)}catch{return M([de("invalid-json","snapshot JSON is invalid")])}if(!Fe(q))return M([de("invalid-snapshot","snapshot must be a JSON object")]);let X=[];q.schemaVersion!==Nd&&X.push(de("unsupported-schema","unsupported presentation sequence snapshot schema")),(typeof q.frame!="number"||!Number.isFinite(q.frame))&&X.push(de("invalid-snapshot","frame must be finite","frame"));let J=q.active;if(J!=null&&(!Fe(J)||!Te(J.sequenceId)?X.push(de("invalid-snapshot","active.sequenceId is required","active")):d.has(J.sequenceId)||X.push(de("unknown-sequence",`unknown sequence "${J.sequenceId}"`,"active.sequenceId"))),q.queue!==void 0&&(Array.isArray(q.queue)?q.queue.forEach((Q,ve)=>{let Ie=`queue[${ve}]`;if(!Fe(Q)||!Te(Q.sequenceId)){X.push(de("invalid-snapshot","queue item sequenceId is required",Ie));return}d.has(Q.sequenceId)||X.push(de("unknown-sequence",`unknown sequence "${Q.sequenceId}"`,Ie)),Te(Q.invocationId)||X.push(de("invalid-snapshot","queue item invocationId is required",Ie))}):X.push(de("invalid-snapshot","queue must be an array","queue"))),X.length>0)return M(X);let Z=q.frame;if(typeof Z!="number"||!Number.isFinite(Z))return M([de("invalid-snapshot","frame must be finite","frame")]);try{if(R&&D(R)&&v(R,!0),x.clear(),b.length=0,F.length=0,U.clear(),y=q.paused===!0,u=Z,typeof q.reducedMotion=="boolean"&&(n=q.reducedMotion),typeof q.reducedSensory=="boolean"&&(r=q.reducedSensory),m=Dt({originFrame:u,reducedMotion:!1}),Array.isArray(q.events))for(let Q of q.events)Fe(Q)&&um(Q.type)&&F.push(Ve(Q));if(Array.isArray(q.captions))for(let Q of q.captions)Fe(Q)&&Te(Q.id)&&x.set(Q.id,{id:Q.id,text:typeof Q.text=="string"?Q.text:"",visible:Q.visible===!0});if(Array.isArray(q.queue))for(let Q of q.queue)!Fe(Q)||!Te(Q.sequenceId)||!Te(Q.invocationId)||d.has(Q.sequenceId)&&b.push({sequenceId:Q.sequenceId,options:{invocationId:Q.invocationId,idempotencyKey:Te(Q.idempotencyKey)?Q.idempotencyKey:Q.invocationId,bindings:Fe(Q.bindings)?Ve(Q.bindings):{}}});if(R=null,Fe(J)&&Te(J.sequenceId)){let Q=d.get(J.sequenceId),ve=typeof J.compiledReducedMotion=="boolean"?J.compiledReducedMotion:n,Ie=nm.includes(J.phase)?J.phase:"playing";if(Ie==="skipped"||Ie==="completed"||Ie==="interrupted"||Ie==="failed"){let Re=typeof J.startedAtFrame=="number"?J.startedAtFrame:t,ae=P(Q,{invocationId:String(J.invocationId),idempotencyKey:String(J.idempotencyKey??J.invocationId),bindings:Fe(q.bindings)?Ve(q.bindings):{}},Te(J.selectedFallbackId)?J.selectedFallbackId:null,new Set(Ie==="skipped"?Q.tracks.map(V=>V.id):[]),Re,ve);ae.phase=Ie,ae.startedAtFrame=Re;for(let V of ae.steps.values())V.phase="skipped";ae.nextAvailable=!0,R=null,U.set(ae.idempotencyKey,ae.invocationId)}else{let Re=new Set,ae=Te(J.selectedFallbackId)?J.selectedFallbackId:null;if(ae){let re=(Q.fallbacks??[]).find(oe=>oe.id===ae);for(let oe of re?.omitTrackIds??[])Re.add(oe)}let V=P(Q,{invocationId:String(J.invocationId),idempotencyKey:String(J.idempotencyKey??J.invocationId),bindings:Fe(q.bindings)?Ve(q.bindings):{}},ae,Re,typeof J.startedAtFrame=="number"?J.startedAtFrame:t,ve);V.phase=y?"paused":"playing",V.startedAtFrame=typeof J.startedAtFrame=="number"?J.startedAtFrame:t;let z=new Set(Array.isArray(J.completedStepIds)?J.completedStepIds.filter(re=>typeof re=="string"):[]),ne=new Set(Array.isArray(J.activeStepIds)?J.activeStepIds.filter(re=>typeof re=="string"):[]);for(let re of V.steps.values())z.has(re.resolved.id)?re.phase="completed":ne.has(re.resolved.id)||re.resolved.startFrame<=u?re.resolved.endFrame<=u?re.phase="completed":re.phase="active":re.phase="pending";R=V,U.set(V.idempotencyKey,V.invocationId),g(V)}}return m.setReducedMotion(n),{ok:!0,snapshot:H()}}catch(Q){return M([de("restore-failed",Q instanceof Error?Q.message:String(Q))])}},inspect(){O();let S=R?d.get(R.sequenceId):void 0;return{frame:u,paused:y,reducedMotion:n,reducedSensory:r,active:R?p(R):null,queue:b.map(I=>({sequenceId:I.sequenceId,invocationId:I.options.invocationId,idempotencyKey:I.options.idempotencyKey??I.options.invocationId,phase:"requested",playhead:0,startedAtFrame:u,completedStepIds:[],activeStepIds:[],selectedFallbackId:null,compiledReducedMotion:n})),captions:[...x.values()].sort((I,M)=>I.id<M.id?-1:1),cueIntent:S?j(S,R?.selectedFallbackId??void 0):[]}},inspectCueIntent(S,I){O();let M=d.get(S);return M?j(M,I?.fallbackId):[]},get(S){O();let I=d.get(S);return I?Ve(I):void 0},destroy(){k||(R&&D(R)&&v(R,!0),k=!0,R=null,b.length=0,x.clear(),F.length=0)},setReducedMotion(S){O(),n=!!S,m.setReducedMotion(n)},get frame(){return u},get reducedMotion(){return n},get reducedSensory(){return r}}}var xo=1,Ao=1,zr="presentation.binding.state.applied",jr="presentation.binding.state.rejected",Ur="presentation.binding.diagnostic.lifecycle",vm=[zr,jr,Ur],Sm=["visual-layer","presence","prop","semantic-region","hotspot","sequence","asset"],km=["invalid-manifest","invalid-schema","invalid-version","invalid-id","unknown-field","unknown-resource","unknown-selector","duplicate-id","duplicate-priority","uncovered-default","impossible-target","callbacks-forbidden","invalid-predicate","invalid-projection","invalid-snapshot","destroyed"],Em=new Set(Sm),Mv=new Set(vm),Nv=new Set(km),Im="Presentation binding runtime has been destroyed",To=/^[A-Za-z_][A-Za-z0-9_]*(\.[A-Za-z_][A-Za-z0-9_]*)*$/,Rm=new Set(["show","hide","replace"]),Cm=new Set(["id","schemaVersion","bindings","defaults","resources"]),Am=new Set(["id","priority","when","targets"]),wm=new Set(["layers","versions","regions","sequences","hotspots","entities","props","assets"]),Pm=new Set(["labels","reducedSensory","reducedMotion"]);function ie(e,t,n){return n?{code:e,detail:t,path:n}:{code:e,detail:t}}function nt(e){return!!e&&typeof e=="object"&&!Array.isArray(e)}function De(e){return typeof e=="string"&&e.length>0}function $e(e){return JSON.parse(JSON.stringify(e))}function Jr(e,t,n){if(typeof e=="function"){n.push(ie("callbacks-forbidden","authored bindings must not contain callbacks",t));return}if(Array.isArray(e)){e.forEach((r,i)=>Jr(r,`${t}[${i}]`,n));return}if(nt(e))for(let[r,i]of Object.entries(e))Jr(i,t?`${t}.${r}`:r,n)}function qe(e,t,n,r){for(let i of Object.keys(e))t.has(i)||r.push(ie("unknown-field",`unknown field "${i}"`,n?`${n}.${i}`:i))}function $d(e){return e===null||typeof e=="string"||typeof e=="number"&&Number.isFinite(e)||typeof e=="boolean"}function wo(){return{version:1,fields:{manifestId:{type:"string"},revision:{type:"string",optional:!0},selectedBindingIds:{type:"array",optional:!0},reason:{type:"string",optional:!0},usedFallback:{type:"boolean",optional:!0}}}}function Po(e){if(!e.ok)throw new Error(e.errors.map(t=>t.detail).join("; "));return e.contract}function xm(){return[Po(me(zr,wo())),Po(me(jr,wo())),Po(tt(Ur,wo()))]}function _t(e){switch(e.kind){case"visual-layer":return`visual-layer:${e.layerId}`;case"presence":return`presence:${e.entityId}`;case"prop":return`prop:${e.propId}`;case"semantic-region":return`semantic-region:${e.regionId}`;case"hotspot":return`hotspot:${e.hotspotId}`;case"sequence":return`sequence:${e.sequenceId}`;case"asset":return`asset:${e.bindingId}`}}function Tm(e){if(e==null)return"missing";if(!nt(e))return"invalid";let t=[];if(Jr(e,"",t),t.length>0)return"invalid";try{return $e(e)}catch{return"invalid"}}function Dm(e,t){if(!To.test(t))return{found:!1,value:void 0};let n=e;for(let r of t.split(".")){if(!nt(n)||!Object.prototype.hasOwnProperty.call(n,r))return{found:!1,value:void 0};n=n[r]}return{found:!0,value:n}}function Om(e,t){if(!Object.prototype.hasOwnProperty.call(e,t))return;let n=e[t];return typeof n=="function"?n:void 0}function Gr(e,t,n){if("all"in e){for(let i of e.all){let o=Gr(i,t,n);if(!o.ok)return o}return{ok:!0}}if("any"in e){let i={ok:!1,detail:"no alternative matched"};for(let o of e.any){let s=Gr(o,t,n);if(s.ok)return s;i=s}return i}if("not"in e){let i=Gr(e.not,t,n);return{ok:!i.ok,detail:i.ok?"negation failed":void 0}}if("selector"in e){let i=Om(n,e.selector);if(!i)return{ok:!1,detail:`unknown selector "${e.selector}"`};try{return{ok:!!i(t)}}catch(o){return{ok:!1,detail:o instanceof Error?o.message:"selector threw"}}}let r=Dm(t,e.path);return"present"in e?{ok:(r.found&&r.value!==null&&r.value!==void 0)===e.present}:"neq"in e?r.found?{ok:r.value!==e.neq}:{ok:!0,detail:"path missing"}:r.found?{ok:r.value===e.eq}:{ok:!1,detail:`missing path "${e.path}"`}}function Wr(e,t,n){if(!nt(e)){n.push(ie("invalid-predicate","predicate must be an object",t));return}if("all"in e||"any"in e||"not"in e){if("all"in e){if(qe(e,new Set(["all"]),t,n),!Array.isArray(e.all)||e.all.length===0){n.push(ie("invalid-predicate","all requires a non-empty array",`${t}.all`));return}return{all:e.all.map((a,d)=>Wr(a,`${t}.all[${d}]`,n)).filter(a=>!!a)}}if("any"in e){if(qe(e,new Set(["any"]),t,n),!Array.isArray(e.any)||e.any.length===0){n.push(ie("invalid-predicate","any requires a non-empty array",`${t}.any`));return}return{any:e.any.map((a,d)=>Wr(a,`${t}.any[${d}]`,n)).filter(a=>!!a)}}qe(e,new Set(["not"]),t,n);let o=Wr(e.not,`${t}.not`,n);return o?{not:o}:void 0}if("selector"in e){if(qe(e,new Set(["selector"]),t,n),!De(e.selector)){n.push(ie("invalid-predicate","selector is required",`${t}.selector`));return}return{selector:e.selector}}if(qe(e,new Set(["path","eq","neq","present"]),t,n),(!De(e.path)||!To.test(e.path))&&n.push(ie("invalid-predicate","path must be a dotted identifier",`${t}.path`)),[e.eq!==void 0,e.neq!==void 0,e.present!==void 0].filter(Boolean).length!==1){n.push(ie("invalid-predicate","predicate needs exactly one of eq, neq, or present",t));return}if(!(!De(e.path)||!To.test(e.path))){if(e.present!==void 0){if(typeof e.present!="boolean"){n.push(ie("invalid-predicate","present must be a boolean",`${t}.present`));return}return{path:e.path,present:e.present}}if(e.neq!==void 0){if(!$d(e.neq)){n.push(ie("invalid-predicate","neq must be a JSON primitive",`${t}.neq`));return}return{path:e.path,neq:e.neq}}if(!$d(e.eq)){n.push(ie("invalid-predicate","eq must be a JSON primitive",`${t}.eq`));return}return{path:e.path,eq:e.eq}}}function Mm(e,t,n){if(e===void 0)return;if(!nt(e)){n.push(ie("impossible-target","region state must be an object",t));return}qe(e,new Set(["hover","focus","selected"]),t,n);let r={};for(let i of["hover","focus","selected"]){let o=e[i];if(o!==void 0){if(typeof o!="boolean"){n.push(ie("impossible-target",`${i} must be a boolean`,`${t}.${i}`));continue}r[i]=o}}return r}function Do(e,t,n,r){if(!nt(e)){n.push(ie("impossible-target","target must be an object",t));return}if(!Em.has(String(e.kind))){n.push(ie("impossible-target",`unsupported target kind "${String(e.kind)}"`,`${t}.kind`));return}let i=e.kind;if(i==="visual-layer"){if(qe(e,new Set(["kind","layerId","version","transition"]),t,n),!De(e.layerId)){n.push(ie("impossible-target","layerId is required",`${t}.layerId`));return}if(!De(e.version)){n.push(ie("impossible-target","version is required",`${t}.version`));return}e.transition!==void 0&&!Rm.has(String(e.transition))&&n.push(ie("impossible-target","transition must be show, hide, or replace",`${t}.transition`)),r?.layers&&!r.layers.includes(e.layerId)&&n.push(ie("unknown-resource",`unknown layer "${e.layerId}"`,`${t}.layerId`));let o=r?.versions?.[e.layerId];o&&!o.includes(e.version)&&n.push(ie("unknown-resource",`unknown version "${e.version}" on "${e.layerId}"`,`${t}.version`));let s={kind:"visual-layer",layerId:e.layerId,version:e.version};return(e.transition==="show"||e.transition==="hide"||e.transition==="replace")&&(s.transition=e.transition),s}if(i==="presence"){if(qe(e,new Set(["kind","entityId","present","regionId"]),t,n),!De(e.entityId)){n.push(ie("impossible-target","entityId is required",`${t}.entityId`));return}if(typeof e.present!="boolean"){n.push(ie("impossible-target","present must be a boolean",`${t}.present`));return}r?.entities&&!r.entities.includes(e.entityId)&&n.push(ie("unknown-resource",`unknown entity "${e.entityId}"`,`${t}.entityId`)),e.regionId!==void 0&&!De(e.regionId)&&n.push(ie("impossible-target","regionId must be a string",`${t}.regionId`));let o={kind:"presence",entityId:e.entityId,present:e.present};return De(e.regionId)&&(o.regionId=e.regionId),o}if(i==="prop"){if(qe(e,new Set(["kind","propId","visible","layerId"]),t,n),!De(e.propId)){n.push(ie("impossible-target","propId is required",`${t}.propId`));return}if(typeof e.visible!="boolean"){n.push(ie("impossible-target","visible must be a boolean",`${t}.visible`));return}r?.props&&!r.props.includes(e.propId)&&n.push(ie("unknown-resource",`unknown prop "${e.propId}"`,`${t}.propId`));let o={kind:"prop",propId:e.propId,visible:e.visible};return De(e.layerId)&&(o.layerId=e.layerId),o}if(i==="semantic-region"){if(qe(e,new Set(["kind","regionId","state","hitTestEnabled"]),t,n),!De(e.regionId)){n.push(ie("impossible-target","regionId is required",`${t}.regionId`));return}r?.regions&&!r.regions.includes(e.regionId)&&n.push(ie("unknown-resource",`unknown region "${e.regionId}"`,`${t}.regionId`)),e.hitTestEnabled!==void 0&&typeof e.hitTestEnabled!="boolean"&&n.push(ie("impossible-target","hitTestEnabled must be a boolean",`${t}.hitTestEnabled`));let o=Mm(e.state,`${t}.state`,n),s={kind:"semantic-region",regionId:e.regionId};return o&&(s.state=o),typeof e.hitTestEnabled=="boolean"&&(s.hitTestEnabled=e.hitTestEnabled),s}if(i==="hotspot"){if(qe(e,new Set(["kind","hotspotId","enabled","regionId"]),t,n),!De(e.hotspotId)){n.push(ie("impossible-target","hotspotId is required",`${t}.hotspotId`));return}if(typeof e.enabled!="boolean"){n.push(ie("impossible-target","enabled must be a boolean",`${t}.enabled`));return}r?.hotspots&&!r.hotspots.includes(e.hotspotId)&&n.push(ie("unknown-resource",`unknown hotspot "${e.hotspotId}"`,`${t}.hotspotId`));let o={kind:"hotspot",hotspotId:e.hotspotId,enabled:e.enabled};return De(e.regionId)&&(o.regionId=e.regionId),o}if(i==="sequence"){if(qe(e,new Set(["kind","sequenceId","play"]),t,n),!De(e.sequenceId)){n.push(ie("impossible-target","sequenceId is required",`${t}.sequenceId`));return}e.play!==void 0&&typeof e.play!="boolean"&&n.push(ie("impossible-target","play must be a boolean",`${t}.play`)),r?.sequences&&!r.sequences.includes(e.sequenceId)&&n.push(ie("unknown-resource",`unknown sequence "${e.sequenceId}"`,`${t}.sequenceId`));let o={kind:"sequence",sequenceId:e.sequenceId};return typeof e.play=="boolean"&&(o.play=e.play),o}if(qe(e,new Set(["kind","bindingId","assetId"]),t,n),!De(e.bindingId)){n.push(ie("impossible-target","bindingId is required",`${t}.bindingId`));return}if(!De(e.assetId)){n.push(ie("impossible-target","assetId is required",`${t}.assetId`));return}return r?.assets&&!r.assets.includes(e.assetId)&&n.push(ie("unknown-resource",`unknown asset "${e.assetId}"`,`${t}.assetId`)),{kind:"asset",bindingId:e.bindingId,assetId:e.assetId}}function Nm(e,t,n){if(e===void 0)return;if(!nt(e)){n.push(ie("invalid-manifest","resources must be an object",t));return}qe(e,wm,t,n);let r={},i=(k,R)=>{if(k!==void 0){if(!Array.isArray(k)||k.some(T=>!De(T))){n.push(ie("invalid-manifest",`${R} must be a string array`,`${t}.${R}`));return}return k.slice()}},o=i(e.layers,"layers");o&&(r.layers=o);let s=i(e.regions,"regions");s&&(r.regions=s);let a=i(e.sequences,"sequences");a&&(r.sequences=a);let d=i(e.hotspots,"hotspots");d&&(r.hotspots=d);let m=i(e.entities,"entities");m&&(r.entities=m);let u=i(e.props,"props");u&&(r.props=u);let y=i(e.assets,"assets");if(y&&(r.assets=y),e.versions!==void 0)if(!nt(e.versions))n.push(ie("invalid-manifest","versions must be an object",`${t}.versions`));else{let k={};for(let[R,T]of Object.entries(e.versions)){if(!Array.isArray(T)||T.some(b=>!De(b))){n.push(ie("invalid-manifest",`versions.${R} must be a string array`,`${t}.versions.${R}`));continue}k[R]=T.slice()}r.versions=k}return r}function Yr(e){let t=[];if(Jr(e,"",t),!nt(e))return{ok:!1,errors:[ie("invalid-manifest","bindings manifest must be a JSON object")]};qe(e,Cm,"",t),De(e.id)||t.push(ie("invalid-id","id is required","id")),e.schemaVersion!==Ao&&t.push(ie("invalid-version",`schemaVersion must be ${Ao}`,"schemaVersion")),Array.isArray(e.bindings)||t.push(ie("invalid-manifest","bindings must be an array","bindings")),(!Array.isArray(e.defaults)||e.defaults.length===0)&&t.push(ie("uncovered-default","defaults must cover required presentation targets","defaults"));let n=Nm(e.resources,"resources",t),r=new Set,i=[];Array.isArray(e.bindings)&&e.bindings.forEach((m,u)=>{let y=`bindings[${u}]`;if(!nt(m)){t.push(ie("invalid-manifest","binding must be an object",y));return}if(qe(m,Am,y,t),!De(m.id)){t.push(ie("invalid-id","binding id is required",`${y}.id`));return}r.has(m.id)&&t.push(ie("duplicate-id",`duplicate binding id "${m.id}"`,`${y}.id`)),r.add(m.id),(typeof m.priority!="number"||!Number.isFinite(m.priority))&&t.push(ie("invalid-manifest","priority must be a finite number",`${y}.priority`));let k=Wr(m.when,`${y}.when`,t);if(!Array.isArray(m.targets)||m.targets.length===0){t.push(ie("impossible-target","binding targets are required",`${y}.targets`));return}let R=m.targets.map((T,b)=>Do(T,`${y}.targets[${b}]`,t,n)).filter(T=>!!T);!k||typeof m.priority!="number"||!Number.isFinite(m.priority)||i.push({id:m.id,priority:m.priority,when:k,targets:R})});let o=[],s=new Set;Array.isArray(e.defaults)&&e.defaults.forEach((m,u)=>{let y=Do(m,`defaults[${u}]`,t,n);if(!y)return;let k=_t(y);s.has(k)&&t.push(ie("duplicate-priority",`duplicate default target "${k}"`,`defaults[${u}]`)),s.add(k),o.push(y)});let a=new Map,d=new Set;for(let m of i){let u=new Set;for(let y of m.targets){let k=_t(y);d.add(k),u.has(k)&&t.push(ie("duplicate-priority",`binding "${m.id}" repeats target "${k}"`,`bindings.${m.id}`)),u.add(k);let R=a.get(k);R||(R=new Map,a.set(k,R));let T=R.get(m.priority);T?t.push(ie("duplicate-priority",`bindings "${T}" and "${m.id}" share priority ${m.priority} on "${k}"`,`bindings.${m.id}`)):R.set(m.priority,m.id)}}for(let m of d)s.has(m)||t.push(ie("uncovered-default",`required target "${m}" has no default`,"defaults"));return t.length>0?{ok:!1,errors:t}:{ok:!0,manifest:$e({id:String(e.id),schemaVersion:Ao,bindings:i,defaults:o,...n?{resources:n}:{}})}}function qd(e){return{considered:[],winners:{},rejected:[],fallbacks:[],fallbackReason:e}}function Bd(e,t){let n=qd(t==="uncovered-default"?null:t),r=[],i={};for(let o of e.defaults){let s=_t(o);r.push($e(o)),i[s]={bindingId:null,target:$e(o)},n.fallbacks.push({targetKey:s,reason:t})}return n.winners=i,{selectedBindingIds:[],targets:r,usedFallback:t!=="uncovered-default",fallbackReason:t==="uncovered-default"?null:t,explanation:n}}function Oo(e,t,n={}){let r=Tm(t);if(r==="missing")return Bd(e,"missing-state");if(r==="invalid")return Bd(e,"invalid-projection");let i=qd(null),o=[];for(let u of e.bindings){let y=Gr(u.when,r,n);if(i.considered.push({bindingId:u.id,predicateResult:y.ok,...y.detail?{detail:y.detail}:{}}),y.ok)o.push(u);else for(let k of u.targets)i.rejected.push({bindingId:u.id,targetKey:_t(k),reason:"predicate-false"})}o.sort((u,y)=>y.priority-u.priority||(u.id<y.id?-1:u.id>y.id?1:0));let s=new Map;for(let u of o)for(let y of u.targets){let k=_t(y),R=s.get(k);if(!R){s.set(k,{bindingId:u.id,priority:u.priority,target:$e(y)});continue}u.priority<R.priority&&i.rejected.push({bindingId:u.id,targetKey:k,reason:"lower-priority"})}for(let u of e.defaults){let y=_t(u);s.has(y)||(i.fallbacks.push({targetKey:y,reason:"uncovered-default"}),i.winners[y]={bindingId:null,target:$e(u)})}for(let[u,y]of s)i.winners[u]={bindingId:y.bindingId,target:$e(y.target)};let a=[...new Set([...s.values()].sort((u,y)=>y.priority-u.priority||(u.bindingId<y.bindingId?-1:1)).map(u=>u.bindingId))],d=[],m=new Set;for(let u of e.defaults){let y=_t(u),k=s.get(y),R=k?k.target:u;m.has(y)||(m.add(y),d.push($e(R)))}for(let[u,y]of s)m.has(u)||(m.add(u),d.push($e(y.target)));return{selectedBindingIds:a,targets:d,usedFallback:!1,fallbackReason:null,explanation:i}}function _m(e,t){let n={},r={},i={},o={},s={},a={},d={},m=t.sequences?.inspect().active;for(let u of e){if(u.kind==="visual-layer"&&(n[u.layerId]=u.version),u.kind==="presence"&&(r[u.entityId]=u.present),u.kind==="prop"&&(i[u.propId]=u.visible),u.kind==="semantic-region"&&(o[u.regionId]={...u.state??{},...u.hitTestEnabled!==void 0?{hitTestEnabled:u.hitTestEnabled}:{}}),u.kind==="hotspot"&&(s[u.hotspotId]=u.enabled),u.kind==="sequence"){let y=u.play!==!1,k=y&&m&&m.sequenceId===u.sequenceId&&(m.phase==="playing"||m.phase==="paused"||m.phase==="requested"||m.phase==="preloading"||m.phase==="ready");a[u.sequenceId]=k?"playing":"idle",y&&k&&(a[u.sequenceId]="playing")}u.kind==="asset"&&(d[u.bindingId]=u.assetId)}return{revision:t.revision,selectedBindingIds:t.selectedBindingIds.slice(),layers:n,presence:r,props:i,regions:o,hotspots:s,sequences:a,assets:d,override:t.override?$e(t.override):null,usedFallback:t.usedFallback,fallbackReason:t.fallbackReason,explanation:t.explanation?$e(t.explanation):null}}function Lm(e,t){return e?JSON.stringify(e)===JSON.stringify(t):!1}function Hd(e,t){if(e===null)return null;if(e===void 0)return;if(!nt(e)){t.push(ie("invalid-snapshot","override must be an object"));return}qe(e,Pm,"override",t);let n={};if(e.reducedSensory!==void 0&&(typeof e.reducedSensory!="boolean"?t.push(ie("invalid-snapshot","reducedSensory must be a boolean","override.reducedSensory")):n.reducedSensory=e.reducedSensory),e.reducedMotion!==void 0&&(typeof e.reducedMotion!="boolean"?t.push(ie("invalid-snapshot","reducedMotion must be a boolean","override.reducedMotion")):n.reducedMotion=e.reducedMotion),e.labels!==void 0)if(!nt(e.labels))t.push(ie("invalid-snapshot","labels must be an object","override.labels"));else{let r={};for(let[i,o]of Object.entries(e.labels)){if(typeof o=="string"){r[i]=o;continue}if(nt(o)&&De(o.name)&&De(o.role)){r[i]={name:o.name,role:o.role};continue}t.push(ie("invalid-snapshot",`label "${i}" must be a string or { name, role }`,`override.labels.${i}`))}n.labels=r}return n}function Mo(e){let t=Yr(e.manifest);if(!t.ok)throw new Error(`createPresentationBindingRuntime: ${t.errors.map(D=>D.detail).join("; ")}`);let n=t.manifest,r=e.visual,i=e.semantic,o=e.sequences,s=e.selectors??{},a=!1,d=null,m=0,u=[],y=new Map,k=!1,R=null,T=null,b=null,x=!1,F=new Map,U=[],O=()=>{if(a)throw new Error(Im)};function $(D,l){U.push({type:D,atRevision:d,manifestId:n.id,selectedBindingIds:u.slice(),reason:typeof l.reason=="string"?l.reason:void 0});let v=D.includes(".diagnostic.")?"diagnostic":"state",P={type:D,kind:v,payload:$e(l)};e.onEvent?.(P),e.router?.publish(P)}function C(){return _m([...y.values()],{revision:d,selectedBindingIds:u,override:b,usedFallback:k,fallbackReason:R,explanation:T,sequences:o})}function p(D){let l=[];for(let v of D)v.kind==="visual-layer"&&r&&(r.inspect().find(_=>_.id===v.layerId)||l.push(ie("unknown-resource",`unknown live layer "${v.layerId}"`,v.layerId))),v.kind==="semantic-region"&&i&&!i.get(v.regionId)&&l.push(ie("unknown-resource",`unknown live region "${v.regionId}"`,v.regionId)),v.kind==="hotspot"&&v.regionId&&i&&!i.get(v.regionId)&&l.push(ie("unknown-resource",`unknown live region "${v.regionId}"`,v.regionId)),v.kind==="presence"&&v.regionId&&i&&!i.get(v.regionId)&&l.push(ie("unknown-resource",`unknown live region "${v.regionId}"`,v.regionId)),v.kind==="sequence"&&o&&!o.get(v.sequenceId)&&l.push(ie("unknown-resource",`unknown live sequence "${v.sequenceId}"`,v.sequenceId));return l}function E(){if(!(!i||!b?.labels)){for(let[D,l]of Object.entries(b.labels))if(i.get(D))if(typeof l=="string"){let v=i.get(D)?.a11y;i.setRegionA11y(D,{name:l,role:v?.role??"region"})}else i.setRegionA11y(D,{name:l.name,role:l.role})}}function c(){return b?.reducedSensory===!0}function f(D){let l=o?.inspect().active;return!!(l&&l.sequenceId===D&&(l.phase==="playing"||l.phase==="paused"||l.phase==="requested"||l.phase==="preloading"||l.phase==="ready"))}function h(D,l){if(!o)return;let v=c(),P=D.play!==!1&&!v,_=f(D.sequenceId);if(P&&!_&&(!l||x!==v)){let W=o.playSequence(D.sequenceId,{invocationId:`presentation-binding:${D.sequenceId}`,idempotencyKey:`presentation-binding:${D.sequenceId}`});if(!W.ok&&W.reason!=="duplicate")return ie("unknown-resource",W.detail,D.sequenceId)}!P&&_&&o.skip()}function A(){for(let D of y.values())D.kind==="sequence"&&h(D,!0);x=c()}function L(D){if(!i)return[];let l=new Map;for(let j of D)j.kind==="hotspot"&&j.regionId&&l.set(j.regionId,j.enabled);for(let j of D)j.kind==="semantic-region"&&j.hitTestEnabled!==void 0&&l.set(j.regionId,j.hitTestEnabled);if(l.size===0)return[];let v=new Map,P=!1;for(let[j,H]of l){let g=i.get(j);if(!g)continue;g.hitTest!=="pass-through"&&F.set(j,g.hitTest);let S=F.get(j)??"absorb",I=H?S:"pass-through";v.set(j,I),g.hitTest!==I&&(P=!0)}if(!P)return[];let _=i.snapshot(),N={..._,regions:_.regions.map(j=>{let H=v.get(j.id);return H&&H!==j.hitTest?{...j,hitTest:H}:j})},W=i.restore(N);return W.ok?[]:W.errors.map(j=>ie("unknown-resource",j))}function w(D){let l=r?.snapshot(),v=i?.snapshot(),P=o?.snapshot(),_=new Map(F),N=H=>{F.clear();for(let[g,S]of _)F.set(g,S);return o&&P&&o.restore(P),r&&l&&r.restore(l),i&&v&&i.restore(v),H},W=new Map;for(let H of D)W.set(_t(H),$e(H));let j=L(D);if(j.length>0)return N(j);for(let[H,g]of W){let S=y.get(H),I=Lm(S,g);if(g.kind==="visual-layer"&&r&&!I){let M=g.transition??"replace",q=r.play({name:`presentation-binding:${g.layerId}:${M}`,idempotencyKey:`presentation-binding:${g.layerId}:${g.version}:${M}`,layerId:g.layerId,kind:M,...M==="hide"?{}:{toVersion:g.version},durationFrames:0,onDuplicate:"ignore"});if(!q.ok&&q.reason!=="duplicate")return N([ie("unknown-resource",q.detail,g.layerId)])}if(g.kind==="semantic-region"&&i){let M=g.state??{},q=i.get(g.regionId)?.state,X={hover:M.hover??q?.hover??!1,focus:M.focus??q?.focus??!1,selected:M.selected??q?.selected??!1};(!q||q.hover!==X.hover||q.focus!==X.focus||q.selected!==X.selected)&&i.setRegionState(g.regionId,X)}if(g.kind==="hotspot"&&g.regionId&&i){let M=i.get(g.regionId)?.state;(!M||M.selected!==g.enabled)&&i.setRegionState(g.regionId,{selected:g.enabled})}if(g.kind==="presence"&&g.regionId&&i){let M=i.get(g.regionId)?.state;(!M||M.selected!==g.present)&&i.setRegionState(g.regionId,{selected:g.present})}if(g.kind==="sequence"){let M=h(g,I);if(M)return N([M])}}return y=W,x=c(),E(),[]}function B(D,l){let v=p(D.targets);if(v.length>0)return $(jr,{manifestId:n.id,revision:String(l),reason:v[0]?.code,selectedBindingIds:u}),$(Ur,{manifestId:n.id,revision:String(l),reason:v[0]?.code}),{ok:!1,errors:v,inspect:C()};let P=w(D.targets);return P.length>0?($(jr,{manifestId:n.id,revision:String(l),reason:P[0]?.code,selectedBindingIds:u}),$(Ur,{manifestId:n.id,revision:String(l),reason:P[0]?.code}),{ok:!1,errors:P,inspect:C()}):(d=l,u=D.selectedBindingIds.slice(),k=D.usedFallback,R=D.fallbackReason,T=$e(D.explanation),$(zr,{manifestId:n.id,revision:String(l),selectedBindingIds:u,usedFallback:k,reason:R??void 0}),{ok:!0,revision:l,selectedBindingIds:u.slice(),usedFallback:k,fallbackReason:R,explanation:$e(D.explanation),inspect:C()})}function G(){return{schemaVersion:xo,manifestId:n.id,projectionRevision:d,selectedBindingIds:u.slice(),targets:[...y.values()].map(D=>$e(D)),usedFallback:k,fallbackReason:R,override:b?$e(b):null}}return{get manifest(){return $e(n)},apply(D,l){O();let v=l?.revision??m+1;typeof v=="number"&&(m=Math.max(m,v));let P=Oo(n,D,s);return B(P,v)},setOverride(D){O();let l=c();if(D===null)b=null;else{let v=[],P=Hd(D,v);if(v.length>0||P===void 0)throw new Error(`createPresentationBindingRuntime: ${v.map(_=>_.detail).join("; ")||"invalid override"}`);b=P?$e(P):null,E()}c()!==l&&A()},evaluate(D){return O(),Oo(n,D,s)},inspect(){return O(),C()},snapshot(){return O(),G()},restore(D){O();let l=I=>({ok:!1,errors:I}),v=D;if(typeof D=="string")try{v=JSON.parse(D)}catch{return l([ie("invalid-snapshot","snapshot JSON is invalid")])}if(!nt(v))return l([ie("invalid-snapshot","snapshot must be a JSON object")]);if(v.schemaVersion!==xo)return l([ie("invalid-schema",`unsupported snapshot schemaVersion ${String(v.schemaVersion)}`,"schemaVersion")]);if(v.manifestId!==n.id)return l([ie("invalid-snapshot",`snapshot manifestId "${String(v.manifestId)}" does not match "${n.id}"`,"manifestId")]);if(!Array.isArray(v.selectedBindingIds))return l([ie("invalid-snapshot","selectedBindingIds must be an array","selectedBindingIds")]);let P=new Set(n.bindings.map(I=>I.id));for(let I of v.selectedBindingIds)if(!De(I)||!P.has(I))return l([ie("unknown-resource",`unknown selected binding "${String(I)}"`,"selectedBindingIds")]);if(!Array.isArray(v.targets))return l([ie("invalid-snapshot","targets must be an array","targets")]);let _=[],N=v.targets.map((I,M)=>Do(I,`targets[${M}]`,_,n.resources)).filter(I=>!!I);if(_.length>0)return l(_);let W=[],j=Hd(v.override??null,W);if(W.length>0)return l(W);let H=p(N);if(H.length>0)return l(H);let g=typeof v.projectionRevision=="string"||typeof v.projectionRevision=="number"?v.projectionRevision:v.projectionRevision===null?null:void 0;if(g===void 0)return l([ie("invalid-snapshot","projectionRevision must be a string, number, or null","projectionRevision")]);let S=w(N);return S.length>0?l(S):(d=g,typeof g=="number"&&(m=Math.max(m,g)),u=v.selectedBindingIds.filter(I=>De(I)),k=v.usedFallback===!0,R=v.fallbackReason==="missing-state"||v.fallbackReason==="invalid-projection"?v.fallbackReason:null,b=j??null,E(),A(),{ok:!0,snapshot:G()})},destroy(){a||(a=!0,y.clear(),U.length=0)}}}var Kd="executable module host has been destroyed";var Vm=/^[a-z0-9][a-z0-9.-]*$/i,Fm=/^[a-z0-9][a-z0-9-]*$/i;function Kt(e){return{id:e.id,version:e.version}}function No(e){return`${e.id}@${e.version}`}function Kn(e){return typeof e=="string"&&e.length>0&&Vm.test(e)}function $m(e){if(typeof e!="string"||e.length===0)return!1;let t=e.split(".");return t.some(n=>n.length===0)?!1:t.every(n=>n==="*"||Fm.test(n))}function jd(e,t){if(e===t)return!0;if(!e.includes("*"))return!1;let n=e.split("."),r=t.split(".");if(n.length!==r.length)return!1;for(let i=0;i<n.length;i++)if(n[i]!=="*"&&n[i]!==r[i])return!1;return!0}function Bm(e,t){return t.some(n=>n.version===e.version&&jd(n.id,e.id))}function Gn(e){return e!==null&&typeof e=="object"&&!Array.isArray(e)}function Hm(e){return typeof e=="object"&&e!==null&&typeof e.then=="function"}function Gd(e){return e instanceof Error&&e.message?e.message:String(e)}function Wn(e){if(e===null||typeof e!="object")return e;if(Array.isArray(e))return Object.freeze(e.map(n=>Wn(n)));if(Object.getPrototypeOf(e)!==Object.prototype)return e;let t={};for(let n of Object.keys(e))t[n]=Wn(e[n]);return Object.freeze(t)}function Wd(e){if(!Gn(e))return;let t=e.id,n=e.version;if(!(!Kn(t)||!Kn(n)))return{id:t,version:n}}function qm(e){if(e===void 0)return{};if(!Gn(e))throw new Error("createExecutableModuleHost: limits must be an object");let t={};if(e.maxInvokeMs!==void 0){if(typeof e.maxInvokeMs!="number"||!Number.isInteger(e.maxInvokeMs)||e.maxInvokeMs<1)throw new Error("createExecutableModuleHost: limits.maxInvokeMs must be an integer >= 1");t.maxInvokeMs=e.maxInvokeMs}if(e.maxInvokesPerTurn!==void 0){if(typeof e.maxInvokesPerTurn!="number"||!Number.isInteger(e.maxInvokesPerTurn)||e.maxInvokesPerTurn<1)throw new Error("createExecutableModuleHost: limits.maxInvokesPerTurn must be an integer >= 1");t.maxInvokesPerTurn=e.maxInvokesPerTurn}return t}function Ud(e){if(!Gn(e))throw new Error("createExecutableModuleHost: options are required");if(!Array.isArray(e.allowlist))throw new Error("createExecutableModuleHost: allowlist must be an array");if(!Array.isArray(e.modules))throw new Error("createExecutableModuleHost: modules must be an array");let t=e.allowlist.map((C,p)=>{if(!Gn(C))throw new Error(`createExecutableModuleHost: allowlist[${p}] must be an object`);if(!$m(C.id))throw new Error(`createExecutableModuleHost: allowlist[${p}].id is not a valid id or pattern`);if(!Kn(C.version)||C.version.includes("*"))throw new Error(`createExecutableModuleHost: allowlist[${p}].version must be an exact version`);return{id:C.id,version:C.version}}),n=new Map,r=new Map;for(let[C,p]of e.modules.entries()){if(!Gn(p))throw new Error(`createExecutableModuleHost: modules[${C}] must be an object`);if(!Kn(p.id))throw new Error(`createExecutableModuleHost: modules[${C}].id is invalid`);if(!Kn(p.version))throw new Error(`createExecutableModuleHost: modules[${C}].version is invalid`);if(typeof p.create!="function")throw new Error(`createExecutableModuleHost: modules[${C}].create must be a function`);let E=`${p.id}@${p.version}`;if(n.has(E))throw new Error(`createExecutableModuleHost: duplicate module ${E}`);n.set(E,{id:p.id,version:p.version,create:p.create,capabilities:p.capabilities});let c=r.get(p.id)??[];c.push(p.version),r.set(p.id,c)}let i=qm(e.limits),o=e.capabilities,s=new Map,a=new Set,d=[],m=0,u=0,y=!1;function k(C,p,E){let c=E?{code:C,detail:p,ref:Kt(E)}:{code:C,detail:p};return d.push(c),d.length>256&&d.shift(),c}function R(C,p,E){return{ok:!1,error:k(C,p,E)}}function T(C){if(y){let A=Wd(C);return R("destroyed",Kd,A)}let p=Wd(C);if(!p)return R("invalid-ref","module ref requires exact id and version");let E=n.get(No(p)),c=r.has(p.id),f=Bm(p,t),h=t.some(A=>jd(A.id,p.id)&&A.version!==p.version);return f?E?{ok:!0,ref:p,registration:E}:c?R("version-mismatch",`no factory for ${p.id}@${p.version}`,p):R("unknown-module",`unknown module "${p.id}"`,p):h||c&&!E?R("version-mismatch",`no allowlisted factory for ${p.id}@${p.version}`,p):!E&&!c?R("unknown-module",`unknown module "${p.id}"`,p):R("not-allowlisted",`${p.id}@${p.version} is not allowlisted`,p)}function b(C,p){let E=No(C);if(s.has(E))return{ok:!0,ref:Kt(C)};let c=Wn({...o??{},...p.capabilities??{}});try{let f=p.create(c);return!f||typeof f.invoke!="function"?R("load-failed",`factory for ${C.id}@${C.version} did not return an invoke() module`,C):(s.set(E,{ref:Kt(C),instance:f}),{ok:!0,ref:Kt(C)})}catch(f){return R("load-failed",Gd(f),C)}}function x(C){let p=T(C);return p.ok?b(p.ref,p.registration):p}function F(C,p){let E=T(C);if(!E.ok)return Promise.resolve(E);if(i.maxInvokesPerTurn!==void 0&&u>=i.maxInvokesPerTurn)return Promise.resolve(R("rate-limited",`maxInvokesPerTurn ${i.maxInvokesPerTurn} exceeded`,E.ref));u+=1;let c=b(E.ref,E.registration);if(!c.ok)return Promise.resolve(c);let f=s.get(No(E.ref));if(!f)return Promise.resolve(R("load-failed","module instance was not retained",E.ref));let h=new AbortController;a.add(h);let A=Date.now(),L=i.maxInvokeMs,w;L!==void 0&&(w=setTimeout(()=>h.abort(),L));let B=D=>(w!==void 0&&clearTimeout(w),a.delete(h),y?R("destroyed",Kd,E.ref):D),G=D=>h.signal.aborted&&L!==void 0?R("timeout",`invoke exceeded ${L}ms`,E.ref):R("invoke-failed",Gd(D),E.ref);try{let D=f.instance.invoke(p,{signal:h.signal,turn:m});return Hm(D)?new Promise(l=>{let v=!1,P=_=>{v||(v=!0,l(B(_)))};if(L!==void 0){let _=w;_!==void 0&&clearTimeout(_),w=setTimeout(()=>{h.abort(),P(R("timeout",`invoke exceeded ${L}ms`,E.ref))},Math.max(0,L-(Date.now()-A)))}Promise.resolve(D).then(_=>P({ok:!0,value:_}),_=>P(G(_)))}):L!==void 0&&Date.now()-A>=L?(h.abort(),Promise.resolve(B(R("timeout",`invoke exceeded ${L}ms`,E.ref)))):Promise.resolve(B({ok:!0,value:D}))}catch(D){return Promise.resolve(B(G(D)))}}function U(){y||(m+=1,u=0)}function O(){return{allowlist:t.map(Kt),registered:[...n.values()].map(C=>({id:C.id,version:C.version})),loaded:[...s.values()].map(C=>Kt(C.ref)),turn:m,invokesThisTurn:u,diagnostics:d.map(C=>C.ref?{...C,ref:Kt(C.ref)}:{...C})}}function $(){if(!y){y=!0;for(let C of a)C.abort();a.clear();for(let C of s.values())try{C.instance.destroy?.()}catch{}s.clear(),n.clear(),r.clear(),t.length=0}}return{load:x,invoke:F,beginTurn:U,inspect:O,destroy:$}}var _o=1,Jd="hmac-sha256",Wt=1,ec=Bn;var Lo=class extends Error{constructor(n,r){super(`${r} requires grant "${n}"`);this.code="capability-denied";this.name="RemoteCartCapabilityError",this.grant=n}};function be(e,t,n){return n?{code:e,detail:t,path:n}:{code:e,detail:t}}function jt(e){return e!==null&&typeof e=="object"&&!Array.isArray(e)}function rt(e){return typeof e=="string"&&e.length>0}var Vo=new Set(ec),zd=new Set(["image","audio","font","spritesheet"]),Km=new Set(["version","id","cartVersion","publisher","assets","requestedGrants","module","capabilities"]),Gm=new Set(["id","kind","url","hash","alg"]),Wm=new Set(["alg","keyId","mac"]),Yd=/^[a-z0-9][a-z0-9.-]*$/i,jm=256;function tc(e){let t="";for(let n=0;n<e.length;n++)t+=e[n].toString(16).padStart(2,"0");return t}var Um=/^[0-9a-f]+$/i;function Xd(e){if(e.length%2!==0||e.length===0||!Um.test(e))return;let t=new Uint8Array(e.length/2);for(let n=0;n<t.length;n++)t[n]=Number.parseInt(e.slice(n*2,n*2+2),16);return t}function Jm(e,t){let n=Xd(e),r=Xd(t),i=n??new Uint8Array(32),o=r??new Uint8Array(32),s=Math.max(i.length,o.length),a=n&&r&&n.length===r.length?0:1;for(let d=0;d<s;d++)a|=(i[d]??0)^(o[d]??0);return a===0}async function Xr(e){let t=typeof e=="string"?new TextEncoder().encode(e):e,n=await crypto.subtle.digest("SHA-256",t);return tc(new Uint8Array(n))}async function zm(e,t){let n=await crypto.subtle.importKey("raw",new TextEncoder().encode(e),{name:"HMAC",hash:"SHA-256"},!1,["sign"]),r=await crypto.subtle.sign("HMAC",n,new TextEncoder().encode(t));return tc(new Uint8Array(r))}function Fo(e){if(Array.isArray(e))return e.map(Fo);if(!jt(e))return e;let t={};for(let n of Object.keys(e).sort())t[n]=Fo(e[n]);return t}function Ym(e){return JSON.stringify(Fo(e))}function Qr(e,t,n){let r=[];for(let i of Object.keys(e))t.has(i)||r.push(be("invalid-manifest",`unknown field "${i}"`,n?`${n}.${i}`:i));return r}function Xm(e){let t=new Set,n=[];for(let r of e)t.has(r)||(t.add(r),n.push(r));return n}function nc(e,t){if(!Array.isArray(e))return{ok:!1,errors:[be("invalid-manifest",`${t} must be an array`,t)]};let n=[],r=[];return e.forEach((i,o)=>{let s=`${t}[${o}]`;typeof i!="string"||!Vo.has(i)?n.push(be("invalid-manifest",`invalid grant "${String(i)}"`,s)):r.push(i)}),n.length>0?{ok:!1,errors:n}:{ok:!0,values:Xm(r)}}function Qm(e){if(!Array.isArray(e))return{ok:!1,errors:[be("invalid-manifest","assets must be an array","assets")]};let t=[],n=[],r=new Set;return e.forEach((i,o)=>{let s=`assets[${o}]`;if(!jt(i)){t.push(be("invalid-manifest","asset must be an object",s));return}t.push(...Qr(i,Gm,s)),rt(i.id)?r.has(i.id)?t.push(be("invalid-manifest",`duplicate asset id "${i.id}"`,`${s}.id`)):r.add(i.id):t.push(be("invalid-manifest","asset id is required",`${s}.id`)),(typeof i.kind!="string"||!zd.has(i.kind))&&t.push(be("invalid-manifest",`invalid asset kind "${String(i.kind)}"`,`${s}.kind`)),rt(i.url)||t.push(be("invalid-manifest","asset url is required",`${s}.url`)),rt(i.hash)||t.push(be("unsigned-bytes","asset hash is required",`${s}.hash`)),i.alg!=="sha256"&&t.push(be("invalid-manifest","asset alg must be sha256",`${s}.alg`)),rt(i.id)&&typeof i.kind=="string"&&zd.has(i.kind)&&rt(i.url)&&rt(i.hash)&&i.alg==="sha256"&&n.push({id:i.id,kind:i.kind,url:i.url,hash:i.hash,alg:"sha256"})}),t.length>0?{ok:!1,errors:t}:{ok:!0,values:n}}function Zm(e){return e===void 0?{ok:!0}:jt(e)?!rt(e.id)||!Yd.test(e.id)?{ok:!1,errors:[be("invalid-manifest","module.id is invalid","module.id")]}:!rt(e.version)||!Yd.test(e.version)?{ok:!1,errors:[be("invalid-manifest","module.version is invalid","module.version")]}:{ok:!0,value:{id:e.id,version:e.version}}:{ok:!1,errors:[be("invalid-manifest","module must be an object","module")]}}function eg(e){if(!jt(e))return{ok:!1,errors:[be("invalid-manifest","remote cart body must be a JSON object")]};let t=Qr(e,Km,"");e.version!==void 0&&e.version!==_o&&t.push(be("invalid-version",`remote cart manifest version must be ${_o}`,"version")),rt(e.id)||t.push(be("invalid-manifest","id is required","id")),rt(e.cartVersion)||t.push(be("invalid-manifest","cartVersion is required","cartVersion")),rt(e.publisher)||t.push(be("unknown-publisher","publisher is required","publisher"));let n=Qm(e.assets);n.ok||t.push(...n.errors);let r=nc(e.requestedGrants,"requestedGrants");r.ok||t.push(...r.errors);let i=Zm(e.module);i.ok||t.push(...i.errors);let o;if(e.capabilities!==void 0){let a=so(e.capabilities);if(a.ok)o=a.manifest;else for(let d of a.errors)t.push(be(d.code,d.detail,d.path?`capabilities.${d.path}`:"capabilities"))}if(t.length>0)return{ok:!1,errors:t};let s={version:_o,id:e.id,cartVersion:e.cartVersion,publisher:e.publisher,assets:n.ok?n.values:[],requestedGrants:r.ok?r.values:[]};return i.ok&&i.value&&(s.module=i.value),o&&(s.capabilities=o),{ok:!0,body:s}}function tg(e){if(!jt(e))return{ok:!1,errors:[be("invalid-signature","signature must be an object","signature")]};let t=Qr(e,Wm,"signature");return e.alg!==Jd&&t.push(be("invalid-signature","signature.alg must be hmac-sha256","signature.alg")),rt(e.keyId)||t.push(be("unknown-key","signature.keyId is required","signature.keyId")),(!rt(e.mac)||!/^[0-9a-f]+$/i.test(e.mac))&&t.push(be("invalid-signature","signature.mac must be hex","signature.mac")),t.length>0?{ok:!1,errors:t}:{ok:!0,signature:{alg:Jd,keyId:e.keyId,mac:e.mac.toLowerCase()}}}function rc(e){if(!jt(e))return{ok:!1,errors:[be("invalid-manifest","signed remote cart must be a JSON object")]};let t=eg(e.body),n=tg(e.signature),r=[];t.ok||r.push(...t.errors),n.ok||r.push(...n.errors);let i=Qr(e,new Set(["body","signature"]),"");return r.push(...i),r.length>0?{ok:!1,errors:r}:{ok:!0,manifest:{body:t.ok?t.body:void 0,signature:n.ok?n.signature:void 0}}}async function $o(e,t,n){let r=rc(e);if(!r.ok)return r;let i=t[r.manifest.signature.keyId];if(!rt(i))return{ok:!1,errors:[be("unknown-key",`unknown signature key "${r.manifest.signature.keyId}"`,"signature.keyId")]};let o=await zm(i,Ym(r.manifest.body));return Jm(o,r.manifest.signature.mac)?n!==void 0&&r.manifest.body.cartVersion!==n?{ok:!1,errors:[be("invalid-version",`cartVersion ${r.manifest.body.cartVersion} does not match ${n}`,"body.cartVersion")]}:{ok:!0,manifest:r.manifest}:{ok:!1,errors:[be("invalid-signature","HMAC does not match canonical body","signature.mac")]}}function ic(e){return[...e.body.requestedGrants]}function bn(e){let t=new Set;if(e)for(let o of e)Vo.has(o)&&t.add(o);function n(){return{schemaVersion:Wt,grants:ec.filter(o=>t.has(o))}}function r(o){let s=o;if(typeof o=="string")try{s=JSON.parse(o)}catch{return{ok:!1,errors:[be("invalid-json","grant snapshot JSON is not parseable")]}}if(!jt(s))return{ok:!1,errors:[be("invalid-manifest","grant snapshot must be an object")]};if(s.schemaVersion!==Wt)return{ok:!1,errors:[be("invalid-version",`grant snapshot schema must be ${Wt}`,"schemaVersion")]};let a=nc(s.grants,"grants");if(!a.ok)return a;t.clear();for(let d of a.values)t.add(d);return{ok:!0,grants:n().grants}}function i(o,s){return Vo.has(o)?(s?t.add(o):t.delete(o),{ok:!0,grants:n().grants}):{ok:!1,errors:[be("invalid-manifest",`invalid grant "${String(o)}"`)]}}return{grant:o=>i(o,!0),revoke:o=>i(o,!1),has:o=>t.has(o),list:()=>n().grants,inspect:n,restore:r}}function Gt(e,t){return e.push(t),e.length>jm&&e.shift(),t}function Qd(e){return e.code==="undeclared"?be("undeclared-asset",e.message,e.ref):e.code==="hash-mismatch"?be("hash-mismatch",e.message,e.ref):e.code==="unsigned"?be("unsigned-bytes",e.message,e.ref):be("load-failed",e.message,e.ref)}function Zd(e,t,n,r){let i=(s,a)=>{if(!e.has(s))throw new Lo(s,a)},o={grants:e.list(),network:{fetch(s){if(i("network","network.fetch"),!t.has(s))return Promise.reject(Object.assign(new Error(`undeclared network url "${s}"`),{code:"undeclared-asset"}));let a=n[s];return a?Promise.resolve(a.slice()):Promise.reject(Object.assign(new Error(`no signed bytes for "${s}"`),{code:"unsigned-bytes"}))}},storage:{getItem(s){return i("persistence","storage.getItem"),r.get(s)??null},setItem(s,a){i("persistence","storage.setItem"),r.set(s,a)},removeItem(s){i("persistence","storage.removeItem"),r.delete(s)},clear(){i("persistence","storage.clear"),r.clear()}},audio:{request(){return i("audio","audio.request"),{ok:!0}}},controller:{request(){return i("controller","controller.request"),{ok:!0}}},fullscreen:{request(){return i("fullscreen","fullscreen.request"),{ok:!0}}}};return Wn(o)}function ng(e,t){return{source:`remote-cart:${e.body.id}`,publisher:e.body.publisher,version:e.body.cartVersion,signature:{id:e.signature.keyId,alg:e.signature.alg},grants:[...t]}}function rg(e){let t=rc(e.manifest);if(!t.ok)throw new Error(t.errors.map(F=>F.detail).join("; "));let n=t.manifest,r=bn(e.grants),i=[],o=new Map,s=new Set(n.body.assets.map(F=>F.url)),a={};for(let F of n.body.assets)a[F.id]={url:F.url,hash:F.hash,alg:F.alg};let d=!1,m=!1,u=!1,y;function k(){return Gt(i,be("destroyed","remote cart sandbox has been destroyed"))}async function R(){if(u)return{ok:!0};let F=await $o(n,e.keys);if(!F.ok){for(let U of F.errors)Gt(i,U);return{ok:!1,errors:F.errors}}return u=!0,{ok:!0}}async function T(){if(m)return{ok:!1,errors:[k()]};let F=await R();if(!F.ok)return F;if(n.body.capabilities){let C=n.body.capabilities,p=Fr(C,{contractVersion:Math.max(1,C.runtime.minContractVersion),features:[...C.runtime.features],integrations:[...C.integrations],grants:r.list()});if(!p.ok){let E=p.errors.map(c=>be(c.code,c.detail,c.path));for(let c of E)Gt(i,c);return{ok:!1,errors:E}}}let U=Er({declared:a,fetchBytes:async C=>e.bytesByUrl[C],hashBytes:Xr}),O=dn({resolver:U,emitEvents:!1,wallClockTimeout:!1}),$=n.body.assets.map(C=>({id:C.id,ref:C.id,type:C.kind,integrity:`sha256-${C.hash}`,provenance:{publisher:n.body.publisher,version:n.body.cartVersion}}));try{let C=await O.preload($);if(C.failed>0)return{ok:!1,errors:C.failures.map(E=>Gt(i,Qd(E)))};if(d=!0,n.body.module&&e.modules){y=Ud({allowlist:[n.body.module],modules:e.modules,capabilities:Zd(r,s,e.bytesByUrl,o)});let p=y.load(n.body.module);if(!p.ok){let E=be("load-failed",p.error.detail,`${p.error.ref?.id}@${p.error.ref?.version}`);return Gt(i,E),{ok:!1,errors:[E]}}}return{ok:!0,snapshot:C}}catch(C){return _n(C)?{ok:!1,errors:[Gt(i,Qd(C))]}:{ok:!1,errors:[Gt(i,be("load-failed",C instanceof Error?C.message:String(C)))]}}finally{O.dispose()}}function b(){return m?{ok:!1,errors:[k()]}:u?Zd(r,s,e.bytesByUrl,o):{ok:!1,errors:[be("invalid-signature","verify the manifest HMAC via loadAssets before using capabilities")]}}function x(){return{id:n.body.id,cartVersion:n.body.cartVersion,publisher:n.body.publisher,signature:{id:n.signature.keyId,alg:n.signature.alg},requestedGrants:[...n.body.requestedGrants],grants:r.list(),assets:n.body.assets.map(F=>({id:F.id,url:F.url,hash:F.hash})),loaded:d,destroyed:m,diagnostics:i.map(F=>({...F}))}}return{listRequestedGrants:()=>[...n.body.requestedGrants],grants:r,loadAssets:T,capabilities:b,inspect:x,snapshotProvenance:()=>ng(n,r.list()),destroy(){m||(m=!0,y?.destroy(),o.clear())}}}var Zr=1,ei=1,ig=8,og=["cabinet","painting","dream","wormhole","book","nested-world"],sg=["completed","aborted"],sc=["audio","controller","fullscreen"],vn="portal.lifecycle.entered",Bo="portal.lifecycle.exited",Ho="portal.lifecycle.aborted";var ag=new Set(og),dg=new Set(sg),cg=new Set(sc),ug=new Set(Bn),lg="Portal lifecycle has been destroyed";function ke(e,t,n){return n?{code:e,detail:t,path:n}:{code:e,detail:t}}function qo(e){return e!==null&&typeof e=="object"&&!Array.isArray(e)}function Ut(e){try{return JSON.parse(JSON.stringify(e))}catch{return e}}function oc(e){return typeof e=="string"&&ag.has(e)}function pg(e){return cg.has(e)}function Go(e){return[...e].sort()}function ac(e){return Go([...e.childGrantsBefore,...e.transferred,...e.extraChildGrants])}function Ko(e){return{id:e.id,parentId:e.parentId,childId:e.childId,metaphor:e.metaphor,seed:e.seed,clock:e.clock,parentState:Ut(e.parentState),parentGrants:[...e.parentGrants],childGrants:ac(e),childGrantsBefore:[...e.childGrantsBefore],extraChildGrants:[...e.extraChildGrants],persistence:Ut(e.persistence),transferred:[...e.transferred],enterCue:e.enterCue,exitCue:e.exitCue}}function fg(e){return{enter:t=>e.enter({...t,metaphor:"cabinet"}),exit:e.exit,abort:e.abort}}function mg(e){return{enter:t=>e.enter({...t,metaphor:"painting"}),exit:e.exit,abort:e.abort}}function gg(e={}){let t=e.group,n=e.audioBroker??t?.audioBroker,r=e.maxDepth??ig,i=new Map((e.declarations??[]).map(l=>[l.id,l])),o=new Map;if(e.grants)for(let[l,v]of Object.entries(e.grants))o.set(l,v);let s=0,a=e.createId??(()=>`portal-${++s}`),d=[],m=[],u=null,y=!1,k=e.rootId??null,R=()=>{if(y)throw new Error(lg)},T=l=>{let v=o.get(l);return v||(v=bn(),o.set(l,v)),v},b=()=>d.length===0?k:d[d.length-1].childId,x=(l,v)=>{if(m.push(l),!t)return;let P={type:l,kind:"state",payload:v};try{t.publish(P)}catch{}},F=l=>{if(!t)return null;try{return Ut(t.participant(l).cart.getCartState())}catch{return null}},U=()=>{if(!t)return;let l=new Set;for(let P of d)l.add(P.parentId);let v=new Set(t.inspectParticipants().map(P=>P.id));for(let P of v)l.has(P)?t.isParticipantSuspended(P)||t.suspendParticipant(P):t.isParticipantSuspended(P)&&t.resumeParticipant(P)},O=(l,v,P)=>{let _=T(l),N=T(v),W=_.list(),j=N.list(),H=[];for(let g of sc)_.has(g)&&(_.revoke(g),N.grant(g),H.push(g));if(P)for(let g of P)N.grant(g);return $(l,v,H,P??[]),{transferred:H,parentBefore:W,childBefore:j}},$=(l,v,P,_)=>{n&&(P.includes("audio")||_.includes("audio"))&&(n.revoke(l),n.authorize(v))},C=l=>{for(let v of l)$(v.parentId,v.childId,v.transferred,v.extraChildGrants)},p=()=>n?n.inspect().authorized.slice():[],E=l=>{if(!n)return;let v=new Set(l);for(let P of n.inspect().authorized)v.has(P)||n.revoke(P);for(let P of l)n.authorize(P)},c=()=>t?t.inspectParticipants().map(l=>l.id).filter(l=>t.isParticipantSuspended(l)).sort():[],f=l=>{if(!t)return;let v=new Set(l);for(let P of t.inspectParticipants()){let _=t.isParticipantSuspended(P.id);v.has(P.id)&&!_&&t.suspendParticipant(P.id),!v.has(P.id)&&_&&t.resumeParticipant(P.id)}},h=l=>{let v=T(l.parentId),P=T(l.childId);for(let _ of l.transferred)P.revoke(_),v.grant(_);for(let _ of l.extraChildGrants)l.childGrantsBefore.includes(_)||P.revoke(_);n&&(l.transferred.includes("audio")||l.extraChildGrants.includes("audio"))&&(n.revoke(l.childId),n.authorize(l.parentId))},A=()=>{let l={};for(let[v,P]of o)l[v]=P.list();return{destroyed:y,activeId:y?null:b(),stack:d.map(Ko),lastOutcome:u,cues:[...m],grants:l}},L=(l,v)=>{if(R(),d.length===0)return{ok:!1,errors:[ke("empty-stack","no portal is open")]};let P=d[d.length-1],_={schemaVersion:ei,kind:l,payload:v},N=l==="aborted"?Ho:Bo;return P.exitCue=N,h(P),d.pop(),u=_,U(),x(N,{parentId:P.parentId,childId:P.childId,metaphor:P.metaphor,kind:l}),{ok:!0,inspect:A(),outcome:_}},w=(l,v)=>l===null?{ok:!0,outcome:null}:qo(l)?l.schemaVersion!==ei?{ok:!1,errors:[ke("invalid-version",`outcome schema must be ${ei}`,`${v}.schemaVersion`)]}:typeof l.kind!="string"||!dg.has(l.kind)?{ok:!1,errors:[ke("invalid-snapshot","outcome.kind is required",`${v}.kind`)]}:{ok:!0,outcome:{schemaVersion:ei,kind:l.kind,payload:l.payload}}:{ok:!1,errors:[ke("invalid-snapshot","outcome must be an object or null",v)]},B=(l,v)=>{if(!Array.isArray(l))return{ok:!1,errors:[ke("invalid-snapshot","grants must be an array",v)]};let P=[];for(let _=0;_<l.length;_++){let N=l[_];if(typeof N!="string"||!ug.has(N))return{ok:!1,errors:[ke("invalid-snapshot",typeof N=="string"?`unknown grant "${N}"`:"grant must be a string",`${v}[${_}]`)]};P.push(N)}return{ok:!0,grants:P}},G=(l,v)=>{if(!qo(l))return{ok:!1,errors:[ke("invalid-snapshot","frame must be an object",v)]};if(typeof l.id!="string"||l.id.length===0)return{ok:!1,errors:[ke("invalid-snapshot","frame.id is required",`${v}.id`)]};if(typeof l.parentId!="string"||typeof l.childId!="string")return{ok:!1,errors:[ke("invalid-snapshot","parentId and childId are required",v)]};if(!oc(l.metaphor))return{ok:!1,errors:[ke("invalid-snapshot","unknown metaphor",`${v}.metaphor`)]};let P=B(l.parentGrants,`${v}.parentGrants`);if(!P.ok)return P;let _=B(l.childGrants,`${v}.childGrants`);if(!_.ok)return _;if(!Array.isArray(l.transferred))return{ok:!1,errors:[ke("invalid-snapshot","transferred must be an array",`${v}.transferred`)]};let N=[];for(let S=0;S<l.transferred.length;S++){let I=l.transferred[S];if(typeof I!="string"||!pg(I))return{ok:!1,errors:[ke("invalid-snapshot","invalid exclusive grant",`${v}.transferred[${S}]`)]};N.push(I)}if(l.enterCue!==vn)return{ok:!1,errors:[ke("invalid-snapshot","enterCue mismatch",`${v}.enterCue`)]};let W=l.exitCue;if(W!==null&&W!==Bo&&W!==Ho)return{ok:!1,errors:[ke("invalid-snapshot","invalid exitCue",`${v}.exitCue`)]};if(l.seed!==null&&typeof l.seed!="string")return{ok:!1,errors:[ke("invalid-snapshot","seed must be string or null",`${v}.seed`)]};if(l.clock!==null&&typeof l.clock!="number")return{ok:!1,errors:[ke("invalid-snapshot","clock must be number or null",`${v}.clock`)]};let j=l.extraChildGrants===void 0?{ok:!0,grants:[]}:B(l.extraChildGrants,`${v}.extraChildGrants`);if(!j.ok)return j;let H=l.childGrantsBefore===void 0?{ok:!0,grants:_.grants}:B(l.childGrantsBefore,`${v}.childGrantsBefore`);if(!H.ok)return H;let g=l.childGrantsBefore===void 0?ac({childGrantsBefore:H.grants,transferred:N,extraChildGrants:j.grants}):_.grants;return{ok:!0,frame:{id:l.id,parentId:l.parentId,childId:l.childId,metaphor:l.metaphor,seed:l.seed,clock:l.clock,parentState:l.parentState,parentGrants:P.grants,childGrants:g,childGrantsBefore:H.grants,extraChildGrants:j.grants,persistence:l.persistence??null,transferred:N,enterCue:vn,exitCue:W}}},D=l=>{let v=l;if(typeof l=="string")try{v=JSON.parse(l)}catch{return{ok:!1,errors:[ke("invalid-json","portal snapshot JSON is not parseable")]}}if(!qo(v))return{ok:!1,errors:[ke("invalid-snapshot","snapshot must be an object")]};if(v.schemaVersion!==Zr)return{ok:!1,errors:[ke("invalid-version",`portal snapshot schema must be ${Zr}`,"schemaVersion")]};if(!Array.isArray(v.stack))return{ok:!1,errors:[ke("invalid-snapshot","stack must be an array","stack")]};let P=[];for(let j=0;j<v.stack.length;j++){let H=G(v.stack[j],`stack[${j}]`);if(!H.ok)return H;P.push(H.frame)}if(P.length>r)return{ok:!1,errors:[ke("max-depth",`stack exceeds maxDepth ${r}`,"stack")]};let _=w(v.lastOutcome,"lastOutcome");if(!_.ok)return _;if(v.activeId!==null&&typeof v.activeId!="string")return{ok:!1,errors:[ke("invalid-snapshot","activeId must be string or null","activeId")]};if(!Array.isArray(v.cues))return{ok:!1,errors:[ke("invalid-snapshot","cues must be an array","cues")]};let N=[];for(let j=0;j<v.cues.length;j++){let H=v.cues[j];if(H!==vn&&H!==Bo&&H!==Ho)return{ok:!1,errors:[ke("invalid-snapshot","unknown cue",`cues[${j}]`)]};N.push(H)}let W=P.length===0?k:P[P.length-1].childId;return v.activeId!==W&&v.activeId!==null&&P.length>0&&v.activeId!==P[P.length-1].childId?{ok:!1,errors:[ke("invalid-snapshot","activeId must be the top child when the stack is non-empty","activeId")]}:{ok:!0,snapshot:{schemaVersion:Zr,activeId:v.activeId??W,stack:P,lastOutcome:_.outcome,cues:N}}};return{enter(l){R();let v=[];(!l.from||!l.to)&&v.push(ke("invalid-enter","from and to are required")),l.from===l.to&&v.push(ke("invalid-enter","cannot enter the same cart")),l.metaphor!==void 0&&!oc(l.metaphor)&&v.push(ke("invalid-enter","unknown metaphor","metaphor")),d.length>=r&&v.push(ke("max-depth",`portal stack is at maxDepth ${r}`));let P=b();P&&l.from!==P&&v.push(ke("stack-order",`enter must start from the active cart "${P}"`,"from"));let _=i.get(l.from);if(_&&!_.targets.includes(l.to)&&v.push(ke("undeclared-target",`"${l.from}" does not declare target "${l.to}"`,"to")),t){try{t.participant(l.from)}catch{v.push(ke("unknown-parent",`unknown parent "${l.from}"`,"from"))}try{t.participant(l.to)}catch{v.push(ke("unknown-child",`unknown child "${l.to}"`,"to"))}}if(v.length)return{ok:!1,errors:v};let N=l.state!==void 0?Ut(l.state):F(l.from),W=l.grants??[],{transferred:j,parentBefore:H,childBefore:g}=O(l.from,l.to,W),S={id:a(),parentId:l.from,childId:l.to,metaphor:l.metaphor??"nested-world",seed:l.seed??null,clock:l.clock??null,parentState:N,parentGrants:Go(H),childGrantsBefore:Go(g),transferred:j,extraChildGrants:[...W],persistence:l.persistence??null,enterCue:vn,exitCue:null};return d.push(S),U(),x(vn,{parentId:S.parentId,childId:S.childId,metaphor:S.metaphor,seed:S.seed}),{ok:!0,inspect:A()}},exit(l){return L("completed",l)},abort(l){return L("aborted",l)},stack(){return R(),d.map(Ko)},activeId(){return R(),b()},inspect(){return A()},snapshot(){return R(),{schemaVersion:Zr,activeId:b(),stack:d.map(Ko),lastOutcome:u,cues:[...m]}},restore(l){R();let v=D(l);if(!v.ok)return v;let P=v.snapshot;if(t){let N=[];for(let W=0;W<P.stack.length;W++){let j=P.stack[W];try{t.participant(j.parentId)}catch{N.push(ke("unknown-parent",`unknown parent "${j.parentId}"`,`stack[${W}].parentId`))}try{t.participant(j.childId)}catch{N.push(ke("unknown-child",`unknown child "${j.childId}"`,`stack[${W}].childId`))}}if(N.length)return{ok:!1,errors:N}}let _={stack:d.map(N=>({...N})),lastOutcome:u,cues:[...m],grants:new Map([...o].map(([N,W])=>[N,W.list()])),authorized:p(),suspended:c()};try{d.length=0;for(let N of P.stack)d.push({id:N.id,parentId:N.parentId,childId:N.childId,metaphor:N.metaphor,seed:N.seed,clock:N.clock,parentState:Ut(N.parentState),parentGrants:[...N.parentGrants],childGrantsBefore:[...N.childGrantsBefore],transferred:[...N.transferred],extraChildGrants:[...N.extraChildGrants],persistence:Ut(N.persistence),enterCue:vn,exitCue:N.exitCue});u=P.lastOutcome,m.length=0,m.push(...P.cues);for(let N of d)T(N.parentId).restore({schemaVersion:Wt,grants:N.parentGrants}),T(N.childId).restore({schemaVersion:Wt,grants:N.childGrantsBefore});for(let N of d){let W=T(N.parentId),j=T(N.childId);for(let H of N.transferred)W.revoke(H),j.grant(H);for(let H of N.extraChildGrants)j.grant(H)}return C(d),U(),{ok:!0,snapshot:Ut(P)}}catch(N){d.length=0,d.push(..._.stack),u=_.lastOutcome,m.length=0,m.push(..._.cues);for(let[W,j]of _.grants)T(W).restore({schemaVersion:Wt,grants:j});try{E(_.authorized),f(_.suspended)}catch{}return{ok:!1,errors:[ke("restore-failed",N instanceof Error?N.message:String(N))]}}},grantsOf:T,destroy(){if(!y){for(y=!0;d.length>0;){let l=d.pop();h(l)}if(t)try{U()}catch{}m.length=0,u=null}}}}var ti=1,hg=1,yg=["queued","claimed","awaiting-evaluation","retry-scheduled","ready","applied","failed","canceled","superseded"],bg=["retryable","permanent","unknown"],vg=["accept","reject","revise"],uc="job.intent.submitted",jo="job.state.queued",lc="job.state.claimed",pc="job.state.progress",fc="job.state.awaiting-evaluation",mc="job.state.retry-scheduled",gc="job.state.ready",hc="job.state.applied",yc="job.state.failed",bc="job.state.canceled",vc="job.state.superseded",Sg="job.diagnostic.lifecycle";var kg=Ht,Eg=new Set(yg),Ig=new Set(bg),Rg=new Set(vg),Cg="Job coordinator has been destroyed",Ag=512,wg=8;function pe(e,t,n){return n?{code:e,detail:t,path:n}:{code:e,detail:t}}function Jt(e){return e!==null&&typeof e=="object"&&!Array.isArray(e)}function Oe(e){try{return JSON.parse(JSON.stringify(e))}catch{return e}}function Wo(e,t){if(e==null)return e;if(Array.isArray(e))return e.map(i=>Wo(i,t));if(typeof e!="object")return e;let n=e,r={};for(let[i,o]of Object.entries(n))r[i]=t.has(i)?ht:Wo(o,t);return r}function pt(){return{version:1,fields:{jobId:{type:"string"},state:{type:"string"},definitionId:{type:"string"},correlationId:{type:"string",optional:!0},reasonCode:{type:"string",optional:!0}}}}function ft(e){if(!e.ok)throw new Error(e.errors.map(t=>t.detail).join("; "));return e.contract}function Pg(){return[ft(Md(uc,pt())),ft(me(jo,pt())),ft(me(lc,pt())),ft(me(pc,pt())),ft(me(fc,pt())),ft(me(mc,pt())),ft(me(gc,pt())),ft(me(hc,pt())),ft(me(yc,pt())),ft(me(bc,pt())),ft(me(vc,pt())),ft(tt(Sg,pt()))]}function Sc(){let e=new Map,t=new Map;return{save(n){let r=Oe(n);e.set(r.jobId,r),t.set(r.idempotencyKey,r.jobId)},get(n){let r=e.get(n);return r?Oe(r):void 0},getByIdempotencyKey(n){let r=t.get(n);return r?this.get(r):void 0},list(){return[...e.values()].map(n=>Oe(n))},replaceAll(n){e.clear(),t.clear();for(let r of n)this.save(r)}}}function xg(){let e,t=new Set;return{bind(n){e=n},start(n){t.add(n.jobId)},cancel(n){t.delete(n)},complete(n,r){return e?(t.delete(n),e.complete(n,r)):{ok:!1,errors:[pe("unbound-worker","worker is not bound")]}},fail(n,r){return e?(t.delete(n),e.fail(n,r)):{ok:!1,errors:[pe("unbound-worker","worker is not bound")]}},started(){return[...t]}}}function Uo(e){return Jt(e)?e.schemaVersion===hg&&typeof e.kind=="string"&&e.kind.length>0&&typeof e.uri=="string"&&e.uri.length>0&&(e.contentType===void 0||typeof e.contentType=="string")&&(e.bytes===void 0||typeof e.bytes=="number"&&Number.isFinite(e.bytes)):!1}function kc(e){return Jt(e)?typeof e.value=="number"&&Number.isFinite(e.value)&&typeof e.stage=="string"&&e.stage.length>0&&(e.message===void 0||typeof e.message=="string"):!1}function dc(e){return e===null||typeof e=="string"}function cc(e){return e===null||typeof e=="number"&&Number.isFinite(e)}function Tg(e){return Jt(e)?typeof e.attempt=="number"&&Number.isInteger(e.attempt)&&typeof e.code=="string"&&e.code.length>0&&typeof e.retryability=="string"&&Ig.has(e.retryability)&&typeof e.at=="number"&&Number.isFinite(e.at)&&(e.detail===void 0||typeof e.detail=="string"):!1}function Dg(e){return Jt(e)?typeof e.decision=="string"&&Rg.has(e.decision)&&typeof e.at=="number"&&Number.isFinite(e.at)&&(e.correction===void 0||typeof e.correction=="string"):!1}function Og(e){return!Jt(e)||typeof e.reasonCode!="string"||e.reasonCode.length===0?!1:e.resultRef===void 0||Uo(e.resultRef)}function Mg(e,t){if(!Jt(e))return{ok:!1,errors:[pe("invalid-job","job must be an object",t)]};let n=[],r=(i,o,s)=>{o||n.push(pe("invalid-job-field",s,`${t}.${i}`))};return r("jobId",typeof e.jobId=="string"&&e.jobId.length>0,"jobId is required"),r("definitionId",typeof e.definitionId=="string"&&e.definitionId.length>0,"definitionId is required"),r("definitionVersion",typeof e.definitionVersion=="number"&&Number.isInteger(e.definitionVersion),"definitionVersion must be an integer"),r("idempotencyKey",typeof e.idempotencyKey=="string"&&e.idempotencyKey.length>0,"idempotencyKey is required"),r("state",typeof e.state=="string"&&Eg.has(e.state),"unknown job state"),r("attempt",typeof e.attempt=="number"&&Number.isInteger(e.attempt)&&e.attempt>=0,"attempt must be an integer >= 0"),r("correlationId",typeof e.correlationId=="string"&&e.correlationId.length>0,"correlationId is required"),r("createdAt",typeof e.createdAt=="number"&&Number.isFinite(e.createdAt),"createdAt must be a number"),r("updatedAt",typeof e.updatedAt=="number"&&Number.isFinite(e.updatedAt),"updatedAt must be a number"),r("timeoutAt",typeof e.timeoutAt=="number"&&Number.isFinite(e.timeoutAt),"timeoutAt must be a number"),r("workerId",dc(e.workerId),"workerId must be a string or null"),r("leaseUntil",cc(e.leaseUntil),"leaseUntil must be a number or null"),r("nextRetryAt",cc(e.nextRetryAt),"nextRetryAt must be a number or null"),r("supersededBy",dc(e.supersededBy),"supersededBy must be a string or null"),r("fallbackApplied",typeof e.fallbackApplied=="boolean","fallbackApplied must be a boolean"),r("causationId",e.causationId===void 0||typeof e.causationId=="string","causationId must be a string when present"),e.resultRef!=null&&!Uo(e.resultRef)&&n.push(pe("invalid-result-ref","resultRef is invalid",`${t}.resultRef`)),kc(e.progress)||n.push(pe("invalid-progress","progress is invalid",`${t}.progress`)),(!Array.isArray(e.failureHistory)||!e.failureHistory.every(Tg))&&n.push(pe("invalid-failure-history","failureHistory entries are invalid",`${t}.failureHistory`)),(!Array.isArray(e.evaluatorHistory)||!e.evaluatorHistory.every(Dg))&&n.push(pe("invalid-evaluator-history","evaluatorHistory entries are invalid",`${t}.evaluatorHistory`)),e.fallback!==void 0&&!Og(e.fallback)&&n.push(pe("invalid-fallback","fallback is invalid",`${t}.fallback`)),n.length?{ok:!1,errors:n}:{ok:!0,job:Oe(e)}}function Ng(e){if(!Jt(e))return{ok:!1,errors:[pe("invalid-snapshot","snapshot must be a JSON object")]};if(e.schemaVersion!==ti)return{ok:!1,errors:[pe("schema-mismatch",`expected schemaVersion ${ti}`,"schemaVersion")]};if(!Array.isArray(e.jobs))return{ok:!1,errors:[pe("invalid-jobs","jobs must be an array","jobs")]};if(!Array.isArray(e.hostAcceptedJobIds)||e.hostAcceptedJobIds.some(r=>typeof r!="string"))return{ok:!1,errors:[pe("invalid-accepted","hostAcceptedJobIds must be string[]","hostAcceptedJobIds")]};let t=[],n=[];for(let r=0;r<e.jobs.length;r++){let i=Mg(e.jobs[r],`jobs[${r}]`);i.ok?t.push(i.job):n.push(...i.errors)}return n.length?{ok:!1,errors:n}:{ok:!0,snapshot:{schemaVersion:ti,jobs:t,hostAcceptedJobIds:[...e.hostAcceptedJobIds]}}}function _g(e){let t=[];return e.id||t.push(pe("invalid-definition","definition id is required")),(!Number.isInteger(e.version)||e.version<1)&&t.push(pe("invalid-definition","definition version must be an integer >= 1",e.id)),(!Number.isInteger(e.retry.maxAttempts)||e.retry.maxAttempts<1)&&t.push(pe("invalid-retry","maxAttempts must be >= 1",e.id)),(!Number.isFinite(e.timeoutMs)||e.timeoutMs<=0)&&t.push(pe("invalid-timeout","timeoutMs must be > 0",e.id)),(!Number.isFinite(e.leaseMs)||e.leaseMs<=0)&&t.push(pe("invalid-lease","leaseMs must be > 0",e.id)),e.fallback?.reasonCode||t.push(pe("invalid-fallback","fallback.reasonCode is required",e.id)),t}function Lg(e){switch(e){case"queued":return jo;case"claimed":return lc;case"awaiting-evaluation":return fc;case"retry-scheduled":return mc;case"ready":return gc;case"applied":return hc;case"failed":return yc;case"canceled":return bc;case"superseded":return vc}}function Vg(e){let t=new Map;for(let c of e.definitions){let f=_g(c);if(f.length)throw new Error(f.map(h=>h.detail).join("; "));t.set(c.id,Oe(c))}let n=e.persistence??Sc(),r=e.now??(()=>Date.now()),i=0,o=e.createId??(()=>`job-${++i}`),s=e.maxCorrectionChars??Ag,a=e.maxFailureHistory??wg,d=new Set(kg),m=!1,u=[],y=new Set,k=e.worker,R=()=>{if(m)throw new Error(Cg)},T=c=>{n.save(c)},b=(c,f,h)=>{u.push(c);let A={jobId:f.jobId,state:f.state,definitionId:f.definitionId,correlationId:f.correlationId};h&&(A.reasonCode=h);let L={type:c,kind:c.includes(".intent.")?"intent":c.includes(".diagnostic.")?"diagnostic":"state",payload:A,correlationId:f.correlationId,causationId:f.causationId,idempotencyKey:`${c}:${f.jobId}:${f.updatedAt}`};e.router?.publish(L)},x=(c,f,h)=>(c.state=f,c.updatedAt=r(),T(c),b(Lg(f),c,h),c),F=c=>c==="applied"||c==="failed"||c==="canceled"||c==="superseded",U=(c,f)=>{let h=c.retry.backoffMs;return h.length?h[Math.min(f-1,h.length-1)]??0:0},O=(c,f)=>f.retryability==="permanent"?"permanent":c.retry.retryableCodes.includes(f.code)||f.retryability==="retryable"?"retryable":f.retryability,$=(c,f)=>(c.fallbackApplied=!0,c.fallback=Oe(f.fallback),f.fallback.resultRef&&(c.resultRef=Oe(f.fallback.resultRef)),x(c,"failed",f.fallback.reasonCode)),C=(c,f,h)=>(c.failureHistory=[...c.failureHistory,h].slice(-a),c.workerId=null,c.leaseUntil=null,c.attempt>=f.retry.maxAttempts||h.retryability==="permanent"?$(c,f):(c.nextRetryAt=r()+U(f,c.attempt),x(c,"retry-scheduled",h.code))),p=(c,f,h)=>{c.workerId=f,c.leaseUntil=r()+h.leaseMs,c.nextRetryAt=null,c.attempt+=1;let A=x(c,"claimed");return k?.start({jobId:A.jobId,workerId:f,definitionId:A.definitionId,request:Oe(A.request),attempt:A.attempt}),A},E={submit(c){R();let f=[];c.idempotencyKey||f.push(pe("missing-idempotency","idempotencyKey is required")),c.correlationId||f.push(pe("missing-correlation","correlationId is required"));let h=t.get(c.definitionId);if(h||f.push(pe("unknown-definition",`unknown definition "${c.definitionId}"`)),f.length||!h)return{ok:!1,errors:f};let A=n.getByIdempotencyKey(c.idempotencyKey);if(A)return{ok:!0,job:A};let L=r(),w={jobId:o(),definitionId:h.id,definitionVersion:h.version,idempotencyKey:c.idempotencyKey,state:"queued",request:Oe(c.request),resultRef:null,progress:{value:0,stage:"queued"},attempt:0,failureHistory:[],evaluatorHistory:[],correlationId:c.correlationId,causationId:c.causationId,workerId:null,leaseUntil:null,createdAt:L,updatedAt:L,timeoutAt:L+h.timeoutMs,nextRetryAt:null,supersededBy:null,fallbackApplied:!1};if(T(w),b(uc,w),b(jo,w),c.supersedeJobId){let B=n.get(c.supersedeJobId);B&&!F(B.state)&&(B.supersededBy=w.jobId,k?.cancel?.(B.jobId),x(B,"superseded","superseded"))}return{ok:!0,job:Oe(w)}},claim(c){if(R(),!c)return{ok:!1,errors:[pe("missing-worker","workerId is required")]};E.tick();let h=n.list().filter(L=>L.state==="queued"||L.state==="retry-scheduled"&&(L.nextRetryAt??0)<=r()).sort((L,w)=>L.createdAt-w.createdAt)[0];if(!h)return{ok:!1,errors:[pe("empty-queue","no claimable jobs")]};let A=t.get(h.definitionId);return A?{ok:!0,job:Oe(p(h,c,A))}:{ok:!1,errors:[pe("unknown-definition",h.definitionId)]}},reportProgress(c,f){R();let h=n.get(c);return h?h.state!=="claimed"?{ok:!1,errors:[pe("invalid-state",`cannot report progress in ${h.state}`)]}:kc(f)?f.value<h.progress.value?{ok:!1,errors:[pe("non-monotonic","progress.value must not decrease")]}:(h.progress=Oe(f),h.updatedAt=r(),T(h),b(pc,h),{ok:!0,job:Oe(h)}):{ok:!1,errors:[pe("invalid-progress","progress value/stage required")]}:{ok:!1,errors:[pe("unknown-job",c)]}},heartbeat(c){R();let f=n.get(c);if(!f)return{ok:!1,errors:[pe("unknown-job",c)]};if(f.state!=="claimed"||!f.workerId)return{ok:!1,errors:[pe("invalid-state","heartbeat requires a claimed job")]};let h=t.get(f.definitionId);return h?(f.leaseUntil=r()+h.leaseMs,f.updatedAt=r(),T(f),{ok:!0,job:Oe(f)}):{ok:!1,errors:[pe("unknown-definition",f.definitionId)]}},complete(c,f){R();let h=n.get(c);if(!h)return{ok:!1,errors:[pe("unknown-job",c)]};if(h.state!=="claimed")return{ok:!1,errors:[pe("invalid-state",`cannot complete in ${h.state}`)]};if(!Uo(f))return{ok:!1,errors:[pe("invalid-result-ref","result must be a reference")]};let A=t.get(h.definitionId);return A&&f.kind!==A.resultKind?{ok:!1,errors:[pe("result-kind",`expected result kind "${A.resultKind}"`)]}:(h.resultRef=Oe(f),h.workerId=null,h.leaseUntil=null,h.progress={value:Math.max(h.progress.value,1),stage:"awaiting-evaluation"},{ok:!0,job:Oe(x(h,"awaiting-evaluation"))})},fail(c,f){R();let h=n.get(c);if(!h)return{ok:!1,errors:[pe("unknown-job",c)]};if(h.state!=="claimed"&&h.state!=="queued")return{ok:!1,errors:[pe("invalid-state",`cannot fail in ${h.state}`)]};let A=t.get(h.definitionId);if(!A)return{ok:!1,errors:[pe("unknown-definition",h.definitionId)]};let L=O(A,f),w={attempt:h.attempt,code:f.code,retryability:L,at:r(),detail:f.detail};return k?.cancel?.(h.jobId),{ok:!0,job:Oe(C(h,A,w))}},evaluate(c,f,h){R();let A=n.get(c);if(!A)return{ok:!1,errors:[pe("unknown-job",c)]};if(A.state!=="awaiting-evaluation")return{ok:!1,errors:[pe("invalid-state","evaluate requires awaiting-evaluation")]};let L=t.get(A.definitionId);if(!L)return{ok:!1,errors:[pe("unknown-definition",A.definitionId)]};if(h!==void 0&&h.length>s)return{ok:!1,errors:[pe("correction-bound",`correction exceeds ${s} chars`)]};if(A.evaluatorHistory=[...A.evaluatorHistory,{decision:f,at:r(),correction:h?.slice(0,s)}],f==="accept")return A.progress={value:1,stage:"ready"},{ok:!0,job:Oe(x(A,"ready"))};let w={attempt:A.attempt,code:f==="revise"?"evaluator-revise":"evaluator-reject",retryability:"retryable",at:r(),detail:h};return{ok:!0,job:Oe(C(A,L,w))}},cancel(c){R();let f=n.get(c);return f?F(f.state)||f.state==="applied"?{ok:!1,errors:[pe("invalid-state",`cannot cancel ${f.state}`)]}:(k?.cancel?.(f.jobId),f.workerId=null,f.leaseUntil=null,{ok:!0,job:Oe(x(f,"canceled","canceled"))}):{ok:!1,errors:[pe("unknown-job",c)]}},recoverStale(){R();let c=[],f=r();for(let h of n.list()){if(h.state!=="claimed"||h.leaseUntil==null||h.leaseUntil>f)continue;let A=t.get(h.definitionId);if(!A)continue;k?.cancel?.(h.jobId);let L={attempt:h.attempt,code:"stale-lease",retryability:"retryable",at:f};c.push(Oe(C(h,A,L)))}return c},tick(){R();let c=[];c.push(...E.recoverStale());let f=r();for(let h of n.list())if(!(F(h.state)||h.state==="ready"||h.state==="applied")&&f>=h.timeoutAt){let A=t.get(h.definitionId);if(!A)continue;let L={attempt:h.attempt,code:"timeout",retryability:"permanent",at:f};k?.cancel?.(h.jobId),c.push(Oe(C(h,A,L)))}return c},accept(c){R();let f=n.get(c);return f?f.state!=="ready"?{ok:!1,errors:[pe("not-ready","host may accept only ready jobs")]}:(y.add(f.jobId),{ok:!0,job:Oe(x(f,"applied"))}):{ok:!1,errors:[pe("unknown-job",c)]}},get(c){return R(),n.get(c)},getByIdempotencyKey(c){return R(),n.getByIdempotencyKey(c)},inspect(){return R(),{destroyed:!1,jobs:n.list(),events:[...u]}},snapshot(){return R(),{schemaVersion:ti,jobs:n.list(),hostAcceptedJobIds:[...y]}},restore(c){R();let f=Ng(c);if(!f.ok)return f;let h=n.list(),A=[...y];try{n.replaceAll(f.snapshot.jobs),y.clear();for(let L of f.snapshot.hostAcceptedJobIds)y.add(L);return{ok:!0,snapshot:Oe(f.snapshot)}}catch{n.replaceAll(h),y.clear();for(let L of A)y.add(L);return{ok:!1,errors:[pe("restore-failed","restore rolled back")]}}},exportTrace(){return R(),{jobs:n.list().map(c=>Wo(c,d)),events:[...u]}},destroy(){m=!0}};return k?.bind({reportProgress:(c,f)=>E.reportProgress(c,f),complete:(c,f)=>E.complete(c,f),fail:(c,f)=>E.fail(c,f),heartbeat:c=>E.heartbeat(c)}),E}var Jn=1,Xo=["room","region","landmark","frontier"],Fg=["local","regional"],$g=["canonical","discoverable","hidden"],Bg=["open","locked","disabled"],Hg=["character","party"],qg=["available","busy","traveling"],Ic="world.graph.state.node-added",Rc="world.graph.state.edge-added",Cc="world.graph.state.discovered",zo="world.graph.state.transit",Yo="world.graph.diagnostic.lifecycle";var Kg=new Set(Xo),Gg=new Set(Fg),Wg=new Set($g),Ac=new Set(Bg),jg=new Set(Hg),wc=new Set(qg),Ug="World graph has been destroyed",Jg=4096;function te(e,t,n){return n?{code:e,detail:t,path:n}:{code:e,detail:t}}function wt(e){return e!==null&&typeof e=="object"&&!Array.isArray(e)}function mt(e){try{return JSON.parse(JSON.stringify(e))}catch{return e}}function Sn(e){return typeof e=="number"&&Number.isFinite(e)}function Qe(e){return typeof e=="string"&&e.length>0}function Qo(e,t,n){if(e!==void 0){if(!wt(e)){n.push(te("invalid-metadata","metadata must be a JSON object",t));return}return mt(e)}}function zg(e,t,n){if(e!==void 0){if(!wt(e)){n.push(te("invalid-requirements","requirements must be a JSON object",t));return}return mt(e)}}function Yg(e,t,n){if(e===void 0)return;if(!wt(e)){n.push(te("invalid-cost","cost must be a JSON object",t));return}let r={};for(let[i,o]of Object.entries(e)){if(!Sn(o)){n.push(te("invalid-cost",`cost.${i} must be finite`,t));continue}r[i]=o}return r}function Pc(e,t){if(!wt(e))return{ok:!1,errors:[te("invalid-node","node must be an object",t)]};let n=[];Qe(e.id)||n.push(te("invalid-id","id is required",`${t}.id`)),(!Number.isInteger(e.version)||e.version<1)&&n.push(te("invalid-version","version must be an integer \u2265 1",`${t}.version`)),Kg.has(e.kind)||n.push(te("invalid-kind","unknown node kind",`${t}.kind`)),Gg.has(e.mapLayer)||n.push(te("invalid-map-layer","unknown mapLayer",`${t}.mapLayer`)),e.frontier!==void 0&&typeof e.frontier!="boolean"&&n.push(te("invalid-frontier","frontier must be boolean",`${t}.frontier`));let r=Qo(e.metadata,`${t}.metadata`,n);if(n.length)return{ok:!1,errors:n};let i={id:e.id,version:e.version,kind:e.kind,mapLayer:e.mapLayer};return e.frontier===!0&&(i.frontier=!0),r&&(i.metadata=r),{ok:!0,node:i}}function xc(e,t){if(!wt(e))return{ok:!1,errors:[te("invalid-edge","edge must be an object",t)]};let n=[];Qe(e.id)||n.push(te("invalid-id","id is required",`${t}.id`)),(!Number.isInteger(e.version)||e.version<1)&&n.push(te("invalid-version","version must be an integer \u2265 1",`${t}.version`)),Qe(e.from)||n.push(te("invalid-from","from is required",`${t}.from`)),Qe(e.to)||n.push(te("invalid-to","to is required",`${t}.to`)),typeof e.directed!="boolean"&&n.push(te("invalid-directed","directed must be boolean",`${t}.directed`)),Qe(e.kind)||n.push(te("invalid-kind","kind is required",`${t}.kind`)),Wg.has(e.visibility)||n.push(te("invalid-visibility","unknown visibility",`${t}.visibility`)),Ac.has(e.access)||n.push(te("invalid-access","unknown access",`${t}.access`));let r=zg(e.requirements,`${t}.requirements`,n),i=Yg(e.cost,`${t}.cost`,n),o=Qo(e.metadata,`${t}.metadata`,n);if(n.length)return{ok:!1,errors:n};let s={id:e.id,version:e.version,from:e.from,to:e.to,directed:e.directed,kind:e.kind,visibility:e.visibility,access:e.access};return r&&(s.requirements=r),i&&(s.cost=i),o&&(s.metadata=o),{ok:!0,edge:s}}function Tc(e,t){if(!wt(e))return{ok:!1,errors:[te("invalid-transit","transit must be an object",t)]};let n=[];return Qe(e.originNodeId)||n.push(te("invalid-origin","originNodeId is required",`${t}.originNodeId`)),Qe(e.destinationNodeId)||n.push(te("invalid-destination","destinationNodeId is required",`${t}.destinationNodeId`)),(!Array.isArray(e.routeEdgeIds)||e.routeEdgeIds.some(r=>!Qe(r)))&&n.push(te("invalid-route","routeEdgeIds must be strings",`${t}.routeEdgeIds`)),Sn(e.departedAt)||n.push(te("invalid-time","departedAt must be finite semantic time",`${t}.departedAt`)),Sn(e.expectedArrival)||n.push(te("invalid-time","expectedArrival must be finite semantic time",`${t}.expectedArrival`)),n.length?{ok:!1,errors:n}:{ok:!0,transit:{originNodeId:e.originNodeId,destinationNodeId:e.destinationNodeId,routeEdgeIds:[...e.routeEdgeIds],departedAt:e.departedAt,expectedArrival:e.expectedArrival}}}function Dc(e,t){if(!wt(e))return{ok:!1,errors:[te("invalid-entity","entity must be an object",t)]};let n=[];Qe(e.id)||n.push(te("invalid-id","id is required",`${t}.id`)),jg.has(e.kind)||n.push(te("invalid-kind","unknown entity kind",`${t}.kind`)),wc.has(e.status)||n.push(te("invalid-status","unknown status",`${t}.status`)),e.locationNodeId!==null&&!Qe(e.locationNodeId)&&n.push(te("invalid-location","locationNodeId must be string or null",`${t}.locationNodeId`));let r=null;if(e.transit!==null&&e.transit!==void 0){let s=Tc(e.transit,`${t}.transit`);s.ok?r=s.transit:n.push(...s.errors)}let i=Qo(e.metadata,`${t}.metadata`,n);if(n.length)return{ok:!1,errors:n};let o={id:e.id,kind:e.kind,status:e.status,locationNodeId:e.locationNodeId??null,transit:r};return i&&(o.metadata=i),{ok:!0,entity:o}}function Xg(e,t){if(!wt(e))return{ok:!1,errors:[te("invalid-discovery","discovery must be an object",t)]};let n=[];return Qe(e.observerId)||n.push(te("invalid-observer","observerId is required",`${t}.observerId`)),(!Array.isArray(e.nodeIds)||e.nodeIds.some(r=>!Qe(r)))&&n.push(te("invalid-node-ids","nodeIds must be strings",`${t}.nodeIds`)),(!Array.isArray(e.edgeIds)||e.edgeIds.some(r=>!Qe(r)))&&n.push(te("invalid-edge-ids","edgeIds must be strings",`${t}.edgeIds`)),n.length?{ok:!1,errors:n}:{ok:!0,discovery:{observerId:e.observerId,nodeIds:[...e.nodeIds],edgeIds:[...e.edgeIds]}}}function Qg(e,t){let n=e;if(typeof e=="string")try{n=JSON.parse(e)}catch{return{ok:!1,errors:[te("invalid-json","snapshot JSON is invalid")]}}if(!wt(n))return{ok:!1,errors:[te("invalid-snapshot","snapshot must be a JSON object")]};let r=n.schemaVersion;if(typeof r=="number"&&r<Jn){let T=n,b=r;for(;b<Jn;){let x=t.find(F=>F.from===b&&F.to===b+1);if(!x)return{ok:!1,errors:[te("unsupported-schema",`no migration from schema ${b}`)]};T=x.migrate(T),b+=1}if(n=T,!wt(n))return{ok:!1,errors:[te("invalid-snapshot","migrated snapshot must be an object")]};r=n.schemaVersion}if(r!==Jn)return{ok:!1,errors:[te("unsupported-schema","unsupported world graph snapshot schema")]};if(!Qe(n.graphId))return{ok:!1,errors:[te("invalid-graph-id","graphId is required","graphId")]};if(!Array.isArray(n.nodes))return{ok:!1,errors:[te("invalid-nodes","nodes must be an array","nodes")]};if(!Array.isArray(n.edges))return{ok:!1,errors:[te("invalid-edges","edges must be an array","edges")]};if(!Array.isArray(n.entities))return{ok:!1,errors:[te("invalid-entities","entities must be an array","entities")]};if(!Array.isArray(n.discovery))return{ok:!1,errors:[te("invalid-discovery","discovery must be an array","discovery")]};let i=[],o=[],s=new Set;n.nodes.forEach((T,b)=>{let x=Pc(T,`nodes[${b}]`);if(!x.ok){i.push(...x.errors);return}if(s.has(x.node.id)){i.push(te("duplicate-id","duplicate node id",`nodes[${b}].id`));return}s.add(x.node.id),o.push(x.node)});let a=[],d=new Set;n.edges.forEach((T,b)=>{let x=xc(T,`edges[${b}]`);if(!x.ok){i.push(...x.errors);return}if(d.has(x.edge.id)){i.push(te("duplicate-id","duplicate edge id",`edges[${b}].id`));return}s.has(x.edge.id)&&i.push(te("id-collision","edge id collides with a node id",`edges[${b}].id`)),d.add(x.edge.id),a.push(x.edge)});let m=[],u=new Set;n.entities.forEach((T,b)=>{let x=Dc(T,`entities[${b}]`);if(!x.ok){i.push(...x.errors);return}if(u.has(x.entity.id)){i.push(te("duplicate-id","duplicate entity id",`entities[${b}].id`));return}u.add(x.entity.id),m.push(x.entity)});let y=[],k=new Set;if(n.discovery.forEach((T,b)=>{let x=Xg(T,`discovery[${b}]`);if(!x.ok){i.push(...x.errors);return}if(k.has(x.discovery.observerId)){i.push(te("duplicate-observer","duplicate observerId",`discovery[${b}].observerId`));return}k.add(x.discovery.observerId),y.push(x.discovery)}),i.length)return{ok:!1,errors:i};let R=ni(o,a,m,y);return R.length?{ok:!1,errors:R}:{ok:!0,snapshot:{schemaVersion:Jn,graphId:n.graphId,nodes:o,edges:a,entities:m,discovery:y}}}function ni(e,t,n,r){let i=new Set(e.map(a=>a.id)),o=new Set(t.map(a=>a.id)),s=[];for(let a of t)i.has(a.from)||s.push(te("missing-node",`edge ${a.id} from unknown node`,`edges.${a.id}.from`)),i.has(a.to)||s.push(te("missing-node",`edge ${a.id} to unknown node`,`edges.${a.id}.to`));for(let a of n)if(a.locationNodeId&&!i.has(a.locationNodeId)&&s.push(te("missing-node",`entity ${a.id} location unknown`,`entities.${a.id}.locationNodeId`)),a.transit){i.has(a.transit.originNodeId)||s.push(te("missing-node","transit origin unknown",`entities.${a.id}.transit.originNodeId`)),i.has(a.transit.destinationNodeId)||s.push(te("missing-node","transit destination unknown",`entities.${a.id}.transit.destinationNodeId`));for(let d of a.transit.routeEdgeIds)o.has(d)||s.push(te("missing-edge",`transit route missing ${d}`,`entities.${a.id}.transit.routeEdgeIds`))}for(let a of r){for(let d of a.nodeIds)i.has(d)||s.push(te("missing-node",`discovery references unknown node ${d}`,`discovery.${a.observerId}`));for(let d of a.edgeIds)o.has(d)||s.push(te("missing-edge",`discovery references unknown edge ${d}`,`discovery.${a.observerId}`))}return s}function Jo(e){return[...e].map(t=>mt(t)).sort((t,n)=>t.id.localeCompare(n.id))}function Ec(e){return[...e].map(t=>mt(t)).sort((t,n)=>t.id.localeCompare(n.id))}function Zg(e){return e.directed?[{from:e.from,to:e.to}]:[{from:e.from,to:e.to},{from:e.to,to:e.from}]}function jn(){return{version:1,fields:{graphId:{type:"string",optional:!0},nodeId:{type:"string",optional:!0},edgeId:{type:"string",optional:!0},observerId:{type:"string",optional:!0},entityId:{type:"string",optional:!0}}}}function Un(e){if(!e.ok)throw new Error(e.errors.map(t=>t.detail).join("; "));return e.contract}function eh(){return[Un(me(Ic,jn())),Un(me(Rc,jn())),Un(me(Cc,jn())),Un(me(zo,jn())),Un(tt(Yo,jn()))]}function th(e={}){let t=e.migrations??[],n=e.maxPathVisits??Jg,r=e.source??"world-graph",i=e.graphId??"world",o=!1,s=new Map,a=new Map,d=new Map,m=new Map,u=[],y=[];function k(){if(o)throw new Error(Ug)}function R(c,f){let h={type:c,payload:f,source:r,kind:c===Yo?"diagnostic":void 0};u.push(h),y.push(c),e.router?.publish(h)}function T(c){return R(Yo,{graphId:i}),{ok:!1,errors:c}}function b(){let c=new Map,f=h=>(c.has(h)||c.set(h,[]),c.get(h));for(let h of s.values())f(h.id);for(let h of a.values())for(let A of Zg(h))f(A.from).push({edge:h,to:A.to});for(let h of c.values())h.sort((A,L)=>A.edge.id.localeCompare(L.edge.id)||A.to.localeCompare(L.to));return c}function x(c,f){let h=Pc(c,`nodes.${c.id??"?"}`);return h.ok?s.get(h.node.id)?(f.push(te("duplicate-id",`node ${h.node.id} already exists`,`nodes.${h.node.id}`)),!1):a.has(h.node.id)?(f.push(te("id-collision","node id collides with an edge id",`nodes.${h.node.id}`)),!1):(s.set(h.node.id,h.node),R(Ic,{graphId:i,nodeId:h.node.id}),!0):(f.push(...h.errors),!1)}function F(c,f){let h=xc(c,`edges.${c.id??"?"}`);return h.ok?a.has(h.edge.id)?(f.push(te("duplicate-id",`edge ${h.edge.id} already exists`,`edges.${h.edge.id}`)),!1):s.has(h.edge.id)?(f.push(te("id-collision","edge id collides with a node id",`edges.${h.edge.id}`)),!1):!s.has(h.edge.from)||!s.has(h.edge.to)?(f.push(te("missing-node",`edge ${h.edge.id} references unknown node`,`edges.${h.edge.id}`)),!1):(a.set(h.edge.id,h.edge),R(Rc,{graphId:i,edgeId:h.edge.id}),!0):(f.push(...h.errors),!1)}function U(c){let f=m.get(c);return f||(f={nodeIds:new Set,edgeIds:new Set},m.set(c,f)),f}function O(c,f){return f.visibility==="canonical"?!0:m.get(c)?.edgeIds.has(f.id)===!0}function $(c,f){if(m.get(c)?.nodeIds.has(f.id))return!0;if(f.kind==="frontier"||f.frontier){for(let h of a.values())if(O(c,h)&&(h.from===f.id||h.to===f.id)){let A=h.from===f.id?h.to:h.from;if(m.get(c)?.nodeIds.has(A))return!0}}return!1}function C(c,f,h,A){let L=new Map;for(let D of s.values())h(D,null)&&L.set(D.id,mt(D));let w=[];for(let D of a.values())!L.has(D.from)||!L.has(D.to)||h(L.get(D.from),D)&&w.push(mt(D));let B=Jo([...L.values()].filter(D=>D.kind==="frontier"||D.frontier===!0)),G=[...d.values()].filter(D=>!!(D.locationNodeId&&L.has(D.locationNodeId)||D.transit&&(L.has(D.transit.originNodeId)||L.has(D.transit.destinationNodeId)))).map(D=>mt(D)).sort((D,l)=>D.id.localeCompare(l.id));return{kind:c,observerId:f,focusNodeId:A,nodes:Jo(L.values()),edges:Ec(w),frontiers:B,entities:G}}function p(c,f,h){let A=new Set;if(!s.has(c))return A;let L=b(),w=[{id:c,dist:0}],B=new Set([c]);for(A.add(c);w.length;){let G=w.shift();if(!(G.dist>=f))for(let D of L.get(G.id)??[]){if(!O(h,D.edge)&&D.edge.visibility!=="canonical"||B.has(D.to))continue;let l=s.get(D.to);l&&(l.mapLayer!=="local"&&l.kind!=="frontier"&&!l.frontier||(B.add(D.to),A.add(D.to),w.push({id:D.to,dist:G.dist+1})))}}return A}function E(c,f,h,A,L){let w=A?.maxVisits??n,B=b(),G=new Map([[c,0]]),D=new Map,l=new Set,v=0;for(;v<w;){let P=null,_=1/0;for(let[N,W]of G)l.has(N)||(W<_||W===_&&(P===null||N.localeCompare(P)<0))&&(P=N,_=W);if(P===null||L!==null&&P===L)break;l.add(P),v+=1;for(let N of B.get(P)??[]){if(!f.canTraverse(N.edge,P,N.to,h))continue;let W=f.cost(N.edge,P,N.to,h);if(!Number.isFinite(W)||W<0)continue;let j=_+W,H=G.get(N.to);(H===void 0||j<H||j===H&&N.edge.id.localeCompare(D.get(N.to)?.edge.id??N.edge.id)<0)&&(G.set(N.to,j),D.set(N.to,{node:P,edge:N.edge,cost:W}))}}return{dist:G,prev:D}}return{addNode(c){k();let f=[];return x(c,f),f.length?T(f):{ok:!0}},addEdge(c){k();let f=[];return F(c,f),f.length?T(f):{ok:!0}},applyPatch(c){k();let f=new Map(s),h=new Map(a),A=u.length,L=y.length,w=[];for(let B of c.nodes??[])x(B,w);for(let B of c.edges??[])F(B,w);if(w.length){s.clear(),a.clear();for(let[B,G]of f)s.set(B,G);for(let[B,G]of h)a.set(B,G);return u.length=A,y.length=L,T(w)}return{ok:!0}},removeNode(c){if(k(),!s.has(c))return T([te("unknown-node",c)]);let f=ni([...s.values()].filter(A=>A.id!==c),[...a.values()].filter(A=>A.from!==c&&A.to!==c),[...d.values()],[...m.entries()].map(([A,L])=>({observerId:A,nodeIds:[...L.nodeIds].filter(w=>w!==c),edgeIds:[...L.edgeIds]}))).filter(A=>A.code!=="missing-node"||!A.detail.includes(c));if(f.length)return T(f);let h=[...a.values()].filter(A=>A.from===c||A.to===c);if(h.length)return T([te("node-in-use",`remove incident edges first (${h[0].id})`)]);for(let A of d.values())if(A.locationNodeId===c||A.transit?.originNodeId===c||A.transit?.destinationNodeId===c)return T([te("node-in-use",`entity ${A.id} still references node`)]);s.delete(c);for(let A of m.values())A.nodeIds.delete(c);return{ok:!0}},removeEdge(c){if(k(),!a.has(c))return T([te("unknown-edge",c)]);for(let f of d.values())if(f.transit?.routeEdgeIds.includes(c))return T([te("edge-in-use",`entity ${f.id} still references edge`)]);a.delete(c);for(let f of m.values())f.edgeIds.delete(c);return{ok:!0}},setEdgeAccess(c,f){k();let h=a.get(c);return h?Ac.has(f)?(a.set(c,{...h,access:f}),{ok:!0}):T([te("invalid-access",f)]):T([te("unknown-edge",c)])},discover(c,f){if(k(),!Qe(c))return T([te("invalid-observer","observerId is required")]);let h=[];for(let L of f.nodeIds??[])s.has(L)||h.push(te("unknown-node",L));for(let L of f.edgeIds??[])a.has(L)||h.push(te("unknown-edge",L));if(h.length)return T(h);let A=U(c);for(let L of f.nodeIds??[])A.nodeIds.add(L);for(let L of f.edgeIds??[])A.edgeIds.add(L);return R(Cc,{graphId:i,observerId:c}),{ok:!0}},upsertEntity(c){k();let f=Dc(c,`entities.${c.id??"?"}`);if(!f.ok)return T(f.errors);let h=ni([...s.values()],[...a.values()],[f.entity],[]);return h.length?T(h):(d.set(f.entity.id,f.entity),{ok:!0})},startTransit(c,f,h="traveling"){k();let A=d.get(c);if(!A)return T([te("unknown-entity",c)]);let L=Tc(f,"transit");if(!L.ok)return T(L.errors);let w={...A,status:h,locationNodeId:null,transit:L.transit},B=ni([...s.values()],[...a.values()],[w],[]);return B.length?T(B):(d.set(c,w),R(zo,{graphId:i,entityId:c}),{ok:!0})},completeTransit(c,f){k();let h=d.get(c);return h?h.transit?Sn(f)?(d.set(c,{...h,status:"available",locationNodeId:h.transit.destinationNodeId,transit:null}),R(zo,{graphId:i,entityId:c,semanticTime:f}),{ok:!0}):T([te("invalid-time","semanticTime must be finite")]):T([te("not-traveling",c)]):T([te("unknown-entity",c)])},setEntityStatus(c,f){k();let h=d.get(c);return h?wc.has(f)?(d.set(c,{...h,status:f}),{ok:!0}):T([te("invalid-status",f)]):T([te("unknown-entity",c)])},getNode(c){k();let f=s.get(c);return f?mt(f):void 0},getEdge(c){k();let f=a.get(c);return f?mt(f):void 0},getEntity(c){k();let f=d.get(c);return f?mt(f):void 0},projectCanonical(){return k(),C("canonical",void 0,()=>!0)},projectKnown(c){return k(),C("known",c,(f,h)=>h?O(c,h):$(c,f))},projectLocal(c,f,h=8){k();let A=p(f,h,c);return C("local",c,(L,w)=>A.has(L.id)?w?O(c,w)||w.visibility==="canonical":$(c,L)||A.has(L.id):!1,f)},projectRegional(c){return k(),C("regional",c,(f,h)=>f.mapLayer!=="regional"&&f.kind!=="frontier"&&!f.frontier?!1:h?O(c,h):$(c,f))},findPath(c,f,h,A,L){if(k(),!s.has(c))return{ok:!1,errors:[te("unknown-node",c)]};if(!s.has(f))return{ok:!1,errors:[te("unknown-node",f)]};if(!Sn(A.semanticTime))return{ok:!1,errors:[te("invalid-time","semanticTime must be finite")]};if(c===f)return{ok:!0,path:{from:c,to:f,nodeIds:[c],steps:[],totalCost:0}};let{dist:w,prev:B}=E(c,h,A,L,f);if(!w.has(f))return{ok:!1,errors:[te("unreachable",f)]};let G=[],D=[f],l=f;for(;l!==c;){let v=B.get(l);if(!v)return{ok:!1,errors:[te("unreachable",f)]};G.push({edgeId:v.edge.id,from:v.node,to:l,cost:v.cost}),l=v.node,D.push(l)}return G.reverse(),D.reverse(),{ok:!0,path:{from:c,to:f,nodeIds:D,steps:G,totalCost:w.get(f)}}},reachable(c,f,h,A){if(k(),!s.has(c)||!Sn(h.semanticTime))return{nodeIds:[]};let{dist:L}=E(c,f,h,A,null);return{nodeIds:[...L.keys()].sort((w,B)=>w.localeCompare(B))}},inspect(){return k(),{destroyed:!1,graphId:i,nodeCount:s.size,edgeCount:a.size,entityCount:d.size,observerCount:m.size,events:[...y]}},snapshot(){return k(),{schemaVersion:Jn,graphId:i,nodes:Jo(s.values()),edges:Ec(a.values()),entities:[...d.values()].map(c=>mt(c)).sort((c,f)=>c.id.localeCompare(f.id)),discovery:[...m.entries()].map(([c,f])=>({observerId:c,nodeIds:[...f.nodeIds].sort((h,A)=>h.localeCompare(A)),edgeIds:[...f.edgeIds].sort((h,A)=>h.localeCompare(A))})).sort((c,f)=>c.observerId.localeCompare(f.observerId))}},restore(c){k();let f=Qg(c,t);if(!f.ok)return f;let h={graphId:i,nodes:new Map(s),edges:new Map(a),entities:new Map(d),discovery:new Map([...m.entries()].map(([A,L])=>[A,{nodeIds:new Set(L.nodeIds),edgeIds:new Set(L.edgeIds)}]))};try{i=f.snapshot.graphId,s.clear(),a.clear(),d.clear(),m.clear();for(let A of f.snapshot.nodes)s.set(A.id,A);for(let A of f.snapshot.edges)a.set(A.id,A);for(let A of f.snapshot.entities)d.set(A.id,A);for(let A of f.snapshot.discovery)m.set(A.observerId,{nodeIds:new Set(A.nodeIds),edgeIds:new Set(A.edgeIds)});return{ok:!0,snapshot:mt(f.snapshot)}}catch{i=h.graphId,s.clear(),a.clear(),d.clear(),m.clear();for(let[A,L]of h.nodes)s.set(A,L);for(let[A,L]of h.edges)a.set(A,L);for(let[A,L]of h.entities)d.set(A,L);for(let[A,L]of h.discovery)m.set(A,L);return{ok:!1,errors:[te("restore-failed","restore rolled back")]}}},events(){return k(),[...u]},destroy(){o=!0,s.clear(),a.clear(),d.clear(),m.clear()}}}var si=1,di=1,nh=["add","replace","revise","remove","tombstone","link","unlink"],rh=["base-revision","entity-revision","entity-hash","identity-required","identity-absent","capability","schema"],is="world.patch.state.accepted",Lc="world.patch.state.rejected",Vc="world.patch.state.superseded",ai="world.patch.diagnostic.lifecycle";var ih=["invalid-schema","unknown-field","unknown-op","missing-field","missing-ref","referential-integrity","stale-base","precondition-failed","asset-unavailable","content-unavailable","binding-unavailable","cycle","over-limit","idempotency-conflict","superseded","invalid-snapshot","invalid-version","destroyed","domain","capability-denied","schema-mismatch","identity-required","identity-absent","entity-revision","entity-hash","duplicate-id","graph-apply-failed","publish-failed"],oh=Ht,Oc=new Set(nh),sh=new Set(rh),Qv=new Set(ih),es=new Set(Xo),ts=new Set(["exit","edge","graph-edge"]),ah="World patch applier has been destroyed",dh=new Set(["patchId","schemaVersion","baseRevision","idempotencyKey","preconditions","operations","provenance","supersedes"]),ch=new Set(["op","kind","id","value","from","to","order","refs"]),uh=new Set(["jobId","producer","contentRevisions"]),lh={"base-revision":new Set(["type","revision"]),"entity-revision":new Set(["type","kind","id","revision"]),"entity-hash":new Set(["type","kind","id","hash"]),"identity-required":new Set(["type","kind","id"]),"identity-absent":new Set(["type","kind","id"]),capability:new Set(["type","name"]),schema:new Set(["type","schemaVersion"])},ph=256,fh=32,mh=4096,gh=262144;function ee(e,t,n,r){let i=n?{code:e,detail:t,path:n}:{code:e,detail:t};return r?.expectedRevision!==void 0&&(i.expectedRevision=r.expectedRevision),r?.actualRevision!==void 0&&(i.actualRevision=r.actualRevision),i}function Be(e){return e!==null&&typeof e=="object"&&!Array.isArray(e)}function Ae(e){try{return JSON.parse(JSON.stringify(e))}catch{return e}}function ge(e){return typeof e=="string"&&e.length>0}function it(e){return typeof e=="number"&&Number.isInteger(e)&&Number.isFinite(e)}function zn(e,t,n,r){for(let i of Object.keys(e))t.has(i)||r.push(ee("unknown-field",`unknown field "${i}"`,n?`${n}.${i}`:i))}function ns(e){if(e===null||typeof e!="object")return e;if(Array.isArray(e))return e.map(ns);let t=e,n={};for(let r of Object.keys(t).sort())n[r]=ns(t[r]);return n}function Mc(e){let t=JSON.stringify(ns(e)??null),n=2166136261;for(let r=0;r<t.length;r++)n^=t.charCodeAt(r),n=Math.imul(n,16777619);return(n>>>0).toString(16).padStart(8,"0")}function rs(e,t){if(e==null)return e;if(Array.isArray(e))return e.map(i=>rs(i,t));if(typeof e!="object")return e;let n=e,r={};for(let[i,o]of Object.entries(n))r[i]=t.has(i)?ht:rs(o,t);return r}function hh(){return{revision:0,entities:[],links:[],accepted:[]}}function Fc(e){return[...e].map(t=>Ae(t)).sort((t,n)=>{let r=t.kind.localeCompare(n.kind);return r!==0?r:t.id.localeCompare(n.id)})}function $c(e){return[...e].map(t=>Ae(t)).sort((t,n)=>t.id.localeCompare(n.id))}function yh(e){return[...e].map(t=>Ae(t)).sort((t,n)=>t.revision!==n.revision?t.revision-n.revision:t.patchId.localeCompare(n.patchId))}function ci(e){return{revision:e.revision,entities:Fc(e.entities),links:$c(e.links),accepted:yh(e.accepted)}}function ri(e,t){return e.length<=t?e:[...e.slice(0,t),ee("over-limit",`truncated ${e.length-t} additional diagnostics`)]}function Bc(e,t){let n=e.order??0,r=t.order??0;return n!==r?n-r:e.op!==t.op?e.op.localeCompare(t.op):e.kind!==t.kind?e.kind.localeCompare(t.kind):e.id.localeCompare(t.id)}function ii(){return{version:1,fields:{patchId:{type:"string"},oldRevision:{type:"number",optional:!0},newRevision:{type:"number",optional:!0},revision:{type:"number",optional:!0},producer:{type:"string",optional:!0},jobId:{type:"string",optional:!0},contentRevisions:{type:"array",optional:!0},reasonCode:{type:"string",optional:!0},supersededBy:{type:"string",optional:!0},changedIdentities:{type:"array",optional:!0}}}}function oi(e){if(!e.ok)throw new Error(e.errors.map(t=>t.detail).join("; "));return e.contract}function bh(){return[oi(me(is,ii())),oi(me(Lc,ii())),oi(me(Vc,ii())),oi(tt(ai,ii()))]}function Hc(){let e=hh();return{current(){return Ae(e)},begin(){let t=Ae(e),n=null;return{applyWorldRevision(r){n=ci(r)},commit(){n&&(e=n),n=null},rollback(){e=Ae(t),n=null}}}}}function qc(e,t,n){if(e===void 0)return;if(!Be(e)){n.push(ee("invalid-schema","refs must be an object",t));return}zn(e,new Set(["contentId","contentRevision","binding","asset","identity"]),t,n);let r={};for(let i of["contentId","contentRevision","binding","asset","identity"]){let o=e[i];if(o!==void 0){if(!ge(o)){n.push(ee("invalid-schema",`refs.${i} must be a non-empty string`,`${t}.${i}`));continue}r[i]=o}}return r}function vh(e,t,n){if(!Be(e)){n.push(ee("invalid-schema","operation must be an object",t));return}zn(e,ch,t,n),(!ge(e.op)||!Oc.has(e.op))&&n.push(ee("unknown-op",`unknown op "${String(e.op)}"`,`${t}.op`)),ge(e.kind)||n.push(ee("missing-field","kind is required",`${t}.kind`));let r=e.id;ge(r)||((e.op==="link"||e.op==="unlink")&&ge(e.from)&&ge(e.to)?r=`${e.kind??"link"}:${e.from}:${e.to}`:n.push(ee("missing-field","id is required",`${t}.id`))),e.order!==void 0&&!it(e.order)&&n.push(ee("invalid-schema","order must be an integer",`${t}.order`)),e.from!==void 0&&!ge(e.from)&&n.push(ee("invalid-schema","from must be a non-empty string",`${t}.from`)),e.to!==void 0&&!ge(e.to)&&n.push(ee("invalid-schema","to must be a non-empty string",`${t}.to`));let i=qc(e.refs,`${t}.refs`,n);if(!ge(e.op)||!Oc.has(e.op)||!ge(e.kind)||!ge(r))return;(e.op==="link"||e.op==="unlink")&&(!ge(e.from)||!ge(e.to))&&n.push(ee("missing-field","link/unlink require from and to",t));let o={op:e.op,kind:e.kind,id:r};return it(e.order)&&(o.order=e.order),e.value!==void 0&&(o.value=Ae(e.value)),ge(e.from)&&(o.from=e.from),ge(e.to)&&(o.to=e.to),i&&Object.keys(i).length&&(o.refs=i),o}function Sh(e,t,n){if(!Be(e)){n.push(ee("invalid-schema","precondition must be an object",t));return}if(!ge(e.type)||!sh.has(e.type)){n.push(ee("invalid-schema",`unknown precondition type "${String(e.type)}"`,`${t}.type`));return}let r=e.type;switch(zn(e,lh[r],t,n),r){case"base-revision":if(!it(e.revision)||e.revision<0){n.push(ee("invalid-schema","revision must be an integer \u2265 0",`${t}.revision`));return}return{type:r,revision:e.revision};case"entity-revision":if(!ge(e.kind)||!ge(e.id)||!it(e.revision)||e.revision<1){n.push(ee("invalid-schema","kind, id, and revision \u2265 1 are required",t));return}return{type:r,kind:e.kind,id:e.id,revision:e.revision};case"entity-hash":if(!ge(e.kind)||!ge(e.id)||!ge(e.hash)){n.push(ee("invalid-schema","kind, id, and hash are required",t));return}return{type:r,kind:e.kind,id:e.id,hash:e.hash};case"identity-required":case"identity-absent":if(!ge(e.kind)||!ge(e.id)){n.push(ee("invalid-schema","kind and id are required",t));return}return{type:r,kind:e.kind,id:e.id};case"capability":if(!ge(e.name)){n.push(ee("invalid-schema","capability name is required",`${t}.name`));return}return{type:r,name:e.name};case"schema":if(!it(e.schemaVersion)||e.schemaVersion<1){n.push(ee("invalid-schema","schemaVersion must be an integer \u2265 1",`${t}.schemaVersion`));return}return{type:r,schemaVersion:e.schemaVersion}}}function Kc(e,t,n){if(!Be(e)){n.push(ee("invalid-schema","provenance is required",t));return}if(zn(e,uh,t,n),!ge(e.producer)){n.push(ee("missing-field","producer is required",`${t}.producer`));return}let r={producer:e.producer};return e.jobId!==void 0&&(ge(e.jobId)?r.jobId=e.jobId:n.push(ee("invalid-schema","jobId must be a non-empty string",`${t}.jobId`))),e.contentRevisions!==void 0&&(!Array.isArray(e.contentRevisions)||e.contentRevisions.some(i=>!ge(i))?n.push(ee("invalid-schema","contentRevisions must be string[]",`${t}.contentRevisions`)):r.contentRevisions=[...e.contentRevisions]),r}function kh(e,t){let n=[],r="";try{r=JSON.stringify(e)??""}catch{return{errors:[ee("invalid-schema","patch is not JSON-serializable")]}}if(r.length>t.maxBytes&&n.push(ee("over-limit",`patch exceeds ${t.maxBytes} bytes`)),!Be(e))return{errors:[ee("invalid-schema","patch must be an object"),...n]};zn(e,dh,"",n),ge(e.patchId)||n.push(ee("missing-field","patchId is required","patchId")),e.schemaVersion!==si&&n.push(ee("schema-mismatch",`schemaVersion must be ${si}`,"schemaVersion")),(!it(e.baseRevision)||e.baseRevision<0)&&n.push(ee("invalid-schema","baseRevision must be an integer \u2265 0","baseRevision")),ge(e.idempotencyKey)||n.push(ee("missing-field","idempotencyKey is required","idempotencyKey")),e.supersedes!==void 0&&!ge(e.supersedes)&&n.push(ee("invalid-schema","supersedes must be a non-empty string","supersedes"));let i=Kc(e.provenance,"provenance",n);Array.isArray(e.operations)?e.operations.length>t.maxOperations&&n.push(ee("over-limit",`operations exceed ${t.maxOperations}`,"operations")):n.push(ee("invalid-schema","operations must be an array","operations"));let o=[];if(Array.isArray(e.operations))for(let d=0;d<e.operations.length;d++){let m=vh(e.operations[d],`operations[${d}]`,n);m&&o.push(m)}let s=[];if(e.preconditions!==void 0)if(!Array.isArray(e.preconditions))n.push(ee("invalid-schema","preconditions must be an array","preconditions"));else for(let d=0;d<e.preconditions.length;d++){let m=Sh(e.preconditions[d],`preconditions[${d}]`,n);m&&s.push(m)}if(n.length)return{errors:n};let a={patchId:e.patchId,schemaVersion:si,baseRevision:e.baseRevision,idempotencyKey:e.idempotencyKey,operations:o,provenance:i};return s.length&&(a.preconditions=s),ge(e.supersedes)&&(a.supersedes=e.supersedes),{patch:a,errors:n}}function Eh(e){let t=new Map;for(let r of e.entities)t.set(r.id,Ae(r));let n=new Map;for(let r of e.links)n.set(r.id,Ae(r));return{revision:e.revision,entities:t,links:n,accepted:e.accepted.map(r=>Ae(r))}}function kn(e,t,n){let r=e.get(t);if(r&&!(n&&r.kind!==n))return r}function Ih(e,t,n){let r=Eh(e),i=[],o=[],s=[...t].sort(Bc),a=(m,u)=>{let y={kind:m.kind,id:m.id,revision:u?u.revision+1:1,hash:Mc(m.value??null),value:m.value===void 0?null:Ae(m.value),tombstoned:!1};m.refs&&(y.refs=Ae(m.refs)),r.entities.set(m.id,y),i.push({op:m.op,kind:m.kind,id:m.id})},d=m=>{!m.from||!m.to||r.links.set(m.id,{id:m.id,kind:m.kind,from:m.from,to:m.to,...m.value!==void 0?{value:Ae(m.value)}:{}})};for(let m=0;m<s.length;m++){let u=s[m],y=`operations[${m}]`,k=r.entities.get(u.id);switch(u.op){case"add":if(k&&!k.tombstoned){o.push(ee("duplicate-id",`identity "${u.id}" already exists`,y));break}a(u),u.from&&u.to&&d(u);break;case"replace":case"revise":if(!k||k.tombstoned){o.push(ee("missing-ref",`identity "${u.id}" is absent`,y));break}if(k.kind!==u.kind){o.push(ee("missing-ref",`identity "${u.id}" is kind "${k.kind}"`,y));break}a(u,k),u.from&&u.to&&d(u);break;case"remove":if(!k){o.push(ee("missing-ref",`identity "${u.id}" is absent`,y));break}r.entities.delete(u.id),r.links.delete(u.id);for(let[R,T]of[...r.links])(T.from===u.id||T.to===u.id)&&r.links.delete(R);i.push({op:u.op,kind:u.kind,id:u.id});break;case"tombstone":if(!k){o.push(ee("missing-ref",`identity "${u.id}" is absent`,y));break}k.tombstoned=!0,k.revision+=1,k.hash=Mc(null),k.value=null,r.links.delete(u.id);for(let[R,T]of[...r.links])(T.from===u.id||T.to===u.id)&&r.links.delete(R);i.push({op:u.op,kind:u.kind,id:u.id});break;case"link":if(k&&k.kind!==u.kind&&!k.tombstoned){o.push(ee("duplicate-id",`identity "${u.id}" already exists`,y));break}a(u,k&&!k.tombstoned?k:void 0),d(u);break;case"unlink":if(!r.links.has(u.id)&&!k){o.push(ee("missing-ref",`link "${u.id}" is absent`,y));break}r.links.delete(u.id),k&&(k.tombstoned=!0,k.revision+=1),i.push({op:u.op,kind:u.kind,id:u.id});break}}r.entities.size>n.maxEntities&&o.push(ee("over-limit",`entities exceed ${n.maxEntities}`));for(let m of r.links.values()){let u=r.entities.get(m.from),y=r.entities.get(m.to);(!u||u.tombstoned)&&o.push(ee("referential-integrity",`link "${m.id}" from "${m.from}" is absent`,`links.${m.id}.from`)),(!y||y.tombstoned)&&o.push(ee("referential-integrity",`link "${m.id}" to "${m.to}" is absent`,`links.${m.id}.to`))}return{world:r,changed:i,errors:o}}function Rh(e,t,n,r){let i=[];e.baseRevision!==t.revision&&i.push(ee("stale-base",`baseRevision ${e.baseRevision} is stale; current revision is ${t.revision}`,"baseRevision",{expectedRevision:t.revision,actualRevision:e.baseRevision}));for(let o=0;o<(e.preconditions??[]).length;o++){let s=e.preconditions[o],a=`preconditions[${o}]`;switch(s.type){case"base-revision":s.revision!==t.revision&&i.push(ee("stale-base",`expected base revision ${s.revision}, current is ${t.revision}`,a,{expectedRevision:t.revision,actualRevision:s.revision}));break;case"entity-revision":{let d=kn(n,s.id,s.kind);d?d.revision!==s.revision&&i.push(ee("entity-revision",`identity "${s.id}" revision is ${d.revision}, expected ${s.revision}`,a)):i.push(ee("identity-required",`identity "${s.id}" is absent`,a));break}case"entity-hash":{let d=kn(n,s.id,s.kind);d?d.hash!==s.hash&&i.push(ee("entity-hash",`identity "${s.id}" hash is ${d.hash}, expected ${s.hash}`,a)):i.push(ee("identity-required",`identity "${s.id}" is absent`,a));break}case"identity-required":(!kn(n,s.id,s.kind)||kn(n,s.id,s.kind)?.tombstoned)&&i.push(ee("identity-required",`identity "${s.id}" is required`,a));break;case"identity-absent":kn(n,s.id,s.kind)&&!kn(n,s.id,s.kind)?.tombstoned&&i.push(ee("identity-absent",`identity "${s.id}" must be absent`,a));break;case"capability":r.has(s.name)||i.push(ee("capability-denied",`capability "${s.name}" is not granted`,a));break;case"schema":s.schemaVersion!==si&&i.push(ee("schema-mismatch",`schema requirement ${s.schemaVersion} is unsupported`,a));break}}return i}function Ch(e){let t=new Map;for(let o of e){let s=t.get(o.from)??[];s.push(o.to),t.set(o.from,s),t.has(o.to)||t.set(o.to,t.get(o.to)??[])}let n=new Set,r=new Set,i=o=>{if(n.has(o))return!0;if(r.has(o))return!1;n.add(o);for(let s of t.get(o)??[])if(i(s))return!0;return n.delete(o),r.add(o),!1};for(let o of[...t.keys()].sort())if(i(o))return!0;return!1}function Nc(e,t,n){return e?e.hasRevision?.(t??"",n)?!0:(e.available??[]).some(r=>r.revision===n&&(t===void 0||!r.contentId||r.contentId===t)):!1}function Ah(e,t,n,r,i,o){let s=[],a=i?.listedIds?new Set(i.listedIds):void 0,d=o?.availableIds?new Set(o.availableIds):void 0,m=new Set(n.entities.filter(u=>!u.tombstoned).map(u=>u.id));for(let u of t)m.add(u.id);for(let u of e.provenance.contentRevisions??[])r&&!Nc(r,void 0,u)&&s.push(ee("content-unavailable",`content revision "${u}" is not available`,"provenance.contentRevisions"));for(let u=0;u<t.length;u++){let y=t[u],k=`operations[${u}]`,R=y.refs?.contentRevision,T=y.refs?.contentId;R&&r&&!Nc(r,T,R)&&s.push(ee("content-unavailable",`content revision "${R}" is not available`,`${k}.refs`));let b=y.refs?.binding??(y.kind==="presentation-binding"?y.id:void 0);b&&a&&!a.has(b)&&s.push(ee("binding-unavailable",`binding "${b}" is not listed`,`${k}`));let x=y.refs?.asset??(y.kind==="asset"?y.id:void 0);x&&d&&!d.has(x)&&s.push(ee("asset-unavailable",`asset "${x}" is not available`,`${k}`));let F=y.refs?.identity;F&&!m.has(F)&&s.push(ee("missing-ref",`ref identity "${F}" is absent`,`${k}.refs`))}return s}function _c(e){if(!es.has(e.kind))return;let t=Be(e.value)?e.value:{},n={id:e.id,version:it(t.version)&&t.version>=1?t.version:1,kind:ge(t.kind)&&es.has(t.kind)?t.kind:e.kind,mapLayer:t.mapLayer==="regional"?"regional":"local"};return t.frontier===!0&&(n.frontier=!0),Be(t.metadata)&&(n.metadata=Ae(t.metadata)),n}function Zo(e){if(!ts.has(e.kind)||!e.from||!e.to)return;let t=Be(e.value)?e.value:{},n=t.visibility==="canonical"||t.visibility==="hidden"?t.visibility:"discoverable",r=t.access==="locked"||t.access==="disabled"?t.access:"open",i={id:e.id,version:it(t.version)&&t.version>=1?t.version:1,from:e.from,to:e.to,directed:t.directed===!0,kind:ge(t.kind)?t.kind:"door",visibility:n,access:r};if(Be(t.requirements)&&(i.requirements=Ae(t.requirements)),Be(t.cost)){let o={};for(let[s,a]of Object.entries(t.cost))typeof a=="number"&&Number.isFinite(a)&&(o[s]=a);Object.keys(o).length&&(i.cost=o)}return Be(t.metadata)&&(i.metadata=Ae(t.metadata)),i}function wh(e,t){let n=e.snapshot(),r=new Map(n.nodes.map(d=>[d.id,Ae(d)])),i=new Map(n.edges.map(d=>[d.id,Ae(d)])),o=[...t].sort(Bc),s=d=>{r.delete(d);for(let[m,u]of[...i])(u.from===d||u.to===d)&&i.delete(m)};for(let d of o)switch(d.op){case"add":{let m=_c(d);m&&!r.has(m.id)&&r.set(m.id,m);let u=Zo(d);u&&!i.has(u.id)&&i.set(u.id,u);break}case"replace":case"revise":{let m=_c(d);m&&r.set(m.id,m);let u=Zo(d);u&&i.set(u.id,u);break}case"link":{let m=Zo(d);m&&i.set(m.id,m);break}case"remove":case"tombstone":es.has(d.kind)&&s(d.id),ts.has(d.kind)&&i.delete(d.id);break;case"unlink":ts.has(d.kind)&&i.delete(d.id);break}let a=e.restore({...n,nodes:[...r.values()],edges:[...i.values()]});return a.ok?[]:a.errors.map(d=>ee("graph-apply-failed",d.detail,d.path))}function Ph(e,t){let n=[];if(!Be(e))return{errors:[ee("invalid-snapshot","world must be an object",t)]};if((!it(e.revision)||e.revision<0)&&n.push(ee("invalid-snapshot","revision must be an integer \u2265 0",`${t}.revision`)),!Array.isArray(e.entities)||!Array.isArray(e.links)||!Array.isArray(e.accepted))return n.push(ee("invalid-snapshot","entities, links, and accepted must be arrays",t)),{errors:n};let r=[];for(let s=0;s<e.entities.length;s++){let a=e.entities[s],d=`${t}.entities[${s}]`;if(!Be(a)){n.push(ee("invalid-snapshot","entity must be an object",d));continue}if(!ge(a.kind)||!ge(a.id)||!it(a.revision)||a.revision<1){n.push(ee("invalid-snapshot","kind, id, and revision are required",d));continue}if(!ge(a.hash)||typeof a.tombstoned!="boolean"){n.push(ee("invalid-snapshot","hash and tombstoned are required",d));continue}let m={kind:a.kind,id:a.id,revision:a.revision,hash:a.hash,value:a.value??null,tombstoned:a.tombstoned};if(a.refs!==void 0){let u=qc(a.refs,`${d}.refs`,n);u&&(m.refs=u)}r.push(m)}let i=[];for(let s=0;s<e.links.length;s++){let a=e.links[s],d=`${t}.links[${s}]`;if(!Be(a)||!ge(a.id)||!ge(a.kind)||!ge(a.from)||!ge(a.to)){n.push(ee("invalid-snapshot","link id, kind, from, and to are required",d));continue}i.push({id:a.id,kind:a.kind,from:a.from,to:a.to,...a.value!==void 0?{value:a.value}:{}})}let o=[];for(let s=0;s<e.accepted.length;s++){let a=e.accepted[s],d=`${t}.accepted[${s}]`;if(!Be(a)||!ge(a.patchId)||!ge(a.idempotencyKey)||!it(a.revision)||a.revision<1){n.push(ee("invalid-snapshot","accepted patch identity is invalid",d));continue}let m=Kc(a.provenance,`${d}.provenance`,n);if(!m)continue;let u={patchId:a.patchId,idempotencyKey:a.idempotencyKey,revision:a.revision,provenance:m};ge(a.supersededBy)&&(u.supersededBy=a.supersededBy),o.push(u)}return n.length?{errors:n}:{errors:[],world:ci({revision:e.revision,entities:r,links:i,accepted:o})}}function xh(e,t,n){if(!Be(e)){n.push(ee("invalid-snapshot","audit record must be an object",t));return}if(e.outcome!=="accepted"&&e.outcome!=="rejected"&&e.outcome!=="superseded"){n.push(ee("invalid-snapshot","audit outcome is invalid",`${t}.outcome`));return}if(!ge(e.patchId)||!ge(e.idempotencyKey)||!it(e.at)){n.push(ee("invalid-snapshot","audit identity is invalid",t));return}if(!it(e.oldRevision)||!it(e.newRevision)||!Array.isArray(e.reasonCodes)){n.push(ee("invalid-snapshot","audit revisions are invalid",t));return}return{outcome:e.outcome,patchId:e.patchId,idempotencyKey:e.idempotencyKey,at:e.at,oldRevision:e.oldRevision,newRevision:e.newRevision,reasonCodes:e.reasonCodes.filter(r=>typeof r=="string"),changedIdentities:Array.isArray(e.changedIdentities)?e.changedIdentities:[],provenance:Be(e.provenance)?e.provenance:{producer:"unknown"},patch:e.patch??null}}function Th(e){if(!Be(e))return{ok:!1,errors:[ee("invalid-snapshot","snapshot must be an object")]};if(e.schemaVersion!==di)return{ok:!1,errors:[ee("invalid-version","unknown snapshot schema version","schemaVersion")]};let t=Ph(e.world,"world");if(!t.world)return{ok:!1,errors:t.errors};let n=[...t.errors??[]];Array.isArray(e.audit)||n.push(ee("invalid-snapshot","audit must be an array","audit"));let r=[];if(Array.isArray(e.audit))for(let o=0;o<e.audit.length;o++){let s=xh(e.audit[o],`audit[${o}]`,n);s&&r.push(s)}if(n.length)return{ok:!1,errors:n};let i={schemaVersion:di,world:t.world,audit:r};return e.graph!==void 0&&(i.graph=Ae(e.graph)),{ok:!0,snapshot:i}}function Dh(e={}){let t=e.persistence??Hc(),n=e.now??(()=>Date.now()),r=e.source??"world-patch",i={maxOperations:e.limits?.maxOperations??ph,maxDiagnostics:e.limits?.maxDiagnostics??fh,maxEntities:e.limits?.maxEntities??mh,maxBytes:e.limits?.maxBytes??gh},o=new Set([...oh,...e.redact??[]]),s=new Set(e.capabilities??[]),a=e.graphPolicy??{},d=!1,m=[],u=[],y=[],k=null;function R(){if(d)throw new Error(ah)}function T(){let p=t.current();return{destroyed:d,revision:p.revision,entities:Fc(p.entities),links:$c(p.links),acceptedPatchIds:p.accepted.map(E=>E.patchId),events:[...y],lastRejection:k?Ae(k):null}}function b(p,E){let c={type:p,payload:E,source:r,kind:p===ai?"diagnostic":"state"};u.push(c),y.push(p),e.onEvent?.(c),e.router?.publish(c)}function x(p){m.push(p)}function F(p){let E=kh(p,i);if(!E.patch)return{ok:!1,errors:ri(E.errors,i.maxDiagnostics)};let c=E.patch,f=t.current(),h=f.accepted.find(_=>_.patchId===c.patchId);if(h&&!h.supersededBy)return{ok:!0,patch:c,next:Ae(f),changed:[],idempotent:!0};if(h?.supersededBy)return{ok:!1,patch:c,errors:[ee("superseded",`patch "${c.patchId}" was superseded by "${h.supersededBy}"`)]};let A=f.accepted.find(_=>_.idempotencyKey===c.idempotencyKey&&!_.supersededBy);if(A&&A.patchId!==c.patchId)return{ok:!1,patch:c,errors:[ee("idempotency-conflict",`idempotencyKey already used by patch "${A.patchId}"`,"idempotencyKey")]};if(c.supersedes&&!f.accepted.find(N=>N.patchId===c.supersedes))return{ok:!1,patch:c,errors:[ee("missing-ref",`superseded patch "${c.supersedes}" is unknown`,"supersedes")]};let L=new Map(f.entities.map(_=>[_.id,_])),w=Rh(c,f,L,s),B=Ih(f,c.operations,i),G=Ah(c,c.operations,f,e.content,e.bindings,e.assets),D=[...w,...B.errors,...G];if(!B.world)return{ok:!1,patch:c,errors:ri(D,i.maxDiagnostics)};let l=ci({revision:f.revision+1,entities:B.world.entities.values(),links:B.world.links.values(),accepted:[...B.world.accepted.map(_=>c.supersedes&&_.patchId===c.supersedes?{..._,supersededBy:c.patchId}:_),{patchId:c.patchId,idempotencyKey:c.idempotencyKey,revision:f.revision+1,provenance:Ae(c.provenance)}]});(a.detectCycle?.(l)??(!a.allowCycles&&Ch(l.links)))&&D.push(ee("cycle","patch would introduce a link cycle"));for(let _ of e.domainValidators??[])D.push(..._({patch:c,current:f,preview:l}).map(N=>N.code?N:ee("domain",N.detail,N.path)));if(D.length)return{ok:!1,patch:c,errors:ri(D,i.maxDiagnostics)};let P=c.supersedes?f.accepted.find(_=>_.patchId===c.supersedes):void 0;return{ok:!0,patch:c,next:l,changed:B.changed,supersede:P}}function U(p,E,c){let f=ri(p,i.maxDiagnostics);k=f;let h=t.current(),A=f[0]?.code??"invalid-schema";return E?(x({outcome:"rejected",patchId:E.patchId,idempotencyKey:E.idempotencyKey,at:n(),oldRevision:c?.oldRevision??h.revision,newRevision:c?.oldRevision??h.revision,reasonCodes:f.map(L=>L.code),changedIdentities:[],provenance:Ae(E.provenance),patch:Ae(E)}),b(Lc,{patchId:E.patchId,reasonCode:A,revision:h.revision}),b(ai,{patchId:E.patchId,reasonCode:A,revision:h.revision})):b(ai,{reasonCode:A,revision:h.revision}),{ok:!1,errors:f,inspect:T()}}function O(p){if(!e.graph||!p)return[];let E=e.graph.restore(p);return E.ok?[]:E.errors.map(c=>ee("graph-apply-failed",c.detail,c.path))}function $(p){let E=t.begin();E.applyWorldRevision(p),E.commit()}return{dryRun(p){R();let E=F(p);return E.ok?E.idempotent?{ok:!0,previewRevision:E.next.revision,changedIdentities:[],diagnostics:[]}:{ok:!0,previewRevision:E.next.revision,changedIdentities:E.changed,diagnostics:[]}:{ok:!1,errors:E.errors}},commit(p){R();let E=F(p);if(!E.ok)return U(E.errors,E.patch);let c=E.patch,f=t.current();if(E.idempotent)return{ok:!0,patchId:c.patchId,oldRevision:f.revision,newRevision:f.revision,changedIdentities:[],idempotent:!0,inspect:T()};let h=e.graph?.snapshot(),A=t.begin();try{if(A.applyWorldRevision(E.next),e.graph){let w=wh(e.graph,c.operations);if(w.length){try{A.rollback()}catch{}return $(f),O(h),U(w,c,{oldRevision:f.revision})}}A.commit()}catch(w){try{A.rollback()}catch{}return $(f),O(h),U([ee("publish-failed",w instanceof Error?w.message:"persistence failed")],c,{oldRevision:f.revision})}let L={patchId:c.patchId,oldRevision:f.revision,newRevision:E.next.revision,changedIdentities:E.changed,producer:c.provenance.producer,jobId:c.provenance.jobId,contentRevisions:c.provenance.contentRevisions};try{t.publish?.(L),E.supersede&&(b(Vc,{patchId:E.supersede.patchId,supersededBy:c.patchId,revision:E.next.revision}),x({outcome:"superseded",patchId:E.supersede.patchId,idempotencyKey:E.supersede.idempotencyKey,at:n(),oldRevision:f.revision,newRevision:E.next.revision,reasonCodes:["superseded"],changedIdentities:[],provenance:Ae(E.supersede.provenance),patch:{supersededBy:c.patchId}})),b(is,{patchId:L.patchId,oldRevision:L.oldRevision,newRevision:L.newRevision,producer:L.producer,jobId:L.jobId,contentRevisions:L.contentRevisions,changedIdentities:L.changedIdentities}),k=null,x({outcome:"accepted",patchId:c.patchId,idempotencyKey:c.idempotencyKey,at:n(),oldRevision:f.revision,newRevision:E.next.revision,reasonCodes:[],changedIdentities:E.changed,provenance:Ae(c.provenance),patch:Ae(c)})}catch(w){return $(f),O(h),U([ee("publish-failed",w instanceof Error?w.message:"publication failed")],c,{oldRevision:f.revision})}return{ok:!0,patchId:c.patchId,oldRevision:f.revision,newRevision:E.next.revision,changedIdentities:E.changed,inspect:T()}},inspect(){return R(),T()},snapshot(){R();let p={schemaVersion:di,world:ci(t.current()),audit:Ae(m)};return e.graph&&(p.graph=e.graph.snapshot()),p},restore(p){R();let E=Th(p);if(!E.ok)return E;let c=t.current(),f=m,h=e.graph?.snapshot();try{if($(E.snapshot.world),m=Ae(E.snapshot.audit),k=null,E.snapshot.graph){let A=O(E.snapshot.graph);if(A.length)return $(c),O(h),m=f,{ok:!1,errors:A}}return{ok:!0,snapshot:E.snapshot}}catch{return $(c),O(h),m=f,{ok:!1,errors:[ee("invalid-snapshot","restore failed to persist")]}}},audit(p){R();let E=p?.redact!==!1,c=Ae(m);return E?rs(c,o):c},events(){return R(),u.map(p=>Ae(p))},destroy(){d=!0,u.length=0,y.length=0}}}var Xn=1,Ft=1,ss="content.revision.state.discovered",Gc="content.revision.state.staging",Wc="content.revision.state.validated",jc="content.revision.state.rejected",ds="content.revision.state.activated",ui="content.revision.state.rolled-back",li="content.revision.state.superseded",as="content.revision.diagnostic.lifecycle";var Oh=["invalid-manifest","invalid-schema","invalid-version","invalid-snapshot","unknown-revision","unknown-adapter","hash-mismatch","capability-denied","pinned","staging-failed","activation-failed","health-check-failed","stale-health-check","superseded","destroyed","adapter-missing","asset-failed","unsigned"],iS=new Set(Oh),Mh="Content revision activator has been destroyed",Nh=/^[0-9a-f]+$/i;function le(e,t,n){return n?{code:e,detail:t,path:n}:{code:e,detail:t}}function kt(e){return e!==null&&typeof e=="object"&&!Array.isArray(e)}function we(e){return typeof e=="string"&&e.length>0}function Me(e){try{return JSON.parse(JSON.stringify(e))}catch{return e}}function St(e,t){return`${e}@${t}`}function _h(e,t){return e.localeCompare(t,"en",{numeric:!0,sensitivity:"base"})>0}function Yn(e,t){return e===t?!0:!e||!t?!1:e.bundleId===t.bundleId&&e.adapterId===t.adapterId}function Lt(){return{version:1,fields:{contentId:{type:"string"},revision:{type:"string"},adapterId:{type:"string"},bundleId:{type:"string",optional:!0},reasonCode:{type:"string",optional:!0}}}}function Vt(e){if(!e.ok)throw new Error(e.errors.map(t=>t.detail).join("; "));return e.contract}function Lh(){return[Vt(me(ss,Lt())),Vt(me(Gc,Lt())),Vt(me(Wc,Lt())),Vt(me(jc,Lt())),Vt(me(ds,Lt())),Vt(me(ui,Lt())),Vt(me(li,Lt())),Vt(tt(as,Lt()))]}function cs(e){return typeof e=="string"&&e.length===64&&Nh.test(e)}function Vh(e,t){return e===void 0?{ok:!0,fallback:void 0}:kt(e)?!we(e.id)||!Ln(e.kind)||!we(e.url)||!cs(e.hash)||e.alg!=="sha256"?{ok:!1,errors:[le("invalid-schema","fallback is missing id, kind, url, or sha256 hash",t)]}:{ok:!0,fallback:{id:e.id,kind:e.kind,url:e.url,hash:e.hash.toLowerCase(),alg:"sha256"}}:{ok:!1,errors:[le("invalid-schema","fallback must be an object",t)]}}function us(e){if(!kt(e))return{ok:!1,errors:[le("invalid-manifest","catalog must be an object")]};let t=[];we(e.contentId)||t.push(le("invalid-schema","contentId is required","contentId")),(!we(e.revision)||e.revision==="latest")&&t.push(le("unknown-revision",'revision must be an exact id, not "latest"',"revision")),e.manifestVersion!==Ft&&t.push(le("invalid-version",`manifestVersion must be ${Ft}`,"manifestVersion")),we(e.publisher)||t.push(le("invalid-schema","publisher is required","publisher")),we(e.source)||t.push(le("invalid-schema","source is required","source")),we(e.adapterId)||t.push(le("invalid-schema","adapterId is required","adapterId")),(!Array.isArray(e.assets)||e.assets.length===0)&&t.push(le("invalid-schema","assets must be a non-empty array","assets"));let n=[],r=new Set;if(Array.isArray(e.assets)&&e.assets.forEach((o,s)=>{let a=`assets[${s}]`;if(!kt(o)){t.push(le("invalid-schema","asset must be an object",a));return}if(!we(o.id)||!Ln(o.kind)||!we(o.url)){t.push(le("invalid-schema","asset needs id, kind, and url",a));return}if(!cs(o.hash)||o.alg!=="sha256"){t.push(le("hash-mismatch","asset hash must be sha256 hex",`${a}.hash`));return}if(r.has(o.id)){t.push(le("invalid-schema",`duplicate asset id "${o.id}"`,`${a}.id`));return}r.add(o.id);let d=Vh(o.fallback,`${a}.fallback`);if(!d.ok){t.push(...d.errors);return}n.push({id:o.id,kind:o.kind,url:o.url,hash:o.hash.toLowerCase(),alg:"sha256",optional:o.optional===!0,fallback:d.fallback})}),t.length>0)return{ok:!1,errors:t};let i;if(e.signature!==void 0){if(!kt(e.signature)||!we(e.signature.id)||!we(e.signature.alg))return{ok:!1,errors:[le("unsigned","signature must include id and alg","signature")]};i={id:e.signature.id,alg:e.signature.alg}}return{ok:!0,catalog:{contentId:e.contentId,revision:e.revision,manifestVersion:Ft,publisher:e.publisher,source:e.source,adapterId:e.adapterId,assets:n,requestedGrants:Array.isArray(e.requestedGrants)?e.requestedGrants:void 0,capabilities:e.capabilities,signature:i}}}function Fh(e,t){return{contentId:e.body.id,revision:e.body.cartVersion,manifestVersion:Ft,publisher:e.body.publisher,source:"remote",adapterId:t,assets:e.body.assets.map(n=>({id:n.id,kind:n.kind,url:n.url,hash:n.hash.toLowerCase(),alg:"sha256"})),requestedGrants:ic(e),capabilities:e.body.capabilities,signature:{id:e.signature.keyId,alg:e.signature.alg}}}function $h(e,t){return`https://registry.test/worlds/${e}/revisions/${t??"current"}.json`}function Bh(e){let t=e.id??"static",n=new Map,r=new Map;for(let o of e.revisions){let s=us({...o,adapterId:o.adapterId||t}),a=we(o.contentId)?o.contentId:"",d=we(o.revision)?o.revision:"";if(!(!a||!d))if(s.ok){let m={...s.catalog,adapterId:t,source:s.catalog.source||"static"};n.set(St(a,d),{ok:!0,catalog:m});let u=r.get(a);(!u||_h(m.revision,u.revision))&&r.set(a,m)}else n.set(St(a,d),s)}let i=e.fetchBytes??(async o=>e.bytesByUrl[o]);return{id:t,hasRevision(o,s){return!!n.get(St(o,s))?.ok},async discover(o){let s=r.get(o);if(s)return{contentId:s.contentId,revision:s.revision,adapterId:t,publisher:s.publisher,source:s.source}},async loadRevision(o,s){let a=n.get(St(o,s));return a?a.ok?{ok:!0,catalog:Me(a.catalog)}:a:{ok:!1,errors:[le("unknown-revision",`static adapter has no ${o}@${s}`)]}},fetchBytes:i}}function Hh(e){let t=e.id??"remote",n=e.catalogUrl??$h,r=new Set((e.known??[]).map(s=>St(s.contentId,s.revision))),i=e.fetchBytes??(async s=>e.bytesByUrl?.[s]);async function o(s,a,d){let m=a!=="current",u;try{u=await e.fetch(n(s,m?a:void 0),d)}catch(b){return{ok:!1,errors:[le("staging-failed",b instanceof Error?b.message:String(b))]}}let y=u;if(kt(u)&&kt(u.manifest)){if(we(u.world)&&u.world!==s)return{ok:!1,errors:[le("invalid-manifest",`remote world "${String(u.world)}" does not match "${s}"`,"world")]};if(m&&we(u.revision)&&u.revision!==a)return{ok:!1,errors:[le("unknown-revision",`remote revision "${String(u.revision)}" does not match "${a}"`,"revision")]};y=u.manifest}let k=await $o(y,e.keys,m?a:void 0);if(!k.ok)return{ok:!1,errors:k.errors.map(b=>le(b.code,b.detail,b.path))};if(k.manifest.body.id!==s)return{ok:!1,errors:[le("invalid-manifest",`signed id "${k.manifest.body.id}" does not match "${s}"`,"body.id")]};let R=Fh(k.manifest,t);return r.add(St(R.contentId,R.revision)),us(R)}return{id:t,hasRevision(s,a){return r.has(St(s,a))},async discover(s){let a=await o(s,"current");if(a.ok)return{contentId:a.catalog.contentId,revision:a.catalog.revision,adapterId:t,publisher:a.catalog.publisher,source:a.catalog.source}},loadRevision:o,fetchBytes:i}}function qh(e,t){return kt(e)?!we(e.id)||!Ln(e.kind)||!we(e.ref)||!cs(e.hash)||!we(e.url)||typeof e.optional!="boolean"||typeof e.usedFallback!="boolean"?{ok:!1,errors:[le("invalid-snapshot","resource fields are invalid",t)]}:{ok:!0,resource:{id:e.id,kind:e.kind,ref:e.ref,hash:e.hash.toLowerCase(),url:e.url,optional:e.optional,usedFallback:e.usedFallback}}:{ok:!1,errors:[le("invalid-snapshot","resource must be an object",t)]}}function os(e,t){if(e===null)return{ok:!0,bundle:null};if(!kt(e))return{ok:!1,errors:[le("invalid-snapshot","bundle must be an object or null",t)]};if(!we(e.contentId)||!we(e.revision)||e.revision==="latest")return{ok:!1,errors:[le("unknown-revision","snapshot bundle must record an exact revision",`${t}.revision`)]};if(e.manifestVersion!==Ft)return{ok:!1,errors:[le("invalid-version",`bundle manifestVersion must be ${Ft}`,`${t}.manifestVersion`)]};if(!we(e.publisher)||!we(e.source)||!we(e.adapterId)||!we(e.bundleId))return{ok:!1,errors:[le("invalid-snapshot","bundle identity is incomplete",t)]};if(!kt(e.resources))return{ok:!1,errors:[le("invalid-snapshot","bundle resources must be an object",`${t}.resources`)]};let n={};for(let[i,o]of Object.entries(e.resources)){let s=qh(o,`${t}.resources.${i}`);if(!s.ok)return s;if(s.resource.id!==i)return{ok:!1,errors:[le("invalid-snapshot",`resource key "${i}" does not match id`,`${t}.resources.${i}`)]};n[i]=s.resource}let r;if(e.signature!==void 0){if(!kt(e.signature)||!we(e.signature.id)||!we(e.signature.alg))return{ok:!1,errors:[le("invalid-snapshot","signature must include id and alg",`${t}.signature`)]};r={id:e.signature.id,alg:e.signature.alg}}return{ok:!0,bundle:{bundleId:e.bundleId,contentId:e.contentId,revision:e.revision,manifestVersion:Ft,publisher:e.publisher,source:e.source,adapterId:e.adapterId,signature:r,resources:n}}}function Kh(e){let t=e;if(typeof e=="string")try{t=JSON.parse(e)}catch{return{ok:!1,errors:[le("invalid-snapshot","snapshot JSON is not parseable")]}}if(!kt(t))return{ok:!1,errors:[le("invalid-snapshot","snapshot must be an object")]};if(t.schemaVersion!==Xn)return{ok:!1,errors:[le("invalid-version",`snapshot schema must be ${Xn}`,"schemaVersion")]};if(typeof t.pinned!="boolean")return{ok:!1,errors:[le("invalid-snapshot","pinned must be a boolean","pinned")]};let n=os(t.active,"active");if(!n.ok)return n;let r=os(t.lastKnownGood,"lastKnownGood");if(!r.ok)return r;let i=os(t.previous,"previous");return i.ok?{ok:!0,snapshot:{schemaVersion:Xn,pinned:t.pinned,active:n.bundle,lastKnownGood:r.bundle,previous:i.bundle}}:i}function Gh(e,t,n){return{id:e.id,kind:e.kind,ref:t.ref,hash:n&&e.fallback?e.fallback.hash:e.hash,url:t.url,optional:e.optional===!0,usedFallback:n}}function Wh(e){let t=[...e.adapters],n=e.grants??bn(),r=new Map,i=e.pin===!0,o=!1,s=null,a=null,d=null,m=null,u=null,y=[],k=0,R=null;function T(){if(o)throw new Error(Mh)}function b(c){return c?t.find(f=>f.id===c):t[0]}function x(c,f,h){return(h?t.filter(L=>L.id===h):t).some(L=>L.hasRevision(c,f))}function F(c,f){y.push(c);let h=c.includes(".diagnostic.")?"diagnostic":"state",A={type:c,kind:h,payload:Me(f)};e.onEvent?.(A),e.router?.publish(A)}function U(c,f){return u=c.map(h=>Me(h)),F(jc,{...f,reasonCode:c[0]?.code}),F(as,{...f,reasonCode:c[0]?.code}),{ok:!1,errors:u}}function O(){return{destroyed:o,pinned:i,active:Me(s),lastKnownGood:Me(a),staging:m?Me(m):null,events:[...y],lastRejection:u?Me(u):null}}async function $(c,f,h){if(c.requestedGrants){for(let P of c.requestedGrants)if(!n.has(P))return{ok:!1,errors:[le("capability-denied",`host did not grant "${P}"`,"requestedGrants")]}}if(c.capabilities){let P=e.hostCapabilities??{contractVersion:1,features:[],integrations:[],grants:n.list()},_=Fr(c.capabilities,{...P,grants:n.list()});if(!_.ok)return{ok:!1,errors:_.errors.map(N=>le(N.code==="missing-grant"||N.code==="capability-denied"||N.code==="ungranted-capability"?"capability-denied":"invalid-schema",N.detail,N.path))}}let A={},L=[];for(let P of c.assets)A[P.url]={url:P.url,hash:P.hash,alg:"sha256"},P.fallback&&(A[P.fallback.url]={url:P.fallback.url,hash:P.fallback.hash,alg:"sha256"}),L.push({id:P.id,ref:P.url,type:P.kind,integrity:`sha256-${P.hash}`,provenance:{contentId:c.contentId,revision:c.revision,publisher:c.publisher,adapterId:c.adapterId},fallback:P.fallback?{id:P.id,ref:P.fallback.url,type:P.fallback.kind,integrity:`sha256-${P.fallback.hash}`}:void 0});let w=Er({declared:A,fetchBytes:async P=>{if(h.aborted)return;let _=Object.values(A).find(H=>H.url===P);if(!_)return;let W=r.get(_.hash)??await f.fetchBytes(P,h);if(!W||h.aborted)return;let j=await Xr(W);if(j!==_.hash)throw xe({id:"",ref:P,code:"hash-mismatch",message:`hash mismatch for "${P}"`});return r.set(j,W),W},hashBytes:Xr}),B=dn({resolver:w,emitEvents:!1,wallClockTimeout:!1});if(h.aborted)return B.dispose(),{ok:!1,errors:[le("superseded","staging aborted")]};let G=()=>{B.abort(),B.dispose()};h.addEventListener("abort",G,{once:!0});let D;try{D=await B.preload(L)}finally{h.removeEventListener("abort",G),B.dispose()}if(h.aborted)return{ok:!1,errors:[le("superseded","staging aborted")]};let l={},v=[];for(let P of c.assets){let _=D.items[P.id];if(_?.state==="ready"){l[P.id]=Gh(P,_.resource,_.resource.usedFallback===!0||!!_.failure);continue}if(P.optional)continue;let N=_?.state==="failed"?_.failure:D.failures.find(W=>W.id===P.id);v.push(le(N?.code==="hash-mismatch"?"hash-mismatch":"asset-failed",N?.message??`required asset "${P.id}" failed`,P.id))}return v.length>0?{ok:!1,errors:v}:{ok:!0,bundle:{bundleId:St(c.contentId,c.revision),contentId:c.contentId,revision:c.revision,manifestVersion:Ft,publisher:c.publisher,source:c.source,adapterId:c.adapterId,signature:c.signature,resources:l}}}function C(c,f,h){return F(as,{...c,reasonCode:f}),{ok:!1,errors:[le("stale-health-check",h)]}}async function p(c,f){let h=Me(c),A=s;s=h;let L=!0;try{L=e.healthCheck?await e.healthCheck(h):!0}catch(w){return Yn(s,h)?(s=A,F(ui,{...f,revision:A?.revision??"",reasonCode:"activation-failed"}),U([le("activation-failed",w instanceof Error?w.message:String(w))],f)):C(f,"stale-health-check","stale health check ignored; a newer revision is active")}return L?Yn(s,h)?(d=A,a=Me(s),u=null,F(ds,f),{ok:!0,bundle:Me(s)}):C(f,"stale-health-check","stale health check ignored; a newer revision is active"):Yn(s,h)?(s=A,F(ui,{...f,revision:A?.revision??"",reasonCode:"health-check-failed"}),U([le("health-check-failed","post-activation health check failed")],f)):C(f,"stale-health-check","stale health check ignored; a newer revision is active")}let E={pin(c=!0){T(),i=c},unpin(){T(),i=!1},isPinned(){return T(),i},async discover(c,f){T();let h=b(f);if(!h)return;let A=await h.discover(c);return A&&F(ss,{contentId:A.contentId,revision:A.revision,adapterId:A.adapterId,bundleId:St(A.contentId,A.revision)}),A?Me(A):void 0},async activate(c){T();let f=b(c.adapterId);if(!f)return U([le("unknown-adapter",`unknown adapter "${String(c.adapterId)}"`)],{contentId:c.contentId,revision:c.revision??"",adapterId:c.adapterId??""});let h=c.revision;if(!h){let B=await f.discover(c.contentId);h=B?.revision,B&&F(ss,{contentId:B.contentId,revision:B.revision,adapterId:B.adapterId,bundleId:St(B.contentId,B.revision)})}if(!we(h)||h==="latest")return U([le("unknown-revision","activation requires an exact revision")],{contentId:c.contentId,revision:String(h??""),adapterId:f.id});let A={contentId:c.contentId,revision:h,adapterId:f.id,bundleId:St(c.contentId,h)};if(s&&s.contentId===c.contentId&&s.revision===h&&s.adapterId===f.id)return{ok:!0,bundle:Me(s),idempotent:!0};if(i&&s)return U([le("pinned","activator is pinned; live revision movement is frozen")],A);let L=++k;R?.abort();let w=new AbortController;R=w,m={contentId:c.contentId,revision:h,adapterId:f.id,bundleId:A.bundleId},F(Gc,A);try{let B=await f.loadRevision(c.contentId,h,w.signal);if(L!==k||w.signal.aborted)return F(li,A),{ok:!1,errors:[le("superseded",`revision ${h} was superseded`)]};if(!B.ok)return U(B.errors,A);let G=B.catalog,D=us(G);if(!D.ok)return U(D.errors,A);let l=await $(D.catalog,f,w.signal);return L!==k||w.signal.aborted?(F(li,A),{ok:!1,errors:[le("superseded",`revision ${h} was superseded`)]}):l.ok?(F(Wc,A),L!==k||w.signal.aborted?(F(li,A),{ok:!1,errors:[le("superseded",`revision ${h} was superseded`)]}):await p(l.bundle,A)):U(l.errors,A)}finally{L===k&&(m=null,R===w&&(R=null))}},rollback(){T();let c=d??a;if(Yn(s,c))return{ok:!0,bundle:Me(s),idempotent:!0};if(i)return{ok:!1,errors:[le("pinned","activator is pinned; live revision movement is frozen")]};let f=s;return s=Me(c),a=Me(c),d=Me(c),F(ui,{contentId:s?.contentId??f?.contentId??"",revision:s?.revision??"",adapterId:s?.adapterId??f?.adapterId??"",bundleId:s?.bundleId,reasonCode:"rolled-back"}),{ok:!0,bundle:Me(s)}},inspect(){return T(),O()},activeBundle(){return T(),Me(s)},snapshot(){return T(),{schemaVersion:Xn,pinned:i,active:Me(s),lastKnownGood:Me(a),previous:Me(d)}},restore(c){T();let f=Kh(c);if(!f.ok)return f;let h=f.snapshot,A=[h.active,h.lastKnownGood,h.previous];for(let L of A)if(L&&!x(L.contentId,L.revision,L.adapterId))return{ok:!1,errors:[le("unknown-revision",`unknown revision ${L.contentId}@${L.revision}`,"revision")]};return i&&!Yn(s,h.active)?{ok:!1,errors:[le("pinned","activator is pinned; live revision movement is frozen")]}:(i=h.pinned,s=Me(h.active),a=Me(h.lastKnownGood),d=Me(h.previous),u=null,{ok:!0,snapshot:E.snapshot()})},provenance(){if(T(),!!s)return{source:s.source,publisher:s.publisher,version:s.revision,signature:s.signature}},destroy(){o=!0,R?.abort(),R=null,m=null}};return E}function jh(e,t){return{width:e,height:t,data:new Uint8ClampedArray(e*t*4),colorSpace:"srgb"}}function Uh(){return{putImageData:()=>{}}}function Jh(e,t,n,r={}){let i=r.frames??30,o=r.warmupFrames??5,s=r.frameStepMs??1e3/60,a=r.width??1920,d=r.height??1080,m=r.tokenId??"18009999",u=new nn({hash:t,tokenId:m}),y=sr(a,d),k=new ar,R=e.getDefaultFeatureState?.(u,y,n,k),T=e.getDefaultState(u,y,n,k,void 0,void 0,void 0,R);r.prepareState?.(T,R);let b=jh(a,d),x=r.drawingContext??Uh(),F=typeof e.render=="function",U=null,O=null,$=0,C=0,p=0,E=0,c=0;for(let w=1;w<=o+i;w++){let B=$+w*s,G=Pn(B,$,U,O),D=performance.now();e.update(u,w,n,y,T,k,void 0,void 0,G,R);let l=performance.now(),v=0;if(F){let _=Pn(B,$,U,O);e.render(u,w,n,y,T,x,b,void 0,void 0,_,R),v=performance.now()-l}let P=l-D;U=B,O=B,w>o&&(C+=P,p+=v,P>E&&(E=P),v>c&&(c=v))}k.destroy();let f=C+p,h=C/i,A=p/i,L=f/i;return{frames:i,updateAvgMs:h,renderAvgMs:A,totalAvgMs:L,updateMaxMs:E,renderMaxMs:c,estFps:L>0?1e3/L:1/0,updatePct:f>0?100*C/f:0,renderPct:f>0?100*p/f:0}}function zh(e,t=2){let n=r=>Number.isFinite(r)?Number(r.toFixed(t)):r;return{frames:e.frames,updateAvgMs:n(e.updateAvgMs),renderAvgMs:n(e.renderAvgMs),totalAvgMs:n(e.totalAvgMs),updateMaxMs:n(e.updateMaxMs),renderMaxMs:n(e.renderMaxMs),estFps:n(e.estFps),updatePct:n(e.updatePct),renderPct:n(e.renderPct)}}var ls={width:320,height:180,deviceScaleFactor:1},Yh="Browser harness has been destroyed";function Xh(e){return typeof CSS<"u"&&typeof CSS.escape=="function"?CSS.escape(e):e.replace(/([\0-\x1f\x7f!"#$%&'()*+,./:;<=>?@[\\\]^`{|}~])/g,"\\$1")}function ps(e){return{...e,visibleNormalizedRect:{...e.visibleNormalizedRect}}}function fs(e){return e===void 0?void 0:JSON.parse(JSON.stringify(e))}function ms(e,t,n){Object.defineProperty(e,"clientWidth",{value:t,configurable:!0}),Object.defineProperty(e,"clientHeight",{value:n,configurable:!0})}function gs(e,t,n,r,i){let o={x:t,y:n,width:r,height:i,top:n,left:t,right:t+r,bottom:n+i,toJSON(){return this}};e.getBoundingClientRect=()=>o}function Uc(e){return!e||!(e instanceof HTMLElement)||e===document.body?{tag:"body",id:"",role:null,name:""}:{tag:e.tagName.toLowerCase(),id:e.id,role:e.getAttribute("role"),name:e.getAttribute("aria-label")??e.textContent?.trim()??""}}function Qh(e){return e.querySelector("[aria-live]")?.textContent??""}function Jc(e,t,n){let r={bubbles:!0,cancelable:!0,clientX:t,clientY:n},i=globalThis.PointerEvent;typeof i=="function"?(e.dispatchEvent(new i("pointerdown",{...r,pointerId:1,pointerType:"mouse",buttons:1})),e.dispatchEvent(new i("pointerup",{...r,pointerId:1,pointerType:"mouse",buttons:0}))):(e.dispatchEvent(new MouseEvent("mousedown",r)),e.dispatchEvent(new MouseEvent("mouseup",r))),e.dispatchEvent(new MouseEvent("click",r))}function Zh(e,t,n){let r=Array.from(e.querySelectorAll("*")),i=null,o=Number.POSITIVE_INFINITY;for(let s of r){if(!(s instanceof HTMLElement))continue;let a=s.getBoundingClientRect();if(t>=a.left&&t<a.right&&n>=a.top&&n<a.bottom){let d=Math.max(1,a.width*a.height);d<=o&&(i=s,o=d)}}return i??e}function zc(e){let t=window.matchMedia;return window.matchMedia=n=>({matches:e&&/prefers-reduced-motion:\s*reduce/i.test(n),media:n,onchange:null,addListener(){},removeListener(){},addEventListener(){},removeEventListener(){},dispatchEvent(){return!1}}),()=>{window.matchMedia=t}}function Yc(e={}){let t=e.seed??`0x${"00".repeat(32)}`,n=fs(e.geometry),r=e.semanticLayers,i=e.viewport?.width??ls.width,o=e.viewport?.height??ls.height,s=e.viewport?.deviceScaleFactor??ls.deviceScaleFactor,a=e.reducedMotion===!0,d=e.inputModality??"pointer",m=e.origin??0,u=e.fit??"contain",y=Object.getOwnPropertyDescriptor(window,"devicePixelRatio"),k=Object.getOwnPropertyDescriptor(window,"innerWidth"),R=Object.getOwnPropertyDescriptor(window,"innerHeight"),T=zc(a),b=()=>{Object.defineProperty(window,"devicePixelRatio",{value:s,configurable:!0}),Object.defineProperty(window,"innerWidth",{value:i,configurable:!0}),Object.defineProperty(window,"innerHeight",{value:o,configurable:!0})};b();let x=document.createElement("div");x.setAttribute("data-cyberart-browser-harness",""),x.style.position="relative",x.style.overflow="auto",x.tabIndex=-1,document.body.appendChild(x);let F=[],U=[],O=!1,$=0,C=e.createId??(()=>`br-${++$}`),p=()=>Sd({contentWidth:e.contentWidth??i,contentHeight:e.contentHeight??o,viewportWidth:i,viewportHeight:o,mode:u,devicePixelRatio:s}),E=p(),c=()=>Math.max(1,Math.round(i*s)),f=()=>Math.max(1,Math.round(o*s)),h=H=>{n=fs(H)},A=(H,g)=>{let S=n?.regions.find(M=>M.id===H);if(!S)return;let I=Ed(S,E);if(I)return g.style.position=g.style.position||"absolute",g.style.left=`${I.x}px`,g.style.top=`${I.y}px`,g.style.width=`${I.width}px`,g.style.height=`${I.height}px`,gs(g,I.x,I.y,I.width,I.height),{...I}},L=()=>{E=p(),x.style.width=`${i}px`,x.style.height=`${o}px`,ms(x,i,o),gs(x,0,0,i,o),x.dataset.inputModality=d,x.dataset.reducedMotion=a?"true":"false",b()};L();let w=()=>({root:x,get layout(){return ps(E)},get reducedMotion(){return a},get inputModality(){return d},placeRegion:A,setGeometry(H){h(H)}}),B=e.mount?.(w())??{},G=B.participants??[],D,l,v=()=>{};if(G.length>0){for(let H of G)H.container&&ms(H.container,c(),f());D=wr({origin:m,width:c(),height:f(),createId:C,now:()=>m,participants:G.map(H=>({...H,seed:H.seed??t,width:H.width??c(),height:H.height??f()}))}),v=D.router.subscribe(["*.*","*.*.*","*.*.*.*","*.*.*.*.*",Tt],H=>{U.push(H)}),B.compositor&&(l=bd({...B.compositor,group:D,width:i,height:o,dpr:s}))}let P=()=>({...w(),group:D,compositor:l,publish(H){if(!D)throw new Error("Browser harness: publish requires mounted carts");return D.publish(H)}}),_=()=>{if(L(),D){let H=c(),g=f();for(let S of G){S.container&&(ms(S.container,H,g),S.container.style.width=`${i}px`,S.container.style.height=`${o}px`);try{let I=D.participant(S.id).cart.canvas;I&&(I.style.width=`${i}px`,I.style.height=`${o}px`,gs(I,0,0,i,o))}catch{}}}},N=()=>{if(O)throw new Error(Yh)};_(),B.ready?.(P());let W=(H,g,S)=>{if(F.push({type:"click",x:H,y:g,...S?{selector:S}:{}}),S){let Q=x.querySelector(S);if(!(Q instanceof HTMLElement))throw new Error(`No element matches ${S}`);Jc(Q,H,g);return}let I=n?new Set(n.regions.map(Q=>Q.id)):void 0,M=r?r.hitTest(qr({x:H,y:g},E)):void 0,q=M&&(!I||I.has(M.id))?M:void 0,X=q===void 0&&n!==void 0?kd({x:H,y:g},E,n,{space:"css"}):q?{id:q.id}:void 0,Z=(X?x.querySelector(`#${Xh(X.id)}`):null)??Zh(x,H,g);Jc(Z,H,g)};return{root:x,get group(){return D},get compositor(){return l},get layout(){return ps(E)},get events(){return U.slice()},get geometry(){return fs(n)},goto(){N()},setGeometry(H){N(),h(H),B.relayout?.(P())},setViewport(H,g,S){N(),i=Math.max(1,H|0),o=Math.max(1,g|0),S!==void 0&&(s=S>0?S:1),F.push({type:"viewport",width:i,height:o,dpr:s}),l?l.resize(i,o,s):D&&D.resize(c(),f()),_(),B.relayout?.(P())},setReducedMotion(H){N(),a=H,T(),T=zc(a),F.push({type:"reducedMotion",value:H}),_(),B.relayout?.(P())},setInputModality(H){N(),d=H,F.push({type:"inputModality",value:H}),_()},click(H,g){if(N(),typeof H=="string"){let S=x.querySelector(H);if(!(S instanceof HTMLElement))throw new Error(`No element matches ${H}`);let I=S.getBoundingClientRect();W(I.left+I.width/2,I.top+I.height/2,H);return}if(g===void 0)throw new Error("click(x, y) requires a y coordinate");W(H,g)},key(H){N(),F.push({type:"key",key:H}),(document.activeElement instanceof HTMLElement?document.activeElement:x).dispatchEvent(new KeyboardEvent("keydown",{key:H,bubbles:!0,cancelable:!0}))},focus(H){N();let g=x.querySelector(H);if(!(g instanceof HTMLElement))throw new Error(`No element matches ${H}`);g.focus()},async step(H=1){N(),F.push({type:"step",frames:H}),D&&await D.step(H)},async advance(H){N(),F.push({type:"advance",ms:H}),D&&await D.step(Math.max(0,Math.round(H/1e3*30)))},screenshot(){if(N(),l){let H=l.captureComposedFrame();return{imageData:H.imageData,pngDataUrl:H.pngDataUrl,html:x.outerHTML,declaredOrder:H.declaredOrder.map(g=>g.id)}}return{imageData:null,pngDataUrl:null,html:x.outerHTML,declaredOrder:[]}},accessibilitySnapshot(){return N(),{focus:Uc(document.activeElement),live:Qh(x),html:x.outerHTML,publishedRegions:(r?.inspectPublished()??[]).map(H=>({id:H.id,geometryKinds:[...H.geometryKinds],name:H.a11y?.name??null,role:H.a11y?.role??null}))}},async inspect(){N();let H={},g={},S=0;if(D){let I=await D.inspect();for(let M of I.diagnostics.participantIds)H[M]=D.participant(M).events.slice(),g[M]=I.participants[M]?.state,S=I.diagnostics.clocks[M]?.framesElapsed??S}return{host:B.hostState?.()??null,layout:ps(E),events:U.slice(),participantEvents:H,state:g,focus:Uc(document.activeElement),publishedRegions:(r?.inspectPublished()??[]).map(I=>({id:I.id,geometryKinds:[...I.geometryKinds],name:I.a11y?.name??null,role:I.a11y?.role??null})),scrollTop:x.scrollTop,clock:{framesElapsed:S}}},reproduction(){return N(),{seed:t,viewport:{width:i,height:o,dpr:s},reducedMotion:a,inputModality:d,actions:F.map(H=>({...H}))}},captureComposedFrame(){if(N(),!l)throw new Error("Browser harness: captureComposedFrame requires a compositor");return l.captureComposedFrame()},destroy(){if(!O){O=!0,v(),document.activeElement instanceof HTMLElement&&x.contains(document.activeElement)&&document.activeElement.blur();try{B.destroy?.()}finally{try{l?.destroy()}finally{try{D?.destroy()}finally{x.remove(),T(),y&&Object.defineProperty(window,"devicePixelRatio",y),k&&Object.defineProperty(window,"innerWidth",k),R&&Object.defineProperty(window,"innerHeight",R)}}}}}}}var vs=1,Ss=1,Es="production.scenario.state.observed",fi="production.scenario.state.failed",Is="production.scenario.diagnostic.lifecycle",ey=[Es,fi,Is],nu=["input","reducer","routing","binding","cue","pixels","caption","audio","save-replay"],ty=["invalid-scenario","invalid-schema","unknown-field","missing-field","callbacks-forbidden","missing-participant","missing-layer","destroyed","assertion-failed","invalid-host-audio","invalid-audio-sidecar","unsupported-preference","invalid-geometry","ambiguous-geometry","stale-geometry"],ru=["invoked","completed","failed","skipped","fallback"],ny=["desktop","mobile"],mi={desktop:{width:64,height:48,deviceScaleFactor:1},mobile:{width:48,height:64,deviceScaleFactor:2}},ry="Production scenario runner has been destroyed",PS=new Set(ey),xS=new Set(ty),TS=new Set(nu),iy=new Set(ru),oy=new Set(["invoked","completed"]),iu=new Set(ny),sy=new Set(["id","schemaVersion","seed","required","matrix","steps"]),ay=new Set(["participants","layers"]),dy=new Set(["viewport","width","height","dpr","reducedMotion","mute","failedAssetIds","fallback","inputModality"]),cy=new Set(["click","key","focus","step","viewport","reducedMotion","mute","failAsset","save","reload","replay"]),ou="continue",uy=["browser","visual","sequence","audio","semantic"];function _e(e,t,n,r){let i={code:e,detail:t};return n&&(i.path=n),r&&(i.boundary=r),i}function et(e){return!!e&&typeof e=="object"&&!Array.isArray(e)}function Ze(e){return typeof e=="string"&&e.length>0}function Ke(e){return JSON.parse(JSON.stringify(e))}function ks(e,t,n){if(typeof e=="function"){n.push(_e("callbacks-forbidden","authored scenarios must not contain callbacks",t));return}if(Array.isArray(e)){e.forEach((r,i)=>ks(r,`${t}[${i}]`,n));return}if(et(e))for(let[r,i]of Object.entries(e))ks(i,t?`${t}.${r}`:r,n)}function hs(e,t,n,r){for(let i of Object.keys(e))t.has(i)||r.push(_e("unknown-field",`unknown field "${i}"`,n?`${n}.${i}`:i))}function Xc(e,t,n){if(!Array.isArray(e))return n.push(_e("invalid-schema","must be an array of strings",t)),[];let r=[];return e.forEach((i,o)=>{if(!Ze(i)){n.push(_e("invalid-schema","id must be a non-empty string",`${t}[${o}]`));return}r.push(i)}),r}function ys(){return{version:1,fields:{scenarioId:{type:"string"},seed:{type:"string",optional:!0},boundary:{type:"string",optional:!0},reason:{type:"string",optional:!0},code:{type:"string",optional:!0},missing:{type:"array",optional:!0}}}}function bs(e){if(!e.ok)throw new Error(e.errors.map(t=>t.detail).join("; "));return e.contract}function ly(){return[bs(me(Es,ys())),bs(me(fi,ys())),bs(tt(Is,ys()))]}function su(e){return typeof e=="string"&&iy.has(e)}function py(e,t,n){if(!et(e)||!Ze(e.type)){n.push(_e("invalid-schema","step.type is required",t));return}if(!cy.has(e.type)){n.push(_e("unknown-field",`unknown step type "${e.type}"`,`${t}.type`));return}let r=n.length,i=a=>{Ze(e[a])||n.push(_e("missing-field",`${e.type} step requires ${a}`,`${t}.${a}`))},o=a=>{(typeof e[a]!="number"||!Number.isFinite(e[a]))&&n.push(_e("missing-field",`${e.type} step requires numeric ${a}`,`${t}.${a}`))},s=a=>{typeof e[a]!="boolean"&&n.push(_e("missing-field",`${e.type} step requires boolean ${a}`,`${t}.${a}`))};switch(e.type){case"click":{let a=Ze(e.selector),d=typeof e.x=="number"&&typeof e.y=="number";!a&&!d&&n.push(_e("missing-field","click step requires selector or x and y",t));break}case"key":i("key");break;case"focus":i("selector");break;case"step":o("frames");break;case"viewport":{let a=e.kind!==void 0;a&&!iu.has(String(e.kind))&&n.push(_e("invalid-schema","viewport.kind must be desktop or mobile",`${t}.kind`));let d=typeof e.width=="number"&&typeof e.height=="number";!a&&!d&&n.push(_e("missing-field","viewport step requires kind or width and height",t));break}case"reducedMotion":case"mute":s("value");break;case"failAsset":i("assetId");break;default:break}if(n.length===r)return Ke(e)}function au(e){let t=[];if(ks(e,"",t),!et(e))return{ok:!1,errors:[_e("invalid-scenario","scenario must be an object")]};if(hs(e,sy,"",t),Ze(e.id)||t.push(_e("missing-field","id is required","id")),e.schemaVersion!==vs&&t.push(_e("invalid-schema","schemaVersion must be 1","schemaVersion")),Ze(e.seed)||t.push(_e("missing-field","seed is required","seed")),!et(e.required))t.push(_e("missing-field","required participants and layers are required","required"));else{hs(e.required,ay,"required",t);let o=Xc(e.required.participants,"required.participants",t),s=Xc(e.required.layers,"required.layers",t);o.length===0&&t.push(_e("missing-field","required.participants must not be empty","required.participants")),s.length===0&&t.push(_e("missing-field","required.layers must not be empty","required.layers"))}let n;e.matrix!==void 0&&(et(e.matrix)?(hs(e.matrix,dy,"matrix",t),e.matrix.viewport!==void 0&&!iu.has(String(e.matrix.viewport))&&t.push(_e("invalid-schema","matrix.viewport must be desktop or mobile","matrix.viewport")),n=Ke(e.matrix)):t.push(_e("invalid-schema","matrix must be an object","matrix")));let r;if(e.steps!==void 0&&(Array.isArray(e.steps)?(r=[],e.steps.forEach((o,s)=>{let a=py(o,`steps[${s}]`,t);a&&r.push(a)})):t.push(_e("invalid-schema","steps must be an array","steps"))),t.length>0)return{ok:!1,errors:t};let i={id:e.id,schemaVersion:vs,seed:e.seed,required:{participants:[...e.required.participants],layers:[...e.required.layers]}};return n&&(i.matrix=n),r&&(i.steps=r),{ok:!0,scenario:i}}function zt(e){let t=typeof e=="string"?new TextEncoder().encode(e):e,n=2166136261;for(let r=0;r<t.length;r++)n^=t[r],n=Math.imul(n,16777619);return(n>>>0).toString(16).padStart(8,"0")}function Qn(e){return JSON.stringify(e)}function pi(e,t){let n=new Set(t);return e.filter(r=>!n.has(r))}function du(e,t={}){let n=(r,i,o)=>({boundary:r,code:i,detail:o});if(t.inputDispatched===!0&&!e.inputDispatched)return n("input","assertion-failed","input was not dispatched");if(t.reducerAccepted===!0&&e.reducerAccepted!==!0)return n("reducer","assertion-failed","host reducer did not accept");if(t.reducerRejected===!0&&e.reducerRejected!==!0)return n("reducer","assertion-failed","host reducer did not reject");if(t.routedTypes){for(let r of t.routedTypes)if(!e.routedTypes.includes(r))return n("routing","assertion-failed",`missing routed type "${r}"`)}if(t.requiredParticipantsPresent===!0&&!e.requiredParticipantsPresent)return n("routing","missing-participant",`missing participants: ${e.missingParticipants.join(", ")}`);if(t.selectedBindingIds){for(let r of t.selectedBindingIds)if(!e.selectedBindingIds.includes(r))return n("binding","assertion-failed",`missing binding "${r}"`)}if(t.sequenceId&&e.sequenceId!==t.sequenceId)return n("cue","assertion-failed",`expected sequence "${t.sequenceId}"`);if(t.requiredLayersPresent===!0&&!e.requiredLayersPresent)return n("pixels","missing-layer",`missing layers: ${e.missingLayers.join(", ")}`);if(t.captions){for(let r of t.captions)if(!e.captions.includes(r))return n("caption","assertion-failed",`missing caption "${r}"`)}return t.audioInvoked===!0&&!e.audioInvoked?n("audio","assertion-failed","audio was not invoked"):t.audioFailed===!0&&!e.audioFailed?n("audio","assertion-failed","audio did not fail as required"):t.audioRestoreOk===!0&&e.audioRestoreOk!==!0?n("audio","invalid-audio-sidecar","audio sidecar was not restored"):t.snapshotOk===!0&&e.snapshotOk!==!0?n("save-replay","assertion-failed","snapshot was not valid"):t.replayMatch===!0&&e.replayMatch!==!0?n("save-replay","assertion-failed","replay traces did not match"):null}function fy(e){let t=e?.viewport==="mobile"?"mobile":"desktop",n=mi[t];return{preset:t,viewport:{width:e?.width??n.width,height:e?.height??n.height,deviceScaleFactor:e?.dpr??n.deviceScaleFactor}}}function my(e){return{type:"host.intent.select",kind:"intent",payload:{id:e}}}function gy(e){return{type:"host.intent.key",kind:"intent",payload:{key:e}}}function Zn(e){return{boundary:"audio",code:"invalid-host-audio",detail:e}}function Qc(e){return!!e&&typeof e=="object"&&typeof e.setReducedMotion=="function"}function hy(e){return!!e&&typeof e=="object"&&typeof e.setReducedSensory=="function"}function yy(e){if(!et(e)||!su(e.kind))return null;let t={kind:e.kind};return typeof e.atFrame=="number"&&Number.isFinite(e.atFrame)&&(t.atFrame=e.atFrame),Ze(e.name)&&(t.name=e.name),typeof e.caption=="string"&&(t.caption=e.caption),Ze(e.assetId)&&(t.assetId=e.assetId),Ze(e.reason)&&(t.reason=e.reason),Ze(e.id)&&(t.id=e.id),Ze(e.correlationId)&&(t.correlationId=e.correlationId),Ze(e.causationId)&&(t.causationId=e.causationId),t}function Zc(e){let t=[];for(let n of e.captions??[])typeof n=="string"&&n.length>0&&!t.includes(n)&&t.push(n);for(let n of e.events)n.caption&&n.caption.length>0&&!t.includes(n.caption)&&t.push(n.caption);return t}function by(e){if(e===void 0)return{ok:!0,supplied:!1,snapshot:{events:[]}};if(!et(e))return{ok:!1,error:Zn("hostAudio must be an object")};let t=e.snapshot,n=e.collect,r=e.inspect,i=typeof t=="function";if(!i&&!(typeof n=="function"))return{ok:!1,error:Zn("hostAudio requires snapshot() or collect()")};try{typeof r=="function"&&r.call(e);let s=i?t.call(e):n.call(e);if(!et(s)||!Array.isArray(s.events))return{ok:!1,error:Zn("hostAudio snapshot.events must be an array")};let a=[];for(let m=0;m<s.events.length;m++){let u=yy(s.events[m]);if(!u)return{ok:!1,error:Zn(`hostAudio snapshot.events[${m}] is invalid`)};a.push(u)}let d={events:a};return Array.isArray(s.captions)&&(d.captions=s.captions.filter(m=>typeof m=="string")),typeof s.muted=="boolean"&&(d.muted=s.muted),{ok:!0,supplied:!0,snapshot:d}}catch(s){let a=s instanceof Error?s.message:String(s);return{ok:!1,error:Zn(`hostAudio inspect failed: ${a}`)}}}function vy(e,t,n,r){return{version:1,cartId:e,seed:t,framesElapsed:n,state:r}}function Sy(){return{version:1,landmarks:[],regions:[]}}function Pt(e,t){return{boundary:"input",code:e,detail:t}}function ky(e,t){if(typeof e=="string")return e.length===0?{ok:!1,error:Pt("invalid-geometry",`controls[${t}] id is required`)}:{ok:!0,control:{id:e}};if(!et(e)||!Ze(e.id))return{ok:!1,error:Pt("invalid-geometry",`controls[${t}] id is required`)};let n={id:e.id};return Ze(e.name)&&(n.name=e.name),Ze(e.role)&&(n.role=e.role),{ok:!0,control:n}}function eu(e,t){if(!Array.isArray(e))return{ok:!1,error:Pt("invalid-geometry","controls must be an array")};let n=[],r=new Set;for(let a=0;a<e.length;a++){let d=ky(e[a],a);if(!d.ok)return d;if(r.has(d.control.id))return{ok:!1,error:Pt("ambiguous-geometry",`duplicate control id "${d.control.id}"`)};r.add(d.control.id),n.push(d.control)}if(!et(t))return{ok:!1,error:Pt("invalid-geometry","geometry document is required")};if(t.version!==1||!Array.isArray(t.landmarks)||!Array.isArray(t.regions))return{ok:!1,error:Pt("invalid-geometry","geometry document is invalid")};let i=Ke(t),o=Id(i);if(!o.ok){let a=o.diagnostics.some(d=>d.code==="overlap"||d.code==="duplicate-id");return{ok:!1,error:Pt(a?"ambiguous-geometry":"invalid-geometry",o.diagnostics.map(d=>d.detail).join("; "))}}let s=new Set(i.regions.map(a=>a.id));for(let a of n)if(!s.has(a.id))return{ok:!1,error:Pt("stale-geometry",`control "${a.id}" has no region in the active geometry`)};return{ok:!0,surface:{controls:n,geometry:i}}}function cu(e){let t=au(e.scenario);if(!t.ok)throw new Error(`createProductionScenarioRunner: ${t.errors.map(K=>K.detail).join("; ")}`);let n=t.scenario,r=n.matrix??{},{preset:i,viewport:o}=fy(r),s=e.host,a=Ke(s.initialState),d=null,m,u,y,k=null,R=null,T=r.reducedMotion===!0,b=null,x=!1,F=[],U=0,O=0,$=e.createId??(()=>`ps-${++U}`),C=e.mapClick??my,p=e.mapKey??gy,E=e.sequenceBindings??{},c=e.origin??0,f=e.semanticRegions&&e.semanticRegions.length>0?fo({originFrame:0,regions:e.semanticRegions}):void 0,h,A,L,w=to({originFrame:0,reducedSensory:r.reducedMotion===!0||r.mute===!0}),B=xr(),G,D=null,l=null,v=[],P=null,_=()=>{},N=()=>{},W=()=>{},j=K=>s.project?s.project(K):Ke(K),H=()=>{let K=new Set,Y=[];for(let se of[...e.geometry?.regions.map(Se=>Se.id)??[],...(e.semanticRegions??[]).map(Se=>Se.id)])K.has(se)||(K.add(se),Y.push({id:se}));return Y},g=K=>{if(s.projectInputSurface){let se;try{se=s.projectInputSurface(K)}catch(Se){let ue=Se instanceof Error?Se.message:String(Se);return{ok:!1,error:Pt("invalid-geometry",`projectInputSurface failed: ${ue}`)}}return et(se)?eu(se.controls,se.geometry):{ok:!1,error:Pt("invalid-geometry","projectInputSurface must return { controls, geometry }")}}let Y=H();return e.geometry?eu(Y,e.geometry):{ok:!0,surface:{controls:Y,geometry:Sy()}}},S=()=>{let K=g(a);if(!K.ok){l=K.error,D=K.error,W(K.error);return}l&&D===l&&(D=null),l=null,v=K.surface.controls.map(Y=>Y.id),P=Ke(K.surface.geometry),N(K.surface.geometry),_(K.surface.controls)},I=K=>G?G.publish(K):ae.group?.publish(K),M=K=>{S();let Y=j(a),se=typeof Y.worldRevision=="string"||typeof Y.worldRevision=="number"?Y.worldRevision:void 0;L?.apply(Y,se!==void 0?{revision:se}:void 0);let Se=K;if(Se&&A){O+=1;let ue=`${n.id}:${Se}:${O}`;A.playSequence(Se,{invocationId:ue,idempotencyKey:ue,bindings:E[Se]??{}})}Z()},q=K=>{let Y=s.reduce(Ke(a),K);d=Y,a=Ke(Y.state);let se=et(K.payload)?K.payload:{};return Y.accepted?I({type:"host.state.accepted",kind:"state",payload:{...se,reason:Y.reason??"accepted"}}):I({type:"host.state.rejected",kind:"state",payload:{...se,reason:Y.reason??"rejected"}}),M(Y.playSequence),Y},X=document.createElement("div");X.setAttribute("aria-live","polite"),X.id="status",X.textContent="";let J=()=>by(e.hostAudio),Z=()=>{let K=A?.inspect().captions.filter(he=>he.visible).map(he=>he.text)??[],Y=typeof a.caption=="string"?a.caption:"",se=J(),Se=se.ok?Zc(se.snapshot):[],ue=Se[Se.length-1]??"";X.textContent=K[0]||Y||ue},Q=()=>{let K=ae.group,Y=ae.compositor,se=K?K.inspectParticipants().map(gt=>gt.id):[],Se=Y?Y.layers().map(gt=>gt.id):[],ue=pi(n.required.participants,se);if(ue.length>0)return{boundary:"routing",code:"missing-participant",detail:`missing participants: ${ue.join(", ")}`};let he=pi(n.required.layers,Se);return he.length>0?{boundary:"pixels",code:"missing-layer",detail:`missing layers: ${he.join(", ")}`}:null},ve=K=>({scenarioId:n.id,seed:n.seed,boundary:K.boundary,reason:K.detail}),Ie=K=>{let Y={type:Is,kind:"diagnostic",payload:{...ve(K),code:K.code}};I(Y),e.router?.publish(Y)},Re=K=>{let Y={type:fi,kind:"state",payload:ve(K)};I(Y),e.router?.publish(Y),Ie(K)},ae=Yc({seed:n.seed,viewport:o,reducedMotion:r.reducedMotion===!0,inputModality:r.inputModality??"pointer",origin:c,createId:$,geometry:e.geometry,semanticLayers:f,contentWidth:e.contentWidth??o.width,contentHeight:e.contentHeight??o.height,mount(K){let Y=new Map;return N=se=>{K.setGeometry(se)},_=se=>{let Se=new Set(se.map(ue=>ue.id));for(let[ue,he]of[...Y])Se.has(ue)||(document.activeElement===he&&he.blur(),he.remove(),Y.delete(ue));for(let ue of se){let he=Y.get(ue.id);he||(he=document.createElement("button"),he.type="button",he.id=ue.id,he.setAttribute("data-testid",ue.id),he.addEventListener("click",()=>{q(C(ue.id))}),K.root.insertBefore(he,X),Y.set(ue.id,he)),he.setAttribute("aria-label",ue.name??ue.id),ue.role?he.setAttribute("role",ue.role):he.removeAttribute("role"),K.placeRegion(ue.id,he)}},K.root.append(X),{participants:e.participants,compositor:{layers:e.compositorLayers},hostState:()=>Ke(a),ready(se){if(se.group&&(G=B.bind(se.group)),se.compositor&&e.visualLayers&&e.visualLayers.length>0){h=no({compositor:se.compositor,originFrame:0,reducedMotion:r.reducedMotion===!0,sceneId:n.id,layers:e.visualLayers});for(let[ue,he]of Object.entries(e.visualSources??{}))h.registerSource(ue,he),h.handleHostEvent({type:ze,kind:"state",payload:{id:ue}})}let Se=[];for(let ue of e.sequences??[]){let he=qn(ue);if(!he.ok)throw new Error(`createProductionScenarioRunner: sequence ${he.errors.map(gt=>gt.detail).join("; ")}`);Se.push(he.sequence)}if(A=Se.length>0?Co({originFrame:0,reducedMotion:r.reducedMotion===!0,reducedSensory:r.mute===!0||r.fallback===!0,audio:w,semantic:f,visual:h,sequences:Se}):void 0,e.bindings!==void 0){let ue=Yr(e.bindings);if(!ue.ok)throw new Error(`createProductionScenarioRunner: ${ue.errors.map(he=>he.detail).join("; ")}`);L=Mo({manifest:ue.manifest,visual:h,semantic:f,sequences:A})}K.root.addEventListener("keydown",ue=>{let he=p(ue.key);he&&q(he)}),M()},relayout(se){for(let[Se,ue]of Y)se.placeRegion(Se,ue)},destroy(){X.remove();for(let se of Y.values())se.remove();Y.clear()}}}}),V=()=>{if(x)throw new Error(ry)};w.unlock(),r.mute===!0&&w.broker.mute();let z=new Set(r.failedAssetIds??[]),ne=new Set([...z]);for(let K of Object.values(E))for(let Y of Object.values(K.assets??{}))Y&&ne.add(Y);for(let K of ne){let Y={type:z.has(K)?We:ze,kind:"state",payload:{id:K}};w.handleHostEvent(Y),h?.handleHostEvent(Y)}if(D=Q(),D||(D=l),!D){let K=J();K.ok||(D=K.error)}W=Re,D&&Re(D);let re=K=>({boundary:"cue",code:"unsupported-preference",detail:K}),oe=K=>{R=re(K),D=R,Re(R)},fe=K=>{let Y=T;T=K,ae.setReducedMotion(K);let se=[{id:"browser",applied:!0,reducedMotion:ae.reproduction().reducedMotion}];h?Qc(h)?(h.setReducedMotion(K),se.push({id:"visual",applied:!0,reducedMotion:h.reducedMotion})):(oe("visual does not support setReducedMotion"),se.push({id:"visual",applied:!1,reason:"setReducedMotion is not supported"})):se.push({id:"visual",applied:!1,reason:"participant-not-mounted"}),A?Qc(A)?(A.setReducedMotion(K),se.push({id:"sequence",applied:!0,reducedMotion:A.reducedMotion})):(oe("sequence does not support setReducedMotion"),se.push({id:"sequence",applied:!1,reason:"setReducedMotion is not supported"})):se.push({id:"sequence",applied:!1,reason:"participant-not-mounted"});let Se=K||w.broker.muted;hy(w)?(w.setReducedSensory(Se),se.push({id:"audio",applied:!0,reducedMotion:K,reducedSensory:w.reducedSensory})):(oe("audio does not support setReducedSensory"),se.push({id:"audio",applied:!1,reason:"setReducedSensory is not supported"})),f?se.push({id:"semantic",applied:!1,reason:"no-reduced-motion-policy"}):se.push({id:"semantic",applied:!1,reason:"participant-not-mounted"});let ue={from:Y,to:K,activeSequencePolicy:ou,participants:se};return b=ue,ue},He=async K=>{G?await G.step(K):await ae.step(K),h?.step(K),A?.step(K),w.step(K),Z()},Le=(K=J())=>{let Y=ae.group,se=ae.compositor,Se=Y?Y.inspectParticipants().map(Pe=>Pe.id):[],ue=se?se.layers().map(Pe=>Pe.id):[],he=pi(n.required.participants,Se),gt=pi(n.required.layers,ue),En=ae.events,Yt=K.ok?K.snapshot:{events:[]},er=K.ok?Zc(Yt):[],In=[...A?.inspect().captions.filter(Pe=>Pe.visible).map(Pe=>Pe.text)??[],...er],Rn=typeof a.caption=="string"?a.caption:"";Rn&&!In.includes(Rn)&&In.push(Rn);let Cn=w.snapshot(),tr=Yt.events,An=ae.screenshot(),lu=F.find(Pe=>Pe.type==="click");return{inputDispatched:F.some(Pe=>Pe.type==="click"||Pe.type==="key"),inputTarget:lu?.selector,reducerAccepted:d?.accepted===!0,reducerRejected:d?d.accepted===!1:void 0,reducerReason:d?.reason,routedTypes:En.map(Pe=>Pe.type),rejected:En.some(Pe=>Pe.type===Tt),selectedBindingIds:L?.inspect().selectedBindingIds??[],sequenceId:A?.inspect().active?.sequenceId??d?.playSequence??null,sequencePhase:A?.inspect().active?.phase??null,captions:In,declaredOrder:An.declaredOrder,requiredParticipantsPresent:he.length===0,requiredLayersPresent:gt.length===0,missingParticipants:he,missingLayers:gt,audioInvoked:Cn.events.some(Pe=>Pe.type==="audio.cue.scheduled"||Pe.type==="audio.cue.started")||tr.some(Pe=>oy.has(Pe.kind)),audioFailed:Cn.events.some(Pe=>Pe.type==="audio.cue.failed")||tr.some(Pe=>Pe.kind==="failed")||(r.failedAssetIds?.length??0)>0,muted:Cn.muted||Yt.muted===!0,replayMatch:u?.ok,snapshotOk:m!==void 0,audioRestoreOk:y,reducedMotion:T,reducedMotionPropagation:b,activeControlIds:v.slice()}},Je=K=>{D=Q();let Y=J();!D&&l&&(D=l),!D&&k&&(D=k),!D&&R&&(D=R),!D&&!Y.ok&&(D=Y.error);let se=Le(Y),Se={requiredParticipantsPresent:!0,requiredLayersPresent:!0,...K},ue=D??du(se,Se),he=ae.screenshot(),gt=ae.accessibilitySnapshot(),En=f?.inspectPublished()??[],Yt=B.records(),er=m?Qn(m):"",In=he.imageData?new Uint8Array(he.imageData.data):new Uint8Array,Rn=Object.keys(e.visualSources??{}).sort(),Cn=typeof a.worldRevision=="string"||typeof a.worldRevision=="number"?a.worldRevision:null,tr={schemaVersion:Ss,scenarioId:n.id,seed:n.seed,matrix:{viewport:i,width:o.width,height:o.height,dpr:o.deviceScaleFactor??1,...r},hashes:{pixels:zt(In),semantic:zt(Qn(En)),a11y:zt(Qn(gt)),trace:zt(Qn(Yt)),snapshot:er?zt(er):"0".repeat(8),assets:zt(Qn(Rn))},revisions:{world:Cn,bindings:L?.inspect().revision??null,snapshot:je},traces:{envelopes:ae.events.slice(),inspector:Yt,audio:w.snapshot().events.slice(),hostAudio:Y.ok?[...Y.snapshot.events]:[],actions:F.slice()},screenshot:{pngDataUrl:he.pngDataUrl,declaredOrder:he.declaredOrder.slice(),width:he.imageData?.width??o.width,height:he.imageData?.height??o.height},semantic:En,a11y:gt,firstBrokenBoundary:ue?.boundary??null,localization:ue,participants:ae.group?.inspectParticipants().map(An=>An.id)??[],layers:ae.compositor?.layers().map(An=>An.id)??[],observation:se};return I({type:ue?fi:Es,kind:"state",payload:{scenarioId:n.id,seed:n.seed,boundary:ue?.boundary,reason:ue?.detail}}),ue&&Ie(ue),tr},Et=()=>({schemaVersion:Ss,host:Ke(a),lastDecision:d?Ke(d):null,visual:h?.snapshot()??null,semantic:f?.snapshot()??null,bindings:L?.snapshot()??null,sequences:A?.snapshot()??null,audio:w.snapshot()}),$t=()=>{let K=Bi({cart:{id:n.id,version:"1"},seed:n.seed,clock:{framesElapsed:0},engineState:vy(n.id,n.seed,0,Ke(a)),hostState:Et(),createdAt:"2026-09-05T00:00:00.000Z"});if(!K.ok)throw new Error(K.errors.map(Y=>Y.detail).join("; "));return m=K.snapshot,K.snapshot},Rs=K=>{let Y=K.hostState;if(!et(Y)||!et(Y.host))throw new Error("Production scenario reload: hostState.host is required");if(Y.audio!==void 0&&Y.audio!==null){let se=$n(Y.audio);if(!se.ok){y=!1,k={boundary:"audio",code:"invalid-audio-sidecar",detail:se.errors[0]?.detail??"audio sidecar is invalid"},D=k,Re(D);return}}else y=!1,k=null;if(a=Ke(Y.host),d=et(Y.lastDecision)?Ke(Y.lastDecision):null,Y.visual&&h&&h.restore(Y.visual),Y.semantic&&f&&f.restore(Y.semantic),Y.bindings&&L&&L.restore(Y.bindings),Y.sequences&&A&&A.restore(Y.sequences),Y.audio!==void 0&&Y.audio!==null){let se=w.restore(Y.audio);if(y=se.ok,!se.ok){k={boundary:"audio",code:"invalid-audio-sidecar",detail:se.errors[0]?.detail??"audio sidecar restore failed"},D=k,Re(D),S(),Z(),m=K;return}k=null}S(),Z(),m=K},Cs=async()=>{let K=ae.group;if(!G||!K)return u={ok:!1,detail:"replay requires a mounted runtime group"},u;let Y=await G.exportTrace(),se=cu({...e,scenario:n,createId:(()=>{let Se=0;return()=>`ps-${++Se}`})()});try{let Se=await Xi(Y,se.harness.group);return u=Yi(Y.records,Se.report.records),Se.inspector.destroy(),u}finally{se.destroy()}},uu=async K=>{switch(F.push(Ke(K)),K.type){case"click":if(typeof K.selector=="string")ae.click(K.selector);else if(typeof K.x=="number"&&typeof K.y=="number")ae.click(K.x,K.y);else throw new Error("click step requires selector or x,y");return;case"key":ae.root.focus(),ae.key(K.key);return;case"focus":ae.focus(K.selector);return;case"step":await He(K.frames);return;case"viewport":{let Y=K.kind==="mobile"?mi.mobile:K.kind==="desktop"?mi.desktop:o;ae.setViewport(K.width??Y.width,K.height??Y.height,K.dpr??Y.deviceScaleFactor);return}case"reducedMotion":fe(K.value);return;case"mute":K.value?w.broker.mute():w.broker.unmute();return;case"failAsset":{let Y={type:We,kind:"state",payload:{id:K.assetId}};w.handleHostEvent(Y),h?.handleHostEvent(Y);return}case"save":$t();return;case"reload":if(!m)throw new Error("reload requires a prior save");Rs(m);return;case"replay":await Cs();return}};return{scenario:n,harness:ae,audio:w,inspector:B,goto(){V(),ae.goto()},click(K,Y){V(),F.push(typeof K=="string"?{type:"click",selector:K}:{type:"click",x:K,y:Y}),ae.click(K,Y)},key(K){V(),F.push({type:"key",key:K}),ae.root.focus(),ae.key(K)},focus(K){V(),F.push({type:"focus",selector:K}),ae.focus(K)},setViewport(K,Y,se){V(),F.push({type:"viewport",width:K,height:Y,dpr:se}),ae.setViewport(K,Y,se)},setReducedMotion(K){V(),F.push({type:"reducedMotion",value:K}),fe(K)},mute(K=!0){V(),F.push({type:"mute",value:K}),K?w.broker.mute():w.broker.unmute()},failAsset(K){V(),F.push({type:"failAsset",assetId:K});let Y={type:We,kind:"state",payload:{id:K}};w.handleHostEvent(Y),h?.handleHostEvent(Y)},async step(K=1){V(),F.push({type:"step",frames:K}),await He(K)},applyHostIntent(K){return V(),q(K)},playSequence(K,Y=`${n.id}:${K}`){V(),A?.playSequence(K,{invocationId:Y,idempotencyKey:Y,bindings:E[K]??{}}),Z()},publish(K){return V(),I(K)},save(){return V(),F.push({type:"save"}),$t()},reload(K){V();let Y=K??m;if(!Y)throw new Error("reload requires a prior save or an explicit snapshot");F.push({type:"reload"}),Rs(Y)},async replay(){return V(),F.push({type:"replay"}),Cs()},async run(K){V(),ae.goto();let Y=K??n.steps??[];for(let se of Y)await uu(se);return Je()},captureEvidence(K){return V(),Je(K)},inspect(){return V(),{host:Ke(a),lastDecision:d,bindings:L?.inspect()??null,sequences:A?.inspect()??null,visual:h?.inspect()??null,semantic:f?.inspect()??null,audio:w.snapshot(),hostAudio:(()=>{let K=J();return K.ok&&K.supplied?K.snapshot:null})(),participants:ae.group?.inspectParticipants().map(K=>K.id)??[],layers:ae.compositor?.layers().map(K=>K.id)??[],composition:(()=>{let K=Q();if(K)return K;if(l)return l;if(R)return R;let Y=J();return Y.ok?null:Y.error})(),reducedMotion:T,reducedMotionPropagation:b,inputSurface:{controlIds:v.slice(),geometry:P?Ke(P):null}}},destroy(){x||(x=!0,G?.unbind(),B.destroy(),L?.destroy(),A?.destroy(),h?.destroy(),f?.destroy(),w.destroy(),ae.destroy())}}}async function MS(e,t){let n=e.captureComposedFrame();if(!t)return n;let{writeFile:r}=await import("node:fs/promises");return await r(t,or(n.pngDataUrl)),{...n,path:t}}export{Nr as AUDIO_CUE_SNAPSHOT_SCHEMA_VERSION,ds as CONTENT_REVISION_ACTIVATED_EVENT,Xn as CONTENT_REVISION_SNAPSHOT_SCHEMA_VERSION,wa as DEFAULT_HEADLESS_HEIGHT,Aa as DEFAULT_HEADLESS_WIDTH,qa as DEFAULT_MAX_SELECTION_RECORDS,mi as DEFAULT_PRODUCTION_SCENARIO_VIEWPORTS,Ca as HEADLESS_PNG_DATA_URL,ru as HOST_OWNED_AUDIO_EVENT_KINDS,Ce as HeadlessUnsupportedOperationError,zr as PRESENTATION_BINDING_APPLIED_EVENT,xo as PRESENTATION_BINDING_SNAPSHOT_SCHEMA_VERSION,nu as PRODUCTION_SCENARIO_BOUNDARIES,vs as PRODUCTION_SCENARIO_SCHEMA_VERSION,Ss as PRODUCTION_SCENARIO_SNAPSHOT_SCHEMA_VERSION,ou as REDUCED_MOTION_ACTIVE_SEQUENCE_POLICY,uy as REDUCED_MOTION_PARTICIPANT_IDS,Ka as SELECTION_DECISION_KINDS,Qi as SELECTION_REASON_CODES,Tr as SELECTION_TRACE_SCHEMA_VERSION,Ga as SELECTION_TRACE_SENSITIVE_KEYS,xa as UPDATE_GOLDEN_ENV,is as WORLD_PATCH_ACCEPTED_EVENT,di as WORLD_PATCH_SNAPSHOT_SCHEMA_VERSION,Oa as assertPixelsEqual,Ol as assertPngDataUrlsEqual,Ei as attachHeadlessCanvas2D,bp as attachSelectionTrace,Jh as benchmarkCartFrames,fg as cabinetPortal,Jp as captureVisualLayers,Da as compareImageData,Yi as compareReplayTraces,Lh as contentRevisionEventContracts,Wh as createContentRevisionActivator,_s as createDefaultGlyphAtlas,to as createHeadlessAudioAdapter,Dl as createHeadlessHarness,xg as createHeadlessJobWorker,ep as createHeadlessMultiCartHarness,bn as createHostGrantSet,gu as createImageFixture,Vg as createJobCoordinator,Sc as createMemoryJobPersistence,Hc as createMemoryWorldPersistence,gg as createPortalLifecycle,Mo as createPresentationBindingRuntime,Co as createPresentationSequencePlayer,cu as createProductionScenarioRunner,rg as createRemoteCartSandbox,Hh as createRemoteContentAdapter,xr as createReplayInspector,vp as createSelectionTrace,fo as createSemanticLayerController,Bh as createStaticContentAdapter,no as createVisualLayerController,th as createWorldGraph,Dh as createWorldPatchApplier,Ii as decodePng,Yr as definePresentationBindings,qn as definePresentationSequence,au as defineProductionScenario,Qt as encodePng,Zt as encodePngDataUrl,Oo as evaluatePresentationBindings,zt as fnv1aHex,zh as formatFrameBenchmarkResult,hu as getHeadlessSurface,Gi as imageDataFromPngDataUrl,Rr as installHeadlessCanvas,su as isHostOwnedAudioEventKind,fp as isSelectionDecisionKind,pp as isSelectionReasonCode,Pg as jobEventContracts,du as localizeProductionScenarioFailure,xt as makeImageData,mg as paintingPortal,$n as parseAudioCueSnapshot,xm as presentationBindingEventContracts,cm as presentationSequenceEventContracts,ly as productionScenarioEventContracts,yp as recordSelectionDecision,Xi as replayExportedTrace,ki as setDefaultGlyphAtlas,Ta as shouldUpdateGolden,eh as worldGraphEventContracts,bh as worldPatchEventContracts,MS as writeComposedFrame,Nl as writeVisualArtifacts};
8
+ var Xu=Object.defineProperty;var ta=(e,t)=>()=>(e&&(t=e(e=0)),t);var Qu=(e,t)=>{for(var n in t)Xu(e,n,{get:t[n],enumerable:!0})};var El={};function Il(e,t){let n=e.indexOf(Ca);if(n===-1)return null;let r=n+Ca.length,o=`const __cyberSkip=new Set(${JSON.stringify(t)});const __cyberOrig=registerProcessor;registerProcessor=(n,p)=>__cyberSkip.has(n)?undefined:__cyberOrig(n,p);`;return e.slice(0,r)+o+e.slice(r)}var Zi,Tr,kl,Gn,Ca,Aa=ta(()=>{"use strict";Zi=/AudioWorkletProcessor with name:\s*["'`][^"'`]+["'`]\s+is already registered/i,Tr="__cyberartWorkletPatchApplied";typeof window<"u"&&!window[Tr]&&(window.addEventListener("error",e=>{let t=e?.message??"";Zi.test(t)&&(e.preventDefault(),e.stopImmediatePropagation())},!0),window.addEventListener("unhandledrejection",e=>{let t=e?.reason,n=typeof t=="string"?t:t?.message??"";Zi.test(n)&&e.preventDefault()}),window[Tr]=!0);kl=!1,Gn=(...e)=>{kl&&console.log("[workletPatch]",...e)},Ca="((AudioWorkletProcessor,registerProcessor)=>{";if(typeof AudioWorklet<"u"&&!AudioWorklet.prototype[Tr]){let e=new WeakMap,t=/registerProcessor\s*\(\s*['"`]([^'"`]+)['"`]/g,n=AudioWorklet.prototype.addModule,r=0;AudioWorklet.prototype.addModule=async function(o,s){let a=++r,d=e.get(this);d||(d=new Set,e.set(this,d)),Gn(`#${a} addModule`,{url:o.slice(0,64),isBlob:o.startsWith("blob:"),knownBefore:[...d]});let m=o,l=null;if(o.startsWith("blob:")){let h=null;try{h=await(await fetch(o)).text()}catch(S){Gn(`#${a} blob fetch failed`,S)}if(h!==null){let S=new Set;for(let C of h.matchAll(t))S.add(C[1]);if(S.size>0){let C=[...S].filter(v=>d.has(v)),T=[...S].filter(v=>!d.has(v));if(C.length>0&&T.length===0){Gn(`#${a} short-circuit \u2014 all processors already registered`,C);return}if(C.length>0&&T.length>0){let v=Il(h,C);if(v!==null){let P=new Blob([v],{type:"application/javascript"});l=URL.createObjectURL(P),m=l,Gn(`#${a} rewrote blob; skipping`,C,"allowing",T)}else Gn(`#${a} blob rewrite failed; passing original through`)}T.forEach(v=>d.add(v))}}}return n.call(this,m,s).then(()=>{l&&URL.revokeObjectURL(l)},h=>{l&&URL.revokeObjectURL(l);let S=(h&&h.message)??"";if(!(Zi.test(S)||/already registered/i.test(S)))throw h})},AudioWorklet.prototype[Tr]=!0}});var Pa={};Qu(Pa,{AUDIO_LIBRARIES:()=>eo,adaptersFor:()=>Mr,importTone:()=>Dr,normalizeAudioLibraries:()=>Or});async function Dr(){let e=await import("tone");if(typeof e.start=="function")return e;let t=e.default;return t&&typeof t.start=="function"?t:e}function Or(e){if(!e)return[];let t=Array.isArray(e)?e:[e],n=[];for(let r of t){if(!(r in eo)){console.warn(`Unknown audio library "${r}"`);continue}let i=r;n.includes(i)||n.push(i)}return n}function Mr(e){return e.map(t=>eo[t])}var wa,eo,to=ta(()=>{"use strict";wa={id:"tone",async load(){await Promise.resolve().then(()=>(Aa(),El))},async unlock(){await wa.load(),await(await Dr()).start()},async resumeIfSuspended(){let e=await Dr();e.context.state==="suspended"&&await e.context.resume()},async suspendIfRunning(){let t=(await Dr()).context.rawContext;"suspend"in t&&t.state==="running"&&await t.suspend()}},eo={tone:wa}});var Ae=class extends Error{constructor(n,r){super(r?`Headless Canvas2D does not support ${n}: ${r}`:`Headless Canvas2D does not support ${n}`);this.name="HeadlessUnsupportedOperationError";this.operation=n}},Ht=class{constructor(t,n,r,i,o,s=0,a=0){this.stops=[];this.kind=t,this.x0=n,this.y0=r,this.x1=i,this.y1=o,this.r0=s,this.r1=a}addColorStop(t,n){if(!Number.isFinite(t)||t<0||t>1)throw new Ae("addColorStop","offset must be in [0, 1]");this.stops.push({offset:t,color:Er(n)}),this.stops.sort((r,i)=>r.offset-i.offset)}colorAt(t){let n=t<0?0:t>1?1:t;if(this.stops.length===0)return{r:0,g:0,b:0,a:0};if(this.stops.length===1||n<=this.stops[0].offset)return this.stops[0].color;let r=this.stops[this.stops.length-1];if(n>=r.offset)return r.color;for(let i=1;i<this.stops.length;i++){let o=this.stops[i],s=this.stops[i-1];if(n<=o.offset){let a=o.offset-s.offset,d=a===0?0:(n-s.offset)/a;return ol(s.color,o.color,d)}}return r.color}},Hi={a:1,b:0,c:0,d:1,e:0,f:0},Zu={black:"#000000",white:"#ffffff",red:"#ff0000",green:"#008000",blue:"#0000ff",cyan:"#00ffff",magenta:"#ff00ff",yellow:"#ffff00",gold:"#ffd700",orange:"#ffa500",navy:"#000080",gray:"#808080",grey:"#808080",transparent:"#00000000"},un=new WeakMap,sa,na=!1,Wi=class{constructor(t,n,r,i){this.context=null;this.onDeviceReset=null;this.canvas=t,this.width=Math.max(0,n|0),this.height=Math.max(0,r|0),this.alpha=i.alpha!==!1,this.pixels=new Uint8ClampedArray(this.width*this.height*4),this.glyphAtlas=i.glyphAtlas??sa??ua(),this.alpha||this.fillOpaqueBlack()}resize(t,n,r=!1){let i=Math.max(0,t|0),o=Math.max(0,n|0);i!==this.width||o!==this.height?(this.width=i,this.height=o,this.pixels=new Uint8ClampedArray(i*o*4)):r&&this.pixels.fill(0),this.alpha||this.fillOpaqueBlack()}fillOpaqueBlack(){let t=this.pixels;for(let n=3;n<t.length;n+=4)t[n]=255}};function el(e,t,n){let r=n??new Uint8ClampedArray(e*t*4);if(r.length!==e*t*4)throw new Ae("createImageFixture","data length must be width*height*4");return{__headlessImage:!0,width:e,height:t,data:r}}function ji(e){sa=e}function tl(e){return un.get(e)}function Ui(e,t={}){let n=un.get(e);if(n?.context)return n.context;let r=Math.max(0,Number(e.width)||0),i=Math.max(0,Number(e.height)||0),o=new Wi(e,r,i,t);un.set(e,o);let s=nl(o);return o.context=s,s}function aa(e){let t=un.get(e);if(t)return t.resize(e.width,e.height,!1),pn(t.width,t.height,t.pixels)}function nl(e){let t={...Hi},n=[],r="#000000",i="#000000",o={r:0,g:0,b:0,a:255},s={r:0,g:0,b:0,a:255},a=1,d="source-over",m=1,l="butt",h="10px sans-serif",S="start",C="alphabetic",T=null,v=!0,P=[],$=null,j=(u,b)=>{$={points:[w(u,b)],closed:!1},P.push($)},O=(u,b)=>{if(!$){j(u,b);return}$.points.push(w(u,b))},F=()=>{if(!$||$.points.length===0)return;$.closed=!0;let u=$.points[0];$.points.push({x:u.x,y:u.y})},w=(u,b)=>({x:t.a*u+t.c*b+t.e,y:t.b*u+t.d*b+t.f}),p=()=>{if(d!=="source-over"&&d!=="copy")throw new Ae("globalCompositeOperation",d)},I=()=>{e.resize(e.canvas.width,e.canvas.height,!1)},c=()=>{t={...Hi},n.length=0,P.length=0,$=null,T=null,r="#000000",i="#000000",o={r:0,g:0,b:0,a:255},s={r:0,g:0,b:0,a:255},a=1,d="source-over",m=1,l="butt",h="10px sans-serif",S="start",C="alphabetic",v=!0};e.onDeviceReset=c;let f=(u,b,x,V=d)=>{if(u<0||b<0||u>=e.width||b>=e.height||T&&T[b*e.width+u]===0)return;let L=(b*e.width+u)*4,W=e.pixels;if(V==="copy"){W[L]=x.r,W[L+1]=x.g,W[L+2]=x.b,W[L+3]=e.alpha?x.a:255;return}let U=Math.round(x.a/255*a*255);if(U<=0)return;if(U>=255){W[L]=x.r,W[L+1]=x.g,W[L+2]=x.b,W[L+3]=255;return}let B=U/255,g=W[L+3]/255,k=B+g*(1-B);if(k<=0){W[L]=0,W[L+1]=0,W[L+2]=0,W[L+3]=e.alpha?0:255;return}W[L]=Math.round((x.r*B+W[L]*g*(1-B))/k),W[L+1]=Math.round((x.g*B+W[L+1]*g*(1-B))/k),W[L+2]=Math.round((x.b*B+W[L+2]*g*(1-B))/k),W[L+3]=e.alpha?Math.round(k*255):255},y=(u,b,x,V)=>{if(!(u instanceof Ht))return b;let L=Ir(t,x+.5,V+.5);return il(u,L.x,L.y)},A=(u,b,x,V,L)=>{p(),I();let W=qi(u,e.width,e.height);if(W)for(let U=W.minY;U<=W.maxY;U++)for(let B=W.minX;B<=W.maxX;B++){let g=B+.5,k=U+.5;ra(u,g,k,V)&&f(B,U,y(b,x,B,U),L)}},D=u=>{p(),I();let b=Math.sqrt(Math.abs(t.a*t.d-t.b*t.c)),x=m*(b===0?1:b)/2,V=qi(u,e.width,e.height,x+1);if(V)for(let L=V.minY;L<=V.maxY;L++)for(let W=V.minX;W<=V.maxX;W++)al(u,W+.5,L+.5,x,l)&&f(W,L,y(i,s,W,L))},R=(u,b)=>{if(u instanceof Ht){b==="fillStyle"?(r=u,o={r:0,g:0,b:0,a:255}):(i=u,s={r:0,g:0,b:0,a:255});return}if(typeof u!="string")throw new Ae(b,String(u));let x=Er(u);b==="fillStyle"?(r=u,o=x):(i=u,s=x)},N={get canvas(){return e.canvas},get fillStyle(){return r},set fillStyle(u){R(u,"fillStyle")},get strokeStyle(){return i},set strokeStyle(u){R(u,"strokeStyle")},get globalAlpha(){return a},set globalAlpha(u){a=da(u)},get globalCompositeOperation(){return d},set globalCompositeOperation(u){if(u!=="source-over"&&u!=="copy")throw new Ae("globalCompositeOperation",u);d=u},get lineWidth(){return m},set lineWidth(u){m=Number.isFinite(u)&&u>0?u:1},get lineCap(){return l},set lineCap(u){if(u!=="butt"&&u!=="round"&&u!=="square")throw new Ae("lineCap",String(u));l=u},get font(){return h},set font(u){h=u},get textAlign(){return S},set textAlign(u){if(u!=="start"&&u!=="left"&&u!=="center"&&u!=="right"&&u!=="end")throw new Ae("textAlign",String(u));S=u},get textBaseline(){return C},set textBaseline(u){C=u},get imageSmoothingEnabled(){return v},set imageSmoothingEnabled(u){v=!!u},imageSmoothingQuality:"low",lineJoin:"miter",miterLimit:10,lineDashOffset:0,shadowBlur:0,shadowColor:"rgba(0, 0, 0, 0)",shadowOffsetX:0,shadowOffsetY:0,setGlyphAtlas(u){e.glyphAtlas=u},save(){n.push({transform:{...t},fillStyle:r,strokeStyle:i,fillStyleRaw:r,strokeStyleRaw:i,globalAlpha:a,globalCompositeOperation:d,lineWidth:m,lineCap:l,font:h,textAlign:S,textBaseline:C,clip:T?T.slice():null,imageSmoothingEnabled:v})},restore(){let u=n.pop();u&&(t=u.transform,r=u.fillStyleRaw,i=u.strokeStyleRaw,r instanceof Ht?o={r:0,g:0,b:0,a:255}:o=Er(r),i instanceof Ht?s={r:0,g:0,b:0,a:255}:s=Er(i),a=u.globalAlpha,d=u.globalCompositeOperation,m=u.lineWidth,l=u.lineCap,h=u.font,S=u.textAlign,C=u.textBaseline,T=u.clip,v=u.imageSmoothingEnabled)},beginPath(){P.length=0,$=null},closePath:F,moveTo:j,lineTo:O,rect(u,b,x,V){j(u,b),O(u+x,b),O(u+x,b+V),O(u,b+V),F()},quadraticCurveTo(u,b,x,V){let L=$?.points[$.points.length-1];if(!L){j(x,V);return}let W=Ir(t,L.x,L.y);cl(W.x,W.y,u,b,x,V,16,(U,B)=>{$.points.push(w(U,B))})},bezierCurveTo(u,b,x,V,L,W){let U=$?.points[$.points.length-1];if(!U){j(L,W);return}let B=Ir(t,U.x,U.y);ul(B.x,B.y,u,b,x,V,L,W,24,(g,k)=>{$.points.push(w(g,k))})},arc(u,b,x,V,L,W=!1){if(x<0)throw new Ae("arc","negative radius");let U=ia(u,b,x,V,L,W);if(U.length===0)return;let B=U[0];$?$.points.push(w(B.x,B.y)):j(B.x,B.y);for(let g=1;g<U.length;g++)$.points.push(w(U[g].x,U[g].y))},ellipse(u,b,x,V,L,W,U,B=!1){if(x<0||V<0)throw new Ae("ellipse","negative radius");let g=ia(0,0,1,W,U,B),k=Math.cos(L),E=Math.sin(L);for(let _=0;_<g.length;_++){let G=g[_].x*x,Z=g[_].y*V,z=u+G*k-Z*E,ne=b+G*E+Z*k;_===0&&!$?j(z,ne):O(z,ne)}},fill(u="nonzero"){A(Bi(P),r,o,u)},stroke(){D(Bi(P))},clip(u="nonzero"){let b=new Uint8Array(e.width*e.height),x=Bi(P),V=qi(x,e.width,e.height);if(V)for(let L=V.minY;L<=V.maxY;L++)for(let W=V.minX;W<=V.maxX;W++)ra(x,W+.5,L+.5,u)&&(b[L*e.width+W]=1);if(!T){T=b;return}for(let L=0;L<T.length;L++)T[L]=T[L]&&b[L]?1:0},fillRect(u,b,x,V){A(q(u,b,x,V),r,o,"nonzero")},strokeRect(u,b,x,V){D(q(u,b,x,V))},clearRect(u,b,x,V){let L=e.alpha?{r:0,g:0,b:0,a:0}:{r:0,g:0,b:0,a:255};A(q(u,b,x,V),"#000000",L,"nonzero","copy")},fillText(u,b,x){M(String(u),b,x,r,o,!0)},strokeText(u,b,x){M(String(u),b,x,i,s,!1)},measureText(u){return{width:oa(String(u),h,e.glyphAtlas)}},translate(u,b){t=kr(t,{a:1,b:0,c:0,d:1,e:u,f:b})},rotate(u){let b=Math.cos(u),x=Math.sin(u);t=kr(t,{a:b,b:x,c:-x,d:b,e:0,f:0})},scale(u,b){t=kr(t,{a:u,b:0,c:0,d:b,e:0,f:0})},transform(u,b,x,V,L,W){t=kr(t,{a:u,b,c:x,d:V,e:L,f:W})},setTransform(u,b,x,V,L,W){if(u&&typeof u=="object"){t={a:u.a,b:u.b,c:u.c,d:u.d,e:u.e,f:u.f};return}t={a:Number(u)||0,b:Number(b)||0,c:Number(x)||0,d:Number(V)||0,e:Number(L)||0,f:Number(W)||0}},resetTransform(){t={...Hi}},getTransform(){return{...t}},createLinearGradient(u,b,x,V){return new Ht("linear",u,b,x,V)},createRadialGradient(u,b,x,V,L,W){if(x<0||W<0)throw new Ae("createRadialGradient","negative radius");return new Ht("radial",u,b,V,L,x,W)},createImageData(u,b){return typeof u=="object"?Ft(new Uint8ClampedArray(u.width*u.height*4),u.width,u.height):Ft(new Uint8ClampedArray(u*(b??0)*4),u,b??0)},getImageData(u,b,x,V){I();let L=u|0,W=b|0,U=x|0,B=V|0,g=new Uint8ClampedArray(U*B*4);for(let k=0;k<B;k++)for(let E=0;E<U;E++){let _=L+E,G=W+k,Z=(k*U+E)*4;if(_<0||G<0||_>=e.width||G>=e.height)continue;let z=(G*e.width+_)*4;g[Z]=e.pixels[z],g[Z+1]=e.pixels[z+1],g[Z+2]=e.pixels[z+2],g[Z+3]=e.pixels[z+3]}return Ft(g,U,B)},putImageData(u,b,x){I();let V=b|0,L=x|0,W=u.data;for(let U=0;U<u.height;U++)for(let B=0;B<u.width;B++){let g=V+B,k=L+U;if(g<0||k<0||g>=e.width||k>=e.height)continue;let E=(U*u.width+B)*4,_=(k*e.width+g)*4;e.pixels[_]=W[E],e.pixels[_+1]=W[E+1],e.pixels[_+2]=W[E+2],e.pixels[_+3]=e.alpha?W[E+3]:255}},drawImage(u,...b){let x=rl(u),V=0,L=0,W=x.width,U=x.height,B,g,k,E;if(b.length===2)B=b[0],g=b[1],k=W,E=U;else if(b.length===4)B=b[0],g=b[1],k=b[2],E=b[3];else if(b.length===8)V=b[0],L=b[1],W=b[2],U=b[3],B=b[4],g=b[5],k=b[6],E=b[7];else throw new Ae("drawImage","invalid argument count");p(),I();let _=[w(B,g),w(B+k,g),w(B+k,g+E),w(B,g+E)],G=Math.max(0,Math.floor(Math.min(..._.map(Q=>Q.x)))),Z=Math.min(e.width-1,Math.ceil(Math.max(..._.map(Q=>Q.x)))),z=Math.max(0,Math.floor(Math.min(..._.map(Q=>Q.y)))),ne=Math.min(e.height-1,Math.ceil(Math.max(..._.map(Q=>Q.y))));for(let Q=z;Q<=ne;Q++)for(let he=G;he<=Z;he++){let ke=Ir(t,he+.5,Q+.5),Ce=(ke.x-B)/k,Pe=(ke.y-g)/E;if(Ce<0||Pe<0||Ce>=1||Pe>=1)continue;let H=Math.floor(V+Ce*W),Y=Math.floor(L+Pe*U);if(H<0||Y<0||H>=x.width||Y>=x.height)continue;let re=(Y*x.width+H)*4;f(he,Q,{r:x.data[re],g:x.data[re+1],b:x.data[re+2],a:x.data[re+3]})}},setLineDash(u){if(u.length>0)throw new Ae("setLineDash","non-empty dash")},getLineDash(){return[]},createPattern(){throw new Ae("createPattern")}};function q(u,b,x,V){let L=w(u,b),W=w(u+x,b),U=w(u+x,b+V),B=w(u,b+V);return[{closed:!0,points:[L,W,U,B,L]}]}function M(u,b,x,V,L,W){p();let U=e.glyphAtlas,B=ca(h),g=B/U.cellHeight,k=oa(u,h,U),E=b;S==="center"?E=b-k/2:(S==="right"||S==="end")&&(E=b-k);let _=x;C==="top"||C==="hanging"?_=x:C==="middle"?_=x-B/2:_=x-B;let G=E,Z=(U.cellWidth+1)*g;for(let z of u){let ne=U.glyphs[z]??U.glyphs[z.toUpperCase()];if(!ne){G+=Z;continue}for(let Q=0;Q<U.cellHeight;Q++)for(let he=0;he<U.cellWidth;he++){if(ne[Q*U.cellWidth+he]===0)continue;if(!W){let qe=he===0||ne[Q*U.cellWidth+he-1]===0,Ye=he===U.cellWidth-1||ne[Q*U.cellWidth+he+1]===0,kt=Q===0||ne[(Q-1)*U.cellWidth+he]===0,zt=Q===U.cellHeight-1||ne[(Q+1)*U.cellWidth+he]===0;if(!qe&&!Ye&&!kt&&!zt)continue}let ke=G+he*g,Ce=_+Q*g,Pe=G+(he+1)*g,H=_+(Q+1)*g,Y=w(ke,Ce),re=w(Pe,H),X=Math.max(0,Math.floor(Math.min(Y.x,re.x))),ee=Math.min(e.width-1,Math.ceil(Math.max(Y.x,re.x))-1),me=Math.max(0,Math.floor(Math.min(Y.y,re.y))),Ue=Math.min(e.height-1,Math.ceil(Math.max(Y.y,re.y))-1);for(let qe=me;qe<=Ue;qe++)for(let Ye=X;Ye<=ee;Ye++)f(Ye,qe,y(V,L,Ye,qe))}G+=Z}}return new Proxy(N,{get(u,b,x){if(Reflect.has(u,b))return Reflect.get(u,b,x);if(typeof b=="symbol")return;let V=String(b);if(!(V==="then"||V==="toJSON"))return(...L)=>{throw new Ae(V)}},set(u,b,x,V){if(b==="shadowBlur"&&x)throw new Ae("shadowBlur");if((b==="shadowOffsetX"||b==="shadowOffsetY")&&x)throw new Ae(String(b));if(b==="filter"&&x&&x!=="none")throw new Ae("filter",String(x));if(Reflect.has(u,b))return Reflect.set(u,b,x,V);throw new Ae(String(b))}})}function rl(e){if(e&&typeof e=="object"&&"__headlessImage"in e){let t=e;return{width:t.width,height:t.height,data:t.data}}if(e&&typeof e=="object"&&"data"in e&&"width"in e&&"height"in e){let t=e;if(t.data instanceof Uint8ClampedArray)return{width:t.width,height:t.height,data:t.data}}if(typeof HTMLCanvasElement<"u"&&e instanceof HTMLCanvasElement){let t=un.get(e);if(!t)throw new Ae("drawImage","source canvas has no headless surface");return{width:t.width,height:t.height,data:t.pixels}}throw new Ae("drawImage","source must be ImageData, a headless canvas, or createImageFixture()")}function il(e,t,n){if(e.kind==="linear"){let s=e.x1-e.x0,a=e.y1-e.y0,d=s*s+a*a,m=d===0?0:((t-e.x0)*s+(n-e.y0)*a)/d;return e.colorAt(m)}let r=Math.hypot(t-e.x1,n-e.y1),i=e.r1-e.r0,o=i===0?0:(r-e.r0)/i;return e.colorAt(o)}function ol(e,t,n){return{r:Math.round(e.r+(t.r-e.r)*n),g:Math.round(e.g+(t.g-e.g)*n),b:Math.round(e.b+(t.b-e.b)*n),a:Math.round(e.a+(t.a-e.a)*n)}}function kr(e,t){return{a:e.a*t.a+e.c*t.b,b:e.b*t.a+e.d*t.b,c:e.a*t.c+e.c*t.d,d:e.b*t.c+e.d*t.d,e:e.a*t.e+e.c*t.f+e.e,f:e.b*t.e+e.d*t.f+e.f}}function Ir(e,t,n){let r=e.a*e.d-e.b*e.c;if(r===0)return{x:t,y:n};let i=e.d/r,o=-e.b/r,s=-e.c/r,a=e.a/r,d=(e.c*e.f-e.d*e.e)/r,m=(e.b*e.e-e.a*e.f)/r;return{x:i*t+s*n+d,y:o*t+a*n+m}}function Bi(e){return e.map(t=>({closed:t.closed,points:t.points.map(n=>({x:n.x,y:n.y}))}))}function qi(e,t,n,r=0){let i=1/0,o=1/0,s=-1/0,a=-1/0;for(let d of e)for(let m of d.points)i=Math.min(i,m.x),o=Math.min(o,m.y),s=Math.max(s,m.x),a=Math.max(a,m.y);return Number.isFinite(i)?{minX:Math.max(0,Math.floor(i-r)),minY:Math.max(0,Math.floor(o-r)),maxX:Math.min(t-1,Math.ceil(s+r)),maxY:Math.min(n-1,Math.ceil(a+r))}:null}function ra(e,t,n,r){let i=0,o=0;for(let s of e){let a=s.points;if(!(a.length<2))for(let d=1;d<a.length;d++){let m=a[d-1],l=a[d],h=sl(m.x,m.y,l.x,l.y,t,n);i+=h,h!==0&&(o+=1)}}return r==="evenodd"?o%2===1:i!==0}function sl(e,t,n,r,i,o){if(t<=o==r<=o)return 0;let s=e+(o-t)/(r-t)*(n-e);return i<s?r>t?1:-1:0}function al(e,t,n,r,i){for(let o of e){let s=o.points;for(let a=1;a<s.length;a++){let d=s[a-1],m=s[a];if(i==="round"){if(dl(t,n,d.x,d.y,m.x,m.y)<=r)return!0;continue}let l=m.x-d.x,h=m.y-d.y,S=Math.hypot(l,h);if(S===0){if(Math.hypot(t-d.x,n-d.y)<=r)return!0;continue}let C=l/S,T=h/S,v=d.x,P=d.y,$=m.x,j=m.y;i==="square"&&(v-=C*r,P-=T*r,$+=C*r,j+=T*r);let O=$-v,F=j-P,w=O*O+F*F,p=((t-v)*O+(n-P)*F)/w;if(p<0||p>1)continue;let I=v+p*O,c=P+p*F;if(Math.hypot(t-I,n-c)<=r)return!0}}return!1}function dl(e,t,n,r,i,o){let s=i-n,a=o-r,d=s*s+a*a;if(d===0)return Math.hypot(e-n,t-r);let m=((e-n)*s+(t-r)*a)/d;return m=m<0?0:m>1?1:m,Math.hypot(e-(n+m*s),t-(r+m*a))}function cl(e,t,n,r,i,o,s,a){for(let d=1;d<=s;d++){let m=d/s,l=1-m;a(l*l*e+2*l*m*n+m*m*i,l*l*t+2*l*m*r+m*m*o)}}function ul(e,t,n,r,i,o,s,a,d,m){for(let l=1;l<=d;l++){let h=l/d,S=1-h,C=S*S,T=h*h;m(C*S*e+3*C*h*n+3*S*T*i+T*h*s,C*S*t+3*C*h*r+3*S*T*o+T*h*a)}}function ia(e,t,n,r,i,o){let s=r,a=i;!o&&a<s&&(a+=Math.PI*2),o&&s<a&&(s+=Math.PI*2);let d=a-s,m=Math.max(8,Math.min(360,Math.ceil(Math.abs(d)*Math.max(n,1)))),l=[];for(let h=0;h<=m;h++){let S=s+d*h/m;l.push({x:e+Math.cos(S)*n,y:t+Math.sin(S)*n})}return l}function da(e){return Number.isFinite(e)?e<0?0:e>1?1:e:1}function Er(e){let t=e.trim().toLowerCase(),r=Zu[t]??t;if(r==="transparent")return{r:0,g:0,b:0,a:0};if(r[0]==="#"){let o=r.slice(1);if(o.length===3)return{r:parseInt(o[0]+o[0],16),g:parseInt(o[1]+o[1],16),b:parseInt(o[2]+o[2],16),a:255};if(o.length===6)return{r:parseInt(o.slice(0,2),16),g:parseInt(o.slice(2,4),16),b:parseInt(o.slice(4,6),16),a:255};if(o.length===8)return{r:parseInt(o.slice(0,2),16),g:parseInt(o.slice(2,4),16),b:parseInt(o.slice(4,6),16),a:parseInt(o.slice(6,8),16)}}let i=r.match(/^rgba?\(\s*([0-9.]+)\s*,\s*([0-9.]+)\s*,\s*([0-9.]+)(?:\s*,\s*([0-9.]+))?\s*\)$/);if(i)return{r:Gi(Number(i[1])),g:Gi(Number(i[2])),b:Gi(Number(i[3])),a:i[4]===void 0?255:Math.round(da(Number(i[4]))*255)};throw new Ae("fillStyle",e)}function Gi(e){return Number.isFinite(e)?e<0?0:e>255?255:Math.round(e):0}function ca(e){let t=e.match(/([0-9]+(?:\.[0-9]+)?)px/);return t?Number(t[1]):10}function oa(e,t,n){let r=ca(t)/n.cellHeight;return e.length*(n.cellWidth+1)*r}function Ft(e,t,n){if(typeof ImageData=="function")try{return new ImageData(e,t,n)}catch{try{let r=new ImageData(t,n);return r.data.set(e),r}catch{}}return{data:e,width:t,height:n,colorSpace:"srgb"}}function ua(){let n={" ":new Uint8Array(35)},r={0:[14,17,19,21,25,17,14],1:[4,12,4,4,4,4,14],2:[14,17,1,2,4,8,31],3:[14,17,1,6,1,17,14],4:[2,6,10,18,31,2,2],5:[31,16,30,1,1,17,14],6:[14,16,30,17,17,17,14],7:[31,1,2,4,8,8,8],8:[14,17,17,14,17,17,14],9:[14,17,17,15,1,1,14],A:[14,17,17,31,17,17,17],B:[30,17,17,30,17,17,30],C:[14,17,16,16,16,17,14],D:[30,17,17,17,17,17,30],E:[31,16,16,30,16,16,31],F:[31,16,16,30,16,16,16],G:[14,17,16,23,17,17,14],H:[17,17,17,31,17,17,17],I:[14,4,4,4,4,4,14],K:[17,18,20,24,20,18,17],L:[16,16,16,16,16,16,31],M:[17,27,21,21,17,17,17],N:[17,25,21,19,17,17,17],O:[14,17,17,17,17,17,14],P:[30,17,17,30,16,16,16],R:[30,17,17,30,20,18,17],S:[15,16,16,14,1,1,30],T:[31,4,4,4,4,4,4],U:[17,17,17,17,17,17,14],V:[17,17,17,17,17,10,4],W:[17,17,17,21,21,21,10],Y:[17,17,10,4,4,4,4],Z:[31,1,2,4,8,16,31],".":[0,0,0,0,0,0,4],"-":[0,0,0,31,0,0,0],"+":[0,4,4,31,4,4,0],"*":[0,21,14,31,14,21,0],"!":[4,4,4,4,4,0,4],"?":[14,17,1,2,4,0,4],"/":[1,2,2,4,8,8,16],":":[0,4,0,0,0,4,0],"\u2713":[1,1,2,2,20,8,0]};for(let[i,o]of Object.entries(r)){let s=new Uint8Array(35);for(let a=0;a<7;a++)for(let d=0;d<5;d++)s[a*5+d]=o[a]&1<<4-d?1:0;n[i]=s,n[i.toLowerCase()]=s}return{cellWidth:5,cellHeight:7,glyphs:n}}var la=new Uint32Array(256);for(let e=0;e<256;e++){let t=e;for(let n=0;n<8;n++)t=t&1?3988292384^t>>>1:t>>>1;la[e]=t>>>0}function ll(e){let t=4294967295;for(let n=0;n<e.length;n++)t=la[(t^e[n])&255]^t>>>8;return(t^4294967295)>>>0}function pl(e){let t=1,n=0;for(let r=0;r<e.length;r++)t=(t+e[r])%65521,n=(n+t)%65521;return(n<<16|t)>>>0}function Hn(e){return new Uint8Array([e>>>24&255,e>>>16&255,e>>>8&255,e&255])}function Ki(e,t){let n=new Uint8Array(8+t.length+4);n.set(Hn(t.length),0),n[4]=e.charCodeAt(0),n[5]=e.charCodeAt(1),n[6]=e.charCodeAt(2),n[7]=e.charCodeAt(3),n.set(t,8);let r=n.subarray(4,8+t.length);return n.set(Hn(ll(r)),8+t.length),n}function fl(e){let t=[];for(let s=0;s<e.length;s+=65535){let a=e.subarray(s,Math.min(s+65535,e.length)),d=s+65535>=e.length,m=new Uint8Array(5+a.length);m[0]=d?1:0,m[1]=a.length&255,m[2]=a.length>>>8&255;let l=~a.length&65535;m[3]=l&255,m[4]=l>>>8&255,m.set(a,5),t.push(m)}t.length===0&&t.push(new Uint8Array([1,0,0,255,255]));let r=t.reduce((s,a)=>s+a.length,0),i=new Uint8Array(2+r+4);i[0]=120,i[1]=1;let o=2;for(let s of t)i.set(s,o),o+=s.length;return i.set(Hn(pl(e)),o),i}function ln(e,t,n){let r=e*4,i=new Uint8Array(t*(1+r));for(let h=0;h<t;h++){let S=h*(1+r);i[S]=0,i.set(n.subarray(h*r,(h+1)*r),S+1)}let o=new Uint8Array(13);o.set(Hn(e),0),o.set(Hn(t),4),o[8]=8,o[9]=6;let s=new Uint8Array([137,80,78,71,13,10,26,10]),a=[Ki("IHDR",o),Ki("IDAT",fl(i)),Ki("IEND",new Uint8Array(0))],d=s.length+a.reduce((h,S)=>h+S.length,0),m=new Uint8Array(d);m.set(s,0);let l=s.length;for(let h of a)m.set(h,l),l+=h.length;return m}function pn(e,t,n){let r=ln(e,t,n),i="";for(let o=0;o<r.length;o++)i+=String.fromCharCode(r[o]);return`data:image/png;base64,${globalThis.btoa(i)}`}function Ji(e){let t=[137,80,78,71,13,10,26,10];for(let m=0;m<8;m++)if(e[m]!==t[m])throw new Ae("decodePng","invalid signature");let n=0,r=0,i=[],o=8;for(;o<e.length;){let m=e[o]<<24|e[o+1]<<16|e[o+2]<<8|e[o+3],l=String.fromCharCode(e[o+4],e[o+5],e[o+6],e[o+7]),h=e.subarray(o+8,o+8+m);if(l==="IHDR"){if(n=h[0]<<24|h[1]<<16|h[2]<<8|h[3],r=h[4]<<24|h[5]<<16|h[6]<<8|h[7],h[8]!==8||h[9]!==6)throw new Ae("decodePng","only 8-bit RGBA is supported")}else if(l==="IDAT")for(let S=0;S<h.length;S++)i.push(h[S]);else if(l==="IEND")break;o+=12+m}let s=ml(new Uint8Array(i)),a=n*4,d=new Uint8ClampedArray(n*r*4);for(let m=0;m<r;m++){let l=m*(1+a);if(s[l]!==0)throw new Ae("decodePng",`unsupported scanline filter ${s[l]}`);d.set(s.subarray(l+1,l+1+a),m*a)}return Ft(d,n,r)}function ml(e){if(e.length<6)throw new Ae("decodePng","truncated zlib");let t=[],n=2;for(;n<e.length-4;){let s=e[n]&1;if((e[n]>>>1&3)!==0)throw new Ae("decodePng","only stored deflate blocks are supported");n+=1;let d=e[n]|e[n+1]<<8;if(n+=4,t.push(e.subarray(n,n+d)),n+=d,s)break}let r=t.reduce((s,a)=>s+a.length,0),i=new Uint8Array(r),o=0;for(let s of t)i.set(s,o),o+=s.length;return i}function Rr(e){let t=e.indexOf(","),n=t>=0?e.slice(t+1):e,r=globalThis.atob(n),i=new Uint8Array(r.length);for(let o=0;o<r.length;o++)i[o]=r.charCodeAt(o);return i}function pa(){if(!na){na=!0;for(let e of["width","height"]){let t=Object.getOwnPropertyDescriptor(HTMLCanvasElement.prototype,e);if(!t?.set||!t.get)continue;let n=t.set;Object.defineProperty(HTMLCanvasElement.prototype,e,{configurable:!0,enumerable:t.enumerable,get:t.get,set(r){n.call(this,r);let i=un.get(this);i&&(i.resize(this.width,this.height,!0),i.onDeviceReset?.())}})}}}var fa=()=>{let e=["ms","moz","webkit","o"];for(let t=0;t<e.length&&!window.requestAnimationFrame;++t)window.requestAnimationFrame=window[e[t]+"RequestAnimationFrame"],window.cancelAnimationFrame=window[e[t]+"CancelAnimationFrame"]||window[e[t]+"CancelRequestAnimationFrame"]},ut=window.devicePixelRatio||1,fn=/Headless/i.test(navigator.userAgent),Mb=/Android|webOS|iPhone|iPad|iPod|BlackBerry/i.test(navigator.userAgent)||/Android|webOS|iPhone|iPad|iPod|BlackBerry/i.test(navigator.platform);function ma(){return Math.min(window.innerWidth,window.innerHeight)}var zi="data-cyberart-canvas",mn=class{constructor(t,n,r=1,i={}){this.width=t,this.height=n;let o=i.container,s=i.adoptFromDocument??!o,a=o?o.querySelector(`canvas[${zi}]`)??o.querySelector("canvas"):null;if(a)this.canvas=a,this.adopted=!0;else if(s){let d=document.getElementById("canvas")??document.querySelector("canvas");d?(this.canvas=d,this.adopted=!0):(this.canvas=document.createElement("canvas"),this.canvas.setAttribute("id","canvas"),this.adopted=!1)}else this.canvas=document.createElement("canvas"),this.adopted=!1;this.canvas.hasAttribute(zi)||this.canvas.setAttribute(zi,""),this.canvas.style.display="block",this.canvas.style.margin="auto",this.ctx=this.canvas.getContext("2d",{colorSpace:"display-p3",alpha:!1}),this.ctx.globalAlpha=r,this.ctx.imageSmoothingEnabled=!1,this.setSize(t,n)}setSize(t,n){this.width=t,this.height=n,this.canvas.width=t,this.canvas.height=n,this.canvas.style.width=`${t/ut}px`,this.canvas.style.height=`${n/ut}px`,this.imageData=this.ctx.createImageData(t,n),this.ctx.putImageData(this.imageData,0,0)}_blank(t=1){let n=t?Math.max(t,.03):1;this.ctx.fillStyle=`rgba(0,0,0,${n})`,this.ctx.fillRect(0,0,this.width,this.height)}clearAll(){this.ctx.save(),this.ctx.globalAlpha=1,this._blank(),this.ctx.restore()}};function Cr(e,t){let n=e/t,r,i;return n>1?(r=e,i=~~(e/n)):(i=t,r=~~(t*n)),{width:r,height:i,iWidth:1/r,iHeight:1/i,area:r*i,largeDim:Math.max(r,i),smallDim:Math.min(r,i),aspectRatio:n}}function ga(e,t=window.innerWidth,n=window.innerHeight){let r=ma(),i,o;return n<t?e>1?t>=r*e?(i=r*e,o=r):(i=t,o=i/e):(i=r*e,o=r):e>1?(i=r,o=r/e):n<r/e?(o=n,i=o*e):(i=r,o=r/e),[i,o]}var Yi=class{constructor(t=!1,n=!0){this.debugMode=t,this.actionMap={},this.listening=n,this.checkKeypress=this.checkKeypress.bind(this),this.registerAction=this.registerAction.bind(this),this.listening&&window.addEventListener("keydown",this.checkKeypress,!1)}checkKeypress({key:t}){this.debugMode&&console.log(`Pressed ${t}`),t in this.actionMap&&this.actionMap[t]()}inject(t){this.checkKeypress({key:t})}registerAction(t,n,r=!1){if(t.length!==1)throw new Error(`Only single-character actions may be registered. Cannot register: ${t}`);if(t in this.actionMap&&!r)throw new Error(`Action already exists for code: ${t}`);this.actionMap[t]=n}destroy(){this.listening&&window.removeEventListener("keydown",this.checkKeypress,!1),this.actionMap={}}},Ar=Yi;var Xi=class{constructor(t,n={}){this.x=-1;this.y=-1;this.isDown=!1;this.clicks=[];this.canvas=t,this.listening=n.listen!==!1,this.onPointerDown=this.onPointerDown.bind(this),this.onPointerMove=this.onPointerMove.bind(this),this.onPointerUp=this.onPointerUp.bind(this),this.listening&&(t.addEventListener("pointerdown",this.onPointerDown),t.addEventListener("pointermove",this.onPointerMove),t.addEventListener("pointerup",this.onPointerUp))}toCanvasCoords(t){let n=this.canvas.getBoundingClientRect();return{x:(t.clientX-n.left)*(this.canvas.width/n.width),y:(t.clientY-n.top)*(this.canvas.height/n.height)}}onPointerDown(t){let{x:n,y:r}=this.toCanvasCoords(t);this.x=n,this.y=r,this.isDown=!0,this.clicks.push({x:n,y:r})}onPointerMove(t){let{x:n,y:r}=this.toCanvasCoords(t);this.x=n,this.y=r}onPointerUp(t){let{x:n,y:r}=this.toCanvasCoords(t);this.x=n,this.y=r,this.isDown=!1}hasClick(){return this.clicks.length>0}consumeClick(){return this.clicks.shift()??null}inject(t,n,r){this.x=n,this.y=r,t==="down"?(this.isDown=!0,this.clicks.push({x:n,y:r})):t==="up"&&(this.isDown=!1)}destroy(){this.listening&&(this.canvas.removeEventListener("pointerdown",this.onPointerDown),this.canvas.removeEventListener("pointermove",this.onPointerMove),this.canvas.removeEventListener("pointerup",this.onPointerUp))}},ha=Xi;function wr(){return{now:()=>performance.now()}}function ya(e=0){let t=e;return{now:()=>t,set(n){t=n},advance(n){t+=n}}}var Bn=(e,t,n,r)=>({now:e,startTime:t,elapsedSinceStart:e-t,deltaSinceLastUpdate:n===null?0:e-n,deltaSinceLastRender:r===null?0:e-r}),Pr=class{constructor(t,n,r,i,o,s={}){this.startTime=0;this.lastUpdateAt=null;this.lastRenderAt=null;this.clockOffsetMs=0;this.pauseStartedAt=null;this.renderAnimation=this.renderAnimation.bind(this),this.dimensionContext=Cr(t,n),this.R=r,this.gameManager=s.gameManager,this.hostChannel=s.hostChannel,this.clock=s.clock??wr(),this.kind=s.kind??"render",this.keyboardManager=new Ar(!1,s.captureKeyboard??!0),this.kind!=="calculation"&&(this.canvas=new mn(this.dimensionContext.width,this.dimensionContext.height,1,s.canvasMount),this.drawingContext=this.canvas.ctx,this.pointerManager=new ha(this.canvas.canvas,{listen:s.listenToPointer!==!1})),this.animationCart=o;let a=s.customState;this.featureState=o.getDefaultFeatureState?.(this.R,this.dimensionContext,i,this.keyboardManager,a,this.pointerManager,this.gameManager,this.hostChannel),this.cartState=o.getDefaultState(this.R,this.dimensionContext,i,this.keyboardManager,a,this.pointerManager,this.gameManager,this.featureState,this.hostChannel),this.startTime=this.clock.now(),this.canvas?.clearAll()}captureFramebuffer(){let t=this.canvas?.imageData;if(!t)return new ImageData(this.dimensionContext.width,this.dimensionContext.height);let n=new ImageData(t.width,t.height);return n.data.set(t.data),n}restoreFramebuffer(t){let n=this.canvas?.imageData,r=this.drawingContext;return!n||!r||n.width!==t.width||n.height!==t.height||n.data.length!==t.data.length?!1:(n.data.set(t.data),r.putImageData(n,0,0),!0)}setPaused(t){let n=this.clock.now();if(t){this.pauseStartedAt===null&&(this.pauseStartedAt=n);return}this.pauseStartedAt!==null&&(this.clockOffsetMs+=n-this.pauseStartedAt,this.pauseStartedAt=null)}resolveNow(t){let n=this.pauseStartedAt!==null?t-this.pauseStartedAt:0;return t-this.clockOffsetMs-n}getElapsedSinceStart(t=this.clock.now()){return Math.max(0,this.resolveNow(t)-this.startTime)}restoreClock(t,n){this.pauseStartedAt=null,this.lastUpdateAt=null,this.lastRenderAt=null;let r=Math.max(0,t);if(typeof n=="number"&&Number.isFinite(n)){this.startTime=n,this.clockOffsetMs=this.clock.now()-n-r;return}this.clockOffsetMs=0,this.startTime=this.clock.now()-r}getRandomState(){return this.R.getState()}injectKey(t){this.keyboardManager.inject(t)}injectPointer(t,n,r){this.pointerManager?.inject(t,n,r)}async updateAnimationState(t,n,r=this.clock.now()){let i=this.resolveNow(r),o=Bn(i,this.startTime,this.lastUpdateAt,this.lastRenderAt);this.cartState=this.animationCart.update(this.R,t,n,this.dimensionContext,this.cartState,this.keyboardManager,this.pointerManager,this.gameManager,o,this.featureState,this.hostChannel),this.lastUpdateAt=i}async renderAnimation(t,n,r=this.clock.now()){let i=this.resolveNow(r),o=Bn(i,this.startTime,this.lastUpdateAt,this.lastRenderAt),s=this.drawingContext,a=this.canvas?.imageData;this.kind!=="calculation"&&this.animationCart.render&&s&&a&&this.animationCart.render(this.R,t,n,this.dimensionContext,this.cartState,s,a,this.pointerManager,this.gameManager,o,this.featureState,this.hostChannel),this.lastRenderAt=i}getCanvas(){return this.canvas?.canvas}getDrawDetails(){let t=this.canvas?.canvas;if(!t)throw new Error("calculation cart has no canvas");return[t,0,0,this.dimensionContext.width,this.dimensionContext.height]}teardown(){try{this.animationCart.teardown?.(this.cartState,this.featureState)}catch(t){console.error("Error during cart teardown",t)}this.keyboardManager.destroy(),this.pointerManager?.destroy()}};var xr=class extends mn{constructor(t,n,r=1,i=!0,o={}){if(super(t,n,r,o),this.adopted)return;let s=o.container;if(s){this.canvas.parentNode!==s&&s.appendChild(this.canvas);return}if(i){let a=document.getElementById("canvas");a&&a!==this.canvas&&a.parentNode===document.body&&document.body.removeChild(a),document.body.appendChild(this.canvas)}}};function ba(e){let t=parseInt(e.substring(0,8),16),n=parseInt(e.substring(8,8),16),r=parseInt(e.substring(16,8),16),i=parseInt(e.substring(24,8),16);return{next:()=>{t|=0,n|=0,r|=0,i|=0;let s=(t+n|0)+i|0;return i=i+1|0,t=n^n>>>9,n=r+(r<<3)|0,r=r<<21|r>>>11,r=r+s|0,(s>>>0)/4294967296},getRegs:()=>({a:t,b:n,c:r,d:i}),setRegs:s=>{t=s.a,n=s.b,r=s.c,i=s.d}}}var Bt=class{constructor(t){this.seed=t.hash,this.useA=!1,this.genA=ba(t.hash.substring(2,32)),this.genB=ba(t.hash.substring(34,32)),this.prngA=this.genA.next,this.prngB=this.genB.next;for(let n=0;n<1e6;n+=2)this.prngA(),this.prngB()}getState(){let t=this.genA.getRegs(),n=this.genB.getRegs();return{seed:this.seed,useA:this.useA,prngA:{a:t.a,b:t.b,c:t.c,d:t.d},prngB:{a:n.a,b:n.b,c:n.c,d:n.d}}}setState(t){if(t.seed!==this.seed)throw new Error(`Random.setState: seed ${t.seed} does not match ${this.seed}`);this.useA=t.useA,this.genA.setRegs(t.prngA),this.genB.setRegs(t.prngB)}r_zero_one(){return this.useA=!this.useA,this.useA?this.prngA():this.prngB()}dec(t,n){return t===void 0?this.r_zero_one():n===void 0?t*this.r_zero_one():t+(n-t)*this.r_zero_one()}int(t,n){return n===void 0&&(n=t,t=0),Math.floor(this.dec(t,n))}bool(t=.5){return this.r_zero_one()<t}sign(){return this.bool()?1:-1}choose(t){return t[this.int(t.length)]}};var ka="bafybeicjwcq5lxxtfnyj4p2ugcr7ctyb5wl62cbcechj6tsabdq5whcs7u",va="https://salmon-just-firefly-671.mypinata.cloud/ipfs/";function gl(e){return e.endsWith("/")?e:`${e}/`}var qn=null;function hl(e){return[...Array(e)].map(()=>Math.floor(Math.random()*16).toString(16)).join("")}function yl(e){return e&&e.length>0?e:[{cid:ka}]}function bl(e){return e.startsWith("0x")?e:`0x${e}`}var Ia=/^(0[xX])?[0-9a-fA-F]{64}$/;function vl(e){let t="",n=2166136261,r=522970236;for(let i=0;t.length<64;i++){for(let o=0;o<e.length;o++)n^=e.charCodeAt(o)+i,n=Math.imul(n,16777619),r^=e.charCodeAt(o)+i*17,r=Math.imul(r,16777619);t+=(n>>>0).toString(16).padStart(8,"0"),t+=(r>>>0).toString(16).padStart(8,"0")}return`0x${t.slice(0,64)}`}function Sa(e){let t=typeof e=="number"?String(e):e;return Ia.test(t)?`0x${(t.startsWith("0x")||t.startsWith("0X")?t.slice(2):t).toLowerCase()}`:vl(t)}function Ea(e,t){if(typeof e=="number"||t==="deterministic")return Sa(e);let n=String(e);return Ia.test(n)?Sa(n):n.startsWith("0x")||n.startsWith("0X")?n:`0x${n}`}function Sl(e){if(!e&&typeof tokenData<"u"&&tokenData?.hash)return{hash:tokenData.hash,tokenId:String(tokenData.tokenId),externalAssetDependencies:yl(tokenData.externalAssetDependencies),preferredIPFSGateway:gl(tokenData.preferredIPFSGateway||va),preferredArweaveGateway:tokenData.preferredArweaveGateway};let t=typeof window<"u"?new URLSearchParams(window.location.search):new URLSearchParams;return{hash:e?bl(e):t.get("hash")||`0x${hl(64)}`,tokenId:"18009999",externalAssetDependencies:[{cid:ka}],preferredIPFSGateway:va}}function Qi(e){let t=e?.useCache!==!1;if(t&&qn&&!e?.hash)return qn;let n=Sl(e?.hash);return t?qn=n:qn||(qn=n),n}function Ra(e){return new Array(32).fill(null).map((t,n)=>parseInt(e.hash.slice(2+n*2,4+n*2),16))}to();var Nr="$cyberartTa",Xe=class extends Error{constructor(t){super(t),this.name="IncompatibleCartStateError"}},no={Float32Array,Float64Array,Int8Array,Int16Array,Int32Array,Uint8Array,Uint8ClampedArray,Uint16Array,Uint32Array};function Rl(e){for(let t of Object.keys(no))if(e instanceof no[t])return t}function Da(e){return ArrayBuffer.isView(e)&&!(e instanceof DataView)}function ht(e){if(e===null||typeof e!="object"||Array.isArray(e))return!1;let t=Object.getPrototypeOf(e);return t===Object.prototype||t===null}function ro(e){return ht(e)?typeof e[Nr]=="string"&&Array.isArray(e.d):!1}function Cl(e){return e==null?!1:typeof e=="function"?!0:!(typeof e!="object"||Array.isArray(e)||Da(e)||ht(e))}var Al=new Set(["audioContextStarted","midiSynths","keepRatioPrimed","audioInitStarted","musicSeekApplied"]);function xa(e){return e===null?"null":ro(e)?String(e[Nr]):Array.isArray(e)?"array":ht(e)?"object":typeof e}function wl(e,t){return e===t||e==="null"||t==="null"}function Ta(e){return e.trim().toLowerCase().replace(/^0x/,"")}function Oa(e,t,n,r){if(!(!n&&!r)&&Ta(e)!==Ta(t))throw new Xe(`Generative cart state is for seed "${t}", but the live token is "${e}"`)}function gn(e){return typeof e=="number"&&Number.isFinite(e)&&e>0}function Ma(e,t){let n=e.dimensions;if(n&&gn(n.width)&&gn(n.height))return n;if(t&&gn(t.width)&&gn(t.height))return{width:t.width,height:t.height};if(ht(e.state)){let r=e.state.containerWidth,i=e.state.containerHeight;if(gn(r)&&gn(i))return{width:r,height:i}}return null}function hn(e,t=new WeakSet){if(e===null||typeof e=="string"||typeof e=="boolean")return e;if(typeof e=="number")return Number.isFinite(e)?e:null;if(!(typeof e=="function"||typeof e>"u"||typeof e=="bigint"||typeof e=="symbol")){if(Da(e)){let n=Rl(e);return n?{[Nr]:n,d:Array.from(e)}:void 0}if(typeof e=="object"&&!t.has(e)){t.add(e);try{if(Array.isArray(e)){let i=[],o=0;for(let s of e){let a=hn(s,t);a!==void 0&&(i.push(a),o++)}return e.length>0&&o===0?void 0:i}if(!ht(e)||Cl(e))return;let n=Object.keys(e),r={};for(let i of n){if(Al.has(i))continue;let o=hn(e[i],t);o!==void 0&&(r[i]=o)}return n.length>0&&Object.keys(r).length===0?void 0:r}finally{t.delete(e)}}}}function Kn(e){if(ro(e)){let t=no[e[Nr]];return t?new t(e.d.map(n=>Number(n))):e}if(Array.isArray(e))return e.map(t=>Kn(t));if(ht(e)){let t={};for(let n of Object.keys(e))t[n]=Kn(e[n]);return t}return e}function io(e,t,n,r,i=!0){if(i&&n&&r&&n!==r)throw new Xe(`Cart state is for "${r}", but the live cart is "${n}"`);if(!ht(t)){if(i)throw new Xe("Cart state snapshot is empty");return}let o=Object.keys(t);if(o.length===0){if(i)throw new Xe("Cart state snapshot is empty");return}let s=hn(e);if(!ht(s)||Object.keys(s).length===0){if(i)throw new Xe("Live cart has no serializable state");return}let a=o.filter(d=>d in s);if(a.length===0){if(i)throw new Xe("Cart state snapshot does not overlap the live cart shape");return}for(let d of a){let m=xa(s[d]),l=xa(t[d]);if(!wl(m,l))throw new Xe(`Cart state field "${d}" has type ${l}, live cart expects ${m}`);if(m==="object"){let h=t[d],S=e[d];ht(h)&&!ro(h)&&io(S,h,void 0,void 0,!1)}}}function Na(e,t){if(!ht(e)||!ht(t))return;let n=hn(e);if(ht(n))for(let r of Object.keys(t))r in n&&(e[r]=Kn(t[r]))}function Mt(e){let t=typeof e=="string"?JSON.parse(e):e;if(!t||typeof t!="object")throw new Xe("Cart state bundle is not an object");if(t.version!==1)throw new Xe(`Unsupported cart state version ${String(t.version)}`);if(typeof t.seed!="string"||typeof t.framesElapsed!="number")throw new Xe("Cart state bundle is missing seed or framesElapsed");return t}var nt="cyberart.asset.ready",Qe="cyberart.asset.failed";function qt(e){try{return JSON.parse(JSON.stringify(e))}catch{return e}}function _a(e){return{type:e.status==="ready"?nt:Qe,kind:"state",payload:e.detail===void 0?{id:e.id}:{id:e.id,detail:e.detail}}}function xl(e){if(!e||typeof e!="object")return 0;let t=e;return typeof t.startTime=="number"&&typeof t.lastSimulationUpdateAt=="number"?Math.max(0,t.lastSimulationUpdateAt-t.startTime):0}function Tl(e,t){if(typeof window.resizeTo!="function")return!1;try{if(window.top!==window)return!1}catch{return!1}let n=Math.max(1,Math.round(e)),r=Math.max(1,Math.round(t)),i=Math.max(0,window.outerWidth-window.innerWidth),o=Math.max(0,window.outerHeight-window.innerHeight);try{window.resizeTo(n+i,r+o)}catch{return!1}return Math.abs(window.innerWidth-n)<=8&&Math.abs(window.innerHeight-r)<=8}var Dl=[[0,0],[16,9],[9,16],[4,3],[3,4],[2,1],[1,2],[3,1],[1,3],[1,1]],so=Dl[0],Ol=so[0]/so[1],oo=30,Ml=120,Nl=3840/2160,_l=2160/3840,_r=class{constructor(t=oo,n=!1,r=window.innerWidth,i=window.innerHeight,o=!0,s,a={}){this.framesElapsed=0;this.frameRate=oo;this._paused=!1;this.savedToken=!1;this.prepared=!1;this.loopRunning=!1;this.fallbackAudio=[];this.audioLibrariesInternal=[];this.virtualClock=null;this.scriptedActions=[];this.initialScriptedActions=[];this.appliedActions=[];this.consumedActionIndexes=new Set;this.outboundEvents=[];this.consecutiveErrorCount=0;this.lastErrorLogAt=0;this.reinitStayPaused=!1;this.reinitPending=!1;this.lastExportedFramebuffer=null;this.pinnedOutput=null;this.pinViewportAtImport=null;this.importing=!1;this.drawLoop=this.drawLoop.bind(this),this.loadCart=this.loadCart.bind(this),this.prepareCart=this.prepareCart.bind(this),this.beginPlayback=this.beginPlayback.bind(this),this.reinit=this.reinit.bind(this),this.tuneFramerate=this.tuneFramerate.bind(this),this.container=a.container,this.seed=a.seed,this.captureKeyboard=a.captureKeyboard??!0,this.customState=a.customState,this.hostChannel=a.hostChannel,this.fallbackAudio=Or(a.audio),this.audioLibrariesInternal=this.fallbackAudio,this.kind=a.kind??"render",this.onFrameTiming=a.onFrameTiming;let d=a.deterministic;this.deterministic=!!d;let m=d&&typeof d=="object"?d:{};if(this.deterministic){if(a.clock){let l=a.clock;if(typeof l.advance!="function")throw new Error("deterministic mode requires a virtual clock with advance()");this.virtualClock=l,this.clock=l}else this.virtualClock=ya(m.origin??0),this.clock=this.virtualClock;this.initialScriptedActions=qt(m.actions??[]),this.scriptedActions=qt(this.initialScriptedActions)}else this.clock=a.clock??wr();this.isBodyCanvas=this.container?!1:o,this.autoMode=n,this.aspectRatio=Ol,this.selectedAsp=so,this.isFullscreen=!!document.fullscreenElement,this.updateFrameRate(t),this.tempUnpause=!1,this.synchronous=fn,this.containerWidth=r,this.containerHeight=i,this.gameManager=s,this.init(!0)}setGameManager(t){this.gameManager=t}reinit(t){if(!this.importing){if(this.shouldKeepPinnedOutput()){this.fitPinnedCanvas();return}this.reinitPending||(this.reinitStayPaused=this._paused,this.reinitPending=!0),this.paused=!0,clearTimeout(this.reinitTimeout),this.reinitTimeout=setTimeout(()=>{if(this.importing){this.paused=this.reinitStayPaused,this.reinitPending=!1;return}this.updateInProgress?this.reinit(t):(this.requestedAnimationFrame&&cancelAnimationFrame(this.requestedAnimationFrame),this.clearPinnedOutput(),this.init(),this.reloadCart(),this.paused=this.reinitStayPaused,this.reinitPending=!1)},150)}}initSeed(){this.tokenData=this.seed?Qi({hash:this.seed,useCache:!1}):Qi(),this.rawParams=Ra(this.tokenData),this.mintNo=parseInt(this.tokenData.tokenId)%1e6,console.log("token",this.mintNo,this.tokenData.hash)}init(t=!1){t&&this.initSeed(),this.pureAspectUpdate(this.selectedAsp);let n=this.aspectRatio,[r,i]=ga(n,this.containerWidth,this.containerHeight);r*=ut,i*=ut,this.width=~~r,this.height=~~i,this.atCenterX=this.width/2,this.atCenterY=this.height/2,this.kind!=="calculation"&&(this.mainCanvas?this.mainCanvas.setSize(this.width,this.height):this.mainCanvas=new xr(this.width,this.height,1,this.isBodyCanvas,this.canvasMountOptions()))}loadCart(t){this.prepareCart(t)&&this.beginPlayback()}prepareCart(t){if(this.prepared)return!0;try{let n=~~(this.width/1),r=~~(this.height/this.width*n),i=new Bt(this.tokenData),o=new Pr(n,r,i,this.rawParams,t,{gameManager:this.gameManager,canvasMount:this.canvasMountOptions(),customState:this.customState,captureKeyboard:this.deterministic?!1:this.captureKeyboard,hostChannel:this.hostChannel,clock:this.clock,listenToPointer:!this.deterministic,kind:this.kind});return this.animation=o,this.animationCart=t,this.paused=!1,this.framesElapsed=0,this.outboundEvents=[],this.scriptedActions=qt(this.initialScriptedActions),this.appliedActions=[],this.consumedActionIndexes=new Set,this.outboundUnsubscribe?.(),this.outboundUnsubscribe=void 0,this.deterministic&&this.hostChannel&&(this.outboundUnsubscribe=this.hostChannel.onEvent(s=>{this.outboundEvents.push(s)})),this.R=i,this.applyCartFrameRate(t,o),this.resolveAudioLibraries(t),this.prepared=!0,!0}catch(n){return console.error(n),!1}}applyCartFrameRate(t,n){let r=t.metadata,i=r?.frameRate??oo,o=n.cartState?.visualMode??n.featureState?.visualMode,s=o&&r?.frameRateByVisualMode?r.frameRateByVisualMode[o]:void 0;this.updateFrameRate(typeof s=="number"&&s>0?s:i)}get audioLibraries(){return this.audioLibrariesInternal}get needsAudio(){return this.audioLibrariesInternal.length>0}resolveAudioLibraries(t){this.audioLibrariesInternal=Or(t.metadata?.audio)}async unlockAudio(){if(this.audioLibrariesInternal.length===0)return;let t=Mr(this.audioLibrariesInternal);if(fn){for(let n of t)await n.load();return}for(let n of t)await n.unlock()}async resumeAudioLibraries(){if(!(this.paused||fn))for(let t of Mr(this.audioLibrariesInternal))try{await t.resumeIfSuspended()}catch(n){console.error(`Failed to resume audio library "${t.id}" after reload`,n)}}beginPlayback(){!this.prepared||this.loopRunning||(this.prepared=!1,this.loopRunning=!0,this.consecutiveErrorCount=0,!this.deterministic&&(this.requestedAnimationFrame=requestAnimationFrame(this.drawLoop)))}get isPrepared(){return this.prepared}get isLoopRunning(){return this.loopRunning}get isDeterministic(){return this.deterministic}getClock(){return{now:this.clock.now(),framesElapsed:this.framesElapsed,frameRate:this.frameRate}}getRandomState(){return this.requirePreparedAnimation().getRandomState()}schedule(t){this.scriptedActions.push(qt(t))}async getReplayMetadata(){let t=await this.exportState();return{seed:this.tokenData.hash,clock:this.getClock(),rng:this.getRandomState(),actions:qt(this.scriptedActions),applied:qt(this.appliedActions),events:qt(this.outboundEvents),state:t.state}}async step(t=1){if(!this.deterministic)throw new Error("step() requires createRuntime({ deterministic: true })");this.requirePreparedAnimation(),this.prepared&&!this.loopRunning&&this.beginPlayback(),this.paused=!1;let n=Math.max(0,Math.floor(t));for(let r=0;r<n&&this.animation;r++){let i=this.framesElapsed;if(this.applyScheduledActions(i),await this.processFrame(this.clock.now(),{ignorePause:!0,scheduleNext:!1}),this.framesElapsed===i||(this.virtualClock?.advance(this.targetDrawTime),!this.loopRunning))break}}async advance(t){let n=Math.max(0,Math.round(t/this.targetDrawTime));await this.step(n)}applyScheduledActions(t){let n=this.animation;n&&this.scriptedActions.forEach((r,i)=>{r.atFrame===t&&(this.consumedActionIndexes.has(i)||(this.consumedActionIndexes.add(i),r.type==="pointer"?n.injectPointer(r.pointer.kind,r.pointer.x,r.pointer.y):r.type==="key"?n.injectKey(r.key):r.type==="event"?this.hostChannel?.dispatch(r.event):r.type==="asset"&&this.hostChannel?.dispatch(_a(r)),this.appliedActions.push({frame:t,action:r})))})}get paused(){return this._paused}set paused(t){this._paused!==t&&(this._paused=t,this.animation?.setPaused(t))}async waitUntilUpdateIdle(){for(;this.updateInProgress;)await new Promise(t=>{this.deterministic?queueMicrotask(t):typeof requestAnimationFrame=="function"?requestAnimationFrame(()=>t()):setTimeout(t,0)})}requirePreparedAnimation(){if(!this.animation)throw new Error("No prepared cart");return this.animation}async exportState(){let t=this.requirePreparedAnimation(),n=this._paused;this.paused=!0,await this.waitUntilUpdateIdle();try{this.kind!=="calculation"?this.lastExportedFramebuffer=t.captureFramebuffer():this.lastExportedFramebuffer=null;let r=t.getCanvas();return{version:1,cartId:this.animationCart?.metadata?.id,generative:this.animationCart?.metadata?.generative,seed:this.tokenData.hash,framesElapsed:this.framesElapsed,elapsedSinceStart:t.getElapsedSinceStart(),dimensions:{width:r?.width??this.width,height:r?.height??this.height,cssWidth:this.containerWidth,cssHeight:this.containerHeight,dpr:ut},state:hn(t.cartState)}}finally{this.paused=n}}async exportStateJSON(){return JSON.stringify(await this.exportState())}peekExportedFramebuffer(){return this.lastExportedFramebuffer}peekSeed(){return this.tokenData?.hash}isGenerative(){return this.animationCart?.metadata?.generative===!0}async importState(t,n){let r=this.requirePreparedAnimation(),i=Mt(t),o=this._paused,s=this.loopRunning;this.paused=!0,await this.waitUntilUpdateIdle(),io(r.cartState,i.state,this.animationCart?.metadata?.id,i.cartId),Oa(this.tokenData.hash,i.seed,this.animationCart?.metadata?.generative,i.generative),clearTimeout(this.reinitTimeout),this.reinitPending=!1,this.importing=!0;let a=Ma(i,n?.framebuffer??this.lastExportedFramebuffer);if(a){this.pinOutputSize(a);let l=a.cssWidth??a.width/ut,h=a.cssHeight??a.height/ut;Tl(l,h),this.syncContainerFromDom(),this.pinViewportAtImport={w:this.containerWidth,h:this.containerHeight}}let d=this.customState,m=!1;try{if(this.customState=Kn(i.state),this.unloadCart(),!this.prepareCart(this.animationCart))throw new Error("Failed to prepare cart while loading state");this.animation.cartState!==this.customState&&Na(this.animation.cartState,i.state),this.framesElapsed=i.framesElapsed;let l=this.animation,h=l.cartState,S=typeof i.elapsedSinceStart=="number"?i.elapsedSinceStart:xl(h);l.restoreClock(S,typeof h?.startTime=="number"?h.startTime:void 0),o&&l.setPaused(!0);let C=n?.framebuffer??this.lastExportedFramebuffer;this.kind!=="calculation"&&(C&&l.restoreFramebuffer(C)?h.keepRatioPrimed=!0:await l.renderAnimation(this.framesElapsed,this.rawParams)),this.fitPinnedCanvas(),m=!0}catch(l){throw this.clearPinnedOutput(),this.customState=d,this.paused=o,this.animationCart&&(this.syncContainerFromDom(),this.init(),this.reloadCart()),l}finally{this.importing=!1,m&&(this.customState=d,this.paused=o,s&&this.beginPlayback())}}unloadCart(){this.loopRunning=!1,this.requestedAnimationFrame&&cancelAnimationFrame(this.requestedAnimationFrame),this.drawLoopTimeout&&clearTimeout(this.drawLoopTimeout),this.animation?.teardown(),this.animation=void 0,this.prepared=!1,this.audioLibrariesInternal=this.fallbackAudio,this.mainCanvas?.clearAll()}reloadCart(t=!1){let n=this.animationCart;if(!n)return;this.pinnedOutput&&(this.clearPinnedOutput(),this.syncContainerFromDom(),this.init());let r=this.reinitPending?this.reinitStayPaused:this._paused;this.unloadCart(),t&&this.initSeed(),this.loadCart(n),this.paused=r,!this.paused&&!fn&&this.resumeAudioLibraries()}getFrameRate(){return this.frameRate}updateFrameRate(t){if(this.frameRate=t,t>=1)this.targetDrawTime=1e3/t;else{let r=1/(2-t);this.targetDrawTime=1e3/r}this.drawTime=this.targetDrawTime}canvasMountOptions(){return{container:this.container,adoptFromDocument:!this.container}}syncContainerFromDom(){if(this.container){this.containerWidth=this.container.clientWidth||this.containerWidth,this.containerHeight=this.container.clientHeight||this.containerHeight;return}this.containerWidth=window.innerWidth,this.containerHeight=window.innerHeight}pinOutputSize(t){this.pinnedOutput=t,this.width=~~t.width,this.height=~~t.height,this.atCenterX=this.width/2,this.atCenterY=this.height/2,this.aspectRatio=this.width/this.height,this.mainCanvas&&this.mainCanvas.setSize(this.width,this.height)}shouldKeepPinnedOutput(){return this.pinnedOutput?(this.syncContainerFromDom(),this.viewportMatches(this.pinnedCssSize())?!0:!!(this.pinViewportAtImport&&this.viewportMatches(this.pinViewportAtImport))):!1}pinnedCssSize(){let t=this.pinnedOutput;return{w:t.cssWidth??t.width/ut,h:t.cssHeight??t.height/ut}}viewportMatches(t){return Math.abs(this.containerWidth-t.w)<8&&Math.abs(this.containerHeight-t.h)<8}fitPinnedCanvas(){let t=this.pinnedOutput,n=this.canvas;if(!t||!n)return;this.container&&!this.container.style.position&&(this.container.style.position="relative");let r=this.containerWidth||window.innerWidth,i=this.containerHeight||window.innerHeight,o=t.width/ut,s=t.height/ut;if(o<1||s<1||r<1||i<1)return;let a=Math.min(r/o,i/s),d=o*a,m=s*a;n.style.position="absolute",n.style.left="50%",n.style.top="50%",n.style.transform="translate(-50%, -50%)",n.style.margin="0",n.style.width=`${d}px`,n.style.height=`${m}px`,n.style.imageRendering=Math.abs(a-1)<.01?"auto":"pixelated"}clearPinnedOutput(){let t=this.canvas;this.pinnedOutput=null,this.pinViewportAtImport=null,t&&(t.style.position="",t.style.left="",t.style.top="",t.style.transform="",t.style.imageRendering="",t.style.width="",t.style.height="",t.style.margin="auto")}get canvas(){return this.animation?.getCanvas()??this.mainCanvas?.canvas}destroy(){this.outboundUnsubscribe?.(),this.outboundUnsubscribe=void 0,this.clearPinnedOutput(),this.unloadCart(),clearTimeout(this.reinitTimeout),this.mainCanvas&&!this.mainCanvas.adopted&&this.mainCanvas.canvas.remove()}drawIt(){}tuneFramerate(t){let n=this.lastCall||t;this.lastCall=t,this.drawTime=Math.max(0,this.drawTime+this.targetDrawTime-this.lastCall+n)}async processFrame(t,n={}){let r=n.ignorePause===!0,i=n.scheduleNext!==!1;if(!this.loopRunning&&!r)return;let o=!1,s,a="update",d=this.onFrameTiming,m=0,l=0,h=0;try{if(r||!this.paused||this.tempUnpause){if(!fn&&!r&&this.tuneFramerate(t),!this.animation)return;a="update",this.updateInProgress=!0;let C=d?performance.now():0;if(await this.animation.updateAnimationState(this.framesElapsed,this.rawParams,t),d&&(m=performance.now()-C),this.updateInProgress=!1,this.kind!=="calculation"){a="render";let T=d?performance.now():0;await this.animation.renderAnimation(this.framesElapsed,this.rawParams,t),d&&(l=performance.now()-T)}if(this.autoMode&&this.animation.cartState.saveToken&&!this.savedToken&&!new URLSearchParams(window.location.search).get("hash")){let P=localStorage.getItem("goodones"),$=JSON.stringify(P?[...JSON.parse(P),this.tokenData.hash]:[this.tokenData.hash]);localStorage.setItem("goodones",$),this.savedToken=!0,this.mainCanvas&&localStorage.setItem(this.tokenData.hash,this.mainCanvas.canvas.toDataURL("image/png")),window.location.reload(),this.loopRunning=!1;return}this.framesElapsed++,this.tempUnpause&&(this.tempUnpause=!1)}a="draw";let S=d?performance.now():0;this.drawIt(),d&&(h=performance.now()-S)}catch(S){o=!0,s=S,this.handleFrameError(S,a)}finally{this.updateInProgress=!1,d&&!o&&d({frame:this.framesElapsed,updateMs:m,renderMs:l,drawMs:h,totalMs:m+l+h})}o?(this.consecutiveErrorCount++,this.consecutiveErrorCount>=Ml&&(this.loopRunning=!1,this.onError?.(s,{phase:a,consecutive:this.consecutiveErrorCount,stopped:!0}))):this.consecutiveErrorCount=0,!(!this.loopRunning||!i)&&(this.drawLoopTimeout=setTimeout(()=>{this.requestedAnimationFrame=requestAnimationFrame(this.drawLoop)},this.drawTime))}async drawLoop(t){await this.processFrame(t,{scheduleNext:!0})}handleFrameError(t,n){let r=performance.now();r-this.lastErrorLogAt>=1e3&&(this.lastErrorLogAt=r,console.error(`Animation ${n} error:`,t)),this.consecutiveErrorCount===0&&this.onError?.(t,{phase:n,consecutive:1,stopped:!1})}pureAspectUpdate(t){if(t[0]===0&&t[1]===0){let r=this.containerWidth||window.innerWidth,i=this.containerHeight||window.innerHeight,o=r/i;this.aspectRatio=Math.min(Nl,Math.max(_l,o))}else this.aspectRatio=t[0]/t[1]}};var Ll="HostChannel has been destroyed",Lr=class{constructor(){this.inbound=[];this.listeners=[];this.closed=!1}dispatch(t){this.requireOpen(),this.inbound.push(t),this.inbound.length>32&&this.inbound.splice(0,this.inbound.length-32)}consume(){if(this.requireOpen(),this.inbound.length===0)return[];let t=this.inbound;return this.inbound=[],t}emit(t){this.requireOpen();for(let n of this.listeners)n(t)}onEvent(t){return this.requireOpen(),this.listeners.push(t),()=>{this.listeners=this.listeners.filter(n=>n!==t)}}clearInbound(){this.requireOpen(),this.inbound=[]}clear(){this.inbound=[],this.listeners=[]}close(){this.closed=!0,this.clear()}requireOpen(){if(this.closed)throw new Error(Ll)}};var Ze=2,co=1,uo="0.0.5",Va="0",Fa="1970-01-01T00:00:00.000Z";function et(e){if(e===null||typeof e!="object"||Array.isArray(e))return!1;let t=Object.getPrototypeOf(e);return t===Object.prototype||t===null}function Fr(e){return JSON.parse(JSON.stringify(e))}function Re(e,t,n,r){e.push(r?{code:t,detail:n,path:r}:{code:t,detail:n})}function $a(e,t,n){try{let r=JSON.stringify(e);if(r===void 0){Re(n,"invalid-field",`${t} is not JSON-serializable`,t);return}return JSON.parse(r)}catch{Re(n,"invalid-field",`${t} is not JSON-serializable`,t);return}}function Fe(e){return typeof e=="string"&&e.length>0}function Vr(e){return typeof e=="number"&&Number.isFinite(e)}function Vl(e){return typeof e=="string"&&Number.isFinite(Date.parse(e))}function lo(e){return!et(e)||typeof e.schemaVersion=="number"?!1:typeof e.version=="number"&&typeof e.seed=="string"&&typeof e.framesElapsed=="number"&&"state"in e}function $r(e){if(et(e)){if(typeof e.schemaVersion=="number")return Number.isInteger(e.schemaVersion)?e.schemaVersion:void 0;if(lo(e))return co}}function ao(e,t,n){try{return Fr(Mt(e))}catch(r){let i=r instanceof Error?r.message:"engineState is not a cart state bundle";Re(n,"invalid-engine-state",i,t);return}}function Fl(e,t,n){if(!et(e)){Re(n,"invalid-field","cart must be an object",t);return}Fe(e.id)||Re(n,"invalid-field","cart.id must be a non-empty string",`${t}.id`),Fe(e.version)||Re(n,"invalid-field","cart.version must be a non-empty string",`${t}.version`);let r={id:typeof e.id=="string"?e.id:"",version:typeof e.version=="string"?e.version:""};return e.generative!==void 0&&(typeof e.generative!="boolean"?Re(n,"invalid-field","cart.generative must be a boolean",`${t}.generative`):r.generative=e.generative),r.id&&r.version?r:void 0}function $l(e,t,n){if(!et(e)){Re(n,"invalid-field","clock must be an object",t);return}if(!Vr(e.framesElapsed)){Re(n,"invalid-field","clock.framesElapsed must be a finite number",`${t}.framesElapsed`);return}let r={framesElapsed:e.framesElapsed};return e.elapsedSinceStart!==void 0&&(Vr(e.elapsedSinceStart)?r.elapsedSinceStart=e.elapsedSinceStart:Re(n,"invalid-field","clock.elapsedSinceStart must be a finite number",`${t}.elapsedSinceStart`)),e.now!==void 0&&(Vr(e.now)?r.now=e.now:Re(n,"invalid-field","clock.now must be a finite number",`${t}.now`)),e.frameRate!==void 0&&(Vr(e.frameRate)?r.frameRate=e.frameRate:Re(n,"invalid-field","clock.frameRate must be a finite number",`${t}.frameRate`)),r}function Hl(e,t,n){if(e===void 0)return;if(!Array.isArray(e)){Re(n,"invalid-field","modules must be an array",t);return}let r=[];return e.forEach((i,o)=>{let s=`${t}[${o}]`;if(!et(i)||!Fe(i.id)||!Fe(i.version)){Re(n,"invalid-field","module refs need non-empty id and version",s);return}r.push({id:i.id,version:i.version})}),r}function Bl(e,t,n){if(e===void 0)return;if(!Array.isArray(e)){Re(n,"invalid-field","assets must be an array",t);return}let r=[];return e.forEach((i,o)=>{let s=`${t}[${o}]`;if(!et(i)||!Fe(i.id)){Re(n,"invalid-field","asset refs need a non-empty id",s);return}let a={id:i.id};i.version!==void 0&&(Fe(i.version)?a.version=i.version:Re(n,"invalid-field","asset.version must be a non-empty string",`${s}.version`)),i.ref!==void 0&&(Fe(i.ref)?a.ref=i.ref:Re(n,"invalid-field","asset.ref must be a non-empty string",`${s}.ref`)),r.push(a)}),r}function ql(e,t,n){if(e===void 0)return;if(!et(e)||!Fe(e.seed)){Re(n,"invalid-field","rng must include a seed",t);return}if(!et(e.prngA)||!et(e.prngB)){Re(n,"invalid-field","rng must include prngA and prngB",t);return}if(typeof e.useA!="boolean"){Re(n,"invalid-field","rng.useA must be a boolean",`${t}.useA`);return}return $a(e,t,n)}function Gl(e,t,n){if(e===void 0)return;if(!et(e)){Re(n,"invalid-field","provenance must be an object",t);return}let r={};if(e.source!==void 0&&(Fe(e.source)?r.source=e.source:Re(n,"invalid-field","provenance.source must be a non-empty string",`${t}.source`)),e.integrity!==void 0&&(!et(e.integrity)||!Fe(e.integrity.alg)||!Fe(e.integrity.hash)?Re(n,"invalid-field","provenance.integrity needs alg and hash strings",`${t}.integrity`):r.integrity={alg:e.integrity.alg,hash:e.integrity.hash}),e.publisher!==void 0&&(Fe(e.publisher)?r.publisher=e.publisher:Re(n,"invalid-field","provenance.publisher must be a non-empty string",`${t}.publisher`)),e.version!==void 0&&(Fe(e.version)?r.version=e.version:Re(n,"invalid-field","provenance.version must be a non-empty string",`${t}.version`)),e.signature!==void 0&&(!et(e.signature)||!Fe(e.signature.id)||!Fe(e.signature.alg)?Re(n,"invalid-field","provenance.signature needs id and alg strings",`${t}.signature`):r.signature={id:e.signature.id,alg:e.signature.alg}),e.grants!==void 0)if(!Array.isArray(e.grants))Re(n,"invalid-field","provenance.grants must be an array",`${t}.grants`);else{let i=[];e.grants.forEach((o,s)=>{Fe(o)?i.push(o):Re(n,"invalid-field","provenance.grants entries must be non-empty strings",`${t}.grants[${s}]`)}),r.grants=i}return r}function Ha(e,t){e.schemaVersion!==void 0&&e.schemaVersion!==Ze&&Re(t,"invalid-schema",`defineSnapshot produces schema ${Ze}`,"schemaVersion"),Fe(e.seed)||Re(t,"invalid-field","seed must be a non-empty string","seed");let n=e.runtimeVersion===void 0?uo:e.runtimeVersion;Fe(n)||Re(t,"invalid-field","runtimeVersion must be a non-empty string","runtimeVersion");let r=e.createdAt===void 0?new Date().toISOString():e.createdAt;Vl(r)||Re(t,"invalid-field","createdAt must be an ISO-8601 date","createdAt");let i=Fl(e.cart,"cart",t),o=$l(e.clock,"clock",t),s=ao(e.engineState,"engineState",t),a=Hl(e.modules,"modules",t),d=Bl(e.assets,"assets",t),m=ql(e.rng,"rng",t),l=Gl(e.provenance,"provenance",t),h;if(e.hostState!==void 0&&(h=$a(e.hostState,"hostState",t)),e.hostStateRef!==void 0&&!Fe(e.hostStateRef)&&Re(t,"invalid-field","hostStateRef must be a non-empty string","hostStateRef"),t.length>0||!i||!o||!s||!Fe(e.seed))return;let S={schemaVersion:Ze,runtimeVersion:n,cart:i,seed:e.seed,clock:o,engineState:s,createdAt:r};return a&&a.length>0&&(S.modules=a),m&&(S.rng=m),h!==void 0&&(S.hostState=h),Fe(e.hostStateRef)&&(S.hostStateRef=e.hostStateRef),d&&d.length>0&&(S.assets=d),l&&(l.source||l.integrity||l.publisher||l.version||l.signature||l.grants)&&(S.provenance=l),S}function po(e){if(!et(e))return{ok:!1,errors:[{code:"invalid-snapshot",detail:"Snapshot input is not an object"}]};let t=[],n=Ha(e,t);return!n||t.length>0?{ok:!1,errors:t}:{ok:!0,snapshot:n}}function Hr(e,t){return Fe(e.cartId)?po({cart:{id:e.cartId,version:t?.cartVersion??Va,generative:e.generative},modules:t?.modules,seed:e.seed,rng:t?.rng,clock:t?.clock??{framesElapsed:e.framesElapsed,elapsedSinceStart:e.elapsedSinceStart},engineState:e,hostState:t?.hostState,hostStateRef:t?.hostStateRef,assets:t?.assets,createdAt:t?.createdAt,provenance:t?.provenance,runtimeVersion:t?.runtimeVersion}):{ok:!1,errors:[{code:"invalid-field",detail:"cart.id is required",path:"cart.id"}]}}function La(e){let t=Fr(e),n={schemaVersion:co,engineState:t,seed:t.seed,clock:{framesElapsed:t.framesElapsed,elapsedSinceStart:t.elapsedSinceStart}};return t.cartId&&(n.cart={id:t.cartId,version:Va,generative:t.generative}),n}function fo(e){let t=e;if(typeof e=="string")try{t=JSON.parse(e)}catch{return{ok:!1,errors:[{code:"invalid-json",detail:"Snapshot JSON could not be parsed"}]}}if(!et(t))return{ok:!1,errors:[{code:"invalid-snapshot",detail:"Snapshot is not an object"}]};if(lo(t))try{return{ok:!0,snapshot:La(Mt(t))}}catch(r){return{ok:!1,errors:[{code:"invalid-engine-state",detail:r instanceof Error?r.message:"Cart state bundle is invalid"}]}}let n=$r(t);if(n===void 0)return{ok:!1,errors:[{code:"invalid-snapshot",detail:"Snapshot is missing schemaVersion and is not a cart state bundle",path:"schemaVersion"}]};if(n===co){let r=[],i=ao(t.engineState,"engineState",r);return!i||r.length>0?{ok:!1,errors:r}:{ok:!0,snapshot:La(i)}}if(n!==Ze){if(n>Ze)return{ok:!1,errors:[{code:"unsupported-schema",detail:`Snapshot schema ${n} is newer than ${Ze}`,path:"schemaVersion"}]};let r=[],i=ao(t.engineState,"engineState",r);return i?{ok:!0,snapshot:{schemaVersion:n,engineState:i,seed:typeof t.seed=="string"?t.seed:i.seed,clock:{framesElapsed:i.framesElapsed,elapsedSinceStart:i.elapsedSinceStart}}}:{ok:!1,errors:r.length?r:[{code:"invalid-snapshot",detail:`Snapshot schema ${n} is missing engineState`,path:"engineState"}]}}return Wn(t)}function Wn(e){if(!et(e))return{ok:!1,errors:[{code:"invalid-snapshot",detail:"Snapshot is not an object"}]};if(e.schemaVersion!==Ze)return{ok:!1,errors:[{code:"invalid-schema",detail:`Expected snapshot schema ${Ze}`,path:"schemaVersion"}]};let t=[],n=Ha(e,t);return!n||t.length>0?{ok:!1,errors:t}:{ok:!0,snapshot:n}}function yn(e){return e.map(t=>t.detail).join("; ")}function Ba(e){if(lo(e))return Mt(e);if(et(e)&&e.engineState!==void 0)return Mt(e.engineState);throw new Error("Legacy snapshot is missing engine state")}function Kl(){return[{from:1,to:2,migrate:Jl}]}function Wl(e){let t=[...e?.migrations??Kl()],n=new Map;for(let r of t){if(!Number.isInteger(r.from)||!Number.isInteger(r.to)||r.to!==r.from+1)throw new Error(`Snapshot migration must step from n to n+1 (got ${String(r.from)} \u2192 ${String(r.to)})`);if(typeof r.migrate!="function")throw new Error(`Snapshot migration ${r.from} \u2192 ${r.to} is missing migrate()`);if(n.has(r.from))throw new Error(`Duplicate snapshot migration from schema ${r.from}`);n.set(r.from,r)}return{migrations:t,get(r){return n.get(r)}}}var jl=Wl();function Ul(){return jl}function Jl(e){let t=Ba(e),n=Hr(t,{createdAt:Fa,runtimeVersion:uo});if(n.ok===!1)throw new Error(yn(n.errors));return n.snapshot}function qa(e){try{return Fr(e)}catch{return}}function Ga(e,t=Ul()){let n=qa(e);if(n===void 0)return{ok:!1,errors:[{code:"invalid-snapshot",detail:"Snapshot is not JSON-serializable"}]};let r=n,i=$r(r);if(i===void 0){let o=fo(r);if(o.ok===!1)return o;r=o.snapshot,i=o.snapshot.schemaVersion}if(i>Ze)return{ok:!1,errors:[{code:"unsupported-schema",detail:`Snapshot schema ${i} is newer than ${Ze}`,path:"schemaVersion"}]};if(i===Ze)return Wn(r);for(;i<Ze;){let o=t.get(i);if(!o)return{ok:!1,errors:[{code:"missing-migration",detail:`No snapshot migration from schema ${i} to ${i+1}`,path:"schemaVersion"}]};let s;try{s=o.migrate(qa(r))}catch(d){let m=d instanceof Error?d.message:"Migration threw";return{ok:!1,errors:[{code:"invalid-migration-result",detail:`Migration ${o.from} \u2192 ${o.to} failed: ${m}`,path:"schemaVersion"}]}}let a=$r(s);if(a!==o.to)return{ok:!1,errors:[{code:"invalid-migration-result",detail:`Migration ${o.from} \u2192 ${o.to} produced schema ${String(a)}`,path:"schemaVersion"}]};if(o.to===Ze){let d=Wn(s);if(d.ok===!1)return{ok:!1,errors:[{code:"invalid-migration-result",detail:`Migration ${o.from} \u2192 ${o.to} did not produce a valid snapshot`,path:"schemaVersion"},...d.errors]};r=d.snapshot}else r=s;i=o.to}return Wn(r)}function Ka(e,t){let n=e;if(typeof e=="string")try{n=JSON.parse(e)}catch{return{ok:!1,errors:[{code:"invalid-json",detail:"Snapshot JSON could not be parsed"}]}}if(!n||typeof n!="object")return{ok:!1,errors:[{code:"invalid-snapshot",detail:"Snapshot is not an object"}]};if(typeof n.schemaVersion=="number"){let i=Ga(n,t);if(i.ok===!1)return i;try{return{ok:!0,bundle:Mt(i.snapshot.engineState),snapshot:i.snapshot}}catch(o){return{ok:!1,errors:[{code:"invalid-engine-state",detail:o instanceof Error?o.message:"engineState is not a cart state bundle",path:"engineState"}]}}}try{return{ok:!0,bundle:Mt(n)}}catch(i){return{ok:!1,errors:[{code:"invalid-engine-state",detail:i instanceof Error?i.message:"Cart state bundle is invalid"}]}}}function Wa(e,t){let n=fo(e);return n.ok===!1?n:Ga(n.snapshot,t)}var zl=["image","audio","font","spritesheet"],Yl=["timeout","cors","not-found","invalid","aborted","resolver","undeclared","hash-mismatch","unsigned"],jn="cyberart:fallback/silent",ja="Asset preloader has been destroyed",Xl=4,Ql=new Set(zl),Zl=new Set(Yl),ep={timeout:"asset load timed out",cors:"CORS blocked this asset","not-found":"asset was not found",invalid:"asset declaration or resource is invalid",aborted:"asset load was aborted",resolver:"asset resolver failed",undeclared:"asset is not declared on the cart manifest","hash-mismatch":"asset bytes do not match the declared hash",unsigned:"asset bytes are missing or unsigned"};function zn(e){return typeof e=="string"&&Ql.has(e)}function tp(e){return typeof e=="string"&&Zl.has(e)}function Jn(e){if(!e||typeof e!="object")return!1;let t=e;return typeof t.id=="string"&&typeof t.ref=="string"&&tp(t.code)&&typeof t.message=="string"}function Me(e){return{id:e.id,ref:e.ref,code:e.code,message:e.message&&e.message.length>0?e.message:ep[e.code]}}function bn(e,t){return{type:e==="ready"?nt:Qe,kind:"state",payload:t}}function Ua(e){if(!e?.aborted)return;let t=new Error("aborted");throw t.name="AbortError",t}function np(e){return e instanceof Error&&e.name==="AbortError"||typeof DOMException<"u"&&e instanceof DOMException&&e.name==="AbortError"}function mo(e){return e?{...e}:void 0}function Nt(e){let t={id:e.id,ref:e.ref,type:e.type,url:e.url};return e.integrity!==void 0&&(t.integrity=e.integrity),e.provenance&&(t.provenance=mo(e.provenance)),e.cors!==void 0&&(t.cors=e.cors),e.usedFallback&&(t.usedFallback=!0),e.managed&&(t.managed=!0),t}function Un(e){return{id:e.id,ref:e.ref,code:e.code,message:e.message}}function rp(e){if(e.state==="ready"){let t={state:"ready",resource:Nt(e.resource)};return e.failure&&(t.failure=Un(e.failure)),t}return e.state==="failed"?{state:"failed",failure:Un(e.failure)}:{state:e.state}}function ip(e){let t="";for(let n=0;n<e.length;n++)t+=e[n].toString(16).padStart(2,"0");return t}async function op(e){let t=await crypto.subtle.digest("SHA-256",e);return ip(new Uint8Array(t))}function sp(e){let t="";for(let r=0;r<e.length;r++)t+=String.fromCharCode(e[r]);return`data:application/octet-stream;base64,${typeof btoa=="function"?btoa(t):Buffer.from(e).toString("base64")}`}function Br(e){let t=e.declared,n=e.fetchBytes,r=e.hashBytes??op;return{async resolve(i,o){Ua(o);let s=t[i.ref];if(!s)throw Me({id:i.id,ref:i.ref,code:"undeclared",message:`undeclared asset ref "${i.ref}"`});if(!s.hash||typeof s.hash!="string")throw Me({id:i.id,ref:i.ref,code:"unsigned",message:`unsigned asset "${i.ref}"`});let a=await n(s.url);if(Ua(o),!a)throw Me({id:i.id,ref:i.ref,code:"unsigned",message:`no signed bytes for "${s.url}"`});if(await r(a)!==s.hash)throw Me({id:i.id,ref:i.ref,code:"hash-mismatch",message:`hash mismatch for "${i.ref}"`});return{id:i.id,ref:i.ref,type:i.type,url:sp(a),integrity:`sha256-${s.hash}`,cors:"omit",provenance:i.provenance}}}}function ap(e){if(!e||typeof e!="object")return Me({id:"",ref:"",code:"invalid",message:"declaration is required"});if(typeof e.id!="string"||e.id.length===0)return Me({id:typeof e.id=="string"?e.id:"",ref:typeof e.ref=="string"?e.ref:"",code:"invalid",message:"id is required"});if(typeof e.ref!="string"||e.ref.length===0)return Me({id:e.id,ref:"",code:"invalid",message:"ref is required"});if(!zn(e.type))return Me({id:e.id,ref:e.ref,code:"invalid",message:`unsupported type ${String(e.type)}`});if(e.integrity!==void 0&&typeof e.integrity!="string")return Me({id:e.id,ref:e.ref,code:"invalid",message:"integrity must be a string"});if(e.timeoutMs!==void 0&&(typeof e.timeoutMs!="number"||!Number.isFinite(e.timeoutMs)||e.timeoutMs<0))return Me({id:e.id,ref:e.ref,code:"invalid",message:"timeoutMs must be a non-negative finite number"})}function Ja(e){return{id:e.id,ref:jn,type:e.type,url:jn,usedFallback:!0,cors:"omit"}}function za(e,t){return Jn(t)?{id:e.id,ref:e.ref,code:t.code,message:t.message}:np(t)?Me({id:e.id,ref:e.ref,code:"aborted"}):Me({id:e.id,ref:e.ref,code:"resolver",message:t instanceof Error?t.message:String(t)})}function Ya(e,t){if(!t||typeof t.url!="string"||t.url.length===0)throw Me({id:e.id,ref:e.ref,code:"invalid",message:"resolver returned no url"});if(t.integrity&&e.integrity&&t.integrity!==e.integrity)throw Me({id:e.id,ref:e.ref,code:"invalid",message:"integrity mismatch"});let n=Nt(t);return n.id=e.id,n.ref=t.ref||e.ref,n.type=e.type,!n.integrity&&e.integrity&&(n.integrity=e.integrity),!n.provenance&&e.provenance&&(n.provenance=mo(e.provenance)),n}function vn(e){if(typeof e?.resolver?.resolve!="function")throw new Error("createAssetPreloader: resolver is required");let t=e.emitEvents!==!1,n=e.wallClockTimeout!==!1,r=new Map,i=[],o=new Map,s=new Map,a=new Map,d=new Map,m=new Map,l=new Set,h=!1;function S(R){return R.code==="aborted"||R.code==="timeout"}function C(R,N,q){let M=za(R,q);return M.code==="timeout"?M:N.aborted?Me({id:R.id,ref:R.ref,code:"aborted"}):M}function T(R,N){let q=m.get(R);q||(q=new Set,m.set(R,q)),q.add(N)}function v(R){if(R?.state==="ready")return`${R.resource.type}\0${R.resource.ref}`}function P(R,N){for(let[q,M]of m)if(q!==N&&M.has(R))return!0;for(let[q,M]of r)if(q!==N&&v(M)===R)return!0;return!1}function $(R,N){let q=new Set(m.get(R)),M=v(N);M&&q.add(M),m.delete(R);for(let u of q)P(u,R)||a.delete(u)}function j(){let R=0,N=0,q=0,M=0,u={};for(let[b,x]of r)u[b]=rp(x),x.state==="pending"||x.state==="loading"?R+=1:x.state==="failed"?q+=1:(N+=1,(x.resource.usedFallback||x.failure)&&(M+=1));return{total:r.size,pending:R,ready:N,failed:q,fallbacks:M,items:u,failures:i.map(Un)}}function O(){if(l.size===0)return;let R=j();for(let N of l)N(R)}function F(R){i.push(Un(R))}function w(R){h||!t||!e.dispatch||e.dispatch(R)}function p(R){if(R?.managed&&R.url.startsWith("blob:")&&!(typeof URL>"u"||typeof URL.revokeObjectURL!="function"))try{URL.revokeObjectURL(R.url)}catch{}}function I(R,N){if(h)return;let q=r.get(R);q?.state==="ready"&&p(q.resource),r.set(R,N),O()}function c(R){if(R.fallback!==void 0)return R.fallback==="silent"?{id:`${R.id}::fallback`,ref:jn,type:R.type}:typeof R.fallback=="string"?{id:`${R.id}::fallback`,ref:R.fallback,type:R.type}:{...R.fallback,id:typeof R.fallback.id=="string"&&R.fallback.id.length>0?R.fallback.id:`${R.id}::fallback`}}function f(R,N,q){let M=`${R.type}\0${R.ref}`,u=a.get(M);if(u)return N.aborted?Promise.reject(Me({id:R.id,ref:R.ref,code:"aborted"})):(T(q,M),Promise.resolve(Nt(u.resource)));if(N.aborted)return Promise.reject(Me({id:R.id,ref:R.ref,code:"aborted"}));let b=d.get(M);if(!b){let V=new AbortController,L={id:R.id,ref:R.ref,type:R.type};R.integrity!==void 0&&(L.integrity=R.integrity),R.provenance&&(L.provenance=mo(R.provenance)),b={promise:Promise.resolve().then(()=>e.resolver.resolve(L,V.signal)).then(U=>{let B=Ya(R,U);if(V.signal.aborted)throw Me({id:R.id,ref:R.ref,code:"aborted"});return a.set(M,{resource:Nt(B)}),B}).catch(U=>{throw za(R,U)}).finally(()=>{d.delete(M)}),controller:V,waiters:0},d.set(M,b)}let x=b;return x.waiters+=1,new Promise((V,L)=>{let W=!1,U=(g,k)=>{W||(W=!0,N.removeEventListener("abort",B),x.waiters-=1,k&&x.waiters<=0&&x.controller.abort(),g())},B=()=>{U(()=>L(Me({id:R.id,ref:R.ref,code:"aborted"})),!0)};if(N.aborted){B();return}N.addEventListener("abort",B,{once:!0}),x.promise.then(g=>{if(!W){if(N.aborted){B();return}T(q,M),U(()=>V(Nt(g)),!1)}},g=>{if(!W){if(N.aborted){B();return}U(()=>L(g),!1)}})})}function y(R,N,q){if(N.aborted)return Promise.reject(Me({id:R.id,ref:R.ref,code:"aborted"}));if(R.ref===jn)return Promise.resolve(Ja(R));let M=new AbortController,u=()=>M.abort();N.addEventListener("abort",u,{once:!0});let b=R.timeoutMs??e.timeoutMs,x,V=!1;return n&&b!==void 0&&b>0&&Number.isFinite(b)&&(x=setTimeout(()=>{V=!0,M.abort()},b)),f(R,M.signal,q).then(L=>{let W=Ya(R,L);return W.id=R.id,W}).catch(L=>{throw V?Me({id:R.id,ref:R.ref,code:"timeout"}):L}).finally(()=>{x!==void 0&&clearTimeout(x),N.removeEventListener("abort",u)})}async function A(R,N,q,M){try{return{resource:await y(R,N,M)}}catch(u){let b=C(R,N,u);if(S(b)||N.aborted||q>=Xl)throw b;let x=c(R);if(!x)throw b;if(N.aborted)throw Me({id:R.id,ref:R.ref,code:"aborted"});if(R.fallback==="silent"||x.ref===jn)return{resource:Ja(R),failure:b};try{let V=await A(x,N,q+1,M);return{resource:{...Nt(V.resource),id:R.id,usedFallback:!0},failure:b}}catch(V){let L=Jn(V)&&!S(V)&&!N.aborted?V:C(R,N,V);throw!S(L)&&!N.aborted&&F(b),L}}}async function D(R,N){if(h)throw new Error(ja);let q=r.get(R.id);if(q?.state==="ready"||q?.state==="failed")return;let M=o.get(R.id);if(M){await M;return}let u=(async()=>{let b=ap(R);if(b){I(R.id,{state:"failed",failure:b}),F(b),w(bn("failed",{id:R.id,ref:R.ref,failure:b}));return}I(R.id,{state:"loading"});let x=s.get(R.id)??new AbortController;s.has(R.id)||s.set(R.id,x);try{let V=await A(R,x.signal,N,R.id);if(h)return;if(x.signal.aborted){let L=Me({id:R.id,ref:R.ref,code:"aborted"});I(R.id,{state:"failed",failure:L}),F(L),w(bn("failed",{id:R.id,ref:R.ref,failure:L}));return}if(V.resource.id=R.id,V.failure){I(R.id,{state:"ready",resource:V.resource,failure:V.failure}),F(V.failure),w(bn("failed",{id:R.id,ref:R.ref,failure:V.failure,resource:Nt(V.resource)})),w(bn("ready",{id:R.id,ref:V.resource.ref,resource:Nt(V.resource),failure:V.failure}));return}I(R.id,{state:"ready",resource:V.resource}),w(bn("ready",{id:R.id,ref:R.ref,resource:Nt(V.resource)}))}catch(V){if(h)return;let L=Jn(V)&&!S(V)&&!x.signal.aborted?{...Un(V),id:R.id}:C(R,x.signal,V);I(R.id,{state:"failed",failure:L}),F(L),w(bn("failed",{id:R.id,ref:R.ref,failure:L}))}finally{s.get(R.id)===x&&s.delete(R.id)}})();o.set(R.id,u);try{await u}finally{o.delete(R.id)}}return{async preload(R){if(h)throw new Error(ja);let N=Array.isArray(R)?R:[];for(let q of N)q&&typeof q.id=="string"&&q.id.length>0&&(r.has(q.id)||r.set(q.id,{state:"pending"}),s.has(q.id)||s.set(q.id,new AbortController));return O(),await Promise.all(N.map(q=>D(q,0))),j()},get(R){let N=r.get(R);if(N?.state==="ready")return Nt(N.resource)},getProgress(){return j()},onProgress(R){return l.add(R),()=>{l.delete(R)}},abort(R){if(!h){if(R!==void 0){s.get(R)?.abort();return}for(let N of s.values())N.abort()}},forget(R){if(h)return;if(R===void 0){for(let q of r.values())q.state==="ready"&&p(q.resource);r.clear(),i.length=0,a.clear(),m.clear(),O();return}let N=r.get(R);N?.state==="ready"&&p(N.resource),$(R,N),r.delete(R);for(let q=i.length-1;q>=0;q--)i[q].id===R&&i.splice(q,1);O()},dispose(){if(!h){h=!0;for(let R of s.values())R.abort();s.clear();for(let R of r.values())R.state==="ready"&&p(R.resource);r.clear(),i.length=0,o.clear();for(let R of d.values())R.controller.abort();a.clear(),d.clear(),m.clear(),l.clear()}}}}var Xa=.25;function Sn(e){return e.error===void 0?{state:e.state}:{state:e.state,error:e.error}}function go(e){return!Number.isFinite(e)||e<0?0:e>1?1:e}function dp(e){return e instanceof Error&&e.message?e.message:String(e)}async function cp(){let{adaptersFor:e}=await Promise.resolve().then(()=>(to(),Pa)),t=e(["tone"]),n=typeof navigator<"u"&&/Headless/i.test(navigator.userAgent);for(let r of t)n?await r.load():await r.unlock()}function up(e){if(!e||typeof e!="object")return;let t=e.id;return typeof t=="string"&&t.length>0?t:void 0}function Qa(e={}){let t=e.toneStart??cp,n=!!e.reducedSensory,r=new Set,i=new Map,o=new Map,s=new Map,a=[],d={state:"locked"},m,l=!1,h=!1;function S(O){for(let F of a.slice())F(O)}function C(O,F){let w=i.get(O);if(w)return F&&!w.participantId&&(w.participantId=F),w;let p={id:O,participantId:F,gain:1,muted:!1,duckGain:1,priority:0,manualDuck:!1};return i.set(O,p),p}function T(O){return l||O.muted?0:go(O.gain*O.duckGain)}function v(O){return{id:O.id,participantId:O.participantId,gain:O.gain,muted:O.muted,duckGain:O.duckGain,priority:O.priority,effectiveGain:T(O)}}function P(){let O=-1/0;for(let F of s.values())F.priority>O&&(O=F.priority);for(let F of i.values())if(!F.manualDuck){if(O===-1/0){F.duckGain=1;continue}F.duckGain=F.priority<O?Xa:1}}async function $(){if(h||d.state==="unlocked")return Sn(d);if(m)return await m,Sn(d);d={state:"unlocking"},m=(async()=>{try{await t(),d={state:"unlocked"}}catch(O){d={state:"failed",error:dp(O)}}})();try{await m}finally{m=void 0}return Sn(d)}return{unlock:$,status(){return Sn(d)},authorize(O){h||typeof O!="string"||O.length===0||r.add(O)},revoke(O){h||r.delete(O)},isAuthorized(O){return O===void 0||O.length===0?r.size===0:r.size===0?!0:r.has(O)},setChannelGain(O,F,w){h||typeof O!="string"||O.length===0||(C(O,w).gain=go(F))},setPriority(O,F,w){h||typeof O!="string"||O.length===0||(C(O,w).priority=Number.isFinite(F)?F:0,P())},mute(){h||(l=!0,S({type:"mute"}))},unmute(){h||(l=!1,S({type:"mute"}))},muteChannel(O,F){h||typeof O!="string"||O.length===0||(C(O,F).muted=!0,S({type:"mute"}))},unmuteChannel(O){if(h)return;let F=i.get(O);F&&(F.muted=!1,S({type:"mute"}))},duck(O,F=Xa){if(h||typeof O!="string"||O.length===0)return;let w=C(O);w.manualDuck=!0,w.duckGain=go(F)},unduck(O){if(h)return;let F=i.get(O);F&&(F.manualDuck=!1,P())},effectiveGain(O){let F=i.get(O);return F?T(F):l?0:1},handleHostEvent(O){if(h||!O||typeof O!="object")return;let F=up(O.payload);if(F){if(O.type===nt){o.set(F,"ready"),S({type:"asset",id:F,status:"ready"});return}O.type===Qe&&(o.set(F,"failed"),S({type:"asset",id:F,status:"failed"}))}},assetStatus(O){return o.get(O)},noteCueStarted(O){if(h)return;s.set(O.idempotencyKey,{idempotencyKey:O.idempotencyKey,channelId:O.channelId,participantId:O.participantId,priority:O.priority});let F=C(O.channelId,O.participantId);O.priority>F.priority&&(F.priority=O.priority),P()},noteCueEnded(O){s.delete(O)&&P()},teardown(O){if(!h&&!(typeof O!="string"||O.length===0)){r.delete(O);for(let[F,w]of[...s.entries()])w.participantId===O&&s.delete(F);for(let[F,w]of[...i.entries()])w.participantId===O&&i.delete(F);P(),S({type:"teardown",participantId:O})}},onNotice(O){return a.push(O),()=>{let F=a.indexOf(O);F>=0&&a.splice(F,1)}},inspect(){let O=[...o.entries()].sort(([w],[p])=>w<p?-1:w>p?1:0),F={};for(let[w,p]of O)F[w]=p;return{status:Sn(d),reducedSensory:n,muted:l,authorized:[...r].sort(),channels:[...i.values()].sort((w,p)=>w.id<p.id?-1:w.id>p.id?1:0).map(v),assets:F}},destroy(){h||(h=!0,s.clear(),i.clear(),r.clear(),S({type:"destroy"}),a.length=0)},get reducedSensory(){return n},get muted(){return l}}}function Za(e,t){let n=e.dispatch.bind(e);e.dispatch=r=>{t.handleHostEvent(r),n(r)}}function qr(e){fa();let{container:t,seed:n,captureKeyboard:r=!1,audio:i,deterministic:o,assets:s,audioBroker:a,audioParticipantId:d,kind:m="render",onFrameTiming:l}=e,h=n===void 0?void 0:Ea(n,o?"deterministic":"live"),S=new Lr;if(a&&(Za(S,a),d&&a.authorize(d)),s&&typeof s.resolver?.resolve!="function")throw new Error("createRuntime: assets.resolver is required");let C=s?vn({resolver:s.resolver,timeoutMs:s.timeoutMs,emitEvents:s.emitEvents??!o,wallClockTimeout:!o,dispatch:f=>S.dispatch(f)}):void 0,T=!1,v=null,P,$=l,j=!1,O=t.clientWidth||window.innerWidth,F=t.clientHeight||window.innerHeight,w=new _r(30,!1,O,F,!1,void 0,{container:t,seed:h,captureKeyboard:r,hostChannel:S,audio:i,deterministic:o,kind:m,onFrameTiming:l}),p=()=>{let f=t.clientWidth||window.innerWidth,y=t.clientHeight||window.innerHeight;return f===w.containerWidth&&y===w.containerHeight?!1:(w.containerWidth=f,w.containerHeight=y,!0)},I=null;return!w.isDeterministic&&typeof ResizeObserver<"u"&&(I=new ResizeObserver(()=>{if(T||!v)return;p()&&j&&w.reinit()}),I.observe(t)),w.onError=(f,y)=>{P?.(f,y)},{get tokenData(){return w.tokenData},get hostChannel(){return S},get assets(){return C},get audioBroker(){return a},get kind(){return m},get onError(){return P},set onError(f){P=f},get onFrameTiming(){return $},set onFrameTiming(f){$=f,w.onFrameTiming=f},mount(f,y={}){if(T)throw new Error("createRuntime: cannot mount on a destroyed runtime");v?.destroy(),j=!1,w.customState=y.initialState,w.setGameManager(y.gameManager);let A=y.onEvent?S.onEvent(y.onEvent):()=>{};if(a&&d&&a.authorize(d),!w.prepareCart(f))throw A(),new Error("createRuntime: failed to prepare cart");let D=!1,R={async start(){if(!D){if(p()&&w.isPrepared&&(w.init(),w.unloadCart(),!w.prepareCart(f)))throw new Error("createRuntime: failed to prepare cart");w.needsAudio&&(a?await a.unlock():await w.unlockAudio(),D)||(j=!0,w.beginPlayback())}},pause(){D||(w.paused=!0)},resume(){D||(w.paused=!1)},dispatch(N){D||S.dispatch(N)},snapshot(){if(D)return{seed:"",pngDataUrl:""};let N=w.canvas;return{seed:w.tokenData.hash,metadata:f.metadata,pngDataUrl:N?N.toDataURL("image/png"):""}},destroy(){D||(D=!0,j=!1,A(),S.clearInbound(),w.unloadCart(),v===R&&(v=null))},reload(){if(!D){if(!j){if(w.isPrepared&&(w.unloadCart(),!w.prepareCart(f)))throw new Error("createRuntime: failed to prepare cart");return}w.reloadCart()}},reinit(N){if(!D){if(!j){p();return}w.reinit(N)}},getCartState(){return w.animation?.cartState},exportState(){return D?Promise.reject(new Error("Cart handle has been destroyed")):w.exportState()},exportStateJSON(){return D?Promise.reject(new Error("Cart handle has been destroyed")):w.exportStateJSON()},async importState(N,q){if(D)throw new Error("Cart handle has been destroyed");let M=N,u=N;if(typeof N=="string")try{u=JSON.parse(N)}catch{await w.importState(N,q);return}if(u&&typeof u=="object"&&typeof u.schemaVersion=="number"){let b=Ka(u);if(b.ok===!1)throw new Xe(yn(b.errors));await w.importState(b.bundle,q);return}await w.importState(typeof M=="string"?M:u,q)},async exportSnapshot(N){if(D)throw new Error("Cart handle has been destroyed");let q=await w.exportState(),M=w.getClock(),u=Hr(q,{...N,rng:w.getRandomState(),clock:{framesElapsed:q.framesElapsed,elapsedSinceStart:q.elapsedSinceStart,now:M.now,frameRate:M.frameRate}});if(u.ok===!1)throw new Xe(yn(u.errors));return u.snapshot},async exportSnapshotJSON(N){return JSON.stringify(await R.exportSnapshot(N))},async importSnapshot(N,q){if(D)throw new Error("Cart handle has been destroyed");let M=Wa(N);if(M.ok===!1)throw new Xe(yn(M.errors));await w.importState(M.snapshot.engineState,q)},peekExportedFramebuffer(){return D?null:w.peekExportedFramebuffer()},peekSeed(){if(!D)return w.peekSeed()},isGenerative(){return D?!1:w.isGenerative()},async step(N=1){if(D)throw new Error("Cart handle has been destroyed");await w.step(N)},async advance(N){if(D)throw new Error("Cart handle has been destroyed");await w.advance(N)},schedule(N){D||w.schedule(N)},getClock(){if(D)throw new Error("Cart handle has been destroyed");return w.getClock()},getRandomState(){if(D)throw new Error("Cart handle has been destroyed");return w.getRandomState()},getReplayMetadata(){return D?Promise.reject(new Error("Cart handle has been destroyed")):w.getReplayMetadata()},get canvas(){return w.canvas},get paused(){return w.paused},set paused(N){D||(w.paused=N)},get tokenData(){return w.tokenData},get isPrepared(){return w.isPrepared},get isLoopRunning(){return w.isLoopRunning},get needsAudio(){return w.needsAudio},get audioLibraries(){return w.audioLibraries}};return v=R,R},async unlockAudio(){if(a){w.needsAudio&&await a.unlock();return}await w.unlockAudio()},destroy(){T||(T=!0,v?.destroy(),v=null,a&&d&&a.teardown(d),I?.disconnect(),I=null,C?.dispose(),S.close(),w.destroy())}}}var ed="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAADUlEQVR42mP8z8BQDwAEhQGAhKmMIQAAAABJRU5ErkJggg==",td=320,nd=180,lp="Headless harness has been destroyed",rd=!1;function Gr(e={}){if(e.glyphAtlas&&ji(e.glyphAtlas),typeof globalThis.ImageData>"u"){class n{constructor(i,o,s){this.colorSpace="srgb";typeof i=="number"?(this.width=i,this.height=o??0,this.data=new Uint8ClampedArray(this.width*this.height*4)):(this.data=i,this.width=o??0,this.height=s??i.length/4/this.width)}}globalThis.ImageData=n}pa();let t=HTMLCanvasElement.prototype;t.getContext=function(r,i){return String(r??"2d").toLowerCase()!=="2d"?null:Ui(this,{alpha:i?.alpha!==!1,glyphAtlas:e.glyphAtlas})},t.toDataURL=function(r){if(r&&r!=="image/png")throw new Ae(`toDataURL(${r})`);return aa(this)??ed},rd=!0}function pp(e,t){let n=document.createElement("div");return Object.defineProperty(n,"clientWidth",{value:e,configurable:!0}),Object.defineProperty(n,"clientHeight",{value:t,configurable:!0}),document.body.appendChild(n),n}function fp(e){let t=e.indexOf(","),n=t>=0?e.slice(t+1):e,r=globalThis.atob(n),i=new Uint8Array(r.length);for(let o=0;o<r.length;o++)i[o]=r.charCodeAt(o);return i}function mp(){return typeof process<"u"&&!!process.versions?.node}async function gp(e,t){if(!mp())throw new Error("captureFrame(path) requires Node.js; omit the path to get the snapshot only");let n;try{({writeFile:n}=await import("node:fs/promises"))}catch(r){let i=r instanceof Error?r.message:String(r);throw new Error(`captureFrame(path) could not load node:fs/promises (${i}). Omit the path, or run under Node.`)}try{await n(e,fp(t))}catch(r){let i=r instanceof Error?r.message:String(r);throw new Error(`captureFrame could not write ${e}: ${i}`)}}function hp(e){rd||Gr();let t=e.width??td,n=e.height??nd,r=pp(t,n),i=[],o=[],s=!1,a=e.onEvent,d=e.onError,m=qr({container:r,seed:e.seed,deterministic:{origin:e.origin,actions:e.actions??[]}});m.onError=(T,v)=>{o.push({error:T,info:v}),d?.(T,v)},Object.defineProperty(m,"onError",{configurable:!0,enumerable:!0,get(){return d},set(T){d=T}});let l=T=>{i.push(T),a?.(T)},h=m.mount(e.cart,{initialState:e.initialState,gameManager:e.gameManager,onEvent:l}),S=()=>{if(s)throw new Error(lp)};return{runtime:m,container:r,get events(){return i.slice()},get errors(){return o.slice()},get cart(){return h},async step(T=1){S(),await h.step(T)},async advance(T){S(),await h.advance(T)},schedule(T){S(),h.schedule(T)},dispatch(T){S(),h.dispatch(T)},start(){return S(),h.start()},pause(){S(),h.pause()},resume(){S(),h.resume()},get paused(){return h.paused},key(T){S(),h.schedule({type:"key",atFrame:h.getClock().framesElapsed,key:T})},click(T,v){S(),h.schedule({type:"pointer",atFrame:h.getClock().framesElapsed,pointer:{kind:"down",x:T,y:v}})},async inspect(){S();let T=await h.getReplayMetadata();return{state:T.state,events:i.slice(),errors:o.slice(),replay:T,clock:h.getClock()}},async captureFrame(T){S();let v=h.snapshot();return T&&await gp(T,v.pngDataUrl),v},remount(T={}){return S(),i.length=0,o.length=0,"onEvent"in T&&(a=T.onEvent),h=m.mount(e.cart,{initialState:T.initialState??e.initialState,gameManager:T.gameManager??e.gameManager,onEvent:l}),h},destroy(){if(!s){s=!0;try{h.destroy()}finally{try{m.destroy()}finally{r.remove()}}}}}}var id="CYBERART_UPDATE_GOLDEN";function od(e=typeof process<"u"?process.env:void 0){let t=e?.[id];return t==="1"||t==="true"}function ho(e){return Ji(Rr(e))}function sd(e,t,n={}){if(e.width!==t.width||e.height!==t.height){let l=bp(e,t);return{match:!1,differingPixels:e.width*e.height,width:e.width,height:e.height,artifacts:l,updatedGolden:!1}}let r=n.tolerance??0,i=n.perceptualThreshold,o=n.maxDifferingPixels??0,s=new Uint8ClampedArray(e.width*e.height*4),a=0;for(let l=0;l<e.data.length;l+=4){let h=Math.abs(e.data[l]-t.data[l]),S=Math.abs(e.data[l+1]-t.data[l+1]),C=Math.abs(e.data[l+2]-t.data[l+2]),T=Math.abs(e.data[l+3]-t.data[l+3]),v=.299*h+.587*S+.114*C,P=n.alphaTolerance??r;(i!==void 0?v<=i&&T<=P:h<=r&&S<=r&&C<=r&&T<=P)?(s[l]=0,s[l+1]=0,s[l+2]=0,s[l+3]=255):(a+=1,s[l]=255,s[l+1]=0,s[l+2]=255,s[l+3]=255)}let d=yo(t,e,Ft(s,e.width,e.height),a);return n.updateGolden===!0||od()?{match:!0,differingPixels:0,width:e.width,height:e.height,artifacts:yo(e,e,Ft(s,e.width,e.height),0),updatedGolden:!0}:{match:a<=o,differingPixels:a,width:e.width,height:e.height,artifacts:d,updatedGolden:!1}}function ad(e,t,n={}){let r=sd(e,t,n);if(!r.match){let i=new Error(`Visual assertion failed: ${r.differingPixels} differing pixels (${r.width}\xD7${r.height}). Review expected/actual/diff PNG buffers on the result.`);throw i.visual=r,i}return r}function yp(e,t,n={}){return ad(ho(e),ho(t),n)}function yo(e,t,n,r){let i=ln(e.width,e.height,e.data),o=ln(t.width,t.height,t.data),s=ln(n.width,n.height,n.data);return{expectedPng:i,actualPng:o,diffPng:s,expectedDataUrl:pn(e.width,e.height,e.data),actualDataUrl:pn(t.width,t.height,t.data),diffDataUrl:pn(n.width,n.height,n.data),differingPixels:r}}function bp(e,t){let n=Math.max(e.width,t.width),r=Math.max(e.height,t.height),i=new Uint8ClampedArray(n*r*4);for(let o=0;o<i.length;o+=4)i[o]=255,i[o+1]=0,i[o+2]=255,i[o+3]=255;return yo(t,e,Ft(i,n,r),n*r)}async function vp(e,t,n={}){let{mkdir:r,writeFile:i}=await import("node:fs/promises"),{join:o}=await import("path");await r(e,{recursive:!0});let s=o(e,n.expected??"expected.png"),a=o(e,n.actual??"actual.png"),d=o(e,n.diff??"diff.png");return await i(s,t.expectedPng),await i(a,t.actualPng),await i(d,t.diffPng),{expectedPath:s,actualPath:a,diffPath:d}}var dd="cyberart.state.save",cd="cyberart.state.load";var Kr=1,$t="cyberart.diagnostic.rejected",bo=8,Sp=new Set(["intent","state","diagnostic"]),kp=new Set([dd,cd]);function Wr(e){return typeof e=="string"&&Sp.has(e)}function Ip(e){if(e.kind!==void 0)return Wr(e.kind)?e.kind:void 0;if(!(typeof e.type!="string"||e.type.length===0)){if(kp.has(e.type))return"intent";for(let t of e.type.split("."))if(Wr(t))return t}}function Ep(e,t){let n=e.split("."),r=t.split(".");if(n.length!==r.length)return!1;for(let i=0;i<n.length;i++)if(n[i]!=="*"&&n[i]!==r[i])return!1;return!0}function Qt(e,t){for(let n of e)if(Ep(n,t))return!0;return!1}function Rp(e){if(e===void 0)return{ok:!0,value:void 0};try{return{ok:!0,value:JSON.parse(JSON.stringify(e))}}catch{return{ok:!1}}}function vo(e,t){if(!e||typeof e.type!="string"||e.type.length===0)return{ok:!1,reason:"malformed",detail:"type is required"};if(e.schemaVersion!==void 0&&e.schemaVersion!==Kr)return{ok:!1,reason:"malformed",detail:`unsupported schemaVersion ${String(e.schemaVersion)}`};let n=Ip(e);if(!n)return{ok:!1,reason:"malformed",detail:`cannot infer kind from type "${e.type}"`};let r=Rp(e.payload);if(!r.ok)return{ok:!1,reason:"malformed",detail:"payload is not JSON-serializable"};let i=t.createId(),o=typeof e.correlationId=="string"&&e.correlationId.length>0?e.correlationId:i,s=typeof e.causationId=="string"&&e.causationId.length>0?e.causationId:t.causationId,a=typeof e.target=="string"&&e.target.length>0?e.target:void 0,d=t.maxHops??bo,m=t.parentHops===void 0?d:Math.max(0,t.parentHops-1),l=typeof e.idempotencyKey=="string"&&e.idempotencyKey.length>0?e.idempotencyKey:void 0,h={schemaVersion:Kr,type:e.type,kind:n,source:t.source,id:i,correlationId:o,seq:t.seq,hops:m};return a&&(h.target=a),s&&(h.causationId=s),l&&(h.idempotencyKey=l),r.value!==void 0&&(h.payload=r.value),{ok:!0,envelope:h}}var Cp=new Set(["rate-limited","storm-detected","hop-limit","loop-detected","not-subscribed"]),Ap=8,wp=8,Pp=16,xp=256,Tp=256,Dp=["*.intent.*"];function ud(e={}){let t=e.hostSource??"host",n="router",r=e.maxPerTurn??Ap,i=e.maxCausationDepth??wp,o=e.maxHops??bo,s=e.maxCorrelationPerTurn??Pp,a=e.maxIndex??xp,d=e.maxDecisions??Tp,m=e.maxPerWindow,l=e.windowMs??1e3,h=e.now??Date.now,S=0,C=e.createId??(()=>`evt-${++S}`),T=new Map,v=[],P=[],$=new Map,j=new Map,O=new Map,F=[],w=0,p=0,I=0;function c(H){try{return JSON.parse(JSON.stringify(H))}catch{return H}}function f(H){for(F.push(H);F.length>d;)F.shift();for(let Y of P)try{Y(c(H))}catch{}}function y(H,Y){let re={outcome:Y.outcome,source:Y.source,type:H.type,kind:H.kind,envelopeId:H.id,deliveredTo:Y.deliveredTo,hops:H.hops,seq:H.seq,correlationId:H.correlationId,schemaVersion:H.schemaVersion,turn:I,time:h()};return Y.reason&&(re.reason=Y.reason),Y.detail&&(re.detail=Y.detail),Y.priorEnvelopeId&&(re.priorEnvelopeId=Y.priorEnvelopeId),H.target&&(re.target=H.target),H.causationId&&(re.causationId=H.causationId),H.idempotencyKey&&(re.idempotencyKey=H.idempotencyKey),H.payload!==void 0&&(re.payload=c(H.payload)),re}let A=[],D=!1;function R(H,Y,re){for(H.set(Y,re);H.size>a;){let X=H.keys().next().value;if(X===void 0)break;H.delete(X)}}function N(H){R($,H.id,{type:H.type,source:H.source,causationId:H.causationId,hops:H.hops,correlationId:H.correlationId,idempotencyKey:H.idempotencyKey})}function q(H,Y){Y&&(H.correlationId||(H.correlationId=Y.correlationId),H.causationId||(H.causationId=Y.id),!H.idempotencyKey&&Y.idempotencyKey&&(H.idempotencyKey=`${Y.idempotencyKey}::${H.type}`))}function M(H,Y){if(H){let re=$.get(H);return re?re.hops:o}return Y}function u(H,Y){return`${H}\0${Y}`}function b(H,Y){H.idempotencyKey&&R(O,u(H.source,H.idempotencyKey),Y)}function x(H,Y){if(Y)return O.get(u(H,Y))}function V(H){return x(H.source,H.idempotencyKey)}function L(H){return H.seq+=1,H.seq}function W(H,Y){if(!(typeof Y.causationId=="string"&&Y.causationId.length>0))return H.lastDelivered}function U(H){let Y=new Set,re=new Set([`${H.type}\0${H.source}`]),X=H.causationId,ee=0;for(;X;){if(ee+=1,ee>i||Y.has(X))return!0;Y.add(X);let me=$.get(X);if(!me)break;let Ue=`${me.type}\0${me.source}`;if(re.has(Ue))return!0;re.add(Ue),X=me.causationId}return!1}function B(H){let Y=(j.get(H)??0)+1;return j.set(H,Y),Y}function g(H,Y){m!==void 0&&(H.emitTimestamps=H.emitTimestamps.filter(re=>Y-re<l))}function k(H,Y){return(Y.kind==="state"||Y.kind==="diagnostic")&&!H.authoritative?!1:Qt(H.emit,Y.type)}function E(H){for(let Y of v)if(Qt(Y.patterns,H.type))try{Y.listener(H)}catch{}}function _(H){let Y=[];if(H.target){let re=T.get(H.target);return!re||!Qt(re.subscribe,H.type)||(re.channel.dispatch(H),re.lastDelivered={id:H.id,hops:H.hops,correlationId:H.correlationId,idempotencyKey:H.idempotencyKey},Y.push(re.id)),Y}for(let re of T.values())Qt(re.subscribe,H.type)&&(re.channel.dispatch(H),re.lastDelivered={id:H.id,hops:H.hops,correlationId:H.correlationId,idempotencyKey:H.idempotencyKey},Y.push(re.id));return Y}function G(H,Y,re,X,ee,me,Ue){let qe={reason:X,eventType:Y,source:re};ee&&(qe.detail=ee),p+=1;let Ye=C(),kt={schemaVersion:Kr,type:$t,kind:"diagnostic",source:n,id:Ye,correlationId:me??Ye,seq:p,hops:0,payload:qe};Ue&&(kt.causationId=Ue),N(kt);let zt=T.get(H);zt&&zt.channel.dispatch(kt),E(kt)}function Z(H,Y,re,X,ee){if(G(H,ee?.type??(typeof Y.type=="string"?Y.type:""),ee?.source??H,re,X,ee?.correlationId,ee?.id),ee?.idempotencyKey&&!Cp.has(re)&&b(ee,{status:"rejected"}),ee)f(y(ee,{outcome:"rejected",reason:re,detail:X,source:H,deliveredTo:[]}));else{let me={outcome:"rejected",reason:re,source:H,type:typeof Y.type=="string"?Y.type:"",deliveredTo:[],turn:I,time:h()};X&&(me.detail=X),typeof Y.idempotencyKey=="string"&&(me.idempotencyKey=Y.idempotencyKey),f(me)}}function z(H,Y){N(H),b(H,{status:"accepted",envelope:H}),B(H.correlationId),E(H);let re=_(H);f(y(H,{outcome:"accepted",source:Y,deliveredTo:re}))}function ne(H,Y,re,X){let ee=X?.type??(typeof Y.type=="string"?Y.type:""),me={outcome:"duplicate",reason:"duplicate",detail:re.status==="accepted"?"idempotent accepted":"idempotent rejected",source:H,type:ee,deliveredTo:[],turn:I,time:h()};X?(me.kind=X.kind,me.envelopeId=X.id,me.hops=X.hops,me.seq=X.seq,me.correlationId=X.correlationId,me.schemaVersion=X.schemaVersion,X.target&&(me.target=X.target),X.causationId&&(me.causationId=X.causationId),X.idempotencyKey&&(me.idempotencyKey=X.idempotencyKey),X.payload!==void 0&&(me.payload=c(X.payload))):typeof Y.idempotencyKey=="string"&&(me.idempotencyKey=Y.idempotencyKey),re.status==="accepted"&&(me.priorEnvelopeId=re.envelope.id,me.envelopeId||(me.envelopeId=re.envelope.id)),f(me)}function Q(H,Y,re,X){if(!re.ok){Z(H,Y,"malformed",re.detail);return}let ee=re.envelope,me=V(ee);if(me)return ne(H,Y,me,ee),me.status==="accepted"?me.envelope:void 0;if(ee.hops<1){Z(H,Y,"hop-limit","no hops remaining",ee);return}if(ee.target&&ee.target!==t){let Ue=T.get(ee.target);if(!Ue){Z(H,Y,"unknown-target",`unknown target "${ee.target}"`,ee);return}if(!Qt(Ue.subscribe,ee.type)){Z(H,Y,"not-subscribed",`target "${ee.target}" does not subscribe to ${ee.type}`,ee);return}}if(X){if(!k(X,ee)){Z(H,Y,"unauthorized","source may not emit this event",ee);return}if(X.emitsThisTurn+=1,X.emitsThisTurn>r){Z(H,Y,"rate-limited","maxPerTurn exceeded",ee);return}if(m!==void 0){let qe=h();if(g(X,qe),X.emitTimestamps.push(qe),X.emitTimestamps.length>m){Z(H,Y,"rate-limited","maxPerWindow exceeded",ee);return}}if(U(ee)){Z(H,Y,"loop-detected","causation chain cycle or depth exceeded",ee);return}if((j.get(ee.correlationId)??0)+1>s){Z(H,Y,"storm-detected","correlationId storm",ee);return}if(e.validate){let qe;try{qe=e.validate(ee)}catch(Ye){let kt=Ye instanceof Error?Ye.message:"validate threw";Z(H,Y,"host-rejected",kt,ee);return}if(qe!==!0){Z(H,Y,"host-rejected",qe.detail,ee);return}}}else{if(U(ee)){Z(H,Y,"loop-detected","causation chain cycle or depth exceeded",ee);return}if((j.get(ee.correlationId)??0)+1>s){Z(H,Y,"storm-detected","correlationId storm",ee);return}}return z(ee,H),ee}function he(H,Y){let re=T.get(H);if(!re)return;let X={...Y},ee=W(re,X);q(X,ee);let me=x(re.id,X.idempotencyKey);if(me){ne(H,X,me);return}let Ue=L(re),qe=vo(X,{source:re.id,createId:C,seq:Ue,causationId:ee?.id,maxHops:o,parentHops:M(X.causationId??ee?.id,ee?.hops)});Q(H,X,qe,re)}function ke(H,Y){let re=Y?.cause,X={...H};q(X,re);let ee=x(t,X.idempotencyKey);if(ee)return ne(t,X,ee),ee.status==="accepted"?ee.envelope:void 0;w+=1;let me=vo(X,{source:t,createId:C,seq:w,causationId:X.causationId,maxHops:o,parentHops:M(X.causationId,re?.hops)});return Q(t,X,me,void 0)}function Ce(){if(!D){D=!0;try{for(;A.length>0;){let H=A.shift();H&&(H.kind==="cart"?he(H.participantId,H.event):H.result=ke(H.event,H.extras))}}finally{D=!1}}}function Pe(H){A.push(H),Ce()}return{attach(H,Y,re={}){if(H===t||H===n)throw new Error(`createEventRouter: "${H}" is a reserved participant id`);for(let me of T.values())if(me.channel===Y&&me.id!==H)throw new Error(`createEventRouter: channel already attached as "${me.id}"`);T.get(H)?.unsubscribe();let ee={id:H,channel:Y,emit:re.emit??Dp,subscribe:re.subscribe??[],authoritative:re.authoritative===!0,seq:0,emitsThisTurn:0,emitTimestamps:[],unsubscribe:()=>{}};ee.unsubscribe=Y.onEvent(me=>{Pe({kind:"cart",participantId:H,event:me})}),T.set(H,ee)},detach(H){let Y=T.get(H);Y&&(Y.unsubscribe(),T.delete(H))},publish(H,Y){let re={kind:"publish",event:H,extras:Y};return Pe(re),re.result},subscribe(H,Y){let re={patterns:H,listener:Y};return v.push(re),()=>{let X=v.indexOf(re);X>=0&&v.splice(X,1)}},subscribeDecision(H){return P.push(H),()=>{let Y=P.indexOf(H);Y>=0&&P.splice(Y,1)}},inspectParticipants(){return[...T.values()].map(H=>({id:H.id,emit:H.emit.slice(),subscribe:H.subscribe.slice(),authoritative:H.authoritative}))},inspectDecisions(){return F.map(H=>c(H))},turn(){I+=1,j.clear();for(let H of T.values())H.emitsThisTurn=0,H.lastDelivered=void 0,m!==void 0&&g(H,h())}}}var Op=320,Mp=180,Np=1024,_p="Runtime group has been destroyed";function Lp(e){let t="";for(let n=0;n<32;n++){let r=e.charCodeAt(n%Math.max(e.length,1))+n*17&255;t+=r.toString(16).padStart(2,"0")}return`0x${t}`}function Vp(e,t){let n=document.createElement("div");return Object.defineProperty(n,"clientWidth",{value:e,configurable:!0}),Object.defineProperty(n,"clientHeight",{value:t,configurable:!0}),document.body.appendChild(n),n}function pd(e){let t=e.capability,n={},r=e.emit??t?.emit,i=e.subscribe??t?.subscribe,o=e.authoritative??t?.authoritative;return r&&(n.emit=r),i&&(n.subscribe=i),o!==void 0&&(n.authoritative=o),n}function ld(e){try{return JSON.parse(JSON.stringify(e))}catch{return e}}function Fp(e){let t=new Set([$t,"*.*","*.*.*","*.*.*.*","*.*.*.*.*"]);for(let n of e){let r=pd(n);for(let i of r.emit??[])t.add(i);for(let i of r.subscribe??[])t.add(i)}return[...t]}function jr(e){if(!e.participants.length)throw new Error("createRuntimeGroup: at least one participant is required");let t=new Set;for(let p of e.participants){if(!p.id)throw new Error("createRuntimeGroup: participant id is required");if(t.has(p.id))throw new Error(`createRuntimeGroup: duplicate participant id "${p.id}"`);t.add(p.id)}let n=e.origin??0,r=e.width??Op,i=e.height??Mp,o=e.maxTrace??Np,s=[...e.participants].sort((p,I)=>p.id.localeCompare(I.id)),a=[],d=new Map,m=0,l=e.createId??e.router?.createId??(()=>`evt-${++m}`),h=e.now??e.router?.now??(()=>{let p=a[0];if(!p)return n;try{return p.cart.getClock().now}catch{return n}}),S=ud({...e.router,createId:l,now:h,validate:e.validate??e.router?.validate}),C=[],T=!1,v=!1,P=()=>{},$=p=>I=>{p.events.push(I),p.userOnEvent?.(I)},j=()=>{if(v)throw new Error(_p)},O=()=>{P();for(let p of a){try{S.detach(p.id)}catch{}try{p.runtime.destroy()}catch{}p.ownsContainer&&p.container.remove()}a.length=0,d.clear()};try{for(let p of s){let I=p.width??r,c=p.height??i,f=!p.container,y=p.container??Vp(I,c),A=qr({container:y,seed:p.seed??Lp(p.id),deterministic:{origin:n},audioBroker:e.audioBroker,audioParticipantId:e.audioBroker?p.id:void 0,kind:p.kind??"render"}),D={id:p.id,kind:p.kind??"render",cartDef:p.cart,initialState:p.initialState,gameManager:p.gameManager,userOnEvent:p.onEvent,runtime:A,container:y,ownsContainer:f,cart:void 0,events:[],errors:[],suspended:!1};A.onError=(R,N)=>{D.errors.push({error:R,info:N})},S.attach(p.id,A.hostChannel,pd(p)),D.cart=A.mount(p.cart,{initialState:p.initialState,gameManager:p.gameManager,onEvent:$(D)}),a.push(D),d.set(D.id,D)}P=S.subscribe(Fp(s),p=>{for(C.push(ld(p));C.length>o;)C.shift()})}catch(p){throw O(),p}let F=p=>({id:p.id,kind:p.kind,runtime:p.runtime,container:p.container,get events(){return p.events.slice()},get errors(){return p.errors.slice()},get cart(){return p.cart}});return{router:S,origin:n,get paused(){return T},get audioBroker(){return e.audioBroker},participant(p){j();let I=d.get(p);if(!I)throw new Error(`createRuntimeGroup: unknown participant "${p}"`);return F(I)},async step(p=1){if(j(),T)return;let I=Math.max(0,Math.floor(p));for(let c=0;c<I;c++){S.turn();for(let f of a)if(!f.suspended)try{await f.cart.step(1)}catch(y){f.errors.push({error:y,info:{phase:"update",consecutive:f.errors.length+1,stopped:!1}})}}},pause(){j(),T=!0;for(let p of a)p.cart.pause()},resume(){j(),T=!1;for(let p of a)p.cart.resume()},reset(){j(),C.length=0;for(let p of a)p.events.length=0,p.errors.length=0,p.suspended=!1,p.cart=p.runtime.mount(p.cartDef,{initialState:p.initialState,gameManager:p.gameManager,onEvent:$(p)});S.turn()},resize(p,I){j();let c=Math.max(1,p|0),f=Math.max(1,I|0);for(let y of a){Object.defineProperty(y.container,"clientWidth",{value:c,configurable:!0}),Object.defineProperty(y.container,"clientHeight",{value:f,configurable:!0});let A=y.cart.canvas;A&&(A.width=c,A.height=f)}},detach(p){j();let I=d.get(p);if(!I)throw new Error(`createRuntimeGroup: unknown participant "${p}"`);try{S.detach(I.id)}catch{}try{I.runtime.destroy()}catch{}e.audioBroker&&e.audioBroker.teardown(I.id),I.ownsContainer&&I.container.remove();let c=a.indexOf(I);c>=0&&a.splice(c,1),d.delete(p)},suspendParticipant(p){j();let I=d.get(p);if(!I)throw new Error(`createRuntimeGroup: unknown participant "${p}"`);I.suspended=!0,I.cart.pause()},resumeParticipant(p){j();let I=d.get(p);if(!I)throw new Error(`createRuntimeGroup: unknown participant "${p}"`);I.suspended=!1,T||I.cart.resume()},isParticipantSuspended(p){j();let I=d.get(p);if(!I)throw new Error(`createRuntimeGroup: unknown participant "${p}"`);return I.suspended},dispatch(p,I){j();let c=d.get(p);if(!c)throw new Error(`createRuntimeGroup: unknown participant "${p}"`);c.cart.dispatch(I)},publish(p,I){return j(),S.publish(p,I)},inspectParticipants(){j();let p=new Map(a.map(I=>[I.id,I.kind]));return S.inspectParticipants().map(I=>({...I,kind:p.get(I.id)??"render"}))},async inspect(){j();let p={},I={},c=new Map(S.inspectParticipants().map(A=>[A.id,A]));for(let A of a){let D=await A.cart.getReplayMetadata(),R=A.cart.getClock();I[A.id]=R;let N=c.get(A.id);p[A.id]={state:D.state,events:A.events.slice(),errors:A.errors.slice(),kind:A.kind,clock:R,emit:N?.emit.slice()??[],subscribe:N?.subscribe.slice()??[],authoritative:N?.authoritative===!0,suspended:A.suspended}}let f=C.map(A=>ld(A)),y=a.filter(A=>A.suspended).map(A=>A.id).sort();return{participants:p,trace:f,diagnostics:{paused:T,participantIds:a.map(A=>A.id),suspendedIds:y,clocks:I,rejections:f.filter(A=>A.type===$t).map(A=>A.payload)}}},destroy(){if(!v){v=!0,T=!1;try{O()}finally{C.length=0}}}}}function $p(e){return Gr(),jr(e)}var So=1,ko=512,Ct="[REDACTED]",Zt=["prompt","credentials","credential","authorization","apiKey","secret"],Hp=new Set([nt,Qe]);function rt(e){try{return JSON.parse(JSON.stringify(e))}catch{return e}}function Ur(e,t){if(e==null)return e;if(Array.isArray(e))return e.map(i=>Ur(i,t));if(typeof e!="object")return e;let n=e,r={};for(let[i,o]of Object.entries(n))r[i]=t.has(i)?Ct:Ur(o,t);return r}function Bp(e){return e instanceof Error&&typeof e.message=="string"?e.message:"error"}function qp(e,t){return t?!(t.types&&!t.types.includes(e.type)||t.sources&&!t.sources.includes(e.source)||t.outcomes&&!t.outcomes.includes(e.outcome)||t.correlationId&&e.correlationId!==t.correlationId):!0}function fd(e){return JSON.stringify({outcome:e.outcome,reason:e.reason,source:e.source,target:e.target,type:e.type,kind:e.kind,envelopeId:e.envelopeId,priorEnvelopeId:e.priorEnvelopeId,correlationId:e.correlationId,causationId:e.causationId,hops:e.hops,seq:e.seq,idempotencyKey:e.idempotencyKey,deliveredTo:e.deliveredTo,payload:e.payload})}function Io(e,t){if(e.length!==t.length)return{ok:!1,detail:`record count ${t.length} !== ${e.length}`};for(let n=0;n<e.length;n++){let r=fd(e[n]),i=fd(t[n]);if(r!==i)return{ok:!1,detail:`record ${n} differs`}}return{ok:!0}}function md(e){let t=new Map,n=[];for(let o of e){if(o.outcome==="duplicate"){n.push(void 0);continue}let s={envelopeId:o.envelopeId,type:o.type,source:o.source,outcome:o.outcome,children:[]};o.reason&&(s.reason=o.reason),n.push(s),o.envelopeId&&!t.has(o.envelopeId)&&t.set(o.envelopeId,s)}let r=new Set;for(let o=0;o<e.length;o++){let s=e[o],a=n[o];if(!a)continue;let d=s.causationId?t.get(s.causationId):void 0;d&&d!==a&&(d.children.push(a),r.add(a))}let i=[];for(let o of n)o&&!r.has(o)&&i.push(o);return i}function gd(e,t){let n={id:e.id,emit:e.emit.slice(),subscribe:e.subscribe.slice(),authoritative:e.authoritative,errorCount:0};return t&&(n.kind=t),n}function Gp(e,t,n){let r=t.errors[t.errors.length-1],i={id:e,kind:t.kind,emit:t.emit.slice(),subscribe:t.subscribe.slice(),authoritative:t.authoritative,clock:rt(t.clock),state:Ur(t.state,n),errorCount:t.errors.length};return r&&(i.lastError=Bp(r.error)),i}function Jr(e={}){let t=new Set([...Zt,...e.redactedKeys??[]]),n=e.maxRecords??ko,r=e.registry,i=0,o=0,s=!1,a=[],d=[],m,l=[],h=0,S=[],C={},T=()=>{},v=()=>{if(s)throw new Error("Replay inspector has been destroyed")},P=F=>{let w=r?.get(F.type),p={index:o,turn:F.turn,time:F.time,outcome:F.outcome,source:F.source,type:F.type,deliveredTo:F.deliveredTo.slice(),payload:Ur(F.payload,t)};for(o+=1,F.reason&&(p.reason=F.reason),F.detail&&(p.detail=F.detail),F.target&&(p.target=F.target),F.kind&&(p.kind=F.kind),F.envelopeId&&(p.envelopeId=F.envelopeId),F.priorEnvelopeId&&(p.priorEnvelopeId=F.priorEnvelopeId),F.correlationId&&(p.correlationId=F.correlationId),F.causationId&&(p.causationId=F.causationId),F.hops!==void 0&&(p.hops=F.hops),F.seq!==void 0&&(p.seq=F.seq),F.idempotencyKey&&(p.idempotencyKey=F.idempotencyKey),F.schemaVersion!==void 0&&(p.schemaVersion=F.schemaVersion),w&&(p.payloadSchemaVersion=w.payloadSchema.version),a.push(p);a.length>n;)a.shift(),i+=1},$=F=>a.filter(w=>qp(w,F)).map(w=>rt(w)),j=F=>F?F.inspectParticipants().map(w=>gd(w,w.kind)):S.map(w=>rt(w)),O={watchRouter(F){if(v(),T(),S=F.inspectParticipants().map(p=>gd(p)),a.length===0)for(let p of F.inspectDecisions())P(p);let w=F.subscribeDecision(p=>P(p));return T=()=>{w(),T=()=>{}},d.push(T),T},bind(F){v(),m&&T(),m=F,h=F.origin,O.watchRouter(F.router),S=j(F);let w={publish(p,I){v();let c={kind:"publish",event:rt(p)};return I?.cause&&(c.extras={cause:rt(I.cause)}),l.push(c),F.publish(p,I)},dispatch(p,I){v();let c=rt(I);typeof c.type=="string"&&Hp.has(c.type)?l.push({kind:"asset",participantId:p,event:c}):l.push({kind:"dispatch",participantId:p,event:c}),F.dispatch(p,I)},async step(p=1){v(),l.push({kind:"step",frames:p}),await F.step(p)},async report(){v();let p=await F.inspect(),I=[];for(let c of Object.keys(p.participants).sort())I.push(Gp(c,p.participants[c],t));S=I,C={};for(let c of I)C[c.id]=rt(c.state);return O.report()},async exportTrace(p){return await w.report(),O.exportTrace(p)},unbind(){T(),m=void 0}};return w},importTrace(F){v();let w=typeof F=="string"?JSON.parse(F):F;if(w.schemaVersion!==So)throw new Error("Replay inspector: unsupported export schemaVersion");i=0,o=0,a.length=0,l=rt(w.tape??[]),h=w.origin??0,S=rt(w.participants??[]),C=rt(w.snapshots??{});for(let p of w.records??[])P({outcome:p.outcome,reason:p.reason,detail:p.detail,source:p.source,type:p.type,kind:p.kind,envelopeId:p.envelopeId,priorEnvelopeId:p.priorEnvelopeId,target:p.target,deliveredTo:p.deliveredTo,hops:p.hops,seq:p.seq,correlationId:p.correlationId,causationId:p.causationId,idempotencyKey:p.idempotencyKey,schemaVersion:p.schemaVersion,payload:p.payload,turn:p.turn,time:p.time})},exportTrace(F){return v(),{schemaVersion:So,origin:h,redactedKeys:[...t],participants:rt(S),tape:rt(l),records:$(F),snapshots:rt(C)}},report(F){v();let w=$(F);return{schemaVersion:So,participants:rt(S),records:w,trees:md(w),dropped:i}},causationTree(F){v();let w=$(F?{correlationId:F}:void 0);return md(w)},records(){return v(),a.map(F=>rt(F))},reset(){v(),a.length=0,l=[],i=0,o=0,C={},m&&(S=j(m))},destroy(){if(!s){for(s=!0,T();d.length>0;)d.pop()?.();a.length=0,l=[],S=[],C={},m=void 0}}};return O}async function Eo(e,t,n={}){let r=Jr({redactedKeys:n.redactedKeys??e.redactedKeys,maxRecords:n.maxRecords,registry:n.registry}),i=r.bind(t);try{for(let s of e.tape)s.kind==="publish"?i.publish(s.event,s.extras):s.kind==="dispatch"||s.kind==="asset"?i.dispatch(s.participantId,s.event):await i.step(s.frames);let o=await i.report();return{inspector:r,report:o}}catch(o){throw r.destroy(),o}}var zr=1,yd=ko,Ro=["binding-conflict","asset-failure","revision-rollback","sequence-interruption","text-only-fallback"],bd=["state-projection","binding","content-revision","staging","asset","sequence","presentation","snapshot"],vd=[...Zt,"privatePrompt","signedUrl","signedURL","signed_url","presignedUrl","password"],Kp=new Set(Ro),Wp=new Set(bd),jp=new Set(["signedUrl","signedURL","signed_url","presignedUrl","presignedURL"]),Up=/[?&](X-Amz-Signature|X-Amz-Credential|X-Amz-Security-Token|X-Goog-Signature|Signature|sig)=/i,Jp=/https?:\/\/[^\s"'<>)\]]+/gi,zp="Selection trace has been destroyed",Yp=new Set(Ro);function Xp(e){return typeof e=="string"&&Kp.has(e)}function Qp(e){return typeof e=="string"&&Wp.has(e)}function it(e){try{return JSON.parse(JSON.stringify(e))}catch{return e}}function hd(e){return/^https?:\/\//i.test(e)?Up.test(e):!1}function Sd(e){return hd(e)?Ct:e.replace(Jp,t=>hd(t)?Ct:t)}function At(e,t){if(e==null)return e;if(typeof e=="string")return Sd(e);if(Array.isArray(e))return e.map(i=>At(i,t));if(typeof e!="object")return e;let n=e,r={};for(let[i,o]of Object.entries(n))t.has(i)||jp.has(i)?r[i]=Ct:r[i]=At(o,t);return r}function kd(e,t,n){if(e==null)return e;if(Array.isArray(e))return e.map(o=>kd(o,t,n));if(typeof e!="object")return Ct;let r=e,i={};for(let[o,s]of Object.entries(r))t.has(o)?i[o]=At(s,n):i[o]=Ct;return i}function Zp(e,t){return t?!(t.kinds&&!t.kinds.includes(e.kind)||t.reasons&&!t.reasons.includes(e.reason)||t.correlationId&&e.correlationId!==t.correlationId||t.causationId&&e.causationId!==t.causationId||t.envelopeId&&e.envelopeId!==t.envelopeId||t.contentId&&![e.requestedContent?.contentId,e.activatedContent?.contentId].includes(t.contentId)||t.sequenceId&&e.sequence?.sequenceId!==t.sequenceId):!0}function ef(e,t,n){return Yp.has(e)||n>=1?!0:n<=0?!1:(t*2654435761>>>0)/4294967296<n}function tf(e,t){if(!e)return[];let n=new Set;for(let r of t)r.correlationId&&n.add(r.correlationId),r.causationId&&n.add(r.causationId),r.envelopeId&&n.add(r.envelopeId);return n.size===0?[]:e.records().filter(r=>r.correlationId!==void 0&&n.has(r.correlationId)||r.causationId!==void 0&&n.has(r.causationId)||r.envelopeId!==void 0&&n.has(r.envelopeId))}function nf(e,t){return e.recordSelectionDecision(t)}function rf(e,t){return{...it(e),selectionTrace:t}}function of(e={}){let t=new Set([...vd,...e.redactedKeys??[]]),n=new Set(e.projectionWhitelist??[]),r=e.maxRecords??yd,i=e.sampleRate??1,o=e.inspector,s=0,a=0,d=0,m=!1,l=[],h=[],S={},C=()=>{if(m)throw new Error(zp)},T=O=>l.filter(F=>Zp(F,O)).map(F=>it(F)),v=O=>kd(O,n,t),P=(O,F)=>{let w={index:F,kind:O.kind,reason:O.reason,summary:Sd(String(O.summary))};return O.turn!==void 0&&(w.turn=O.turn),O.time!==void 0&&(w.time=O.time),O.correlationId&&(w.correlationId=O.correlationId),O.causationId&&(w.causationId=O.causationId),O.envelopeId&&(w.envelopeId=O.envelopeId),O.initiatingEventType&&(w.initiatingEventType=O.initiatingEventType),O.projectionRevision!==void 0&&(w.projectionRevision=O.projectionRevision),O.projection!==void 0?w.projection=v(O.projection):O.hostState!==void 0&&(w.projection=v(O.hostState)),O.bindings&&(w.bindings=At(it(O.bindings.slice()),t)),O.winningBindingId!==void 0&&(w.winningBindingId=O.winningBindingId),O.rejectedBindingIds&&(w.rejectedBindingIds=O.rejectedBindingIds.slice()),O.defaultFallback!==void 0&&(w.defaultFallback=O.defaultFallback),O.requestedContent&&(w.requestedContent=At(it(O.requestedContent),t)),O.activatedContent!==void 0&&(w.activatedContent=O.activatedContent?At(it(O.activatedContent),t):null),O.staging&&(w.staging=At(it(O.staging),t)),O.lastKnownGood!==void 0&&(w.lastKnownGood=O.lastKnownGood?At(it(O.lastKnownGood),t):null),O.asset&&(w.asset=At(it(O.asset),t)),O.sequence&&(w.sequence=At(it(O.sequence),t)),O.presentation&&(w.presentation=At(it(O.presentation),t)),O.snapshot&&(w.snapshot=it(O.snapshot)),w},$=O=>{for(l.push(O);l.length>r;)l.shift(),s+=1};return{recordSelectionDecision(O){C();let F=d;if(d+=1,!ef(O.reason,F,i))return a+=1,null;let w=P(O,F);return $(w),it(w)},records(O){return C(),T(O)},query(O){return C(),T(O)},chain(O){return C(),T({correlationId:O})},exportTrace(O){C();let F=T(O),w=h.length>0?h.filter(I=>O?.correlationId?I.correlationId===O.correlationId:!0):tf(o,F),p={schemaVersion:zr,redactedKeys:[...t],projectionWhitelist:[...n],dropped:s,sampledOut:a,records:F,inspectorRecords:it(w)};return S.revision!==void 0&&(p.snapshotRevision=S.revision),S.schemaVersion!==void 0&&(p.snapshotSchemaVersion=S.schemaVersion),S.seed&&(p.snapshotSeed=S.seed),p},importTrace(O){C();let F=typeof O=="string"?JSON.parse(O):O;if(F.schemaVersion!==zr)throw new Error("Selection trace: unsupported export schemaVersion");s=F.dropped??0,a=F.sampledOut??0,d=0,l.length=0,h=it(F.inspectorRecords??[]),S={},F.snapshotRevision!==void 0&&(S.revision=F.snapshotRevision),F.snapshotSchemaVersion!==void 0&&(S.schemaVersion=F.snapshotSchemaVersion),F.snapshotSeed&&(S.seed=F.snapshotSeed);for(let w of F.records??[]){let p=typeof w.index=="number"?w.index:d;d=Math.max(d,p+1),$(it(w))}},report(O){return C(),{schemaVersion:zr,records:T(O),dropped:s,sampledOut:a}},setSnapshotProvenance(O){C(),S={...S,...O}},reset(){C(),l.length=0,h=[],s=0,a=0,d=0,S={}},destroy(){m||(m=!0,l.length=0,h=[],S={})}}}var kn="cue.started",Yn="cue.completed",In="cue.cancelled",en="cue.replaced";function sf(e,t){let n=e<0?0:e>1?1:e;return t==="ease-out"?1-(1-n)*(1-n):n}function Id(e){return{type:e.type,atFrame:e.atFrame,name:e.name,idempotencyKey:e.idempotencyKey,progress:e.progress}}function Yr(e){return{name:e.name,idempotencyKey:e.idempotencyKey,phase:e.phase,startFrame:e.startFrame,durationFrames:e.durationFrames,delayFrames:e.delayFrames,easing:e.easing,progress:e.progress,repeatIndex:e.repeatIndex}}function Co(e){return e.startFrame+e.delayFrames}function af(e,t){if(!e||typeof e!="object")return{ok:!1,reason:"invalid",detail:"spec is required"};if(typeof e.name!="string"||e.name.length===0)return{ok:!1,reason:"invalid",detail:"name is required"};if(typeof e.idempotencyKey!="string"||e.idempotencyKey.length===0)return{ok:!1,reason:"invalid",detail:"idempotencyKey is required"};if(typeof e.durationFrames!="number"||!Number.isFinite(e.durationFrames)||e.durationFrames<0)return{ok:!1,reason:"invalid",detail:"durationFrames must be a non-negative finite number"};let n=e.startFrame===void 0?t:e.startFrame;if(typeof n!="number"||!Number.isFinite(n))return{ok:!1,reason:"invalid",detail:"startFrame must be finite"};let r=e.delayFrames??0;if(typeof r!="number"||!Number.isFinite(r)||r<0)return{ok:!1,reason:"invalid",detail:"delayFrames must be a non-negative finite number"};let i=e.easing??"linear";if(i!=="linear"&&i!=="ease-out")return{ok:!1,reason:"invalid",detail:"unsupported easing"};let o=e.onDuplicate??"replace";if(o!=="ignore"&&o!=="replace"&&o!=="reject")return{ok:!1,reason:"invalid",detail:"unsupported onDuplicate"};let s=0;if(e.repeat)if("forever"in e.repeat&&e.repeat.forever)s="forever";else if("count"in e.repeat){if(typeof e.repeat.count!="number"||!Number.isFinite(e.repeat.count)||e.repeat.count<0)return{ok:!1,reason:"invalid",detail:"repeat.count must be >= 0"};s=Math.floor(e.repeat.count)}else return{ok:!1,reason:"invalid",detail:"unsupported repeat"};let a=e.reducedMotion??"complete";return a!=="skip"&&a!=="complete"&&(typeof a!="object"||typeof a.durationFrames!="number"||!Number.isFinite(a.durationFrames)||a.durationFrames<0)?{ok:!1,reason:"invalid",detail:"unsupported reducedMotion"}:{name:e.name,idempotencyKey:e.idempotencyKey,startFrame:n,durationFrames:e.durationFrames,delayFrames:r,easing:i,repeatRemaining:s,repeatIndex:0,reducedMotion:a,onDuplicate:o,phase:"scheduled",progress:0}}function df(e,t){if(!t)return e;let n=e.reducedMotion;return n==="skip"||n==="complete"?{...e,durationFrames:0,delayFrames:0,startFrame:e.startFrame}:{...e,durationFrames:n.durationFrames}}function wt(e={}){let t=!!e.reducedMotion,n=e.originFrame??0,r=new Map,i=[];function o(v){i.push(v)}function s(v,P){let $=Co(v)-Co(P);return $!==0?$:v.name<P.name?-1:v.name>P.name?1:v.idempotencyKey<P.idempotencyKey?-1:v.idempotencyKey>P.idempotencyKey?1:0}function a(v,P){o({type:P,atFrame:n,name:v.name,idempotencyKey:v.idempotencyKey,progress:v.progress})}function d(v){if(v.phase="completed",v.progress=1,a(v,Yn),v.repeatRemaining==="forever"||v.repeatRemaining>0){if(typeof v.repeatRemaining=="number"&&(v.repeatRemaining-=1),v.repeatIndex+=1,v.phase="scheduled",v.progress=0,v.startFrame=n,v.delayFrames=0,v.durationFrames===0){r.delete(v.idempotencyKey);return}v.phase="active",a(v,kn)}else r.delete(v.idempotencyKey)}function m(v){if(v.phase==="cancelled"||v.phase==="completed")return;let P=Co(v);if(!(n<P)){if(v.phase==="scheduled"&&(v.phase="active",v.progress=v.durationFrames===0?1:0,a(v,kn),v.durationFrames===0)){d(v);return}if(v.phase==="active"){let $=n-P;$>=v.durationFrames?(v.progress=1,d(v)):v.progress=sf(v.durationFrames===0?1:$/v.durationFrames,v.easing)}}}function l(){let v=[...r.values()].sort(s);for(let P of v)m(P)}function h(v){let P=af(v,n);if("ok"in P&&P.ok===!1)return P;let $=df(P,t),j=r.get($.idempotencyKey);if(j&&(j.phase==="scheduled"||j.phase==="active")){if(j.onDuplicate==="reject"||$.onDuplicate==="reject")return{ok:!1,reason:"duplicate",detail:`cue ${$.idempotencyKey} is already ${j.phase}`};if(j.onDuplicate==="ignore"||$.onDuplicate==="ignore")return{ok:!0,cue:Yr(j)};j.phase="cancelled",j.progress=j.progress,a(j,en),r.delete(j.idempotencyKey)}r.set($.idempotencyKey,$),m($);let O=r.get($.idempotencyKey)??$;return{ok:!0,cue:Yr(O)}}function S(v){let P=r.get(v);return!P||P.phase==="completed"||P.phase==="cancelled"?!1:(P.phase="cancelled",a(P,In),r.delete(v),!0)}function C(){for(let v of[...r.values()].sort(s))(v.phase==="scheduled"||v.phase==="active")&&(v.phase="cancelled",a(v,In));r.clear(),i.length=0,n=e.originFrame??0}function T(v=1){let P=Number.isFinite(v)?Math.max(0,Math.floor(v)):0,$=i.length;for(let j=0;j<P;j++)n+=1,l();return i.slice($).map(Id)}return{play:h,step:T,cancel:S,reset:C,snapshot(){return{frame:n,reducedMotion:t,cues:[...r.values()].sort(s).map(Yr),events:i.map(Id)}},get(v){let P=r.get(v);return P?Yr(P):void 0},setReducedMotion(v){t=!!v},get frame(){return n},get reducedMotion(){return t}}}var Rd="audio.cue.scheduled",Ao="audio.cue.started",Cd="audio.cue.skipped",Xn="audio.cue.failed";var Zr=1,cf=["scheduled","active","completed","cancelled"],uf=["linear","ease-out"],lf=["locked","unlocking","unlocked","failed"],pf=["scheduled","started","skipped"];function ff(e){return e===Rd||e===Ao||e===Cd||e===Xn}function En(e){return!!e&&typeof e=="object"&&!Array.isArray(e)}function Lt(e){return typeof e=="string"&&e.length>0}function _t(e){return typeof e=="number"&&Number.isFinite(e)}function mf(e){return e==="scheduled"||e==="started"||e==="skipped"||e==="failed"||e==="completed"}function Ed(e){return e==="reduced-sensory"||e==="muted"||e==="unauthorized"||e==="asset-failed"||e==="torn-down"||e==="invalid"}function be(e,t,n){let r={code:e,detail:t};return n&&(r.path=n),r}function Qn(e){let t=e;if(typeof e=="string")try{t=JSON.parse(e)}catch{return{ok:!1,errors:[be("invalid-json","snapshot JSON is invalid")]}}if(!En(t))return{ok:!1,errors:[be("invalid-snapshot","snapshot must be a JSON object")]};let n=[];t.schemaVersion!==Zr&&n.push(be("unsupported-schema",`unsupported audio cue snapshot schemaVersion ${String(t.schemaVersion)}`,"schemaVersion")),_t(t.frame)||n.push(be("invalid-snapshot","frame must be finite","frame")),typeof t.reducedSensory!="boolean"&&n.push(be("invalid-snapshot","reducedSensory must be a boolean","reducedSensory")),t.muted!==void 0&&typeof t.muted!="boolean"&&n.push(be("invalid-snapshot","muted must be a boolean","muted")),t.unlock!==void 0&&(!En(t.unlock)||!lf.includes(t.unlock.state)?n.push(be("invalid-snapshot","unlock.state must be locked, unlocking, unlocked, or failed","unlock")):t.unlock.error!==void 0&&typeof t.unlock.error!="string"&&n.push(be("invalid-snapshot","unlock.error must be a string","unlock.error"))),Array.isArray(t.cues)||n.push(be("invalid-snapshot","cues must be an array","cues")),Array.isArray(t.events)||n.push(be("invalid-snapshot","events must be an array","events"));let r=new Set,i=[];Array.isArray(t.cues)&&t.cues.forEach((a,d)=>{let m=`cues[${d}]`,l=gf(a,m,n);if(l){if(r.has(l.idempotencyKey)){n.push(be("unknown-cue",`duplicate cue idempotencyKey "${l.idempotencyKey}"`,m));return}r.add(l.idempotencyKey),i.push(l)}});let o=[];return Array.isArray(t.events)&&t.events.forEach((a,d)=>{let m=`events[${d}]`,l=bf(a,m,n);l&&o.push(l)}),n.length>0?{ok:!1,errors:n}:{ok:!0,snapshot:{schemaVersion:Zr,frame:t.frame,reducedSensory:t.reducedSensory,cues:i,events:o}}}function gf(e,t,n){if(!En(e)){n.push(be("invalid-snapshot","cue must be an object",t));return}if(!Lt(e.idempotencyKey)){n.push(be("unknown-cue","cue idempotencyKey is required",`${t}.idempotencyKey`));return}if(!Lt(e.name)){n.push(be("invalid-snapshot","cue name is required",`${t}.name`));return}if(!Lt(e.assetId)){n.push(be("invalid-snapshot","cue assetId is required",`${t}.assetId`));return}if(!Lt(e.channelId)){n.push(be("invalid-snapshot","cue channelId is required",`${t}.channelId`));return}if(!mf(e.audioPhase)){n.push(be("invalid-snapshot","cue audioPhase is invalid",`${t}.audioPhase`));return}if(e.audioPhase==="completed"||e.audioPhase==="failed"){n.push(be("invalid-snapshot","completed and failed cues belong in the event log, not the live cues array",`${t}.audioPhase`));return}if(!cf.includes(e.phase)){n.push(be("invalid-snapshot","cue phase is invalid",`${t}.phase`));return}if(!uf.includes(e.easing)){n.push(be("invalid-snapshot","cue easing is invalid",`${t}.easing`));return}if(!_t(e.startFrame)){n.push(be("invalid-snapshot","cue startFrame must be finite",`${t}.startFrame`));return}if(!_t(e.durationFrames)||e.durationFrames<0){n.push(be("invalid-snapshot","cue durationFrames must be a non-negative finite number",`${t}.durationFrames`));return}if(!_t(e.delayFrames)||e.delayFrames<0){n.push(be("invalid-snapshot","cue delayFrames must be a non-negative finite number",`${t}.delayFrames`));return}if(!_t(e.progress)){n.push(be("invalid-snapshot","cue progress must be finite",`${t}.progress`));return}if(!_t(e.repeatIndex)){n.push(be("invalid-snapshot","cue repeatIndex must be finite",`${t}.repeatIndex`));return}if(!_t(e.priority)){n.push(be("invalid-snapshot","cue priority must be finite",`${t}.priority`));return}if(e.participantId!==void 0&&!Lt(e.participantId)){n.push(be("invalid-snapshot","cue participantId must be a non-empty string",`${t}.participantId`));return}let r=hf(e.repeat,`${t}.repeat`,n);if(e.repeat!==void 0&&r===void 0)return;let i={name:e.name,idempotencyKey:e.idempotencyKey,phase:e.phase,startFrame:e.startFrame,durationFrames:e.durationFrames,delayFrames:e.delayFrames,easing:e.easing,progress:e.progress,repeatIndex:e.repeatIndex,assetId:e.assetId,channelId:e.channelId,priority:e.priority,audioPhase:e.audioPhase};return typeof e.participantId=="string"&&(i.participantId=e.participantId),r&&(i.repeat=r),i}function hf(e,t,n){if(e!==void 0){if(!En(e)){n.push(be("invalid-snapshot","repeat must be an object",t));return}if(e.forever===!0)return{forever:!0};if("count"in e){if(!_t(e.count)||e.count<0){n.push(be("invalid-snapshot","repeat.count must be a non-negative finite number",t));return}return{count:e.count}}n.push(be("invalid-snapshot","repeat must be { count } or { forever: true }",t))}}function yf(e){if(e.repeat){if("forever"in e.repeat&&e.repeat.forever)return{forever:!0};if("count"in e.repeat)return{count:Math.max(0,Math.floor(e.repeat.count)-Math.floor(e.repeatIndex))}}}function bf(e,t,n){if(!En(e)){n.push(be("invalid-snapshot","event must be an object",t));return}if(!ff(e.type)){n.push(be("invalid-snapshot","event type is unknown",`${t}.type`));return}if(!Lt(e.idempotencyKey)){n.push(be("unknown-cue","event idempotencyKey is required",`${t}.idempotencyKey`));return}if(!Lt(e.name)){n.push(be("invalid-snapshot","event name is required",`${t}.name`));return}if(!Lt(e.assetId)){n.push(be("invalid-snapshot","event assetId is required",`${t}.assetId`));return}if(!Lt(e.channelId)){n.push(be("invalid-snapshot","event channelId is required",`${t}.channelId`));return}if(!_t(e.atFrame)){n.push(be("invalid-snapshot","event atFrame must be finite",`${t}.atFrame`));return}if(!_t(e.progress)){n.push(be("invalid-snapshot","event progress must be finite",`${t}.progress`));return}if(e.participantId!==void 0&&!Lt(e.participantId)){n.push(be("invalid-snapshot","event participantId must be a non-empty string",`${t}.participantId`));return}if(e.reason!==void 0&&!Ed(e.reason)){n.push(be("invalid-snapshot","event reason is unknown",`${t}.reason`));return}let r={type:e.type,atFrame:e.atFrame,name:e.name,idempotencyKey:e.idempotencyKey,assetId:e.assetId,channelId:e.channelId,progress:e.progress};return typeof e.participantId=="string"&&(r.participantId=e.participantId),Ed(e.reason)&&(r.reason=e.reason),r}function Xr(e){let t={type:e.type,atFrame:e.atFrame,name:e.name,idempotencyKey:e.idempotencyKey,assetId:e.assetId,channelId:e.channelId,progress:e.progress};return e.participantId!==void 0&&(t.participantId=e.participantId),e.reason!==void 0&&(t.reason=e.reason),t}function vf(e){return{name:e.name,idempotencyKey:e.idempotencyKey,startFrame:e.startFrame,durationFrames:e.durationFrames,delayFrames:e.delayFrames,easing:e.easing,repeat:e.repeat,reducedMotion:e.reducedMotion,onDuplicate:e.onDuplicate}}function Qr(e,t,n){let r={name:e.name,idempotencyKey:e.idempotencyKey,phase:t?.phase??(e.audioPhase==="started"?"active":"scheduled"),startFrame:t?.startFrame??n,durationFrames:t?.durationFrames??0,delayFrames:t?.delayFrames??0,easing:t?.easing??"linear",progress:t?.progress??0,repeatIndex:t?.repeatIndex??0,assetId:e.assetId,channelId:e.channelId,participantId:e.participantId,priority:e.priority,audioPhase:e.audioPhase};return e.repeat&&(r.repeat=e.repeat),r}function Sf(e={}){let t=e.broker,n=!!(e.reducedSensory??t?.reducedSensory),r=wt({originFrame:e.originFrame}),i=new Map,o=[],s=new Set,a=0;function d(p){o.push(p)}function m(p,I,c){let f=r.get(I.idempotencyKey);return Xr({type:p,atFrame:r.frame,name:I.name,idempotencyKey:I.idempotencyKey,assetId:I.assetId,channelId:I.channelId,participantId:I.participantId,reason:c?.reason,progress:c?.progress??f?.progress??0})}function l(p,I){s.delete(p.idempotencyKey),t?.noteCueEnded(p.idempotencyKey),p.audioPhase="failed",d(m(Xn,p,{reason:I})),r.cancel(p.idempotencyKey),i.delete(p.idempotencyKey)}function h(p,I){s.delete(p.idempotencyKey),p.audioPhase="skipped",d(m(Cd,p,{reason:I}))}function S(p){s.delete(p.idempotencyKey),p.audioPhase="started",t?.noteCueStarted({idempotencyKey:p.idempotencyKey,channelId:p.channelId,participantId:p.participantId,priority:p.priority}),d(m(Ao,p))}function C(p){if(p.audioPhase!=="scheduled")return;if(t&&!t.isAuthorized(p.participantId)){h(p,"unauthorized"),r.cancel(p.idempotencyKey),i.delete(p.idempotencyKey);return}if(n||t?.reducedSensory){h(p,"reduced-sensory");return}if(t?.muted||t&&t.effectiveGain(p.channelId)===0){h(p,"muted");return}let I=t?.assetStatus(p.assetId);if(!t){S(p);return}if(I==="failed"){l(p,"asset-failed");return}if(I==="ready"){S(p);return}s.add(p.idempotencyKey)}function T(p,I){for(let c of[...s]){let f=i.get(c);if(!f){s.delete(c);continue}if(!(p&&f.assetId!==p)){if(I==="failed"||t?.assetStatus(f.assetId)==="failed"){l(f,"asset-failed");continue}(I==="ready"||t?.assetStatus(f.assetId)==="ready")&&C(f)}}}function v(p){for(let I of[...i.values()])I.participantId===p&&(I.audioPhase==="scheduled"||I.audioPhase==="started")&&l(I,"torn-down")}function P(p){for(let I of p){let c=i.get(I.idempotencyKey);if(c)if(I.type===kn)C(c);else if(I.type===Yn){if(s.delete(c.idempotencyKey),t?.noteCueEnded(c.idempotencyKey),r.get(c.idempotencyKey)){c.audioPhase="scheduled";continue}c.audioPhase==="scheduled"?l(c,"asset-failed"):(c.audioPhase==="started"&&(c.audioPhase="completed"),i.delete(c.idempotencyKey))}else I.type===In?(s.delete(c.idempotencyKey),t?.noteCueEnded(c.idempotencyKey),(c.audioPhase==="scheduled"||c.audioPhase==="started")&&(c.audioPhase="failed"),i.delete(c.idempotencyKey)):I.type===en&&(s.delete(c.idempotencyKey),t?.noteCueEnded(c.idempotencyKey),i.delete(c.idempotencyKey))}}function $(){let p=o.slice(a).map(Xr);return a=o.length,p}let j=t?.onNotice(p=>{if(p.type==="asset"){if(p.status==="failed"){for(let I of[...i.values()])I.assetId===p.id&&(I.audioPhase==="scheduled"||I.audioPhase==="started")&&l(I,"asset-failed");return}T(p.id,p.status);return}if(p.type==="teardown"){v(p.participantId);return}if(p.type==="destroy")for(let I of[...i.values()])(I.audioPhase==="scheduled"||I.audioPhase==="started")&&l(I,"torn-down")});function O(){for(let p of i.values())t?.noteCueEnded(p.idempotencyKey);i.clear(),s.clear(),o.length=0,a=0,r.reset()}function F(p){if(!p||typeof p!="object")return{ok:!1,reason:"invalid",detail:"spec is required"};if(typeof p.assetId!="string"||p.assetId.length===0)return{ok:!1,reason:"invalid",detail:"assetId is required"};let I=r.snapshot().events.length,c=r.play(vf(p));if(!c.ok)return c;let f=r.snapshot().events.slice(I),y=f.some(M=>M.type===en);if(!y&&i.has(p.idempotencyKey)){let M=i.get(p.idempotencyKey);return{ok:!0,cue:Qr(M,c.cue,r.frame)}}if(y){let M=i.get(p.idempotencyKey);M&&(s.delete(M.idempotencyKey),t?.noteCueEnded(M.idempotencyKey),i.delete(M.idempotencyKey))}let A=p.channelId??p.participantId??"master",D={name:p.name,idempotencyKey:p.idempotencyKey,assetId:p.assetId,channelId:A,participantId:p.participantId,priority:Number.isFinite(p.priority)?p.priority:0,audioPhase:"scheduled"};p.repeat&&(D.repeat=p.repeat),i.set(D.idempotencyKey,D),typeof p.gain=="number"&&t?.setChannelGain(A,p.gain,p.participantId),typeof p.priority=="number"&&t?.setPriority(A,p.priority,p.participantId),d(m(Rd,D)),P(f.filter(M=>M.type!==en));let R=i.get(D.idempotencyKey);R&&R.audioPhase==="scheduled"&&t?.assetStatus(R.assetId)==="failed"&&l(R,"asset-failed"),$();let N=i.get(D.idempotencyKey)??D,q=r.get(D.idempotencyKey)??c.cue;return{ok:!0,cue:Qr(N,q,r.frame)}}function w(){return{schemaVersion:Zr,frame:r.frame,reducedSensory:n,cues:[...i.values()].map(p=>Qr(p,r.get(p.idempotencyKey),r.frame)).sort((p,I)=>p.name!==I.name?p.name<I.name?-1:1:p.idempotencyKey<I.idempotencyKey?-1:p.idempotencyKey>I.idempotencyKey?1:0),events:o.map(Xr)}}return{play:F,step(p=1){let I=r.step(p);return P(I),$()},cancel(p){let I=i.get(p),c=r.cancel(p);return I&&(s.delete(p),t?.noteCueEnded(p),i.delete(p)),c},reset:O,snapshot(){return w()},restore(p){let I=Qn(p);if(!I.ok)return I;let c=wt({originFrame:I.snapshot.frame}),f=new Map,y=new Set,A=I.snapshot.events.map(Xr);for(let q=0;q<I.snapshot.cues.length;q+=1){let M=I.snapshot.cues[q],u={name:M.name,idempotencyKey:M.idempotencyKey,assetId:M.assetId,channelId:M.channelId,participantId:M.participantId,priority:M.priority,audioPhase:M.audioPhase};if(M.repeat&&(u.repeat=M.repeat),f.set(u.idempotencyKey,u),pf.includes(M.audioPhase)){let b=c.play({name:M.name,idempotencyKey:M.idempotencyKey,startFrame:M.startFrame,durationFrames:M.durationFrames,delayFrames:M.delayFrames,easing:M.easing,repeat:yf(M),onDuplicate:"replace"});if(!b.ok)return{ok:!1,errors:[be("invalid-snapshot",b.detail,`cues[${q}]`)]}}}let D=t?{muted:t.muted,assets:{...t.inspect().assets},started:[...i.values()].filter(q=>q.audioPhase==="started").map(q=>({idempotencyKey:q.idempotencyKey,channelId:q.channelId,participantId:q.participantId,priority:q.priority}))}:null,R={reducedSensory:n,presentation:r,records:new Map(i),pending:new Set(s),events:o.slice(),eventCursor:a},N=q=>{n=R.reducedSensory,r=R.presentation,i.clear();for(let[M,u]of R.records)i.set(M,u);s.clear();for(let M of R.pending)s.add(M);if(o.length=0,o.push(...R.events),a=R.eventCursor,t&&D){D.muted?t.mute():t.unmute();for(let[M,u]of Object.entries(D.assets))t.handleHostEvent({type:u==="ready"?nt:Qe,kind:"state",payload:{id:M}});for(let M of[...i.values()])t.noteCueEnded(M.idempotencyKey);for(let M of D.started)t.noteCueStarted(M)}return{ok:!1,errors:q}};try{for(let u of i.values())t?.noteCueEnded(u.idempotencyKey);i.clear(),s.clear(),o.length=0,n=I.snapshot.reducedSensory,r=c;for(let[u,b]of f)i.set(u,b);o.push(...A),a=o.length;let q=new Set,M=new Set;for(let u of I.snapshot.events)u.type===Ao&&q.add(u.assetId),u.type===Xn&&u.reason==="asset-failed"&&M.add(u.assetId);if(t){for(let u of q)t.handleHostEvent({type:nt,kind:"state",payload:{id:u}});for(let u of M)t.handleHostEvent({type:Qe,kind:"state",payload:{id:u}})}for(let u of I.snapshot.cues)if(u.audioPhase==="started"&&t?.noteCueStarted({idempotencyKey:u.idempotencyKey,channelId:u.channelId,participantId:u.participantId,priority:u.priority}),u.audioPhase==="scheduled"){let b=r.get(u.idempotencyKey),x=t?.assetStatus(u.assetId);b?.phase==="active"&&x!=="ready"&&x!=="failed"&&y.add(u.idempotencyKey)}for(let u of y)s.add(u);return{ok:!0,snapshot:w()}}catch(q){let M=q instanceof Error?q.message:String(q);return N([be("invalid-snapshot",M)])}},get(p){let I=i.get(p);if(I)return Qr(I,r.get(p),r.frame)},dispose(){j?.(),O()},get frame(){return r.frame},setReducedSensory(p){n=!!p},get reducedSensory(){return n}}}function wo(e={}){let t=Qa({toneStart:async()=>{},reducedSensory:e.reducedSensory}),n=Sf({broker:t,originFrame:e.originFrame,reducedSensory:e.reducedSensory});return{broker:t,timeline:n,unlock(){return t.unlock()},play(r){return n.play(r)},step(r){return n.step(r)},handleHostEvent(r){t.handleHostEvent(r)},snapshot(){return{...n.snapshot(),unlock:t.status(),muted:t.muted}},restore(r){let i=Qn(r);if(!i.ok)return i;let o,s=r;if(typeof r=="string")try{s=JSON.parse(r)}catch{return i}En(s)&&typeof s.muted=="boolean"&&(o=s.muted);let a=t.muted,d=n.restore(i.snapshot);return d.ok?(o===!0?t.mute():o===!1&&t.unmute(),{ok:!0,snapshot:{...n.snapshot(),unlock:t.status(),muted:t.muted}}):(a?t.mute():t.unmute(),d)},setReducedSensory(r){n.setReducedSensory(r)},get reducedSensory(){return n.reducedSensory},destroy(){n.dispose(),t.destroy()}}}var ti=1,kf=["layer","mask","sprite"],If=["show","hide","replace","crossfade"],Ef=":incoming",Rf="visual.layer.revealed",Ad="visual.layer.hidden",Cf="visual.layer.transition-started",Af="visual.layer.transition-completed",wd="visual.layer.failed";var wf="host.state.accepted";var Pf="Visual layer controller has been destroyed",xf=new Set(kf),Tf=new Set(If);function Df(e){return typeof e=="string"&&xf.has(e)}function Of(e){return typeof e=="string"&&Tf.has(e)}function Mf(e){return`${e}${Ef}`}function Nf(e){return{frame:e.captureComposedFrame(),layers:e.inspect()}}function _f(e){return{data:new Uint8ClampedArray(e.data),width:e.width,height:e.height,colorSpace:e.colorSpace??"srgb"}}function Rn(e){return JSON.parse(JSON.stringify(e))}function ei(e){if(!(!e||typeof e!="object"||Array.isArray(e)))return e}function Lf(e){let t=ei(e);return typeof t?.id=="string"&&t.id.length>0?t.id:void 0}function Vf(e){if(!e||typeof e!="object")return;let t=e;if(!(typeof t.id!="string"||typeof t.ref!="string"||typeof t.code!="string"||typeof t.message!="string"))return t}function lt(e,t){if(t)return e.versions.find(n=>n.id===t)}function Pd(e){return e?{...e}:null}function Po(e){if(!e?.compositor)throw new Error("createVisualLayerController: compositor is required");if(!e.layers?.length)throw new Error("createVisualLayerController: at least one layer is required");let t=e.compositor,n=e.preloader,r=!!e.reducedMotion,i=e.fallback??"keep-prior",o=wt({originFrame:e.originFrame,reducedMotion:r}),s=e.sceneId??null,a=!1,d=0,m=new Map,l=new Map,h=new Map,S=new Map,C=[],T=[],v=()=>{if(a)throw new Error(Pf)};function P(g){C.push(g),e.dispatch&&e.dispatch({type:g.type,kind:g.type===wd?"diagnostic":"state",payload:g})}function $(g){T.push(g),P({type:wd,atFrame:g.atFrame,layerId:g.layerId,version:g.version,progress:0,code:g.code})}function j(g,k){h.set(g,k)}function O(g){let k=h.get(g);if(k)return k;if(n?.get(g))return"ready";let E=n?.getProgress().items[g];return E?.state==="failed"?"failed":E?.state==="ready"?"ready":"pending"}function F(g){let k=l.get(g);if(k)return k.kind==="canvas"?{kind:"canvas",canvas:k.canvas}:{kind:"image",image:k.image}}function w(g,k){let E=lt(g.declaration,k);return E?O(E.assetId)==="ready"&&!!F(E.assetId):!1}function p(g){return g.overrideVersion&&w(g,g.overrideVersion)?g.overrideVersion:g.committedVersion}function I(g,k){let E=lt(g.declaration,k);return E?Pd(S.get(E.assetId))??Pd(E.provenance)??null:null}function c(g,k=0){return o.get(g)?.progress??k}function f(g,k,E){try{t.layer(g)}catch{t.addLayer({id:g,order:k,visible:!1,opacity:0,pointerEvents:E.pointerEvents??"none",blend:E.blend,clip:E.clip??void 0,clearPolicy:E.clearPolicy})}}function y(g){try{t.setLayer(g.incomingLayerId,{visible:!1,opacity:0})}catch{}}function A(){for(let g of m.values()){let k=p(g),E=lt(g.declaration,k),_=g.transition,G=_?c(_.cueKey):0,Z=_?.kind==="crossfade"&&_.toVersion!==null&&w(g,_.toVersion);f(g.compositorLayerId,g.order,g);let z=g.visible,ne=1;_?.kind==="hide"?(ne=1-G,G>=1&&(z=!1)):_?.kind==="show"?(z=w(g,_.toVersion),ne=z?_.durationFrames===0?1:G:0):Z&&(ne=1-G);let Q=E?F(E.assetId):void 0;if(t.setLayer(g.compositorLayerId,{order:g.order,visible:z&&!!Q,opacity:ne,blend:g.blend,clip:g.clip??void 0,pointerEvents:g.pointerEvents,clearPolicy:g.clearPolicy,source:Q}),Z&&_){let he=lt(g.declaration,_.toVersion),ke=he?F(he.assetId):void 0;if(ke){try{t.layer(g.incomingLayerId)}catch{t.addLayer({id:g.incomingLayerId,order:g.order+1,visible:!1,opacity:0,pointerEvents:"none",blend:g.blend,clip:g.clip??void 0,clearPolicy:g.clearPolicy})}t.setLayer(g.incomingLayerId,{order:g.order+1,visible:!0,opacity:G,blend:g.blend,clip:g.clip??void 0,pointerEvents:"none",clearPolicy:g.clearPolicy,source:ke});continue}}y(g)}}function D(g){let k=p(g);return{id:g.declaration.id,kind:g.kind,visible:g.visible&&!!(k&&w(g,k)),activeVersion:k,pendingVersion:g.pendingVersion,committedVersion:g.committedVersion,opacity:t.layer(g.compositorLayerId).opacity,order:g.order,provenance:I(g,k),overrideVersion:g.overrideVersion,transition:g.transition?{kind:g.transition.kind,progress:c(g.transition.cueKey),fromVersion:g.transition.fromVersion,toVersion:g.transition.toVersion,cueKey:g.transition.cueKey,startFrame:g.transition.startFrame,durationFrames:g.transition.durationFrames,delayFrames:g.transition.delayFrames,easing:g.transition.easing}:null}}function R(g,k,E){g.committedVersion=k,g.pendingVersion=null,g.transition=null,g.visible=E,A(),P({type:E?Rf:Ad,atFrame:o.frame,layerId:g.declaration.id,version:k,progress:1})}function N(g){g.visible=!1,g.pendingVersion=null,g.transition=null,A(),P({type:Ad,atFrame:o.frame,layerId:g.declaration.id,version:g.committedVersion??void 0,progress:1})}function q(g,k,E,_){let G=g.fallback;g.transition=null,g.pendingVersion=null,G==="hide"?g.visible=!1:typeof G=="object"&&G.version&&w(g,G.version)&&(g.committedVersion=G.version,g.visible=!0),A(),$({code:_?"asset-failed":"missing-source",layerId:g.declaration.id,version:k??void 0,assetId:E,message:_?_.message:`visual layer "${g.declaration.id}" kept the prior valid frame`,atFrame:o.frame,failure:_})}function M(g){let k=g.transition;if(k?.kind==="hide")return N(g),!0;let E=g.pendingVersion??k?.toVersion??null;if(!E)return g.transition=null,!0;if(!lt(g.declaration,E))return q(g,E),!0;if(w(g,E))return R(g,E,!0),!0;let _=lt(g.declaration,E).assetId;return O(_)==="failed"?(q(g,E,_),!0):(g.transition=null,g.pendingVersion=E,A(),!1)}function u(){for(let g of m.values())if(!g.transition&&g.pendingVersion){if(w(g,g.pendingVersion))R(g,g.pendingVersion,!0);else if(O(lt(g.declaration,g.pendingVersion)?.assetId??"")==="failed"){let k=lt(g.declaration,g.pendingVersion);q(g,g.pendingVersion,k?.assetId)}}for(let g of m.values())g.overrideVersion&&w(g,g.overrideVersion)&&g.committedVersion!==g.overrideVersion&&R(g,g.overrideVersion,!0)}function b(g,k){j(g,"failed");for(let E of m.values()){let _=E.declaration.versions.find(Q=>Q.assetId===g);if(!_)continue;let G=lt(E.declaration,E.pendingVersion),Z=lt(E.declaration,E.transition?.toVersion??null),z=lt(E.declaration,E.overrideVersion);if(G?.assetId===g||Z?.assetId===g||z?.assetId===g){E.transition&&o.cancel(E.transition.cueKey),z?.assetId===g&&(E.overrideVersion=null),q(E,_.id,g,k);continue}$({code:"asset-failed",layerId:E.declaration.id,version:_.id,assetId:g,message:k?.message??`asset "${g}" failed; prior frame kept`,atFrame:o.frame,failure:k}),A()}}function x(g){for(let k of g){let E=[...m.values()].find(_=>_.transition?.cueKey===k.idempotencyKey);if(!(!E||!E.transition))if(k.type===kn)P({type:Cf,atFrame:k.atFrame,layerId:E.declaration.id,version:E.transition.toVersion??void 0,kind:E.transition.kind,progress:k.progress}),A();else if(k.type===Yn){let _=E.transition.kind,G=E.transition.toVersion??void 0;M(E),P({type:Af,atFrame:k.atFrame,layerId:E.declaration.id,version:G,kind:_,progress:1})}else(k.type===In||k.type===en)&&(E.transition=null,A())}}function V(){let g=C.slice(d).map(k=>Rn(k));return d=C.length,g}for(let g of e.layers){if(!g?.id)throw new Error("createVisualLayerController: layer id is required");if(m.has(g.id))throw new Error(`createVisualLayerController: duplicate layer id "${g.id}"`);if(!Df(g.kind))throw new Error(`createVisualLayerController: layer "${g.id}" kind is invalid`);if(!g.versions?.length)throw new Error(`createVisualLayerController: layer "${g.id}" needs versions`);let k=new Set;for(let ne of g.versions){if(!ne?.id||!ne.assetId)throw new Error(`createVisualLayerController: layer "${g.id}" versions need id and assetId`);if(k.has(ne.id))throw new Error(`createVisualLayerController: layer "${g.id}" duplicate version "${ne.id}"`);k.add(ne.id),ne.provenance&&S.set(ne.assetId,{...ne.provenance})}if(g.initialVersion&&!k.has(g.initialVersion))throw new Error(`createVisualLayerController: layer "${g.id}" unknown initialVersion`);let E=g.compositorLayerId??g.id,_=g.incomingLayerId??Mf(E),G=g.order??0,Z=g.pointerEvents??(g.kind==="mask"?"none":"auto"),z={declaration:g,compositorLayerId:E,incomingLayerId:_,kind:g.kind,order:G,blend:g.blend??"source-over",clip:g.clip?{...g.clip}:null,pointerEvents:Z,clearPolicy:g.clearPolicy??"opaque",fallback:g.fallback??i,visible:!!g.initialVersion,committedVersion:g.initialVersion??null,pendingVersion:null,overrideVersion:null,transition:null};m.set(g.id,z),f(E,G,z)}A();function L(g){if(v(),!g||typeof g!="object")return{ok:!1,reason:"invalid",detail:"spec is required"};if(!g.layerId)return{ok:!1,reason:"invalid",detail:"layerId is required"};let k=m.get(g.layerId);if(!k)return{ok:!1,reason:"invalid",detail:`unknown layer "${g.layerId}"`};if(!Of(g.kind))return{ok:!1,reason:"invalid",detail:"unsupported kind"};if(g.kind!=="hide"&&!g.toVersion)return{ok:!1,reason:"invalid",detail:"toVersion is required"};if(g.toVersion&&!lt(k.declaration,g.toVersion))return{ok:!1,reason:"invalid",detail:`unknown version "${g.toVersion}"`};let E={name:g.name,idempotencyKey:g.idempotencyKey,startFrame:g.startFrame,durationFrames:g.durationFrames,delayFrames:g.delayFrames,easing:g.easing,repeat:g.repeat,reducedMotion:g.reducedMotion,onDuplicate:g.onDuplicate??"replace"},_=o.snapshot().events.length,G=o.play(E);if(!G.ok)return G;let Z=o.snapshot().events.slice(_);return k.pendingVersion=g.kind==="hide"?k.committedVersion:g.toVersion??null,k.transition={kind:g.kind,cueKey:g.idempotencyKey,fromVersion:g.fromVersion??k.committedVersion,toVersion:g.kind==="hide"?k.committedVersion:g.toVersion??null,startFrame:G.cue.startFrame,durationFrames:G.cue.durationFrames,delayFrames:G.cue.delayFrames,easing:G.cue.easing},x(Z),A(),V(),G}function W(g){let k=ei(g),E=typeof k?.sceneId=="string"?k.sceneId:void 0;if(e.sceneId&&E&&E!==e.sceneId)return;E&&(s=E);let _=typeof k?.layerId=="string"?k.layerId:typeof k?.overlayId=="string"?k.overlayId:void 0,G=typeof k?.version=="string"?k.version:void 0;if(_&&G){L({name:`visual:${_}:replace`,idempotencyKey:`visual:${_}:accepted`,layerId:_,kind:"replace",toVersion:G,durationFrames:2});return}for(let Z of e.onAccepted??[])L({name:`visual:${Z.layerId}:${Z.kind??"replace"}`,idempotencyKey:Z.idempotencyKey??`visual:${Z.layerId}:accepted`,layerId:Z.layerId,kind:Z.kind??"replace",toVersion:Z.toVersion,durationFrames:Z.durationFrames??2,delayFrames:Z.delayFrames,easing:Z.easing})}function U(){let g=[...m.values()].map(E=>{let _=D(E);return{id:E.declaration.id,kind:E.kind,visible:E.visible,committedVersion:E.committedVersion,pendingVersion:E.pendingVersion,activeVersion:_.activeVersion,opacity:_.opacity,order:E.order,overrideVersion:E.overrideVersion,provenance:_.provenance,fallback:E.fallback,transition:_.transition}}).sort((E,_)=>E.id<_.id?-1:E.id>_.id?1:0),k={};for(let[E,_]of[...h.entries()].sort(([G],[Z])=>G<Z?-1:G>Z?1:0))k[E]=_;return Rn({schemaVersion:ti,frame:o.frame,sceneId:s,reducedMotion:r,layers:g,assets:k,events:C.map(E=>Rn(E)),diagnostics:T.map(E=>Rn(E))})}function B(g){v();let k=[],E=z=>{let ne={code:"invalid-snapshot",layerId:"",message:z,atFrame:o.frame};return{ok:!1,errors:[...k,ne]}},_=g;if(typeof g=="string")try{_=JSON.parse(g)}catch{return E("snapshot JSON is invalid")}if(!_||typeof _!="object"||Array.isArray(_))return E("snapshot must be an object");let G=_;if(G.schemaVersion!==ti)return E("unsupported visual layer snapshot schema");if(typeof G.frame!="number"||!Number.isFinite(G.frame))return E("frame must be finite");if(!Array.isArray(G.layers))return E("layers must be an array");if(typeof G.reducedMotion=="boolean"&&(r=G.reducedMotion),o=wt({originFrame:G.frame,reducedMotion:!1}),s=typeof G.sceneId=="string"||G.sceneId===null?G.sceneId:s,C.length=0,T.length=0,d=0,Array.isArray(G.events)&&(C.push(...G.events.map(z=>Rn(z))),d=C.length),Array.isArray(G.diagnostics)&&T.push(...G.diagnostics.map(z=>Rn(z))),h.clear(),G.assets&&typeof G.assets=="object")for(let[z,ne]of Object.entries(G.assets))(ne==="ready"||ne==="failed"||ne==="pending")&&h.set(z,ne);let Z=new Map(G.layers.map(z=>[z.id,z]));for(let z of m.values()){let ne=Z.get(z.declaration.id);ne&&(z.visible=!!ne.visible,z.committedVersion=ne.committedVersion??null,z.pendingVersion=ne.pendingVersion??null,z.overrideVersion=ne.overrideVersion??null,z.transition=null,ne.transition&&o.play({name:`visual:${z.declaration.id}:${ne.transition.kind}`,idempotencyKey:ne.transition.cueKey,startFrame:ne.transition.startFrame,durationFrames:ne.transition.durationFrames,delayFrames:ne.transition.delayFrames,easing:ne.transition.easing,onDuplicate:"replace"}).ok&&(z.transition={kind:ne.transition.kind,cueKey:ne.transition.cueKey,fromVersion:ne.transition.fromVersion,toVersion:ne.transition.toVersion,startFrame:ne.transition.startFrame,durationFrames:ne.transition.durationFrames,delayFrames:ne.transition.delayFrames,easing:ne.transition.easing}))}return A(),o.setReducedMotion(r),{ok:!0,snapshot:U()}}return{registerSource(g,k){if(v(),typeof g!="string"||g.length===0)throw new Error("createVisualLayerController: assetId is required");if(k instanceof HTMLCanvasElement)l.set(g,{kind:"canvas",canvas:k});else if(k&&"data"in k&&"width"in k)l.set(g,{kind:"image",image:_f(k)});else throw new Error("createVisualLayerController: source must be ImageData or canvas");u(),A()},handleHostEvent(g){if(v(),!g||typeof g!="object")return;if(g.type===wf){W(g.payload);return}let k=Lf(g.payload);if(k){if(g.type===nt){j(k,"ready");let _=ei(g.payload)?.resource;if(_&&typeof _=="object"&&"provenance"in _){let G=_.provenance;G&&S.set(k,{...G})}u(),A();return}if(g.type===Qe){let E=ei(g.payload);b(k,Vf(E?.failure))}}},override(g,k){v();let E=m.get(g);if(!E)throw new Error(`createVisualLayerController: unknown layer "${g}"`);if(k===null){E.overrideVersion=null,A();return}if(!lt(E.declaration,k))throw new Error(`createVisualLayerController: unknown version "${k}" on "${g}"`);if(E.overrideVersion=k,w(E,k)){E.transition&&o.cancel(E.transition.cueKey),R(E,k,!0);return}A()},play:L,setReducedMotion(g){v(),r=!!g,o.setReducedMotion(r)},step(g=1){v();let k=o.step(g);return x(k),u(),A(),V()},snapshot(){return v(),U()},restore:B,inspect(){return v(),A(),[...m.values()].map(D).sort((g,k)=>g.id<k.id?-1:g.id>k.id?1:0)},captureComposedFrame(){return v(),A(),t.captureComposedFrame()},destroy(){a||(a=!0,o.reset(),C.length=0,T.length=0)},get frame(){return o.frame},get sceneId(){return s},get compositor(){return t},get reducedMotion(){return r}}}var Ff=["loading","ready","error","unsupported"],$f=["keyboard","pointer","audio","assets","hostChannel"],Hf=["image","audio","font","spritesheet"],Bf=["tone","midi"],To=["source-over","screen"],Td=["transparent","opaque"],qf=["render","calculation"],Zn=["audio","controller","network","persistence","fullscreen"],Gf=new Set(Ff),Dd=new Set($f),xd=new Set(Hf),Od=new Set(Bf),Kf=new Set(["version","id","runtime","phases","managers","assets","acceptedEvents","emittedEvents","permissions","integrations","surface","layers","modules","kind","grants"]),Wf=new Set(["minContractVersion","features"]),jf=new Set(["kinds","declarations"]),Uf=new Set(["id","kind"]),Jf=new Set(["emit","subscribe","authoritative"]),Md=new Set(["alpha","clearPolicy"]),Nd=new Set(["compositor","blend"]),_d=new Set(["refs"]),zf=new Set(["id","version"]),ni=/^[a-z0-9][a-z0-9.-]*$/i,Ld=new Set(To),Vd=new Set(Td),Fd=new Set(qf),xo=new Set(Zn),Yf=new Set(["contractVersion","features","integrations","managers","emit","subscribe","surface","layers","modules","kinds","grants"]);function de(e,t,n){return n?{code:e,detail:t,path:n}:{code:e,detail:t}}function pt(e){return e!==null&&typeof e=="object"&&!Array.isArray(e)}function ft(e,t,n){let r=[];for(let i of Object.keys(e))t.has(i)||r.push(de("unknown-field",`unknown field "${i}"`,n?`${n}.${i}`:i));return r}function Xf(e){if(typeof e!="string"||e.length===0)return!1;let t=e.split(".");return t.some(n=>n.length===0)?!1:t.every(n=>n==="*"||/^[a-z0-9][a-z0-9-]*$/i.test(n))}function Qf(e,t){let n=e.split("."),r=t.split(".");if(n.length!==r.length)return!1;for(let i=0;i<n.length;i++)if(n[i]!=="*"&&n[i]!==r[i])return!1;return!0}function ri(e,t){for(let n of t)if(e===n||Qf(n,e))return!0;return!1}function Cn(e){let t=new Set,n=[];for(let r of e)t.has(r)||(t.add(r),n.push(r));return n}function Do(e,t,n){if(!Array.isArray(e))return{ok:!1,errors:[de("invalid-field",`${t} must be an array`,t)]};let r=[],i=[];return e.forEach((o,s)=>{let a=`${t}[${s}]`;if(typeof o!="string"||o.length===0){r.push(de("invalid-field",`${t} entries must be non-empty strings`,a));return}let d=n(o,a);d?r.push(d):i.push(o)}),r.length>0?{ok:!1,errors:r}:{ok:!0,values:i}}function An(e,t){return Do(e,t,(n,r)=>Xf(n)?void 0:de("invalid-pattern",`invalid event pattern "${n}"`,r))}function yt(e,t,n,r,i){return Do(e,t,(o,s)=>n.has(o)?void 0:de(r,`invalid ${i} "${o}"`,s))}function $d(e,t){return Do(e,t,(n,r)=>/^[a-z0-9][a-z0-9.-]*$/i.test(n)?void 0:de("invalid-feature",`invalid feature tag "${n}"`,r))}function Hd(e,t){if(!Array.isArray(e))return{ok:!1,errors:[de("invalid-module",`${t} must be an array`,t)]};let n=[],r=[];return e.forEach((i,o)=>{let s=`${t}[${o}]`;if(!pt(i)){n.push(de("invalid-module","module ref must be an object",s));return}n.push(...ft(i,zf,s)),(typeof i.id!="string"||i.id.length===0||!ni.test(i.id))&&n.push(de("invalid-module",`invalid module id "${String(i.id)}"`,`${s}.id`)),(typeof i.version!="string"||i.version.length===0||!ni.test(i.version))&&n.push(de("invalid-module",`invalid module version "${String(i.version)}"`,`${s}.version`)),typeof i.id=="string"&&ni.test(i.id)&&typeof i.version=="string"&&ni.test(i.version)&&r.push({id:i.id,version:i.version})}),n.length>0?{ok:!1,errors:n}:{ok:!0,values:r}}function Zf(e){let t=new Set,n=[];for(let r of e){let i=`${r.id}@${r.version}`;t.has(i)||(t.add(i),n.push({id:r.id,version:r.version}))}return n}function em(e){if(!pt(e))return[de("invalid-manifest","capability manifest must be a JSON object")];let t=[...ft(e,Kf,"")];if(e.version!==void 0&&e.version!==1&&t.push(de("invalid-version","capability manifest version must be 1","version")),(typeof e.id!="string"||e.id.length===0)&&t.push(de("invalid-id","id is required","id")),!pt(e.runtime))t.push(de("invalid-runtime","runtime is required","runtime"));else{t.push(...ft(e.runtime,Wf,"runtime"));let a=e.runtime.minContractVersion;(typeof a!="number"||!Number.isInteger(a)||a<1)&&t.push(de("invalid-runtime","runtime.minContractVersion must be an integer >= 1","runtime.minContractVersion"));let d=$d(e.runtime.features,"runtime.features");d.ok||t.push(...d.errors)}let n=yt(e.phases,"phases",Gf,"invalid-phase","phase");n.ok||t.push(...n.errors);let r=yt(e.managers,"managers",Dd,"invalid-manager","manager");if(r.ok||t.push(...r.errors),!pt(e.assets))t.push(de("invalid-assets","assets is required","assets"));else{t.push(...ft(e.assets,jf,"assets"));let a=yt(e.assets.kinds,"assets.kinds",xd,"invalid-asset-kind","asset kind");a.ok||t.push(...a.errors),Array.isArray(e.assets.declarations)?e.assets.declarations.forEach((d,m)=>{let l=`assets.declarations[${m}]`;if(!pt(d)){t.push(de("invalid-assets","asset declaration must be an object",l));return}t.push(...ft(d,Uf,l)),(typeof d.id!="string"||d.id.length===0)&&t.push(de("invalid-assets","asset declaration id is required",`${l}.id`)),(typeof d.kind!="string"||!xd.has(d.kind))&&t.push(de("invalid-asset-kind",`invalid asset kind "${String(d.kind)}"`,`${l}.kind`))}):t.push(de("invalid-assets","assets.declarations must be an array","assets.declarations"))}let i=An(e.acceptedEvents,"acceptedEvents");i.ok||t.push(...i.errors);let o=An(e.emittedEvents,"emittedEvents");if(o.ok||t.push(...o.errors),!pt(e.permissions))t.push(de("invalid-permissions","permissions is required","permissions"));else{t.push(...ft(e.permissions,Jf,"permissions"));let a=An(e.permissions.emit,"permissions.emit");a.ok||t.push(...a.errors);let d=An(e.permissions.subscribe,"permissions.subscribe");d.ok||t.push(...d.errors),e.permissions.authoritative!==void 0&&typeof e.permissions.authoritative!="boolean"&&t.push(de("invalid-permissions","permissions.authoritative must be a boolean","permissions.authoritative"))}let s=yt(e.integrations,"integrations",Od,"invalid-integration","integration");if(s.ok||t.push(...s.errors),e.surface!==void 0&&(pt(e.surface)?(t.push(...ft(e.surface,Md,"surface")),e.surface.alpha!==void 0&&typeof e.surface.alpha!="boolean"&&t.push(de("invalid-surface","surface.alpha must be a boolean","surface.alpha")),e.surface.clearPolicy!==void 0&&(typeof e.surface.clearPolicy!="string"||!Vd.has(e.surface.clearPolicy))&&t.push(de("invalid-clear-policy",`invalid clear policy "${String(e.surface.clearPolicy)}"`,"surface.clearPolicy"))):t.push(de("invalid-surface","surface must be an object","surface"))),e.layers!==void 0){if(!pt(e.layers))t.push(de("invalid-layers","layers must be an object","layers"));else if(t.push(...ft(e.layers,Nd,"layers")),e.layers.compositor!==void 0&&typeof e.layers.compositor!="boolean"&&t.push(de("invalid-layers","layers.compositor must be a boolean","layers.compositor")),e.layers.blend!==void 0){let a=yt(e.layers.blend,"layers.blend",Ld,"invalid-blend","blend mode");a.ok||t.push(...a.errors)}}if(e.modules!==void 0){if(!pt(e.modules))t.push(de("invalid-module","modules must be an object","modules"));else if(t.push(...ft(e.modules,_d,"modules")),e.modules.refs!==void 0){let a=Hd(e.modules.refs,"modules.refs");a.ok||t.push(...a.errors)}}if(e.kind!==void 0&&(typeof e.kind!="string"||!Fd.has(e.kind))&&t.push(de("invalid-kind",`invalid cart kind "${String(e.kind)}"`,"kind")),e.grants!==void 0){let a=yt(e.grants,"grants",xo,"invalid-grant","grant");a.ok||t.push(...a.errors)}return t}function tm(e){let t=[];return e.emittedEvents.forEach((n,r)=>{ri(n,e.permissions.emit)||t.push(de("undeclared-permission",`emitted event "${n}" is not covered by permissions.emit`,`emittedEvents[${r}]`))}),e.acceptedEvents.forEach((n,r)=>{ri(n,e.permissions.subscribe)||t.push(de("undeclared-permission",`accepted event "${n}" is not covered by permissions.subscribe`,`acceptedEvents[${r}]`))}),t}function nm(e){let t=Cn(e.assets.kinds),n=e.assets.declarations.map(o=>({id:o.id,kind:o.kind})),r={emit:[...e.permissions.emit],subscribe:[...e.permissions.subscribe]};e.permissions.authoritative===!0&&(r.authoritative=!0);let i={version:1,id:e.id,runtime:{minContractVersion:e.runtime.minContractVersion,features:[...e.runtime.features]},phases:Cn(e.phases),managers:Cn(e.managers),assets:{kinds:t,declarations:n},acceptedEvents:[...e.acceptedEvents],emittedEvents:[...e.emittedEvents],permissions:r,integrations:Cn(e.integrations)};if(e.surface){let o={};e.surface.alpha===!0&&(o.alpha=!0),e.surface.clearPolicy&&(o.clearPolicy=e.surface.clearPolicy),(o.alpha!==void 0||o.clearPolicy!==void 0)&&(i.surface=o)}if(e.layers){let o={};e.layers.compositor===!0&&(o.compositor=!0),e.layers.blend&&e.layers.blend.length>0&&(o.blend=Cn(e.layers.blend)),(o.compositor!==void 0||o.blend!==void 0)&&(i.layers=o)}if(e.modules?.refs&&e.modules.refs.length>0){let o=Zf(e.modules.refs);o.length>0&&(i.modules={refs:o})}return e.kind==="calculation"&&(i.kind="calculation"),e.grants&&e.grants.length>0&&(i.grants=Cn(e.grants)),i}function Oo(e){let t=em(e);if(t.length>0)return{ok:!1,errors:t};let n=nm(e);return t.push(...tm(n)),t.length>0?{ok:!1,errors:t}:{ok:!0,manifest:n}}function ii(e,t){let n=Oo(e),r=n.ok?[]:[...n.errors];if(!pt(t))return{ok:!1,errors:[de("invalid-host","host capabilities must be a JSON object")]};r.push(...ft(t,Yf,"host")),typeof t.contractVersion!="number"||!Number.isInteger(t.contractVersion)||t.contractVersion<1?r.push(de("invalid-host","host.contractVersion must be an integer >= 1","host.contractVersion")):n.ok&&t.contractVersion<n.manifest.runtime.minContractVersion&&r.push(de("unsupported-runtime",`host contract version ${t.contractVersion} is below required ${n.manifest.runtime.minContractVersion}`,"runtime.minContractVersion"));let i=$d(t.features,"host.features");if(!i.ok)r.push(...i.errors);else if(n.ok){let a=new Set(i.values);n.manifest.runtime.features.forEach((d,m)=>{a.has(d)||r.push(de("unsupported-feature",`host does not support required feature "${d}"`,`runtime.features[${m}]`))})}let o=yt(t.integrations,"host.integrations",Od,"invalid-integration","integration");if(!o.ok)r.push(...o.errors);else if(n.ok){let a=new Set(o.values);n.manifest.integrations.forEach((d,m)=>{a.has(d)||r.push(de("missing-integration",`host does not provide required integration "${d}"`,`integrations[${m}]`))})}if(t.managers!==void 0){let a=yt(t.managers,"host.managers",Dd,"invalid-manager","manager");if(!a.ok)r.push(...a.errors);else if(n.ok){let d=new Set(a.values);n.manifest.managers.forEach((m,l)=>{d.has(m)||r.push(de("missing-manager",`host does not provide required manager "${m}"`,`managers[${l}]`))})}}if(t.emit!==void 0){let a=An(t.emit,"host.emit");a.ok?n.ok&&n.manifest.permissions.emit.forEach((d,m)=>{ri(d,a.values)||r.push(de("unknown-permission",`host does not allow emit permission "${d}"`,`permissions.emit[${m}]`))}):r.push(...a.errors)}if(t.subscribe!==void 0){let a=An(t.subscribe,"host.subscribe");a.ok?n.ok&&n.manifest.permissions.subscribe.forEach((d,m)=>{ri(d,a.values)||r.push(de("unknown-permission",`host does not allow subscribe permission "${d}"`,`permissions.subscribe[${m}]`))}):r.push(...a.errors)}if(t.surface!==void 0&&(pt(t.surface)?(r.push(...ft(t.surface,Md,"host.surface")),t.surface.alpha!==void 0&&typeof t.surface.alpha!="boolean"&&r.push(de("invalid-host","host.surface.alpha must be a boolean","host.surface.alpha")),t.surface.clearPolicy!==void 0&&(Array.isArray(t.surface.clearPolicy)?t.surface.clearPolicy:[t.surface.clearPolicy]).forEach((d,m)=>{(typeof d!="string"||!Vd.has(d))&&r.push(de("invalid-clear-policy",`invalid clear policy "${String(d)}"`,Array.isArray(t.surface?.clearPolicy)?`host.surface.clearPolicy[${m}]`:"host.surface.clearPolicy"))})):r.push(de("invalid-host","host.surface must be an object","host.surface"))),t.layers!==void 0){if(!pt(t.layers))r.push(de("invalid-host","host.layers must be an object","host.layers"));else if(r.push(...ft(t.layers,Nd,"host.layers")),t.layers.compositor!==void 0&&typeof t.layers.compositor!="boolean"&&r.push(de("invalid-host","host.layers.compositor must be a boolean","host.layers.compositor")),t.layers.blend!==void 0){let a=yt(t.layers.blend,"host.layers.blend",Ld,"invalid-blend","blend mode");a.ok||r.push(...a.errors)}}let s;if(t.modules!==void 0)if(!pt(t.modules))r.push(de("invalid-host","host.modules must be an object","host.modules"));else if(r.push(...ft(t.modules,_d,"host.modules")),t.modules.refs!==void 0){let a=Hd(t.modules.refs,"host.modules.refs");a.ok?s=a.values:r.push(...a.errors)}else s=[];if(n.ok&&n.manifest.surface){let a=n.manifest.surface,d=t.surface;a.alpha===!0&&d?.alpha!==!0&&r.push(de("unsupported-surface","host does not provide an alpha-capable surface","surface.alpha")),a.clearPolicy&&((Array.isArray(d?.clearPolicy)?d.clearPolicy:d?.clearPolicy?[d.clearPolicy]:[]).includes(a.clearPolicy)||r.push(de("unsupported-surface",`host does not provide clear policy "${a.clearPolicy}"`,"surface.clearPolicy")))}if(n.ok&&n.manifest.layers){let a=n.manifest.layers,d=t.layers;if(a.compositor===!0&&d?.compositor!==!0&&r.push(de("unsupported-layer","host does not provide a compositor","layers.compositor")),a.blend){let m=new Set(d?.blend??[]);a.blend.forEach((l,h)=>{m.has(l)||r.push(de("unsupported-layer",`host does not provide blend mode "${l}"`,`layers.blend[${h}]`))})}}if(n.ok&&n.manifest.modules?.refs){let a=t.modules===void 0?[]:s??[];n.manifest.modules.refs.forEach((d,m)=>{a.some(l=>l.id===d.id&&l.version===d.version)||r.push(de("unsupported-module",`host does not provide required module "${d.id}@${d.version}"`,`modules.refs[${m}]`))})}if(n.ok&&n.manifest.grants&&n.manifest.grants.length>0){let a=t.grants===void 0?{ok:!0,values:[]}:yt(t.grants,"host.grants",xo,"invalid-grant","grant");if(!a.ok)r.push(...a.errors);else{let d=new Set(a.values);n.manifest.grants.forEach((m,l)=>{d.has(m)||r.push(de("ungranted-capability",`host does not grant "${m}"`,`grants[${l}]`))})}}else if(t.grants!==void 0){let a=yt(t.grants,"host.grants",xo,"invalid-grant","grant");a.ok||r.push(...a.errors)}if(t.kinds!==void 0){let a=yt(t.kinds,"host.kinds",Fd,"invalid-kind","cart kind");if(!a.ok)r.push(...a.errors);else if(n.ok){let d=n.manifest.kind??"render";a.values.includes(d)||r.push(de("unsupported-kind",`host does not support cart kind "${d}"`,"kind"))}}return r.length>0?{ok:!1,errors:r}:{ok:!0}}var Wd=To;var rm="Compositor has been destroyed";function im(e){return Number.isFinite(e)?e<0?0:e>1?1:e:1}function om(e){let t=e.trim().toLowerCase();if(t[0]!=="#")throw new Error(`createCompositor: host.color must be #rgb or #rrggbb, got "${e}"`);let n=t.slice(1);if(n.length===3)return{r:parseInt(n[0]+n[0],16),g:parseInt(n[1]+n[1],16),b:parseInt(n[2]+n[2],16),a:255};if(n.length===6)return{r:parseInt(n.slice(0,2),16),g:parseInt(n.slice(2,4),16),b:parseInt(n.slice(4,6),16),a:255};throw new Error(`createCompositor: host.color must be #rgb or #rrggbb, got "${e}"`)}function sm(e){return{data:new Uint8ClampedArray(e.data),width:e.width,height:e.height,colorSpace:e.colorSpace??"srgb"}}function am(e,t){if(e===void 0||e.kind==="participant")return{kind:"participant"};if(e.kind==="canvas"){if(!e.canvas)throw new Error(`createCompositor: layer "${t}" canvas source is required`);return{kind:"canvas",canvas:e.canvas}}if(e.kind==="image"){if(!e.image||!e.image.data)throw new Error(`createCompositor: layer "${t}" image source is required`);return{kind:"image",image:sm(e.image)}}throw new Error(`createCompositor: layer "${t}" source.kind must be participant, image, or canvas`)}function Mo(e,t){if(!e.id)throw new Error("createCompositor: layer id is required");if(!Number.isFinite(e.order))throw new Error(`createCompositor: layer "${e.id}" order is required`);let n=e.blend??"source-over";if(n!=="source-over"&&n!=="screen")throw new Error(`createCompositor: layer "${e.id}" blend must be source-over or screen`);let r=e.pointerEvents??"auto";if(r!=="auto"&&r!=="none")throw new Error(`createCompositor: layer "${e.id}" pointerEvents must be auto or none`);let i=e.clearPolicy??t;if(i!=="transparent"&&i!=="opaque")throw new Error(`createCompositor: layer "${e.id}" clearPolicy is invalid`);let o=am(e.source,e.id);return{id:e.id,order:e.order,visible:e.visible!==!1,opacity:im(e.opacity??1),blend:n,clip:e.clip?{...e.clip}:null,pointerEvents:r,clearPolicy:i,sourceKind:o.kind,source:o}}function Bd(e){return{id:e.id,order:e.order,visible:e.visible,opacity:e.opacity,blend:e.blend,clip:e.clip?{...e.clip}:null,pointerEvents:e.pointerEvents,clearPolicy:e.clearPolicy,sourceKind:e.source.kind}}function qd(e){return[...e].sort((t,n)=>t.order-n.order||t.id.localeCompare(n.id))}function No(e,t){return 255-Math.round((255-e)*(255-t)/255)}function dm(e,t,n,r,i,o,s,a){let d=o/255*s;if(d<=0)return;let m=e[t],l=e[t+1],h=e[t+2],S=e[t+3]/255,C=n,T=r,v=i;a==="screen"&&(C=No(m,n),T=No(l,r),v=No(h,i));let P=d+S*(1-d);if(P<=0){e[t]=0,e[t+1]=0,e[t+2]=0,e[t+3]=0;return}e[t]=Math.round((C*d+m*S*(1-d))/P),e[t+1]=Math.round((T*d+l*S*(1-d))/P),e[t+2]=Math.round((v*d+h*S*(1-d))/P),e[t+3]=Math.round(P*255)}function cm(e,t,n){if(e.width===t&&e.height===n)return{data:new Uint8ClampedArray(e.data),width:t,height:n,colorSpace:e.colorSpace??"srgb"};let r=new Uint8ClampedArray(t*n*4);for(let i=0;i<n;i++){let o=Math.min(e.height-1,Math.floor(i*e.height/n));for(let s=0;s<t;s++){let a=Math.min(e.width-1,Math.floor(s*e.width/t)),d=(o*e.width+a)*4,m=(i*t+s)*4;r[m]=e.data[d],r[m+1]=e.data[d+1],r[m+2]=e.data[d+2],r[m+3]=e.data[d+3]}}return{data:r,width:t,height:n,colorSpace:e.colorSpace??"srgb"}}function um(e,t){for(let n=0;n<e.length;n+=4)e[n]=t.r,e[n+1]=t.g,e[n+2]=t.b,e[n+3]=t.a}function Gd(e,t,n){return e?t>=e.x&&n>=e.y&&t<e.x+e.width&&n<e.y+e.height:!0}function Kd(e){let t=e.getContext("2d");if(!t)throw new Error("createCompositor: layer canvas has no 2d context");return t.getImageData(0,0,e.width,e.height)}function oi(e,t){e&&(e.style.zIndex=String(t.order),e.style.pointerEvents=t.pointerEvents==="none"?"none":"auto",e.style.visibility=t.visible?"visible":"hidden")}function jd(e){if(!e.layers.length)throw new Error("createCompositor: at least one layer is required");let t=new Set,n=e.clearPolicy??"transparent";if(n!=="transparent"&&n!=="opaque")throw new Error("createCompositor: clearPolicy must be transparent or opaque");let r=new Map;for(let p of e.layers){let I=Mo(p,n);if(t.has(I.id))throw new Error(`createCompositor: duplicate layer id "${I.id}"`);t.add(I.id),r.set(I.id,I)}let i=e.group,o=e.dpr&&e.dpr>0?e.dpr:1,s=Math.max(1,(e.width??320)|0),a=Math.max(1,(e.height??180)|0),d=o,m=e.offscreen!==!1,l=!e.target;if(!m&&!e.target)throw new Error("createCompositor: target canvas is required when offscreen is false");let h=e.target??document.createElement("canvas"),S=h.getContext("2d",{alpha:!0});if(!S)throw new Error("createCompositor: host canvas has no 2d context");let C=!1,T=()=>{if(C)throw new Error(rm)},v=()=>({width:Math.max(1,Math.round(s*d)),height:Math.max(1,Math.round(a*d))}),P=()=>{let p=v();h.width!==p.width&&(h.width=p.width),h.height!==p.height&&(h.height=p.height),h.style.width=`${s}px`,h.style.height=`${a}px`},$=()=>qd([...r.values()]).map(Bd),j=p=>{if(p.source.kind==="image")return p.source.image;if(p.source.kind==="canvas")try{return Kd(p.source.canvas)}catch{return}try{let c=i.participant(p.id).cart.canvas;return c?(oi(c,p),Kd(c)):void 0}catch{return}},O=(p,I,c)=>{if(p.fill(0),n==="opaque"&&!e.host?.image&&!e.host?.color&&p.fill(0),e.host?.image){let f=cm(e.host.image,I,c);p.set(f.data);return}e.host?.color&&um(p,om(e.host.color))},F=()=>{let{width:p,height:I}=v();P();let c=S.createImageData(p,I);O(c.data,p,I);for(let f of qd([...r.values()])){if(!f.visible||f.opacity<=0)continue;let y=j(f);if(!y)continue;let A=f.clearPolicy==="transparent",D=Math.min(p,y.width),R=Math.min(I,y.height);for(let N=0;N<R;N++)for(let q=0;q<D;q++){if(!Gd(f.clip,q,N))continue;let M=(N*y.width+q)*4,u=y.data[M],b=y.data[M+1],x=y.data[M+2],V=y.data[M+3];A&&u===0&&b===0&&x===0||V<=0||dm(c.data,(N*p+q)*4,u,b,x,V,f.opacity,f.blend)}}return S.putImageData(c,0,0),c};P();for(let p of $())try{oi(i.participant(p.id).cart.canvas,p)}catch{}return{get canvas(){return h},get width(){return s},get height(){return a},get dpr(){return d},compose(){return T(),F()},captureComposedFrame(){T();let p=F();return{imageData:p,pngDataUrl:h.toDataURL("image/png"),width:p.width,height:p.height,declaredOrder:$()}},resize(p,I,c){T(),s=Math.max(1,p|0),a=Math.max(1,I|0),c!==void 0&&(d=c>0?c:1);let f=v();i.resize(f.width,f.height),P()},setLayer(p,I){T();let c=r.get(p);if(!c)throw new Error(`createCompositor: unknown layer "${p}"`);let f=Mo({id:p,order:I.order??c.order,visible:I.visible??c.visible,opacity:I.opacity??c.opacity,blend:I.blend??c.blend,clip:I.clip===void 0?c.clip??void 0:I.clip,pointerEvents:I.pointerEvents??c.pointerEvents,clearPolicy:I.clearPolicy??c.clearPolicy,source:I.source??c.source},n);r.set(p,f);try{oi(i.participant(p).cart.canvas,f)}catch{}},addLayer(p){if(T(),r.has(p.id))throw new Error(`createCompositor: duplicate layer id "${p.id}"`);let I=Mo(p,n);r.set(I.id,I);try{oi(i.participant(I.id).cart.canvas,I)}catch{}},layer(p){T();let I=r.get(p);if(!I)throw new Error(`createCompositor: unknown layer "${p}"`);return Bd(I)},layers(){return T(),$()},pointerTarget(p,I){T();let c=p|0,f=I|0,y=[...$()].reverse();for(let A of y){if(!A.visible||A.pointerEvents==="none"||!Gd(A.clip,c,f))continue;let D=r.get(A.id);if(D&&D.source.kind!=="participant")return A.id;try{i.participant(A.id)}catch{continue}return A.id}},unmountLayer(p){if(T(),!r.has(p))throw new Error(`createCompositor: unknown layer "${p}"`);r.delete(p);try{i.detach(p)}catch{}},inspect(){T();let p=$();return{viewport:{width:s,height:a,dpr:d},clearPolicy:n,layers:p,declaredOrder:p.map(I=>I.id)}},destroy(){C||(C=!0,l&&h.parentNode&&h.remove())}}}function Jd(e){let t=e.devicePixelRatio??1,{contentWidth:n,contentHeight:r,viewportWidth:i,viewportHeight:o,mode:s}=e,a=i/n,d=o/r,m=s==="contain"?Math.min(a,d):Math.max(a,d),l=n*m,h=r*m,S=(i-l)/2,C=(o-h)/2,T=si(-S/l),v=si(-C/h),P=si(i/l),$=si(o/h);return{mode:s,contentWidth:n,contentHeight:r,viewportWidth:i,viewportHeight:o,devicePixelRatio:t,scale:m,offsetX:S,offsetY:C,canvasWidth:i*t,canvasHeight:o*t,visibleNormalizedRect:{x:T,y:v,width:Math.min(P,1-T),height:Math.min($,1-v)}}}function lm(e,t){return{x:t.offsetX+e.x*t.contentWidth*t.scale,y:t.offsetY+e.y*t.contentHeight*t.scale}}function wn(e,t){return{x:(e.x-t.offsetX)/(t.contentWidth*t.scale),y:(e.y-t.offsetY)/(t.contentHeight*t.scale)}}function pm(e,t){return{x:e.x/t.devicePixelRatio,y:e.y/t.devicePixelRatio}}function fm(e,t){return wn(pm(e,t),t)}function mm(e,t){let n=lm({x:e.x,y:e.y},t);return{x:n.x,y:n.y,width:e.width*t.contentWidth*t.scale,height:e.height*t.contentHeight*t.scale}}function di(e,t,n,r){let o=(r?.space??"canvas")==="css"?wn(e,t):fm(e,t),s=[];for(let a of n.regions)Pn(a,o)&&s.push(a);if(s.length!==0)return s.length===1||!r?.precedence||s.sort((a,d)=>{let m=r.precedence[a.id]??Number.NEGATIVE_INFINITY,l=r.precedence[d.id]??Number.NEGATIVE_INFINITY;return l!==m?l-m:a.id<d.id?-1:a.id>d.id?1:0}),s[0]}function zd(e,t){let n=ai(e);if(n)return mm(n,t)}function Yd(e){let t=[];e.version!==1&&t.push({code:"version-mismatch",detail:`expected version 1, got ${String(e.version)}`});let n=new Set,r=i=>{if(n.has(i)){t.push({code:"duplicate-id",id:i,detail:`duplicate id ${i}`});return}n.add(i)};for(let i of e.landmarks)r(i.id),Ud(i.point)||t.push({code:"out-of-bounds",id:i.id,detail:`landmark ${i.id} is outside 0\u20131`});for(let i of e.regions){r(i.id);let o=ai(i);if(!i.rect&&!i.polygon){t.push({code:"invalid-shape",id:i.id,detail:`region ${i.id} has neither rect nor polygon`});continue}if(i.polygon&&i.polygon.length<3&&t.push({code:"invalid-shape",id:i.id,detail:`region ${i.id} polygon needs at least 3 points`}),o&&!gm(o)&&t.push({code:"out-of-bounds",id:i.id,detail:`region ${i.id} is outside 0\u20131`}),i.polygon){for(let s of i.polygon)if(!Ud(s)){t.push({code:"out-of-bounds",id:i.id,detail:`region ${i.id} has a vertex outside 0\u20131`});break}}}for(let i=0;i<e.regions.length;i+=1){let o=e.regions[i],s=ai(o);if(s)for(let a=i+1;a<e.regions.length;a+=1){let d=e.regions[a],m=ai(d);m&&hm(s,m)&&t.push({code:"overlap",id:o.id,with:d.id,detail:`region ${o.id} overlaps ${d.id}`})}}return{ok:t.length===0,diagnostics:t}}function si(e){return e<=0?0:e>=1?1:e}function Ud(e){return e.x>=0&&e.x<=1&&e.y>=0&&e.y<=1}function gm(e){return e.x>=0&&e.y>=0&&e.width>=0&&e.height>=0&&e.x+e.width<=1&&e.y+e.height<=1}function hm(e,t){return e.x<t.x+t.width&&e.x+e.width>t.x&&e.y<t.y+t.height&&e.y+e.height>t.y}function ai(e){if(e.rect)return e.rect;if(!e.polygon||e.polygon.length===0)return;let t=1/0,n=1/0,r=-1/0,i=-1/0;for(let o of e.polygon)t=Math.min(t,o.x),n=Math.min(n,o.y),r=Math.max(r,o.x),i=Math.max(i,o.y);return{x:t,y:n,width:r-t,height:i-n}}function Pn(e,t){return e.polygon&&e.polygon.length>=3?ym(t,e.polygon):e.rect?t.x>=e.rect.x&&t.x<e.rect.x+e.rect.width&&t.y>=e.rect.y&&t.y<e.rect.y+e.rect.height:!1}function ym(e,t){let n=!1;for(let r=0,i=t.length-1;r<t.length;i=r,r+=1){let o=t[r],s=t[i];o.y>e.y!=s.y>e.y&&e.x<(s.x-o.x)*(e.y-o.y)/(s.y-o.y)+o.x&&(n=!n)}return n}var ci=1,bm=["mask","polygon","rect","depth"],vm=["pass-through","absorb","exclusive","depth-ordered"];var Sm=["idle","hover","focus","selected"],km="Semantic layer controller has been destroyed",TS=new Set(bm),Im=new Set(vm),Em=new Set(Wd);function Xd(e){return typeof e=="string"&&Im.has(e)}function Lo(e){return typeof e=="string"&&Em.has(e)}function ic(e){let t=[];return e.mask&&t.push("mask"),e.polygon&&e.polygon.length>=3&&t.push("polygon"),e.rect&&t.push("rect"),typeof e.depth=="number"&&Number.isFinite(e.depth)&&t.push("depth"),t}function Qd(e){return e.selected?"selected":e.focus?"focus":e.hover?"hover":"idle"}function Vo(e){return JSON.parse(JSON.stringify(e))}function Zd(){return{hover:!1,focus:!1,selected:!1}}function _o(e,t){return{hover:t?.hover??e.hover,focus:t?.focus??e.focus,selected:t?.selected??e.selected}}function xn(e){return Vo(e)}function er(e){return Vo(e??{})}function ec(e,t){let n=e.visuals[t]??e.visuals.idle;return{opacity:n?.opacity??1,blend:n?.blend??e.blend,version:n?.version}}function Rm(e,t){let n=e.bounds??{x:0,y:0,width:1,height:1};if(t.x<n.x||t.x>=n.x+n.width||t.y<n.y||t.y>=n.y+n.height||!Number.isInteger(e.width)||!Number.isInteger(e.height)||e.width<1||e.height<1||e.alpha.length!==e.width*e.height)return!1;let r=(t.x-n.x)/n.width,i=(t.y-n.y)/n.height,o=Math.min(e.width-1,Math.max(0,Math.floor(r*e.width))),s=Math.min(e.height-1,Math.max(0,Math.floor(i*e.height)));return(e.alpha[s*e.width+o]??0)>.5}function Cm(e,t){return e.mask?Rm(e.mask,t):e.polygon&&e.polygon.length>=3?Pn({id:"",polygon:e.polygon},t):e.rect?Pn({id:"",rect:e.rect},t):typeof e.depth=="number"&&Number.isFinite(e.depth)?t.x>=0&&t.x<=1&&t.y>=0&&t.y<=1:!1}function Am(e,t){let n=e.hitTest==="exclusive"?1:0,r=t.hitTest==="exclusive"?1:0;if(n!==r)return r-n;let i=e.geometry.depth??0,o=t.geometry.depth??0;return i!==o?o-i:t.order-e.order}function wm(e,t){if(!Number.isInteger(t.width)||!Number.isInteger(t.height)||t.width<1||t.height<1)throw new Error(`region "${e}" mask size is invalid`);if(!Array.isArray(t.alpha)||t.alpha.length!==t.width*t.height)throw new Error(`region "${e}" mask alpha length must be width*height`)}function tc(e,t){if(!t||typeof t!="object")throw new Error(`region "${e}" geometry is required`);if(t.mask&&wm(e,t.mask),t.polygon&&t.polygon.length>0&&t.polygon.length<3)throw new Error(`region "${e}" polygon needs 3+ points`);if(ic(t).length===0)throw new Error(`region "${e}" needs mask, polygon, rect, or depth`)}function nc(e,t){if(t!==void 0){if(!t||typeof t!="object")throw new Error(`region "${e}" visuals must be an object`);for(let n of Sm){let r=t[n];if(r&&r.blend!==void 0&&!Lo(r.blend))throw new Error(`region "${e}" ${n} blend is invalid`)}}}function rc(e,t){return e instanceof Error?e.message:t}function Pm(e,t){try{return e.layer(t),!0}catch{return!1}}function Fo(e){if(!e?.regions?.length)throw new Error("createSemanticLayerController: at least one region is required");let t=e.compositor,n=e.visualLayers,r=e.originFrame??0,i=!1,o=new Map,s=()=>{if(i)throw new Error(km)};function a(v){let P=Qd(v.state);return{id:v.declaration.id,geometryKinds:ic(v.geometry),hitTest:v.hitTest,blend:v.blend,order:v.order,depth:v.geometry.depth??0,state:{...v.state},appearance:P,a11y:v.a11y?{...v.a11y}:null,visual:ec(v,P)}}function d(v){let P=Qd(v.state),$=ec(v,P);if(v.visualLayerId&&n&&$.version&&n.override(v.visualLayerId,$.version),v.compositorLayerId&&t){if(!Pm(t,v.compositorLayerId))return;t.setLayer(v.compositorLayerId,{opacity:$.opacity,blend:$.blend,pointerEvents:v.hitTest==="pass-through"?"none":"auto"})}}function m(v){return{geometry:xn(v.geometry),hitTest:v.hitTest,blend:v.blend,order:v.order,compositorLayerId:v.compositorLayerId,visualLayerId:v.visualLayerId,visuals:er(v.visuals),state:{...v.state},a11y:v.a11y?{...v.a11y}:null}}function l(v,P){v.geometry=xn(P.geometry),v.hitTest=P.hitTest,v.blend=P.blend,v.order=P.order,v.compositorLayerId=P.compositorLayerId,v.visualLayerId=P.visualLayerId,v.visuals=er(P.visuals),v.state={...P.state},v.a11y=P.a11y?{...P.a11y}:null}for(let v of e.regions){if(!v?.id)throw new Error("createSemanticLayerController: region id is required");if(o.has(v.id))throw new Error(`createSemanticLayerController: duplicate region id "${v.id}"`);if(tc(v.id,v.geometry),nc(v.id,v.visuals),v.hitTest&&!Xd(v.hitTest))throw new Error(`createSemanticLayerController: region "${v.id}" hitTest is invalid`);if(v.blend&&!Lo(v.blend))throw new Error(`createSemanticLayerController: region "${v.id}" blend is invalid`);let P={declaration:v,geometry:xn(v.geometry),hitTest:v.hitTest??"absorb",blend:v.blend??"source-over",order:v.order??0,compositorLayerId:v.compositorLayerId??null,visualLayerId:v.visualLayerId??null,visuals:er(v.visuals),state:_o(Zd(),v.initialState),a11y:null};o.set(v.id,P),d(P)}function h(){return[...o.values()].map(a).sort((v,P)=>v.id<P.id?-1:v.id>P.id?1:0)}function S(v){let P=[...o.values()].filter($=>$.hitTest!=="pass-through"&&Cm($.geometry,v));return P.sort(Am),P[0]?.hitTest==="exclusive"?P.filter($=>$.hitTest==="exclusive"):P[0]?.hitTest==="absorb"?[P[0]]:P}function C(){let v=[...o.values()].map(P=>({id:P.declaration.id,geometry:xn(P.geometry),hitTest:P.hitTest,blend:P.blend,order:P.order,compositorLayerId:P.compositorLayerId,visualLayerId:P.visualLayerId,visuals:er(P.visuals),state:{...P.state},a11y:P.a11y?{...P.a11y}:null})).sort((P,$)=>P.id<$.id?-1:P.id>$.id?1:0);return Vo({schemaVersion:ci,frame:r,regions:v})}function T(v){s();let P=[],$=f=>({ok:!1,errors:[...P,f]}),j=v;if(typeof v=="string")try{j=JSON.parse(v)}catch{return $("snapshot JSON is invalid")}if(!j||typeof j!="object"||Array.isArray(j))return $("snapshot must be an object");let O=j;if(O.schemaVersion!==ci)return $("unsupported semantic layer snapshot schema");if(typeof O.frame!="number"||!Number.isFinite(O.frame))return $("frame must be finite");if(!Array.isArray(O.regions))return $("regions must be an array");let F=O.regions,w=new Map;for(let f of F){if(!f||typeof f.id!="string"||f.id.length===0){P.push("region id is required");continue}w.has(f.id)&&P.push(`duplicate region "${f.id}"`),w.set(f.id,f),o.has(f.id)||P.push(`unknown region "${f.id}"`),Xd(f.hitTest)||P.push(`region "${f.id}" hitTest is invalid`),Lo(f.blend)||P.push(`region "${f.id}" blend is invalid`),(typeof f.order!="number"||!Number.isFinite(f.order))&&P.push(`region "${f.id}" order must be finite`);try{tc(f.id,f.geometry),nc(f.id,f.visuals)}catch(y){P.push(rc(y,`region "${f.id}" is invalid`))}}for(let f of o.keys())w.has(f)||P.push(`missing region "${f}"`);if(P.length>0)return{ok:!1,errors:P};let p=r,I=new Map;for(let f of o.values())I.set(f.declaration.id,m(f));let c=()=>{r=p;for(let f of o.values()){let y=I.get(f.declaration.id);y&&l(f,y)}for(let f of o.values())d(f)};r=O.frame;for(let f of o.values()){let y=w.get(f.declaration.id);f.geometry=xn(y.geometry),f.hitTest=y.hitTest,f.blend=y.blend,f.order=y.order,f.compositorLayerId=y.compositorLayerId??null,f.visualLayerId=y.visualLayerId??null,f.visuals=er(y.visuals),f.state=_o(Zd(),y.state),f.a11y=y.a11y&&typeof y.a11y.name=="string"&&typeof y.a11y.role=="string"?{name:y.a11y.name,role:y.a11y.role}:null}try{for(let f of o.values())d(f)}catch(f){return c(),$(rc(f,"visual layer apply failed"))}return{ok:!0,snapshot:C()}}return{list(){return s(),h()},inspect(){return s(),h()},inspectPublished(){return s(),h().map(v=>({id:v.id,geometryKinds:v.geometryKinds,a11y:v.a11y}))},get(v){s();let P=o.get(v);return P?a(P):void 0},geometryOf(v){s();let P=o.get(v);return P?xn(P.geometry):void 0},setRegionState(v,P){s();let $=o.get(v);if(!$)throw new Error(`createSemanticLayerController: unknown region "${v}"`);let j={...$.state};$.state=_o($.state,P);try{d($)}catch(O){throw $.state=j,O}},setRegionA11y(v,P){s();let $=o.get(v);if(!$)throw new Error(`createSemanticLayerController: unknown region "${v}"`);$.a11y=P?{name:P.name,role:P.role}:null},hitTest(v){s();let P=S(v);return P[0]?a(P[0]):void 0},hitTestAll(v){return s(),S(v).map(a)},snapshot(){return s(),C()},restore:T,destroy(){i||(i=!0,o.clear())},get frame(){return r}}}var xm=new Set(["string","number","boolean","object","array"]);function st(e,t,n){return n?{code:e,detail:t,path:n}:{code:e,detail:t}}function Tm(e){if(!(typeof e!="string"||e.length===0)){for(let t of e.split("."))if(Wr(t))return t}}function Dm(e){let t=e.split(".");return t.length===0?"*":(t[t.length-1]="*",t.join("."))}function oc(e){let t=[];if(!e||typeof e!="object")return[st("invalid-schema","payload schema is required")];if((typeof e.version!="number"||!Number.isInteger(e.version)||e.version<1)&&t.push(st("invalid-version","payload schema version must be an integer >= 1")),!e.fields||typeof e.fields!="object"||Array.isArray(e.fields))return t.push(st("invalid-fields","payload schema fields must be an object")),t;for(let[n,r]of Object.entries(e.fields)){if(!n){t.push(st("invalid-field","field name is required",n));continue}(!r||typeof r!="object"||!xm.has(r.type))&&t.push(st("invalid-field-type",`field "${n}" type must be string | number | boolean | object | array`,n))}return t}function Om(e){return e===null?"null":e===void 0?"undefined":Array.isArray(e)?"array":typeof e=="string"?"string":typeof e=="number"&&Number.isFinite(e)?"number":typeof e=="boolean"?"boolean":typeof e=="object"?"object":"other"}function sc(e,t){if(t===void 0){let i=Object.entries(e.fields).filter(([,o])=>o.optional!==!0);return i.length===0?{ok:!0,payload:void 0}:{ok:!1,errors:i.map(([o])=>st("missing-field",`payload is missing required field "${o}"`,o))}}if(t===null||typeof t!="object"||Array.isArray(t))return{ok:!1,errors:[st("invalid-payload","payload must be a JSON object")]};let n=t,r=[];for(let[i,o]of Object.entries(e.fields)){if(!(i in n)||n[i]===void 0){o.optional!==!0&&r.push(st("missing-field",`payload is missing required field "${i}"`,i));continue}let s=Om(n[i]);s!==o.type&&r.push(st("field-type",`payload.${i} expected ${o.type}, got ${s}`,i))}return r.length>0?{ok:!1,errors:r}:{ok:!0,payload:t}}function ac(e,t,n={}){let r=oc(e);if(r.length)return{ok:!1,errors:r};let i=sc(e,t);if(!i.ok)return i;if((n.rejectUnknownFields??e.additionalProperties!==!0)&&t!==void 0&&t!==null&&typeof t=="object"&&!Array.isArray(t)){let s=t,a=new Set(Object.keys(e.fields)),d=[];for(let m of Object.keys(s))a.has(m)||d.push(st("unknown-field",`unknown field "${m}"`,m));if(d.length)return{ok:!1,errors:d}}return i}function Mm(e,t,n){let r=Dm(e);return{type:e,kind:t,payloadSchema:{version:n.version,fields:{...n.fields}},emitPattern:r,subscribePattern:r,toManifest(){let i={};for(let[o,s]of Object.entries(this.payloadSchema.fields))i[o]={type:s.type,optional:s.optional===!0};return{type:this.type,kind:this.kind,version:this.payloadSchema.version,fields:i,emitPattern:this.emitPattern,subscribePattern:this.subscribePattern}},validatePayload(i){return sc(this.payloadSchema,i)}}}function $o(e,t,n){let r=[];if(typeof t!="string"||t.length===0)r.push(st("invalid-type","event type is required"));else if(t.split(".").some(i=>i.length===0))r.push(st("invalid-type",`event type "${t}" has empty dotted segments`));else{let i=Tm(t);i?i!==e&&r.push(st("kind-mismatch",`type "${t}" infers kind "${i}" but this helper defines "${e}"`)):r.push(st("kind-mismatch",`type "${t}" has no "${e}" segment; dotted names like host.presentation.* need e.g. host.presentation.${e}.cue-started`))}return r.push(...oc(n)),r.length>0?{ok:!1,errors:r}:{ok:!0,contract:Mm(t,e,n)}}function dc(e,t){return $o("intent",e,t)}function ce(e,t){return $o("state",e,t)}function tt(e,t){return $o("diagnostic",e,t)}var ui=1,Bo="presentation.sequence.state.requested",qo="presentation.sequence.state.preloading",Go="presentation.sequence.state.ready",Ko="presentation.sequence.state.started",Wo="presentation.sequence.state.step-started",jo="presentation.sequence.state.step-completed",Uo="presentation.sequence.state.skipped",Jo="presentation.sequence.state.interrupted",uc="presentation.sequence.state.failed",zo="presentation.sequence.state.completed",lc="presentation.sequence.diagnostic.lifecycle",Nm=[Bo,qo,Go,Ko,Wo,jo,Uo,Jo,uc,zo,lc],_m=["audio","caption","semantic-region","visual-layer","cue"],Lm=["replace","queue","reject","ignore"],Vm=["duration","immediate"],Fm=["unavailable","failed","unauthorized","muted"],$m=["requested","preloading","ready","playing","paused","skipped","interrupted","failed","completed"],Hm=new Set(_m),Bm=new Set(Lm),qm=new Set(Vm),Gm=new Set(Fm),Km=new Set(Nm),Wm="Presentation sequence player has been destroyed";function ae(e,t,n){return n?{code:e,detail:t,path:n}:{code:e,detail:t}}function Ge(e){return JSON.parse(JSON.stringify(e))}function Ke(e){return!!e&&typeof e=="object"&&!Array.isArray(e)}function Ne(e){return typeof e=="string"&&e.length>0}function Ho(e,t,n){if(typeof e=="function"){n.push(ae("callbacks-forbidden","authored sequences must not contain callbacks",t));return}if(Array.isArray(e)){e.forEach((r,i)=>Ho(r,`${t}[${i}]`,n));return}if(Ke(e))for(let[r,i]of Object.entries(e))Ho(i,t?`${t}.${r}`:r,n)}function Tn(e){return typeof e=="number"&&Number.isFinite(e)&&e>=0}function Pt(){return{version:1,fields:{sequenceId:{type:"string"},invocationId:{type:"string"},idempotencyKey:{type:"string"},stepId:{type:"string",optional:!0},fallbackId:{type:"string",optional:!0},reason:{type:"string",optional:!0}}}}function xt(e){if(!e.ok)throw new Error(e.errors.map(t=>t.detail).join("; "));return e.contract}function jm(){return[xt(ce(Bo,Pt())),xt(ce(qo,Pt())),xt(ce(Go,Pt())),xt(ce(Ko,Pt())),xt(ce(Wo,Pt())),xt(ce(jo,Pt())),xt(ce(Uo,Pt())),xt(ce(Jo,Pt())),xt(ce(uc,Pt())),xt(ce(zo,Pt())),xt(tt(lc,Pt()))]}function Um(e){return typeof e=="string"&&Km.has(e)}function Jm(e){if(e)return"timeline"in e?e.timeline:e}function zm(e,t,n){return n?!t||t==="skip"||t==="complete"?0:t.durationFrames:e}function Ym(e,t){return(e.kind==="relative"||e.kind==="simultaneous"?e.delayFrames??0:0)+t}function Xm(e,t,n){if(!Ke(e)||!Ne(e.kind)){n.push(ae("invalid-timing","timing.kind is required",t));return}if(e.kind==="absolute"){Tn(e.atFrame)||n.push(ae("invalid-timing","timing.atFrame must be >= 0",t));return}if(e.kind==="relative"){e.afterStepId!==void 0&&!Ne(e.afterStepId)&&n.push(ae("invalid-timing","timing.afterStepId must be a string",t)),e.delayFrames!==void 0&&!Tn(e.delayFrames)&&n.push(ae("invalid-timing","timing.delayFrames must be >= 0",t));return}if(e.kind==="simultaneous"){Ne(e.withStepId)||n.push(ae("invalid-timing","timing.withStepId is required",t)),e.order!==void 0&&!Tn(e.order)&&n.push(ae("invalid-timing","timing.order must be >= 0",t)),e.delayFrames!==void 0&&!Tn(e.delayFrames)&&n.push(ae("invalid-timing","timing.delayFrames must be >= 0",t));return}n.push(ae("invalid-timing",`unsupported timing.kind "${String(e.kind)}"`,t))}function Qm(e,t,n,r){if(!Ke(e)||!Ne(e.kind)){r.push(ae("invalid-effect","effect.kind is required",n));return}e.kind!==t&&r.push(ae("kind-mismatch",`effect.kind "${e.kind}" must match track kind "${t}"`,n)),e.kind==="audio"&&!Ne(e.assetBinding)&&r.push(ae("invalid-effect","assetBinding is required",n)),e.kind==="caption"&&(Ne(e.textBinding)||r.push(ae("invalid-effect","textBinding is required",n)),typeof e.visible!="boolean"&&r.push(ae("invalid-effect","visible must be boolean",n))),e.kind==="semantic-region"&&(Ne(e.regionBinding)||r.push(ae("invalid-effect","regionBinding is required",n)),Ke(e.state)||r.push(ae("invalid-effect","state is required",n))),e.kind==="visual-layer"&&(Ne(e.layerBinding)||r.push(ae("invalid-effect","layerBinding is required",n)),e.transition!=="show"&&e.transition!=="hide"&&r.push(ae("invalid-effect","transition must be show or hide",n))),e.kind==="cue"&&!Ne(e.name)&&r.push(ae("invalid-effect","cue name is required",n))}function Zm(e){let t=new Map;for(let n of e.tracks)for(let r of n.steps)t.set(r.id,{track:n,step:r});return t}function tr(e){let t=[];if(Ho(e,"",t),!Ke(e))return{ok:!1,errors:[ae("invalid-definition","sequence must be a JSON object")]};if(Ne(e.id)||t.push(ae("invalid-id","id is required","id")),!Array.isArray(e.tracks)||e.tracks.length===0)return t.push(ae("invalid-tracks","tracks must be a non-empty array","tracks")),{ok:!1,errors:t};let n=e.interruptionPolicy??"replace";Bm.has(String(n))||t.push(ae("invalid-policy","unsupported interruptionPolicy","interruptionPolicy"));let r=new Set,i=new Set,o=[];e.tracks.forEach((l,h)=>{let S=`tracks[${h}]`;if(!Ke(l)){t.push(ae("invalid-track","track must be an object",S));return}if(!Ne(l.id)){t.push(ae("invalid-track","track id is required",`${S}.id`));return}if(i.has(l.id)&&t.push(ae("duplicate-track",`duplicate track id "${l.id}"`,S)),i.add(l.id),!Hm.has(String(l.kind))){t.push(ae("invalid-kind","unsupported track kind",`${S}.kind`));return}if(!Array.isArray(l.steps)||l.steps.length===0){t.push(ae("invalid-steps","track steps are required",`${S}.steps`));return}let C=[];l.steps.forEach((T,v)=>{let P=`${S}.steps[${v}]`;if(!Ke(T)){t.push(ae("invalid-step","step must be an object",P));return}if(!Ne(T.id)){t.push(ae("invalid-step","step id is required",`${P}.id`));return}r.has(T.id)&&t.push(ae("duplicate-step",`duplicate step id "${T.id}"`,P)),r.add(T.id),Tn(T.durationFrames)||t.push(ae("invalid-duration","durationFrames must be >= 0",`${P}.durationFrames`)),T.delayFrames!==void 0&&!Tn(T.delayFrames)&&t.push(ae("invalid-delay","delayFrames must be >= 0",`${P}.delayFrames`)),T.completion!==void 0&&!qm.has(String(T.completion))&&t.push(ae("invalid-completion","unsupported completion rule",`${P}.completion`)),Xm(T.timing,`${P}.timing`,t),Qm(T.effect,String(l.kind),`${P}.effect`,t),C.push(Ge(T))}),o.push({id:l.id,kind:l.kind,steps:C})});let s=[],a=new Set;e.fallbacks!==void 0&&(Array.isArray(e.fallbacks)?e.fallbacks.forEach((l,h)=>{let S=`fallbacks[${h}]`;if(!Ke(l)||!Ne(l.id)){t.push(ae("invalid-fallback","fallback id is required",S));return}a.has(l.id)&&t.push(ae("duplicate-fallback",`duplicate fallback id "${l.id}"`,S)),a.add(l.id);let C=l.when;if((!Ke(C)||C.capability!=="audio"||!Gm.has(String(C.status)))&&t.push(ae("invalid-fallback","unsupported fallback.when",`${S}.when`)),l.omitTrackIds!==void 0)if(!Array.isArray(l.omitTrackIds))t.push(ae("invalid-fallback","omitTrackIds must be an array",S));else for(let T of l.omitTrackIds)i.has(String(T))||t.push(ae("unknown-track",`omitTrackIds references unknown track "${String(T)}"`,S));s.push(Ge(l))}):t.push(ae("invalid-fallbacks","fallbacks must be an array","fallbacks")));let d={id:String(e.id??""),tracks:o,interruptionPolicy:n,fallbacks:s},m=Zm(d);for(let{step:l}of m.values())l.timing.kind==="relative"&&l.timing.afterStepId&&(m.has(l.timing.afterStepId)||t.push(ae("unknown-step",`afterStepId "${l.timing.afterStepId}" does not exist`,`steps.${l.id}`))),l.timing.kind==="simultaneous"&&!m.has(l.timing.withStepId)&&t.push(ae("unknown-step",`withStepId "${l.timing.withStepId}" does not exist`,`steps.${l.id}`));return t.length>0?{ok:!1,errors:t}:{ok:!0,sequence:Ge(d)}}function cc(e,t,n,r){let i=[];for(let l of e.tracks)if(!t.has(l.id))for(let h of l.steps)i.push({track:l,step:h});let o=new Map(i.map(l=>[l.step.id,l])),s=new Map,a=new Set;function d(l){let h=s.get(l);if(h!==void 0)return h;let S=o.get(l);if(!S||a.has(l))return n;a.add(l);let C=Ym(S.step.timing,S.step.delayFrames??0),T=n+C;if(S.step.timing.kind==="absolute")T=n+S.step.timing.atFrame+(S.step.delayFrames??0);else if(S.step.timing.kind==="relative"&&S.step.timing.afterStepId){let v=o.get(S.step.timing.afterStepId);if(v){let P=d(v.step.id),$=m(v.step);T=P+$+C}}else S.step.timing.kind==="simultaneous"&&(T=d(S.step.timing.withStepId)+C);return a.delete(l),s.set(l,T),T}function m(l){return l.completion==="immediate"?0:zm(l.durationFrames,l.reducedMotion,r)}return i.map(({track:l,step:h})=>{let S=d(h.id),C=m(h),T=h.timing.kind==="simultaneous"?h.timing.order??0:0;return{id:h.id,trackId:l.id,trackKind:l.kind,order:T,startFrame:S,durationFrames:C,endFrame:S+C,effect:Ge(h.effect),restoreOnComplete:h.restoreOnComplete===!0,reducedSensory:h.reducedSensory??"keep"}}).sort(pc)}function pc(e,t){return e.startFrame!==t.startFrame?e.startFrame-t.startFrame:e.order!==t.order?e.order-t.order:e.trackId!==t.trackId?e.trackId<t.trackId?-1:1:e.id<t.id?-1:e.id>t.id?1:0}function Gt(e,t){if(!t)return;let n=e?.[t];return Ne(n)?n:void 0}function eg(e,t){let n=e.snapshot().events;for(let r=n.length-1;r>=0;r--){let i=n[r];if(i&&i.idempotencyKey===t&&i.type===Xn)return i.reason??"asset-failed"}}function tg(e,t,n,r){if(!t.tracks.some(s=>s.kind==="audio"))return"ok";if(!e)return"unavailable";let o=(r&&"broker"in r?r:void 0)?.broker;if(o?.muted)return"muted";for(let s of t.tracks)if(s.kind==="audio")for(let a of s.steps){if(a.effect.kind!=="audio")continue;let d=Gt(n.assets,a.effect.assetBinding);if(!d)continue;let m=Gt(n.channels,a.effect.channelBinding);if(o&&!o.isAuthorized(m)&&o.inspect().authorized.length>0)return"unauthorized";if(o?.assetStatus(d)==="failed")return"failed"}return"ok"}function Yo(e={}){let t=e.originFrame??0,n=!!e.reducedMotion,r=!!e.reducedSensory,i=e.semantic,o=e.visual,s=Jm(e.audio),a=e.audio,d=new Map,m=wt({originFrame:t,reducedMotion:n}),l=t,h=!1,S=!1,C=null,T=null,v=[],P=new Map,$=[],j=new Map;for(let k of e.sequences??[]){let E=tr(k);E.ok&&d.set(E.sequence.id,E.sequence)}function O(){if(S)throw new Error(Wm)}function F(k){$.push(Ge(k))}function w(k,E,_){let G={type:E,atFrame:l,sequenceId:k.sequenceId,invocationId:k.invocationId,idempotencyKey:k.idempotencyKey};_?.stepId&&(G.stepId=_.stepId),k.selectedFallbackId&&(G.fallbackId=k.selectedFallbackId),_?.reason&&(G.reason=_.reason),F(G)}function p(k){let E=[...k.steps.values()].filter(G=>G.phase==="completed").map(G=>G.resolved.id).sort(),_=[...k.steps.values()].filter(G=>G.phase==="active").map(G=>G.resolved.id).sort();return{sequenceId:k.sequenceId,invocationId:k.invocationId,idempotencyKey:k.idempotencyKey,phase:k.phase,playhead:Math.max(0,l-k.startedAtFrame),startedAtFrame:k.startedAtFrame,completedStepIds:E,activeStepIds:_,selectedFallbackId:k.selectedFallbackId,compiledReducedMotion:k.compiledReducedMotion}}function I(k,E){return pc(k.resolved,E.resolved)}function c(k,E){return`${k.invocationId}:${E}`}function f(k,E){return`${k.invocationId}:${E}`}function y(k){if(k.audioKey&&s?.cancel(k.audioKey),k.captionId){let E=P.get(k.captionId);E&&P.set(k.captionId,{...E,visible:!1})}if(k.regionId&&k.regionKeys&&i){let E={};for(let _ of k.regionKeys)E[_]=!1;i.setRegionState(k.regionId,E)}k.visualLayerId&&o&&k.visualTransition==="hide"?o.play({name:`sequence:${k.visualLayerId}:restore`,idempotencyKey:`sequence:${k.visualLayerId}:restore:${l}`,layerId:k.visualLayerId,kind:"show",toVersion:k.visualVersion,durationFrames:0,onDuplicate:"replace"}):k.visualLayerId&&o&&k.visualTransition==="show"&&o.play({name:`sequence:${k.visualLayerId}:restore`,idempotencyKey:`sequence:${k.visualLayerId}:restore:${l}`,layerId:k.visualLayerId,kind:"hide",durationFrames:0,onDuplicate:"replace"}),k.cueKey&&m.cancel(k.cueKey)}function A(k,E){let{resolved:_}=E,G={},Z=r||_.reducedSensory==="skip-audio"||_.reducedSensory==="complete";if(_.effect.kind==="audio"){let z=Gt(k.bindings.assets,_.effect.assetBinding);if(z&&s&&!Z){let ne=f(k,_.id);s.play({name:_.id,idempotencyKey:ne,assetId:z,channelId:Gt(k.bindings.channels,_.effect.channelBinding),durationFrames:_.durationFrames,onDuplicate:"replace"}),G.audioKey=ne,eg(s,ne)&&(E.applied=G,R(k,"failed"),s.cancel(ne),G.audioKey=void 0)}}else if(_.effect.kind==="caption"){let z=Gt(k.bindings.captions,_.effect.textBinding)??"",ne=c(k,_.effect.textBinding);P.set(ne,{id:ne,text:z,visible:_.effect.visible}),G.captionId=ne}else if(_.effect.kind==="semantic-region"){let z=Gt(k.bindings.regions,_.effect.regionBinding);z&&i&&(i.setRegionState(z,_.effect.state),G.regionId=z,G.regionKeys=["hover","focus","selected"].filter(ne=>_.effect.kind==="semantic-region"&&_.effect.state[ne]!==void 0))}else if(_.effect.kind==="visual-layer"){let z=Gt(k.bindings.layers,_.effect.layerBinding),ne=Gt(k.bindings.versions,_.effect.versionBinding);z&&o&&(o.play({name:`sequence:${_.id}`,idempotencyKey:f(k,_.id),layerId:z,kind:_.effect.transition,toVersion:_.effect.transition==="hide"?void 0:ne,durationFrames:_.durationFrames,onDuplicate:"replace"}),G.visualLayerId=z,G.visualVersion=ne??o.inspect().find(Q=>Q.id===z)?.committedVersion??void 0,G.visualTransition=_.effect.transition)}else if(_.effect.kind==="cue"){let z=f(k,_.id);m.play({name:_.effect.name,idempotencyKey:z,durationFrames:_.durationFrames,easing:_.effect.easing,onDuplicate:"replace"}),G.cueKey=z}E.applied=G}function D(k,E,_){if(E.phase==="active"){if(_){E.applied&&y(E.applied),E.phase="skipped";return}E.resolved.restoreOnComplete&&E.applied?y(E.applied):E.applied?.audioKey&&E.resolved.effect.kind,E.phase="completed",w(k,jo,{stepId:E.resolved.id})}}function R(k,E){let _=d.get(k.sequenceId);if(!_)return!1;let G=(_.fallbacks??[]).find(z=>z.when.capability==="audio"&&z.when.status===E);if(!G)return!1;if(k.selectedFallbackId===G.id)return!0;k.selectedFallbackId=G.id;let Z=new Set(G.omitTrackIds??[]);for(let z of k.steps.values())Z.has(z.resolved.trackId)&&(z.phase==="pending"?z.phase="skipped":z.phase==="active"&&D(k,z,!0));return!0}function N(k){let E=[...k.steps.values()].filter(_=>_.phase==="pending"&&_.resolved.startFrame<=l).sort(I);for(let _ of E)_.phase="active",w(k,Wo,{stepId:_.resolved.id}),A(k,_),_.resolved.durationFrames===0&&_.phase==="active"&&D(k,_,!1)}function q(k){let E=[...k.steps.values()].filter(_=>_.phase==="active"&&l>=_.resolved.endFrame).sort(I);for(let _ of E)D(k,_,!1)}function M(k){return k.phase==="playing"||k.phase==="paused"||k.phase==="ready"||k.phase==="preloading"||k.phase==="requested"}function u(k){!M(k)||[...k.steps.values()].some(_=>_.phase==="pending"||_.phase==="active")||(k.phase="completed",k.nextAvailable=!0,w(k,zo),C===k&&(C=null,h=!1),W())}function b(k,E){for(let _ of[...k.steps.values()].sort(I))_.phase==="active"?D(k,_,!0):_.phase==="pending"&&(_.phase="skipped")}function x(k,E,_,G,Z=l,z=n){let ne=cc(k,G,Z,z),Q=new Map;for(let he of ne)Q.set(he.id,{resolved:he,phase:"pending",applied:null});return{sequenceId:k.id,invocationId:E.invocationId,idempotencyKey:E.idempotencyKey??E.invocationId,bindings:Ge(E.bindings??{}),interruptionPolicy:k.interruptionPolicy??"replace",selectedFallbackId:_,phase:"requested",startedAtFrame:l,steps:Q,nextAvailable:!1,compiledReducedMotion:z}}function V(k,E){if(!Ne(E.invocationId))return{ok:!1,reason:"invalid",detail:"invocationId is required"};let _=E.idempotencyKey??E.invocationId;if(j.get(_)&&C&&C.idempotencyKey===_)return{ok:!0,invocation:p(C)};let Z=E.bindings??{};F({type:Bo,atFrame:l,sequenceId:k.id,invocationId:E.invocationId,idempotencyKey:_});let z={sequenceId:k.id,invocationId:E.invocationId,idempotencyKey:_,bindings:Ge(Z),interruptionPolicy:k.interruptionPolicy??"replace",selectedFallbackId:null,phase:"preloading",startedAtFrame:l,steps:new Map,nextAvailable:!1,compiledReducedMotion:n};w(z,qo);let Q=tg(s,k,Z,a),he=null,ke=new Set;if(Q!=="ok"){let Pe=(k.fallbacks??[]).find(H=>H.when.capability==="audio"&&H.when.status===Q);if(Pe){he=Pe.id;for(let H of Pe.omitTrackIds??[])ke.add(H)}else if(Q==="unavailable"||Q==="failed")for(let H of k.tracks)H.kind==="audio"&&ke.add(H.id)}if(r)for(let Pe of k.tracks)Pe.kind==="audio"&&ke.add(Pe.id);let Ce=x(k,{...E,idempotencyKey:_},he,ke);return Ce.phase="ready",w(Ce,Go),Ce.phase="playing",w(Ce,Ko),C=Ce,T={sequenceId:k.id,options:{...E,idempotencyKey:_}},j.set(_,Ce.invocationId),q(Ce),N(Ce),u(Ce),{ok:!0,invocation:p(Ce)}}function L(k){if(!C||!M(C))return;let E=C;b(E,!0),E.phase="interrupted",E.nextAvailable=!0,w(E,Jo,{reason:k}),C=null,h=!1}function W(){if(C||h)return;let k=v.shift();if(!k)return;let E=d.get(k.sequenceId);E&&V(E,k.options)}function U(k,E){let _=new Set;if(E){let G=(k.fallbacks??[]).find(Z=>Z.id===E);for(let Z of G?.omitTrackIds??[])_.add(Z)}return cc(k,_,t,n).map(G=>({sequenceId:k.id,stepId:G.id,trackId:G.trackId,kind:G.trackKind,startFrame:G.startFrame,durationFrames:G.durationFrames,order:G.order,effect:Ge(G.effect)}))}function B(){return Ge({schemaVersion:ui,frame:l,reducedMotion:n,reducedSensory:r,paused:h,active:C?p(C):null,queue:v.map(k=>({sequenceId:k.sequenceId,invocationId:k.options.invocationId,idempotencyKey:k.options.idempotencyKey??k.options.invocationId,bindings:Ge(k.options.bindings??{})})),captions:[...P.values()].sort((k,E)=>k.id<E.id?-1:1),events:$.map(k=>Ge(k)),bindings:C?Ge(C.bindings):null})}function g(k){for(let E of[...k.steps.values()].sort(I)){if(E.phase!=="active")continue;let _=Math.max(0,E.resolved.endFrame-l);E.resolved={...E.resolved,durationFrames:_,endFrame:l+_},A(k,E)}}return{define(k){O();let E=tr(k);return E.ok&&d.set(E.sequence.id,E.sequence),E},playSequence(k,E){O();let _=d.get(k);if(!_)return{ok:!1,reason:"unknown-sequence",detail:`unknown sequence "${k}"`};let G=E.idempotencyKey??E.invocationId;if(C&&M(C)&&C.idempotencyKey===G)return{ok:!0,invocation:p(C)};if(C&&M(C)){let Z=C.interruptionPolicy;if(Z==="reject")return{ok:!1,reason:"busy",detail:"sequence is already playing"};if(Z==="ignore")return{ok:!0,invocation:p(C)};if(Z==="queue")return v.push({sequenceId:k,options:{...E,idempotencyKey:G}}),{ok:!0,invocation:{sequenceId:k,invocationId:E.invocationId,idempotencyKey:G,phase:"requested",playhead:0,startedAtFrame:l,completedStepIds:[],activeStepIds:[],selectedFallbackId:null,compiledReducedMotion:n}};L("replace")}return V(_,{...E,idempotencyKey:G})},skip(k){if(O(),!C||!M(C)||k&&C.invocationId!==k)return!1;let E=C;return b(E,!0),E.phase="skipped",E.nextAvailable=!0,w(E,Uo),C=null,h=!1,W(),!0},replay(k){O();let E=C&&M(C)?C:null,_=E?{sequenceId:E.sequenceId,options:{invocationId:E.invocationId,idempotencyKey:E.idempotencyKey,bindings:Ge(E.bindings)}}:T;if(!_)return{ok:!1,reason:"invalid",detail:"no sequence to replay"};if(k&&_.options.invocationId!==k)return{ok:!1,reason:"invalid",detail:"unknown invocation"};let G=d.get(_.sequenceId);return G?(j.delete(_.options.idempotencyKey??_.options.invocationId),E&&(b(E,!0),C=null,h=!1),V(G,_.options)):{ok:!1,reason:"unknown-sequence",detail:`unknown sequence "${_.sequenceId}"`}},pause(){return O(),!C||C.phase!=="playing"?!1:(h=!0,C.phase="paused",!0)},resume(){return O(),!C||C.phase!=="paused"?!1:(h=!1,C.phase="playing",!0)},cancel(k){return O(),!C||!M(C)||k&&C.invocationId!==k?!1:(L("cancel"),W(),!0)},step(k=1){O();let E=Number.isFinite(k)?Math.max(0,Math.floor(k)):0,_=$.length;if(h)return[];for(let G=0;G<E;G++)l+=1,m.step(1),s?.step(1),o?.step(1),C&&M(C)?(q(C),N(C),u(C)):W();return $.slice(_).map(G=>Ge(G))},snapshot(){return O(),B()},restore(k){O();let E={frame:l,paused:h,active:C,queue:v.slice(),captions:new Map(P),events:$.slice(),seenKeys:new Map(j),presentation:m,reducedMotion:n,reducedSensory:r},_=Q=>{l=E.frame,h=E.paused,C=E.active,v.length=0,v.push(...E.queue),P.clear();for(let[he,ke]of E.captions)P.set(he,ke);$.length=0,$.push(...E.events),j.clear();for(let[he,ke]of E.seenKeys)j.set(he,ke);return m=E.presentation,n=E.reducedMotion,r=E.reducedSensory,{ok:!1,errors:Q}},G=k;if(typeof k=="string")try{G=JSON.parse(k)}catch{return _([ae("invalid-json","snapshot JSON is invalid")])}if(!Ke(G))return _([ae("invalid-snapshot","snapshot must be a JSON object")]);let Z=[];G.schemaVersion!==ui&&Z.push(ae("unsupported-schema","unsupported presentation sequence snapshot schema")),(typeof G.frame!="number"||!Number.isFinite(G.frame))&&Z.push(ae("invalid-snapshot","frame must be finite","frame"));let z=G.active;if(z!=null&&(!Ke(z)||!Ne(z.sequenceId)?Z.push(ae("invalid-snapshot","active.sequenceId is required","active")):d.has(z.sequenceId)||Z.push(ae("unknown-sequence",`unknown sequence "${z.sequenceId}"`,"active.sequenceId"))),G.queue!==void 0&&(Array.isArray(G.queue)?G.queue.forEach((Q,he)=>{let ke=`queue[${he}]`;if(!Ke(Q)||!Ne(Q.sequenceId)){Z.push(ae("invalid-snapshot","queue item sequenceId is required",ke));return}d.has(Q.sequenceId)||Z.push(ae("unknown-sequence",`unknown sequence "${Q.sequenceId}"`,ke)),Ne(Q.invocationId)||Z.push(ae("invalid-snapshot","queue item invocationId is required",ke))}):Z.push(ae("invalid-snapshot","queue must be an array","queue"))),Z.length>0)return _(Z);let ne=G.frame;if(typeof ne!="number"||!Number.isFinite(ne))return _([ae("invalid-snapshot","frame must be finite","frame")]);try{if(C&&M(C)&&b(C,!0),P.clear(),v.length=0,$.length=0,j.clear(),h=G.paused===!0,l=ne,typeof G.reducedMotion=="boolean"&&(n=G.reducedMotion),typeof G.reducedSensory=="boolean"&&(r=G.reducedSensory),m=wt({originFrame:l,reducedMotion:!1}),Array.isArray(G.events))for(let Q of G.events)Ke(Q)&&Um(Q.type)&&$.push(Ge(Q));if(Array.isArray(G.captions))for(let Q of G.captions)Ke(Q)&&Ne(Q.id)&&P.set(Q.id,{id:Q.id,text:typeof Q.text=="string"?Q.text:"",visible:Q.visible===!0});if(Array.isArray(G.queue))for(let Q of G.queue)!Ke(Q)||!Ne(Q.sequenceId)||!Ne(Q.invocationId)||d.has(Q.sequenceId)&&v.push({sequenceId:Q.sequenceId,options:{invocationId:Q.invocationId,idempotencyKey:Ne(Q.idempotencyKey)?Q.idempotencyKey:Q.invocationId,bindings:Ke(Q.bindings)?Ge(Q.bindings):{}}});if(C=null,Ke(z)&&Ne(z.sequenceId)){let Q=d.get(z.sequenceId),he=typeof z.compiledReducedMotion=="boolean"?z.compiledReducedMotion:n,ke=$m.includes(z.phase)?z.phase:"playing";if(ke==="skipped"||ke==="completed"||ke==="interrupted"||ke==="failed"){let Ce=typeof z.startedAtFrame=="number"?z.startedAtFrame:t,Pe=x(Q,{invocationId:String(z.invocationId),idempotencyKey:String(z.idempotencyKey??z.invocationId),bindings:Ke(G.bindings)?Ge(G.bindings):{}},Ne(z.selectedFallbackId)?z.selectedFallbackId:null,new Set(ke==="skipped"?Q.tracks.map(H=>H.id):[]),Ce,he);Pe.phase=ke,Pe.startedAtFrame=Ce;for(let H of Pe.steps.values())H.phase="skipped";Pe.nextAvailable=!0,C=null,j.set(Pe.idempotencyKey,Pe.invocationId)}else{let Ce=new Set,Pe=Ne(z.selectedFallbackId)?z.selectedFallbackId:null;if(Pe){let X=(Q.fallbacks??[]).find(ee=>ee.id===Pe);for(let ee of X?.omitTrackIds??[])Ce.add(ee)}let H=x(Q,{invocationId:String(z.invocationId),idempotencyKey:String(z.idempotencyKey??z.invocationId),bindings:Ke(G.bindings)?Ge(G.bindings):{}},Pe,Ce,typeof z.startedAtFrame=="number"?z.startedAtFrame:t,he);H.phase=h?"paused":"playing",H.startedAtFrame=typeof z.startedAtFrame=="number"?z.startedAtFrame:t;let Y=new Set(Array.isArray(z.completedStepIds)?z.completedStepIds.filter(X=>typeof X=="string"):[]),re=new Set(Array.isArray(z.activeStepIds)?z.activeStepIds.filter(X=>typeof X=="string"):[]);for(let X of H.steps.values())Y.has(X.resolved.id)?X.phase="completed":re.has(X.resolved.id)||X.resolved.startFrame<=l?X.resolved.endFrame<=l?X.phase="completed":X.phase="active":X.phase="pending";C=H,j.set(H.idempotencyKey,H.invocationId),g(H)}}return m.setReducedMotion(n),{ok:!0,snapshot:B()}}catch(Q){return _([ae("restore-failed",Q instanceof Error?Q.message:String(Q))])}},inspect(){O();let k=C?d.get(C.sequenceId):void 0;return{frame:l,paused:h,reducedMotion:n,reducedSensory:r,active:C?p(C):null,queue:v.map(E=>({sequenceId:E.sequenceId,invocationId:E.options.invocationId,idempotencyKey:E.options.idempotencyKey??E.options.invocationId,phase:"requested",playhead:0,startedAtFrame:l,completedStepIds:[],activeStepIds:[],selectedFallbackId:null,compiledReducedMotion:n})),captions:[...P.values()].sort((E,_)=>E.id<_.id?-1:1),cueIntent:k?U(k,C?.selectedFallbackId??void 0):[]}},inspectCueIntent(k,E){O();let _=d.get(k);return _?U(_,E?.fallbackId):[]},get(k){O();let E=d.get(k);return E?Ge(E):void 0},destroy(){S||(C&&M(C)&&b(C,!0),S=!0,C=null,v.length=0,P.clear(),$.length=0)},setReducedMotion(k){O(),n=!!k,m.setReducedMotion(n)},get frame(){return l},get reducedMotion(){return n},get reducedSensory(){return r}}}var nr=1,Xo=1,hi="presentation.binding.state.applied",fi="presentation.binding.state.rejected",mi="presentation.binding.diagnostic.lifecycle",ng=[hi,fi,mi],rg=["visual-layer","presence","prop","semantic-region","hotspot","sequence","asset"],ig=["invalid-manifest","invalid-schema","invalid-version","invalid-id","unknown-field","unknown-resource","unknown-selector","duplicate-id","duplicate-priority","uncovered-default","impossible-target","callbacks-forbidden","invalid-predicate","invalid-projection","invalid-snapshot","destroyed"],og=new Set(rg),BS=new Set(ng),qS=new Set(ig),sg="Presentation binding runtime has been destroyed",es=/^[A-Za-z_][A-Za-z0-9_]*(\.[A-Za-z_][A-Za-z0-9_]*)*$/,ag=new Set(["show","hide","replace"]),dg=new Set(["id","schemaVersion","bindings","defaults","resources"]),cg=new Set(["id","priority","when","targets"]),ug=new Set(["layers","versions","regions","sequences","hotspots","entities","props","assets"]),lg=new Set(["labels","reducedSensory","reducedMotion"]);function oe(e,t,n){return n?{code:e,detail:t,path:n}:{code:e,detail:t}}function at(e){return!!e&&typeof e=="object"&&!Array.isArray(e)}function _e(e){return typeof e=="string"&&e.length>0}function We(e){return JSON.parse(JSON.stringify(e))}function gi(e,t,n){if(typeof e=="function"){n.push(oe("callbacks-forbidden","authored bindings must not contain callbacks",t));return}if(Array.isArray(e)){e.forEach((r,i)=>gi(r,`${t}[${i}]`,n));return}if(at(e))for(let[r,i]of Object.entries(e))gi(i,t?`${t}.${r}`:r,n)}function Je(e,t,n,r){for(let i of Object.keys(e))t.has(i)||r.push(oe("unknown-field",`unknown field "${i}"`,n?`${n}.${i}`:i))}function fc(e){return e===null||typeof e=="string"||typeof e=="number"&&Number.isFinite(e)||typeof e=="boolean"}function Qo(){return{version:1,fields:{manifestId:{type:"string"},revision:{type:"string",optional:!0},selectedBindingIds:{type:"array",optional:!0},reason:{type:"string",optional:!0},usedFallback:{type:"boolean",optional:!0}}}}function Zo(e){if(!e.ok)throw new Error(e.errors.map(t=>t.detail).join("; "));return e.contract}function pg(){return[Zo(ce(hi,Qo())),Zo(ce(fi,Qo())),Zo(tt(mi,Qo()))]}function Kt(e){switch(e.kind){case"visual-layer":return`visual-layer:${e.layerId}`;case"presence":return`presence:${e.entityId}`;case"prop":return`prop:${e.propId}`;case"semantic-region":return`semantic-region:${e.regionId}`;case"hotspot":return`hotspot:${e.hotspotId}`;case"sequence":return`sequence:${e.sequenceId}`;case"asset":return`asset:${e.bindingId}`}}function fg(e){if(e==null)return"missing";if(!at(e))return"invalid";let t=[];if(gi(e,"",t),t.length>0)return"invalid";try{return We(e)}catch{return"invalid"}}function mg(e,t){if(!es.test(t))return{found:!1,value:void 0};let n=e;for(let r of t.split(".")){if(!at(n)||!Object.prototype.hasOwnProperty.call(n,r))return{found:!1,value:void 0};n=n[r]}return{found:!0,value:n}}function gg(e,t){if(!Object.prototype.hasOwnProperty.call(e,t))return;let n=e[t];return typeof n=="function"?n:void 0}function li(e,t,n){if("all"in e){for(let i of e.all){let o=li(i,t,n);if(!o.ok)return o}return{ok:!0}}if("any"in e){let i={ok:!1,detail:"no alternative matched"};for(let o of e.any){let s=li(o,t,n);if(s.ok)return s;i=s}return i}if("not"in e){let i=li(e.not,t,n);return{ok:!i.ok,detail:i.ok?"negation failed":void 0}}if("selector"in e){let i=gg(n,e.selector);if(!i)return{ok:!1,detail:`unknown selector "${e.selector}"`};try{return{ok:!!i(t)}}catch(o){return{ok:!1,detail:o instanceof Error?o.message:"selector threw"}}}let r=mg(t,e.path);return"present"in e?{ok:(r.found&&r.value!==null&&r.value!==void 0)===e.present}:"neq"in e?r.found?{ok:r.value!==e.neq}:{ok:!0,detail:"path missing"}:r.found?{ok:r.value===e.eq}:{ok:!1,detail:`missing path "${e.path}"`}}function pi(e,t,n){if(!at(e)){n.push(oe("invalid-predicate","predicate must be an object",t));return}if("all"in e||"any"in e||"not"in e){if("all"in e){if(Je(e,new Set(["all"]),t,n),!Array.isArray(e.all)||e.all.length===0){n.push(oe("invalid-predicate","all requires a non-empty array",`${t}.all`));return}return{all:e.all.map((a,d)=>pi(a,`${t}.all[${d}]`,n)).filter(a=>!!a)}}if("any"in e){if(Je(e,new Set(["any"]),t,n),!Array.isArray(e.any)||e.any.length===0){n.push(oe("invalid-predicate","any requires a non-empty array",`${t}.any`));return}return{any:e.any.map((a,d)=>pi(a,`${t}.any[${d}]`,n)).filter(a=>!!a)}}Je(e,new Set(["not"]),t,n);let o=pi(e.not,`${t}.not`,n);return o?{not:o}:void 0}if("selector"in e){if(Je(e,new Set(["selector"]),t,n),!_e(e.selector)){n.push(oe("invalid-predicate","selector is required",`${t}.selector`));return}return{selector:e.selector}}if(Je(e,new Set(["path","eq","neq","present"]),t,n),(!_e(e.path)||!es.test(e.path))&&n.push(oe("invalid-predicate","path must be a dotted identifier",`${t}.path`)),[e.eq!==void 0,e.neq!==void 0,e.present!==void 0].filter(Boolean).length!==1){n.push(oe("invalid-predicate","predicate needs exactly one of eq, neq, or present",t));return}if(!(!_e(e.path)||!es.test(e.path))){if(e.present!==void 0){if(typeof e.present!="boolean"){n.push(oe("invalid-predicate","present must be a boolean",`${t}.present`));return}return{path:e.path,present:e.present}}if(e.neq!==void 0){if(!fc(e.neq)){n.push(oe("invalid-predicate","neq must be a JSON primitive",`${t}.neq`));return}return{path:e.path,neq:e.neq}}if(!fc(e.eq)){n.push(oe("invalid-predicate","eq must be a JSON primitive",`${t}.eq`));return}return{path:e.path,eq:e.eq}}}function hg(e,t,n){if(e===void 0)return;if(!at(e)){n.push(oe("impossible-target","region state must be an object",t));return}Je(e,new Set(["hover","focus","selected"]),t,n);let r={};for(let i of["hover","focus","selected"]){let o=e[i];if(o!==void 0){if(typeof o!="boolean"){n.push(oe("impossible-target",`${i} must be a boolean`,`${t}.${i}`));continue}r[i]=o}}return r}function ts(e,t,n,r){if(!at(e)){n.push(oe("impossible-target","target must be an object",t));return}if(!og.has(String(e.kind))){n.push(oe("impossible-target",`unsupported target kind "${String(e.kind)}"`,`${t}.kind`));return}let i=e.kind;if(i==="visual-layer"){if(Je(e,new Set(["kind","layerId","version","transition"]),t,n),!_e(e.layerId)){n.push(oe("impossible-target","layerId is required",`${t}.layerId`));return}if(!_e(e.version)){n.push(oe("impossible-target","version is required",`${t}.version`));return}e.transition!==void 0&&!ag.has(String(e.transition))&&n.push(oe("impossible-target","transition must be show, hide, or replace",`${t}.transition`)),r?.layers&&!r.layers.includes(e.layerId)&&n.push(oe("unknown-resource",`unknown layer "${e.layerId}"`,`${t}.layerId`));let o=r?.versions?.[e.layerId];o&&!o.includes(e.version)&&n.push(oe("unknown-resource",`unknown version "${e.version}" on "${e.layerId}"`,`${t}.version`));let s={kind:"visual-layer",layerId:e.layerId,version:e.version};return(e.transition==="show"||e.transition==="hide"||e.transition==="replace")&&(s.transition=e.transition),s}if(i==="presence"){if(Je(e,new Set(["kind","entityId","present","regionId"]),t,n),!_e(e.entityId)){n.push(oe("impossible-target","entityId is required",`${t}.entityId`));return}if(typeof e.present!="boolean"){n.push(oe("impossible-target","present must be a boolean",`${t}.present`));return}r?.entities&&!r.entities.includes(e.entityId)&&n.push(oe("unknown-resource",`unknown entity "${e.entityId}"`,`${t}.entityId`)),e.regionId!==void 0&&!_e(e.regionId)&&n.push(oe("impossible-target","regionId must be a string",`${t}.regionId`));let o={kind:"presence",entityId:e.entityId,present:e.present};return _e(e.regionId)&&(o.regionId=e.regionId),o}if(i==="prop"){if(Je(e,new Set(["kind","propId","visible","layerId"]),t,n),!_e(e.propId)){n.push(oe("impossible-target","propId is required",`${t}.propId`));return}if(typeof e.visible!="boolean"){n.push(oe("impossible-target","visible must be a boolean",`${t}.visible`));return}r?.props&&!r.props.includes(e.propId)&&n.push(oe("unknown-resource",`unknown prop "${e.propId}"`,`${t}.propId`));let o={kind:"prop",propId:e.propId,visible:e.visible};return _e(e.layerId)&&(o.layerId=e.layerId),o}if(i==="semantic-region"){if(Je(e,new Set(["kind","regionId","state","hitTestEnabled"]),t,n),!_e(e.regionId)){n.push(oe("impossible-target","regionId is required",`${t}.regionId`));return}r?.regions&&!r.regions.includes(e.regionId)&&n.push(oe("unknown-resource",`unknown region "${e.regionId}"`,`${t}.regionId`)),e.hitTestEnabled!==void 0&&typeof e.hitTestEnabled!="boolean"&&n.push(oe("impossible-target","hitTestEnabled must be a boolean",`${t}.hitTestEnabled`));let o=hg(e.state,`${t}.state`,n),s={kind:"semantic-region",regionId:e.regionId};return o&&(s.state=o),typeof e.hitTestEnabled=="boolean"&&(s.hitTestEnabled=e.hitTestEnabled),s}if(i==="hotspot"){if(Je(e,new Set(["kind","hotspotId","enabled","regionId"]),t,n),!_e(e.hotspotId)){n.push(oe("impossible-target","hotspotId is required",`${t}.hotspotId`));return}if(typeof e.enabled!="boolean"){n.push(oe("impossible-target","enabled must be a boolean",`${t}.enabled`));return}r?.hotspots&&!r.hotspots.includes(e.hotspotId)&&n.push(oe("unknown-resource",`unknown hotspot "${e.hotspotId}"`,`${t}.hotspotId`));let o={kind:"hotspot",hotspotId:e.hotspotId,enabled:e.enabled};return _e(e.regionId)&&(o.regionId=e.regionId),o}if(i==="sequence"){if(Je(e,new Set(["kind","sequenceId","play"]),t,n),!_e(e.sequenceId)){n.push(oe("impossible-target","sequenceId is required",`${t}.sequenceId`));return}e.play!==void 0&&typeof e.play!="boolean"&&n.push(oe("impossible-target","play must be a boolean",`${t}.play`)),r?.sequences&&!r.sequences.includes(e.sequenceId)&&n.push(oe("unknown-resource",`unknown sequence "${e.sequenceId}"`,`${t}.sequenceId`));let o={kind:"sequence",sequenceId:e.sequenceId};return typeof e.play=="boolean"&&(o.play=e.play),o}if(Je(e,new Set(["kind","bindingId","assetId"]),t,n),!_e(e.bindingId)){n.push(oe("impossible-target","bindingId is required",`${t}.bindingId`));return}if(!_e(e.assetId)){n.push(oe("impossible-target","assetId is required",`${t}.assetId`));return}return r?.assets&&!r.assets.includes(e.assetId)&&n.push(oe("unknown-resource",`unknown asset "${e.assetId}"`,`${t}.assetId`)),{kind:"asset",bindingId:e.bindingId,assetId:e.assetId}}function yg(e,t,n){if(e===void 0)return;if(!at(e)){n.push(oe("invalid-manifest","resources must be an object",t));return}Je(e,ug,t,n);let r={},i=(S,C)=>{if(S!==void 0){if(!Array.isArray(S)||S.some(T=>!_e(T))){n.push(oe("invalid-manifest",`${C} must be a string array`,`${t}.${C}`));return}return S.slice()}},o=i(e.layers,"layers");o&&(r.layers=o);let s=i(e.regions,"regions");s&&(r.regions=s);let a=i(e.sequences,"sequences");a&&(r.sequences=a);let d=i(e.hotspots,"hotspots");d&&(r.hotspots=d);let m=i(e.entities,"entities");m&&(r.entities=m);let l=i(e.props,"props");l&&(r.props=l);let h=i(e.assets,"assets");if(h&&(r.assets=h),e.versions!==void 0)if(!at(e.versions))n.push(oe("invalid-manifest","versions must be an object",`${t}.versions`));else{let S={};for(let[C,T]of Object.entries(e.versions)){if(!Array.isArray(T)||T.some(v=>!_e(v))){n.push(oe("invalid-manifest",`versions.${C} must be a string array`,`${t}.versions.${C}`));continue}S[C]=T.slice()}r.versions=S}return r}function yi(e){let t=[];if(gi(e,"",t),!at(e))return{ok:!1,errors:[oe("invalid-manifest","bindings manifest must be a JSON object")]};Je(e,dg,"",t),_e(e.id)||t.push(oe("invalid-id","id is required","id")),e.schemaVersion!==Xo&&t.push(oe("invalid-version",`schemaVersion must be ${Xo}`,"schemaVersion")),Array.isArray(e.bindings)||t.push(oe("invalid-manifest","bindings must be an array","bindings")),(!Array.isArray(e.defaults)||e.defaults.length===0)&&t.push(oe("uncovered-default","defaults must cover required presentation targets","defaults"));let n=yg(e.resources,"resources",t),r=new Set,i=[];Array.isArray(e.bindings)&&e.bindings.forEach((m,l)=>{let h=`bindings[${l}]`;if(!at(m)){t.push(oe("invalid-manifest","binding must be an object",h));return}if(Je(m,cg,h,t),!_e(m.id)){t.push(oe("invalid-id","binding id is required",`${h}.id`));return}r.has(m.id)&&t.push(oe("duplicate-id",`duplicate binding id "${m.id}"`,`${h}.id`)),r.add(m.id),(typeof m.priority!="number"||!Number.isFinite(m.priority))&&t.push(oe("invalid-manifest","priority must be a finite number",`${h}.priority`));let S=pi(m.when,`${h}.when`,t);if(!Array.isArray(m.targets)||m.targets.length===0){t.push(oe("impossible-target","binding targets are required",`${h}.targets`));return}let C=m.targets.map((T,v)=>ts(T,`${h}.targets[${v}]`,t,n)).filter(T=>!!T);!S||typeof m.priority!="number"||!Number.isFinite(m.priority)||i.push({id:m.id,priority:m.priority,when:S,targets:C})});let o=[],s=new Set;Array.isArray(e.defaults)&&e.defaults.forEach((m,l)=>{let h=ts(m,`defaults[${l}]`,t,n);if(!h)return;let S=Kt(h);s.has(S)&&t.push(oe("duplicate-priority",`duplicate default target "${S}"`,`defaults[${l}]`)),s.add(S),o.push(h)});let a=new Map,d=new Set;for(let m of i){let l=new Set;for(let h of m.targets){let S=Kt(h);d.add(S),l.has(S)&&t.push(oe("duplicate-priority",`binding "${m.id}" repeats target "${S}"`,`bindings.${m.id}`)),l.add(S);let C=a.get(S);C||(C=new Map,a.set(S,C));let T=C.get(m.priority);T?t.push(oe("duplicate-priority",`bindings "${T}" and "${m.id}" share priority ${m.priority} on "${S}"`,`bindings.${m.id}`)):C.set(m.priority,m.id)}}for(let m of d)s.has(m)||t.push(oe("uncovered-default",`required target "${m}" has no default`,"defaults"));return t.length>0?{ok:!1,errors:t}:{ok:!0,manifest:We({id:String(e.id),schemaVersion:Xo,bindings:i,defaults:o,...n?{resources:n}:{}})}}function hc(e){return{considered:[],winners:{},rejected:[],fallbacks:[],fallbackReason:e}}function mc(e,t){let n=hc(t==="uncovered-default"?null:t),r=[],i={};for(let o of e.defaults){let s=Kt(o);r.push(We(o)),i[s]={bindingId:null,target:We(o)},n.fallbacks.push({targetKey:s,reason:t})}return n.winners=i,{selectedBindingIds:[],targets:r,usedFallback:t!=="uncovered-default",fallbackReason:t==="uncovered-default"?null:t,explanation:n}}function ns(e,t,n={}){let r=fg(t);if(r==="missing")return mc(e,"missing-state");if(r==="invalid")return mc(e,"invalid-projection");let i=hc(null),o=[];for(let l of e.bindings){let h=li(l.when,r,n);if(i.considered.push({bindingId:l.id,predicateResult:h.ok,...h.detail?{detail:h.detail}:{}}),h.ok)o.push(l);else for(let S of l.targets)i.rejected.push({bindingId:l.id,targetKey:Kt(S),reason:"predicate-false"})}o.sort((l,h)=>h.priority-l.priority||(l.id<h.id?-1:l.id>h.id?1:0));let s=new Map;for(let l of o)for(let h of l.targets){let S=Kt(h),C=s.get(S);if(!C){s.set(S,{bindingId:l.id,priority:l.priority,target:We(h)});continue}l.priority<C.priority&&i.rejected.push({bindingId:l.id,targetKey:S,reason:"lower-priority"})}for(let l of e.defaults){let h=Kt(l);s.has(h)||(i.fallbacks.push({targetKey:h,reason:"uncovered-default"}),i.winners[h]={bindingId:null,target:We(l)})}for(let[l,h]of s)i.winners[l]={bindingId:h.bindingId,target:We(h.target)};let a=[...new Set([...s.values()].sort((l,h)=>h.priority-l.priority||(l.bindingId<h.bindingId?-1:1)).map(l=>l.bindingId))],d=[],m=new Set;for(let l of e.defaults){let h=Kt(l),S=s.get(h),C=S?S.target:l;m.has(h)||(m.add(h),d.push(We(C)))}for(let[l,h]of s)m.has(l)||(m.add(l),d.push(We(h.target)));return{selectedBindingIds:a,targets:d,usedFallback:!1,fallbackReason:null,explanation:i}}function bg(e,t){let n={},r={},i={},o={},s={},a={},d={},m=t.sequences?.inspect().active;for(let l of e){if(l.kind==="visual-layer"&&(n[l.layerId]=l.version),l.kind==="presence"&&(r[l.entityId]=l.present),l.kind==="prop"&&(i[l.propId]=l.visible),l.kind==="semantic-region"&&(o[l.regionId]={...l.state??{},...l.hitTestEnabled!==void 0?{hitTestEnabled:l.hitTestEnabled}:{}}),l.kind==="hotspot"&&(s[l.hotspotId]=l.enabled),l.kind==="sequence"){let h=l.play!==!1,S=h&&m&&m.sequenceId===l.sequenceId&&(m.phase==="playing"||m.phase==="paused"||m.phase==="requested"||m.phase==="preloading"||m.phase==="ready");a[l.sequenceId]=S?"playing":"idle",h&&S&&(a[l.sequenceId]="playing")}l.kind==="asset"&&(d[l.bindingId]=l.assetId)}return{revision:t.revision,selectedBindingIds:t.selectedBindingIds.slice(),layers:n,presence:r,props:i,regions:o,hotspots:s,sequences:a,assets:d,override:t.override?We(t.override):null,usedFallback:t.usedFallback,fallbackReason:t.fallbackReason,explanation:t.explanation?We(t.explanation):null}}function vg(e,t){return e?JSON.stringify(e)===JSON.stringify(t):!1}function gc(e,t){if(e===null)return null;if(e===void 0)return;if(!at(e)){t.push(oe("invalid-snapshot","override must be an object"));return}Je(e,lg,"override",t);let n={};if(e.reducedSensory!==void 0&&(typeof e.reducedSensory!="boolean"?t.push(oe("invalid-snapshot","reducedSensory must be a boolean","override.reducedSensory")):n.reducedSensory=e.reducedSensory),e.reducedMotion!==void 0&&(typeof e.reducedMotion!="boolean"?t.push(oe("invalid-snapshot","reducedMotion must be a boolean","override.reducedMotion")):n.reducedMotion=e.reducedMotion),e.labels!==void 0)if(!at(e.labels))t.push(oe("invalid-snapshot","labels must be an object","override.labels"));else{let r={};for(let[i,o]of Object.entries(e.labels)){if(typeof o=="string"){r[i]=o;continue}if(at(o)&&_e(o.name)&&_e(o.role)){r[i]={name:o.name,role:o.role};continue}t.push(oe("invalid-snapshot",`label "${i}" must be a string or { name, role }`,`override.labels.${i}`))}n.labels=r}return n}function rs(e){let t=yi(e.manifest);if(!t.ok)throw new Error(`createPresentationBindingRuntime: ${t.errors.map(M=>M.detail).join("; ")}`);let n=t.manifest,r=e.visual,i=e.semantic,o=e.sequences,s=e.selectors??{},a=!1,d=null,m=0,l=[],h=new Map,S=!1,C=null,T=null,v=null,P=!1,$=new Map,j=[],O=()=>{if(a)throw new Error(sg)};function F(M,u){j.push({type:M,atRevision:d,manifestId:n.id,selectedBindingIds:l.slice(),reason:typeof u.reason=="string"?u.reason:void 0});let b=M.includes(".diagnostic.")?"diagnostic":"state",x={type:M,kind:b,payload:We(u)};e.onEvent?.(x),e.router?.publish(x)}function w(){return bg([...h.values()],{revision:d,selectedBindingIds:l,override:v,usedFallback:S,fallbackReason:C,explanation:T,sequences:o})}function p(M){let u=[];for(let b of M)b.kind==="visual-layer"&&r&&(r.inspect().find(V=>V.id===b.layerId)||u.push(oe("unknown-resource",`unknown live layer "${b.layerId}"`,b.layerId))),b.kind==="semantic-region"&&i&&!i.get(b.regionId)&&u.push(oe("unknown-resource",`unknown live region "${b.regionId}"`,b.regionId)),b.kind==="hotspot"&&b.regionId&&i&&!i.get(b.regionId)&&u.push(oe("unknown-resource",`unknown live region "${b.regionId}"`,b.regionId)),b.kind==="presence"&&b.regionId&&i&&!i.get(b.regionId)&&u.push(oe("unknown-resource",`unknown live region "${b.regionId}"`,b.regionId)),b.kind==="sequence"&&o&&!o.get(b.sequenceId)&&u.push(oe("unknown-resource",`unknown live sequence "${b.sequenceId}"`,b.sequenceId));return u}function I(){if(!(!i||!v?.labels)){for(let[M,u]of Object.entries(v.labels))if(i.get(M))if(typeof u=="string"){let b=i.get(M)?.a11y;i.setRegionA11y(M,{name:u,role:b?.role??"region"})}else i.setRegionA11y(M,{name:u.name,role:u.role})}}function c(){return v?.reducedSensory===!0}function f(M){let u=o?.inspect().active;return!!(u&&u.sequenceId===M&&(u.phase==="playing"||u.phase==="paused"||u.phase==="requested"||u.phase==="preloading"||u.phase==="ready"))}function y(M,u){if(!o)return;let b=c(),x=M.play!==!1&&!b,V=f(M.sequenceId);if(x&&!V&&(!u||P!==b)){let W=o.playSequence(M.sequenceId,{invocationId:`presentation-binding:${M.sequenceId}`,idempotencyKey:`presentation-binding:${M.sequenceId}`});if(!W.ok&&W.reason!=="duplicate")return oe("unknown-resource",W.detail,M.sequenceId)}!x&&V&&o.skip()}function A(){for(let M of h.values())M.kind==="sequence"&&y(M,!0);P=c()}function D(M){if(!i)return[];let u=new Map;for(let U of M)U.kind==="hotspot"&&U.regionId&&u.set(U.regionId,U.enabled);for(let U of M)U.kind==="semantic-region"&&U.hitTestEnabled!==void 0&&u.set(U.regionId,U.hitTestEnabled);if(u.size===0)return[];let b=new Map,x=!1;for(let[U,B]of u){let g=i.get(U);if(!g)continue;g.hitTest!=="pass-through"&&$.set(U,g.hitTest);let k=$.get(U)??"absorb",E=B?k:"pass-through";b.set(U,E),g.hitTest!==E&&(x=!0)}if(!x)return[];let V=i.snapshot(),L={...V,regions:V.regions.map(U=>{let B=b.get(U.id);return B&&B!==U.hitTest?{...U,hitTest:B}:U})},W=i.restore(L);return W.ok?[]:W.errors.map(U=>oe("unknown-resource",U))}function R(M){let u=r?.snapshot(),b=i?.snapshot(),x=o?.snapshot(),V=new Map($),L=B=>{$.clear();for(let[g,k]of V)$.set(g,k);return o&&x&&o.restore(x),r&&u&&r.restore(u),i&&b&&i.restore(b),B},W=new Map;for(let B of M)W.set(Kt(B),We(B));let U=D(M);if(U.length>0)return L(U);for(let[B,g]of W){let k=h.get(B),E=vg(k,g);if(g.kind==="visual-layer"&&r&&!E){let _=g.transition??"replace",G=r.play({name:`presentation-binding:${g.layerId}:${_}`,idempotencyKey:`presentation-binding:${g.layerId}:${g.version}:${_}`,layerId:g.layerId,kind:_,..._==="hide"?{}:{toVersion:g.version},durationFrames:0,onDuplicate:"ignore"});if(!G.ok&&G.reason!=="duplicate")return L([oe("unknown-resource",G.detail,g.layerId)])}if(g.kind==="semantic-region"&&i){let _=g.state??{},G=i.get(g.regionId)?.state,Z={hover:_.hover??G?.hover??!1,focus:_.focus??G?.focus??!1,selected:_.selected??G?.selected??!1};(!G||G.hover!==Z.hover||G.focus!==Z.focus||G.selected!==Z.selected)&&i.setRegionState(g.regionId,Z)}if(g.kind==="hotspot"&&g.regionId&&i){let _=i.get(g.regionId)?.state;(!_||_.selected!==g.enabled)&&i.setRegionState(g.regionId,{selected:g.enabled})}if(g.kind==="presence"&&g.regionId&&i){let _=i.get(g.regionId)?.state;(!_||_.selected!==g.present)&&i.setRegionState(g.regionId,{selected:g.present})}if(g.kind==="sequence"){let _=y(g,E);if(_)return L([_])}}return h=W,P=c(),I(),[]}function N(M,u){let b=p(M.targets);if(b.length>0)return F(fi,{manifestId:n.id,revision:String(u),reason:b[0]?.code,selectedBindingIds:l}),F(mi,{manifestId:n.id,revision:String(u),reason:b[0]?.code}),{ok:!1,errors:b,inspect:w()};let x=R(M.targets);return x.length>0?(F(fi,{manifestId:n.id,revision:String(u),reason:x[0]?.code,selectedBindingIds:l}),F(mi,{manifestId:n.id,revision:String(u),reason:x[0]?.code}),{ok:!1,errors:x,inspect:w()}):(d=u,l=M.selectedBindingIds.slice(),S=M.usedFallback,C=M.fallbackReason,T=We(M.explanation),F(hi,{manifestId:n.id,revision:String(u),selectedBindingIds:l,usedFallback:S,reason:C??void 0}),{ok:!0,revision:u,selectedBindingIds:l.slice(),usedFallback:S,fallbackReason:C,explanation:We(M.explanation),inspect:w()})}function q(){return{schemaVersion:nr,manifestId:n.id,projectionRevision:d,selectedBindingIds:l.slice(),targets:[...h.values()].map(M=>We(M)),usedFallback:S,fallbackReason:C,override:v?We(v):null}}return{get manifest(){return We(n)},apply(M,u){O();let b=u?.revision??m+1;typeof b=="number"&&(m=Math.max(m,b));let x=ns(n,M,s);return N(x,b)},setOverride(M){O();let u=c();if(M===null)v=null;else{let b=[],x=gc(M,b);if(b.length>0||x===void 0)throw new Error(`createPresentationBindingRuntime: ${b.map(V=>V.detail).join("; ")||"invalid override"}`);v=x?We(x):null,I()}c()!==u&&A()},evaluate(M){return O(),ns(n,M,s)},inspect(){return O(),w()},snapshot(){return O(),q()},restore(M){O();let u=E=>({ok:!1,errors:E}),b=M;if(typeof M=="string")try{b=JSON.parse(M)}catch{return u([oe("invalid-snapshot","snapshot JSON is invalid")])}if(!at(b))return u([oe("invalid-snapshot","snapshot must be a JSON object")]);if(b.schemaVersion!==nr)return u([oe("invalid-schema",`unsupported snapshot schemaVersion ${String(b.schemaVersion)}`,"schemaVersion")]);if(b.manifestId!==n.id)return u([oe("invalid-snapshot",`snapshot manifestId "${String(b.manifestId)}" does not match "${n.id}"`,"manifestId")]);if(!Array.isArray(b.selectedBindingIds))return u([oe("invalid-snapshot","selectedBindingIds must be an array","selectedBindingIds")]);let x=new Set(n.bindings.map(E=>E.id));for(let E of b.selectedBindingIds)if(!_e(E)||!x.has(E))return u([oe("unknown-resource",`unknown selected binding "${String(E)}"`,"selectedBindingIds")]);if(!Array.isArray(b.targets))return u([oe("invalid-snapshot","targets must be an array","targets")]);let V=[],L=b.targets.map((E,_)=>ts(E,`targets[${_}]`,V,n.resources)).filter(E=>!!E);if(V.length>0)return u(V);let W=[],U=gc(b.override??null,W);if(W.length>0)return u(W);let B=p(L);if(B.length>0)return u(B);let g=typeof b.projectionRevision=="string"||typeof b.projectionRevision=="number"?b.projectionRevision:b.projectionRevision===null?null:void 0;if(g===void 0)return u([oe("invalid-snapshot","projectionRevision must be a string, number, or null","projectionRevision")]);let k=R(L);return k.length>0?u(k):(d=g,typeof g=="number"&&(m=Math.max(m,g)),l=b.selectedBindingIds.filter(E=>_e(E)),S=b.usedFallback===!0,C=b.fallbackReason==="missing-state"||b.fallbackReason==="invalid-projection"?b.fallbackReason:null,v=U??null,I(),A(),{ok:!0,snapshot:q()})},destroy(){a||(a=!0,h.clear(),j.length=0)}}}var yc="executable module host has been destroyed";var Sg=/^[a-z0-9][a-z0-9.-]*$/i,kg=/^[a-z0-9][a-z0-9-]*$/i;function tn(e){return{id:e.id,version:e.version}}function is(e){return`${e.id}@${e.version}`}function rr(e){return typeof e=="string"&&e.length>0&&Sg.test(e)}function Ig(e){if(typeof e!="string"||e.length===0)return!1;let t=e.split(".");return t.some(n=>n.length===0)?!1:t.every(n=>n==="*"||kg.test(n))}function Sc(e,t){if(e===t)return!0;if(!e.includes("*"))return!1;let n=e.split("."),r=t.split(".");if(n.length!==r.length)return!1;for(let i=0;i<n.length;i++)if(n[i]!=="*"&&n[i]!==r[i])return!1;return!0}function Eg(e,t){return t.some(n=>n.version===e.version&&Sc(n.id,e.id))}function ir(e){return e!==null&&typeof e=="object"&&!Array.isArray(e)}function Rg(e){return typeof e=="object"&&e!==null&&typeof e.then=="function"}function bc(e){return e instanceof Error&&e.message?e.message:String(e)}function or(e){if(e===null||typeof e!="object")return e;if(Array.isArray(e))return Object.freeze(e.map(n=>or(n)));if(Object.getPrototypeOf(e)!==Object.prototype)return e;let t={};for(let n of Object.keys(e))t[n]=or(e[n]);return Object.freeze(t)}function vc(e){if(!ir(e))return;let t=e.id,n=e.version;if(!(!rr(t)||!rr(n)))return{id:t,version:n}}function Cg(e){if(e===void 0)return{};if(!ir(e))throw new Error("createExecutableModuleHost: limits must be an object");let t={};if(e.maxInvokeMs!==void 0){if(typeof e.maxInvokeMs!="number"||!Number.isInteger(e.maxInvokeMs)||e.maxInvokeMs<1)throw new Error("createExecutableModuleHost: limits.maxInvokeMs must be an integer >= 1");t.maxInvokeMs=e.maxInvokeMs}if(e.maxInvokesPerTurn!==void 0){if(typeof e.maxInvokesPerTurn!="number"||!Number.isInteger(e.maxInvokesPerTurn)||e.maxInvokesPerTurn<1)throw new Error("createExecutableModuleHost: limits.maxInvokesPerTurn must be an integer >= 1");t.maxInvokesPerTurn=e.maxInvokesPerTurn}return t}function kc(e){if(!ir(e))throw new Error("createExecutableModuleHost: options are required");if(!Array.isArray(e.allowlist))throw new Error("createExecutableModuleHost: allowlist must be an array");if(!Array.isArray(e.modules))throw new Error("createExecutableModuleHost: modules must be an array");let t=e.allowlist.map((w,p)=>{if(!ir(w))throw new Error(`createExecutableModuleHost: allowlist[${p}] must be an object`);if(!Ig(w.id))throw new Error(`createExecutableModuleHost: allowlist[${p}].id is not a valid id or pattern`);if(!rr(w.version)||w.version.includes("*"))throw new Error(`createExecutableModuleHost: allowlist[${p}].version must be an exact version`);return{id:w.id,version:w.version}}),n=new Map,r=new Map;for(let[w,p]of e.modules.entries()){if(!ir(p))throw new Error(`createExecutableModuleHost: modules[${w}] must be an object`);if(!rr(p.id))throw new Error(`createExecutableModuleHost: modules[${w}].id is invalid`);if(!rr(p.version))throw new Error(`createExecutableModuleHost: modules[${w}].version is invalid`);if(typeof p.create!="function")throw new Error(`createExecutableModuleHost: modules[${w}].create must be a function`);let I=`${p.id}@${p.version}`;if(n.has(I))throw new Error(`createExecutableModuleHost: duplicate module ${I}`);n.set(I,{id:p.id,version:p.version,create:p.create,capabilities:p.capabilities});let c=r.get(p.id)??[];c.push(p.version),r.set(p.id,c)}let i=Cg(e.limits),o=e.capabilities,s=new Map,a=new Set,d=[],m=0,l=0,h=!1;function S(w,p,I){let c=I?{code:w,detail:p,ref:tn(I)}:{code:w,detail:p};return d.push(c),d.length>256&&d.shift(),c}function C(w,p,I){return{ok:!1,error:S(w,p,I)}}function T(w){if(h){let A=vc(w);return C("destroyed",yc,A)}let p=vc(w);if(!p)return C("invalid-ref","module ref requires exact id and version");let I=n.get(is(p)),c=r.has(p.id),f=Eg(p,t),y=t.some(A=>Sc(A.id,p.id)&&A.version!==p.version);return f?I?{ok:!0,ref:p,registration:I}:c?C("version-mismatch",`no factory for ${p.id}@${p.version}`,p):C("unknown-module",`unknown module "${p.id}"`,p):y||c&&!I?C("version-mismatch",`no allowlisted factory for ${p.id}@${p.version}`,p):!I&&!c?C("unknown-module",`unknown module "${p.id}"`,p):C("not-allowlisted",`${p.id}@${p.version} is not allowlisted`,p)}function v(w,p){let I=is(w);if(s.has(I))return{ok:!0,ref:tn(w)};let c=or({...o??{},...p.capabilities??{}});try{let f=p.create(c);return!f||typeof f.invoke!="function"?C("load-failed",`factory for ${w.id}@${w.version} did not return an invoke() module`,w):(s.set(I,{ref:tn(w),instance:f}),{ok:!0,ref:tn(w)})}catch(f){return C("load-failed",bc(f),w)}}function P(w){let p=T(w);return p.ok?v(p.ref,p.registration):p}function $(w,p){let I=T(w);if(!I.ok)return Promise.resolve(I);if(i.maxInvokesPerTurn!==void 0&&l>=i.maxInvokesPerTurn)return Promise.resolve(C("rate-limited",`maxInvokesPerTurn ${i.maxInvokesPerTurn} exceeded`,I.ref));l+=1;let c=v(I.ref,I.registration);if(!c.ok)return Promise.resolve(c);let f=s.get(is(I.ref));if(!f)return Promise.resolve(C("load-failed","module instance was not retained",I.ref));let y=new AbortController;a.add(y);let A=Date.now(),D=i.maxInvokeMs,R;D!==void 0&&(R=setTimeout(()=>y.abort(),D));let N=M=>(R!==void 0&&clearTimeout(R),a.delete(y),h?C("destroyed",yc,I.ref):M),q=M=>y.signal.aborted&&D!==void 0?C("timeout",`invoke exceeded ${D}ms`,I.ref):C("invoke-failed",bc(M),I.ref);try{let M=f.instance.invoke(p,{signal:y.signal,turn:m});return Rg(M)?new Promise(u=>{let b=!1,x=V=>{b||(b=!0,u(N(V)))};if(D!==void 0){let V=R;V!==void 0&&clearTimeout(V),R=setTimeout(()=>{y.abort(),x(C("timeout",`invoke exceeded ${D}ms`,I.ref))},Math.max(0,D-(Date.now()-A)))}Promise.resolve(M).then(V=>x({ok:!0,value:V}),V=>x(q(V)))}):D!==void 0&&Date.now()-A>=D?(y.abort(),Promise.resolve(N(C("timeout",`invoke exceeded ${D}ms`,I.ref)))):Promise.resolve(N({ok:!0,value:M}))}catch(M){return Promise.resolve(N(q(M)))}}function j(){h||(m+=1,l=0)}function O(){return{allowlist:t.map(tn),registered:[...n.values()].map(w=>({id:w.id,version:w.version})),loaded:[...s.values()].map(w=>tn(w.ref)),turn:m,invokesThisTurn:l,diagnostics:d.map(w=>w.ref?{...w,ref:tn(w.ref)}:{...w})}}function F(){if(!h){h=!0;for(let w of a)w.abort();a.clear();for(let w of s.values())try{w.instance.destroy?.()}catch{}s.clear(),n.clear(),r.clear(),t.length=0}}return{load:P,invoke:$,beginTurn:j,inspect:O,destroy:F}}var os=1,Ic="hmac-sha256",rn=1,Pc=Zn;var ss=class extends Error{constructor(n,r){super(`${r} requires grant "${n}"`);this.code="capability-denied";this.name="RemoteCartCapabilityError",this.grant=n}};function ve(e,t,n){return n?{code:e,detail:t,path:n}:{code:e,detail:t}}function on(e){return e!==null&&typeof e=="object"&&!Array.isArray(e)}function dt(e){return typeof e=="string"&&e.length>0}var as=new Set(Pc),Ec=new Set(["image","audio","font","spritesheet"]),Ag=new Set(["version","id","cartVersion","publisher","assets","requestedGrants","module","capabilities"]),wg=new Set(["id","kind","url","hash","alg"]),Pg=new Set(["alg","keyId","mac"]),Rc=/^[a-z0-9][a-z0-9.-]*$/i,xg=256;function xc(e){let t="";for(let n=0;n<e.length;n++)t+=e[n].toString(16).padStart(2,"0");return t}var Tg=/^[0-9a-f]+$/i;function Cc(e){if(e.length%2!==0||e.length===0||!Tg.test(e))return;let t=new Uint8Array(e.length/2);for(let n=0;n<t.length;n++)t[n]=Number.parseInt(e.slice(n*2,n*2+2),16);return t}function Dg(e,t){let n=Cc(e),r=Cc(t),i=n??new Uint8Array(32),o=r??new Uint8Array(32),s=Math.max(i.length,o.length),a=n&&r&&n.length===r.length?0:1;for(let d=0;d<s;d++)a|=(i[d]??0)^(o[d]??0);return a===0}async function bi(e){let t=typeof e=="string"?new TextEncoder().encode(e):e,n=await crypto.subtle.digest("SHA-256",t);return xc(new Uint8Array(n))}async function Og(e,t){let n=await crypto.subtle.importKey("raw",new TextEncoder().encode(e),{name:"HMAC",hash:"SHA-256"},!1,["sign"]),r=await crypto.subtle.sign("HMAC",n,new TextEncoder().encode(t));return xc(new Uint8Array(r))}function ds(e){if(Array.isArray(e))return e.map(ds);if(!on(e))return e;let t={};for(let n of Object.keys(e).sort())t[n]=ds(e[n]);return t}function Mg(e){return JSON.stringify(ds(e))}function vi(e,t,n){let r=[];for(let i of Object.keys(e))t.has(i)||r.push(ve("invalid-manifest",`unknown field "${i}"`,n?`${n}.${i}`:i));return r}function Ng(e){let t=new Set,n=[];for(let r of e)t.has(r)||(t.add(r),n.push(r));return n}function Tc(e,t){if(!Array.isArray(e))return{ok:!1,errors:[ve("invalid-manifest",`${t} must be an array`,t)]};let n=[],r=[];return e.forEach((i,o)=>{let s=`${t}[${o}]`;typeof i!="string"||!as.has(i)?n.push(ve("invalid-manifest",`invalid grant "${String(i)}"`,s)):r.push(i)}),n.length>0?{ok:!1,errors:n}:{ok:!0,values:Ng(r)}}function _g(e){if(!Array.isArray(e))return{ok:!1,errors:[ve("invalid-manifest","assets must be an array","assets")]};let t=[],n=[],r=new Set;return e.forEach((i,o)=>{let s=`assets[${o}]`;if(!on(i)){t.push(ve("invalid-manifest","asset must be an object",s));return}t.push(...vi(i,wg,s)),dt(i.id)?r.has(i.id)?t.push(ve("invalid-manifest",`duplicate asset id "${i.id}"`,`${s}.id`)):r.add(i.id):t.push(ve("invalid-manifest","asset id is required",`${s}.id`)),(typeof i.kind!="string"||!Ec.has(i.kind))&&t.push(ve("invalid-manifest",`invalid asset kind "${String(i.kind)}"`,`${s}.kind`)),dt(i.url)||t.push(ve("invalid-manifest","asset url is required",`${s}.url`)),dt(i.hash)||t.push(ve("unsigned-bytes","asset hash is required",`${s}.hash`)),i.alg!=="sha256"&&t.push(ve("invalid-manifest","asset alg must be sha256",`${s}.alg`)),dt(i.id)&&typeof i.kind=="string"&&Ec.has(i.kind)&&dt(i.url)&&dt(i.hash)&&i.alg==="sha256"&&n.push({id:i.id,kind:i.kind,url:i.url,hash:i.hash,alg:"sha256"})}),t.length>0?{ok:!1,errors:t}:{ok:!0,values:n}}function Lg(e){return e===void 0?{ok:!0}:on(e)?!dt(e.id)||!Rc.test(e.id)?{ok:!1,errors:[ve("invalid-manifest","module.id is invalid","module.id")]}:!dt(e.version)||!Rc.test(e.version)?{ok:!1,errors:[ve("invalid-manifest","module.version is invalid","module.version")]}:{ok:!0,value:{id:e.id,version:e.version}}:{ok:!1,errors:[ve("invalid-manifest","module must be an object","module")]}}function Vg(e){if(!on(e))return{ok:!1,errors:[ve("invalid-manifest","remote cart body must be a JSON object")]};let t=vi(e,Ag,"");e.version!==void 0&&e.version!==os&&t.push(ve("invalid-version",`remote cart manifest version must be ${os}`,"version")),dt(e.id)||t.push(ve("invalid-manifest","id is required","id")),dt(e.cartVersion)||t.push(ve("invalid-manifest","cartVersion is required","cartVersion")),dt(e.publisher)||t.push(ve("unknown-publisher","publisher is required","publisher"));let n=_g(e.assets);n.ok||t.push(...n.errors);let r=Tc(e.requestedGrants,"requestedGrants");r.ok||t.push(...r.errors);let i=Lg(e.module);i.ok||t.push(...i.errors);let o;if(e.capabilities!==void 0){let a=Oo(e.capabilities);if(a.ok)o=a.manifest;else for(let d of a.errors)t.push(ve(d.code,d.detail,d.path?`capabilities.${d.path}`:"capabilities"))}if(t.length>0)return{ok:!1,errors:t};let s={version:os,id:e.id,cartVersion:e.cartVersion,publisher:e.publisher,assets:n.ok?n.values:[],requestedGrants:r.ok?r.values:[]};return i.ok&&i.value&&(s.module=i.value),o&&(s.capabilities=o),{ok:!0,body:s}}function Fg(e){if(!on(e))return{ok:!1,errors:[ve("invalid-signature","signature must be an object","signature")]};let t=vi(e,Pg,"signature");return e.alg!==Ic&&t.push(ve("invalid-signature","signature.alg must be hmac-sha256","signature.alg")),dt(e.keyId)||t.push(ve("unknown-key","signature.keyId is required","signature.keyId")),(!dt(e.mac)||!/^[0-9a-f]+$/i.test(e.mac))&&t.push(ve("invalid-signature","signature.mac must be hex","signature.mac")),t.length>0?{ok:!1,errors:t}:{ok:!0,signature:{alg:Ic,keyId:e.keyId,mac:e.mac.toLowerCase()}}}function Dc(e){if(!on(e))return{ok:!1,errors:[ve("invalid-manifest","signed remote cart must be a JSON object")]};let t=Vg(e.body),n=Fg(e.signature),r=[];t.ok||r.push(...t.errors),n.ok||r.push(...n.errors);let i=vi(e,new Set(["body","signature"]),"");return r.push(...i),r.length>0?{ok:!1,errors:r}:{ok:!0,manifest:{body:t.ok?t.body:void 0,signature:n.ok?n.signature:void 0}}}async function cs(e,t,n){let r=Dc(e);if(!r.ok)return r;let i=t[r.manifest.signature.keyId];if(!dt(i))return{ok:!1,errors:[ve("unknown-key",`unknown signature key "${r.manifest.signature.keyId}"`,"signature.keyId")]};let o=await Og(i,Mg(r.manifest.body));return Dg(o,r.manifest.signature.mac)?n!==void 0&&r.manifest.body.cartVersion!==n?{ok:!1,errors:[ve("invalid-version",`cartVersion ${r.manifest.body.cartVersion} does not match ${n}`,"body.cartVersion")]}:{ok:!0,manifest:r.manifest}:{ok:!1,errors:[ve("invalid-signature","HMAC does not match canonical body","signature.mac")]}}function Oc(e){return[...e.body.requestedGrants]}function Dn(e){let t=new Set;if(e)for(let o of e)as.has(o)&&t.add(o);function n(){return{schemaVersion:rn,grants:Pc.filter(o=>t.has(o))}}function r(o){let s=o;if(typeof o=="string")try{s=JSON.parse(o)}catch{return{ok:!1,errors:[ve("invalid-json","grant snapshot JSON is not parseable")]}}if(!on(s))return{ok:!1,errors:[ve("invalid-manifest","grant snapshot must be an object")]};if(s.schemaVersion!==rn)return{ok:!1,errors:[ve("invalid-version",`grant snapshot schema must be ${rn}`,"schemaVersion")]};let a=Tc(s.grants,"grants");if(!a.ok)return a;t.clear();for(let d of a.values)t.add(d);return{ok:!0,grants:n().grants}}function i(o,s){return as.has(o)?(s?t.add(o):t.delete(o),{ok:!0,grants:n().grants}):{ok:!1,errors:[ve("invalid-manifest",`invalid grant "${String(o)}"`)]}}return{grant:o=>i(o,!0),revoke:o=>i(o,!1),has:o=>t.has(o),list:()=>n().grants,inspect:n,restore:r}}function nn(e,t){return e.push(t),e.length>xg&&e.shift(),t}function Ac(e){return e.code==="undeclared"?ve("undeclared-asset",e.message,e.ref):e.code==="hash-mismatch"?ve("hash-mismatch",e.message,e.ref):e.code==="unsigned"?ve("unsigned-bytes",e.message,e.ref):ve("load-failed",e.message,e.ref)}function wc(e,t,n,r){let i=(s,a)=>{if(!e.has(s))throw new ss(s,a)},o={grants:e.list(),network:{fetch(s){if(i("network","network.fetch"),!t.has(s))return Promise.reject(Object.assign(new Error(`undeclared network url "${s}"`),{code:"undeclared-asset"}));let a=n[s];return a?Promise.resolve(a.slice()):Promise.reject(Object.assign(new Error(`no signed bytes for "${s}"`),{code:"unsigned-bytes"}))}},storage:{getItem(s){return i("persistence","storage.getItem"),r.get(s)??null},setItem(s,a){i("persistence","storage.setItem"),r.set(s,a)},removeItem(s){i("persistence","storage.removeItem"),r.delete(s)},clear(){i("persistence","storage.clear"),r.clear()}},audio:{request(){return i("audio","audio.request"),{ok:!0}}},controller:{request(){return i("controller","controller.request"),{ok:!0}}},fullscreen:{request(){return i("fullscreen","fullscreen.request"),{ok:!0}}}};return or(o)}function $g(e,t){return{source:`remote-cart:${e.body.id}`,publisher:e.body.publisher,version:e.body.cartVersion,signature:{id:e.signature.keyId,alg:e.signature.alg},grants:[...t]}}function Hg(e){let t=Dc(e.manifest);if(!t.ok)throw new Error(t.errors.map($=>$.detail).join("; "));let n=t.manifest,r=Dn(e.grants),i=[],o=new Map,s=new Set(n.body.assets.map($=>$.url)),a={};for(let $ of n.body.assets)a[$.id]={url:$.url,hash:$.hash,alg:$.alg};let d=!1,m=!1,l=!1,h;function S(){return nn(i,ve("destroyed","remote cart sandbox has been destroyed"))}async function C(){if(l)return{ok:!0};let $=await cs(n,e.keys);if(!$.ok){for(let j of $.errors)nn(i,j);return{ok:!1,errors:$.errors}}return l=!0,{ok:!0}}async function T(){if(m)return{ok:!1,errors:[S()]};let $=await C();if(!$.ok)return $;if(n.body.capabilities){let w=n.body.capabilities,p=ii(w,{contractVersion:Math.max(1,w.runtime.minContractVersion),features:[...w.runtime.features],integrations:[...w.integrations],grants:r.list()});if(!p.ok){let I=p.errors.map(c=>ve(c.code,c.detail,c.path));for(let c of I)nn(i,c);return{ok:!1,errors:I}}}let j=Br({declared:a,fetchBytes:async w=>e.bytesByUrl[w],hashBytes:bi}),O=vn({resolver:j,emitEvents:!1,wallClockTimeout:!1}),F=n.body.assets.map(w=>({id:w.id,ref:w.id,type:w.kind,integrity:`sha256-${w.hash}`,provenance:{publisher:n.body.publisher,version:n.body.cartVersion}}));try{let w=await O.preload(F);if(w.failed>0)return{ok:!1,errors:w.failures.map(I=>nn(i,Ac(I)))};if(d=!0,n.body.module&&e.modules){h=kc({allowlist:[n.body.module],modules:e.modules,capabilities:wc(r,s,e.bytesByUrl,o)});let p=h.load(n.body.module);if(!p.ok){let I=ve("load-failed",p.error.detail,`${p.error.ref?.id}@${p.error.ref?.version}`);return nn(i,I),{ok:!1,errors:[I]}}}return{ok:!0,snapshot:w}}catch(w){return Jn(w)?{ok:!1,errors:[nn(i,Ac(w))]}:{ok:!1,errors:[nn(i,ve("load-failed",w instanceof Error?w.message:String(w)))]}}finally{O.dispose()}}function v(){return m?{ok:!1,errors:[S()]}:l?wc(r,s,e.bytesByUrl,o):{ok:!1,errors:[ve("invalid-signature","verify the manifest HMAC via loadAssets before using capabilities")]}}function P(){return{id:n.body.id,cartVersion:n.body.cartVersion,publisher:n.body.publisher,signature:{id:n.signature.keyId,alg:n.signature.alg},requestedGrants:[...n.body.requestedGrants],grants:r.list(),assets:n.body.assets.map($=>({id:$.id,url:$.url,hash:$.hash})),loaded:d,destroyed:m,diagnostics:i.map($=>({...$}))}}return{listRequestedGrants:()=>[...n.body.requestedGrants],grants:r,loadAssets:T,capabilities:v,inspect:P,snapshotProvenance:()=>$g(n,r.list()),destroy(){m||(m=!0,h?.destroy(),o.clear())}}}var Si=1,ki=1,Bg=8,qg=["cabinet","painting","dream","wormhole","book","nested-world"],Gg=["completed","aborted"],Nc=["audio","controller","fullscreen"],On="portal.lifecycle.entered",us="portal.lifecycle.exited",ls="portal.lifecycle.aborted";var Kg=new Set(qg),Wg=new Set(Gg),jg=new Set(Nc),Ug=new Set(Zn),Jg="Portal lifecycle has been destroyed";function Ie(e,t,n){return n?{code:e,detail:t,path:n}:{code:e,detail:t}}function ps(e){return e!==null&&typeof e=="object"&&!Array.isArray(e)}function sn(e){try{return JSON.parse(JSON.stringify(e))}catch{return e}}function Mc(e){return typeof e=="string"&&Kg.has(e)}function zg(e){return jg.has(e)}function ms(e){return[...e].sort()}function _c(e){return ms([...e.childGrantsBefore,...e.transferred,...e.extraChildGrants])}function fs(e){return{id:e.id,parentId:e.parentId,childId:e.childId,metaphor:e.metaphor,seed:e.seed,clock:e.clock,parentState:sn(e.parentState),parentGrants:[...e.parentGrants],childGrants:_c(e),childGrantsBefore:[...e.childGrantsBefore],extraChildGrants:[...e.extraChildGrants],persistence:sn(e.persistence),transferred:[...e.transferred],enterCue:e.enterCue,exitCue:e.exitCue}}function Yg(e){return{enter:t=>e.enter({...t,metaphor:"cabinet"}),exit:e.exit,abort:e.abort}}function Xg(e){return{enter:t=>e.enter({...t,metaphor:"painting"}),exit:e.exit,abort:e.abort}}function Qg(e={}){let t=e.group,n=e.audioBroker??t?.audioBroker,r=e.maxDepth??Bg,i=new Map((e.declarations??[]).map(u=>[u.id,u])),o=new Map;if(e.grants)for(let[u,b]of Object.entries(e.grants))o.set(u,b);let s=0,a=e.createId??(()=>`portal-${++s}`),d=[],m=[],l=null,h=!1,S=e.rootId??null,C=()=>{if(h)throw new Error(Jg)},T=u=>{let b=o.get(u);return b||(b=Dn(),o.set(u,b)),b},v=()=>d.length===0?S:d[d.length-1].childId,P=(u,b)=>{if(m.push(u),!t)return;let x={type:u,kind:"state",payload:b};try{t.publish(x)}catch{}},$=u=>{if(!t)return null;try{return sn(t.participant(u).cart.getCartState())}catch{return null}},j=()=>{if(!t)return;let u=new Set;for(let x of d)u.add(x.parentId);let b=new Set(t.inspectParticipants().map(x=>x.id));for(let x of b)u.has(x)?t.isParticipantSuspended(x)||t.suspendParticipant(x):t.isParticipantSuspended(x)&&t.resumeParticipant(x)},O=(u,b,x)=>{let V=T(u),L=T(b),W=V.list(),U=L.list(),B=[];for(let g of Nc)V.has(g)&&(V.revoke(g),L.grant(g),B.push(g));if(x)for(let g of x)L.grant(g);return F(u,b,B,x??[]),{transferred:B,parentBefore:W,childBefore:U}},F=(u,b,x,V)=>{n&&(x.includes("audio")||V.includes("audio"))&&(n.revoke(u),n.authorize(b))},w=u=>{for(let b of u)F(b.parentId,b.childId,b.transferred,b.extraChildGrants)},p=()=>n?n.inspect().authorized.slice():[],I=u=>{if(!n)return;let b=new Set(u);for(let x of n.inspect().authorized)b.has(x)||n.revoke(x);for(let x of u)n.authorize(x)},c=()=>t?t.inspectParticipants().map(u=>u.id).filter(u=>t.isParticipantSuspended(u)).sort():[],f=u=>{if(!t)return;let b=new Set(u);for(let x of t.inspectParticipants()){let V=t.isParticipantSuspended(x.id);b.has(x.id)&&!V&&t.suspendParticipant(x.id),!b.has(x.id)&&V&&t.resumeParticipant(x.id)}},y=u=>{let b=T(u.parentId),x=T(u.childId);for(let V of u.transferred)x.revoke(V),b.grant(V);for(let V of u.extraChildGrants)u.childGrantsBefore.includes(V)||x.revoke(V);n&&(u.transferred.includes("audio")||u.extraChildGrants.includes("audio"))&&(n.revoke(u.childId),n.authorize(u.parentId))},A=()=>{let u={};for(let[b,x]of o)u[b]=x.list();return{destroyed:h,activeId:h?null:v(),stack:d.map(fs),lastOutcome:l,cues:[...m],grants:u}},D=(u,b)=>{if(C(),d.length===0)return{ok:!1,errors:[Ie("empty-stack","no portal is open")]};let x=d[d.length-1],V={schemaVersion:ki,kind:u,payload:b},L=u==="aborted"?ls:us;return x.exitCue=L,y(x),d.pop(),l=V,j(),P(L,{parentId:x.parentId,childId:x.childId,metaphor:x.metaphor,kind:u}),{ok:!0,inspect:A(),outcome:V}},R=(u,b)=>u===null?{ok:!0,outcome:null}:ps(u)?u.schemaVersion!==ki?{ok:!1,errors:[Ie("invalid-version",`outcome schema must be ${ki}`,`${b}.schemaVersion`)]}:typeof u.kind!="string"||!Wg.has(u.kind)?{ok:!1,errors:[Ie("invalid-snapshot","outcome.kind is required",`${b}.kind`)]}:{ok:!0,outcome:{schemaVersion:ki,kind:u.kind,payload:u.payload}}:{ok:!1,errors:[Ie("invalid-snapshot","outcome must be an object or null",b)]},N=(u,b)=>{if(!Array.isArray(u))return{ok:!1,errors:[Ie("invalid-snapshot","grants must be an array",b)]};let x=[];for(let V=0;V<u.length;V++){let L=u[V];if(typeof L!="string"||!Ug.has(L))return{ok:!1,errors:[Ie("invalid-snapshot",typeof L=="string"?`unknown grant "${L}"`:"grant must be a string",`${b}[${V}]`)]};x.push(L)}return{ok:!0,grants:x}},q=(u,b)=>{if(!ps(u))return{ok:!1,errors:[Ie("invalid-snapshot","frame must be an object",b)]};if(typeof u.id!="string"||u.id.length===0)return{ok:!1,errors:[Ie("invalid-snapshot","frame.id is required",`${b}.id`)]};if(typeof u.parentId!="string"||typeof u.childId!="string")return{ok:!1,errors:[Ie("invalid-snapshot","parentId and childId are required",b)]};if(!Mc(u.metaphor))return{ok:!1,errors:[Ie("invalid-snapshot","unknown metaphor",`${b}.metaphor`)]};let x=N(u.parentGrants,`${b}.parentGrants`);if(!x.ok)return x;let V=N(u.childGrants,`${b}.childGrants`);if(!V.ok)return V;if(!Array.isArray(u.transferred))return{ok:!1,errors:[Ie("invalid-snapshot","transferred must be an array",`${b}.transferred`)]};let L=[];for(let k=0;k<u.transferred.length;k++){let E=u.transferred[k];if(typeof E!="string"||!zg(E))return{ok:!1,errors:[Ie("invalid-snapshot","invalid exclusive grant",`${b}.transferred[${k}]`)]};L.push(E)}if(u.enterCue!==On)return{ok:!1,errors:[Ie("invalid-snapshot","enterCue mismatch",`${b}.enterCue`)]};let W=u.exitCue;if(W!==null&&W!==us&&W!==ls)return{ok:!1,errors:[Ie("invalid-snapshot","invalid exitCue",`${b}.exitCue`)]};if(u.seed!==null&&typeof u.seed!="string")return{ok:!1,errors:[Ie("invalid-snapshot","seed must be string or null",`${b}.seed`)]};if(u.clock!==null&&typeof u.clock!="number")return{ok:!1,errors:[Ie("invalid-snapshot","clock must be number or null",`${b}.clock`)]};let U=u.extraChildGrants===void 0?{ok:!0,grants:[]}:N(u.extraChildGrants,`${b}.extraChildGrants`);if(!U.ok)return U;let B=u.childGrantsBefore===void 0?{ok:!0,grants:V.grants}:N(u.childGrantsBefore,`${b}.childGrantsBefore`);if(!B.ok)return B;let g=u.childGrantsBefore===void 0?_c({childGrantsBefore:B.grants,transferred:L,extraChildGrants:U.grants}):V.grants;return{ok:!0,frame:{id:u.id,parentId:u.parentId,childId:u.childId,metaphor:u.metaphor,seed:u.seed,clock:u.clock,parentState:u.parentState,parentGrants:x.grants,childGrants:g,childGrantsBefore:B.grants,extraChildGrants:U.grants,persistence:u.persistence??null,transferred:L,enterCue:On,exitCue:W}}},M=u=>{let b=u;if(typeof u=="string")try{b=JSON.parse(u)}catch{return{ok:!1,errors:[Ie("invalid-json","portal snapshot JSON is not parseable")]}}if(!ps(b))return{ok:!1,errors:[Ie("invalid-snapshot","snapshot must be an object")]};if(b.schemaVersion!==Si)return{ok:!1,errors:[Ie("invalid-version",`portal snapshot schema must be ${Si}`,"schemaVersion")]};if(!Array.isArray(b.stack))return{ok:!1,errors:[Ie("invalid-snapshot","stack must be an array","stack")]};let x=[];for(let U=0;U<b.stack.length;U++){let B=q(b.stack[U],`stack[${U}]`);if(!B.ok)return B;x.push(B.frame)}if(x.length>r)return{ok:!1,errors:[Ie("max-depth",`stack exceeds maxDepth ${r}`,"stack")]};let V=R(b.lastOutcome,"lastOutcome");if(!V.ok)return V;if(b.activeId!==null&&typeof b.activeId!="string")return{ok:!1,errors:[Ie("invalid-snapshot","activeId must be string or null","activeId")]};if(!Array.isArray(b.cues))return{ok:!1,errors:[Ie("invalid-snapshot","cues must be an array","cues")]};let L=[];for(let U=0;U<b.cues.length;U++){let B=b.cues[U];if(B!==On&&B!==us&&B!==ls)return{ok:!1,errors:[Ie("invalid-snapshot","unknown cue",`cues[${U}]`)]};L.push(B)}let W=x.length===0?S:x[x.length-1].childId;return b.activeId!==W&&b.activeId!==null&&x.length>0&&b.activeId!==x[x.length-1].childId?{ok:!1,errors:[Ie("invalid-snapshot","activeId must be the top child when the stack is non-empty","activeId")]}:{ok:!0,snapshot:{schemaVersion:Si,activeId:b.activeId??W,stack:x,lastOutcome:V.outcome,cues:L}}};return{enter(u){C();let b=[];(!u.from||!u.to)&&b.push(Ie("invalid-enter","from and to are required")),u.from===u.to&&b.push(Ie("invalid-enter","cannot enter the same cart")),u.metaphor!==void 0&&!Mc(u.metaphor)&&b.push(Ie("invalid-enter","unknown metaphor","metaphor")),d.length>=r&&b.push(Ie("max-depth",`portal stack is at maxDepth ${r}`));let x=v();x&&u.from!==x&&b.push(Ie("stack-order",`enter must start from the active cart "${x}"`,"from"));let V=i.get(u.from);if(V&&!V.targets.includes(u.to)&&b.push(Ie("undeclared-target",`"${u.from}" does not declare target "${u.to}"`,"to")),t){try{t.participant(u.from)}catch{b.push(Ie("unknown-parent",`unknown parent "${u.from}"`,"from"))}try{t.participant(u.to)}catch{b.push(Ie("unknown-child",`unknown child "${u.to}"`,"to"))}}if(b.length)return{ok:!1,errors:b};let L=u.state!==void 0?sn(u.state):$(u.from),W=u.grants??[],{transferred:U,parentBefore:B,childBefore:g}=O(u.from,u.to,W),k={id:a(),parentId:u.from,childId:u.to,metaphor:u.metaphor??"nested-world",seed:u.seed??null,clock:u.clock??null,parentState:L,parentGrants:ms(B),childGrantsBefore:ms(g),transferred:U,extraChildGrants:[...W],persistence:u.persistence??null,enterCue:On,exitCue:null};return d.push(k),j(),P(On,{parentId:k.parentId,childId:k.childId,metaphor:k.metaphor,seed:k.seed}),{ok:!0,inspect:A()}},exit(u){return D("completed",u)},abort(u){return D("aborted",u)},stack(){return C(),d.map(fs)},activeId(){return C(),v()},inspect(){return A()},snapshot(){return C(),{schemaVersion:Si,activeId:v(),stack:d.map(fs),lastOutcome:l,cues:[...m]}},restore(u){C();let b=M(u);if(!b.ok)return b;let x=b.snapshot;if(t){let L=[];for(let W=0;W<x.stack.length;W++){let U=x.stack[W];try{t.participant(U.parentId)}catch{L.push(Ie("unknown-parent",`unknown parent "${U.parentId}"`,`stack[${W}].parentId`))}try{t.participant(U.childId)}catch{L.push(Ie("unknown-child",`unknown child "${U.childId}"`,`stack[${W}].childId`))}}if(L.length)return{ok:!1,errors:L}}let V={stack:d.map(L=>({...L})),lastOutcome:l,cues:[...m],grants:new Map([...o].map(([L,W])=>[L,W.list()])),authorized:p(),suspended:c()};try{d.length=0;for(let L of x.stack)d.push({id:L.id,parentId:L.parentId,childId:L.childId,metaphor:L.metaphor,seed:L.seed,clock:L.clock,parentState:sn(L.parentState),parentGrants:[...L.parentGrants],childGrantsBefore:[...L.childGrantsBefore],transferred:[...L.transferred],extraChildGrants:[...L.extraChildGrants],persistence:sn(L.persistence),enterCue:On,exitCue:L.exitCue});l=x.lastOutcome,m.length=0,m.push(...x.cues);for(let L of d)T(L.parentId).restore({schemaVersion:rn,grants:L.parentGrants}),T(L.childId).restore({schemaVersion:rn,grants:L.childGrantsBefore});for(let L of d){let W=T(L.parentId),U=T(L.childId);for(let B of L.transferred)W.revoke(B),U.grant(B);for(let B of L.extraChildGrants)U.grant(B)}return w(d),j(),{ok:!0,snapshot:sn(x)}}catch(L){d.length=0,d.push(...V.stack),l=V.lastOutcome,m.length=0,m.push(...V.cues);for(let[W,U]of V.grants)T(W).restore({schemaVersion:rn,grants:U});try{I(V.authorized),f(V.suspended)}catch{}return{ok:!1,errors:[Ie("restore-failed",L instanceof Error?L.message:String(L))]}}},grantsOf:T,destroy(){if(!h){for(h=!0;d.length>0;){let u=d.pop();y(u)}if(t)try{j()}catch{}m.length=0,l=null}}}}var _n=1,Ii=1,Vc=["indeterminate","determinate"],Fc=["travel","worldgen","content","audio"],Ei=["pulse","orbit","bars","ripple","static"],$c=["idle","active","completed","failed","canceled"],cr="loading.indicator.started",ur="loading.indicator.updated",lr="loading.indicator.completed",Ln="loading.indicator.failed",pr="loading.indicator.canceled",Wt="loading.indicator.diagnostic",Hc=[cr,ur,lr,Ln,pr,Wt],Zg=["invalid-params","invalid-snapshot","schema-mismatch","unknown-field","cart-init-failed","budget-exceeded","invalid-state","restore-failed"],Bc=new Set(Vc),eh=new Set($c),tk=new Set(Fc),hs=new Set(Ei),ys=/^#[0-9a-fA-F]{6}$/,th=1,dr=7,nh=240,sr="builtin",rh="Loading indicator controller has been destroyed",ih=new Set(["schemaVersion","seed","mode","progress","stage","context","statusText","presentation","cartId"]),oh=new Set(["palette","intensity","motif","variant"]),sh=new Set(["hue","motif","variant","intensity","palette"]),ah=new Set(Hc);function Te(e,t,n,r){let i={code:e,detail:t};return n&&(i.path=n),r!==void 0&&(i.atFrame=r),i}function Vn(e){return e!==null&&typeof e=="object"&&!Array.isArray(e)}function mt(e){try{return JSON.parse(JSON.stringify(e))}catch{return e}}function qc(e){let t=new TextEncoder().encode(e),n=2166136261;for(let r=0;r<t.length;r++)n^=t[r],n=Math.imul(n,16777619);return(n>>>0).toString(16).padStart(8,"0")}function ar(e,t){return(parseInt(qc(`${e}:${t}`).slice(0,8),16)>>>0)/4294967296}function gs(e,t,n,r,i="unknown-field"){for(let o of Object.keys(e))t.has(o)||r.push(Te(i,`unknown field "${o}"`,n?`${n}.${o}`:o))}function dh(e){let t={schemaVersion:_n,seed:e.seed,mode:e.mode,statusText:e.statusText};if(e.progress!==void 0&&(t.progress=e.progress),e.stage!==void 0&&(t.stage=e.stage),e.context!==void 0&&(t.context=e.context),e.cartId!==void 0&&(t.cartId=e.cartId),e.presentation!==void 0){let n=e.presentation;t.presentation={},n.palette!==void 0&&(t.presentation.palette=n.palette),n.intensity!==void 0&&(t.presentation.intensity=n.intensity),n.motif!==void 0&&(t.presentation.motif=n.motif),n.variant!==void 0&&(t.presentation.variant=n.variant)}return t}function Lc(e,t,n){let r=t?.intensity??ar(e,"intensity"),i=Math.min(n.maxIntensity,Math.max(0,t?.intensity??r)),o=t?.variant??Math.floor(ar(e,"variant")*(n.maxVariant+1)),s=Math.min(n.maxVariant,Math.max(0,Math.floor(o))),a=Math.floor(ar(e,"motif")*Ei.length),d=t?.motif&&hs.has(t.motif)?t.motif:Ei[a]??"pulse",m=Math.floor(ar(e,"hue")*360)%360,l=t?.palette&&ys.test(t.palette)?t.palette:`#${qc(`${e}:palette`).slice(0,6)}`;return{hue:m,motif:d,variant:s,intensity:i,palette:l}}function Mn(){return{version:1,fields:{seed:{type:"string"},mode:{type:"string"},phase:{type:"string"},statusText:{type:"string"},progress:{type:"number",optional:!0},usingFallback:{type:"boolean",optional:!0},reasonCode:{type:"string",optional:!0}}}}function Nn(e){if(!e.ok)throw new Error(e.errors.map(t=>t.detail).join("; "));return e.contract}function ch(){return[Nn(ce(cr,Mn())),Nn(ce(ur,Mn())),Nn(ce(lr,Mn())),Nn(ce(Ln,Mn())),Nn(ce(pr,Mn())),Nn(tt(Wt,Mn()))]}function uh(e){return e===cr||e===ur||e===lr||e===Ln||e===pr||e===Wt}function lh(e){return typeof e=="string"&&Bc.has(e)}function Ri(e,t="params"){if(!Vn(e))return{ok:!1,errors:[Te("invalid-params","params must be a JSON object",t)]};let n=[],r=(o,s,a)=>{s||n.push(Te("invalid-params",a,`${t}.${o}`))};if(r("schemaVersion",e.schemaVersion===_n,`expected schemaVersion ${_n}`),r("seed",typeof e.seed=="string"&&e.seed.length>0,"seed is required"),r("mode",typeof e.mode=="string"&&Bc.has(e.mode),"mode must be indeterminate or determinate"),r("statusText",typeof e.statusText=="string"&&e.statusText.length>0,"statusText is required"),e.stage!==void 0&&r("stage",typeof e.stage=="string"&&e.stage.length>0,"stage must be a non-empty string"),e.context!==void 0&&r("context",typeof e.context=="string"&&e.context.length>0,"context must be a non-empty string"),e.cartId!==void 0&&r("cartId",typeof e.cartId=="string"&&e.cartId.length>0,"cartId must be a non-empty string"),e.mode==="determinate"?r("progress",typeof e.progress=="number"&&Number.isFinite(e.progress)&&e.progress>=0&&e.progress<=1,"determinate mode requires progress in 0..1"):e.progress!==void 0&&r("progress",!1,"indeterminate mode must not include progress"),e.presentation!==void 0)if(!Vn(e.presentation))n.push(Te("invalid-params","presentation must be an object",`${t}.presentation`));else{let o=e.presentation;o.palette!==void 0&&r("presentation.palette",typeof o.palette=="string"&&ys.test(o.palette),"palette must be #RRGGBB"),o.intensity!==void 0&&r("presentation.intensity",typeof o.intensity=="number"&&Number.isFinite(o.intensity)&&o.intensity>=0&&o.intensity<=1,"intensity must be 0..1"),o.motif!==void 0&&r("presentation.motif",typeof o.motif=="string"&&hs.has(o.motif),"unknown motif"),o.variant!==void 0&&r("presentation.variant",typeof o.variant=="number"&&Number.isInteger(o.variant)&&o.variant>=0&&o.variant<=dr,`variant must be 0..${dr}`),gs(o,oh,`${t}.presentation`,n)}return gs(e,ih,t,n),n.length?{ok:!1,errors:n}:{ok:!0,params:dh(e)}}function ph(e,t="variant"){if(!Vn(e))return{ok:!1,errors:[Te("invalid-snapshot","variant must be a JSON object",t)]};let n=[],r=(i,o,s)=>{o||n.push(Te("invalid-snapshot",s,`${t}.${i}`))};return r("hue",typeof e.hue=="number"&&Number.isFinite(e.hue)&&e.hue>=0&&e.hue<360,"hue must be 0..359"),r("motif",typeof e.motif=="string"&&hs.has(e.motif),"unknown motif"),r("variant",typeof e.variant=="number"&&Number.isInteger(e.variant)&&e.variant>=0&&e.variant<=dr,`variant must be 0..${dr}`),r("intensity",typeof e.intensity=="number"&&Number.isFinite(e.intensity)&&e.intensity>=0&&e.intensity<=1,"intensity must be 0..1"),r("palette",typeof e.palette=="string"&&ys.test(e.palette),"palette must be #RRGGBB"),gs(e,sh,t,n),n.length?{ok:!1,errors:n}:{ok:!0,variant:{hue:e.hue,motif:e.motif,variant:e.variant,intensity:e.intensity,palette:e.palette}}}function Gc(e){let t=e;if(typeof e=="string")try{t=JSON.parse(e)}catch{return{ok:!1,errors:[Te("invalid-snapshot","snapshot JSON is invalid")]}}if(!Vn(t))return{ok:!1,errors:[Te("invalid-snapshot","snapshot must be a JSON object")]};if(t.schemaVersion!==Ii)return{ok:!1,errors:[Te("schema-mismatch",`expected schemaVersion ${Ii}`,"schemaVersion")]};let n=[];if((typeof t.frame!="number"||!Number.isFinite(t.frame))&&n.push(Te("invalid-snapshot","frame must be finite","frame")),typeof t.reducedMotion!="boolean"&&n.push(Te("invalid-snapshot","reducedMotion must be a boolean","reducedMotion")),(typeof t.phase!="string"||!eh.has(t.phase))&&n.push(Te("invalid-snapshot","unknown phase","phase")),t.params!=null){let i=Ri(t.params,"params");i.ok||n.push(...i.errors)}typeof t.usingFallback!="boolean"&&n.push(Te("invalid-snapshot","usingFallback must be a boolean","usingFallback")),t.fallbackReason!=null&&typeof t.fallbackReason!="string"&&n.push(Te("invalid-snapshot","fallbackReason must be a string or null","fallbackReason")),(typeof t.cartId!="string"||t.cartId.length===0)&&n.push(Te("invalid-snapshot","cartId is required","cartId"));let r=ph(t.variant,"variant");return r.ok||n.push(...r.errors),Array.isArray(t.events)||n.push(Te("invalid-snapshot","events must be an array","events")),Array.isArray(t.diagnostics)||n.push(Te("invalid-snapshot","diagnostics must be an array","diagnostics")),t.eventLog!==void 0&&(!Array.isArray(t.eventLog)||t.eventLog.some(i=>typeof i!="string"||!ah.has(i)))&&n.push(Te("invalid-snapshot","eventLog must be an array of event types","eventLog")),n.length?{ok:!1,errors:n}:{ok:!0,snapshot:mt(t)}}function fh(e){return Vn(e)&&Vn(e.metadata)&&typeof e.getDefaultState=="function"&&typeof e.update=="function"}function mh(e){return(t,n)=>{try{let r=new Bt({hash:t.padEnd(66,"0").slice(0,66),tokenId:"0"});return e.getDefaultState(r,{},[n.hue,n.variant,Math.floor(n.intensity*100)],{},{hue:n.hue,variant:n.variant,intensity:n.intensity,motif:n.motif,palette:n.palette}),{step(){}}}catch(r){return{ok:!1,reason:r instanceof Error?r.message:"cart init failed"}}}}function gh(e,t,n,r){if(n||r==="static")return 0;let i=r==="bars"?48:r==="orbit"?60:30,o=ar(t,"phase-offset");return(e+o*i)%i/i}function hh(e={}){let t={maxStepFrames:e.budgets?.maxStepFrames??nh,maxIntensity:e.budgets?.maxIntensity??th,maxVariant:e.budgets?.maxVariant??dr},n=new Map;for(let[D,R]of Object.entries(e.carts??{}))n.set(D,fh(R)?mh(R):R);let r=!!e.reducedMotion,i=!1,o="idle",s=null,a=Lc("0x0",void 0,t),d=!1,m=null,l=e.defaultCartId??sr,h=null,S=[],C=[],T=[],v=e.originFrame??0,P=wt({originFrame:v,reducedMotion:r}),$=()=>{if(i)throw new Error(rh)},j=()=>!s||s.mode==="indeterminate"?null:s.progress??null,O=()=>({phase:o,mode:s?.mode??"indeterminate",progress:j(),stage:s?.stage??null,context:s?.context??null,statusText:s?.statusText??"",seed:s?.seed??"",variant:mt(a),usingFallback:d,cartId:l,frame:P.frame,pulsePhase:gh(P.frame,s?.seed??"0x0",r,a.motif),reducedMotion:r}),F=D=>{C.push(D),T.push(Wt);let R={seed:s?.seed??"",mode:s?.mode??"indeterminate",phase:o,statusText:s?.statusText??"",reasonCode:D.code};e.router?.publish({type:Wt,kind:"diagnostic",payload:R,correlationId:s?.seed??"loading-indicator",idempotencyKey:`${Wt}:${P.frame}:${D.code}`})},w=(D,R)=>{T.push(D);let N={type:D,atFrame:P.frame,seed:s?.seed??"",mode:s?.mode??"indeterminate",phase:o,progress:j(),stage:s?.stage??null,context:s?.context??null,statusText:s?.statusText??"",usingFallback:d,reasonCode:R};S.push(N);let q={type:D,kind:D.includes(".diagnostic.")?"diagnostic":"state",payload:{seed:N.seed,mode:N.mode,phase:N.phase,statusText:N.statusText,progress:N.progress??void 0,usingFallback:N.usingFallback,reasonCode:R},correlationId:N.seed||"loading-indicator",idempotencyKey:`${D}:${N.seed}:${P.frame}`};return e.router?.publish(q),N},p=()=>{h?.destroy?.(),h=null},I=(D,R="cartId")=>{d=!0,m=D,l=sr,F(Te("cart-init-failed",D,R,P.frame))},c=(D,R)=>{p(),d=!1,m=null;let N=D.cartId??e.defaultCartId??sr;if(N===sr){l=sr,d=!1,m=null;return}if(!n.has(N)){I(`unknown cart "${N}"`);return}l=N;let M=n.get(N)(D.seed,R);if("ok"in M&&M.ok===!1){I(M.reason);return}h=M},f=(D,R)=>{let N=Lc(D.seed,D.presentation,t);D.presentation?.intensity!==void 0&&D.presentation.intensity>t.maxIntensity&&F(Te("budget-exceeded",`intensity exceeds budget ${t.maxIntensity}`,"presentation.intensity",P.frame)),D.presentation?.variant!==void 0&&D.presentation.variant>t.maxVariant&&F(Te("budget-exceeded",`variant exceeds budget ${t.maxVariant}`,"presentation.variant",P.frame));let q=s?.seed!==D.seed,M=s?.cartId!==D.cartId;return s=mt(D),a=N,(q||M||!h)&&c(s,a),w(R),{ok:!0,view:O()}},y=D=>(o=D,p(),w(D==="completed"?lr:D==="failed"?Ln:pr),{ok:!0,view:O()}),A={start(D){$();let R=Ri({...D,schemaVersion:_n});return R.ok?o==="active"?{ok:!1,errors:[Te("invalid-state","call complete, fail, or cancel before starting again")]}:(o="active",f(R.params,cr)):R},update(D){if($(),o!=="active"||!s)return{ok:!1,errors:[Te("invalid-state","update requires an active indicator")]};let R={...s,...D,schemaVersion:_n},N=Ri(R);return N.ok?f(N.params,ur):N},complete(){return $(),o!=="active"?{ok:!1,errors:[Te("invalid-state","complete requires an active indicator")]}:y("completed")},fail(D="failed"){return $(),o!=="active"?{ok:!1,errors:[Te("invalid-state","fail requires an active indicator")]}:(o="failed",p(),w(Ln,D),{ok:!0,view:O()})},cancel(){return $(),o!=="active"?{ok:!1,errors:[Te("invalid-state","cancel requires an active indicator")]}:y("canceled")},step(D=1){$();let R=Number.isFinite(D)?Math.max(0,Math.floor(D)):0;R>t.maxStepFrames&&F(Te("budget-exceeded",`step(${R}) exceeds maxStepFrames ${t.maxStepFrames}`,"step",P.frame));let N=S.length;return P.step(R),o==="active"&&h?.step&&h.step(R,O()),S.slice(N)},snapshot(){return $(),{schemaVersion:Ii,frame:P.frame,reducedMotion:r,phase:o,params:s?mt(s):null,variant:mt(a),usingFallback:d,fallbackReason:m,cartId:l,events:S.map(D=>mt(D)),diagnostics:C.map(D=>mt(D)),eventLog:[...T]}},restore(D){$();let R=Gc(D);if(!R.ok)return R;let N=A.snapshot();try{let q=R.snapshot;r=q.reducedMotion,P.reset(),P.setReducedMotion(r);let M=Math.max(0,q.frame-v);if(M>0&&P.step(M),o=q.phase,s=q.params?mt(q.params):null,a=mt(q.variant),d=q.usingFallback,m=q.fallbackReason,l=q.cartId,S.length=0,S.push(...q.events.map(u=>mt(u))),C.length=0,C.push(...q.diagnostics.map(u=>mt(u))),T.length=0,q.eventLog&&q.eventLog.length>0)T.push(...q.eventLog);else{for(let u of q.events)T.push(u.type);for(let u=0;u<q.diagnostics.length;u++)T.push(Wt)}return p(),o==="active"&&s&&c(s,a),{ok:!0,snapshot:mt(q)}}catch{return A.restore(N),{ok:!1,errors:[Te("restore-failed","restore rolled back")]}}},inspect(){return $(),{destroyed:!1,view:O(),events:[...T],diagnostics:C.map(D=>mt(D))}},setReducedMotion(D){$(),r=!!D,P.setReducedMotion(r)},destroy(){i=!0,p()},get reducedMotion(){return r},get frame(){return P.frame}};return A}var Ci=1,yh=1,bh=["queued","claimed","awaiting-evaluation","retry-scheduled","ready","applied","failed","canceled","superseded"],vh=["retryable","permanent","unknown"],Sh=["accept","reject","revise"],jc="job.intent.submitted",vs="job.state.queued",Uc="job.state.claimed",Jc="job.state.progress",zc="job.state.awaiting-evaluation",Yc="job.state.retry-scheduled",Xc="job.state.ready",Qc="job.state.applied",Zc="job.state.failed",eu="job.state.canceled",tu="job.state.superseded",kh="job.diagnostic.lifecycle";var Ih=Zt,Eh=new Set(bh),Rh=new Set(vh),Ch=new Set(Sh),Ah="Job coordinator has been destroyed",wh=512,Ph=8;function fe(e,t,n){return n?{code:e,detail:t,path:n}:{code:e,detail:t}}function an(e){return e!==null&&typeof e=="object"&&!Array.isArray(e)}function Le(e){try{return JSON.parse(JSON.stringify(e))}catch{return e}}function bs(e,t){if(e==null)return e;if(Array.isArray(e))return e.map(i=>bs(i,t));if(typeof e!="object")return e;let n=e,r={};for(let[i,o]of Object.entries(n))r[i]=t.has(i)?Ct:bs(o,t);return r}function bt(){return{version:1,fields:{jobId:{type:"string"},state:{type:"string"},definitionId:{type:"string"},correlationId:{type:"string",optional:!0},reasonCode:{type:"string",optional:!0}}}}function vt(e){if(!e.ok)throw new Error(e.errors.map(t=>t.detail).join("; "));return e.contract}function xh(){return[vt(dc(jc,bt())),vt(ce(vs,bt())),vt(ce(Uc,bt())),vt(ce(Jc,bt())),vt(ce(zc,bt())),vt(ce(Yc,bt())),vt(ce(Xc,bt())),vt(ce(Qc,bt())),vt(ce(Zc,bt())),vt(ce(eu,bt())),vt(ce(tu,bt())),vt(tt(kh,bt()))]}function nu(){let e=new Map,t=new Map;return{save(n){let r=Le(n);e.set(r.jobId,r),t.set(r.idempotencyKey,r.jobId)},get(n){let r=e.get(n);return r?Le(r):void 0},getByIdempotencyKey(n){let r=t.get(n);return r?this.get(r):void 0},list(){return[...e.values()].map(n=>Le(n))},replaceAll(n){e.clear(),t.clear();for(let r of n)this.save(r)}}}function Th(){let e,t=new Set;return{bind(n){e=n},start(n){t.add(n.jobId)},cancel(n){t.delete(n)},complete(n,r){return e?(t.delete(n),e.complete(n,r)):{ok:!1,errors:[fe("unbound-worker","worker is not bound")]}},fail(n,r){return e?(t.delete(n),e.fail(n,r)):{ok:!1,errors:[fe("unbound-worker","worker is not bound")]}},started(){return[...t]}}}function Ss(e){return an(e)?e.schemaVersion===yh&&typeof e.kind=="string"&&e.kind.length>0&&typeof e.uri=="string"&&e.uri.length>0&&(e.contentType===void 0||typeof e.contentType=="string")&&(e.bytes===void 0||typeof e.bytes=="number"&&Number.isFinite(e.bytes)):!1}function ru(e){return an(e)?typeof e.value=="number"&&Number.isFinite(e.value)&&typeof e.stage=="string"&&e.stage.length>0&&(e.message===void 0||typeof e.message=="string"):!1}function Kc(e){return e===null||typeof e=="string"}function Wc(e){return e===null||typeof e=="number"&&Number.isFinite(e)}function Dh(e){return an(e)?typeof e.attempt=="number"&&Number.isInteger(e.attempt)&&typeof e.code=="string"&&e.code.length>0&&typeof e.retryability=="string"&&Rh.has(e.retryability)&&typeof e.at=="number"&&Number.isFinite(e.at)&&(e.detail===void 0||typeof e.detail=="string"):!1}function Oh(e){return an(e)?typeof e.decision=="string"&&Ch.has(e.decision)&&typeof e.at=="number"&&Number.isFinite(e.at)&&(e.correction===void 0||typeof e.correction=="string"):!1}function Mh(e){return!an(e)||typeof e.reasonCode!="string"||e.reasonCode.length===0?!1:e.resultRef===void 0||Ss(e.resultRef)}function Nh(e,t){if(!an(e))return{ok:!1,errors:[fe("invalid-job","job must be an object",t)]};let n=[],r=(i,o,s)=>{o||n.push(fe("invalid-job-field",s,`${t}.${i}`))};return r("jobId",typeof e.jobId=="string"&&e.jobId.length>0,"jobId is required"),r("definitionId",typeof e.definitionId=="string"&&e.definitionId.length>0,"definitionId is required"),r("definitionVersion",typeof e.definitionVersion=="number"&&Number.isInteger(e.definitionVersion),"definitionVersion must be an integer"),r("idempotencyKey",typeof e.idempotencyKey=="string"&&e.idempotencyKey.length>0,"idempotencyKey is required"),r("state",typeof e.state=="string"&&Eh.has(e.state),"unknown job state"),r("attempt",typeof e.attempt=="number"&&Number.isInteger(e.attempt)&&e.attempt>=0,"attempt must be an integer >= 0"),r("correlationId",typeof e.correlationId=="string"&&e.correlationId.length>0,"correlationId is required"),r("createdAt",typeof e.createdAt=="number"&&Number.isFinite(e.createdAt),"createdAt must be a number"),r("updatedAt",typeof e.updatedAt=="number"&&Number.isFinite(e.updatedAt),"updatedAt must be a number"),r("timeoutAt",typeof e.timeoutAt=="number"&&Number.isFinite(e.timeoutAt),"timeoutAt must be a number"),r("workerId",Kc(e.workerId),"workerId must be a string or null"),r("leaseUntil",Wc(e.leaseUntil),"leaseUntil must be a number or null"),r("nextRetryAt",Wc(e.nextRetryAt),"nextRetryAt must be a number or null"),r("supersededBy",Kc(e.supersededBy),"supersededBy must be a string or null"),r("fallbackApplied",typeof e.fallbackApplied=="boolean","fallbackApplied must be a boolean"),r("causationId",e.causationId===void 0||typeof e.causationId=="string","causationId must be a string when present"),e.resultRef!=null&&!Ss(e.resultRef)&&n.push(fe("invalid-result-ref","resultRef is invalid",`${t}.resultRef`)),ru(e.progress)||n.push(fe("invalid-progress","progress is invalid",`${t}.progress`)),(!Array.isArray(e.failureHistory)||!e.failureHistory.every(Dh))&&n.push(fe("invalid-failure-history","failureHistory entries are invalid",`${t}.failureHistory`)),(!Array.isArray(e.evaluatorHistory)||!e.evaluatorHistory.every(Oh))&&n.push(fe("invalid-evaluator-history","evaluatorHistory entries are invalid",`${t}.evaluatorHistory`)),e.fallback!==void 0&&!Mh(e.fallback)&&n.push(fe("invalid-fallback","fallback is invalid",`${t}.fallback`)),n.length?{ok:!1,errors:n}:{ok:!0,job:Le(e)}}function _h(e){if(!an(e))return{ok:!1,errors:[fe("invalid-snapshot","snapshot must be a JSON object")]};if(e.schemaVersion!==Ci)return{ok:!1,errors:[fe("schema-mismatch",`expected schemaVersion ${Ci}`,"schemaVersion")]};if(!Array.isArray(e.jobs))return{ok:!1,errors:[fe("invalid-jobs","jobs must be an array","jobs")]};if(!Array.isArray(e.hostAcceptedJobIds)||e.hostAcceptedJobIds.some(r=>typeof r!="string"))return{ok:!1,errors:[fe("invalid-accepted","hostAcceptedJobIds must be string[]","hostAcceptedJobIds")]};let t=[],n=[];for(let r=0;r<e.jobs.length;r++){let i=Nh(e.jobs[r],`jobs[${r}]`);i.ok?t.push(i.job):n.push(...i.errors)}return n.length?{ok:!1,errors:n}:{ok:!0,snapshot:{schemaVersion:Ci,jobs:t,hostAcceptedJobIds:[...e.hostAcceptedJobIds]}}}function Lh(e){let t=[];return e.id||t.push(fe("invalid-definition","definition id is required")),(!Number.isInteger(e.version)||e.version<1)&&t.push(fe("invalid-definition","definition version must be an integer >= 1",e.id)),(!Number.isInteger(e.retry.maxAttempts)||e.retry.maxAttempts<1)&&t.push(fe("invalid-retry","maxAttempts must be >= 1",e.id)),(!Number.isFinite(e.timeoutMs)||e.timeoutMs<=0)&&t.push(fe("invalid-timeout","timeoutMs must be > 0",e.id)),(!Number.isFinite(e.leaseMs)||e.leaseMs<=0)&&t.push(fe("invalid-lease","leaseMs must be > 0",e.id)),e.fallback?.reasonCode||t.push(fe("invalid-fallback","fallback.reasonCode is required",e.id)),t}function Vh(e){switch(e){case"queued":return vs;case"claimed":return Uc;case"awaiting-evaluation":return zc;case"retry-scheduled":return Yc;case"ready":return Xc;case"applied":return Qc;case"failed":return Zc;case"canceled":return eu;case"superseded":return tu}}function Fh(e){let t=new Map;for(let c of e.definitions){let f=Lh(c);if(f.length)throw new Error(f.map(y=>y.detail).join("; "));t.set(c.id,Le(c))}let n=e.persistence??nu(),r=e.now??(()=>Date.now()),i=0,o=e.createId??(()=>`job-${++i}`),s=e.maxCorrectionChars??wh,a=e.maxFailureHistory??Ph,d=new Set(Ih),m=!1,l=[],h=new Set,S=e.worker,C=()=>{if(m)throw new Error(Ah)},T=c=>{n.save(c)},v=(c,f,y)=>{l.push(c);let A={jobId:f.jobId,state:f.state,definitionId:f.definitionId,correlationId:f.correlationId};y&&(A.reasonCode=y);let D={type:c,kind:c.includes(".intent.")?"intent":c.includes(".diagnostic.")?"diagnostic":"state",payload:A,correlationId:f.correlationId,causationId:f.causationId,idempotencyKey:`${c}:${f.jobId}:${f.updatedAt}`};e.router?.publish(D)},P=(c,f,y)=>(c.state=f,c.updatedAt=r(),T(c),v(Vh(f),c,y),c),$=c=>c==="applied"||c==="failed"||c==="canceled"||c==="superseded",j=(c,f)=>{let y=c.retry.backoffMs;return y.length?y[Math.min(f-1,y.length-1)]??0:0},O=(c,f)=>f.retryability==="permanent"?"permanent":c.retry.retryableCodes.includes(f.code)||f.retryability==="retryable"?"retryable":f.retryability,F=(c,f)=>(c.fallbackApplied=!0,c.fallback=Le(f.fallback),f.fallback.resultRef&&(c.resultRef=Le(f.fallback.resultRef)),P(c,"failed",f.fallback.reasonCode)),w=(c,f,y)=>(c.failureHistory=[...c.failureHistory,y].slice(-a),c.workerId=null,c.leaseUntil=null,c.attempt>=f.retry.maxAttempts||y.retryability==="permanent"?F(c,f):(c.nextRetryAt=r()+j(f,c.attempt),P(c,"retry-scheduled",y.code))),p=(c,f,y)=>{c.workerId=f,c.leaseUntil=r()+y.leaseMs,c.nextRetryAt=null,c.attempt+=1;let A=P(c,"claimed");return S?.start({jobId:A.jobId,workerId:f,definitionId:A.definitionId,request:Le(A.request),attempt:A.attempt}),A},I={submit(c){C();let f=[];c.idempotencyKey||f.push(fe("missing-idempotency","idempotencyKey is required")),c.correlationId||f.push(fe("missing-correlation","correlationId is required"));let y=t.get(c.definitionId);if(y||f.push(fe("unknown-definition",`unknown definition "${c.definitionId}"`)),f.length||!y)return{ok:!1,errors:f};let A=ac(y.requestSchema,c.request);if(!A.ok)return{ok:!1,errors:A.errors.map(q=>fe("invalid-request",q.detail,q.path?`request.${q.path}`:"request"))};let D=n.getByIdempotencyKey(c.idempotencyKey);if(D)return{ok:!0,job:D};let R=r(),N={jobId:o(),definitionId:y.id,definitionVersion:y.version,idempotencyKey:c.idempotencyKey,state:"queued",request:Le(c.request),resultRef:null,progress:{value:0,stage:"queued"},attempt:0,failureHistory:[],evaluatorHistory:[],correlationId:c.correlationId,causationId:c.causationId,workerId:null,leaseUntil:null,createdAt:R,updatedAt:R,timeoutAt:R+y.timeoutMs,nextRetryAt:null,supersededBy:null,fallbackApplied:!1};if(T(N),v(jc,N),v(vs,N),c.supersedeJobId){let q=n.get(c.supersedeJobId);q&&!$(q.state)&&(q.supersededBy=N.jobId,S?.cancel?.(q.jobId),P(q,"superseded","superseded"))}return{ok:!0,job:Le(N)}},claim(c){if(C(),!c)return{ok:!1,errors:[fe("missing-worker","workerId is required")]};I.tick();let y=n.list().filter(D=>D.state==="queued"||D.state==="retry-scheduled"&&(D.nextRetryAt??0)<=r()).sort((D,R)=>D.createdAt-R.createdAt)[0];if(!y)return{ok:!1,errors:[fe("empty-queue","no claimable jobs")]};let A=t.get(y.definitionId);return A?{ok:!0,job:Le(p(y,c,A))}:{ok:!1,errors:[fe("unknown-definition",y.definitionId)]}},reportProgress(c,f){C();let y=n.get(c);return y?y.state!=="claimed"?{ok:!1,errors:[fe("invalid-state",`cannot report progress in ${y.state}`)]}:ru(f)?f.value<y.progress.value?{ok:!1,errors:[fe("non-monotonic","progress.value must not decrease")]}:(y.progress=Le(f),y.updatedAt=r(),T(y),v(Jc,y),{ok:!0,job:Le(y)}):{ok:!1,errors:[fe("invalid-progress","progress value/stage required")]}:{ok:!1,errors:[fe("unknown-job",c)]}},heartbeat(c){C();let f=n.get(c);if(!f)return{ok:!1,errors:[fe("unknown-job",c)]};if(f.state!=="claimed"||!f.workerId)return{ok:!1,errors:[fe("invalid-state","heartbeat requires a claimed job")]};let y=t.get(f.definitionId);return y?(f.leaseUntil=r()+y.leaseMs,f.updatedAt=r(),T(f),{ok:!0,job:Le(f)}):{ok:!1,errors:[fe("unknown-definition",f.definitionId)]}},complete(c,f){C();let y=n.get(c);if(!y)return{ok:!1,errors:[fe("unknown-job",c)]};if(y.state!=="claimed")return{ok:!1,errors:[fe("invalid-state",`cannot complete in ${y.state}`)]};if(!Ss(f))return{ok:!1,errors:[fe("invalid-result-ref","result must be a reference")]};let A=t.get(y.definitionId);return A&&f.kind!==A.resultKind?{ok:!1,errors:[fe("result-kind",`expected result kind "${A.resultKind}"`)]}:(y.resultRef=Le(f),y.workerId=null,y.leaseUntil=null,y.progress={value:Math.max(y.progress.value,1),stage:"awaiting-evaluation"},{ok:!0,job:Le(P(y,"awaiting-evaluation"))})},fail(c,f){C();let y=n.get(c);if(!y)return{ok:!1,errors:[fe("unknown-job",c)]};if(y.state!=="claimed"&&y.state!=="queued")return{ok:!1,errors:[fe("invalid-state",`cannot fail in ${y.state}`)]};let A=t.get(y.definitionId);if(!A)return{ok:!1,errors:[fe("unknown-definition",y.definitionId)]};let D=O(A,f),R={attempt:y.attempt,code:f.code,retryability:D,at:r(),detail:f.detail};return S?.cancel?.(y.jobId),{ok:!0,job:Le(w(y,A,R))}},evaluate(c,f,y){C();let A=n.get(c);if(!A)return{ok:!1,errors:[fe("unknown-job",c)]};if(A.state!=="awaiting-evaluation")return{ok:!1,errors:[fe("invalid-state","evaluate requires awaiting-evaluation")]};let D=t.get(A.definitionId);if(!D)return{ok:!1,errors:[fe("unknown-definition",A.definitionId)]};if(y!==void 0&&y.length>s)return{ok:!1,errors:[fe("correction-bound",`correction exceeds ${s} chars`)]};if(A.evaluatorHistory=[...A.evaluatorHistory,{decision:f,at:r(),correction:y?.slice(0,s)}],f==="accept")return A.progress={value:1,stage:"ready"},{ok:!0,job:Le(P(A,"ready"))};let R={attempt:A.attempt,code:f==="revise"?"evaluator-revise":"evaluator-reject",retryability:"retryable",at:r(),detail:y};return{ok:!0,job:Le(w(A,D,R))}},cancel(c){C();let f=n.get(c);return f?$(f.state)||f.state==="applied"?{ok:!1,errors:[fe("invalid-state",`cannot cancel ${f.state}`)]}:(S?.cancel?.(f.jobId),f.workerId=null,f.leaseUntil=null,{ok:!0,job:Le(P(f,"canceled","canceled"))}):{ok:!1,errors:[fe("unknown-job",c)]}},recoverStale(){C();let c=[],f=r();for(let y of n.list()){if(y.state!=="claimed"||y.leaseUntil==null||y.leaseUntil>f)continue;let A=t.get(y.definitionId);if(!A)continue;S?.cancel?.(y.jobId);let D={attempt:y.attempt,code:"stale-lease",retryability:"retryable",at:f};c.push(Le(w(y,A,D)))}return c},tick(){C();let c=[];c.push(...I.recoverStale());let f=r();for(let y of n.list())if(!($(y.state)||y.state==="ready"||y.state==="applied")&&f>=y.timeoutAt){let A=t.get(y.definitionId);if(!A)continue;let D={attempt:y.attempt,code:"timeout",retryability:"permanent",at:f};S?.cancel?.(y.jobId),c.push(Le(w(y,A,D)))}return c},accept(c){C();let f=n.get(c);return f?f.state!=="ready"?{ok:!1,errors:[fe("not-ready","host may accept only ready jobs")]}:(h.add(f.jobId),{ok:!0,job:Le(P(f,"applied"))}):{ok:!1,errors:[fe("unknown-job",c)]}},get(c){return C(),n.get(c)},getByIdempotencyKey(c){return C(),n.getByIdempotencyKey(c)},inspect(){return C(),{destroyed:!1,jobs:n.list(),events:[...l]}},snapshot(){return C(),{schemaVersion:Ci,jobs:n.list(),hostAcceptedJobIds:[...h]}},restore(c){C();let f=_h(c);if(!f.ok)return f;let y=n.list(),A=[...h];try{n.replaceAll(f.snapshot.jobs),h.clear();for(let D of f.snapshot.hostAcceptedJobIds)h.add(D);return{ok:!0,snapshot:Le(f.snapshot)}}catch{n.replaceAll(y),h.clear();for(let D of A)h.add(D);return{ok:!1,errors:[fe("restore-failed","restore rolled back")]}}},exportTrace(){return C(),{jobs:n.list().map(c=>bs(c,d)),events:[...l]}},destroy(){m=!0}};return S?.bind({reportProgress:(c,f)=>I.reportProgress(c,f),complete:(c,f)=>I.complete(c,f),fail:(c,f)=>I.fail(c,f),heartbeat:c=>I.heartbeat(c)}),I}var gr=1,Rs=["room","region","landmark","frontier"],$h=["local","regional"],Hh=["canonical","discoverable","hidden"],Bh=["open","locked","disabled"],qh=["character","party"],Gh=["available","busy","traveling"],ou="world.graph.state.node-added",su="world.graph.state.edge-added",au="world.graph.state.discovered",Is="world.graph.state.transit",Es="world.graph.diagnostic.lifecycle";var Kh=new Set(Rs),Wh=new Set($h),jh=new Set(Hh),du=new Set(Bh),Uh=new Set(qh),cu=new Set(Gh),Jh="World graph has been destroyed",zh=4096;function ie(e,t,n){return n?{code:e,detail:t,path:n}:{code:e,detail:t}}function Vt(e){return e!==null&&typeof e=="object"&&!Array.isArray(e)}function St(e){try{return JSON.parse(JSON.stringify(e))}catch{return e}}function Fn(e){return typeof e=="number"&&Number.isFinite(e)}function ot(e){return typeof e=="string"&&e.length>0}function Cs(e,t,n){if(e!==void 0){if(!Vt(e)){n.push(ie("invalid-metadata","metadata must be a JSON object",t));return}return St(e)}}function Yh(e,t,n){if(e!==void 0){if(!Vt(e)){n.push(ie("invalid-requirements","requirements must be a JSON object",t));return}return St(e)}}function Xh(e,t,n){if(e===void 0)return;if(!Vt(e)){n.push(ie("invalid-cost","cost must be a JSON object",t));return}let r={};for(let[i,o]of Object.entries(e)){if(!Fn(o)){n.push(ie("invalid-cost",`cost.${i} must be finite`,t));continue}r[i]=o}return r}function uu(e,t){if(!Vt(e))return{ok:!1,errors:[ie("invalid-node","node must be an object",t)]};let n=[];ot(e.id)||n.push(ie("invalid-id","id is required",`${t}.id`)),(!Number.isInteger(e.version)||e.version<1)&&n.push(ie("invalid-version","version must be an integer \u2265 1",`${t}.version`)),Kh.has(e.kind)||n.push(ie("invalid-kind","unknown node kind",`${t}.kind`)),Wh.has(e.mapLayer)||n.push(ie("invalid-map-layer","unknown mapLayer",`${t}.mapLayer`)),e.frontier!==void 0&&typeof e.frontier!="boolean"&&n.push(ie("invalid-frontier","frontier must be boolean",`${t}.frontier`));let r=Cs(e.metadata,`${t}.metadata`,n);if(n.length)return{ok:!1,errors:n};let i={id:e.id,version:e.version,kind:e.kind,mapLayer:e.mapLayer};return e.frontier===!0&&(i.frontier=!0),r&&(i.metadata=r),{ok:!0,node:i}}function lu(e,t){if(!Vt(e))return{ok:!1,errors:[ie("invalid-edge","edge must be an object",t)]};let n=[];ot(e.id)||n.push(ie("invalid-id","id is required",`${t}.id`)),(!Number.isInteger(e.version)||e.version<1)&&n.push(ie("invalid-version","version must be an integer \u2265 1",`${t}.version`)),ot(e.from)||n.push(ie("invalid-from","from is required",`${t}.from`)),ot(e.to)||n.push(ie("invalid-to","to is required",`${t}.to`)),typeof e.directed!="boolean"&&n.push(ie("invalid-directed","directed must be boolean",`${t}.directed`)),ot(e.kind)||n.push(ie("invalid-kind","kind is required",`${t}.kind`)),jh.has(e.visibility)||n.push(ie("invalid-visibility","unknown visibility",`${t}.visibility`)),du.has(e.access)||n.push(ie("invalid-access","unknown access",`${t}.access`));let r=Yh(e.requirements,`${t}.requirements`,n),i=Xh(e.cost,`${t}.cost`,n),o=Cs(e.metadata,`${t}.metadata`,n);if(n.length)return{ok:!1,errors:n};let s={id:e.id,version:e.version,from:e.from,to:e.to,directed:e.directed,kind:e.kind,visibility:e.visibility,access:e.access};return r&&(s.requirements=r),i&&(s.cost=i),o&&(s.metadata=o),{ok:!0,edge:s}}function pu(e,t){if(!Vt(e))return{ok:!1,errors:[ie("invalid-transit","transit must be an object",t)]};let n=[];return ot(e.originNodeId)||n.push(ie("invalid-origin","originNodeId is required",`${t}.originNodeId`)),ot(e.destinationNodeId)||n.push(ie("invalid-destination","destinationNodeId is required",`${t}.destinationNodeId`)),(!Array.isArray(e.routeEdgeIds)||e.routeEdgeIds.some(r=>!ot(r)))&&n.push(ie("invalid-route","routeEdgeIds must be strings",`${t}.routeEdgeIds`)),Fn(e.departedAt)||n.push(ie("invalid-time","departedAt must be finite semantic time",`${t}.departedAt`)),Fn(e.expectedArrival)||n.push(ie("invalid-time","expectedArrival must be finite semantic time",`${t}.expectedArrival`)),n.length?{ok:!1,errors:n}:{ok:!0,transit:{originNodeId:e.originNodeId,destinationNodeId:e.destinationNodeId,routeEdgeIds:[...e.routeEdgeIds],departedAt:e.departedAt,expectedArrival:e.expectedArrival}}}function fu(e,t){if(!Vt(e))return{ok:!1,errors:[ie("invalid-entity","entity must be an object",t)]};let n=[];ot(e.id)||n.push(ie("invalid-id","id is required",`${t}.id`)),Uh.has(e.kind)||n.push(ie("invalid-kind","unknown entity kind",`${t}.kind`)),cu.has(e.status)||n.push(ie("invalid-status","unknown status",`${t}.status`)),e.locationNodeId!==null&&!ot(e.locationNodeId)&&n.push(ie("invalid-location","locationNodeId must be string or null",`${t}.locationNodeId`));let r=null;if(e.transit!==null&&e.transit!==void 0){let s=pu(e.transit,`${t}.transit`);s.ok?r=s.transit:n.push(...s.errors)}let i=Cs(e.metadata,`${t}.metadata`,n);if(n.length)return{ok:!1,errors:n};let o={id:e.id,kind:e.kind,status:e.status,locationNodeId:e.locationNodeId??null,transit:r};return i&&(o.metadata=i),{ok:!0,entity:o}}function Qh(e,t){if(!Vt(e))return{ok:!1,errors:[ie("invalid-discovery","discovery must be an object",t)]};let n=[];return ot(e.observerId)||n.push(ie("invalid-observer","observerId is required",`${t}.observerId`)),(!Array.isArray(e.nodeIds)||e.nodeIds.some(r=>!ot(r)))&&n.push(ie("invalid-node-ids","nodeIds must be strings",`${t}.nodeIds`)),(!Array.isArray(e.edgeIds)||e.edgeIds.some(r=>!ot(r)))&&n.push(ie("invalid-edge-ids","edgeIds must be strings",`${t}.edgeIds`)),n.length?{ok:!1,errors:n}:{ok:!0,discovery:{observerId:e.observerId,nodeIds:[...e.nodeIds],edgeIds:[...e.edgeIds]}}}function Zh(e,t){let n=e;if(typeof e=="string")try{n=JSON.parse(e)}catch{return{ok:!1,errors:[ie("invalid-json","snapshot JSON is invalid")]}}if(!Vt(n))return{ok:!1,errors:[ie("invalid-snapshot","snapshot must be a JSON object")]};let r=n.schemaVersion;if(typeof r=="number"&&r<gr){let T=n,v=r;for(;v<gr;){let P=t.find($=>$.from===v&&$.to===v+1);if(!P)return{ok:!1,errors:[ie("unsupported-schema",`no migration from schema ${v}`)]};T=P.migrate(T),v+=1}if(n=T,!Vt(n))return{ok:!1,errors:[ie("invalid-snapshot","migrated snapshot must be an object")]};r=n.schemaVersion}if(r!==gr)return{ok:!1,errors:[ie("unsupported-schema","unsupported world graph snapshot schema")]};if(!ot(n.graphId))return{ok:!1,errors:[ie("invalid-graph-id","graphId is required","graphId")]};if(!Array.isArray(n.nodes))return{ok:!1,errors:[ie("invalid-nodes","nodes must be an array","nodes")]};if(!Array.isArray(n.edges))return{ok:!1,errors:[ie("invalid-edges","edges must be an array","edges")]};if(!Array.isArray(n.entities))return{ok:!1,errors:[ie("invalid-entities","entities must be an array","entities")]};if(!Array.isArray(n.discovery))return{ok:!1,errors:[ie("invalid-discovery","discovery must be an array","discovery")]};let i=[],o=[],s=new Set;n.nodes.forEach((T,v)=>{let P=uu(T,`nodes[${v}]`);if(!P.ok){i.push(...P.errors);return}if(s.has(P.node.id)){i.push(ie("duplicate-id","duplicate node id",`nodes[${v}].id`));return}s.add(P.node.id),o.push(P.node)});let a=[],d=new Set;n.edges.forEach((T,v)=>{let P=lu(T,`edges[${v}]`);if(!P.ok){i.push(...P.errors);return}if(d.has(P.edge.id)){i.push(ie("duplicate-id","duplicate edge id",`edges[${v}].id`));return}s.has(P.edge.id)&&i.push(ie("id-collision","edge id collides with a node id",`edges[${v}].id`)),d.add(P.edge.id),a.push(P.edge)});let m=[],l=new Set;n.entities.forEach((T,v)=>{let P=fu(T,`entities[${v}]`);if(!P.ok){i.push(...P.errors);return}if(l.has(P.entity.id)){i.push(ie("duplicate-id","duplicate entity id",`entities[${v}].id`));return}l.add(P.entity.id),m.push(P.entity)});let h=[],S=new Set;if(n.discovery.forEach((T,v)=>{let P=Qh(T,`discovery[${v}]`);if(!P.ok){i.push(...P.errors);return}if(S.has(P.discovery.observerId)){i.push(ie("duplicate-observer","duplicate observerId",`discovery[${v}].observerId`));return}S.add(P.discovery.observerId),h.push(P.discovery)}),i.length)return{ok:!1,errors:i};let C=Ai(o,a,m,h);return C.length?{ok:!1,errors:C}:{ok:!0,snapshot:{schemaVersion:gr,graphId:n.graphId,nodes:o,edges:a,entities:m,discovery:h}}}function Ai(e,t,n,r){let i=new Set(e.map(a=>a.id)),o=new Set(t.map(a=>a.id)),s=[];for(let a of t)i.has(a.from)||s.push(ie("missing-node",`edge ${a.id} from unknown node`,`edges.${a.id}.from`)),i.has(a.to)||s.push(ie("missing-node",`edge ${a.id} to unknown node`,`edges.${a.id}.to`));for(let a of n)if(a.locationNodeId&&!i.has(a.locationNodeId)&&s.push(ie("missing-node",`entity ${a.id} location unknown`,`entities.${a.id}.locationNodeId`)),a.transit){i.has(a.transit.originNodeId)||s.push(ie("missing-node","transit origin unknown",`entities.${a.id}.transit.originNodeId`)),i.has(a.transit.destinationNodeId)||s.push(ie("missing-node","transit destination unknown",`entities.${a.id}.transit.destinationNodeId`));for(let d of a.transit.routeEdgeIds)o.has(d)||s.push(ie("missing-edge",`transit route missing ${d}`,`entities.${a.id}.transit.routeEdgeIds`))}for(let a of r){for(let d of a.nodeIds)i.has(d)||s.push(ie("missing-node",`discovery references unknown node ${d}`,`discovery.${a.observerId}`));for(let d of a.edgeIds)o.has(d)||s.push(ie("missing-edge",`discovery references unknown edge ${d}`,`discovery.${a.observerId}`))}return s}function ks(e){return[...e].map(t=>St(t)).sort((t,n)=>t.id.localeCompare(n.id))}function iu(e){return[...e].map(t=>St(t)).sort((t,n)=>t.id.localeCompare(n.id))}function ey(e){return e.directed?[{from:e.from,to:e.to}]:[{from:e.from,to:e.to},{from:e.to,to:e.from}]}function fr(){return{version:1,fields:{graphId:{type:"string",optional:!0},nodeId:{type:"string",optional:!0},edgeId:{type:"string",optional:!0},observerId:{type:"string",optional:!0},entityId:{type:"string",optional:!0}}}}function mr(e){if(!e.ok)throw new Error(e.errors.map(t=>t.detail).join("; "));return e.contract}function ty(){return[mr(ce(ou,fr())),mr(ce(su,fr())),mr(ce(au,fr())),mr(ce(Is,fr())),mr(tt(Es,fr()))]}function ny(e={}){let t=e.migrations??[],n=e.maxPathVisits??zh,r=e.source??"world-graph",i=e.graphId??"world",o=!1,s=new Map,a=new Map,d=new Map,m=new Map,l=[],h=[];function S(){if(o)throw new Error(Jh)}function C(c,f){let y={type:c,payload:f,source:r,kind:c===Es?"diagnostic":void 0};l.push(y),h.push(c),e.router?.publish(y)}function T(c){return C(Es,{graphId:i}),{ok:!1,errors:c}}function v(){let c=new Map,f=y=>(c.has(y)||c.set(y,[]),c.get(y));for(let y of s.values())f(y.id);for(let y of a.values())for(let A of ey(y))f(A.from).push({edge:y,to:A.to});for(let y of c.values())y.sort((A,D)=>A.edge.id.localeCompare(D.edge.id)||A.to.localeCompare(D.to));return c}function P(c,f){let y=uu(c,`nodes.${c.id??"?"}`);return y.ok?s.get(y.node.id)?(f.push(ie("duplicate-id",`node ${y.node.id} already exists`,`nodes.${y.node.id}`)),!1):a.has(y.node.id)?(f.push(ie("id-collision","node id collides with an edge id",`nodes.${y.node.id}`)),!1):(s.set(y.node.id,y.node),C(ou,{graphId:i,nodeId:y.node.id}),!0):(f.push(...y.errors),!1)}function $(c,f){let y=lu(c,`edges.${c.id??"?"}`);return y.ok?a.has(y.edge.id)?(f.push(ie("duplicate-id",`edge ${y.edge.id} already exists`,`edges.${y.edge.id}`)),!1):s.has(y.edge.id)?(f.push(ie("id-collision","edge id collides with a node id",`edges.${y.edge.id}`)),!1):!s.has(y.edge.from)||!s.has(y.edge.to)?(f.push(ie("missing-node",`edge ${y.edge.id} references unknown node`,`edges.${y.edge.id}`)),!1):(a.set(y.edge.id,y.edge),C(su,{graphId:i,edgeId:y.edge.id}),!0):(f.push(...y.errors),!1)}function j(c){let f=m.get(c);return f||(f={nodeIds:new Set,edgeIds:new Set},m.set(c,f)),f}function O(c,f){return f.visibility==="canonical"?!0:m.get(c)?.edgeIds.has(f.id)===!0}function F(c,f){if(m.get(c)?.nodeIds.has(f.id))return!0;if(f.kind==="frontier"||f.frontier){for(let y of a.values())if(O(c,y)&&(y.from===f.id||y.to===f.id)){let A=y.from===f.id?y.to:y.from;if(m.get(c)?.nodeIds.has(A))return!0}}return!1}function w(c,f,y,A){let D=new Map;for(let M of s.values())y(M,null)&&D.set(M.id,St(M));let R=[];for(let M of a.values())!D.has(M.from)||!D.has(M.to)||y(D.get(M.from),M)&&R.push(St(M));let N=ks([...D.values()].filter(M=>M.kind==="frontier"||M.frontier===!0)),q=[...d.values()].filter(M=>!!(M.locationNodeId&&D.has(M.locationNodeId)||M.transit&&(D.has(M.transit.originNodeId)||D.has(M.transit.destinationNodeId)))).map(M=>St(M)).sort((M,u)=>M.id.localeCompare(u.id));return{kind:c,observerId:f,focusNodeId:A,nodes:ks(D.values()),edges:iu(R),frontiers:N,entities:q}}function p(c,f,y){let A=new Set;if(!s.has(c))return A;let D=v(),R=[{id:c,dist:0}],N=new Set([c]);for(A.add(c);R.length;){let q=R.shift();if(!(q.dist>=f))for(let M of D.get(q.id)??[]){if(!O(y,M.edge)&&M.edge.visibility!=="canonical"||N.has(M.to))continue;let u=s.get(M.to);u&&(u.mapLayer!=="local"&&u.kind!=="frontier"&&!u.frontier||(N.add(M.to),A.add(M.to),R.push({id:M.to,dist:q.dist+1})))}}return A}function I(c,f,y,A,D){let R=A?.maxVisits??n,N=v(),q=new Map([[c,0]]),M=new Map,u=new Set,b=0;for(;b<R;){let x=null,V=1/0;for(let[L,W]of q)u.has(L)||(W<V||W===V&&(x===null||L.localeCompare(x)<0))&&(x=L,V=W);if(x===null||D!==null&&x===D)break;u.add(x),b+=1;for(let L of N.get(x)??[]){if(!f.canTraverse(L.edge,x,L.to,y))continue;let W=f.cost(L.edge,x,L.to,y);if(!Number.isFinite(W)||W<0)continue;let U=V+W,B=q.get(L.to);(B===void 0||U<B||U===B&&L.edge.id.localeCompare(M.get(L.to)?.edge.id??L.edge.id)<0)&&(q.set(L.to,U),M.set(L.to,{node:x,edge:L.edge,cost:W}))}}return{dist:q,prev:M}}return{addNode(c){S();let f=[];return P(c,f),f.length?T(f):{ok:!0}},addEdge(c){S();let f=[];return $(c,f),f.length?T(f):{ok:!0}},applyPatch(c){S();let f=new Map(s),y=new Map(a),A=l.length,D=h.length,R=[];for(let N of c.nodes??[])P(N,R);for(let N of c.edges??[])$(N,R);if(R.length){s.clear(),a.clear();for(let[N,q]of f)s.set(N,q);for(let[N,q]of y)a.set(N,q);return l.length=A,h.length=D,T(R)}return{ok:!0}},removeNode(c){if(S(),!s.has(c))return T([ie("unknown-node",c)]);let f=Ai([...s.values()].filter(A=>A.id!==c),[...a.values()].filter(A=>A.from!==c&&A.to!==c),[...d.values()],[...m.entries()].map(([A,D])=>({observerId:A,nodeIds:[...D.nodeIds].filter(R=>R!==c),edgeIds:[...D.edgeIds]}))).filter(A=>A.code!=="missing-node"||!A.detail.includes(c));if(f.length)return T(f);let y=[...a.values()].filter(A=>A.from===c||A.to===c);if(y.length)return T([ie("node-in-use",`remove incident edges first (${y[0].id})`)]);for(let A of d.values())if(A.locationNodeId===c||A.transit?.originNodeId===c||A.transit?.destinationNodeId===c)return T([ie("node-in-use",`entity ${A.id} still references node`)]);s.delete(c);for(let A of m.values())A.nodeIds.delete(c);return{ok:!0}},removeEdge(c){if(S(),!a.has(c))return T([ie("unknown-edge",c)]);for(let f of d.values())if(f.transit?.routeEdgeIds.includes(c))return T([ie("edge-in-use",`entity ${f.id} still references edge`)]);a.delete(c);for(let f of m.values())f.edgeIds.delete(c);return{ok:!0}},setEdgeAccess(c,f){S();let y=a.get(c);return y?du.has(f)?(a.set(c,{...y,access:f}),{ok:!0}):T([ie("invalid-access",f)]):T([ie("unknown-edge",c)])},discover(c,f){if(S(),!ot(c))return T([ie("invalid-observer","observerId is required")]);let y=[];for(let D of f.nodeIds??[])s.has(D)||y.push(ie("unknown-node",D));for(let D of f.edgeIds??[])a.has(D)||y.push(ie("unknown-edge",D));if(y.length)return T(y);let A=j(c);for(let D of f.nodeIds??[])A.nodeIds.add(D);for(let D of f.edgeIds??[])A.edgeIds.add(D);return C(au,{graphId:i,observerId:c}),{ok:!0}},upsertEntity(c){S();let f=fu(c,`entities.${c.id??"?"}`);if(!f.ok)return T(f.errors);let y=Ai([...s.values()],[...a.values()],[f.entity],[]);return y.length?T(y):(d.set(f.entity.id,f.entity),{ok:!0})},startTransit(c,f,y="traveling"){S();let A=d.get(c);if(!A)return T([ie("unknown-entity",c)]);let D=pu(f,"transit");if(!D.ok)return T(D.errors);let R={...A,status:y,locationNodeId:null,transit:D.transit},N=Ai([...s.values()],[...a.values()],[R],[]);return N.length?T(N):(d.set(c,R),C(Is,{graphId:i,entityId:c}),{ok:!0})},completeTransit(c,f){S();let y=d.get(c);return y?y.transit?Fn(f)?(d.set(c,{...y,status:"available",locationNodeId:y.transit.destinationNodeId,transit:null}),C(Is,{graphId:i,entityId:c,semanticTime:f}),{ok:!0}):T([ie("invalid-time","semanticTime must be finite")]):T([ie("not-traveling",c)]):T([ie("unknown-entity",c)])},setEntityStatus(c,f){S();let y=d.get(c);return y?cu.has(f)?(d.set(c,{...y,status:f}),{ok:!0}):T([ie("invalid-status",f)]):T([ie("unknown-entity",c)])},getNode(c){S();let f=s.get(c);return f?St(f):void 0},getEdge(c){S();let f=a.get(c);return f?St(f):void 0},getEntity(c){S();let f=d.get(c);return f?St(f):void 0},projectCanonical(){return S(),w("canonical",void 0,()=>!0)},projectKnown(c){return S(),w("known",c,(f,y)=>y?O(c,y):F(c,f))},projectLocal(c,f,y=8){S();let A=p(f,y,c);return w("local",c,(D,R)=>A.has(D.id)?R?O(c,R)||R.visibility==="canonical":F(c,D)||A.has(D.id):!1,f)},projectRegional(c){return S(),w("regional",c,(f,y)=>f.mapLayer!=="regional"&&f.kind!=="frontier"&&!f.frontier?!1:y?O(c,y):F(c,f))},findPath(c,f,y,A,D){if(S(),!s.has(c))return{ok:!1,errors:[ie("unknown-node",c)]};if(!s.has(f))return{ok:!1,errors:[ie("unknown-node",f)]};if(!Fn(A.semanticTime))return{ok:!1,errors:[ie("invalid-time","semanticTime must be finite")]};if(c===f)return{ok:!0,path:{from:c,to:f,nodeIds:[c],steps:[],totalCost:0}};let{dist:R,prev:N}=I(c,y,A,D,f);if(!R.has(f))return{ok:!1,errors:[ie("unreachable",f)]};let q=[],M=[f],u=f;for(;u!==c;){let b=N.get(u);if(!b)return{ok:!1,errors:[ie("unreachable",f)]};q.push({edgeId:b.edge.id,from:b.node,to:u,cost:b.cost}),u=b.node,M.push(u)}return q.reverse(),M.reverse(),{ok:!0,path:{from:c,to:f,nodeIds:M,steps:q,totalCost:R.get(f)}}},reachable(c,f,y,A){if(S(),!s.has(c)||!Fn(y.semanticTime))return{nodeIds:[]};let{dist:D}=I(c,f,y,A,null);return{nodeIds:[...D.keys()].sort((R,N)=>R.localeCompare(N))}},inspect(){return S(),{destroyed:!1,graphId:i,nodeCount:s.size,edgeCount:a.size,entityCount:d.size,observerCount:m.size,events:[...h]}},snapshot(){return S(),{schemaVersion:gr,graphId:i,nodes:ks(s.values()),edges:iu(a.values()),entities:[...d.values()].map(c=>St(c)).sort((c,f)=>c.id.localeCompare(f.id)),discovery:[...m.entries()].map(([c,f])=>({observerId:c,nodeIds:[...f.nodeIds].sort((y,A)=>y.localeCompare(A)),edgeIds:[...f.edgeIds].sort((y,A)=>y.localeCompare(A))})).sort((c,f)=>c.observerId.localeCompare(f.observerId))}},restore(c){S();let f=Zh(c,t);if(!f.ok)return f;let y={graphId:i,nodes:new Map(s),edges:new Map(a),entities:new Map(d),discovery:new Map([...m.entries()].map(([A,D])=>[A,{nodeIds:new Set(D.nodeIds),edgeIds:new Set(D.edgeIds)}]))};try{i=f.snapshot.graphId,s.clear(),a.clear(),d.clear(),m.clear();for(let A of f.snapshot.nodes)s.set(A.id,A);for(let A of f.snapshot.edges)a.set(A.id,A);for(let A of f.snapshot.entities)d.set(A.id,A);for(let A of f.snapshot.discovery)m.set(A.observerId,{nodeIds:new Set(A.nodeIds),edgeIds:new Set(A.edgeIds)});return{ok:!0,snapshot:St(f.snapshot)}}catch{i=y.graphId,s.clear(),a.clear(),d.clear(),m.clear();for(let[A,D]of y.nodes)s.set(A,D);for(let[A,D]of y.edges)a.set(A,D);for(let[A,D]of y.entities)d.set(A,D);for(let[A,D]of y.discovery)m.set(A,D);return{ok:!1,errors:[ie("restore-failed","restore rolled back")]}}},events(){return S(),[...l]},destroy(){o=!0,s.clear(),a.clear(),d.clear(),m.clear()}}}var Ti=1,Oi=1,ry=["add","replace","revise","remove","tombstone","link","unlink"],iy=["base-revision","entity-revision","entity-hash","identity-required","identity-absent","capability","schema"],Ds="world.patch.state.accepted",bu="world.patch.state.rejected",vu="world.patch.state.superseded",Di="world.patch.diagnostic.lifecycle";var oy=["invalid-schema","unknown-field","unknown-op","missing-field","missing-ref","referential-integrity","stale-base","precondition-failed","asset-unavailable","content-unavailable","binding-unavailable","cycle","over-limit","idempotency-conflict","superseded","invalid-snapshot","invalid-version","destroyed","domain","capability-denied","schema-mismatch","identity-required","identity-absent","entity-revision","entity-hash","duplicate-id","graph-apply-failed","publish-failed"],sy=Zt,mu=new Set(ry),ay=new Set(iy),lk=new Set(oy),ws=new Set(Rs),Ps=new Set(["exit","edge","graph-edge"]),dy="World patch applier has been destroyed",cy=new Set(["patchId","schemaVersion","baseRevision","idempotencyKey","preconditions","operations","provenance","supersedes"]),uy=new Set(["op","kind","id","value","from","to","order","refs"]),ly=new Set(["jobId","producer","contentRevisions"]),py={"base-revision":new Set(["type","revision"]),"entity-revision":new Set(["type","kind","id","revision"]),"entity-hash":new Set(["type","kind","id","hash"]),"identity-required":new Set(["type","kind","id"]),"identity-absent":new Set(["type","kind","id"]),capability:new Set(["type","name"]),schema:new Set(["type","schemaVersion"])},fy=256,my=32,gy=4096,hy=262144;function te(e,t,n,r){let i=n?{code:e,detail:t,path:n}:{code:e,detail:t};return r?.expectedRevision!==void 0&&(i.expectedRevision=r.expectedRevision),r?.actualRevision!==void 0&&(i.actualRevision=r.actualRevision),i}function je(e){return e!==null&&typeof e=="object"&&!Array.isArray(e)}function we(e){try{return JSON.parse(JSON.stringify(e))}catch{return e}}function ge(e){return typeof e=="string"&&e.length>0}function ct(e){return typeof e=="number"&&Number.isInteger(e)&&Number.isFinite(e)}function hr(e,t,n,r){for(let i of Object.keys(e))t.has(i)||r.push(te("unknown-field",`unknown field "${i}"`,n?`${n}.${i}`:i))}function xs(e){if(e===null||typeof e!="object")return e;if(Array.isArray(e))return e.map(xs);let t=e,n={};for(let r of Object.keys(t).sort())n[r]=xs(t[r]);return n}function gu(e){let t=JSON.stringify(xs(e)??null),n=2166136261;for(let r=0;r<t.length;r++)n^=t.charCodeAt(r),n=Math.imul(n,16777619);return(n>>>0).toString(16).padStart(8,"0")}function Ts(e,t){if(e==null)return e;if(Array.isArray(e))return e.map(i=>Ts(i,t));if(typeof e!="object")return e;let n=e,r={};for(let[i,o]of Object.entries(n))r[i]=t.has(i)?Ct:Ts(o,t);return r}function yy(){return{revision:0,entities:[],links:[],accepted:[]}}function Su(e){return[...e].map(t=>we(t)).sort((t,n)=>{let r=t.kind.localeCompare(n.kind);return r!==0?r:t.id.localeCompare(n.id)})}function ku(e){return[...e].map(t=>we(t)).sort((t,n)=>t.id.localeCompare(n.id))}function by(e){return[...e].map(t=>we(t)).sort((t,n)=>t.revision!==n.revision?t.revision-n.revision:t.patchId.localeCompare(n.patchId))}function Mi(e){return{revision:e.revision,entities:Su(e.entities),links:ku(e.links),accepted:by(e.accepted)}}function wi(e,t){return e.length<=t?e:[...e.slice(0,t),te("over-limit",`truncated ${e.length-t} additional diagnostics`)]}function Iu(e,t){let n=e.order??0,r=t.order??0;return n!==r?n-r:e.op!==t.op?e.op.localeCompare(t.op):e.kind!==t.kind?e.kind.localeCompare(t.kind):e.id.localeCompare(t.id)}function Pi(){return{version:1,fields:{patchId:{type:"string"},oldRevision:{type:"number",optional:!0},newRevision:{type:"number",optional:!0},revision:{type:"number",optional:!0},producer:{type:"string",optional:!0},jobId:{type:"string",optional:!0},contentRevisions:{type:"array",optional:!0},reasonCode:{type:"string",optional:!0},supersededBy:{type:"string",optional:!0},changedIdentities:{type:"array",optional:!0}}}}function xi(e){if(!e.ok)throw new Error(e.errors.map(t=>t.detail).join("; "));return e.contract}function vy(){return[xi(ce(Ds,Pi())),xi(ce(bu,Pi())),xi(ce(vu,Pi())),xi(tt(Di,Pi()))]}function Eu(){let e=yy();return{current(){return we(e)},begin(){let t=we(e),n=null;return{applyWorldRevision(r){n=Mi(r)},commit(){n&&(e=n),n=null},rollback(){e=we(t),n=null}}}}}function Ru(e,t,n){if(e===void 0)return;if(!je(e)){n.push(te("invalid-schema","refs must be an object",t));return}hr(e,new Set(["contentId","contentRevision","binding","asset","identity"]),t,n);let r={};for(let i of["contentId","contentRevision","binding","asset","identity"]){let o=e[i];if(o!==void 0){if(!ge(o)){n.push(te("invalid-schema",`refs.${i} must be a non-empty string`,`${t}.${i}`));continue}r[i]=o}}return r}function Sy(e,t,n){if(!je(e)){n.push(te("invalid-schema","operation must be an object",t));return}hr(e,uy,t,n),(!ge(e.op)||!mu.has(e.op))&&n.push(te("unknown-op",`unknown op "${String(e.op)}"`,`${t}.op`)),ge(e.kind)||n.push(te("missing-field","kind is required",`${t}.kind`));let r=e.id;ge(r)||((e.op==="link"||e.op==="unlink")&&ge(e.from)&&ge(e.to)?r=`${e.kind??"link"}:${e.from}:${e.to}`:n.push(te("missing-field","id is required",`${t}.id`))),e.order!==void 0&&!ct(e.order)&&n.push(te("invalid-schema","order must be an integer",`${t}.order`)),e.from!==void 0&&!ge(e.from)&&n.push(te("invalid-schema","from must be a non-empty string",`${t}.from`)),e.to!==void 0&&!ge(e.to)&&n.push(te("invalid-schema","to must be a non-empty string",`${t}.to`));let i=Ru(e.refs,`${t}.refs`,n);if(!ge(e.op)||!mu.has(e.op)||!ge(e.kind)||!ge(r))return;(e.op==="link"||e.op==="unlink")&&(!ge(e.from)||!ge(e.to))&&n.push(te("missing-field","link/unlink require from and to",t));let o={op:e.op,kind:e.kind,id:r};return ct(e.order)&&(o.order=e.order),e.value!==void 0&&(o.value=we(e.value)),ge(e.from)&&(o.from=e.from),ge(e.to)&&(o.to=e.to),i&&Object.keys(i).length&&(o.refs=i),o}function ky(e,t,n){if(!je(e)){n.push(te("invalid-schema","precondition must be an object",t));return}if(!ge(e.type)||!ay.has(e.type)){n.push(te("invalid-schema",`unknown precondition type "${String(e.type)}"`,`${t}.type`));return}let r=e.type;switch(hr(e,py[r],t,n),r){case"base-revision":if(!ct(e.revision)||e.revision<0){n.push(te("invalid-schema","revision must be an integer \u2265 0",`${t}.revision`));return}return{type:r,revision:e.revision};case"entity-revision":if(!ge(e.kind)||!ge(e.id)||!ct(e.revision)||e.revision<1){n.push(te("invalid-schema","kind, id, and revision \u2265 1 are required",t));return}return{type:r,kind:e.kind,id:e.id,revision:e.revision};case"entity-hash":if(!ge(e.kind)||!ge(e.id)||!ge(e.hash)){n.push(te("invalid-schema","kind, id, and hash are required",t));return}return{type:r,kind:e.kind,id:e.id,hash:e.hash};case"identity-required":case"identity-absent":if(!ge(e.kind)||!ge(e.id)){n.push(te("invalid-schema","kind and id are required",t));return}return{type:r,kind:e.kind,id:e.id};case"capability":if(!ge(e.name)){n.push(te("invalid-schema","capability name is required",`${t}.name`));return}return{type:r,name:e.name};case"schema":if(!ct(e.schemaVersion)||e.schemaVersion<1){n.push(te("invalid-schema","schemaVersion must be an integer \u2265 1",`${t}.schemaVersion`));return}return{type:r,schemaVersion:e.schemaVersion}}}function Cu(e,t,n){if(!je(e)){n.push(te("invalid-schema","provenance is required",t));return}if(hr(e,ly,t,n),!ge(e.producer)){n.push(te("missing-field","producer is required",`${t}.producer`));return}let r={producer:e.producer};return e.jobId!==void 0&&(ge(e.jobId)?r.jobId=e.jobId:n.push(te("invalid-schema","jobId must be a non-empty string",`${t}.jobId`))),e.contentRevisions!==void 0&&(!Array.isArray(e.contentRevisions)||e.contentRevisions.some(i=>!ge(i))?n.push(te("invalid-schema","contentRevisions must be string[]",`${t}.contentRevisions`)):r.contentRevisions=[...e.contentRevisions]),r}function Iy(e,t){let n=[],r="";try{r=JSON.stringify(e)??""}catch{return{errors:[te("invalid-schema","patch is not JSON-serializable")]}}if(r.length>t.maxBytes&&n.push(te("over-limit",`patch exceeds ${t.maxBytes} bytes`)),!je(e))return{errors:[te("invalid-schema","patch must be an object"),...n]};hr(e,cy,"",n),ge(e.patchId)||n.push(te("missing-field","patchId is required","patchId")),e.schemaVersion!==Ti&&n.push(te("schema-mismatch",`schemaVersion must be ${Ti}`,"schemaVersion")),(!ct(e.baseRevision)||e.baseRevision<0)&&n.push(te("invalid-schema","baseRevision must be an integer \u2265 0","baseRevision")),ge(e.idempotencyKey)||n.push(te("missing-field","idempotencyKey is required","idempotencyKey")),e.supersedes!==void 0&&!ge(e.supersedes)&&n.push(te("invalid-schema","supersedes must be a non-empty string","supersedes"));let i=Cu(e.provenance,"provenance",n);Array.isArray(e.operations)?e.operations.length>t.maxOperations&&n.push(te("over-limit",`operations exceed ${t.maxOperations}`,"operations")):n.push(te("invalid-schema","operations must be an array","operations"));let o=[];if(Array.isArray(e.operations))for(let d=0;d<e.operations.length;d++){let m=Sy(e.operations[d],`operations[${d}]`,n);m&&o.push(m)}let s=[];if(e.preconditions!==void 0)if(!Array.isArray(e.preconditions))n.push(te("invalid-schema","preconditions must be an array","preconditions"));else for(let d=0;d<e.preconditions.length;d++){let m=ky(e.preconditions[d],`preconditions[${d}]`,n);m&&s.push(m)}if(n.length)return{errors:n};let a={patchId:e.patchId,schemaVersion:Ti,baseRevision:e.baseRevision,idempotencyKey:e.idempotencyKey,operations:o,provenance:i};return s.length&&(a.preconditions=s),ge(e.supersedes)&&(a.supersedes=e.supersedes),{patch:a,errors:n}}function Ey(e){let t=new Map;for(let r of e.entities)t.set(r.id,we(r));let n=new Map;for(let r of e.links)n.set(r.id,we(r));return{revision:e.revision,entities:t,links:n,accepted:e.accepted.map(r=>we(r))}}function $n(e,t,n){let r=e.get(t);if(r&&!(n&&r.kind!==n))return r}function Ry(e,t,n){let r=Ey(e),i=[],o=[],s=[...t].sort(Iu),a=(m,l)=>{let h={kind:m.kind,id:m.id,revision:l?l.revision+1:1,hash:gu(m.value??null),value:m.value===void 0?null:we(m.value),tombstoned:!1};m.refs&&(h.refs=we(m.refs)),r.entities.set(m.id,h),i.push({op:m.op,kind:m.kind,id:m.id})},d=m=>{!m.from||!m.to||r.links.set(m.id,{id:m.id,kind:m.kind,from:m.from,to:m.to,...m.value!==void 0?{value:we(m.value)}:{}})};for(let m=0;m<s.length;m++){let l=s[m],h=`operations[${m}]`,S=r.entities.get(l.id);switch(l.op){case"add":if(S&&!S.tombstoned){o.push(te("duplicate-id",`identity "${l.id}" already exists`,h));break}a(l),l.from&&l.to&&d(l);break;case"replace":case"revise":if(!S||S.tombstoned){o.push(te("missing-ref",`identity "${l.id}" is absent`,h));break}if(S.kind!==l.kind){o.push(te("missing-ref",`identity "${l.id}" is kind "${S.kind}"`,h));break}a(l,S),l.from&&l.to&&d(l);break;case"remove":if(!S){o.push(te("missing-ref",`identity "${l.id}" is absent`,h));break}r.entities.delete(l.id),r.links.delete(l.id);for(let[C,T]of[...r.links])(T.from===l.id||T.to===l.id)&&r.links.delete(C);i.push({op:l.op,kind:l.kind,id:l.id});break;case"tombstone":if(!S){o.push(te("missing-ref",`identity "${l.id}" is absent`,h));break}S.tombstoned=!0,S.revision+=1,S.hash=gu(null),S.value=null,r.links.delete(l.id);for(let[C,T]of[...r.links])(T.from===l.id||T.to===l.id)&&r.links.delete(C);i.push({op:l.op,kind:l.kind,id:l.id});break;case"link":if(S&&S.kind!==l.kind&&!S.tombstoned){o.push(te("duplicate-id",`identity "${l.id}" already exists`,h));break}a(l,S&&!S.tombstoned?S:void 0),d(l);break;case"unlink":if(!r.links.has(l.id)&&!S){o.push(te("missing-ref",`link "${l.id}" is absent`,h));break}r.links.delete(l.id),S&&(S.tombstoned=!0,S.revision+=1),i.push({op:l.op,kind:l.kind,id:l.id});break}}r.entities.size>n.maxEntities&&o.push(te("over-limit",`entities exceed ${n.maxEntities}`));for(let m of r.links.values()){let l=r.entities.get(m.from),h=r.entities.get(m.to);(!l||l.tombstoned)&&o.push(te("referential-integrity",`link "${m.id}" from "${m.from}" is absent`,`links.${m.id}.from`)),(!h||h.tombstoned)&&o.push(te("referential-integrity",`link "${m.id}" to "${m.to}" is absent`,`links.${m.id}.to`))}return{world:r,changed:i,errors:o}}function Cy(e,t,n,r){let i=[];e.baseRevision!==t.revision&&i.push(te("stale-base",`baseRevision ${e.baseRevision} is stale; current revision is ${t.revision}`,"baseRevision",{expectedRevision:t.revision,actualRevision:e.baseRevision}));for(let o=0;o<(e.preconditions??[]).length;o++){let s=e.preconditions[o],a=`preconditions[${o}]`;switch(s.type){case"base-revision":s.revision!==t.revision&&i.push(te("stale-base",`expected base revision ${s.revision}, current is ${t.revision}`,a,{expectedRevision:t.revision,actualRevision:s.revision}));break;case"entity-revision":{let d=$n(n,s.id,s.kind);d?d.revision!==s.revision&&i.push(te("entity-revision",`identity "${s.id}" revision is ${d.revision}, expected ${s.revision}`,a)):i.push(te("identity-required",`identity "${s.id}" is absent`,a));break}case"entity-hash":{let d=$n(n,s.id,s.kind);d?d.hash!==s.hash&&i.push(te("entity-hash",`identity "${s.id}" hash is ${d.hash}, expected ${s.hash}`,a)):i.push(te("identity-required",`identity "${s.id}" is absent`,a));break}case"identity-required":(!$n(n,s.id,s.kind)||$n(n,s.id,s.kind)?.tombstoned)&&i.push(te("identity-required",`identity "${s.id}" is required`,a));break;case"identity-absent":$n(n,s.id,s.kind)&&!$n(n,s.id,s.kind)?.tombstoned&&i.push(te("identity-absent",`identity "${s.id}" must be absent`,a));break;case"capability":r.has(s.name)||i.push(te("capability-denied",`capability "${s.name}" is not granted`,a));break;case"schema":s.schemaVersion!==Ti&&i.push(te("schema-mismatch",`schema requirement ${s.schemaVersion} is unsupported`,a));break}}return i}function Ay(e){let t=new Map;for(let o of e){let s=t.get(o.from)??[];s.push(o.to),t.set(o.from,s),t.has(o.to)||t.set(o.to,t.get(o.to)??[])}let n=new Set,r=new Set,i=o=>{if(n.has(o))return!0;if(r.has(o))return!1;n.add(o);for(let s of t.get(o)??[])if(i(s))return!0;return n.delete(o),r.add(o),!1};for(let o of[...t.keys()].sort())if(i(o))return!0;return!1}function hu(e,t,n){return e?e.hasRevision?.(t??"",n)?!0:(e.available??[]).some(r=>r.revision===n&&(t===void 0||!r.contentId||r.contentId===t)):!1}function wy(e,t,n,r,i,o){let s=[],a=i?.listedIds?new Set(i.listedIds):void 0,d=o?.availableIds?new Set(o.availableIds):void 0,m=new Set(n.entities.filter(l=>!l.tombstoned).map(l=>l.id));for(let l of t)m.add(l.id);for(let l of e.provenance.contentRevisions??[])r&&!hu(r,void 0,l)&&s.push(te("content-unavailable",`content revision "${l}" is not available`,"provenance.contentRevisions"));for(let l=0;l<t.length;l++){let h=t[l],S=`operations[${l}]`,C=h.refs?.contentRevision,T=h.refs?.contentId;C&&r&&!hu(r,T,C)&&s.push(te("content-unavailable",`content revision "${C}" is not available`,`${S}.refs`));let v=h.refs?.binding??(h.kind==="presentation-binding"?h.id:void 0);v&&a&&!a.has(v)&&s.push(te("binding-unavailable",`binding "${v}" is not listed`,`${S}`));let P=h.refs?.asset??(h.kind==="asset"?h.id:void 0);P&&d&&!d.has(P)&&s.push(te("asset-unavailable",`asset "${P}" is not available`,`${S}`));let $=h.refs?.identity;$&&!m.has($)&&s.push(te("missing-ref",`ref identity "${$}" is absent`,`${S}.refs`))}return s}function yu(e){if(!ws.has(e.kind))return;let t=je(e.value)?e.value:{},n={id:e.id,version:ct(t.version)&&t.version>=1?t.version:1,kind:ge(t.kind)&&ws.has(t.kind)?t.kind:e.kind,mapLayer:t.mapLayer==="regional"?"regional":"local"};return t.frontier===!0&&(n.frontier=!0),je(t.metadata)&&(n.metadata=we(t.metadata)),n}function As(e){if(!Ps.has(e.kind)||!e.from||!e.to)return;let t=je(e.value)?e.value:{},n=t.visibility==="canonical"||t.visibility==="hidden"?t.visibility:"discoverable",r=t.access==="locked"||t.access==="disabled"?t.access:"open",i={id:e.id,version:ct(t.version)&&t.version>=1?t.version:1,from:e.from,to:e.to,directed:t.directed===!0,kind:ge(t.kind)?t.kind:"door",visibility:n,access:r};if(je(t.requirements)&&(i.requirements=we(t.requirements)),je(t.cost)){let o={};for(let[s,a]of Object.entries(t.cost))typeof a=="number"&&Number.isFinite(a)&&(o[s]=a);Object.keys(o).length&&(i.cost=o)}return je(t.metadata)&&(i.metadata=we(t.metadata)),i}function Py(e,t){let n=e.snapshot(),r=new Map(n.nodes.map(d=>[d.id,we(d)])),i=new Map(n.edges.map(d=>[d.id,we(d)])),o=[...t].sort(Iu),s=d=>{r.delete(d);for(let[m,l]of[...i])(l.from===d||l.to===d)&&i.delete(m)};for(let d of o)switch(d.op){case"add":{let m=yu(d);m&&!r.has(m.id)&&r.set(m.id,m);let l=As(d);l&&!i.has(l.id)&&i.set(l.id,l);break}case"replace":case"revise":{let m=yu(d);m&&r.set(m.id,m);let l=As(d);l&&i.set(l.id,l);break}case"link":{let m=As(d);m&&i.set(m.id,m);break}case"remove":case"tombstone":ws.has(d.kind)&&s(d.id),Ps.has(d.kind)&&i.delete(d.id);break;case"unlink":Ps.has(d.kind)&&i.delete(d.id);break}let a=e.restore({...n,nodes:[...r.values()],edges:[...i.values()]});return a.ok?[]:a.errors.map(d=>te("graph-apply-failed",d.detail,d.path))}function xy(e,t){let n=[];if(!je(e))return{errors:[te("invalid-snapshot","world must be an object",t)]};if((!ct(e.revision)||e.revision<0)&&n.push(te("invalid-snapshot","revision must be an integer \u2265 0",`${t}.revision`)),!Array.isArray(e.entities)||!Array.isArray(e.links)||!Array.isArray(e.accepted))return n.push(te("invalid-snapshot","entities, links, and accepted must be arrays",t)),{errors:n};let r=[];for(let s=0;s<e.entities.length;s++){let a=e.entities[s],d=`${t}.entities[${s}]`;if(!je(a)){n.push(te("invalid-snapshot","entity must be an object",d));continue}if(!ge(a.kind)||!ge(a.id)||!ct(a.revision)||a.revision<1){n.push(te("invalid-snapshot","kind, id, and revision are required",d));continue}if(!ge(a.hash)||typeof a.tombstoned!="boolean"){n.push(te("invalid-snapshot","hash and tombstoned are required",d));continue}let m={kind:a.kind,id:a.id,revision:a.revision,hash:a.hash,value:a.value??null,tombstoned:a.tombstoned};if(a.refs!==void 0){let l=Ru(a.refs,`${d}.refs`,n);l&&(m.refs=l)}r.push(m)}let i=[];for(let s=0;s<e.links.length;s++){let a=e.links[s],d=`${t}.links[${s}]`;if(!je(a)||!ge(a.id)||!ge(a.kind)||!ge(a.from)||!ge(a.to)){n.push(te("invalid-snapshot","link id, kind, from, and to are required",d));continue}i.push({id:a.id,kind:a.kind,from:a.from,to:a.to,...a.value!==void 0?{value:a.value}:{}})}let o=[];for(let s=0;s<e.accepted.length;s++){let a=e.accepted[s],d=`${t}.accepted[${s}]`;if(!je(a)||!ge(a.patchId)||!ge(a.idempotencyKey)||!ct(a.revision)||a.revision<1){n.push(te("invalid-snapshot","accepted patch identity is invalid",d));continue}let m=Cu(a.provenance,`${d}.provenance`,n);if(!m)continue;let l={patchId:a.patchId,idempotencyKey:a.idempotencyKey,revision:a.revision,provenance:m};ge(a.supersededBy)&&(l.supersededBy=a.supersededBy),o.push(l)}return n.length?{errors:n}:{errors:[],world:Mi({revision:e.revision,entities:r,links:i,accepted:o})}}function Ty(e,t,n){if(!je(e)){n.push(te("invalid-snapshot","audit record must be an object",t));return}if(e.outcome!=="accepted"&&e.outcome!=="rejected"&&e.outcome!=="superseded"){n.push(te("invalid-snapshot","audit outcome is invalid",`${t}.outcome`));return}if(!ge(e.patchId)||!ge(e.idempotencyKey)||!ct(e.at)){n.push(te("invalid-snapshot","audit identity is invalid",t));return}if(!ct(e.oldRevision)||!ct(e.newRevision)||!Array.isArray(e.reasonCodes)){n.push(te("invalid-snapshot","audit revisions are invalid",t));return}return{outcome:e.outcome,patchId:e.patchId,idempotencyKey:e.idempotencyKey,at:e.at,oldRevision:e.oldRevision,newRevision:e.newRevision,reasonCodes:e.reasonCodes.filter(r=>typeof r=="string"),changedIdentities:Array.isArray(e.changedIdentities)?e.changedIdentities:[],provenance:je(e.provenance)?e.provenance:{producer:"unknown"},patch:e.patch??null}}function Dy(e){if(!je(e))return{ok:!1,errors:[te("invalid-snapshot","snapshot must be an object")]};if(e.schemaVersion!==Oi)return{ok:!1,errors:[te("invalid-version","unknown snapshot schema version","schemaVersion")]};let t=xy(e.world,"world");if(!t.world)return{ok:!1,errors:t.errors};let n=[...t.errors??[]];Array.isArray(e.audit)||n.push(te("invalid-snapshot","audit must be an array","audit"));let r=[];if(Array.isArray(e.audit))for(let o=0;o<e.audit.length;o++){let s=Ty(e.audit[o],`audit[${o}]`,n);s&&r.push(s)}if(n.length)return{ok:!1,errors:n};let i={schemaVersion:Oi,world:t.world,audit:r};return e.graph!==void 0&&(i.graph=we(e.graph)),{ok:!0,snapshot:i}}function Oy(e={}){let t=e.persistence??Eu(),n=e.now??(()=>Date.now()),r=e.source??"world-patch",i={maxOperations:e.limits?.maxOperations??fy,maxDiagnostics:e.limits?.maxDiagnostics??my,maxEntities:e.limits?.maxEntities??gy,maxBytes:e.limits?.maxBytes??hy},o=new Set([...sy,...e.redact??[]]),s=new Set(e.capabilities??[]),a=e.graphPolicy??{},d=!1,m=[],l=[],h=[],S=null;function C(){if(d)throw new Error(dy)}function T(){let p=t.current();return{destroyed:d,revision:p.revision,entities:Su(p.entities),links:ku(p.links),acceptedPatchIds:p.accepted.map(I=>I.patchId),events:[...h],lastRejection:S?we(S):null}}function v(p,I){let c={type:p,payload:I,source:r,kind:p===Di?"diagnostic":"state"};l.push(c),h.push(p),e.onEvent?.(c),e.router?.publish(c)}function P(p){m.push(p)}function $(p){let I=Iy(p,i);if(!I.patch)return{ok:!1,errors:wi(I.errors,i.maxDiagnostics)};let c=I.patch,f=t.current(),y=f.accepted.find(V=>V.patchId===c.patchId);if(y&&!y.supersededBy)return{ok:!0,patch:c,next:we(f),changed:[],idempotent:!0};if(y?.supersededBy)return{ok:!1,patch:c,errors:[te("superseded",`patch "${c.patchId}" was superseded by "${y.supersededBy}"`)]};let A=f.accepted.find(V=>V.idempotencyKey===c.idempotencyKey&&!V.supersededBy);if(A&&A.patchId!==c.patchId)return{ok:!1,patch:c,errors:[te("idempotency-conflict",`idempotencyKey already used by patch "${A.patchId}"`,"idempotencyKey")]};if(c.supersedes&&!f.accepted.find(L=>L.patchId===c.supersedes))return{ok:!1,patch:c,errors:[te("missing-ref",`superseded patch "${c.supersedes}" is unknown`,"supersedes")]};let D=new Map(f.entities.map(V=>[V.id,V])),R=Cy(c,f,D,s),N=Ry(f,c.operations,i),q=wy(c,c.operations,f,e.content,e.bindings,e.assets),M=[...R,...N.errors,...q];if(!N.world)return{ok:!1,patch:c,errors:wi(M,i.maxDiagnostics)};let u=Mi({revision:f.revision+1,entities:N.world.entities.values(),links:N.world.links.values(),accepted:[...N.world.accepted.map(V=>c.supersedes&&V.patchId===c.supersedes?{...V,supersededBy:c.patchId}:V),{patchId:c.patchId,idempotencyKey:c.idempotencyKey,revision:f.revision+1,provenance:we(c.provenance)}]});(a.detectCycle?.(u)??(!a.allowCycles&&Ay(u.links)))&&M.push(te("cycle","patch would introduce a link cycle"));for(let V of e.domainValidators??[])M.push(...V({patch:c,current:f,preview:u}).map(L=>L.code?L:te("domain",L.detail,L.path)));if(M.length)return{ok:!1,patch:c,errors:wi(M,i.maxDiagnostics)};let x=c.supersedes?f.accepted.find(V=>V.patchId===c.supersedes):void 0;return{ok:!0,patch:c,next:u,changed:N.changed,supersede:x}}function j(p,I,c){let f=wi(p,i.maxDiagnostics);S=f;let y=t.current(),A=f[0]?.code??"invalid-schema";return I?(P({outcome:"rejected",patchId:I.patchId,idempotencyKey:I.idempotencyKey,at:n(),oldRevision:c?.oldRevision??y.revision,newRevision:c?.oldRevision??y.revision,reasonCodes:f.map(D=>D.code),changedIdentities:[],provenance:we(I.provenance),patch:we(I)}),v(bu,{patchId:I.patchId,reasonCode:A,revision:y.revision}),v(Di,{patchId:I.patchId,reasonCode:A,revision:y.revision})):v(Di,{reasonCode:A,revision:y.revision}),{ok:!1,errors:f,inspect:T()}}function O(p){if(!e.graph||!p)return[];let I=e.graph.restore(p);return I.ok?[]:I.errors.map(c=>te("graph-apply-failed",c.detail,c.path))}function F(p){let I=t.begin();I.applyWorldRevision(p),I.commit()}return{dryRun(p){C();let I=$(p);return I.ok?I.idempotent?{ok:!0,previewRevision:I.next.revision,changedIdentities:[],diagnostics:[]}:{ok:!0,previewRevision:I.next.revision,changedIdentities:I.changed,diagnostics:[]}:{ok:!1,errors:I.errors}},commit(p){C();let I=$(p);if(!I.ok)return j(I.errors,I.patch);let c=I.patch,f=t.current();if(I.idempotent)return{ok:!0,patchId:c.patchId,oldRevision:f.revision,newRevision:f.revision,changedIdentities:[],idempotent:!0,inspect:T()};let y=e.graph?.snapshot(),A=t.begin();try{if(A.applyWorldRevision(I.next),e.graph){let R=Py(e.graph,c.operations);if(R.length){try{A.rollback()}catch{}return F(f),O(y),j(R,c,{oldRevision:f.revision})}}A.commit()}catch(R){try{A.rollback()}catch{}return F(f),O(y),j([te("publish-failed",R instanceof Error?R.message:"persistence failed")],c,{oldRevision:f.revision})}let D={patchId:c.patchId,oldRevision:f.revision,newRevision:I.next.revision,changedIdentities:I.changed,producer:c.provenance.producer,jobId:c.provenance.jobId,contentRevisions:c.provenance.contentRevisions};try{t.publish?.(D),I.supersede&&(v(vu,{patchId:I.supersede.patchId,supersededBy:c.patchId,revision:I.next.revision}),P({outcome:"superseded",patchId:I.supersede.patchId,idempotencyKey:I.supersede.idempotencyKey,at:n(),oldRevision:f.revision,newRevision:I.next.revision,reasonCodes:["superseded"],changedIdentities:[],provenance:we(I.supersede.provenance),patch:{supersededBy:c.patchId}})),v(Ds,{patchId:D.patchId,oldRevision:D.oldRevision,newRevision:D.newRevision,producer:D.producer,jobId:D.jobId,contentRevisions:D.contentRevisions,changedIdentities:D.changedIdentities}),S=null,P({outcome:"accepted",patchId:c.patchId,idempotencyKey:c.idempotencyKey,at:n(),oldRevision:f.revision,newRevision:I.next.revision,reasonCodes:[],changedIdentities:I.changed,provenance:we(c.provenance),patch:we(c)})}catch(R){return F(f),O(y),j([te("publish-failed",R instanceof Error?R.message:"publication failed")],c,{oldRevision:f.revision})}return{ok:!0,patchId:c.patchId,oldRevision:f.revision,newRevision:I.next.revision,changedIdentities:I.changed,inspect:T()}},inspect(){return C(),T()},snapshot(){C();let p={schemaVersion:Oi,world:Mi(t.current()),audit:we(m)};return e.graph&&(p.graph=e.graph.snapshot()),p},restore(p){C();let I=Dy(p);if(!I.ok)return I;let c=t.current(),f=m,y=e.graph?.snapshot();try{if(F(I.snapshot.world),m=we(I.snapshot.audit),S=null,I.snapshot.graph){let A=O(I.snapshot.graph);if(A.length)return F(c),O(y),m=f,{ok:!1,errors:A}}return{ok:!0,snapshot:I.snapshot}}catch{return F(c),O(y),m=f,{ok:!1,errors:[te("invalid-snapshot","restore failed to persist")]}}},audit(p){C();let I=p?.redact!==!1,c=we(m);return I?Ts(c,o):c},events(){return C(),l.map(p=>we(p))},destroy(){d=!0,l.length=0,h.length=0}}}var br=1,Jt=1,Ms="content.revision.state.discovered",Au="content.revision.state.staging",wu="content.revision.state.validated",Pu="content.revision.state.rejected",_s="content.revision.state.activated",Ni="content.revision.state.rolled-back",_i="content.revision.state.superseded",Ns="content.revision.diagnostic.lifecycle";var My=["invalid-manifest","invalid-schema","invalid-version","invalid-snapshot","unknown-revision","unknown-adapter","hash-mismatch","capability-denied","pinned","staging-failed","activation-failed","health-check-failed","stale-health-check","superseded","destroyed","adapter-missing","asset-failed","unsigned"],yk=new Set(My),Ny="Content revision activator has been destroyed",_y=/^[0-9a-f]+$/i;function ue(e,t,n){return n?{code:e,detail:t,path:n}:{code:e,detail:t}}function Dt(e){return e!==null&&typeof e=="object"&&!Array.isArray(e)}function De(e){return typeof e=="string"&&e.length>0}function Ve(e){try{return JSON.parse(JSON.stringify(e))}catch{return e}}function Tt(e,t){return`${e}@${t}`}function Ly(e,t){return e.localeCompare(t,"en",{numeric:!0,sensitivity:"base"})>0}function yr(e,t){return e===t?!0:!e||!t?!1:e.bundleId===t.bundleId&&e.adapterId===t.adapterId}function jt(){return{version:1,fields:{contentId:{type:"string"},revision:{type:"string"},adapterId:{type:"string"},bundleId:{type:"string",optional:!0},reasonCode:{type:"string",optional:!0}}}}function Ut(e){if(!e.ok)throw new Error(e.errors.map(t=>t.detail).join("; "));return e.contract}function Vy(){return[Ut(ce(Ms,jt())),Ut(ce(Au,jt())),Ut(ce(wu,jt())),Ut(ce(Pu,jt())),Ut(ce(_s,jt())),Ut(ce(Ni,jt())),Ut(ce(_i,jt())),Ut(tt(Ns,jt()))]}function Ls(e){return typeof e=="string"&&e.length===64&&_y.test(e)}function Fy(e,t){return e===void 0?{ok:!0,fallback:void 0}:Dt(e)?!De(e.id)||!zn(e.kind)||!De(e.url)||!Ls(e.hash)||e.alg!=="sha256"?{ok:!1,errors:[ue("invalid-schema","fallback is missing id, kind, url, or sha256 hash",t)]}:{ok:!0,fallback:{id:e.id,kind:e.kind,url:e.url,hash:e.hash.toLowerCase(),alg:"sha256"}}:{ok:!1,errors:[ue("invalid-schema","fallback must be an object",t)]}}function Vs(e){if(!Dt(e))return{ok:!1,errors:[ue("invalid-manifest","catalog must be an object")]};let t=[];De(e.contentId)||t.push(ue("invalid-schema","contentId is required","contentId")),(!De(e.revision)||e.revision==="latest")&&t.push(ue("unknown-revision",'revision must be an exact id, not "latest"',"revision")),e.manifestVersion!==Jt&&t.push(ue("invalid-version",`manifestVersion must be ${Jt}`,"manifestVersion")),De(e.publisher)||t.push(ue("invalid-schema","publisher is required","publisher")),De(e.source)||t.push(ue("invalid-schema","source is required","source")),De(e.adapterId)||t.push(ue("invalid-schema","adapterId is required","adapterId")),(!Array.isArray(e.assets)||e.assets.length===0)&&t.push(ue("invalid-schema","assets must be a non-empty array","assets"));let n=[],r=new Set;if(Array.isArray(e.assets)&&e.assets.forEach((o,s)=>{let a=`assets[${s}]`;if(!Dt(o)){t.push(ue("invalid-schema","asset must be an object",a));return}if(!De(o.id)||!zn(o.kind)||!De(o.url)){t.push(ue("invalid-schema","asset needs id, kind, and url",a));return}if(!Ls(o.hash)||o.alg!=="sha256"){t.push(ue("hash-mismatch","asset hash must be sha256 hex",`${a}.hash`));return}if(r.has(o.id)){t.push(ue("invalid-schema",`duplicate asset id "${o.id}"`,`${a}.id`));return}r.add(o.id);let d=Fy(o.fallback,`${a}.fallback`);if(!d.ok){t.push(...d.errors);return}n.push({id:o.id,kind:o.kind,url:o.url,hash:o.hash.toLowerCase(),alg:"sha256",optional:o.optional===!0,fallback:d.fallback})}),t.length>0)return{ok:!1,errors:t};let i;if(e.signature!==void 0){if(!Dt(e.signature)||!De(e.signature.id)||!De(e.signature.alg))return{ok:!1,errors:[ue("unsigned","signature must include id and alg","signature")]};i={id:e.signature.id,alg:e.signature.alg}}return{ok:!0,catalog:{contentId:e.contentId,revision:e.revision,manifestVersion:Jt,publisher:e.publisher,source:e.source,adapterId:e.adapterId,assets:n,requestedGrants:Array.isArray(e.requestedGrants)?e.requestedGrants:void 0,capabilities:e.capabilities,signature:i}}}function $y(e,t){return{contentId:e.body.id,revision:e.body.cartVersion,manifestVersion:Jt,publisher:e.body.publisher,source:"remote",adapterId:t,assets:e.body.assets.map(n=>({id:n.id,kind:n.kind,url:n.url,hash:n.hash.toLowerCase(),alg:"sha256"})),requestedGrants:Oc(e),capabilities:e.body.capabilities,signature:{id:e.signature.keyId,alg:e.signature.alg}}}function Hy(e,t){return`https://registry.test/worlds/${e}/revisions/${t??"current"}.json`}function By(e){let t=e.id??"static",n=new Map,r=new Map;for(let o of e.revisions){let s=Vs({...o,adapterId:o.adapterId||t}),a=De(o.contentId)?o.contentId:"",d=De(o.revision)?o.revision:"";if(!(!a||!d))if(s.ok){let m={...s.catalog,adapterId:t,source:s.catalog.source||"static"};n.set(Tt(a,d),{ok:!0,catalog:m});let l=r.get(a);(!l||Ly(m.revision,l.revision))&&r.set(a,m)}else n.set(Tt(a,d),s)}let i=e.fetchBytes??(async o=>e.bytesByUrl[o]);return{id:t,hasRevision(o,s){return!!n.get(Tt(o,s))?.ok},async discover(o){let s=r.get(o);if(s)return{contentId:s.contentId,revision:s.revision,adapterId:t,publisher:s.publisher,source:s.source}},async loadRevision(o,s){let a=n.get(Tt(o,s));return a?a.ok?{ok:!0,catalog:Ve(a.catalog)}:a:{ok:!1,errors:[ue("unknown-revision",`static adapter has no ${o}@${s}`)]}},fetchBytes:i}}function qy(e){let t=e.id??"remote",n=e.catalogUrl??Hy,r=new Set((e.known??[]).map(s=>Tt(s.contentId,s.revision))),i=e.fetchBytes??(async s=>e.bytesByUrl?.[s]);async function o(s,a,d){let m=a!=="current",l;try{l=await e.fetch(n(s,m?a:void 0),d)}catch(v){return{ok:!1,errors:[ue("staging-failed",v instanceof Error?v.message:String(v))]}}let h=l;if(Dt(l)&&Dt(l.manifest)){if(De(l.world)&&l.world!==s)return{ok:!1,errors:[ue("invalid-manifest",`remote world "${String(l.world)}" does not match "${s}"`,"world")]};if(m&&De(l.revision)&&l.revision!==a)return{ok:!1,errors:[ue("unknown-revision",`remote revision "${String(l.revision)}" does not match "${a}"`,"revision")]};h=l.manifest}let S=await cs(h,e.keys,m?a:void 0);if(!S.ok)return{ok:!1,errors:S.errors.map(v=>ue(v.code,v.detail,v.path))};if(S.manifest.body.id!==s)return{ok:!1,errors:[ue("invalid-manifest",`signed id "${S.manifest.body.id}" does not match "${s}"`,"body.id")]};let C=$y(S.manifest,t);return r.add(Tt(C.contentId,C.revision)),Vs(C)}return{id:t,hasRevision(s,a){return r.has(Tt(s,a))},async discover(s){let a=await o(s,"current");if(a.ok)return{contentId:a.catalog.contentId,revision:a.catalog.revision,adapterId:t,publisher:a.catalog.publisher,source:a.catalog.source}},loadRevision:o,fetchBytes:i}}function Gy(e,t){return Dt(e)?!De(e.id)||!zn(e.kind)||!De(e.ref)||!Ls(e.hash)||!De(e.url)||typeof e.optional!="boolean"||typeof e.usedFallback!="boolean"?{ok:!1,errors:[ue("invalid-snapshot","resource fields are invalid",t)]}:{ok:!0,resource:{id:e.id,kind:e.kind,ref:e.ref,hash:e.hash.toLowerCase(),url:e.url,optional:e.optional,usedFallback:e.usedFallback}}:{ok:!1,errors:[ue("invalid-snapshot","resource must be an object",t)]}}function Os(e,t){if(e===null)return{ok:!0,bundle:null};if(!Dt(e))return{ok:!1,errors:[ue("invalid-snapshot","bundle must be an object or null",t)]};if(!De(e.contentId)||!De(e.revision)||e.revision==="latest")return{ok:!1,errors:[ue("unknown-revision","snapshot bundle must record an exact revision",`${t}.revision`)]};if(e.manifestVersion!==Jt)return{ok:!1,errors:[ue("invalid-version",`bundle manifestVersion must be ${Jt}`,`${t}.manifestVersion`)]};if(!De(e.publisher)||!De(e.source)||!De(e.adapterId)||!De(e.bundleId))return{ok:!1,errors:[ue("invalid-snapshot","bundle identity is incomplete",t)]};if(!Dt(e.resources))return{ok:!1,errors:[ue("invalid-snapshot","bundle resources must be an object",`${t}.resources`)]};let n={};for(let[i,o]of Object.entries(e.resources)){let s=Gy(o,`${t}.resources.${i}`);if(!s.ok)return s;if(s.resource.id!==i)return{ok:!1,errors:[ue("invalid-snapshot",`resource key "${i}" does not match id`,`${t}.resources.${i}`)]};n[i]=s.resource}let r;if(e.signature!==void 0){if(!Dt(e.signature)||!De(e.signature.id)||!De(e.signature.alg))return{ok:!1,errors:[ue("invalid-snapshot","signature must include id and alg",`${t}.signature`)]};r={id:e.signature.id,alg:e.signature.alg}}return{ok:!0,bundle:{bundleId:e.bundleId,contentId:e.contentId,revision:e.revision,manifestVersion:Jt,publisher:e.publisher,source:e.source,adapterId:e.adapterId,signature:r,resources:n}}}function Ky(e){let t=e;if(typeof e=="string")try{t=JSON.parse(e)}catch{return{ok:!1,errors:[ue("invalid-snapshot","snapshot JSON is not parseable")]}}if(!Dt(t))return{ok:!1,errors:[ue("invalid-snapshot","snapshot must be an object")]};if(t.schemaVersion!==br)return{ok:!1,errors:[ue("invalid-version",`snapshot schema must be ${br}`,"schemaVersion")]};if(typeof t.pinned!="boolean")return{ok:!1,errors:[ue("invalid-snapshot","pinned must be a boolean","pinned")]};let n=Os(t.active,"active");if(!n.ok)return n;let r=Os(t.lastKnownGood,"lastKnownGood");if(!r.ok)return r;let i=Os(t.previous,"previous");return i.ok?{ok:!0,snapshot:{schemaVersion:br,pinned:t.pinned,active:n.bundle,lastKnownGood:r.bundle,previous:i.bundle}}:i}function Wy(e,t,n){return{id:e.id,kind:e.kind,ref:t.ref,hash:n&&e.fallback?e.fallback.hash:e.hash,url:t.url,optional:e.optional===!0,usedFallback:n}}function jy(e){let t=[...e.adapters],n=e.grants??Dn(),r=new Map,i=e.pin===!0,o=!1,s=null,a=null,d=null,m=null,l=null,h=[],S=0,C=null;function T(){if(o)throw new Error(Ny)}function v(c){return c?t.find(f=>f.id===c):t[0]}function P(c,f,y){return(y?t.filter(D=>D.id===y):t).some(D=>D.hasRevision(c,f))}function $(c,f){h.push(c);let y=c.includes(".diagnostic.")?"diagnostic":"state",A={type:c,kind:y,payload:Ve(f)};e.onEvent?.(A),e.router?.publish(A)}function j(c,f){return l=c.map(y=>Ve(y)),$(Pu,{...f,reasonCode:c[0]?.code}),$(Ns,{...f,reasonCode:c[0]?.code}),{ok:!1,errors:l}}function O(){return{destroyed:o,pinned:i,active:Ve(s),lastKnownGood:Ve(a),staging:m?Ve(m):null,events:[...h],lastRejection:l?Ve(l):null}}async function F(c,f,y){if(c.requestedGrants){for(let x of c.requestedGrants)if(!n.has(x))return{ok:!1,errors:[ue("capability-denied",`host did not grant "${x}"`,"requestedGrants")]}}if(c.capabilities){let x=e.hostCapabilities??{contractVersion:1,features:[],integrations:[],grants:n.list()},V=ii(c.capabilities,{...x,grants:n.list()});if(!V.ok)return{ok:!1,errors:V.errors.map(L=>ue(L.code==="missing-grant"||L.code==="capability-denied"||L.code==="ungranted-capability"?"capability-denied":"invalid-schema",L.detail,L.path))}}let A={},D=[];for(let x of c.assets)A[x.url]={url:x.url,hash:x.hash,alg:"sha256"},x.fallback&&(A[x.fallback.url]={url:x.fallback.url,hash:x.fallback.hash,alg:"sha256"}),D.push({id:x.id,ref:x.url,type:x.kind,integrity:`sha256-${x.hash}`,provenance:{contentId:c.contentId,revision:c.revision,publisher:c.publisher,adapterId:c.adapterId},fallback:x.fallback?{id:x.id,ref:x.fallback.url,type:x.fallback.kind,integrity:`sha256-${x.fallback.hash}`}:void 0});let R=Br({declared:A,fetchBytes:async x=>{if(y.aborted)return;let V=Object.values(A).find(B=>B.url===x);if(!V)return;let W=r.get(V.hash)??await f.fetchBytes(x,y);if(!W||y.aborted)return;let U=await bi(W);if(U!==V.hash)throw Me({id:"",ref:x,code:"hash-mismatch",message:`hash mismatch for "${x}"`});return r.set(U,W),W},hashBytes:bi}),N=vn({resolver:R,emitEvents:!1,wallClockTimeout:!1});if(y.aborted)return N.dispose(),{ok:!1,errors:[ue("superseded","staging aborted")]};let q=()=>{N.abort(),N.dispose()};y.addEventListener("abort",q,{once:!0});let M;try{M=await N.preload(D)}finally{y.removeEventListener("abort",q),N.dispose()}if(y.aborted)return{ok:!1,errors:[ue("superseded","staging aborted")]};let u={},b=[];for(let x of c.assets){let V=M.items[x.id];if(V?.state==="ready"){u[x.id]=Wy(x,V.resource,V.resource.usedFallback===!0||!!V.failure);continue}if(x.optional)continue;let L=V?.state==="failed"?V.failure:M.failures.find(W=>W.id===x.id);b.push(ue(L?.code==="hash-mismatch"?"hash-mismatch":"asset-failed",L?.message??`required asset "${x.id}" failed`,x.id))}return b.length>0?{ok:!1,errors:b}:{ok:!0,bundle:{bundleId:Tt(c.contentId,c.revision),contentId:c.contentId,revision:c.revision,manifestVersion:Jt,publisher:c.publisher,source:c.source,adapterId:c.adapterId,signature:c.signature,resources:u}}}function w(c,f,y){return $(Ns,{...c,reasonCode:f}),{ok:!1,errors:[ue("stale-health-check",y)]}}async function p(c,f){let y=Ve(c),A=s;s=y;let D=!0;try{D=e.healthCheck?await e.healthCheck(y):!0}catch(R){return yr(s,y)?(s=A,$(Ni,{...f,revision:A?.revision??"",reasonCode:"activation-failed"}),j([ue("activation-failed",R instanceof Error?R.message:String(R))],f)):w(f,"stale-health-check","stale health check ignored; a newer revision is active")}return D?yr(s,y)?(d=A,a=Ve(s),l=null,$(_s,f),{ok:!0,bundle:Ve(s)}):w(f,"stale-health-check","stale health check ignored; a newer revision is active"):yr(s,y)?(s=A,$(Ni,{...f,revision:A?.revision??"",reasonCode:"health-check-failed"}),j([ue("health-check-failed","post-activation health check failed")],f)):w(f,"stale-health-check","stale health check ignored; a newer revision is active")}let I={pin(c=!0){T(),i=c},unpin(){T(),i=!1},isPinned(){return T(),i},async discover(c,f){T();let y=v(f);if(!y)return;let A=await y.discover(c);return A&&$(Ms,{contentId:A.contentId,revision:A.revision,adapterId:A.adapterId,bundleId:Tt(A.contentId,A.revision)}),A?Ve(A):void 0},async activate(c){T();let f=v(c.adapterId);if(!f)return j([ue("unknown-adapter",`unknown adapter "${String(c.adapterId)}"`)],{contentId:c.contentId,revision:c.revision??"",adapterId:c.adapterId??""});let y=c.revision;if(!y){let N=await f.discover(c.contentId);y=N?.revision,N&&$(Ms,{contentId:N.contentId,revision:N.revision,adapterId:N.adapterId,bundleId:Tt(N.contentId,N.revision)})}if(!De(y)||y==="latest")return j([ue("unknown-revision","activation requires an exact revision")],{contentId:c.contentId,revision:String(y??""),adapterId:f.id});let A={contentId:c.contentId,revision:y,adapterId:f.id,bundleId:Tt(c.contentId,y)};if(s&&s.contentId===c.contentId&&s.revision===y&&s.adapterId===f.id)return{ok:!0,bundle:Ve(s),idempotent:!0};if(i&&s)return j([ue("pinned","activator is pinned; live revision movement is frozen")],A);let D=++S;C?.abort();let R=new AbortController;C=R,m={contentId:c.contentId,revision:y,adapterId:f.id,bundleId:A.bundleId},$(Au,A);try{let N=await f.loadRevision(c.contentId,y,R.signal);if(D!==S||R.signal.aborted)return $(_i,A),{ok:!1,errors:[ue("superseded",`revision ${y} was superseded`)]};if(!N.ok)return j(N.errors,A);let q=N.catalog,M=Vs(q);if(!M.ok)return j(M.errors,A);let u=await F(M.catalog,f,R.signal);return D!==S||R.signal.aborted?($(_i,A),{ok:!1,errors:[ue("superseded",`revision ${y} was superseded`)]}):u.ok?($(wu,A),D!==S||R.signal.aborted?($(_i,A),{ok:!1,errors:[ue("superseded",`revision ${y} was superseded`)]}):await p(u.bundle,A)):j(u.errors,A)}finally{D===S&&(m=null,C===R&&(C=null))}},rollback(){T();let c=d??a;if(yr(s,c))return{ok:!0,bundle:Ve(s),idempotent:!0};if(i)return{ok:!1,errors:[ue("pinned","activator is pinned; live revision movement is frozen")]};let f=s;return s=Ve(c),a=Ve(c),d=Ve(c),$(Ni,{contentId:s?.contentId??f?.contentId??"",revision:s?.revision??"",adapterId:s?.adapterId??f?.adapterId??"",bundleId:s?.bundleId,reasonCode:"rolled-back"}),{ok:!0,bundle:Ve(s)}},inspect(){return T(),O()},activeBundle(){return T(),Ve(s)},snapshot(){return T(),{schemaVersion:br,pinned:i,active:Ve(s),lastKnownGood:Ve(a),previous:Ve(d)}},restore(c){T();let f=Ky(c);if(!f.ok)return f;let y=f.snapshot,A=[y.active,y.lastKnownGood,y.previous];for(let D of A)if(D&&!P(D.contentId,D.revision,D.adapterId))return{ok:!1,errors:[ue("unknown-revision",`unknown revision ${D.contentId}@${D.revision}`,"revision")]};return i&&!yr(s,y.active)?{ok:!1,errors:[ue("pinned","activator is pinned; live revision movement is frozen")]}:(i=y.pinned,s=Ve(y.active),a=Ve(y.lastKnownGood),d=Ve(y.previous),l=null,{ok:!0,snapshot:I.snapshot()})},provenance(){if(T(),!!s)return{source:s.source,publisher:s.publisher,version:s.revision,signature:s.signature}},destroy(){o=!0,C?.abort(),C=null,m=null}};return I}function Uy(e,t){return{width:e,height:t,data:new Uint8ClampedArray(e*t*4),colorSpace:"srgb"}}function Jy(){return{putImageData:()=>{}}}function zy(e,t,n,r={}){let i=r.frames??30,o=r.warmupFrames??5,s=r.frameStepMs??1e3/60,a=r.width??1920,d=r.height??1080,m=r.tokenId??"18009999",l=new Bt({hash:t,tokenId:m}),h=Cr(a,d),S=new Ar,C=e.getDefaultFeatureState?.(l,h,n,S),T=e.getDefaultState(l,h,n,S,void 0,void 0,void 0,C);r.prepareState?.(T,C);let v=Uy(a,d),P=r.drawingContext??Jy(),$=typeof e.render=="function",j=null,O=null,F=0,w=0,p=0,I=0,c=0;for(let R=1;R<=o+i;R++){let N=F+R*s,q=Bn(N,F,j,O),M=performance.now();e.update(l,R,n,h,T,S,void 0,void 0,q,C);let u=performance.now(),b=0;if($){let V=Bn(N,F,j,O);e.render(l,R,n,h,T,P,v,void 0,void 0,V,C),b=performance.now()-u}let x=u-M;j=N,O=N,R>o&&(w+=x,p+=b,x>I&&(I=x),b>c&&(c=b))}S.destroy();let f=w+p,y=w/i,A=p/i,D=f/i;return{frames:i,updateAvgMs:y,renderAvgMs:A,totalAvgMs:D,updateMaxMs:I,renderMaxMs:c,estFps:D>0?1e3/D:1/0,updatePct:f>0?100*w/f:0,renderPct:f>0?100*p/f:0}}function Yy(e,t=2){let n=r=>Number.isFinite(r)?Number(r.toFixed(t)):r;return{frames:e.frames,updateAvgMs:n(e.updateAvgMs),renderAvgMs:n(e.renderAvgMs),totalAvgMs:n(e.totalAvgMs),updateMaxMs:n(e.updateMaxMs),renderMaxMs:n(e.renderMaxMs),estFps:n(e.estFps),updatePct:n(e.updatePct),renderPct:n(e.renderPct)}}var Fs={width:320,height:180,deviceScaleFactor:1},Xy="Browser harness has been destroyed";function Qy(e){return typeof CSS<"u"&&typeof CSS.escape=="function"?CSS.escape(e):e.replace(/([\0-\x1f\x7f!"#$%&'()*+,./:;<=>?@[\\\]^`{|}~])/g,"\\$1")}function $s(e){return{...e,visibleNormalizedRect:{...e.visibleNormalizedRect}}}function Hs(e){return e===void 0?void 0:JSON.parse(JSON.stringify(e))}function Bs(e,t,n){Object.defineProperty(e,"clientWidth",{value:t,configurable:!0}),Object.defineProperty(e,"clientHeight",{value:n,configurable:!0})}function qs(e,t,n,r,i){let o={x:t,y:n,width:r,height:i,top:n,left:t,right:t+r,bottom:n+i,toJSON(){return this}};e.getBoundingClientRect=()=>o}function xu(e){return!e||!(e instanceof HTMLElement)||e===document.body?{tag:"body",id:"",role:null,name:""}:{tag:e.tagName.toLowerCase(),id:e.id,role:e.getAttribute("role"),name:e.getAttribute("aria-label")??e.textContent?.trim()??""}}function Zy(e){return e.querySelector("[aria-live]")?.textContent??""}function Tu(e,t,n){let r={bubbles:!0,cancelable:!0,clientX:t,clientY:n},i=globalThis.PointerEvent;typeof i=="function"?(e.dispatchEvent(new i("pointerdown",{...r,pointerId:1,pointerType:"mouse",buttons:1})),e.dispatchEvent(new i("pointerup",{...r,pointerId:1,pointerType:"mouse",buttons:0}))):(e.dispatchEvent(new MouseEvent("mousedown",r)),e.dispatchEvent(new MouseEvent("mouseup",r))),e.dispatchEvent(new MouseEvent("click",r))}function eb(e,t,n){let r=Array.from(e.querySelectorAll("*")),i=null,o=Number.POSITIVE_INFINITY;for(let s of r){if(!(s instanceof HTMLElement))continue;let a=s.getBoundingClientRect();if(t>=a.left&&t<a.right&&n>=a.top&&n<a.bottom){let d=Math.max(1,a.width*a.height);d<=o&&(i=s,o=d)}}return i??e}function Du(e){let t=window.matchMedia;return window.matchMedia=n=>({matches:e&&/prefers-reduced-motion:\s*reduce/i.test(n),media:n,onchange:null,addListener(){},removeListener(){},addEventListener(){},removeEventListener(){},dispatchEvent(){return!1}}),()=>{window.matchMedia=t}}function Ou(e={}){let t=e.seed??`0x${"00".repeat(32)}`,n=Hs(e.geometry),r=e.semanticLayers,i=e.viewport?.width??Fs.width,o=e.viewport?.height??Fs.height,s=e.viewport?.deviceScaleFactor??Fs.deviceScaleFactor,a=e.reducedMotion===!0,d=e.inputModality??"pointer",m=e.origin??0,l=e.fit??"contain",h=Object.getOwnPropertyDescriptor(window,"devicePixelRatio"),S=Object.getOwnPropertyDescriptor(window,"innerWidth"),C=Object.getOwnPropertyDescriptor(window,"innerHeight"),T=Du(a),v=()=>{Object.defineProperty(window,"devicePixelRatio",{value:s,configurable:!0}),Object.defineProperty(window,"innerWidth",{value:i,configurable:!0}),Object.defineProperty(window,"innerHeight",{value:o,configurable:!0})};v();let P=document.createElement("div");P.setAttribute("data-cyberart-browser-harness",""),P.style.position="relative",P.style.overflow="auto",P.tabIndex=-1,document.body.appendChild(P);let $=[],j=[],O=!1,F=0,w=e.createId??(()=>`br-${++F}`),p=()=>Jd({contentWidth:e.contentWidth??i,contentHeight:e.contentHeight??o,viewportWidth:i,viewportHeight:o,mode:l,devicePixelRatio:s}),I=p(),c=()=>Math.max(1,Math.round(i*s)),f=()=>Math.max(1,Math.round(o*s)),y=B=>{n=Hs(B)},A=(B,g)=>{let k=n?.regions.find(_=>_.id===B);if(!k)return;let E=zd(k,I);if(E)return g.style.position=g.style.position||"absolute",g.style.left=`${E.x}px`,g.style.top=`${E.y}px`,g.style.width=`${E.width}px`,g.style.height=`${E.height}px`,qs(g,E.x,E.y,E.width,E.height),{...E}},D=()=>{I=p(),P.style.width=`${i}px`,P.style.height=`${o}px`,Bs(P,i,o),qs(P,0,0,i,o),P.dataset.inputModality=d,P.dataset.reducedMotion=a?"true":"false",v()};D();let R=()=>({root:P,get layout(){return $s(I)},get reducedMotion(){return a},get inputModality(){return d},placeRegion:A,setGeometry(B){y(B)}}),N=e.mount?.(R())??{},q=N.participants??[],M,u,b=()=>{};if(q.length>0){for(let B of q)B.container&&Bs(B.container,c(),f());M=jr({origin:m,width:c(),height:f(),createId:w,now:()=>m,participants:q.map(B=>({...B,seed:B.seed??t,width:B.width??c(),height:B.height??f()}))}),b=M.router.subscribe(["*.*","*.*.*","*.*.*.*","*.*.*.*.*",$t],B=>{j.push(B)}),N.compositor&&(u=jd({...N.compositor,group:M,width:i,height:o,dpr:s}))}let x=()=>({...R(),group:M,compositor:u,publish(B){if(!M)throw new Error("Browser harness: publish requires mounted carts");return M.publish(B)}}),V=()=>{if(D(),M){let B=c(),g=f();for(let k of q){k.container&&(Bs(k.container,B,g),k.container.style.width=`${i}px`,k.container.style.height=`${o}px`);try{let E=M.participant(k.id).cart.canvas;E&&(E.style.width=`${i}px`,E.style.height=`${o}px`,qs(E,0,0,i,o))}catch{}}}},L=()=>{if(O)throw new Error(Xy)};V(),N.ready?.(x());let W=(B,g,k)=>{if($.push({type:"click",x:B,y:g,...k?{selector:k}:{}}),k){let Q=P.querySelector(k);if(!(Q instanceof HTMLElement))throw new Error(`No element matches ${k}`);Tu(Q,B,g);return}let E=n?new Set(n.regions.map(Q=>Q.id)):void 0,_=r?r.hitTest(wn({x:B,y:g},I)):void 0,G=_&&(!E||E.has(_.id))?_:void 0,Z=G===void 0&&n!==void 0?di({x:B,y:g},I,n,{space:"css"}):G?{id:G.id}:void 0,ne=(Z?P.querySelector(`#${Qy(Z.id)}`):null)??eb(P,B,g);Tu(ne,B,g)};return{root:P,get group(){return M},get compositor(){return u},get layout(){return $s(I)},get events(){return j.slice()},get geometry(){return Hs(n)},goto(){L()},setGeometry(B){L(),y(B),N.relayout?.(x())},setViewport(B,g,k){L(),i=Math.max(1,B|0),o=Math.max(1,g|0),k!==void 0&&(s=k>0?k:1),$.push({type:"viewport",width:i,height:o,dpr:s}),u?u.resize(i,o,s):M&&M.resize(c(),f()),V(),N.relayout?.(x())},setReducedMotion(B){L(),a=B,T(),T=Du(a),$.push({type:"reducedMotion",value:B}),V(),N.relayout?.(x())},setInputModality(B){L(),d=B,$.push({type:"inputModality",value:B}),V()},click(B,g){if(L(),typeof B=="string"){let k=P.querySelector(B);if(!(k instanceof HTMLElement))throw new Error(`No element matches ${B}`);let E=k.getBoundingClientRect();W(E.left+E.width/2,E.top+E.height/2,B);return}if(g===void 0)throw new Error("click(x, y) requires a y coordinate");W(B,g)},key(B){L(),$.push({type:"key",key:B}),(document.activeElement instanceof HTMLElement?document.activeElement:P).dispatchEvent(new KeyboardEvent("keydown",{key:B,bubbles:!0,cancelable:!0}))},focus(B){L();let g=P.querySelector(B);if(!(g instanceof HTMLElement))throw new Error(`No element matches ${B}`);g.focus()},async step(B=1){L(),$.push({type:"step",frames:B}),M&&await M.step(B)},async advance(B){L(),$.push({type:"advance",ms:B}),M&&await M.step(Math.max(0,Math.round(B/1e3*30)))},screenshot(){if(L(),u){let B=u.captureComposedFrame();return{imageData:B.imageData,pngDataUrl:B.pngDataUrl,html:P.outerHTML,declaredOrder:B.declaredOrder.map(g=>g.id)}}return{imageData:null,pngDataUrl:null,html:P.outerHTML,declaredOrder:[]}},accessibilitySnapshot(){return L(),{focus:xu(document.activeElement),live:Zy(P),html:P.outerHTML,publishedRegions:(r?.inspectPublished()??[]).map(B=>({id:B.id,geometryKinds:[...B.geometryKinds],name:B.a11y?.name??null,role:B.a11y?.role??null}))}},async inspect(){L();let B={},g={},k=0;if(M){let E=await M.inspect();for(let _ of E.diagnostics.participantIds)B[_]=M.participant(_).events.slice(),g[_]=E.participants[_]?.state,k=E.diagnostics.clocks[_]?.framesElapsed??k}return{host:N.hostState?.()??null,layout:$s(I),events:j.slice(),participantEvents:B,state:g,focus:xu(document.activeElement),publishedRegions:(r?.inspectPublished()??[]).map(E=>({id:E.id,geometryKinds:[...E.geometryKinds],name:E.a11y?.name??null,role:E.a11y?.role??null})),scrollTop:P.scrollTop,clock:{framesElapsed:k}}},reproduction(){return L(),{seed:t,viewport:{width:i,height:o,dpr:s},reducedMotion:a,inputModality:d,actions:$.map(B=>({...B}))}},captureComposedFrame(){if(L(),!u)throw new Error("Browser harness: captureComposedFrame requires a compositor");return u.captureComposedFrame()},destroy(){if(!O){O=!0,b(),document.activeElement instanceof HTMLElement&&P.contains(document.activeElement)&&document.activeElement.blur();try{N.destroy?.()}finally{try{u?.destroy()}finally{try{M?.destroy()}finally{P.remove(),T(),h&&Object.defineProperty(window,"devicePixelRatio",h),S&&Object.defineProperty(window,"innerWidth",S),C&&Object.defineProperty(window,"innerHeight",C)}}}}}}}var js=1,Vi=1,Js="production.scenario.state.observed",Fi="production.scenario.state.failed",zs="production.scenario.diagnostic.lifecycle",tb=[Js,Fi,zs],Fu=["input","reducer","routing","binding","cue","pixels","caption","audio","save-replay"],nb=["invalid-scenario","invalid-schema","unknown-field","missing-field","callbacks-forbidden","missing-participant","missing-layer","destroyed","assertion-failed","invalid-host-audio","invalid-audio-sidecar","invalid-visual-sidecar","invalid-semantic-sidecar","invalid-binding-sidecar","invalid-sequence-sidecar","invalid-host-sidecar","unsupported-preference","invalid-geometry","ambiguous-geometry","stale-geometry"],$u=["invoked","completed","failed","skipped","fallback"],rb=["desktop","mobile"],$i={desktop:{width:64,height:48,deviceScaleFactor:1},mobile:{width:48,height:64,deviceScaleFactor:2}},ib="Production scenario runner has been destroyed",Wk=new Set(tb),jk=new Set(nb),Uk=new Set(Fu),ob=new Set($u),sb=new Set(["invoked","completed"]),Hu=new Set(rb),ab=new Set(["id","schemaVersion","seed","required","matrix","steps"]),db=new Set(["participants","layers"]),cb=new Set(["viewport","width","height","dpr","reducedMotion","mute","failedAssetIds","fallback","inputModality"]),ub=new Set(["click","key","focus","step","viewport","reducedMotion","mute","failAsset","save","reload","replay"]),Bu="continue",lb=["browser","visual","sequence","audio","semantic"];function $e(e,t,n,r){let i={code:e,detail:t};return n&&(i.path=n),r&&(i.boundary=r),i}function Be(e){return!!e&&typeof e=="object"&&!Array.isArray(e)}function ze(e){return typeof e=="string"&&e.length>0}function He(e){return JSON.parse(JSON.stringify(e))}function Us(e,t,n){if(typeof e=="function"){n.push($e("callbacks-forbidden","authored scenarios must not contain callbacks",t));return}if(Array.isArray(e)){e.forEach((r,i)=>Us(r,`${t}[${i}]`,n));return}if(Be(e))for(let[r,i]of Object.entries(e))Us(i,t?`${t}.${r}`:r,n)}function Gs(e,t,n,r){for(let i of Object.keys(e))t.has(i)||r.push($e("unknown-field",`unknown field "${i}"`,n?`${n}.${i}`:i))}function Mu(e,t,n){if(!Array.isArray(e))return n.push($e("invalid-schema","must be an array of strings",t)),[];let r=[];return e.forEach((i,o)=>{if(!ze(i)){n.push($e("invalid-schema","id must be a non-empty string",`${t}[${o}]`));return}r.push(i)}),r}function Ks(){return{version:1,fields:{scenarioId:{type:"string"},seed:{type:"string",optional:!0},boundary:{type:"string",optional:!0},reason:{type:"string",optional:!0},code:{type:"string",optional:!0},missing:{type:"array",optional:!0}}}}function Ws(e){if(!e.ok)throw new Error(e.errors.map(t=>t.detail).join("; "));return e.contract}function pb(){return[Ws(ce(Js,Ks())),Ws(ce(Fi,Ks())),Ws(tt(zs,Ks()))]}function qu(e){return typeof e=="string"&&ob.has(e)}function fb(e,t,n){if(!Be(e)||!ze(e.type)){n.push($e("invalid-schema","step.type is required",t));return}if(!ub.has(e.type)){n.push($e("unknown-field",`unknown step type "${e.type}"`,`${t}.type`));return}let r=n.length,i=a=>{ze(e[a])||n.push($e("missing-field",`${e.type} step requires ${a}`,`${t}.${a}`))},o=a=>{(typeof e[a]!="number"||!Number.isFinite(e[a]))&&n.push($e("missing-field",`${e.type} step requires numeric ${a}`,`${t}.${a}`))},s=a=>{typeof e[a]!="boolean"&&n.push($e("missing-field",`${e.type} step requires boolean ${a}`,`${t}.${a}`))};switch(e.type){case"click":{let a=ze(e.selector),d=typeof e.x=="number"&&typeof e.y=="number";!a&&!d&&n.push($e("missing-field","click step requires selector or x and y",t));break}case"key":i("key");break;case"focus":i("selector");break;case"step":o("frames");break;case"viewport":{let a=e.kind!==void 0;a&&!Hu.has(String(e.kind))&&n.push($e("invalid-schema","viewport.kind must be desktop or mobile",`${t}.kind`));let d=typeof e.width=="number"&&typeof e.height=="number";!a&&!d&&n.push($e("missing-field","viewport step requires kind or width and height",t));break}case"reducedMotion":case"mute":s("value");break;case"failAsset":i("assetId");break;default:break}if(n.length===r)return He(e)}function Gu(e){let t=[];if(Us(e,"",t),!Be(e))return{ok:!1,errors:[$e("invalid-scenario","scenario must be an object")]};if(Gs(e,ab,"",t),ze(e.id)||t.push($e("missing-field","id is required","id")),e.schemaVersion!==js&&t.push($e("invalid-schema","schemaVersion must be 1","schemaVersion")),ze(e.seed)||t.push($e("missing-field","seed is required","seed")),!Be(e.required))t.push($e("missing-field","required participants and layers are required","required"));else{Gs(e.required,db,"required",t);let o=Mu(e.required.participants,"required.participants",t),s=Mu(e.required.layers,"required.layers",t);o.length===0&&t.push($e("missing-field","required.participants must not be empty","required.participants")),s.length===0&&t.push($e("missing-field","required.layers must not be empty","required.layers"))}let n;e.matrix!==void 0&&(Be(e.matrix)?(Gs(e.matrix,cb,"matrix",t),e.matrix.viewport!==void 0&&!Hu.has(String(e.matrix.viewport))&&t.push($e("invalid-schema","matrix.viewport must be desktop or mobile","matrix.viewport")),n=He(e.matrix)):t.push($e("invalid-schema","matrix must be an object","matrix")));let r;if(e.steps!==void 0&&(Array.isArray(e.steps)?(r=[],e.steps.forEach((o,s)=>{let a=fb(o,`steps[${s}]`,t);a&&r.push(a)})):t.push($e("invalid-schema","steps must be an array","steps"))),t.length>0)return{ok:!1,errors:t};let i={id:e.id,schemaVersion:js,seed:e.seed,required:{participants:[...e.required.participants],layers:[...e.required.layers]}};return n&&(i.matrix=n),r&&(i.steps=r),{ok:!0,scenario:i}}function dn(e){let t=typeof e=="string"?new TextEncoder().encode(e):e,n=2166136261;for(let r=0;r<t.length;r++)n^=t[r],n=Math.imul(n,16777619);return(n>>>0).toString(16).padStart(8,"0")}function vr(e){return JSON.stringify(e)}function Li(e,t){let n=new Set(t);return e.filter(r=>!n.has(r))}function Ku(e,t={}){let n=(r,i,o)=>({boundary:r,code:i,detail:o});if(t.inputDispatched===!0&&!e.inputDispatched)return n("input","assertion-failed","input was not dispatched");if(t.reducerAccepted===!0&&e.reducerAccepted!==!0)return n("reducer","assertion-failed","host reducer did not accept");if(t.reducerRejected===!0&&e.reducerRejected!==!0)return n("reducer","assertion-failed","host reducer did not reject");if(t.routedTypes){for(let r of t.routedTypes)if(!e.routedTypes.includes(r))return n("routing","assertion-failed",`missing routed type "${r}"`)}if(t.requiredParticipantsPresent===!0&&!e.requiredParticipantsPresent)return n("routing","missing-participant",`missing participants: ${e.missingParticipants.join(", ")}`);if(t.selectedBindingIds){for(let r of t.selectedBindingIds)if(!e.selectedBindingIds.includes(r))return n("binding","assertion-failed",`missing binding "${r}"`)}if(t.sequenceId&&e.sequenceId!==t.sequenceId)return n("cue","assertion-failed",`expected sequence "${t.sequenceId}"`);if(t.requiredLayersPresent===!0&&!e.requiredLayersPresent)return n("pixels","missing-layer",`missing layers: ${e.missingLayers.join(", ")}`);if(t.captions){for(let r of t.captions)if(!e.captions.includes(r))return n("caption","assertion-failed",`missing caption "${r}"`)}return t.audioInvoked===!0&&!e.audioInvoked?n("audio","assertion-failed","audio was not invoked"):t.audioFailed===!0&&!e.audioFailed?n("audio","assertion-failed","audio did not fail as required"):t.audioRestoreOk===!0&&e.audioRestoreOk!==!0?n("audio","invalid-audio-sidecar","audio sidecar was not restored"):t.snapshotOk===!0&&e.snapshotOk!==!0?n("save-replay","assertion-failed","snapshot was not valid"):t.replayMatch===!0&&e.replayMatch!==!0?n("save-replay","assertion-failed","replay traces did not match"):null}function mb(e){let t=e?.viewport==="mobile"?"mobile":"desktop",n=$i[t];return{preset:t,viewport:{width:e?.width??n.width,height:e?.height??n.height,deviceScaleFactor:e?.dpr??n.deviceScaleFactor}}}function gb(e){return{type:"host.intent.select",kind:"intent",payload:{id:e}}}function hb(e){return{type:"host.intent.key",kind:"intent",payload:{key:e}}}function Sr(e){return{boundary:"audio",code:"invalid-host-audio",detail:e}}function Nu(e){return!!e&&typeof e=="object"&&typeof e.setReducedMotion=="function"}function yb(e){return!!e&&typeof e=="object"&&typeof e.setReducedSensory=="function"}function bb(e){if(!Be(e)||!qu(e.kind))return null;let t={kind:e.kind};return typeof e.atFrame=="number"&&Number.isFinite(e.atFrame)&&(t.atFrame=e.atFrame),ze(e.name)&&(t.name=e.name),typeof e.caption=="string"&&(t.caption=e.caption),ze(e.assetId)&&(t.assetId=e.assetId),ze(e.reason)&&(t.reason=e.reason),ze(e.id)&&(t.id=e.id),ze(e.correlationId)&&(t.correlationId=e.correlationId),ze(e.causationId)&&(t.causationId=e.causationId),t}function _u(e){let t=[];for(let n of e.captions??[])typeof n=="string"&&n.length>0&&!t.includes(n)&&t.push(n);for(let n of e.events)n.caption&&n.caption.length>0&&!t.includes(n.caption)&&t.push(n.caption);return t}function vb(e){if(e===void 0)return{ok:!0,supplied:!1,snapshot:{events:[]}};if(!Be(e))return{ok:!1,error:Sr("hostAudio must be an object")};let t=e.snapshot,n=e.collect,r=e.inspect,i=typeof t=="function";if(!i&&!(typeof n=="function"))return{ok:!1,error:Sr("hostAudio requires snapshot() or collect()")};try{typeof r=="function"&&r.call(e);let s=i?t.call(e):n.call(e);if(!Be(s)||!Array.isArray(s.events))return{ok:!1,error:Sr("hostAudio snapshot.events must be an array")};let a=[];for(let m=0;m<s.events.length;m++){let l=bb(s.events[m]);if(!l)return{ok:!1,error:Sr(`hostAudio snapshot.events[${m}] is invalid`)};a.push(l)}let d={events:a};return Array.isArray(s.captions)&&(d.captions=s.captions.filter(m=>typeof m=="string")),typeof s.muted=="boolean"&&(d.muted=s.muted),{ok:!0,supplied:!0,snapshot:d}}catch(s){let a=s instanceof Error?s.message:String(s);return{ok:!1,error:Sr(`hostAudio inspect failed: ${a}`)}}}function Sb(e,t,n,r){return{version:1,cartId:e,seed:t,framesElapsed:n,state:r}}function kb(){return{version:1,landmarks:[],regions:[]}}function gt(e,t){return{boundary:"input",code:e,detail:t}}function Wu(e){let t={};for(let n of e)n.priority!==void 0&&(t[n.id]=n.priority);return t}function Ib(e,t){let n=Wu(e);for(let r of t){if(r.code!=="overlap"||!r.id||!r.with)continue;let i=n[r.id],o=n[r.with];if(i===void 0||o===void 0)return{ok:!1,detail:`overlapping regions "${r.id}" and "${r.with}" require explicit control priority`};if(i===o)return{ok:!1,detail:`overlapping regions "${r.id}" and "${r.with}" have equal priority ${i}`}}return{ok:!0}}function Eb(e,t,n,r,i){let o=di({x:e,y:t},n,r,{space:"css",precedence:Object.keys(i).length>0?i:void 0});if(!o)return null;let s=wn({x:e,y:t},n),a=[];for(let d of r.regions)d.id!==o.id&&Pn(d,s)&&a.push(d.id);return a.sort(),{x:e,y:t,selectedControlId:o.id,rejectedControlIds:a}}function Rb(e,t){if(typeof e=="string")return e.length===0?{ok:!1,error:gt("invalid-geometry",`controls[${t}] id is required`)}:{ok:!0,control:{id:e}};if(!Be(e)||!ze(e.id))return{ok:!1,error:gt("invalid-geometry",`controls[${t}] id is required`)};let n={id:e.id};if(ze(e.name)&&(n.name=e.name),ze(e.role)&&(n.role=e.role),e.priority!==void 0){if(typeof e.priority!="number"||!Number.isFinite(e.priority))return{ok:!1,error:gt("invalid-geometry",`controls[${t}].priority must be a finite number`)};n.priority=e.priority}return{ok:!0,control:n}}function Lu(e,t){if(!Array.isArray(e))return{ok:!1,error:gt("invalid-geometry","controls must be an array")};let n=[],r=new Set;for(let a=0;a<e.length;a++){let d=Rb(e[a],a);if(!d.ok)return d;if(r.has(d.control.id))return{ok:!1,error:gt("ambiguous-geometry",`duplicate control id "${d.control.id}"`)};r.add(d.control.id),n.push(d.control)}if(!Be(t))return{ok:!1,error:gt("invalid-geometry","geometry document is required")};if(t.version!==1||!Array.isArray(t.landmarks)||!Array.isArray(t.regions))return{ok:!1,error:gt("invalid-geometry","geometry document is invalid")};let i=He(t),o=Yd(i);if(!o.ok){let a=o.diagnostics.filter(m=>m.code==="overlap"),d=o.diagnostics.filter(m=>m.code!=="overlap");if(d.length>0){let m=d.some(l=>l.code==="duplicate-id");return{ok:!1,error:gt(m?"ambiguous-geometry":"invalid-geometry",o.diagnostics.map(l=>l.detail).join("; "))}}if(a.length>0){let m=Ib(n,a);if(!m.ok)return{ok:!1,error:gt("ambiguous-geometry",m.detail)}}else return{ok:!1,error:gt("invalid-geometry",o.diagnostics.map(m=>m.detail).join("; "))}}let s=new Set(i.regions.map(a=>a.id));for(let a of n)if(!s.has(a.id))return{ok:!1,error:gt("stale-geometry",`control "${a.id}" has no region in the active geometry`)};return{ok:!0,surface:{controls:n,geometry:i}}}function xe(e,t,n){return{boundary:e,code:t,detail:n}}function Cb(e){return e==null?null:Be(e)?e.schemaVersion!==ti?xe("pixels","invalid-visual-sidecar","unsupported visual layer snapshot schema"):typeof e.frame!="number"||!Number.isFinite(e.frame)?xe("pixels","invalid-visual-sidecar","visual sidecar frame must be finite"):Array.isArray(e.layers)?null:xe("pixels","invalid-visual-sidecar","visual sidecar layers must be an array"):xe("pixels","invalid-visual-sidecar","visual sidecar must be an object")}function Ab(e){return e==null?null:Be(e)?e.schemaVersion!==ci?xe("caption","invalid-semantic-sidecar","unsupported semantic layer snapshot schema"):typeof e.frame!="number"||!Number.isFinite(e.frame)?xe("caption","invalid-semantic-sidecar","semantic sidecar frame must be finite"):Array.isArray(e.regions)?null:xe("caption","invalid-semantic-sidecar","semantic sidecar regions must be an array"):xe("caption","invalid-semantic-sidecar","semantic sidecar must be an object")}function wb(e,t){return e==null?null:Be(e)?e.schemaVersion!==nr?xe("binding","invalid-binding-sidecar","unsupported presentation binding snapshot schema"):t&&e.manifestId!==t?xe("binding","invalid-binding-sidecar",`snapshot manifestId "${String(e.manifestId)}" does not match "${t}"`):Array.isArray(e.selectedBindingIds)?Array.isArray(e.targets)?null:xe("binding","invalid-binding-sidecar","binding sidecar targets must be an array"):xe("binding","invalid-binding-sidecar","binding sidecar selectedBindingIds must be an array"):xe("binding","invalid-binding-sidecar","binding sidecar must be an object")}function Pb(e,t){if(e==null)return null;if(!Be(e))return xe("cue","invalid-sequence-sidecar","sequence sidecar must be an object");if(e.schemaVersion!==ui)return xe("cue","invalid-sequence-sidecar","unsupported presentation sequence snapshot schema");if(typeof e.frame!="number"||!Number.isFinite(e.frame))return xe("cue","invalid-sequence-sidecar","sequence sidecar frame must be finite");let n=e.active;if(n!=null){if(!Be(n)||!ze(n.sequenceId))return xe("cue","invalid-sequence-sidecar","active.sequenceId is required");if(!t(n.sequenceId))return xe("cue","invalid-sequence-sidecar",`unknown sequence "${n.sequenceId}"`)}if(e.queue!==void 0){if(!Array.isArray(e.queue))return xe("cue","invalid-sequence-sidecar","sequence sidecar queue must be an array");for(let r=0;r<e.queue.length;r++){let i=e.queue[r];if(!Be(i)||!ze(i.sequenceId))return xe("cue","invalid-sequence-sidecar",`queue[${r}] sequenceId is required`);if(!t(i.sequenceId))return xe("cue","invalid-sequence-sidecar",`unknown sequence "${i.sequenceId}"`)}}return null}function xb(e){let t=Qn(e);return t.ok?null:xe("audio","invalid-audio-sidecar",t.errors[0]?.detail??"audio sidecar is invalid")}function ju(e){let t=Gu(e.scenario);if(!t.ok)throw new Error(`createProductionScenarioRunner: ${t.errors.map(K=>K.detail).join("; ")}`);let n=t.scenario,r=n.matrix??{},{preset:i,viewport:o}=mb(r),s=e.host,a=He(s.initialState),d=null,m,l,h,S=null,C=null,T=null,v=r.reducedMotion===!0,P=null,$=!1,j=[],O=0,F=0,w=e.createId??(()=>`ps-${++O}`),p=e.mapClick??gb,I=e.mapKey??hb,c=e.sequenceBindings??{},f=e.origin??0,y=e.semanticRegions&&e.semanticRegions.length>0?Fo({originFrame:0,regions:e.semanticRegions}):void 0,A,D,R,N=wo({originFrame:0,reducedSensory:r.reducedMotion===!0||r.mute===!0}),q=Jr(),M,u=null,b=null,x=[],V=[],L={},W=null,U=null,B=()=>{},g=()=>{},k=()=>{},E=K=>s.project?s.project(K):He(K),_=()=>{let K=new Set,J=[];for(let se of[...e.geometry?.regions.map(Se=>Se.id)??[],...(e.semanticRegions??[]).map(Se=>Se.id)])K.has(se)||(K.add(se),J.push({id:se}));return J},G=K=>{if(s.projectInputSurface){let se;try{se=s.projectInputSurface(K)}catch(Se){let ye=Se instanceof Error?Se.message:String(Se);return{ok:!1,error:gt("invalid-geometry",`projectInputSurface failed: ${ye}`)}}return Be(se)?Lu(se.controls,se.geometry):{ok:!1,error:gt("invalid-geometry","projectInputSurface must return { controls, geometry }")}}let J=_();return e.geometry?Lu(J,e.geometry):{ok:!0,surface:{controls:J,geometry:kb()}}},Z=()=>{let K=G(a);if(!K.ok){b=K.error,u=K.error,k(K.error);return}b&&u===b&&(u=null),b=null,V=K.surface.controls.map(J=>({...J})),x=V.map(J=>J.id),L=Wu(V),U=He(K.surface.geometry),g(K.surface.geometry),B(K.surface.controls)},z=K=>M?M.publish(K):X.group?.publish(K),ne=K=>{Z();let J=E(a),se=typeof J.worldRevision=="string"||typeof J.worldRevision=="number"?J.worldRevision:void 0;R?.apply(J,se!==void 0?{revision:se}:void 0);let Se=K;if(Se&&D){F+=1;let ye=`${n.id}:${Se}:${F}`;D.playSequence(Se,{invocationId:ye,idempotencyKey:ye,bindings:c[Se]??{}})}Ce()},Q=K=>{let J=s.reduce(He(a),K);d=J,a=He(J.state);let se=Be(K.payload)?K.payload:{};return J.accepted?z({type:"host.state.accepted",kind:"state",payload:{...se,reason:J.reason??"accepted"}}):z({type:"host.state.rejected",kind:"state",payload:{...se,reason:J.reason??"rejected"}}),ne(J.playSequence),J},he=document.createElement("div");he.setAttribute("aria-live","polite"),he.id="status",he.textContent="";let ke=()=>vb(e.hostAudio),Ce=()=>{let K=D?.inspect().captions.filter(le=>le.visible).map(le=>le.text)??[],J=typeof a.caption=="string"?a.caption:"",se=ke(),Se=se.ok?_u(se.snapshot):[],ye=Se[Se.length-1]??"";he.textContent=K[0]||J||ye},Pe=()=>{let K=X.group,J=X.compositor,se=K?K.inspectParticipants().map(Ee=>Ee.id):[],Se=J?J.layers().map(Ee=>Ee.id):[],ye=Li(n.required.participants,se);if(ye.length>0)return{boundary:"routing",code:"missing-participant",detail:`missing participants: ${ye.join(", ")}`};let le=Li(n.required.layers,Se);return le.length>0?{boundary:"pixels",code:"missing-layer",detail:`missing layers: ${le.join(", ")}`}:null},H=K=>({scenarioId:n.id,seed:n.seed,boundary:K.boundary,reason:K.detail}),Y=K=>{let J={type:zs,kind:"diagnostic",payload:{...H(K),code:K.code}};z(J),e.router?.publish(J)},re=K=>{let J={type:Fi,kind:"state",payload:H(K)};z(J),e.router?.publish(J),Y(K)},X=Ou({seed:n.seed,viewport:o,reducedMotion:r.reducedMotion===!0,inputModality:r.inputModality??"pointer",origin:f,createId:w,geometry:e.geometry,semanticLayers:y,contentWidth:e.contentWidth??o.width,contentHeight:e.contentHeight??o.height,mount(K){let J=new Map;return g=se=>{K.setGeometry(se)},B=se=>{let Se=new Set(se.map(le=>le.id));for(let[le,Ee]of[...J])Se.has(le)||(document.activeElement===Ee&&Ee.blur(),Ee.remove(),J.delete(le));let ye=[...se].sort((le,Ee)=>{let Ot=le.priority??0,It=Ee.priority??0;return Ot!==It?Ot-It:le.id<Ee.id?-1:le.id>Ee.id?1:0});for(let le of ye){let Ee=J.get(le.id);Ee||(Ee=document.createElement("button"),Ee.type="button",Ee.id=le.id,Ee.setAttribute("data-testid",le.id),Ee.addEventListener("click",()=>{Q(p(le.id))}),J.set(le.id,Ee)),K.root.insertBefore(Ee,he),Ee.setAttribute("aria-label",le.name??le.id),le.role?Ee.setAttribute("role",le.role):Ee.removeAttribute("role"),K.placeRegion(le.id,Ee)}},K.root.append(he),{participants:e.participants,compositor:{layers:e.compositorLayers},hostState:()=>He(a),ready(se){if(se.group&&(M=q.bind(se.group)),se.compositor&&e.visualLayers&&e.visualLayers.length>0){A=Po({compositor:se.compositor,originFrame:0,reducedMotion:r.reducedMotion===!0,sceneId:n.id,layers:e.visualLayers});for(let[ye,le]of Object.entries(e.visualSources??{}))A.registerSource(ye,le),A.handleHostEvent({type:nt,kind:"state",payload:{id:ye}})}let Se=[];for(let ye of e.sequences??[]){let le=tr(ye);if(!le.ok)throw new Error(`createProductionScenarioRunner: sequence ${le.errors.map(Ee=>Ee.detail).join("; ")}`);Se.push(le.sequence)}if(D=Se.length>0?Yo({originFrame:0,reducedMotion:r.reducedMotion===!0,reducedSensory:r.mute===!0||r.fallback===!0,audio:N,semantic:y,visual:A,sequences:Se}):void 0,e.bindings!==void 0){let ye=yi(e.bindings);if(!ye.ok)throw new Error(`createProductionScenarioRunner: ${ye.errors.map(le=>le.detail).join("; ")}`);R=rs({manifest:ye.manifest,visual:A,semantic:y,sequences:D})}K.root.addEventListener("keydown",ye=>{let le=I(ye.key);le&&Q(le)}),ne()},relayout(se){for(let[Se,ye]of J)se.placeRegion(Se,ye)},destroy(){he.remove();for(let se of J.values())se.remove();J.clear()}}}}),ee=()=>{if($)throw new Error(ib)};N.unlock(),r.mute===!0&&N.broker.mute();let me=new Set(r.failedAssetIds??[]),Ue=new Set([...me]);for(let K of Object.values(c))for(let J of Object.values(K.assets??{}))J&&Ue.add(J);for(let K of Ue){let J={type:me.has(K)?Qe:nt,kind:"state",payload:{id:K}};N.handleHostEvent(J),A?.handleHostEvent(J)}if(u=Pe(),u||(u=b),!u){let K=ke();K.ok||(u=K.error)}k=re,u&&re(u);let qe=K=>({boundary:"cue",code:"unsupported-preference",detail:K}),Ye=K=>{T=qe(K),u=T,re(T)},kt=K=>{let J=v;v=K,X.setReducedMotion(K);let se=[{id:"browser",applied:!0,reducedMotion:X.reproduction().reducedMotion}];A?Nu(A)?(A.setReducedMotion(K),se.push({id:"visual",applied:!0,reducedMotion:A.reducedMotion})):(Ye("visual does not support setReducedMotion"),se.push({id:"visual",applied:!1,reason:"setReducedMotion is not supported"})):se.push({id:"visual",applied:!1,reason:"participant-not-mounted"}),D?Nu(D)?(D.setReducedMotion(K),se.push({id:"sequence",applied:!0,reducedMotion:D.reducedMotion})):(Ye("sequence does not support setReducedMotion"),se.push({id:"sequence",applied:!1,reason:"setReducedMotion is not supported"})):se.push({id:"sequence",applied:!1,reason:"participant-not-mounted"});let Se=K||N.broker.muted;yb(N)?(N.setReducedSensory(Se),se.push({id:"audio",applied:!0,reducedMotion:K,reducedSensory:N.reducedSensory})):(Ye("audio does not support setReducedSensory"),se.push({id:"audio",applied:!1,reason:"setReducedSensory is not supported"})),y?se.push({id:"semantic",applied:!1,reason:"no-reduced-motion-policy"}):se.push({id:"semantic",applied:!1,reason:"participant-not-mounted"});let ye={from:J,to:K,activeSequencePolicy:Bu,participants:se};return P=ye,ye},zt=async K=>{M?await M.step(K):await X.step(K),A?.step(K),D?.step(K),N.step(K),Ce()},Uu=(K=ke())=>{let J=X.group,se=X.compositor,Se=J?J.inspectParticipants().map(Oe=>Oe.id):[],ye=se?se.layers().map(Oe=>Oe.id):[],le=Li(n.required.participants,Se),Ee=Li(n.required.layers,ye),Ot=X.events,It=K.ok?K.snapshot:{events:[]},cn=K.ok?_u(It):[],Et=[...D?.inspect().captions.filter(Oe=>Oe.visible).map(Oe=>Oe.text)??[],...cn],Yt=typeof a.caption=="string"?a.caption:"";Yt&&!Et.includes(Yt)&&Et.push(Yt);let pe=N.snapshot(),Rt=It.events,Xt=X.screenshot(),Yu=j.find(Oe=>Oe.type==="click");return{inputDispatched:j.some(Oe=>Oe.type==="click"||Oe.type==="key"),inputTarget:Yu?.selector,reducerAccepted:d?.accepted===!0,reducerRejected:d?d.accepted===!1:void 0,reducerReason:d?.reason,routedTypes:Ot.map(Oe=>Oe.type),rejected:Ot.some(Oe=>Oe.type===$t),selectedBindingIds:R?.inspect().selectedBindingIds??[],sequenceId:D?.inspect().active?.sequenceId??d?.playSequence??null,sequencePhase:D?.inspect().active?.phase??null,captions:Et,declaredOrder:Xt.declaredOrder,requiredParticipantsPresent:le.length===0,requiredLayersPresent:Ee.length===0,missingParticipants:le,missingLayers:Ee,audioInvoked:pe.events.some(Oe=>Oe.type==="audio.cue.scheduled"||Oe.type==="audio.cue.started")||Rt.some(Oe=>sb.has(Oe.kind)),audioFailed:pe.events.some(Oe=>Oe.type==="audio.cue.failed")||Rt.some(Oe=>Oe.kind==="failed")||(r.failedAssetIds?.length??0)>0,muted:pe.muted||It.muted===!0,replayMatch:l?.ok,snapshotOk:m!==void 0,audioRestoreOk:h,reducedMotion:v,reducedMotionPropagation:P,activeControlIds:x.slice(),inputHitTest:W?{...W}:void 0}},Ys=K=>{u=Pe();let J=ke();!u&&b&&(u=b),!u&&C&&(u=C),!u&&S&&(u=S),!u&&T&&(u=T),!u&&!J.ok&&(u=J.error);let se=Uu(J),Se={requiredParticipantsPresent:!0,requiredLayersPresent:!0,...K},ye=u??Ku(se,Se),le=X.screenshot(),Ee=X.accessibilitySnapshot(),Ot=y?.inspectPublished()??[],It=q.records(),cn=m?vr(m):"",Et=le.imageData?new Uint8Array(le.imageData.data):new Uint8Array,Yt=Object.keys(e.visualSources??{}).sort(),pe=typeof a.worldRevision=="string"||typeof a.worldRevision=="number"?a.worldRevision:null,Rt={schemaVersion:Vi,scenarioId:n.id,seed:n.seed,matrix:{viewport:i,width:o.width,height:o.height,dpr:o.deviceScaleFactor??1,...r},hashes:{pixels:dn(Et),semantic:dn(vr(Ot)),a11y:dn(vr(Ee)),trace:dn(vr(It)),snapshot:cn?dn(cn):"0".repeat(8),assets:dn(vr(Yt))},revisions:{world:pe,bindings:R?.inspect().revision??null,snapshot:Ze},traces:{envelopes:X.events.slice(),inspector:It,audio:N.snapshot().events.slice(),hostAudio:J.ok?[...J.snapshot.events]:[],actions:j.slice()},screenshot:{pngDataUrl:le.pngDataUrl,declaredOrder:le.declaredOrder.slice(),width:le.imageData?.width??o.width,height:le.imageData?.height??o.height},semantic:Ot,a11y:Ee,firstBrokenBoundary:ye?.boundary??null,localization:ye,participants:X.group?.inspectParticipants().map(Xt=>Xt.id)??[],layers:X.compositor?.layers().map(Xt=>Xt.id)??[],observation:se};return z({type:ye?Fi:Js,kind:"state",payload:{scenarioId:n.id,seed:n.seed,boundary:ye?.boundary,reason:ye?.detail}}),ye&&Y(ye),Rt},Ju=()=>({schemaVersion:Vi,host:He(a),lastDecision:d?He(d):null,visual:A?.snapshot()??null,semantic:y?.snapshot()??null,bindings:R?.snapshot()??null,sequences:D?.snapshot()??null,audio:N.snapshot()}),Xs=()=>{let K=po({cart:{id:n.id,version:"1"},seed:n.seed,clock:{framesElapsed:0},engineState:Sb(n.id,n.seed,0,He(a)),hostState:Ju(),createdAt:"2026-09-05T00:00:00.000Z"});if(!K.ok)throw new Error(K.errors.map(J=>J.detail).join("; "));return m=K.snapshot,K.snapshot},Qs=K=>{let J=K.hostState;if(!Be(J)||!Be(J.host))throw new Error("Production scenario reload: hostState.host is required");let se=He(J.host),Se=J.audio!==void 0&&J.audio!==null,ye=pe=>{pe.code==="invalid-audio-sidecar"?(h=!1,S=pe):S=null,C=pe,u=pe,re(pe)};if(J.schemaVersion!==void 0&&J.schemaVersion!==Vi){ye(xe("save-replay","invalid-schema","unsupported production scenario sidecar schemaVersion"));return}if(s.validateRestoreState){let pe=s.validateRestoreState(se);if(!pe.ok){ye(xe("save-replay","invalid-host-sidecar",pe.detail));return}}let le=G(se);if(!le.ok){ye(le.error);return}let Ee=R?.snapshot().manifestId,Ot=[J.visual!==void 0&&J.visual!==null&&A?Cb(J.visual):null,J.semantic!==void 0&&J.semantic!==null&&y?Ab(J.semantic):null,J.bindings!==void 0&&J.bindings!==null&&R?wb(J.bindings,Ee):null,J.sequences!==void 0&&J.sequences!==null&&D?Pb(J.sequences,pe=>!!D?.get(pe)):null,Se?xb(J.audio):null];for(let pe of Ot)if(pe){ye(pe);return}Se||(h=!1,S=null);let It=()=>({hostState:He(a),lastDecision:d?He(d):null,visual:A?A.snapshot():null,semantic:y?y.snapshot():null,bindings:R?R.snapshot():null,sequences:D?D.snapshot():null,audio:N.snapshot()}),cn=pe=>{a=He(pe.hostState),d=pe.lastDecision?He(pe.lastDecision):null;let Rt=[];return A&&pe.visual!==null&&Rt.push(A.restore(pe.visual)),y&&pe.semantic!==null&&Rt.push(y.restore(pe.semantic)),R&&pe.bindings!==null&&Rt.push(R.restore(pe.bindings)),D&&pe.sequences!==null&&Rt.push(D.restore(pe.sequences)),Rt.push(N.restore(pe.audio)),Rt.every(Xt=>Xt.ok)},Et=pe=>{if(!cn(Yt)){ye(xe("save-replay","invalid-schema","reload rollback failed after sidecar restore"));return}ye(pe)},Yt=It();if(a=se,d=Be(J.lastDecision)?He(J.lastDecision):null,J.visual&&A){let pe=A.restore(J.visual);if(!pe.ok){Et(xe("pixels","invalid-visual-sidecar",pe.errors[0]?.message??"visual sidecar restore failed"));return}}if(J.semantic&&y){let pe=y.restore(J.semantic);if(!pe.ok){Et(xe("caption","invalid-semantic-sidecar",pe.errors[0]??"semantic sidecar restore failed"));return}}if(J.bindings&&R){let pe=R.restore(J.bindings);if(!pe.ok){Et(xe("binding","invalid-binding-sidecar",pe.errors[0]?.detail??"binding sidecar restore failed"));return}}if(J.sequences&&D){let pe=D.restore(J.sequences);if(!pe.ok){Et(xe("cue","invalid-sequence-sidecar",pe.errors[0]?.detail??"sequence sidecar restore failed"));return}}if(Se){let pe=N.restore(J.audio);if(!pe.ok){Et(xe("audio","invalid-audio-sidecar",pe.errors[0]?.detail??"audio sidecar restore failed"));return}h=!0,S=null}C=null,Z(),Ce(),u&&u!==b&&(u=b),m=K},Zs=(K,J)=>{if(U){let se=Eb(K,J,X.layout,U,L);if(se){W=se,X.click(`#${se.selectedControlId}`);return}}W=null,X.click(K,J)},ea=async()=>{let K=X.group;if(!M||!K)return l={ok:!1,detail:"replay requires a mounted runtime group"},l;let J=await M.exportTrace(),se=ju({...e,scenario:n,createId:(()=>{let Se=0;return()=>`ps-${++Se}`})()});try{let Se=await Eo(J,se.harness.group);return l=Io(J.records,Se.report.records),Se.inspector.destroy(),l}finally{se.destroy()}},zu=async K=>{switch(j.push(He(K)),K.type){case"click":if(typeof K.selector=="string")X.click(K.selector);else if(typeof K.x=="number"&&typeof K.y=="number")Zs(K.x,K.y);else throw new Error("click step requires selector or x,y");return;case"key":X.root.focus(),X.key(K.key);return;case"focus":X.focus(K.selector);return;case"step":await zt(K.frames);return;case"viewport":{let J=K.kind==="mobile"?$i.mobile:K.kind==="desktop"?$i.desktop:o;X.setViewport(K.width??J.width,K.height??J.height,K.dpr??J.deviceScaleFactor);return}case"reducedMotion":kt(K.value);return;case"mute":K.value?N.broker.mute():N.broker.unmute();return;case"failAsset":{let J={type:Qe,kind:"state",payload:{id:K.assetId}};N.handleHostEvent(J),A?.handleHostEvent(J);return}case"save":Xs();return;case"reload":if(!m)throw new Error("reload requires a prior save");Qs(m);return;case"replay":await ea();return}};return{scenario:n,harness:X,audio:N,inspector:q,goto(){ee(),X.goto()},click(K,J){ee(),j.push(typeof K=="string"?{type:"click",selector:K}:{type:"click",x:K,y:J}),typeof K=="string"?X.click(K):Zs(K,J)},key(K){ee(),j.push({type:"key",key:K}),X.root.focus(),X.key(K)},focus(K){ee(),j.push({type:"focus",selector:K}),X.focus(K)},setViewport(K,J,se){ee(),j.push({type:"viewport",width:K,height:J,dpr:se}),X.setViewport(K,J,se)},setReducedMotion(K){ee(),j.push({type:"reducedMotion",value:K}),kt(K)},mute(K=!0){ee(),j.push({type:"mute",value:K}),K?N.broker.mute():N.broker.unmute()},failAsset(K){ee(),j.push({type:"failAsset",assetId:K});let J={type:Qe,kind:"state",payload:{id:K}};N.handleHostEvent(J),A?.handleHostEvent(J)},async step(K=1){ee(),j.push({type:"step",frames:K}),await zt(K)},applyHostIntent(K){return ee(),Q(K)},playSequence(K,J=`${n.id}:${K}`){ee(),D?.playSequence(K,{invocationId:J,idempotencyKey:J,bindings:c[K]??{}}),Ce()},publish(K){return ee(),z(K)},save(){return ee(),j.push({type:"save"}),Xs()},reload(K){ee();let J=K??m;if(!J)throw new Error("reload requires a prior save or an explicit snapshot");j.push({type:"reload"}),Qs(J)},async replay(){return ee(),j.push({type:"replay"}),ea()},async run(K){ee(),X.goto();let J=K??n.steps??[];for(let se of J)await zu(se);return Ys()},captureEvidence(K){return ee(),Ys(K)},inspect(){return ee(),{host:He(a),lastDecision:d,bindings:R?.inspect()??null,sequences:D?.inspect()??null,visual:A?.inspect()??null,semantic:y?.inspect()??null,audio:N.snapshot(),hostAudio:(()=>{let K=ke();return K.ok&&K.supplied?K.snapshot:null})(),participants:X.group?.inspectParticipants().map(K=>K.id)??[],layers:X.compositor?.layers().map(K=>K.id)??[],composition:(()=>{let K=Pe();if(K)return K;if(b)return b;if(C)return C;if(T)return T;let J=ke();return J.ok?null:J.error})(),reducedMotion:v,reducedMotionPropagation:P,inputSurface:{controlIds:x.slice(),controls:V.map(K=>({...K})),geometry:U?He(U):null}}},destroy(){$||($=!0,M?.unbind(),q.destroy(),R?.destroy(),D?.destroy(),A?.destroy(),y?.destroy(),N.destroy(),X.destroy())}}}async function Yk(e,t){let n=e.captureComposedFrame();if(!t)return n;let{writeFile:r}=await import("node:fs/promises");return await r(t,Rr(n.pngDataUrl)),{...n,path:t}}export{Zr as AUDIO_CUE_SNAPSHOT_SCHEMA_VERSION,_s as CONTENT_REVISION_ACTIVATED_EVENT,br as CONTENT_REVISION_SNAPSHOT_SCHEMA_VERSION,nd as DEFAULT_HEADLESS_HEIGHT,td as DEFAULT_HEADLESS_WIDTH,yd as DEFAULT_MAX_SELECTION_RECORDS,$i as DEFAULT_PRODUCTION_SCENARIO_VIEWPORTS,ed as HEADLESS_PNG_DATA_URL,$u as HOST_OWNED_AUDIO_EVENT_KINDS,Ae as HeadlessUnsupportedOperationError,pr as LOADING_INDICATOR_CANCELED_EVENT,lr as LOADING_INDICATOR_COMPLETED_EVENT,Fc as LOADING_INDICATOR_CONTEXTS,Zg as LOADING_INDICATOR_DIAGNOSTIC_CODES,Wt as LOADING_INDICATOR_DIAGNOSTIC_EVENT,Hc as LOADING_INDICATOR_EVENTS,Ln as LOADING_INDICATOR_FAILED_EVENT,Vc as LOADING_INDICATOR_MODES,Ei as LOADING_INDICATOR_MOTIFS,_n as LOADING_INDICATOR_PARAM_SCHEMA_VERSION,$c as LOADING_INDICATOR_PHASES,Ii as LOADING_INDICATOR_SNAPSHOT_SCHEMA_VERSION,cr as LOADING_INDICATOR_STARTED_EVENT,ur as LOADING_INDICATOR_UPDATED_EVENT,hi as PRESENTATION_BINDING_APPLIED_EVENT,nr as PRESENTATION_BINDING_SNAPSHOT_SCHEMA_VERSION,Fu as PRODUCTION_SCENARIO_BOUNDARIES,js as PRODUCTION_SCENARIO_SCHEMA_VERSION,Vi as PRODUCTION_SCENARIO_SNAPSHOT_SCHEMA_VERSION,Bu as REDUCED_MOTION_ACTIVE_SEQUENCE_POLICY,lb as REDUCED_MOTION_PARTICIPANT_IDS,bd as SELECTION_DECISION_KINDS,Ro as SELECTION_REASON_CODES,zr as SELECTION_TRACE_SCHEMA_VERSION,vd as SELECTION_TRACE_SENSITIVE_KEYS,id as UPDATE_GOLDEN_ENV,Ds as WORLD_PATCH_ACCEPTED_EVENT,Oi as WORLD_PATCH_SNAPSHOT_SCHEMA_VERSION,ad as assertPixelsEqual,yp as assertPngDataUrlsEqual,Ui as attachHeadlessCanvas2D,rf as attachSelectionTrace,zy as benchmarkCartFrames,Yg as cabinetPortal,Nf as captureVisualLayers,sd as compareImageData,Io as compareReplayTraces,Vy as contentRevisionEventContracts,jy as createContentRevisionActivator,ua as createDefaultGlyphAtlas,wo as createHeadlessAudioAdapter,hp as createHeadlessHarness,Th as createHeadlessJobWorker,$p as createHeadlessMultiCartHarness,Dn as createHostGrantSet,el as createImageFixture,Fh as createJobCoordinator,hh as createLoadingIndicatorController,nu as createMemoryJobPersistence,Eu as createMemoryWorldPersistence,Qg as createPortalLifecycle,rs as createPresentationBindingRuntime,Yo as createPresentationSequencePlayer,ju as createProductionScenarioRunner,Hg as createRemoteCartSandbox,qy as createRemoteContentAdapter,Jr as createReplayInspector,of as createSelectionTrace,Fo as createSemanticLayerController,By as createStaticContentAdapter,Po as createVisualLayerController,ny as createWorldGraph,Oy as createWorldPatchApplier,Ji as decodePng,yi as definePresentationBindings,tr as definePresentationSequence,Gu as defineProductionScenario,ln as encodePng,pn as encodePngDataUrl,ns as evaluatePresentationBindings,dn as fnv1aHex,Yy as formatFrameBenchmarkResult,tl as getHeadlessSurface,ho as imageDataFromPngDataUrl,Gr as installHeadlessCanvas,qu as isHostOwnedAudioEventKind,uh as isLoadingIndicatorEventType,lh as isLoadingIndicatorMode,Qp as isSelectionDecisionKind,Xp as isSelectionReasonCode,xh as jobEventContracts,ch as loadingIndicatorEventContracts,Ku as localizeProductionScenarioFailure,Ft as makeImageData,Xg as paintingPortal,Qn as parseAudioCueSnapshot,Ri as parseLoadingIndicatorParams,Gc as parseLoadingIndicatorSnapshot,pg as presentationBindingEventContracts,jm as presentationSequenceEventContracts,pb as productionScenarioEventContracts,nf as recordSelectionDecision,Eo as replayExportedTrace,ji as setDefaultGlyphAtlas,od as shouldUpdateGolden,ty as worldGraphEventContracts,vy as worldPatchEventContracts,Yk as writeComposedFrame,vp as writeVisualArtifacts};