@cyberart-io/engine 0.0.11 → 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/index.js CHANGED
@@ -5,4 +5,4 @@
5
5
  * Not an OSI open-source license.
6
6
  */
7
7
 
8
- var Jl=Object.defineProperty;var Ka=(e,t)=>()=>(e&&(t=e(e=0)),t);var zl=(e,t)=>{for(var n in t)Jl(e,n,{get:t[n],enumerable:!0})};var ip={};function rp(e,t){let n=e.indexOf(nd);if(n===-1)return null;let r=n+nd.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 Ko,ei,np,Qn,nd,rd=Ka(()=>{"use strict";Ko=/AudioWorkletProcessor with name:\s*["'`][^"'`]+["'`]\s+is already registered/i,ei="__cyberartWorkletPatchApplied";typeof window<"u"&&!window[ei]&&(window.addEventListener("error",e=>{let t=e?.message??"";Ko.test(t)&&(e.preventDefault(),e.stopImmediatePropagation())},!0),window.addEventListener("unhandledrejection",e=>{let t=e?.reason,n=typeof t=="string"?t:t?.message??"";Ko.test(n)&&e.preventDefault()}),window[ei]=!0);np=!1,Qn=(...e)=>{np&&console.log("[workletPatch]",...e)},nd="((AudioWorkletProcessor,registerProcessor)=>{";if(typeof AudioWorklet<"u"&&!AudioWorklet.prototype[ei]){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)),Qn(`#${a} addModule`,{url:o.slice(0,64),isBlob:o.startsWith("blob:"),knownBefore:[...d]});let f=o,l=null;if(o.startsWith("blob:")){let k=null;try{k=await(await fetch(o)).text()}catch(E){Qn(`#${a} blob fetch failed`,E)}if(k!==null){let E=new Set;for(let R of k.matchAll(t))E.add(R[1]);if(E.size>0){let R=[...E].filter(h=>d.has(h)),O=[...E].filter(h=>!d.has(h));if(R.length>0&&O.length===0){Qn(`#${a} short-circuit \u2014 all processors already registered`,R);return}if(R.length>0&&O.length>0){let h=rp(k,R);if(h!==null){let P=new Blob([h],{type:"application/javascript"});l=URL.createObjectURL(P),f=l,Qn(`#${a} rewrote blob; skipping`,R,"allowing",O)}else Qn(`#${a} blob rewrite failed; passing original through`)}O.forEach(h=>d.add(h))}}}return n.call(this,f,s).then(()=>{l&&URL.revokeObjectURL(l)},k=>{l&&URL.revokeObjectURL(l);let E=(k&&k.message)??"";if(!(Ko.test(E)||/already registered/i.test(E)))throw k})},AudioWorklet.prototype[ei]=!0}});var od={};zl(od,{AUDIO_LIBRARIES:()=>Go,adaptersFor:()=>ri,importTone:()=>ti,normalizeAudioLibraries:()=>ni});async function ti(){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 ni(e){if(!e)return[];let t=Array.isArray(e)?e:[e],n=[];for(let r of t){if(!(r in Go)){console.warn(`Unknown audio library "${r}"`);continue}let i=r;n.includes(i)||n.push(i)}return n}function ri(e){return e.map(t=>Go[t])}var id,Go,Wo=Ka(()=>{"use strict";id={id:"tone",async load(){await Promise.resolve().then(()=>(rd(),ip))},async unlock(){await id.load(),await(await ti()).start()},async resumeIfSuspended(){let e=await ti();e.context.state==="suspended"&&await e.context.resume()},async suspendIfRunning(){let t=(await ti()).context.rawContext;"suspend"in t&&t.state==="running"&&await t.suspend()}},Go={tone:id}});var Ga=()=>{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"]},dt=window.devicePixelRatio||1,gn=/Headless/i.test(navigator.userAgent),pv=/Android|webOS|iPhone|iPad|iPod|BlackBerry/i.test(navigator.userAgent)||/Android|webOS|iPhone|iPad|iPod|BlackBerry/i.test(navigator.platform);function Wa(){return Math.min(window.innerWidth,window.innerHeight)}var jr="data-cyberart-canvas",hn=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[${jr}]`)??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(jr)||this.canvas.setAttribute(jr,""),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/dt}px`,this.canvas.style.height=`${n/dt}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 ja(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 Ua(e,t=window.innerWidth,n=window.innerHeight){let r=Wa(),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 Ur=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={}}},Ja=Ur;var Jr=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))}},za=Jr;function bn(){return{now:()=>performance.now()}}function zr(e=0){let t=e;return{now:()=>t,set(n){t=n},advance(n){t+=n}}}var Ya=(e,t,n,r)=>({now:e,startTime:t,elapsedSinceStart:e-t,deltaSinceLastUpdate:n===null?0:e-n,deltaSinceLastRender:r===null?0:e-r}),Yr=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=ja(t,n),this.R=r,this.gameManager=s.gameManager,this.hostChannel=s.hostChannel,this.clock=s.clock??bn(),this.kind=s.kind??"render",this.keyboardManager=new Ja(!1,s.captureKeyboard??!0),this.kind!=="calculation"&&(this.canvas=new hn(this.dimensionContext.width,this.dimensionContext.height,1,s.canvasMount),this.drawingContext=this.canvas.ctx,this.pointerManager=new za(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=Ya(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=Ya(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 hn{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 Xa(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 Yn=class{constructor(t){this.seed=t.hash,this.useA=!1,this.genA=Xa(t.hash.substring(2,32)),this.genB=Xa(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 Za="bafybeicjwcq5lxxtfnyj4p2ugcr7ctyb5wl62cbcechj6tsabdq5whcs7u",Qa="https://salmon-just-firefly-671.mypinata.cloud/ipfs/";function Yl(e){return e.endsWith("/")?e:`${e}/`}var Xn=null;function Xl(e){return[...Array(e)].map(()=>Math.floor(Math.random()*16).toString(16)).join("")}function Ql(e){return e&&e.length>0?e:[{cid:Za}]}function Zl(e){return e.startsWith("0x")?e:`0x${e}`}var ed=/^(0[xX])?[0-9a-fA-F]{64}$/;function ep(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 Qr(e){let t=typeof e=="number"?String(e):e;return ed.test(t)?`0x${(t.startsWith("0x")||t.startsWith("0X")?t.slice(2):t).toLowerCase()}`:ep(t)}function Zr(e,t){if(typeof e=="number"||t==="deterministic")return Qr(e);let n=String(e);return ed.test(n)?Qr(n):n.startsWith("0x")||n.startsWith("0X")?n:`0x${n}`}function tp(e){if(!e&&typeof tokenData<"u"&&tokenData?.hash)return{hash:tokenData.hash,tokenId:String(tokenData.tokenId),externalAssetDependencies:Ql(tokenData.externalAssetDependencies),preferredIPFSGateway:Yl(tokenData.preferredIPFSGateway||Qa),preferredArweaveGateway:tokenData.preferredArweaveGateway};let t=typeof window<"u"?new URLSearchParams(window.location.search):new URLSearchParams;return{hash:e?Zl(e):t.get("hash")||`0x${Xl(64)}`,tokenId:"18009999",externalAssetDependencies:[{cid:Za}],preferredIPFSGateway:Qa}}function qo(e){let t=e?.useCache!==!1;if(t&&Xn&&!e?.hash)return Xn;let n=tp(e?.hash);return t?Xn=n:Xn||(Xn=n),n}function td(e){return new Array(32).fill(null).map((t,n)=>parseInt(e.hash.slice(2+n*2,4+n*2),16))}Wo();var ii="$cyberartTa",Ge=class extends Error{constructor(t){super(t),this.name="IncompatibleCartStateError"}},jo={Float32Array,Float64Array,Int8Array,Int16Array,Int32Array,Uint8Array,Uint8ClampedArray,Uint16Array,Uint32Array};function op(e){for(let t of Object.keys(jo))if(e instanceof jo[t])return t}function ad(e){return ArrayBuffer.isView(e)&&!(e instanceof DataView)}function ft(e){if(e===null||typeof e!="object"||Array.isArray(e))return!1;let t=Object.getPrototypeOf(e);return t===Object.prototype||t===null}function Uo(e){return ft(e)?typeof e[ii]=="string"&&Array.isArray(e.d):!1}function sp(e){return e==null?!1:typeof e=="function"?!0:!(typeof e!="object"||Array.isArray(e)||ad(e)||ft(e))}var ap=new Set(["audioContextStarted","midiSynths","keepRatioPrimed","audioInitStarted","musicSeekApplied"]);function sd(e){return e===null?"null":Uo(e)?String(e[ii]):Array.isArray(e)?"array":ft(e)?"object":typeof e}function dp(e,t){return e===t||e==="null"||t==="null"}function qt(e){return e.trim().toLowerCase().replace(/^0x/,"")}function dd(e,t,n,r){if(!(!n&&!r)&&qt(e)!==qt(t))throw new Ge(`Generative cart state is for seed "${t}", but the live token is "${e}"`)}function vn(e){return typeof e=="number"&&Number.isFinite(e)&&e>0}function cd(e,t){let n=e.dimensions;if(n&&vn(n.width)&&vn(n.height))return n;if(t&&vn(t.width)&&vn(t.height))return{width:t.width,height:t.height};if(ft(e.state)){let r=e.state.containerWidth,i=e.state.containerHeight;if(vn(r)&&vn(i))return{width:r,height:i}}return null}function Sn(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(ad(e)){let n=op(e);return n?{[ii]: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=Sn(s,t);a!==void 0&&(i.push(a),o++)}return e.length>0&&o===0?void 0:i}if(!ft(e)||sp(e))return;let n=Object.keys(e),r={};for(let i of n){if(ap.has(i))continue;let o=Sn(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 Zn(e){if(Uo(e)){let t=jo[e[ii]];return t?new t(e.d.map(n=>Number(n))):e}if(Array.isArray(e))return e.map(t=>Zn(t));if(ft(e)){let t={};for(let n of Object.keys(e))t[n]=Zn(e[n]);return t}return e}function Jo(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(!ft(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=Sn(e);if(!ft(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 f=sd(s[d]),l=sd(t[d]);if(!dp(f,l))throw new Ge(`Cart state field "${d}" has type ${l}, live cart expects ${f}`);if(f==="object"){let k=t[d],E=e[d];ft(k)&&!Uo(k)&&Jo(E,k,void 0,void 0,!1)}}}function ud(e,t){if(!ft(e)||!ft(t))return;let n=Sn(e);if(ft(n))for(let r of Object.keys(t))r in n&&(e[r]=Zn(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 Je="cyberart.asset.ready",We="cyberart.asset.failed";function Kt(e){try{return JSON.parse(JSON.stringify(e))}catch{return e}}function mt(e){try{return JSON.stringify(e)}catch{return String(e)}}function zo(e,t,n){let r=t??[],i=n??[],o=Math.max(r.length,i.length);for(let s=0;s<o;s++)if(mt(r[s])!==mt(i[s]))return`${e}[${s}]: ${mt(r[s])} vs ${mt(i[s])}`}function ld(e,t){let n=[];e.seed!==t.seed&&n.push(`seed: ${e.seed} vs ${t.seed}`),e.clock.framesElapsed!==t.clock.framesElapsed&&n.push(`framesElapsed: ${e.clock.framesElapsed} vs ${t.clock.framesElapsed}`),e.clock.now!==t.clock.now&&n.push(`now: ${e.clock.now} vs ${t.clock.now}`),e.clock.frameRate!==t.clock.frameRate&&n.push(`frameRate: ${e.clock.frameRate} vs ${t.clock.frameRate}`),mt(e.rng)!==mt(t.rng)&&n.push(`rng: ${mt(e.rng)} vs ${mt(t.rng)}`);let r=zo("actions",e.actions,t.actions);r&&n.push(r);let i=zo("applied",e.applied,t.applied);i&&n.push(i);let o=zo("events",e.events,t.events);return o&&n.push(o),mt(e.state)!==mt(t.state)&&n.push(`state: ${mt(e.state)} vs ${mt(t.state)}`),n}function pd(e){return{type:e.status==="ready"?Je:We,kind:"state",payload:e.detail===void 0?{id:e.id}:{id:e.id,detail:e.detail}}}function up(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 lp(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 pp=[[0,0],[16,9],[9,16],[4,3],[3,4],[2,1],[1,2],[3,1],[1,3],[1,1]],Xo=pp[0],fp=Xo[0]/Xo[1],Yo=30,mp=120,yp=3840/2160,gp=2160/3840,oi=class{constructor(t=Yo,n=!1,r=window.innerWidth,i=window.innerHeight,o=!0,s,a={}){this.framesElapsed=0;this.frameRate=Yo;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=ni(a.audio),this.audioLibrariesInternal=this.fallbackAudio,this.kind=a.kind??"render",this.onFrameTiming=a.onFrameTiming;let d=a.deterministic;this.deterministic=!!d;let f=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=zr(f.origin??0),this.clock=this.virtualClock;this.initialScriptedActions=Kt(f.actions??[]),this.scriptedActions=Kt(this.initialScriptedActions)}else this.clock=a.clock??bn();this.isBodyCanvas=this.container?!1:o,this.autoMode=n,this.aspectRatio=fp,this.selectedAsp=Xo,this.isFullscreen=!!document.fullscreenElement,this.updateFrameRate(t),this.tempUnpause=!1,this.synchronous=gn,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?qo({hash:this.seed,useCache:!1}):qo(),this.rawParams=td(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]=Ua(n,this.containerWidth,this.containerHeight);r*=dt,i*=dt,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 Yn(this.tokenData),o=new Yr(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=Kt(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??Yo,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=ni(t.metadata?.audio)}async unlockAudio(){if(this.audioLibrariesInternal.length===0)return;let t=ri(this.audioLibrariesInternal);if(gn){for(let n of t)await n.load();return}for(let n of t)await n.unlock()}async resumeAudioLibraries(){if(!(this.paused||gn))for(let t of ri(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(Kt(t))}async getReplayMetadata(){let t=await this.exportState();return{seed:this.tokenData.hash,clock:this.getClock(),rng:this.getRandomState(),actions:Kt(this.scriptedActions),applied:Kt(this.appliedActions),events:Kt(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(pd(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:dt},state:Sn(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(),Jo(r.cartState,i.state,this.animationCart?.metadata?.id,i.cartId),dd(this.tokenData.hash,i.seed,this.animationCart?.metadata?.generative,i.generative),clearTimeout(this.reinitTimeout),this.reinitPending=!1,this.importing=!0;let a=cd(i,n?.framebuffer??this.lastExportedFramebuffer);if(a){this.pinOutputSize(a);let l=a.cssWidth??a.width/dt,k=a.cssHeight??a.height/dt;lp(l,k),this.syncContainerFromDom(),this.pinViewportAtImport={w:this.containerWidth,h:this.containerHeight}}let d=this.customState,f=!1;try{if(this.customState=Zn(i.state),this.unloadCart(),!this.prepareCart(this.animationCart))throw new Error("Failed to prepare cart while loading state");this.animation.cartState!==this.customState&&ud(this.animation.cartState,i.state),this.framesElapsed=i.framesElapsed;let l=this.animation,k=l.cartState,E=typeof i.elapsedSinceStart=="number"?i.elapsedSinceStart:up(k);l.restoreClock(E,typeof k?.startTime=="number"?k.startTime:void 0),o&&l.setPaused(!0);let R=n?.framebuffer??this.lastExportedFramebuffer;this.kind!=="calculation"&&(R&&l.restoreFramebuffer(R)?k.keepRatioPrimed=!0:await l.renderAnimation(this.framesElapsed,this.rawParams)),this.fitPinnedCanvas(),f=!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,f&&(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&&!gn&&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/dt,h:t.cssHeight??t.height/dt}}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/dt,s=t.height/dt;if(o<1||s<1||r<1||i<1)return;let a=Math.min(r/o,i/s),d=o*a,f=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=`${f}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,f=0,l=0,k=0;try{if(r||!this.paused||this.tempUnpause){if(!gn&&!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&&(f=performance.now()-R),this.updateInProgress=!1,this.kind!=="calculation"){a="render";let O=d?performance.now():0;await this.animation.renderAnimation(this.framesElapsed,this.rawParams,t),d&&(l=performance.now()-O)}if(this.autoMode&&this.animation.cartState.saveToken&&!this.savedToken&&!new URLSearchParams(window.location.search).get("hash")){let P=localStorage.getItem("goodones"),B=JSON.stringify(P?[...JSON.parse(P),this.tokenData.hash]:[this.tokenData.hash]);localStorage.setItem("goodones",B),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 E=d?performance.now():0;this.drawIt(),d&&(k=performance.now()-E)}catch(E){o=!0,s=E,this.handleFrameError(E,a)}finally{this.updateInProgress=!1,d&&!o&&d({frame:this.framesElapsed,updateMs:f,renderMs:l,drawMs:k,totalMs:f+l+k})}o?(this.consecutiveErrorCount++,this.consecutiveErrorCount>=mp&&(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(yp,Math.max(gp,o))}else this.aspectRatio=t[0]/t[1]}};var hp="HostChannel has been destroyed",En=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(hp)}};var je=2,ai=1,di="0.0.5",Zo="0",md="1970-01-01T00:00:00.000Z";function $e(e){if(e===null||typeof e!="object"||Array.isArray(e))return!1;let t=Object.getPrototypeOf(e);return t===Object.prototype||t===null}function kn(e){return JSON.parse(JSON.stringify(e))}function ke(e,t,n,r){e.push(r?{code:t,detail:n,path:r}:{code:t,detail:n})}function yd(e,t,n){try{let r=JSON.stringify(e);if(r===void 0){ke(n,"invalid-field",`${t} is not JSON-serializable`,t);return}return JSON.parse(r)}catch{ke(n,"invalid-field",`${t} is not JSON-serializable`,t);return}}function Le(e){return typeof e=="string"&&e.length>0}function si(e){return typeof e=="number"&&Number.isFinite(e)}function bp(e){return typeof e=="string"&&Number.isFinite(Date.parse(e))}function In(e){return!$e(e)||typeof e.schemaVersion=="number"?!1:typeof e.version=="number"&&typeof e.seed=="string"&&typeof e.framesElapsed=="number"&&"state"in e}function vp(e){return $e(e)&&e.schemaVersion===je&&$e(e.engineState)}function Sp(e){return $e(e)&&typeof e.schemaVersion=="number"&&$e(e.engineState)}function er(e){if($e(e)){if(typeof e.schemaVersion=="number")return Number.isInteger(e.schemaVersion)?e.schemaVersion:void 0;if(In(e))return ai}}function Qo(e,t,n){try{return kn(it(e))}catch(r){let i=r instanceof Error?r.message:"engineState is not a cart state bundle";ke(n,"invalid-engine-state",i,t);return}}function Ep(e,t,n){if(!$e(e)){ke(n,"invalid-field","cart must be an object",t);return}Le(e.id)||ke(n,"invalid-field","cart.id must be a non-empty string",`${t}.id`),Le(e.version)||ke(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"?ke(n,"invalid-field","cart.generative must be a boolean",`${t}.generative`):r.generative=e.generative),r.id&&r.version?r:void 0}function kp(e,t,n){if(!$e(e)){ke(n,"invalid-field","clock must be an object",t);return}if(!si(e.framesElapsed)){ke(n,"invalid-field","clock.framesElapsed must be a finite number",`${t}.framesElapsed`);return}let r={framesElapsed:e.framesElapsed};return e.elapsedSinceStart!==void 0&&(si(e.elapsedSinceStart)?r.elapsedSinceStart=e.elapsedSinceStart:ke(n,"invalid-field","clock.elapsedSinceStart must be a finite number",`${t}.elapsedSinceStart`)),e.now!==void 0&&(si(e.now)?r.now=e.now:ke(n,"invalid-field","clock.now must be a finite number",`${t}.now`)),e.frameRate!==void 0&&(si(e.frameRate)?r.frameRate=e.frameRate:ke(n,"invalid-field","clock.frameRate must be a finite number",`${t}.frameRate`)),r}function Ip(e,t,n){if(e===void 0)return;if(!Array.isArray(e)){ke(n,"invalid-field","modules must be an array",t);return}let r=[];return e.forEach((i,o)=>{let s=`${t}[${o}]`;if(!$e(i)||!Le(i.id)||!Le(i.version)){ke(n,"invalid-field","module refs need non-empty id and version",s);return}r.push({id:i.id,version:i.version})}),r}function Rp(e,t,n){if(e===void 0)return;if(!Array.isArray(e)){ke(n,"invalid-field","assets must be an array",t);return}let r=[];return e.forEach((i,o)=>{let s=`${t}[${o}]`;if(!$e(i)||!Le(i.id)){ke(n,"invalid-field","asset refs need a non-empty id",s);return}let a={id:i.id};i.version!==void 0&&(Le(i.version)?a.version=i.version:ke(n,"invalid-field","asset.version must be a non-empty string",`${s}.version`)),i.ref!==void 0&&(Le(i.ref)?a.ref=i.ref:ke(n,"invalid-field","asset.ref must be a non-empty string",`${s}.ref`)),r.push(a)}),r}function Cp(e,t,n){if(e===void 0)return;if(!$e(e)||!Le(e.seed)){ke(n,"invalid-field","rng must include a seed",t);return}if(!$e(e.prngA)||!$e(e.prngB)){ke(n,"invalid-field","rng must include prngA and prngB",t);return}if(typeof e.useA!="boolean"){ke(n,"invalid-field","rng.useA must be a boolean",`${t}.useA`);return}return yd(e,t,n)}function Ap(e,t,n){if(e===void 0)return;if(!$e(e)){ke(n,"invalid-field","provenance must be an object",t);return}let r={};if(e.source!==void 0&&(Le(e.source)?r.source=e.source:ke(n,"invalid-field","provenance.source must be a non-empty string",`${t}.source`)),e.integrity!==void 0&&(!$e(e.integrity)||!Le(e.integrity.alg)||!Le(e.integrity.hash)?ke(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&&(Le(e.publisher)?r.publisher=e.publisher:ke(n,"invalid-field","provenance.publisher must be a non-empty string",`${t}.publisher`)),e.version!==void 0&&(Le(e.version)?r.version=e.version:ke(n,"invalid-field","provenance.version must be a non-empty string",`${t}.version`)),e.signature!==void 0&&(!$e(e.signature)||!Le(e.signature.id)||!Le(e.signature.alg)?ke(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))ke(n,"invalid-field","provenance.grants must be an array",`${t}.grants`);else{let i=[];e.grants.forEach((o,s)=>{Le(o)?i.push(o):ke(n,"invalid-field","provenance.grants entries must be non-empty strings",`${t}.grants[${s}]`)}),r.grants=i}return r}function gd(e,t){e.schemaVersion!==void 0&&e.schemaVersion!==je&&ke(t,"invalid-schema",`defineSnapshot produces schema ${je}`,"schemaVersion"),Le(e.seed)||ke(t,"invalid-field","seed must be a non-empty string","seed");let n=e.runtimeVersion===void 0?di:e.runtimeVersion;Le(n)||ke(t,"invalid-field","runtimeVersion must be a non-empty string","runtimeVersion");let r=e.createdAt===void 0?new Date().toISOString():e.createdAt;bp(r)||ke(t,"invalid-field","createdAt must be an ISO-8601 date","createdAt");let i=Ep(e.cart,"cart",t),o=kp(e.clock,"clock",t),s=Qo(e.engineState,"engineState",t),a=Ip(e.modules,"modules",t),d=Rp(e.assets,"assets",t),f=Cp(e.rng,"rng",t),l=Ap(e.provenance,"provenance",t),k;if(e.hostState!==void 0&&(k=yd(e.hostState,"hostState",t)),e.hostStateRef!==void 0&&!Le(e.hostStateRef)&&ke(t,"invalid-field","hostStateRef must be a non-empty string","hostStateRef"),t.length>0||!i||!o||!s||!Le(e.seed))return;let E={schemaVersion:je,runtimeVersion:n,cart:i,seed:e.seed,clock:o,engineState:s,createdAt:r};return a&&a.length>0&&(E.modules=a),f&&(E.rng=f),k!==void 0&&(E.hostState=k),Le(e.hostStateRef)&&(E.hostStateRef=e.hostStateRef),d&&d.length>0&&(E.assets=d),l&&(l.source||l.integrity||l.publisher||l.version||l.signature||l.grants)&&(E.provenance=l),E}function ci(e){if(!$e(e))return{ok:!1,errors:[{code:"invalid-snapshot",detail:"Snapshot input is not an object"}]};let t=[],n=gd(e,t);return!n||t.length>0?{ok:!1,errors:t}:{ok:!0,snapshot:n}}function tr(e,t){return Le(e.cartId)?ci({cart:{id:e.cartId,version:t?.cartVersion??Zo,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 fd(e){let t=kn(e),n={schemaVersion:ai,engineState:t,seed:t.seed,clock:{framesElapsed:t.framesElapsed,elapsedSinceStart:t.elapsedSinceStart}};return t.cartId&&(n.cart={id:t.cartId,version:Zo,generative:t.generative}),n}function ui(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(!$e(t))return{ok:!1,errors:[{code:"invalid-snapshot",detail:"Snapshot is not an object"}]};if(In(t))try{return{ok:!0,snapshot:fd(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=er(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===ai){let r=[],i=Qo(t.engineState,"engineState",r);return!i||r.length>0?{ok:!1,errors:r}:{ok:!0,snapshot:fd(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=Qo(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 Rn(t)}function Rn(e){if(!$e(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=gd(e,t);return!n||t.length>0?{ok:!1,errors:t}:{ok:!0,snapshot:n}}function nn(e){return e.map(t=>t.detail).join("; ")}function hd(e){if(In(e))return it(e);if($e(e)&&e.engineState!==void 0)return it(e.engineState);throw new Error("Legacy snapshot is missing engine state")}function Pp(e){return it(kn(e.engineState))}function vd(){return[{from:1,to:2,migrate:wp}]}function Sd(e){let t=[...e?.migrations??vd()],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 Tp=Sd();function Ed(){return Tp}function wp(e){let t=hd(e),n=tr(t,{createdAt:md,runtimeVersion:di});if(n.ok===!1)throw new Error(nn(n.errors));return n.snapshot}function bd(e){try{return kn(e)}catch{return}}function nr(e,t=Ed()){let n=bd(e);if(n===void 0)return{ok:!1,errors:[{code:"invalid-snapshot",detail:"Snapshot is not JSON-serializable"}]};let r=n,i=er(r);if(i===void 0){let o=ui(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 Rn(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(bd(r))}catch(d){let f=d instanceof Error?d.message:"Migration threw";return{ok:!1,errors:[{code:"invalid-migration-result",detail:`Migration ${o.from} \u2192 ${o.to} failed: ${f}`,path:"schemaVersion"}]}}let a=er(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=Rn(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 Rn(r)}function es(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=nr(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 ts(e,t){let n=ui(e);return n.ok===!1?n:nr(n.snapshot,t)}var Ad=["image","audio","font","spritesheet"],Pd=["timeout","cors","not-found","invalid","aborted","resolver","undeclared","hash-mismatch","unsigned"],Cn="cyberart:fallback/silent",kd="Asset preloader has been destroyed",xp=4,_p=new Set(Ad),Op=new Set(Pd),Dp={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 Pn(e){return typeof e=="string"&&_p.has(e)}function Td(e){return typeof e=="string"&&Op.has(e)}function An(e){if(!e||typeof e!="object")return!1;let t=e;return typeof t.id=="string"&&typeof t.ref=="string"&&Td(t.code)&&typeof t.message=="string"}function Ae(e){return{id:e.id,ref:e.ref,code:e.code,message:e.message&&e.message.length>0?e.message:Dp[e.code]}}function rn(e,t){return{type:e==="ready"?Je:We,kind:"state",payload:t}}function li(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 ns(e){return e?{...e}:void 0}function xt(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=ns(e.provenance)),e.cors!==void 0&&(t.cors=e.cors),e.usedFallback&&(t.usedFallback=!0),e.managed&&(t.managed=!0),t}function rr(e){return{id:e.id,ref:e.ref,code:e.code,message:e.message}}function Mp(e){if(e.state==="ready"){let t={state:"ready",resource:xt(e.resource)};return e.failure&&(t.failure=rr(e.failure)),t}return e.state==="failed"?{state:"failed",failure:rr(e.failure)}:{state:e.state}}function Lp(e){return/^https?:/i.test(e)}function wd(e){return e.endsWith("/")?e:`${e}/`}function xd(e,t){let n=wd(t);if(/^(https?:|data:|blob:)/i.test(e))return e;let r=/^moltazine:post\/([^#]+)#(.+)$/.exec(e);if(r)return`${n}moltazine/${encodeURIComponent(r[1])}/${r[2]}`;let i=/^world:asset\/(.+)$/.exec(e);if(i)return`${n}world/${i[1]}`;let o=/^library:(.+)$/.exec(e);return o?`${n}library/${o[1]}`:`${n}${e.replace(/^\//,"")}`}function Vp(e){return{async resolve(t,n){li(n);let r=e[t.ref];if(!r)throw Ae({id:t.id,ref:t.ref,code:"not-found",message:`no fixture for ${t.ref}`});if("error"in r)throw Ae({id:t.id,ref:t.ref,code:r.error,message:r.message});return{id:t.id,ref:t.ref,type:t.type,url:r.url,integrity:r.integrity??t.integrity,cors:r.cors??"omit",provenance:r.provenance??t.provenance}}}}function Bp(e){let t=wd(e.cdnBase);return{async resolve(n,r){li(r);let i=e.failures?.[n.ref];if(i){let s=typeof i=="string"?i:i.code,a=typeof i=="string"?void 0:i.message;throw Ae({id:n.id,ref:n.ref,code:s,message:a})}let o=xd(n.ref,t);return{id:n.id,ref:n.ref,type:n.type,url:o,integrity:n.integrity,cors:Lp(o)?"anonymous":"omit",provenance:n.provenance}}}}function Fp(e){let t="";for(let n=0;n<e.length;n++)t+=e[n].toString(16).padStart(2,"0");return t}async function $p(e){let t=await crypto.subtle.digest("SHA-256",e);return Fp(new Uint8Array(t))}function Hp(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 ir(e){let t=e.declared,n=e.fetchBytes,r=e.hashBytes??$p;return{async resolve(i,o){li(o);let s=t[i.ref];if(!s)throw Ae({id:i.id,ref:i.ref,code:"undeclared",message:`undeclared asset ref "${i.ref}"`});if(!s.hash||typeof s.hash!="string")throw Ae({id:i.id,ref:i.ref,code:"unsigned",message:`unsigned asset "${i.ref}"`});let a=await n(s.url);if(li(o),!a)throw Ae({id:i.id,ref:i.ref,code:"unsigned",message:`no signed bytes for "${s.url}"`});if(await r(a)!==s.hash)throw Ae({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:Hp(a),integrity:`sha256-${s.hash}`,cors:"omit",provenance:i.provenance}}}}function qp(e){if(!e||typeof e!="object")return Ae({id:"",ref:"",code:"invalid",message:"declaration is required"});if(typeof e.id!="string"||e.id.length===0)return Ae({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 Ae({id:e.id,ref:"",code:"invalid",message:"ref is required"});if(!Pn(e.type))return Ae({id:e.id,ref:e.ref,code:"invalid",message:`unsupported type ${String(e.type)}`});if(e.integrity!==void 0&&typeof e.integrity!="string")return Ae({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 Ae({id:e.id,ref:e.ref,code:"invalid",message:"timeoutMs must be a non-negative finite number"})}function Id(e){return{id:e.id,ref:Cn,type:e.type,url:Cn,usedFallback:!0,cors:"omit"}}function Rd(e,t){return An(t)?{id:e.id,ref:e.ref,code:t.code,message:t.message}:Np(t)?Ae({id:e.id,ref:e.ref,code:"aborted"}):Ae({id:e.id,ref:e.ref,code:"resolver",message:t instanceof Error?t.message:String(t)})}function Cd(e,t){if(!t||typeof t.url!="string"||t.url.length===0)throw Ae({id:e.id,ref:e.ref,code:"invalid",message:"resolver returned no url"});if(t.integrity&&e.integrity&&t.integrity!==e.integrity)throw Ae({id:e.id,ref:e.ref,code:"invalid",message:"integrity mismatch"});let n=xt(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=ns(e.provenance)),n}function on(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,f=new Map,l=new Set,k=!1;function E(C){return C.code==="aborted"||C.code==="timeout"}function R(C,N,K){let w=Rd(C,K);return w.code==="timeout"?w:N.aborted?Ae({id:C.id,ref:C.ref,code:"aborted"}):w}function O(C,N){let K=f.get(C);K||(K=new Set,f.set(C,K)),K.add(N)}function h(C){if(C?.state==="ready")return`${C.resource.type}\0${C.resource.ref}`}function P(C,N){for(let[K,w]of f)if(K!==N&&w.has(C))return!0;for(let[K,w]of r)if(K!==N&&h(w)===C)return!0;return!1}function B(C,N){let K=new Set(f.get(C)),w=h(N);w&&K.add(w),f.delete(C);for(let g of K)P(g,C)||a.delete(g)}function W(){let C=0,N=0,K=0,w=0,g={};for(let[x,L]of r)g[x]=Mp(L),L.state==="pending"||L.state==="loading"?C+=1:L.state==="failed"?K+=1:(N+=1,(L.resource.usedFallback||L.failure)&&(w+=1));return{total:r.size,pending:C,ready:N,failed:K,fallbacks:w,items:g,failures:i.map(rr)}}function T(){if(l.size===0)return;let C=W();for(let N of l)N(C)}function M(C){i.push(rr(C))}function A(C){k||!t||!e.dispatch||e.dispatch(C)}function u(C){if(C?.managed&&C.url.startsWith("blob:")&&!(typeof URL>"u"||typeof URL.revokeObjectURL!="function"))try{URL.revokeObjectURL(C.url)}catch{}}function v(C,N){if(k)return;let K=r.get(C);K?.state==="ready"&&u(K.resource),r.set(C,N),T()}function c(C){if(C.fallback!==void 0)return C.fallback==="silent"?{id:`${C.id}::fallback`,ref:Cn,type:C.type}:typeof C.fallback=="string"?{id:`${C.id}::fallback`,ref:C.fallback,type:C.type}:{...C.fallback,id:typeof C.fallback.id=="string"&&C.fallback.id.length>0?C.fallback.id:`${C.id}::fallback`}}function p(C,N,K){let w=`${C.type}\0${C.ref}`,g=a.get(w);if(g)return N.aborted?Promise.reject(Ae({id:C.id,ref:C.ref,code:"aborted"})):(O(K,w),Promise.resolve(xt(g.resource)));if(N.aborted)return Promise.reject(Ae({id:C.id,ref:C.ref,code:"aborted"}));let x=d.get(w);if(!x){let $=new AbortController,q={id:C.id,ref:C.ref,type:C.type};C.integrity!==void 0&&(q.integrity=C.integrity),C.provenance&&(q.provenance=ns(C.provenance)),x={promise:Promise.resolve().then(()=>e.resolver.resolve(q,$.signal)).then(Y=>{let G=Cd(C,Y);if($.signal.aborted)throw Ae({id:C.id,ref:C.ref,code:"aborted"});return a.set(w,{resource:xt(G)}),G}).catch(Y=>{throw Rd(C,Y)}).finally(()=>{d.delete(w)}),controller:$,waiters:0},d.set(w,x)}let L=x;return L.waiters+=1,new Promise(($,q)=>{let ee=!1,Y=(y,b)=>{ee||(ee=!0,N.removeEventListener("abort",G),L.waiters-=1,b&&L.waiters<=0&&L.controller.abort(),y())},G=()=>{Y(()=>q(Ae({id:C.id,ref:C.ref,code:"aborted"})),!0)};if(N.aborted){G();return}N.addEventListener("abort",G,{once:!0}),L.promise.then(y=>{if(!ee){if(N.aborted){G();return}O(K,w),Y(()=>$(xt(y)),!1)}},y=>{if(!ee){if(N.aborted){G();return}Y(()=>q(y),!1)}})})}function m(C,N,K){if(N.aborted)return Promise.reject(Ae({id:C.id,ref:C.ref,code:"aborted"}));if(C.ref===Cn)return Promise.resolve(Id(C));let w=new AbortController,g=()=>w.abort();N.addEventListener("abort",g,{once:!0});let x=C.timeoutMs??e.timeoutMs,L,$=!1;return n&&x!==void 0&&x>0&&Number.isFinite(x)&&(L=setTimeout(()=>{$=!0,w.abort()},x)),p(C,w.signal,K).then(q=>{let ee=Cd(C,q);return ee.id=C.id,ee}).catch(q=>{throw $?Ae({id:C.id,ref:C.ref,code:"timeout"}):q}).finally(()=>{L!==void 0&&clearTimeout(L),N.removeEventListener("abort",g)})}async function S(C,N,K,w){try{return{resource:await m(C,N,w)}}catch(g){let x=R(C,N,g);if(E(x)||N.aborted||K>=xp)throw x;let L=c(C);if(!L)throw x;if(N.aborted)throw Ae({id:C.id,ref:C.ref,code:"aborted"});if(C.fallback==="silent"||L.ref===Cn)return{resource:Id(C),failure:x};try{let $=await S(L,N,K+1,w);return{resource:{...xt($.resource),id:C.id,usedFallback:!0},failure:x}}catch($){let q=An($)&&!E($)&&!N.aborted?$:R(C,N,$);throw!E(q)&&!N.aborted&&M(x),q}}}async function _(C,N){if(k)throw new Error(kd);let K=r.get(C.id);if(K?.state==="ready"||K?.state==="failed")return;let w=o.get(C.id);if(w){await w;return}let g=(async()=>{let x=qp(C);if(x){v(C.id,{state:"failed",failure:x}),M(x),A(rn("failed",{id:C.id,ref:C.ref,failure:x}));return}v(C.id,{state:"loading"});let L=s.get(C.id)??new AbortController;s.has(C.id)||s.set(C.id,L);try{let $=await S(C,L.signal,N,C.id);if(k)return;if(L.signal.aborted){let q=Ae({id:C.id,ref:C.ref,code:"aborted"});v(C.id,{state:"failed",failure:q}),M(q),A(rn("failed",{id:C.id,ref:C.ref,failure:q}));return}if($.resource.id=C.id,$.failure){v(C.id,{state:"ready",resource:$.resource,failure:$.failure}),M($.failure),A(rn("failed",{id:C.id,ref:C.ref,failure:$.failure,resource:xt($.resource)})),A(rn("ready",{id:C.id,ref:$.resource.ref,resource:xt($.resource),failure:$.failure}));return}v(C.id,{state:"ready",resource:$.resource}),A(rn("ready",{id:C.id,ref:C.ref,resource:xt($.resource)}))}catch($){if(k)return;let q=An($)&&!E($)&&!L.signal.aborted?{...rr($),id:C.id}:R(C,L.signal,$);v(C.id,{state:"failed",failure:q}),M(q),A(rn("failed",{id:C.id,ref:C.ref,failure:q}))}finally{s.get(C.id)===L&&s.delete(C.id)}})();o.set(C.id,g);try{await g}finally{o.delete(C.id)}}return{async preload(C){if(k)throw new Error(kd);let N=Array.isArray(C)?C:[];for(let K of N)K&&typeof K.id=="string"&&K.id.length>0&&(r.has(K.id)||r.set(K.id,{state:"pending"}),s.has(K.id)||s.set(K.id,new AbortController));return T(),await Promise.all(N.map(K=>_(K,0))),W()},get(C){let N=r.get(C);if(N?.state==="ready")return xt(N.resource)},getProgress(){return W()},onProgress(C){return l.add(C),()=>{l.delete(C)}},abort(C){if(!k){if(C!==void 0){s.get(C)?.abort();return}for(let N of s.values())N.abort()}},forget(C){if(k)return;if(C===void 0){for(let K of r.values())K.state==="ready"&&u(K.resource);r.clear(),i.length=0,a.clear(),f.clear(),T();return}let N=r.get(C);N?.state==="ready"&&u(N.resource),B(C,N),r.delete(C);for(let K=i.length-1;K>=0;K--)i[K].id===C&&i.splice(K,1);T()},dispose(){if(!k){k=!0;for(let C of s.values())C.abort();s.clear();for(let C of r.values())C.state==="ready"&&u(C.resource);r.clear(),i.length=0,o.clear();for(let C of d.values())C.controller.abort();a.clear(),d.clear(),f.clear(),l.clear()}}}}var is=.25;function Tn(e){return e.error===void 0?{state:e.state}:{state:e.state,error:e.error}}function rs(e){return!Number.isFinite(e)||e<0?0:e>1?1:e}function Kp(e){return e instanceof Error&&e.message?e.message:String(e)}async function Gp(){let{adaptersFor:e}=await Promise.resolve().then(()=>(Wo(),od)),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 Wp(e){if(!e||typeof e!="object")return;let t=e.id;return typeof t=="string"&&t.length>0?t:void 0}function os(e={}){let t=e.toneStart??Gp,n=!!e.reducedSensory,r=new Set,i=new Map,o=new Map,s=new Map,a=[],d={state:"locked"},f,l=!1,k=!1;function E(T){for(let M of a.slice())M(T)}function R(T,M){let A=i.get(T);if(A)return M&&!A.participantId&&(A.participantId=M),A;let u={id:T,participantId:M,gain:1,muted:!1,duckGain:1,priority:0,manualDuck:!1};return i.set(T,u),u}function O(T){return l||T.muted?0:rs(T.gain*T.duckGain)}function h(T){return{id:T.id,participantId:T.participantId,gain:T.gain,muted:T.muted,duckGain:T.duckGain,priority:T.priority,effectiveGain:O(T)}}function P(){let T=-1/0;for(let M of s.values())M.priority>T&&(T=M.priority);for(let M of i.values())if(!M.manualDuck){if(T===-1/0){M.duckGain=1;continue}M.duckGain=M.priority<T?is:1}}async function B(){if(k||d.state==="unlocked")return Tn(d);if(f)return await f,Tn(d);d={state:"unlocking"},f=(async()=>{try{await t(),d={state:"unlocked"}}catch(T){d={state:"failed",error:Kp(T)}}})();try{await f}finally{f=void 0}return Tn(d)}return{unlock:B,status(){return Tn(d)},authorize(T){k||typeof T!="string"||T.length===0||r.add(T)},revoke(T){k||r.delete(T)},isAuthorized(T){return T===void 0||T.length===0?r.size===0:r.size===0?!0:r.has(T)},setChannelGain(T,M,A){k||typeof T!="string"||T.length===0||(R(T,A).gain=rs(M))},setPriority(T,M,A){k||typeof T!="string"||T.length===0||(R(T,A).priority=Number.isFinite(M)?M:0,P())},mute(){k||(l=!0,E({type:"mute"}))},unmute(){k||(l=!1,E({type:"mute"}))},muteChannel(T,M){k||typeof T!="string"||T.length===0||(R(T,M).muted=!0,E({type:"mute"}))},unmuteChannel(T){if(k)return;let M=i.get(T);M&&(M.muted=!1,E({type:"mute"}))},duck(T,M=is){if(k||typeof T!="string"||T.length===0)return;let A=R(T);A.manualDuck=!0,A.duckGain=rs(M)},unduck(T){if(k)return;let M=i.get(T);M&&(M.manualDuck=!1,P())},effectiveGain(T){let M=i.get(T);return M?O(M):l?0:1},handleHostEvent(T){if(k||!T||typeof T!="object")return;let M=Wp(T.payload);if(M){if(T.type===Je){o.set(M,"ready"),E({type:"asset",id:M,status:"ready"});return}T.type===We&&(o.set(M,"failed"),E({type:"asset",id:M,status:"failed"}))}},assetStatus(T){return o.get(T)},noteCueStarted(T){if(k)return;s.set(T.idempotencyKey,{idempotencyKey:T.idempotencyKey,channelId:T.channelId,participantId:T.participantId,priority:T.priority});let M=R(T.channelId,T.participantId);T.priority>M.priority&&(M.priority=T.priority),P()},noteCueEnded(T){s.delete(T)&&P()},teardown(T){if(!k&&!(typeof T!="string"||T.length===0)){r.delete(T);for(let[M,A]of[...s.entries()])A.participantId===T&&s.delete(M);for(let[M,A]of[...i.entries()])A.participantId===T&&i.delete(M);P(),E({type:"teardown",participantId:T})}},onNotice(T){return a.push(T),()=>{let M=a.indexOf(T);M>=0&&a.splice(M,1)}},inspect(){let T=[...o.entries()].sort(([A],[u])=>A<u?-1:A>u?1:0),M={};for(let[A,u]of T)M[A]=u;return{status:Tn(d),reducedSensory:n,muted:l,authorized:[...r].sort(),channels:[...i.values()].sort((A,u)=>A.id<u.id?-1:A.id>u.id?1:0).map(h),assets:M}},destroy(){k||(k=!0,s.clear(),i.clear(),r.clear(),E({type:"destroy"}),a.length=0)},get reducedSensory(){return n},get muted(){return l}}}function _d(e,t){let n=e.dispatch.bind(e);e.dispatch=r=>{t.handleHostEvent(r),n(r)}}function ss(e){Ga();let{container:t,seed:n,captureKeyboard:r=!1,audio:i,deterministic:o,assets:s,audioBroker:a,audioParticipantId:d,kind:f="render",onFrameTiming:l}=e,k=n===void 0?void 0:Zr(n,o?"deterministic":"live"),E=new En;if(a&&(_d(E,a),d&&a.authorize(d)),s&&typeof s.resolver?.resolve!="function")throw new Error("createRuntime: assets.resolver is required");let R=s?on({resolver:s.resolver,timeoutMs:s.timeoutMs,emitEvents:s.emitEvents??!o,wallClockTimeout:!o,dispatch:p=>E.dispatch(p)}):void 0,O=!1,h=null,P,B=l,W=!1,T=t.clientWidth||window.innerWidth,M=t.clientHeight||window.innerHeight,A=new oi(30,!1,T,M,!1,void 0,{container:t,seed:k,captureKeyboard:r,hostChannel:E,audio:i,deterministic:o,kind:f,onFrameTiming:l}),u=()=>{let p=t.clientWidth||window.innerWidth,m=t.clientHeight||window.innerHeight;return p===A.containerWidth&&m===A.containerHeight?!1:(A.containerWidth=p,A.containerHeight=m,!0)},v=null;return!A.isDeterministic&&typeof ResizeObserver<"u"&&(v=new ResizeObserver(()=>{if(O||!h)return;u()&&W&&A.reinit()}),v.observe(t)),A.onError=(p,m)=>{P?.(p,m)},{get tokenData(){return A.tokenData},get hostChannel(){return E},get assets(){return R},get audioBroker(){return a},get kind(){return f},get onError(){return P},set onError(p){P=p},get onFrameTiming(){return B},set onFrameTiming(p){B=p,A.onFrameTiming=p},mount(p,m={}){if(O)throw new Error("createRuntime: cannot mount on a destroyed runtime");h?.destroy(),W=!1,A.customState=m.initialState,A.setGameManager(m.gameManager);let S=m.onEvent?E.onEvent(m.onEvent):()=>{};if(a&&d&&a.authorize(d),!A.prepareCart(p))throw S(),new Error("createRuntime: failed to prepare cart");let _=!1,C={async start(){if(!_){if(u()&&A.isPrepared&&(A.init(),A.unloadCart(),!A.prepareCart(p)))throw new Error("createRuntime: failed to prepare cart");A.needsAudio&&(a?await a.unlock():await A.unlockAudio(),_)||(W=!0,A.beginPlayback())}},pause(){_||(A.paused=!0)},resume(){_||(A.paused=!1)},dispatch(N){_||E.dispatch(N)},snapshot(){if(_)return{seed:"",pngDataUrl:""};let N=A.canvas;return{seed:A.tokenData.hash,metadata:p.metadata,pngDataUrl:N?N.toDataURL("image/png"):""}},destroy(){_||(_=!0,W=!1,S(),E.clearInbound(),A.unloadCart(),h===C&&(h=null))},reload(){if(!_){if(!W){if(A.isPrepared&&(A.unloadCart(),!A.prepareCart(p)))throw new Error("createRuntime: failed to prepare cart");return}A.reloadCart()}},reinit(N){if(!_){if(!W){u();return}A.reinit(N)}},getCartState(){return A.animation?.cartState},exportState(){return _?Promise.reject(new Error("Cart handle has been destroyed")):A.exportState()},exportStateJSON(){return _?Promise.reject(new Error("Cart handle has been destroyed")):A.exportStateJSON()},async importState(N,K){if(_)throw new Error("Cart handle has been destroyed");let w=N,g=N;if(typeof N=="string")try{g=JSON.parse(N)}catch{await A.importState(N,K);return}if(g&&typeof g=="object"&&typeof g.schemaVersion=="number"){let x=es(g);if(x.ok===!1)throw new Ge(nn(x.errors));await A.importState(x.bundle,K);return}await A.importState(typeof w=="string"?w:g,K)},async exportSnapshot(N){if(_)throw new Error("Cart handle has been destroyed");let K=await A.exportState(),w=A.getClock(),g=tr(K,{...N,rng:A.getRandomState(),clock:{framesElapsed:K.framesElapsed,elapsedSinceStart:K.elapsedSinceStart,now:w.now,frameRate:w.frameRate}});if(g.ok===!1)throw new Ge(nn(g.errors));return g.snapshot},async exportSnapshotJSON(N){return JSON.stringify(await C.exportSnapshot(N))},async importSnapshot(N,K){if(_)throw new Error("Cart handle has been destroyed");let w=ts(N);if(w.ok===!1)throw new Ge(nn(w.errors));await A.importState(w.snapshot.engineState,K)},peekExportedFramebuffer(){return _?null:A.peekExportedFramebuffer()},peekSeed(){if(!_)return A.peekSeed()},isGenerative(){return _?!1:A.isGenerative()},async step(N=1){if(_)throw new Error("Cart handle has been destroyed");await A.step(N)},async advance(N){if(_)throw new Error("Cart handle has been destroyed");await A.advance(N)},schedule(N){_||A.schedule(N)},getClock(){if(_)throw new Error("Cart handle has been destroyed");return A.getClock()},getRandomState(){if(_)throw new Error("Cart handle has been destroyed");return A.getRandomState()},getReplayMetadata(){return _?Promise.reject(new Error("Cart handle has been destroyed")):A.getReplayMetadata()},get canvas(){return A.canvas},get paused(){return A.paused},set paused(N){_||(A.paused=N)},get tokenData(){return A.tokenData},get isPrepared(){return A.isPrepared},get isLoopRunning(){return A.isLoopRunning},get needsAudio(){return A.needsAudio},get audioLibraries(){return A.audioLibraries}};return h=C,C},async unlockAudio(){if(a){A.needsAudio&&await a.unlock();return}await A.unlockAudio()},destroy(){O||(O=!0,h?.destroy(),h=null,a&&d&&a.teardown(d),v?.disconnect(),v=null,R?.dispose(),E.close(),A.destroy())}}}var wn="cyberart.state.save",xn="cyberart.state.load";function jp(e,t,n={}){let r=n.persist,i=r?{persist:r}:void 0,o=()=>{t.emit({type:wn,payload:i})},s=()=>{t.emit({type:xn,payload:i})};e.registerAction("w",o,!0),e.registerAction("W",o,!0),e.registerAction("e",s,!0),e.registerAction("E",s,!0)}function Od(e){if(e.type!==wn&&e.type!==xn)return;let t=e.payload?.persist;return t==="localStorage"?t:void 0}var Up="cyberart-io",Jp=1,Gt="framebuffers";function as(e,t){return`${e||"unknown"}:${t?qt(t):"none"}`}function Nd(e,t){return`${e||"unknown"}:${t||"none"}`}function ds(){return new Promise((e,t)=>{let n=indexedDB.open(Up,Jp);n.onupgradeneeded=()=>{let r=n.result;r.objectStoreNames.contains(Gt)||r.createObjectStore(Gt)},n.onsuccess=()=>e(n.result),n.onerror=()=>t(n.error??new Error("indexedDB open failed"))})}function zp(e){let t=e.data;return t.buffer.slice(t.byteOffset,t.byteOffset+t.byteLength)}function Dd(e,t){return new Promise((n,r)=>{let o=e.transaction(Gt,"readonly").objectStore(Gt).get(t);o.onsuccess=()=>n(o.result),o.onerror=()=>r(o.error??new Error("indexedDB read failed"))})}async function Md(e,t,n){if(typeof indexedDB>"u")return;let r=await ds(),i={width:n.width,height:n.height,data:zp(n)};try{await new Promise((o,s)=>{let a=r.transaction(Gt,"readwrite");a.oncomplete=()=>o(),a.onerror=()=>s(a.error??new Error("indexedDB write failed")),a.objectStore(Gt).put(i,as(e,t))})}finally{r.close()}}async function Ld(e,t){if(typeof indexedDB>"u")return null;let n=await ds();try{let r=as(e,t),i=Nd(e,t),o=await Dd(n,r)??(r===i?void 0:await Dd(n,i));if(!o||!o.data||o.width<1||o.height<1)return null;let s=new ImageData(o.width,o.height);return s.data.set(new Uint8ClampedArray(o.data)),s}finally{n.close()}}async function Vd(e,t){if(typeof indexedDB>"u")return;let n=await ds();try{await new Promise((r,i)=>{let o=n.transaction(Gt,"readwrite");o.oncomplete=()=>r(),o.onerror=()=>i(o.error??new Error("indexedDB delete failed"));let s=o.objectStore(Gt);s.delete(as(e,t)),s.delete(Nd(e,t))})}finally{n.close()}}var cs="cyberart.state.",Yp="Saved state",Xp="Loaded state",Bd="Failed to save state",Qp="Failed to load state",Zp="No saved state";function Wt(e,t){let n=e||"unknown";return t?cs+n+"."+qt(t):cs+n}function ef(e,t,n){return r=>{if(Od(r)==="localStorage"){if(r.type===wn){tf(e,t,n);return}r.type===xn&&nf(e,t,n)}}}function $d(e){return!!e&&typeof e=="object"&&typeof e.schemaVersion=="number"}function Fd(e){if($d(e)){let t=nr(e);if(t.ok===!1)return null;try{return it(t.snapshot.engineState)}catch{return null}}if(In(e))try{return it(e)}catch{return null}return null}function _n(e){try{let t=JSON.parse(e);if(!t||typeof t!="object")return null;let n=t;if(typeof n.savedAt=="number"&&n.bundle&&typeof n.bundle=="object"){let o=Fd(n.bundle);return o?{savedAt:n.savedAt,bundle:o}:null}let r=Fd(t);if(r)return{savedAt:0,bundle:r};if($d(t))return null;let i=t;return typeof i.seed=="string"&&typeof i.version=="number"?{savedAt:0,bundle:i}:null}catch{return null}}async function tf(e,t,n){let r=e();if(r)try{let i=await r.exportState(),o=i.cartId??t?.();if(!o){console.error("Refusing to persist cart state without cartId"),n?.(Bd,"transient");return}i.generative===!0?(uf(o),pi(Wt(o,i.seed),i)):pi(Wt(o),i);let s=r.peekExportedFramebuffer?.();if(s)try{await Md(o,i.seed,s)}catch(a){console.warn("Failed to save cart framebuffer",a)}n?.(Yp,"transient")}catch(i){console.error("Failed to save cart state",i),n?.(Bd,"transient")}}async function nf(e,t,n){let r=e();if(!r)return;let i=t?.(),o=r.peekSeed?.(),s=r.isGenerative?.()===!0,a=df(i,s,o);if(!a){console.warn("No saved cart state for",i||"unknown",s&&o?`(hash ${o})`:""),n?.(Zp,"transient");return}try{let d=await Ld(i,a.bundle.seed).catch(()=>null);await r.importState(a.bundle,{framebuffer:d}),n?.(Xp,"transient")}catch(d){console.error("Failed to load cart state",d),n?.(Qp,"transient")}}function pi(e,t){let n=JSON.stringify({savedAt:Date.now(),bundle:t});rf(e,n)}function rf(e,t){for(;;)try{localStorage.setItem(e,t);return}catch(n){if(!of(n)||!sf(e))throw n}}function of(e){if(!e||typeof e!="object")return!1;let t=e.name,n=e.code;return t==="QuotaExceededError"||t==="NS_ERROR_DOM_QUOTA_REACHED"||n===22||n===1014}function sf(e){let t=null,n=1/0;for(let o of af()){if(o===e)continue;let s=localStorage.getItem(o);if(!s)continue;let d=_n(s)?.savedAt??0;d<n&&(n=d,t=o)}if(!t)return!1;let r=localStorage.getItem(t),i=r?_n(r):null;return localStorage.removeItem(t),i?.bundle&&Vd(i.bundle.cartId,i.bundle.seed).catch(()=>{}),!0}function af(){let e=[];for(let t=0;t<localStorage.length;t++){let n=localStorage.key(t);n&&n.startsWith(cs)&&e.push(n)}return e}function df(e,t,n){if(t&&n){let i=localStorage.getItem(Wt(e,n));if(i)return _n(i);let o=localStorage.getItem(Wt(e));if(!o)return null;let s=_n(o);if(!s||!cf(s.bundle,n))return null;try{pi(Wt(e,n),s.bundle)}catch{}return s}let r=localStorage.getItem(Wt(e));return r?_n(r):null}function cf(e,t){return typeof e.seed=="string"&&qt(e.seed)===qt(t)}function uf(e){let t=Wt(e),n=localStorage.getItem(t);if(!n)return;let r=_n(n);if(r&&typeof r.bundle.seed=="string"){let i=Wt(e,r.bundle.seed);if(!localStorage.getItem(i))try{pi(i,r.bundle)}catch{return}}localStorage.removeItem(t)}var or=1,yt="cyberart.diagnostic.rejected",mi=8,lf=new Set(["intent","state","diagnostic"]),pf=new Set([wn,xn]);function fi(e){return typeof e=="string"&&lf.has(e)}function Hd(e){if(e.kind!==void 0)return fi(e.kind)?e.kind:void 0;if(!(typeof e.type!="string"||e.type.length===0)){if(pf.has(e.type))return"intent";for(let t of e.type.split("."))if(fi(t))return t}}function qd(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 jt(e,t){for(let n of e)if(qd(n,t))return!0;return!1}function On(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 yi(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!==or)return{ok:!1,reason:"malformed",detail:`unsupported schemaVersion ${String(e.schemaVersion)}`};let n=Hd(e);if(!n)return{ok:!1,reason:"malformed",detail:`cannot infer kind from type "${e.type}"`};let r=On(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??mi,f=t.parentHops===void 0?d:Math.max(0,t.parentHops-1),l=typeof e.idempotencyKey=="string"&&e.idempotencyKey.length>0?e.idempotencyKey:void 0,k={schemaVersion:or,type:e.type,kind:n,source:t.source,id:i,correlationId:o,seq:t.seq,hops:f};return a&&(k.target=a),s&&(k.causationId=s),l&&(k.idempotencyKey=l),r.value!==void 0&&(k.payload=r.value),{ok:!0,envelope:k}}var ff=new Set(["rate-limited","storm-detected","hop-limit","loop-detected","not-subscribed"]),mf=8,yf=8,gf=16,hf=256,bf=256,vf=["*.intent.*"];function us(e={}){let t=e.hostSource??"host",n="router",r=e.maxPerTurn??mf,i=e.maxCausationDepth??yf,o=e.maxHops??mi,s=e.maxCorrelationPerTurn??gf,a=e.maxIndex??hf,d=e.maxDecisions??bf,f=e.maxPerWindow,l=e.windowMs??1e3,k=e.now??Date.now,E=0,R=e.createId??(()=>`evt-${++E}`),O=new Map,h=[],P=[],B=new Map,W=new Map,T=new Map,M=[],A=0,u=0,v=0;function c(V){try{return JSON.parse(JSON.stringify(V))}catch{return V}}function p(V){for(M.push(V);M.length>d;)M.shift();for(let J of P)try{J(c(V))}catch{}}function m(V,J){let re={outcome:J.outcome,source:J.source,type:V.type,kind:V.kind,envelopeId:V.id,deliveredTo:J.deliveredTo,hops:V.hops,seq:V.seq,correlationId:V.correlationId,schemaVersion:V.schemaVersion,turn:v,time:k()};return J.reason&&(re.reason=J.reason),J.detail&&(re.detail=J.detail),J.priorEnvelopeId&&(re.priorEnvelopeId=J.priorEnvelopeId),V.target&&(re.target=V.target),V.causationId&&(re.causationId=V.causationId),V.idempotencyKey&&(re.idempotencyKey=V.idempotencyKey),V.payload!==void 0&&(re.payload=c(V.payload)),re}let S=[],_=!1;function C(V,J,re){for(V.set(J,re);V.size>a;){let U=V.keys().next().value;if(U===void 0)break;V.delete(U)}}function N(V){C(B,V.id,{type:V.type,source:V.source,causationId:V.causationId,hops:V.hops,correlationId:V.correlationId,idempotencyKey:V.idempotencyKey})}function K(V,J){J&&(V.correlationId||(V.correlationId=J.correlationId),V.causationId||(V.causationId=J.id),!V.idempotencyKey&&J.idempotencyKey&&(V.idempotencyKey=`${J.idempotencyKey}::${V.type}`))}function w(V,J){if(V){let re=B.get(V);return re?re.hops:o}return J}function g(V,J){return`${V}\0${J}`}function x(V,J){V.idempotencyKey&&C(T,g(V.source,V.idempotencyKey),J)}function L(V,J){if(J)return T.get(g(V,J))}function $(V){return L(V.source,V.idempotencyKey)}function q(V){return V.seq+=1,V.seq}function ee(V,J){if(!(typeof J.causationId=="string"&&J.causationId.length>0))return V.lastDelivered}function Y(V){let J=new Set,re=new Set([`${V.type}\0${V.source}`]),U=V.causationId,Z=0;for(;U;){if(Z+=1,Z>i||J.has(U))return!0;J.add(U);let ye=B.get(U);if(!ye)break;let Ze=`${ye.type}\0${ye.source}`;if(re.has(Ze))return!0;re.add(Ze),U=ye.causationId}return!1}function G(V){let J=(W.get(V)??0)+1;return W.set(V,J),J}function y(V,J){f!==void 0&&(V.emitTimestamps=V.emitTimestamps.filter(re=>J-re<l))}function b(V,J){return(J.kind==="state"||J.kind==="diagnostic")&&!V.authoritative?!1:jt(V.emit,J.type)}function I(V){for(let J of h)if(jt(J.patterns,V.type))try{J.listener(V)}catch{}}function D(V){let J=[];if(V.target){let re=O.get(V.target);return!re||!jt(re.subscribe,V.type)||(re.channel.dispatch(V),re.lastDelivered={id:V.id,hops:V.hops,correlationId:V.correlationId,idempotencyKey:V.idempotencyKey},J.push(re.id)),J}for(let re of O.values())jt(re.subscribe,V.type)&&(re.channel.dispatch(V),re.lastDelivered={id:V.id,hops:V.hops,correlationId:V.correlationId,idempotencyKey:V.idempotencyKey},J.push(re.id));return J}function H(V,J,re,U,Z,ye,Ze){let at={reason:U,eventType:J,source:re};Z&&(at.detail=Z),u+=1;let Lt=R(),Vt={schemaVersion:or,type:yt,kind:"diagnostic",source:n,id:Lt,correlationId:ye??Lt,seq:u,hops:0,payload:at};Ze&&(Vt.causationId=Ze),N(Vt);let zn=O.get(V);zn&&zn.channel.dispatch(Vt),I(Vt)}function ne(V,J,re,U,Z){if(H(V,Z?.type??(typeof J.type=="string"?J.type:""),Z?.source??V,re,U,Z?.correlationId,Z?.id),Z?.idempotencyKey&&!ff.has(re)&&x(Z,{status:"rejected"}),Z)p(m(Z,{outcome:"rejected",reason:re,detail:U,source:V,deliveredTo:[]}));else{let ye={outcome:"rejected",reason:re,source:V,type:typeof J.type=="string"?J.type:"",deliveredTo:[],turn:v,time:k()};U&&(ye.detail=U),typeof J.idempotencyKey=="string"&&(ye.idempotencyKey=J.idempotencyKey),p(ye)}}function z(V,J){N(V),x(V,{status:"accepted",envelope:V}),G(V.correlationId),I(V);let re=D(V);p(m(V,{outcome:"accepted",source:J,deliveredTo:re}))}function ie(V,J,re,U){let Z=U?.type??(typeof J.type=="string"?J.type:""),ye={outcome:"duplicate",reason:"duplicate",detail:re.status==="accepted"?"idempotent accepted":"idempotent rejected",source:V,type:Z,deliveredTo:[],turn:v,time:k()};U?(ye.kind=U.kind,ye.envelopeId=U.id,ye.hops=U.hops,ye.seq=U.seq,ye.correlationId=U.correlationId,ye.schemaVersion=U.schemaVersion,U.target&&(ye.target=U.target),U.causationId&&(ye.causationId=U.causationId),U.idempotencyKey&&(ye.idempotencyKey=U.idempotencyKey),U.payload!==void 0&&(ye.payload=c(U.payload))):typeof J.idempotencyKey=="string"&&(ye.idempotencyKey=J.idempotencyKey),re.status==="accepted"&&(ye.priorEnvelopeId=re.envelope.id,ye.envelopeId||(ye.envelopeId=re.envelope.id)),p(ye)}function oe(V,J,re,U){if(!re.ok){ne(V,J,"malformed",re.detail);return}let Z=re.envelope,ye=$(Z);if(ye)return ie(V,J,ye,Z),ye.status==="accepted"?ye.envelope:void 0;if(Z.hops<1){ne(V,J,"hop-limit","no hops remaining",Z);return}if(Z.target&&Z.target!==t){let Ze=O.get(Z.target);if(!Ze){ne(V,J,"unknown-target",`unknown target "${Z.target}"`,Z);return}if(!jt(Ze.subscribe,Z.type)){ne(V,J,"not-subscribed",`target "${Z.target}" does not subscribe to ${Z.type}`,Z);return}}if(U){if(!b(U,Z)){ne(V,J,"unauthorized","source may not emit this event",Z);return}if(U.emitsThisTurn+=1,U.emitsThisTurn>r){ne(V,J,"rate-limited","maxPerTurn exceeded",Z);return}if(f!==void 0){let at=k();if(y(U,at),U.emitTimestamps.push(at),U.emitTimestamps.length>f){ne(V,J,"rate-limited","maxPerWindow exceeded",Z);return}}if(Y(Z)){ne(V,J,"loop-detected","causation chain cycle or depth exceeded",Z);return}if((W.get(Z.correlationId)??0)+1>s){ne(V,J,"storm-detected","correlationId storm",Z);return}if(e.validate){let at;try{at=e.validate(Z)}catch(Lt){let Vt=Lt instanceof Error?Lt.message:"validate threw";ne(V,J,"host-rejected",Vt,Z);return}if(at!==!0){ne(V,J,"host-rejected",at.detail,Z);return}}}else{if(Y(Z)){ne(V,J,"loop-detected","causation chain cycle or depth exceeded",Z);return}if((W.get(Z.correlationId)??0)+1>s){ne(V,J,"storm-detected","correlationId storm",Z);return}}return z(Z,V),Z}function Pe(V,J){let re=O.get(V);if(!re)return;let U={...J},Z=ee(re,U);K(U,Z);let ye=L(re.id,U.idempotencyKey);if(ye){ie(V,U,ye);return}let Ze=q(re),at=yi(U,{source:re.id,createId:R,seq:Ze,causationId:Z?.id,maxHops:o,parentHops:w(U.causationId??Z?.id,Z?.hops)});oe(V,U,at,re)}function Ie(V,J){let re=J?.cause,U={...V};K(U,re);let Z=L(t,U.idempotencyKey);if(Z)return ie(t,U,Z),Z.status==="accepted"?Z.envelope:void 0;A+=1;let ye=yi(U,{source:t,createId:R,seq:A,causationId:U.causationId,maxHops:o,parentHops:w(U.causationId,re?.hops)});return oe(t,U,ye,void 0)}function we(){if(!_){_=!0;try{for(;S.length>0;){let V=S.shift();V&&(V.kind==="cart"?Pe(V.participantId,V.event):V.result=Ie(V.event,V.extras))}}finally{_=!1}}}function Oe(V){S.push(V),we()}return{attach(V,J,re={}){if(V===t||V===n)throw new Error(`createEventRouter: "${V}" is a reserved participant id`);for(let ye of O.values())if(ye.channel===J&&ye.id!==V)throw new Error(`createEventRouter: channel already attached as "${ye.id}"`);O.get(V)?.unsubscribe();let Z={id:V,channel:J,emit:re.emit??vf,subscribe:re.subscribe??[],authoritative:re.authoritative===!0,seq:0,emitsThisTurn:0,emitTimestamps:[],unsubscribe:()=>{}};Z.unsubscribe=J.onEvent(ye=>{Oe({kind:"cart",participantId:V,event:ye})}),O.set(V,Z)},detach(V){let J=O.get(V);J&&(J.unsubscribe(),O.delete(V))},publish(V,J){let re={kind:"publish",event:V,extras:J};return Oe(re),re.result},subscribe(V,J){let re={patterns:V,listener:J};return h.push(re),()=>{let U=h.indexOf(re);U>=0&&h.splice(U,1)}},subscribeDecision(V){return P.push(V),()=>{let J=P.indexOf(V);J>=0&&P.splice(J,1)}},inspectParticipants(){return[...O.values()].map(V=>({id:V.id,emit:V.emit.slice(),subscribe:V.subscribe.slice(),authoritative:V.authoritative}))},inspectDecisions(){return M.map(V=>c(V))},turn(){v+=1,W.clear();for(let V of O.values())V.emitsThisTurn=0,V.lastDelivered=void 0,f!==void 0&&y(V,k())}}}var Sf=new Set(["string","number","boolean","object","array"]);function Xe(e,t,n){return n?{code:e,detail:t,path:n}:{code:e,detail:t}}function Kd(e){if(!(typeof e!="string"||e.length===0)){for(let t of e.split("."))if(fi(t))return t}}function Gd(e){let t=e.split(".");return t.length===0?"*":(t[t.length-1]="*",t.join("."))}function ls(e){let t=[];if(!e||typeof e!="object")return[Xe("invalid-schema","payload schema is required")];if((typeof e.version!="number"||!Number.isInteger(e.version)||e.version<1)&&t.push(Xe("invalid-version","payload schema version must be an integer >= 1")),!e.fields||typeof e.fields!="object"||Array.isArray(e.fields))return t.push(Xe("invalid-fields","payload schema fields must be an object")),t;for(let[n,r]of Object.entries(e.fields)){if(!n){t.push(Xe("invalid-field","field name is required",n));continue}(!r||typeof r!="object"||!Sf.has(r.type))&&t.push(Xe("invalid-field-type",`field "${n}" type must be string | number | boolean | object | array`,n))}return t}function Ef(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 kf(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])=>Xe("missing-field",`payload is missing required field "${o}"`,o))}}if(t===null||typeof t!="object"||Array.isArray(t))return{ok:!1,errors:[Xe("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(Xe("missing-field",`payload is missing required field "${i}"`,i));continue}let s=Ef(n[i]);s!==o.type&&r.push(Xe("field-type",`payload.${i} expected ${o.type}, got ${s}`,i))}return r.length>0?{ok:!1,errors:r}:{ok:!0,payload:t}}function If(e,t,n){let r=Gd(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 kf(this.payloadSchema,i)}}}function ps(e,t,n){let r=[];if(typeof t!="string"||t.length===0)r.push(Xe("invalid-type","event type is required"));else if(t.split(".").some(i=>i.length===0))r.push(Xe("invalid-type",`event type "${t}" has empty dotted segments`));else{let i=Kd(t);i?i!==e&&r.push(Xe("kind-mismatch",`type "${t}" infers kind "${i}" but this helper defines "${e}"`)):r.push(Xe("kind-mismatch",`type "${t}" has no "${e}" segment; dotted names like host.presentation.* need e.g. host.presentation.${e}.cue-started`))}return r.push(...ls(n)),r.length>0?{ok:!1,errors:r}:{ok:!0,contract:If(t,e,n)}}function fs(e,t){return ps("intent",e,t)}function fe(e,t){return ps("state",e,t)}function et(e,t){return ps("diagnostic",e,t)}function Rf(e,t){let n=ls(e),r=ls(t);if(n.length>0||r.length>0||t.version<e.version)return"breaking";let i=Object.keys(e.fields),o=Object.keys(t.fields),s=new Set(i),a=new Set(o);for(let l of i){if(!a.has(l))return"breaking";let k=e.fields[l],E=t.fields[l];if(k.type!==E.type)return"breaking";let R=k.optional!==!0,O=E.optional===!0;if(R&&O||!R&&E.optional!==!0&&k.optional===!0)return"breaking"}let d=!1;for(let l of o)if(!s.has(l)){if(t.fields[l].optional!==!0)return"breaking";d=!0}let f=i.length===o.length&&i.every(l=>t.fields[l].type===e.fields[l].type&&t.fields[l].optional===!0==(e.fields[l].optional===!0));return f&&t.version===e.version?"identical":t.version>e.version&&(d||f)?"backward-compatible":t.version===e.version&&d?"breaking":f?"identical":"breaking"}function Cf(e,t){let n=[],r=[],i=new Set,o=new Set;for(let s of e)(t==="authoritative"||s.kind==="intent")&&!i.has(s.emitPattern)&&(i.add(s.emitPattern),n.push(s.emitPattern)),s.kind!=="intent"&&!o.has(s.subscribePattern)&&(o.add(s.subscribePattern),r.push(s.subscribePattern));return{emit:n,subscribe:r,authoritative:t==="authoritative"}}function Af(e,t){let n=e.emit??["*.intent.*"],r=e.authoritative===!0,i=[];for(let o of t)jt(n,o.type)&&(o.kind==="state"||o.kind==="diagnostic")&&!r&&i.push(Xe("unauthorized-emit",`emit pattern allows ${o.kind} "${o.type}" but attach is not authoritative`,o.type));return i.length>0?{ok:!1,errors:i}:{ok:!0}}function Pf(e){let t=new Map;for(let i of e)t.set(i.type,i);let n=i=>{let o=t.get(i.type);return o?o.kind!==i.kind?{ok:!1,errors:[Xe("kind-mismatch",`envelope kind "${i.kind}" does not match contract "${o.kind}"`,i.type)]}:o.validatePayload(i.payload):{ok:!1,errors:[Xe("unknown-type",`no contract registered for "${i.type}"`,i.type)]}};return{get(i){return t.get(i)},manifest(){return[...t.values()].sort((i,o)=>i.type.localeCompare(o.type)).map(i=>i.toManifest())},validateEnvelope:n,asRouterValidate:i=>{let o=n(i);return o.ok?!0:{reason:"host-rejected",detail:o.errors.map(s=>s.detail).join("; ")}}}}var Dn=1,ys="presentation.state.model",jd="presentation.intent.unsupported",Ud=["loading","ready","error","unsupported"],Tf=["presentation.state.*",yt],wf="Presentation adapter has been destroyed",Jd="Presentation adapter: model is invalid or not JSON-serializable",xf=new Set(Ud);function zd(e){return typeof e=="string"&&xf.has(e)}function gs(e){if(e===null||typeof e!="object")return!1;let t=e;return!(t.contractVersion!==Dn||!zd(t.phase)||t.reason!==void 0&&typeof t.reason!="string"||t.view!==void 0&&(t.view===null||typeof t.view!="object"))}function ms(e,t){let n={type:ys,kind:"state",payload:e};return t?.correlationId&&(n.correlationId=t.correlationId),t?.causationId&&(n.causationId=t.causationId),t?.idempotencyKey&&(n.idempotencyKey=t.idempotencyKey),n}function hs(){return{contractVersion:Dn,phase:"loading"}}function bs(e){return{contractVersion:Dn,phase:"unsupported",reason:e}}function vs(e){let t=On(e);return t.ok?gs(t.value)?{ok:!0,model:t.value}:t.value!==null&&typeof t.value=="object"&&"contractVersion"in t.value&&t.value.contractVersion!==Dn?{ok:!1,reason:"unknown-contract-version",contractVersion:t.value.contractVersion}:{ok:!1,reason:"invalid-model"}:{ok:!1,reason:"model-not-serializable"}}function gi(e){let t=vs(e);if(!t.ok)throw new Error(Jd);return t.model}function _f(e){let t=On(e);return t.ok&&gs(t.value)?t.value:bs("model-not-serializable")}function Of(e,t){if(e.type!==ys)return{model:t};let n=vs(e.payload);return n.ok?{model:n.model}:{model:bs(n.reason),rejected:{reason:n.reason,contractVersion:n.contractVersion}}}function Df(e){if(e===null||typeof e!="object"||!("regions"in e))return[];let t=e.regions;return Array.isArray(t)?t:[]}function Nf(e,t,n){return e>=n.x&&e<n.x+n.width&&t>=n.y&&t<n.y+n.height}function Mf(e,t){let n=t.intent;if(!n||typeof n.type!="string"||n.type.length===0)return;let r={type:n.type,kind:"intent"};if(n.payload!==void 0){let i=On(n.payload);if(!i.ok)return;r.payload=i.value}n.target&&(r.target=n.target),n.correlationId&&(r.correlationId=n.correlationId),n.idempotencyKey&&(r.idempotencyKey=n.idempotencyKey),e.emit(r)}function Yd(e,t,n){let r={reason:t};if(n!==void 0){let i=On(n);i.ok&&(r.contractVersion=i.value)}e.emit({type:jd,kind:"intent",payload:r})}function Wd(e,t,n){let r=t;for(let i of e){let o=Of(i,r);o.rejected&&n&&Yd(n,o.rejected.reason,o.rejected.contractVersion),r=o.model}return r}function Xd(){return{metadata:{id:"cyberart.presentation.reference",name:"Reference presentation",frameRate:30},getDefaultState:(e,t,n,r,i,o,s,a,d)=>{let f=i?.model;if(f===void 0)return{model:hs()};let l=vs(f);return l.ok?{model:l.model}:(d&&Yd(d,l.reason,l.contractVersion),{model:bs(l.reason)})},update:(e,t,n,r,i,o,s,a,d,f,l)=>{let k=Wd(l?.consume()??[],i.model,l);for(;s?.hasClick();){let E=s.consumeClick();if(!(!E||k.phase!=="ready"||!l)){for(let R of Df(k.view))if(Nf(E.x,E.y,R)){Mf(l,R);break}}}return l&&(k=Wd(l.consume(),k,l)),k===i.model?i:{...i,model:k}},render:(e,t,n,r,i,o)=>{let s=i.model.view?.background;o.fillStyle=s??"#111",o.fillRect(0,0,r.width,r.height)}}}function Qd(e,t={}){let n=e,r=t.model?gi(t.model):hs(),i=!1,o=t.present??t.model!==void 0,s=()=>{if(i)throw new Error(wf)},a=d=>{s(),r=gi(d),n.dispatch(ms(r))};return o&&n.dispatch(ms(r)),{version:Dn,get target(){return n},get model(){return _f(r)},get phase(){return r.phase},get paused(){return n.paused===!0},present:a,async start(){return s(),n.start()},pause(){s(),n.pause()},resume(){s(),n.resume()},retarget(d){s(),n=d},destroy(){i||(i=!0,n.destroy())}}}function Lf(e,t={}){let n=t.model?gi(t.model):t.initialState?.model!==void 0?gi(t.initialState.model):hs(),r=t.cart??Xd(),i=e.mount(r,{initialState:{...t.initialState,model:n},onEvent:t.onEvent});return Qd(i,{model:n,present:!1})}var Bt="cue.started",Ut="cue.completed",Ft="cue.cancelled",_t="cue.replaced",Vf=[Bt,Ut,Ft,_t];function Bf(e){return e===Bt||e===Ut||e===Ft||e===_t}function ec(e,t){let n=e<0?0:e>1?1:e;return t==="ease-out"?1-(1-n)*(1-n):n}function Zd(e){return{type:e.type,atFrame:e.atFrame,name:e.name,idempotencyKey:e.idempotencyKey,progress:e.progress}}function hi(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 Ss(e){return e.startFrame+e.delayFrames}function Ff(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 $f(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 Ot(e={}){let t=!!e.reducedMotion,n=e.originFrame??0,r=new Map,i=[];function o(h){i.push(h)}function s(h,P){let B=Ss(h)-Ss(P);return B!==0?B:h.name<P.name?-1:h.name>P.name?1:h.idempotencyKey<P.idempotencyKey?-1:h.idempotencyKey>P.idempotencyKey?1:0}function a(h,P){o({type:P,atFrame:n,name:h.name,idempotencyKey:h.idempotencyKey,progress:h.progress})}function d(h){if(h.phase="completed",h.progress=1,a(h,Ut),h.repeatRemaining==="forever"||h.repeatRemaining>0){if(typeof h.repeatRemaining=="number"&&(h.repeatRemaining-=1),h.repeatIndex+=1,h.phase="scheduled",h.progress=0,h.startFrame=n,h.delayFrames=0,h.durationFrames===0){r.delete(h.idempotencyKey);return}h.phase="active",a(h,Bt)}else r.delete(h.idempotencyKey)}function f(h){if(h.phase==="cancelled"||h.phase==="completed")return;let P=Ss(h);if(!(n<P)){if(h.phase==="scheduled"&&(h.phase="active",h.progress=h.durationFrames===0?1:0,a(h,Bt),h.durationFrames===0)){d(h);return}if(h.phase==="active"){let B=n-P;B>=h.durationFrames?(h.progress=1,d(h)):h.progress=ec(h.durationFrames===0?1:B/h.durationFrames,h.easing)}}}function l(){let h=[...r.values()].sort(s);for(let P of h)f(P)}function k(h){let P=Ff(h,n);if("ok"in P&&P.ok===!1)return P;let B=$f(P,t),W=r.get(B.idempotencyKey);if(W&&(W.phase==="scheduled"||W.phase==="active")){if(W.onDuplicate==="reject"||B.onDuplicate==="reject")return{ok:!1,reason:"duplicate",detail:`cue ${B.idempotencyKey} is already ${W.phase}`};if(W.onDuplicate==="ignore"||B.onDuplicate==="ignore")return{ok:!0,cue:hi(W)};W.phase="cancelled",W.progress=W.progress,a(W,_t),r.delete(W.idempotencyKey)}r.set(B.idempotencyKey,B),f(B);let T=r.get(B.idempotencyKey)??B;return{ok:!0,cue:hi(T)}}function E(h){let P=r.get(h);return!P||P.phase==="completed"||P.phase==="cancelled"?!1:(P.phase="cancelled",a(P,Ft),r.delete(h),!0)}function R(){for(let h of[...r.values()].sort(s))(h.phase==="scheduled"||h.phase==="active")&&(h.phase="cancelled",a(h,Ft));r.clear(),i.length=0,n=e.originFrame??0}function O(h=1){let P=Number.isFinite(h)?Math.max(0,Math.floor(h)):0,B=i.length;for(let W=0;W<P;W++)n+=1,l();return i.slice(B).map(Zd)}return{play:k,step:O,cancel:E,reset:R,snapshot(){return{frame:n,reducedMotion:t,cues:[...r.values()].sort(s).map(hi),events:i.map(Zd)}},get(h){let P=r.get(h);return P?hi(P):void 0},setReducedMotion(h){t=!!h},get frame(){return n},get reducedMotion(){return t}}}var Ei="audio.cue.scheduled",sr="audio.cue.started",ki="audio.cue.skipped",sn="audio.cue.failed",Hf=[Ei,sr,ki,sn],Si=1,qf=["scheduled","active","completed","cancelled"],Kf=["linear","ease-out"],Gf=["locked","unlocking","unlocked","failed"],Wf=["scheduled","started","skipped"];function nc(e){return e===Ei||e===sr||e===ki||e===sn}function Nn(e){return!!e&&typeof e=="object"&&!Array.isArray(e)}function Nt(e){return typeof e=="string"&&e.length>0}function Dt(e){return typeof e=="number"&&Number.isFinite(e)}function jf(e){return e==="scheduled"||e==="started"||e==="skipped"||e==="failed"||e==="completed"}function tc(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 ar(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(!Nn(t))return{ok:!1,errors:[be("invalid-snapshot","snapshot must be a JSON object")]};let n=[];t.schemaVersion!==Si&&n.push(be("unsupported-schema",`unsupported audio cue snapshot schemaVersion ${String(t.schemaVersion)}`,"schemaVersion")),Dt(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&&(!Nn(t.unlock)||!Gf.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 f=`cues[${d}]`,l=Uf(a,f,n);if(l){if(r.has(l.idempotencyKey)){n.push(be("unknown-cue",`duplicate cue idempotencyKey "${l.idempotencyKey}"`,f));return}r.add(l.idempotencyKey),i.push(l)}});let o=[];return Array.isArray(t.events)&&t.events.forEach((a,d)=>{let f=`events[${d}]`,l=Yf(a,f,n);l&&o.push(l)}),n.length>0?{ok:!1,errors:n}:{ok:!0,snapshot:{schemaVersion:Si,frame:t.frame,reducedSensory:t.reducedSensory,cues:i,events:o}}}function Uf(e,t,n){if(!Nn(e)){n.push(be("invalid-snapshot","cue must be an object",t));return}if(!Nt(e.idempotencyKey)){n.push(be("unknown-cue","cue idempotencyKey is required",`${t}.idempotencyKey`));return}if(!Nt(e.name)){n.push(be("invalid-snapshot","cue name is required",`${t}.name`));return}if(!Nt(e.assetId)){n.push(be("invalid-snapshot","cue assetId is required",`${t}.assetId`));return}if(!Nt(e.channelId)){n.push(be("invalid-snapshot","cue channelId is required",`${t}.channelId`));return}if(!jf(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(!qf.includes(e.phase)){n.push(be("invalid-snapshot","cue phase is invalid",`${t}.phase`));return}if(!Kf.includes(e.easing)){n.push(be("invalid-snapshot","cue easing is invalid",`${t}.easing`));return}if(!Dt(e.startFrame)){n.push(be("invalid-snapshot","cue startFrame must be finite",`${t}.startFrame`));return}if(!Dt(e.durationFrames)||e.durationFrames<0){n.push(be("invalid-snapshot","cue durationFrames must be a non-negative finite number",`${t}.durationFrames`));return}if(!Dt(e.delayFrames)||e.delayFrames<0){n.push(be("invalid-snapshot","cue delayFrames must be a non-negative finite number",`${t}.delayFrames`));return}if(!Dt(e.progress)){n.push(be("invalid-snapshot","cue progress must be finite",`${t}.progress`));return}if(!Dt(e.repeatIndex)){n.push(be("invalid-snapshot","cue repeatIndex must be finite",`${t}.repeatIndex`));return}if(!Dt(e.priority)){n.push(be("invalid-snapshot","cue priority must be finite",`${t}.priority`));return}if(e.participantId!==void 0&&!Nt(e.participantId)){n.push(be("invalid-snapshot","cue participantId must be a non-empty string",`${t}.participantId`));return}let r=Jf(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 Jf(e,t,n){if(e!==void 0){if(!Nn(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(!Dt(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 zf(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 Yf(e,t,n){if(!Nn(e)){n.push(be("invalid-snapshot","event must be an object",t));return}if(!nc(e.type)){n.push(be("invalid-snapshot","event type is unknown",`${t}.type`));return}if(!Nt(e.idempotencyKey)){n.push(be("unknown-cue","event idempotencyKey is required",`${t}.idempotencyKey`));return}if(!Nt(e.name)){n.push(be("invalid-snapshot","event name is required",`${t}.name`));return}if(!Nt(e.assetId)){n.push(be("invalid-snapshot","event assetId is required",`${t}.assetId`));return}if(!Nt(e.channelId)){n.push(be("invalid-snapshot","event channelId is required",`${t}.channelId`));return}if(!Dt(e.atFrame)){n.push(be("invalid-snapshot","event atFrame must be finite",`${t}.atFrame`));return}if(!Dt(e.progress)){n.push(be("invalid-snapshot","event progress must be finite",`${t}.progress`));return}if(e.participantId!==void 0&&!Nt(e.participantId)){n.push(be("invalid-snapshot","event participantId must be a non-empty string",`${t}.participantId`));return}if(e.reason!==void 0&&!tc(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),tc(e.reason)&&(r.reason=e.reason),r}function bi(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 Xf(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 vi(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 rc(e={}){let t=e.broker,n=!!(e.reducedSensory??t?.reducedSensory),r=Ot({originFrame:e.originFrame}),i=new Map,o=[],s=new Set,a=0;function d(u){o.push(u)}function f(u,v,c){let p=r.get(v.idempotencyKey);return bi({type:u,atFrame:r.frame,name:v.name,idempotencyKey:v.idempotencyKey,assetId:v.assetId,channelId:v.channelId,participantId:v.participantId,reason:c?.reason,progress:c?.progress??p?.progress??0})}function l(u,v){s.delete(u.idempotencyKey),t?.noteCueEnded(u.idempotencyKey),u.audioPhase="failed",d(f(sn,u,{reason:v})),r.cancel(u.idempotencyKey),i.delete(u.idempotencyKey)}function k(u,v){s.delete(u.idempotencyKey),u.audioPhase="skipped",d(f(ki,u,{reason:v}))}function E(u){s.delete(u.idempotencyKey),u.audioPhase="started",t?.noteCueStarted({idempotencyKey:u.idempotencyKey,channelId:u.channelId,participantId:u.participantId,priority:u.priority}),d(f(sr,u))}function R(u){if(u.audioPhase!=="scheduled")return;if(t&&!t.isAuthorized(u.participantId)){k(u,"unauthorized"),r.cancel(u.idempotencyKey),i.delete(u.idempotencyKey);return}if(n||t?.reducedSensory){k(u,"reduced-sensory");return}if(t?.muted||t&&t.effectiveGain(u.channelId)===0){k(u,"muted");return}let v=t?.assetStatus(u.assetId);if(!t){E(u);return}if(v==="failed"){l(u,"asset-failed");return}if(v==="ready"){E(u);return}s.add(u.idempotencyKey)}function O(u,v){for(let c of[...s]){let p=i.get(c);if(!p){s.delete(c);continue}if(!(u&&p.assetId!==u)){if(v==="failed"||t?.assetStatus(p.assetId)==="failed"){l(p,"asset-failed");continue}(v==="ready"||t?.assetStatus(p.assetId)==="ready")&&R(p)}}}function h(u){for(let v of[...i.values()])v.participantId===u&&(v.audioPhase==="scheduled"||v.audioPhase==="started")&&l(v,"torn-down")}function P(u){for(let v of u){let c=i.get(v.idempotencyKey);if(c)if(v.type===Bt)R(c);else if(v.type===Ut){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 v.type===Ft?(s.delete(c.idempotencyKey),t?.noteCueEnded(c.idempotencyKey),(c.audioPhase==="scheduled"||c.audioPhase==="started")&&(c.audioPhase="failed"),i.delete(c.idempotencyKey)):v.type===_t&&(s.delete(c.idempotencyKey),t?.noteCueEnded(c.idempotencyKey),i.delete(c.idempotencyKey))}}function B(){let u=o.slice(a).map(bi);return a=o.length,u}let W=t?.onNotice(u=>{if(u.type==="asset"){if(u.status==="failed"){for(let v of[...i.values()])v.assetId===u.id&&(v.audioPhase==="scheduled"||v.audioPhase==="started")&&l(v,"asset-failed");return}O(u.id,u.status);return}if(u.type==="teardown"){h(u.participantId);return}if(u.type==="destroy")for(let v of[...i.values()])(v.audioPhase==="scheduled"||v.audioPhase==="started")&&l(v,"torn-down")});function T(){for(let u of i.values())t?.noteCueEnded(u.idempotencyKey);i.clear(),s.clear(),o.length=0,a=0,r.reset()}function M(u){if(!u||typeof u!="object")return{ok:!1,reason:"invalid",detail:"spec is required"};if(typeof u.assetId!="string"||u.assetId.length===0)return{ok:!1,reason:"invalid",detail:"assetId is required"};let v=r.snapshot().events.length,c=r.play(Xf(u));if(!c.ok)return c;let p=r.snapshot().events.slice(v),m=p.some(w=>w.type===_t);if(!m&&i.has(u.idempotencyKey)){let w=i.get(u.idempotencyKey);return{ok:!0,cue:vi(w,c.cue,r.frame)}}if(m){let w=i.get(u.idempotencyKey);w&&(s.delete(w.idempotencyKey),t?.noteCueEnded(w.idempotencyKey),i.delete(w.idempotencyKey))}let S=u.channelId??u.participantId??"master",_={name:u.name,idempotencyKey:u.idempotencyKey,assetId:u.assetId,channelId:S,participantId:u.participantId,priority:Number.isFinite(u.priority)?u.priority:0,audioPhase:"scheduled"};u.repeat&&(_.repeat=u.repeat),i.set(_.idempotencyKey,_),typeof u.gain=="number"&&t?.setChannelGain(S,u.gain,u.participantId),typeof u.priority=="number"&&t?.setPriority(S,u.priority,u.participantId),d(f(Ei,_)),P(p.filter(w=>w.type!==_t));let C=i.get(_.idempotencyKey);C&&C.audioPhase==="scheduled"&&t?.assetStatus(C.assetId)==="failed"&&l(C,"asset-failed"),B();let N=i.get(_.idempotencyKey)??_,K=r.get(_.idempotencyKey)??c.cue;return{ok:!0,cue:vi(N,K,r.frame)}}function A(){return{schemaVersion:Si,frame:r.frame,reducedSensory:n,cues:[...i.values()].map(u=>vi(u,r.get(u.idempotencyKey),r.frame)).sort((u,v)=>u.name!==v.name?u.name<v.name?-1:1:u.idempotencyKey<v.idempotencyKey?-1:u.idempotencyKey>v.idempotencyKey?1:0),events:o.map(bi)}}return{play:M,step(u=1){let v=r.step(u);return P(v),B()},cancel(u){let v=i.get(u),c=r.cancel(u);return v&&(s.delete(u),t?.noteCueEnded(u),i.delete(u)),c},reset:T,snapshot(){return A()},restore(u){let v=ar(u);if(!v.ok)return v;let c=Ot({originFrame:v.snapshot.frame}),p=new Map,m=new Set,S=v.snapshot.events.map(bi);for(let K=0;K<v.snapshot.cues.length;K+=1){let w=v.snapshot.cues[K],g={name:w.name,idempotencyKey:w.idempotencyKey,assetId:w.assetId,channelId:w.channelId,participantId:w.participantId,priority:w.priority,audioPhase:w.audioPhase};if(w.repeat&&(g.repeat=w.repeat),p.set(g.idempotencyKey,g),Wf.includes(w.audioPhase)){let x=c.play({name:w.name,idempotencyKey:w.idempotencyKey,startFrame:w.startFrame,durationFrames:w.durationFrames,delayFrames:w.delayFrames,easing:w.easing,repeat:zf(w),onDuplicate:"replace"});if(!x.ok)return{ok:!1,errors:[be("invalid-snapshot",x.detail,`cues[${K}]`)]}}}let _=t?{muted:t.muted,assets:{...t.inspect().assets},started:[...i.values()].filter(K=>K.audioPhase==="started").map(K=>({idempotencyKey:K.idempotencyKey,channelId:K.channelId,participantId:K.participantId,priority:K.priority}))}:null,C={reducedSensory:n,presentation:r,records:new Map(i),pending:new Set(s),events:o.slice(),eventCursor:a},N=K=>{n=C.reducedSensory,r=C.presentation,i.clear();for(let[w,g]of C.records)i.set(w,g);s.clear();for(let w of C.pending)s.add(w);if(o.length=0,o.push(...C.events),a=C.eventCursor,t&&_){_.muted?t.mute():t.unmute();for(let[w,g]of Object.entries(_.assets))t.handleHostEvent({type:g==="ready"?Je:We,kind:"state",payload:{id:w}});for(let w of[...i.values()])t.noteCueEnded(w.idempotencyKey);for(let w of _.started)t.noteCueStarted(w)}return{ok:!1,errors:K}};try{for(let g of i.values())t?.noteCueEnded(g.idempotencyKey);i.clear(),s.clear(),o.length=0,n=v.snapshot.reducedSensory,r=c;for(let[g,x]of p)i.set(g,x);o.push(...S),a=o.length;let K=new Set,w=new Set;for(let g of v.snapshot.events)g.type===sr&&K.add(g.assetId),g.type===sn&&g.reason==="asset-failed"&&w.add(g.assetId);if(t){for(let g of K)t.handleHostEvent({type:Je,kind:"state",payload:{id:g}});for(let g of w)t.handleHostEvent({type:We,kind:"state",payload:{id:g}})}for(let g of v.snapshot.cues)if(g.audioPhase==="started"&&t?.noteCueStarted({idempotencyKey:g.idempotencyKey,channelId:g.channelId,participantId:g.participantId,priority:g.priority}),g.audioPhase==="scheduled"){let x=r.get(g.idempotencyKey),L=t?.assetStatus(g.assetId);x?.phase==="active"&&L!=="ready"&&L!=="failed"&&m.add(g.idempotencyKey)}for(let g of m)s.add(g);return{ok:!0,snapshot:A()}}catch(K){let w=K instanceof Error?K.message:String(K);return N([be("invalid-snapshot",w)])}},get(u){let v=i.get(u);if(v)return vi(v,r.get(u),r.frame)},dispose(){W?.(),T()},get frame(){return r.frame},setReducedSensory(u){n=!!u},get reducedSensory(){return n}}}function Qf(e,t){return e.play(t)}function Es(e={}){let t=os({toneStart:async()=>{},reducedSensory:e.reducedSensory}),n=rc({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=ar(r);if(!i.ok)return i;let o,s=r;if(typeof r=="string")try{s=JSON.parse(r)}catch{return i}Nn(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 Zf=1,oc=["loading","ready","error","unsupported"],sc=["keyboard","pointer","audio","assets","hostChannel"],ac=["image","audio","font","spritesheet"],dc=["tone","midi"],Ci=["source-over","screen"],Ai=["transparent","opaque"],cc=["render","calculation"],Vn=["audio","controller","network","persistence","fullscreen"],em=new Set(oc),uc=new Set(sc),ic=new Set(ac),lc=new Set(dc),tm=new Set(["version","id","runtime","phases","managers","assets","acceptedEvents","emittedEvents","permissions","integrations","surface","layers","modules","kind","grants"]),nm=new Set(["minContractVersion","features"]),rm=new Set(["kinds","declarations"]),im=new Set(["id","kind"]),om=new Set(["emit","subscribe","authoritative"]),pc=new Set(["alpha","clearPolicy"]),fc=new Set(["compositor","blend"]),mc=new Set(["refs"]),sm=new Set(["id","version"]),Ii=/^[a-z0-9][a-z0-9.-]*$/i,yc=new Set(Ci),gc=new Set(Ai),hc=new Set(cc),ks=new Set(Vn),am=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 ct(e){return e!==null&&typeof e=="object"&&!Array.isArray(e)}function ut(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 dm(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 cm(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||cm(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 Is(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 Ln(e,t){return Is(e,t,(n,r)=>dm(n)?void 0:de("invalid-pattern",`invalid event pattern "${n}"`,r))}function gt(e,t,n,r,i){return Is(e,t,(o,s)=>n.has(o)?void 0:de(r,`invalid ${i} "${o}"`,s))}function bc(e,t){return Is(e,t,(n,r)=>/^[a-z0-9][a-z0-9.-]*$/i.test(n)?void 0:de("invalid-feature",`invalid feature tag "${n}"`,r))}function vc(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(!ct(i)){n.push(de("invalid-module","module ref must be an object",s));return}n.push(...ut(i,sm,s)),(typeof i.id!="string"||i.id.length===0||!Ii.test(i.id))&&n.push(de("invalid-module",`invalid module id "${String(i.id)}"`,`${s}.id`)),(typeof i.version!="string"||i.version.length===0||!Ii.test(i.version))&&n.push(de("invalid-module",`invalid module version "${String(i.version)}"`,`${s}.version`)),typeof i.id=="string"&&Ii.test(i.id)&&typeof i.version=="string"&&Ii.test(i.version)&&r.push({id:i.id,version:i.version})}),n.length>0?{ok:!1,errors:n}:{ok:!0,values:r}}function um(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 lm(e){if(!ct(e))return[de("invalid-manifest","capability manifest must be a JSON object")];let t=[...ut(e,tm,"")];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")),!ct(e.runtime))t.push(de("invalid-runtime","runtime is required","runtime"));else{t.push(...ut(e.runtime,nm,"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=bc(e.runtime.features,"runtime.features");d.ok||t.push(...d.errors)}let n=gt(e.phases,"phases",em,"invalid-phase","phase");n.ok||t.push(...n.errors);let r=gt(e.managers,"managers",uc,"invalid-manager","manager");if(r.ok||t.push(...r.errors),!ct(e.assets))t.push(de("invalid-assets","assets is required","assets"));else{t.push(...ut(e.assets,rm,"assets"));let a=gt(e.assets.kinds,"assets.kinds",ic,"invalid-asset-kind","asset kind");a.ok||t.push(...a.errors),Array.isArray(e.assets.declarations)?e.assets.declarations.forEach((d,f)=>{let l=`assets.declarations[${f}]`;if(!ct(d)){t.push(de("invalid-assets","asset declaration must be an object",l));return}t.push(...ut(d,im,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"||!ic.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=Ln(e.acceptedEvents,"acceptedEvents");i.ok||t.push(...i.errors);let o=Ln(e.emittedEvents,"emittedEvents");if(o.ok||t.push(...o.errors),!ct(e.permissions))t.push(de("invalid-permissions","permissions is required","permissions"));else{t.push(...ut(e.permissions,om,"permissions"));let a=Ln(e.permissions.emit,"permissions.emit");a.ok||t.push(...a.errors);let d=Ln(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=gt(e.integrations,"integrations",lc,"invalid-integration","integration");if(s.ok||t.push(...s.errors),e.surface!==void 0&&(ct(e.surface)?(t.push(...ut(e.surface,pc,"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"||!gc.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(!ct(e.layers))t.push(de("invalid-layers","layers must be an object","layers"));else if(t.push(...ut(e.layers,fc,"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=gt(e.layers.blend,"layers.blend",yc,"invalid-blend","blend mode");a.ok||t.push(...a.errors)}}if(e.modules!==void 0){if(!ct(e.modules))t.push(de("invalid-module","modules must be an object","modules"));else if(t.push(...ut(e.modules,mc,"modules")),e.modules.refs!==void 0){let a=vc(e.modules.refs,"modules.refs");a.ok||t.push(...a.errors)}}if(e.kind!==void 0&&(typeof e.kind!="string"||!hc.has(e.kind))&&t.push(de("invalid-kind",`invalid cart kind "${String(e.kind)}"`,"kind")),e.grants!==void 0){let a=gt(e.grants,"grants",ks,"invalid-grant","grant");a.ok||t.push(...a.errors)}return t}function pm(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 fm(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=um(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 dr(e){let t=lm(e);if(t.length>0)return{ok:!1,errors:t};let n=fm(e);return t.push(...pm(n)),t.length>0?{ok:!1,errors:t}:{ok:!0,manifest:n}}function mm(e){let t=e;if(typeof e=="string")try{t=JSON.parse(e)}catch{return{ok:!1,errors:[de("invalid-json","capability manifest JSON is not parseable")]}}return dr(t)}function ym(e){return JSON.parse(JSON.stringify(e))}function cr(e,t){let n=dr(e),r=n.ok?[]:[...n.errors];if(!ct(t))return{ok:!1,errors:[de("invalid-host","host capabilities must be a JSON object")]};r.push(...ut(t,am,"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=bc(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,f)=>{a.has(d)||r.push(de("unsupported-feature",`host does not support required feature "${d}"`,`runtime.features[${f}]`))})}let o=gt(t.integrations,"host.integrations",lc,"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,f)=>{a.has(d)||r.push(de("missing-integration",`host does not provide required integration "${d}"`,`integrations[${f}]`))})}if(t.managers!==void 0){let a=gt(t.managers,"host.managers",uc,"invalid-manager","manager");if(!a.ok)r.push(...a.errors);else if(n.ok){let d=new Set(a.values);n.manifest.managers.forEach((f,l)=>{d.has(f)||r.push(de("missing-manager",`host does not provide required manager "${f}"`,`managers[${l}]`))})}}if(t.emit!==void 0){let a=Ln(t.emit,"host.emit");a.ok?n.ok&&n.manifest.permissions.emit.forEach((d,f)=>{Ri(d,a.values)||r.push(de("unknown-permission",`host does not allow emit permission "${d}"`,`permissions.emit[${f}]`))}):r.push(...a.errors)}if(t.subscribe!==void 0){let a=Ln(t.subscribe,"host.subscribe");a.ok?n.ok&&n.manifest.permissions.subscribe.forEach((d,f)=>{Ri(d,a.values)||r.push(de("unknown-permission",`host does not allow subscribe permission "${d}"`,`permissions.subscribe[${f}]`))}):r.push(...a.errors)}if(t.surface!==void 0&&(ct(t.surface)?(r.push(...ut(t.surface,pc,"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,f)=>{(typeof d!="string"||!gc.has(d))&&r.push(de("invalid-clear-policy",`invalid clear policy "${String(d)}"`,Array.isArray(t.surface?.clearPolicy)?`host.surface.clearPolicy[${f}]`:"host.surface.clearPolicy"))})):r.push(de("invalid-host","host.surface must be an object","host.surface"))),t.layers!==void 0){if(!ct(t.layers))r.push(de("invalid-host","host.layers must be an object","host.layers"));else if(r.push(...ut(t.layers,fc,"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=gt(t.layers.blend,"host.layers.blend",yc,"invalid-blend","blend mode");a.ok||r.push(...a.errors)}}let s;if(t.modules!==void 0)if(!ct(t.modules))r.push(de("invalid-host","host.modules must be an object","host.modules"));else if(r.push(...ut(t.modules,mc,"host.modules")),t.modules.refs!==void 0){let a=vc(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 f=new Set(d?.blend??[]);a.blend.forEach((l,k)=>{f.has(l)||r.push(de("unsupported-layer",`host does not provide blend mode "${l}"`,`layers.blend[${k}]`))})}}if(n.ok&&n.manifest.modules?.refs){let a=t.modules===void 0?[]:s??[];n.manifest.modules.refs.forEach((d,f)=>{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[${f}]`))})}if(n.ok&&n.manifest.grants&&n.manifest.grants.length>0){let a=t.grants===void 0?{ok:!0,values:[]}:gt(t.grants,"host.grants",ks,"invalid-grant","grant");if(!a.ok)r.push(...a.errors);else{let d=new Set(a.values);n.manifest.grants.forEach((f,l)=>{d.has(f)||r.push(de("ungranted-capability",`host does not grant "${f}"`,`grants[${l}]`))})}}else if(t.grants!==void 0){let a=gt(t.grants,"host.grants",ks,"invalid-grant","grant");a.ok||r.push(...a.errors)}if(t.kinds!==void 0){let a=gt(t.kinds,"host.kinds",hc,"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 Ti=1,gm=1e-6,hm=.5,bm=["normalized","asset","canvas","css","viewport"],vm=["center","top-left","top-right","bottom-left","bottom-right","top","bottom","left","right"],Sm={center:{x:.5,y:.5},"top-left":{x:0,y:0},"top-right":{x:1,y:0},"bottom-left":{x:0,y:1},"bottom-right":{x:1,y:1},top:{x:.5,y:0},bottom:{x:.5,y:1},left:{x:0,y:.5},right:{x:1,y:.5}};function Em(e){let t=Sm[e];return{x:t.x,y:t.y}}function Rs(e){let t=e.devicePixelRatio??1,{contentWidth:n,contentHeight:r,viewportWidth:i,viewportHeight:o,mode:s}=e,a=i/n,d=o/r,f=s==="contain"?Math.min(a,d):Math.max(a,d),l=n*f,k=r*f,E=(i-l)/2,R=(o-k)/2,O=Pi(-E/l),h=Pi(-R/k),P=Pi(i/l),B=Pi(o/k);return{mode:s,contentWidth:n,contentHeight:r,viewportWidth:i,viewportHeight:o,devicePixelRatio:t,scale:f,offsetX:E,offsetY:R,canvasWidth:i*t,canvasHeight:o*t,visibleNormalizedRect:{x:O,y:h,width:Math.min(P,1-O),height:Math.min(B,1-h)}}}function km(e,t){return{x:e.x*t.contentWidth,y:e.y*t.contentHeight}}function Im(e,t){return{x:e.x/t.contentWidth,y:e.y/t.contentHeight}}function Cs(e,t){return{x:t.offsetX+e.x*t.contentWidth*t.scale,y:t.offsetY+e.y*t.contentHeight*t.scale}}function an(e,t){return{x:(e.x-t.offsetX)/(t.contentWidth*t.scale),y:(e.y-t.offsetY)/(t.contentHeight*t.scale)}}function Ec(e,t){return{x:e.x*t.devicePixelRatio,y:e.y*t.devicePixelRatio}}function kc(e,t){return{x:e.x/t.devicePixelRatio,y:e.y/t.devicePixelRatio}}function Rm(e,t){return Ec(Cs(e,t),t)}function Ic(e,t){return an(kc(e,t),t)}function As(e,t){let n=Cs({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 Rc(e,t){let n=As(e,t),r=t.devicePixelRatio;return{x:n.x*r,y:n.y*r,width:n.width*r,height:n.height*r}}function lr(e,t,n,r){let o=(r?.space??"canvas")==="css"?an(e,t):Ic(e,t),s=[];for(let a of n.regions)dn(a,o)&&s.push(a);if(s.length!==0)return s.length===1||!r?.precedence||s.sort((a,d)=>{let f=r.precedence[a.id]??Number.NEGATIVE_INFINITY,l=r.precedence[d.id]??Number.NEGATIVE_INFINITY;return l!==f?l-f:a.id<d.id?-1:a.id>d.id?1:0}),s[0]}function Ps(e,t){let n=ur(e);if(n)return As(n,t)}function Cm(e){let t=new Map,n=r=>{if(t.has(r.id))return{ok:!1,error:"duplicate-id",id:r.id};let i={id:r.id,point:{x:r.point.x,y:r.point.y},...r.origin!==void 0?{origin:r.origin}:{}};return t.set(i.id,i),{ok:!0,landmark:i}};if(e)for(let r of e){let i=n(r);if(!i.ok)throw new Error(`Duplicate landmark id: ${i.id}`)}return{register:n,get:r=>t.get(r),list:()=>[...t.values()]}}function Ts(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),Sc(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=ur(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&&!wm(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(!Sc(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=ur(o);if(s)for(let a=i+1;a<e.regions.length;a+=1){let d=e.regions[a],f=ur(d);f&&xm(s,f)&&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 Am(e,t,n,r=[]){let i=[],o=(s,a,d)=>{i.push({method:s,id:d,args:a})};for(let s of n.regions){let a=ur(s);if(!a)continue;let d=Rc(a,t);e.fillStyle="rgba(0, 180, 255, 0.15)",e.strokeStyle="#00b4ff",e.fillRect&&e.fillRect(d.x,d.y,d.width,d.height),o("fillRect",[d.x,d.y,d.width,d.height],s.id),e.strokeRect&&e.strokeRect(d.x,d.y,d.width,d.height),o("strokeRect",[d.x,d.y,d.width,d.height],s.id),e.font="12px sans-serif";let f=s.id;e.fillText&&e.fillText(f,d.x+4,d.y+14),o("fillText",[f,d.x+4,d.y+14],s.id)}for(let s of r){let a=s.id?`${s.id}: ${s.code}`:s.code,d=16+i.filter(f=>f.method==="fillText").length*14;e.fillText&&e.fillText(a,8,d),o("fillText",[a,8,d],s.id)}return i}function Pm(e){return JSON.stringify(e)}function Tm(e){return JSON.parse(e)}function Pi(e){return e<=0?0:e>=1?1:e}function Sc(e){return e.x>=0&&e.x<=1&&e.y>=0&&e.y<=1}function wm(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 xm(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 ur(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 dn(e,t){return e.polygon&&e.polygon.length>=3?_m(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 _m(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 Ac=320,Pc=180,Om=1024,Dm="Runtime group has been destroyed";function Nm(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 Mm(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 Tc(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 Cc(e){try{return JSON.parse(JSON.stringify(e))}catch{return e}}function Lm(e){let t=new Set([yt,"*.*","*.*.*","*.*.*.*","*.*.*.*.*"]);for(let n of e){let r=Tc(n);for(let i of r.emit??[])t.add(i);for(let i of r.subscribe??[])t.add(i)}return[...t]}function ws(e){if(!e.participants.length)throw new Error("createRuntimeGroup: at least one participant is required");let t=new Set;for(let u of e.participants){if(!u.id)throw new Error("createRuntimeGroup: participant id is required");if(t.has(u.id))throw new Error(`createRuntimeGroup: duplicate participant id "${u.id}"`);t.add(u.id)}let n=e.origin??0,r=e.width??Ac,i=e.height??Pc,o=e.maxTrace??Om,s=[...e.participants].sort((u,v)=>u.id.localeCompare(v.id)),a=[],d=new Map,f=0,l=e.createId??e.router?.createId??(()=>`evt-${++f}`),k=e.now??e.router?.now??(()=>{let u=a[0];if(!u)return n;try{return u.cart.getClock().now}catch{return n}}),E=us({...e.router,createId:l,now:k,validate:e.validate??e.router?.validate}),R=[],O=!1,h=!1,P=()=>{},B=u=>v=>{u.events.push(v),u.userOnEvent?.(v)},W=()=>{if(h)throw new Error(Dm)},T=()=>{P();for(let u of a){try{E.detach(u.id)}catch{}try{u.runtime.destroy()}catch{}u.ownsContainer&&u.container.remove()}a.length=0,d.clear()};try{for(let u of s){let v=u.width??r,c=u.height??i,p=!u.container,m=u.container??Mm(v,c),S=ss({container:m,seed:u.seed??Nm(u.id),deterministic:{origin:n},audioBroker:e.audioBroker,audioParticipantId:e.audioBroker?u.id:void 0,kind:u.kind??"render"}),_={id:u.id,kind:u.kind??"render",cartDef:u.cart,initialState:u.initialState,gameManager:u.gameManager,userOnEvent:u.onEvent,runtime:S,container:m,ownsContainer:p,cart:void 0,events:[],errors:[],suspended:!1};S.onError=(C,N)=>{_.errors.push({error:C,info:N})},E.attach(u.id,S.hostChannel,Tc(u)),_.cart=S.mount(u.cart,{initialState:u.initialState,gameManager:u.gameManager,onEvent:B(_)}),a.push(_),d.set(_.id,_)}P=E.subscribe(Lm(s),u=>{for(R.push(Cc(u));R.length>o;)R.shift()})}catch(u){throw T(),u}let M=u=>({id:u.id,kind:u.kind,runtime:u.runtime,container:u.container,get events(){return u.events.slice()},get errors(){return u.errors.slice()},get cart(){return u.cart}});return{router:E,origin:n,get paused(){return O},get audioBroker(){return e.audioBroker},participant(u){W();let v=d.get(u);if(!v)throw new Error(`createRuntimeGroup: unknown participant "${u}"`);return M(v)},async step(u=1){if(W(),O)return;let v=Math.max(0,Math.floor(u));for(let c=0;c<v;c++){E.turn();for(let p of a)if(!p.suspended)try{await p.cart.step(1)}catch(m){p.errors.push({error:m,info:{phase:"update",consecutive:p.errors.length+1,stopped:!1}})}}},pause(){W(),O=!0;for(let u of a)u.cart.pause()},resume(){W(),O=!1;for(let u of a)u.cart.resume()},reset(){W(),R.length=0;for(let u of a)u.events.length=0,u.errors.length=0,u.suspended=!1,u.cart=u.runtime.mount(u.cartDef,{initialState:u.initialState,gameManager:u.gameManager,onEvent:B(u)});E.turn()},resize(u,v){W();let c=Math.max(1,u|0),p=Math.max(1,v|0);for(let m of a){Object.defineProperty(m.container,"clientWidth",{value:c,configurable:!0}),Object.defineProperty(m.container,"clientHeight",{value:p,configurable:!0});let S=m.cart.canvas;S&&(S.width=c,S.height=p)}},detach(u){W();let v=d.get(u);if(!v)throw new Error(`createRuntimeGroup: unknown participant "${u}"`);try{E.detach(v.id)}catch{}try{v.runtime.destroy()}catch{}e.audioBroker&&e.audioBroker.teardown(v.id),v.ownsContainer&&v.container.remove();let c=a.indexOf(v);c>=0&&a.splice(c,1),d.delete(u)},suspendParticipant(u){W();let v=d.get(u);if(!v)throw new Error(`createRuntimeGroup: unknown participant "${u}"`);v.suspended=!0,v.cart.pause()},resumeParticipant(u){W();let v=d.get(u);if(!v)throw new Error(`createRuntimeGroup: unknown participant "${u}"`);v.suspended=!1,O||v.cart.resume()},isParticipantSuspended(u){W();let v=d.get(u);if(!v)throw new Error(`createRuntimeGroup: unknown participant "${u}"`);return v.suspended},dispatch(u,v){W();let c=d.get(u);if(!c)throw new Error(`createRuntimeGroup: unknown participant "${u}"`);c.cart.dispatch(v)},publish(u,v){return W(),E.publish(u,v)},inspectParticipants(){W();let u=new Map(a.map(v=>[v.id,v.kind]));return E.inspectParticipants().map(v=>({...v,kind:u.get(v.id)??"render"}))},async inspect(){W();let u={},v={},c=new Map(E.inspectParticipants().map(S=>[S.id,S]));for(let S of a){let _=await S.cart.getReplayMetadata(),C=S.cart.getClock();v[S.id]=C;let N=c.get(S.id);u[S.id]={state:_.state,events:S.events.slice(),errors:S.errors.slice(),kind:S.kind,clock:C,emit:N?.emit.slice()??[],subscribe:N?.subscribe.slice()??[],authoritative:N?.authoritative===!0,suspended:S.suspended}}let p=R.map(S=>Cc(S)),m=a.filter(S=>S.suspended).map(S=>S.id).sort();return{participants:u,trace:p,diagnostics:{paused:O,participantIds:a.map(S=>S.id),suspendedIds:m,clocks:v,rejections:p.filter(S=>S.type===yt).map(S=>S.payload)}}},destroy(){if(!h){h=!0,O=!1;try{T()}finally{R.length=0}}}}}var Vm=["invalid-ref","unknown-module","version-mismatch","not-allowlisted","load-failed","invoke-failed","timeout","rate-limited","destroyed"],wc="executable module host has been destroyed";var Bm=/^[a-z0-9][a-z0-9.-]*$/i,Fm=/^[a-z0-9][a-z0-9-]*$/i;function cn(e){return{id:e.id,version:e.version}}function xs(e){return`${e.id}@${e.version}`}function pr(e){return typeof e=="string"&&e.length>0&&Bm.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 Oc(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 Hm(e,t){return t.some(n=>n.version===e.version&&Oc(n.id,e.id))}function fr(e){return e!==null&&typeof e=="object"&&!Array.isArray(e)}function qm(e){return typeof e=="object"&&e!==null&&typeof e.then=="function"}function xc(e){return e instanceof Error&&e.message?e.message:String(e)}function Bn(e){if(e===null||typeof e!="object")return e;if(Array.isArray(e))return Object.freeze(e.map(n=>Bn(n)));if(Object.getPrototypeOf(e)!==Object.prototype)return e;let t={};for(let n of Object.keys(e))t[n]=Bn(e[n]);return Object.freeze(t)}function _c(e){if(!fr(e))return;let t=e.id,n=e.version;if(!(!pr(t)||!pr(n)))return{id:t,version:n}}function Km(e){if(e===void 0)return{};if(!fr(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 _s(e){if(!fr(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((A,u)=>{if(!fr(A))throw new Error(`createExecutableModuleHost: allowlist[${u}] must be an object`);if(!$m(A.id))throw new Error(`createExecutableModuleHost: allowlist[${u}].id is not a valid id or pattern`);if(!pr(A.version)||A.version.includes("*"))throw new Error(`createExecutableModuleHost: allowlist[${u}].version must be an exact version`);return{id:A.id,version:A.version}}),n=new Map,r=new Map;for(let[A,u]of e.modules.entries()){if(!fr(u))throw new Error(`createExecutableModuleHost: modules[${A}] must be an object`);if(!pr(u.id))throw new Error(`createExecutableModuleHost: modules[${A}].id is invalid`);if(!pr(u.version))throw new Error(`createExecutableModuleHost: modules[${A}].version is invalid`);if(typeof u.create!="function")throw new Error(`createExecutableModuleHost: modules[${A}].create must be a function`);let v=`${u.id}@${u.version}`;if(n.has(v))throw new Error(`createExecutableModuleHost: duplicate module ${v}`);n.set(v,{id:u.id,version:u.version,create:u.create,capabilities:u.capabilities});let c=r.get(u.id)??[];c.push(u.version),r.set(u.id,c)}let i=Km(e.limits),o=e.capabilities,s=new Map,a=new Set,d=[],f=0,l=0,k=!1;function E(A,u,v){let c=v?{code:A,detail:u,ref:cn(v)}:{code:A,detail:u};return d.push(c),d.length>256&&d.shift(),c}function R(A,u,v){return{ok:!1,error:E(A,u,v)}}function O(A){if(k){let S=_c(A);return R("destroyed",wc,S)}let u=_c(A);if(!u)return R("invalid-ref","module ref requires exact id and version");let v=n.get(xs(u)),c=r.has(u.id),p=Hm(u,t),m=t.some(S=>Oc(S.id,u.id)&&S.version!==u.version);return p?v?{ok:!0,ref:u,registration:v}:c?R("version-mismatch",`no factory for ${u.id}@${u.version}`,u):R("unknown-module",`unknown module "${u.id}"`,u):m||c&&!v?R("version-mismatch",`no allowlisted factory for ${u.id}@${u.version}`,u):!v&&!c?R("unknown-module",`unknown module "${u.id}"`,u):R("not-allowlisted",`${u.id}@${u.version} is not allowlisted`,u)}function h(A,u){let v=xs(A);if(s.has(v))return{ok:!0,ref:cn(A)};let c=Bn({...o??{},...u.capabilities??{}});try{let p=u.create(c);return!p||typeof p.invoke!="function"?R("load-failed",`factory for ${A.id}@${A.version} did not return an invoke() module`,A):(s.set(v,{ref:cn(A),instance:p}),{ok:!0,ref:cn(A)})}catch(p){return R("load-failed",xc(p),A)}}function P(A){let u=O(A);return u.ok?h(u.ref,u.registration):u}function B(A,u){let v=O(A);if(!v.ok)return Promise.resolve(v);if(i.maxInvokesPerTurn!==void 0&&l>=i.maxInvokesPerTurn)return Promise.resolve(R("rate-limited",`maxInvokesPerTurn ${i.maxInvokesPerTurn} exceeded`,v.ref));l+=1;let c=h(v.ref,v.registration);if(!c.ok)return Promise.resolve(c);let p=s.get(xs(v.ref));if(!p)return Promise.resolve(R("load-failed","module instance was not retained",v.ref));let m=new AbortController;a.add(m);let S=Date.now(),_=i.maxInvokeMs,C;_!==void 0&&(C=setTimeout(()=>m.abort(),_));let N=w=>(C!==void 0&&clearTimeout(C),a.delete(m),k?R("destroyed",wc,v.ref):w),K=w=>m.signal.aborted&&_!==void 0?R("timeout",`invoke exceeded ${_}ms`,v.ref):R("invoke-failed",xc(w),v.ref);try{let w=p.instance.invoke(u,{signal:m.signal,turn:f});return qm(w)?new Promise(g=>{let x=!1,L=$=>{x||(x=!0,g(N($)))};if(_!==void 0){let $=C;$!==void 0&&clearTimeout($),C=setTimeout(()=>{m.abort(),L(R("timeout",`invoke exceeded ${_}ms`,v.ref))},Math.max(0,_-(Date.now()-S)))}Promise.resolve(w).then($=>L({ok:!0,value:$}),$=>L(K($)))}):_!==void 0&&Date.now()-S>=_?(m.abort(),Promise.resolve(N(R("timeout",`invoke exceeded ${_}ms`,v.ref)))):Promise.resolve(N({ok:!0,value:w}))}catch(w){return Promise.resolve(N(K(w)))}}function W(){k||(f+=1,l=0)}function T(){return{allowlist:t.map(cn),registered:[...n.values()].map(A=>({id:A.id,version:A.version})),loaded:[...s.values()].map(A=>cn(A.ref)),turn:f,invokesThisTurn:l,diagnostics:d.map(A=>A.ref?{...A,ref:cn(A.ref)}:{...A})}}function M(){if(!k){k=!0;for(let A of a)A.abort();a.clear();for(let A of s.values())try{A.instance.destroy?.()}catch{}s.clear(),n.clear(),r.clear(),t.length=0}}return{load:P,invoke:B,beginTurn:W,inspect:T,destroy:M}}var wi=1,xi="hmac-sha256",Jt=1,Ns=Vn,Gm=["invalid-json","invalid-manifest","invalid-version","invalid-signature","unknown-publisher","unknown-key","undeclared-asset","hash-mismatch","unsigned-bytes","capability-denied","destroyed","load-failed"],_i=class extends Error{constructor(n,r){super(`${r} requires grant "${n}"`);this.code="capability-denied";this.name="RemoteCartCapabilityError",this.grant=n}};function me(e,t,n){return n?{code:e,detail:t,path:n}:{code:e,detail:t}}function ln(e){return e!==null&&typeof e=="object"&&!Array.isArray(e)}function Qe(e){return typeof e=="string"&&e.length>0}var Os=new Set(Ns),Dc=new Set(["image","audio","font","spritesheet"]),Wm=new Set(["version","id","cartVersion","publisher","assets","requestedGrants","module","capabilities"]),jm=new Set(["id","kind","url","hash","alg"]),Um=new Set(["alg","keyId","mac"]),Nc=/^[a-z0-9][a-z0-9.-]*$/i,Jm=256;function Bc(e){let t="";for(let n=0;n<e.length;n++)t+=e[n].toString(16).padStart(2,"0");return t}var zm=/^[0-9a-f]+$/i;function Mc(e){if(e.length%2!==0||e.length===0||!zm.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 Ym(e,t){let n=Mc(e),r=Mc(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 mr(e){let t=typeof e=="string"?new TextEncoder().encode(e):e,n=await crypto.subtle.digest("SHA-256",t);return Bc(new Uint8Array(n))}async function Ms(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 Bc(new Uint8Array(r))}function Ds(e){if(Array.isArray(e))return e.map(Ds);if(!ln(e))return e;let t={};for(let n of Object.keys(e).sort())t[n]=Ds(e[n]);return t}function Ls(e){return JSON.stringify(Ds(e))}function Oi(e,t,n){let r=[];for(let i of Object.keys(e))t.has(i)||r.push(me("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 Fc(e,t){if(!Array.isArray(e))return{ok:!1,errors:[me("invalid-manifest",`${t} must be an array`,t)]};let n=[],r=[];return e.forEach((i,o)=>{let s=`${t}[${o}]`;typeof i!="string"||!Os.has(i)?n.push(me("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:[me("invalid-manifest","assets must be an array","assets")]};let t=[],n=[],r=new Set;return e.forEach((i,o)=>{let s=`assets[${o}]`;if(!ln(i)){t.push(me("invalid-manifest","asset must be an object",s));return}t.push(...Oi(i,jm,s)),Qe(i.id)?r.has(i.id)?t.push(me("invalid-manifest",`duplicate asset id "${i.id}"`,`${s}.id`)):r.add(i.id):t.push(me("invalid-manifest","asset id is required",`${s}.id`)),(typeof i.kind!="string"||!Dc.has(i.kind))&&t.push(me("invalid-manifest",`invalid asset kind "${String(i.kind)}"`,`${s}.kind`)),Qe(i.url)||t.push(me("invalid-manifest","asset url is required",`${s}.url`)),Qe(i.hash)||t.push(me("unsigned-bytes","asset hash is required",`${s}.hash`)),i.alg!=="sha256"&&t.push(me("invalid-manifest","asset alg must be sha256",`${s}.alg`)),Qe(i.id)&&typeof i.kind=="string"&&Dc.has(i.kind)&&Qe(i.url)&&Qe(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}:ln(e)?!Qe(e.id)||!Nc.test(e.id)?{ok:!1,errors:[me("invalid-manifest","module.id is invalid","module.id")]}:!Qe(e.version)||!Nc.test(e.version)?{ok:!1,errors:[me("invalid-manifest","module.version is invalid","module.version")]}:{ok:!0,value:{id:e.id,version:e.version}}:{ok:!1,errors:[me("invalid-manifest","module must be an object","module")]}}function $c(e){if(!ln(e))return{ok:!1,errors:[me("invalid-manifest","remote cart body must be a JSON object")]};let t=Oi(e,Wm,"");e.version!==void 0&&e.version!==wi&&t.push(me("invalid-version",`remote cart manifest version must be ${wi}`,"version")),Qe(e.id)||t.push(me("invalid-manifest","id is required","id")),Qe(e.cartVersion)||t.push(me("invalid-manifest","cartVersion is required","cartVersion")),Qe(e.publisher)||t.push(me("unknown-publisher","publisher is required","publisher"));let n=Qm(e.assets);n.ok||t.push(...n.errors);let r=Fc(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=dr(e.capabilities);if(a.ok)o=a.manifest;else for(let d of a.errors)t.push(me(d.code,d.detail,d.path?`capabilities.${d.path}`:"capabilities"))}if(t.length>0)return{ok:!1,errors:t};let s={version:wi,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 ey(e){if(!ln(e))return{ok:!1,errors:[me("invalid-signature","signature must be an object","signature")]};let t=Oi(e,Um,"signature");return e.alg!==xi&&t.push(me("invalid-signature","signature.alg must be hmac-sha256","signature.alg")),Qe(e.keyId)||t.push(me("unknown-key","signature.keyId is required","signature.keyId")),(!Qe(e.mac)||!/^[0-9a-f]+$/i.test(e.mac))&&t.push(me("invalid-signature","signature.mac must be hex","signature.mac")),t.length>0?{ok:!1,errors:t}:{ok:!0,signature:{alg:xi,keyId:e.keyId,mac:e.mac.toLowerCase()}}}function Di(e){if(!ln(e))return{ok:!1,errors:[me("invalid-manifest","signed remote cart must be a JSON object")]};let t=$c(e.body),n=ey(e.signature),r=[];t.ok||r.push(...t.errors),n.ok||r.push(...n.errors);let i=Oi(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}}}function Hc(e){let t=e;if(typeof e=="string")try{t=JSON.parse(e)}catch{return{ok:!1,errors:[me("invalid-json","remote cart JSON is not parseable")]}}return Di(t)}async function ty(e,t,n){let r=$c(e);if(!r.ok)return r;if(!Qe(t)||!Qe(n))return{ok:!1,errors:[me("unknown-key","signing key id and secret are required")]};let i=await Ms(t,Ls(r.body));return{ok:!0,manifest:{body:r.body,signature:{alg:xi,keyId:n,mac:i}}}}async function yr(e,t,n){let r=Di(e);if(!r.ok)return r;let i=t[r.manifest.signature.keyId];if(!Qe(i))return{ok:!1,errors:[me("unknown-key",`unknown signature key "${r.manifest.signature.keyId}"`,"signature.keyId")]};let o=await Ms(i,Ls(r.manifest.body));return Ym(o,r.manifest.signature.mac)?n!==void 0&&r.manifest.body.cartVersion!==n?{ok:!1,errors:[me("invalid-version",`cartVersion ${r.manifest.body.cartVersion} does not match ${n}`,"body.cartVersion")]}:{ok:!0,manifest:r.manifest}:{ok:!1,errors:[me("invalid-signature","HMAC does not match canonical body","signature.mac")]}}function ny(e){let t=new Map;for(let[n,r]of Object.entries(e)){let i=Hc(r);i.ok&&t.set(n,i.manifest)}return{get(n){return t.get(n)}}}async function ry(e){let t;if(e.source.kind==="registry"){let n=e.registry?.get(e.source.id);if(!n)return{ok:!1,errors:[me("invalid-manifest",`unknown registry id "${e.source.id}"`)]};t=n}else{if(typeof e.fetch!="function")return{ok:!1,errors:[me("load-failed","url loads require a fetch adapter")]};try{t=await e.fetch(e.source.url)}catch(n){return{ok:!1,errors:[me("load-failed",n instanceof Error?n.message:String(n))]}}}return yr(t,e.keys,e.expectedVersion)}function Vs(e){return[...e.body.requestedGrants]}function Fn(e){let t=new Set;if(e)for(let o of e)Os.has(o)&&t.add(o);function n(){return{schemaVersion:Jt,grants:Ns.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:[me("invalid-json","grant snapshot JSON is not parseable")]}}if(!ln(s))return{ok:!1,errors:[me("invalid-manifest","grant snapshot must be an object")]};if(s.schemaVersion!==Jt)return{ok:!1,errors:[me("invalid-version",`grant snapshot schema must be ${Jt}`,"schemaVersion")]};let a=Fc(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 Os.has(o)?(s?t.add(o):t.delete(o),{ok:!0,grants:n().grants}):{ok:!1,errors:[me("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 un(e,t){return e.push(t),e.length>Jm&&e.shift(),t}function Lc(e){return e.code==="undeclared"?me("undeclared-asset",e.message,e.ref):e.code==="hash-mismatch"?me("hash-mismatch",e.message,e.ref):e.code==="unsigned"?me("unsigned-bytes",e.message,e.ref):me("load-failed",e.message,e.ref)}function Vc(e,t,n,r){let i=(s,a)=>{if(!e.has(s))throw new _i(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 Bn(o)}function qc(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 iy(e){let t=Di(e.manifest);if(!t.ok)throw new Error(t.errors.map(B=>B.detail).join("; "));let n=t.manifest,r=Fn(e.grants),i=[],o=new Map,s=new Set(n.body.assets.map(B=>B.url)),a={};for(let B of n.body.assets)a[B.id]={url:B.url,hash:B.hash,alg:B.alg};let d=!1,f=!1,l=!1,k;function E(){return un(i,me("destroyed","remote cart sandbox has been destroyed"))}async function R(){if(l)return{ok:!0};let B=await yr(n,e.keys);if(!B.ok){for(let W of B.errors)un(i,W);return{ok:!1,errors:B.errors}}return l=!0,{ok:!0}}async function O(){if(f)return{ok:!1,errors:[E()]};let B=await R();if(!B.ok)return B;if(n.body.capabilities){let A=n.body.capabilities,u=cr(A,{contractVersion:Math.max(1,A.runtime.minContractVersion),features:[...A.runtime.features],integrations:[...A.integrations],grants:r.list()});if(!u.ok){let v=u.errors.map(c=>me(c.code,c.detail,c.path));for(let c of v)un(i,c);return{ok:!1,errors:v}}}let W=ir({declared:a,fetchBytes:async A=>e.bytesByUrl[A],hashBytes:mr}),T=on({resolver:W,emitEvents:!1,wallClockTimeout:!1}),M=n.body.assets.map(A=>({id:A.id,ref:A.id,type:A.kind,integrity:`sha256-${A.hash}`,provenance:{publisher:n.body.publisher,version:n.body.cartVersion}}));try{let A=await T.preload(M);if(A.failed>0)return{ok:!1,errors:A.failures.map(v=>un(i,Lc(v)))};if(d=!0,n.body.module&&e.modules){k=_s({allowlist:[n.body.module],modules:e.modules,capabilities:Vc(r,s,e.bytesByUrl,o)});let u=k.load(n.body.module);if(!u.ok){let v=me("load-failed",u.error.detail,`${u.error.ref?.id}@${u.error.ref?.version}`);return un(i,v),{ok:!1,errors:[v]}}}return{ok:!0,snapshot:A}}catch(A){return An(A)?{ok:!1,errors:[un(i,Lc(A))]}:{ok:!1,errors:[un(i,me("load-failed",A instanceof Error?A.message:String(A)))]}}finally{T.dispose()}}function h(){return f?{ok:!1,errors:[E()]}:l?Vc(r,s,e.bytesByUrl,o):{ok:!1,errors:[me("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(B=>({id:B.id,url:B.url,hash:B.hash})),loaded:d,destroyed:f,diagnostics:i.map(B=>({...B}))}}return{listRequestedGrants:()=>[...n.body.requestedGrants],grants:r,loadAssets:O,capabilities:h,inspect:P,snapshotProvenance:()=>qc(n,r.list()),destroy(){f||(f=!0,k?.destroy(),o.clear())}}}var gr=1,hr=1,Gc=8,Wc=["cabinet","painting","dream","wormhole","book","nested-world"],jc=["completed","aborted"],Hs=["audio","controller","fullscreen"],zt="portal.lifecycle.entered",br="portal.lifecycle.exited",vr="portal.lifecycle.aborted",oy=[zt,br,vr],sy=new Set(Wc),ay=new Set(jc),dy=new Set(Hs),cy=new Set(Vn),uy="Portal lifecycle has been destroyed";function Se(e,t,n){return n?{code:e,detail:t,path:n}:{code:e,detail:t}}function Bs(e){return e!==null&&typeof e=="object"&&!Array.isArray(e)}function pn(e){try{return JSON.parse(JSON.stringify(e))}catch{return e}}function Kc(e){return typeof e=="string"&&sy.has(e)}function ly(e){return dy.has(e)}function $s(e){return[...e].sort()}function Uc(e){return $s([...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:pn(e.parentState),parentGrants:[...e.parentGrants],childGrants:Uc(e),childGrantsBefore:[...e.childGrantsBefore],extraChildGrants:[...e.extraChildGrants],persistence:pn(e.persistence),transferred:[...e.transferred],enterCue:e.enterCue,exitCue:e.exitCue}}function py(e){return{enter:t=>e.enter({...t,metaphor:"cabinet"}),exit:e.exit,abort:e.abort}}function fy(e){return{enter:t=>e.enter({...t,metaphor:"painting"}),exit:e.exit,abort:e.abort}}function my(e={}){let t=e.group,n=e.audioBroker??t?.audioBroker,r=e.maxDepth??Gc,i=new Map((e.declarations??[]).map(g=>[g.id,g])),o=new Map;if(e.grants)for(let[g,x]of Object.entries(e.grants))o.set(g,x);let s=0,a=e.createId??(()=>`portal-${++s}`),d=[],f=[],l=null,k=!1,E=e.rootId??null,R=()=>{if(k)throw new Error(uy)},O=g=>{let x=o.get(g);return x||(x=Fn(),o.set(g,x)),x},h=()=>d.length===0?E:d[d.length-1].childId,P=(g,x)=>{if(f.push(g),!t)return;let L={type:g,kind:"state",payload:x};try{t.publish(L)}catch{}},B=g=>{if(!t)return null;try{return pn(t.participant(g).cart.getCartState())}catch{return null}},W=()=>{if(!t)return;let g=new Set;for(let L of d)g.add(L.parentId);let x=new Set(t.inspectParticipants().map(L=>L.id));for(let L of x)g.has(L)?t.isParticipantSuspended(L)||t.suspendParticipant(L):t.isParticipantSuspended(L)&&t.resumeParticipant(L)},T=(g,x,L)=>{let $=O(g),q=O(x),ee=$.list(),Y=q.list(),G=[];for(let y of Hs)$.has(y)&&($.revoke(y),q.grant(y),G.push(y));if(L)for(let y of L)q.grant(y);return M(g,x,G,L??[]),{transferred:G,parentBefore:ee,childBefore:Y}},M=(g,x,L,$)=>{n&&(L.includes("audio")||$.includes("audio"))&&(n.revoke(g),n.authorize(x))},A=g=>{for(let x of g)M(x.parentId,x.childId,x.transferred,x.extraChildGrants)},u=()=>n?n.inspect().authorized.slice():[],v=g=>{if(!n)return;let x=new Set(g);for(let L of n.inspect().authorized)x.has(L)||n.revoke(L);for(let L of g)n.authorize(L)},c=()=>t?t.inspectParticipants().map(g=>g.id).filter(g=>t.isParticipantSuspended(g)).sort():[],p=g=>{if(!t)return;let x=new Set(g);for(let L of t.inspectParticipants()){let $=t.isParticipantSuspended(L.id);x.has(L.id)&&!$&&t.suspendParticipant(L.id),!x.has(L.id)&&$&&t.resumeParticipant(L.id)}},m=g=>{let x=O(g.parentId),L=O(g.childId);for(let $ of g.transferred)L.revoke($),x.grant($);for(let $ of g.extraChildGrants)g.childGrantsBefore.includes($)||L.revoke($);n&&(g.transferred.includes("audio")||g.extraChildGrants.includes("audio"))&&(n.revoke(g.childId),n.authorize(g.parentId))},S=()=>{let g={};for(let[x,L]of o)g[x]=L.list();return{destroyed:k,activeId:k?null:h(),stack:d.map(Fs),lastOutcome:l,cues:[...f],grants:g}},_=(g,x)=>{if(R(),d.length===0)return{ok:!1,errors:[Se("empty-stack","no portal is open")]};let L=d[d.length-1],$={schemaVersion:hr,kind:g,payload:x},q=g==="aborted"?vr:br;return L.exitCue=q,m(L),d.pop(),l=$,W(),P(q,{parentId:L.parentId,childId:L.childId,metaphor:L.metaphor,kind:g}),{ok:!0,inspect:S(),outcome:$}},C=(g,x)=>g===null?{ok:!0,outcome:null}:Bs(g)?g.schemaVersion!==hr?{ok:!1,errors:[Se("invalid-version",`outcome schema must be ${hr}`,`${x}.schemaVersion`)]}:typeof g.kind!="string"||!ay.has(g.kind)?{ok:!1,errors:[Se("invalid-snapshot","outcome.kind is required",`${x}.kind`)]}:{ok:!0,outcome:{schemaVersion:hr,kind:g.kind,payload:g.payload}}:{ok:!1,errors:[Se("invalid-snapshot","outcome must be an object or null",x)]},N=(g,x)=>{if(!Array.isArray(g))return{ok:!1,errors:[Se("invalid-snapshot","grants must be an array",x)]};let L=[];for(let $=0;$<g.length;$++){let q=g[$];if(typeof q!="string"||!cy.has(q))return{ok:!1,errors:[Se("invalid-snapshot",typeof q=="string"?`unknown grant "${q}"`:"grant must be a string",`${x}[${$}]`)]};L.push(q)}return{ok:!0,grants:L}},K=(g,x)=>{if(!Bs(g))return{ok:!1,errors:[Se("invalid-snapshot","frame must be an object",x)]};if(typeof g.id!="string"||g.id.length===0)return{ok:!1,errors:[Se("invalid-snapshot","frame.id is required",`${x}.id`)]};if(typeof g.parentId!="string"||typeof g.childId!="string")return{ok:!1,errors:[Se("invalid-snapshot","parentId and childId are required",x)]};if(!Kc(g.metaphor))return{ok:!1,errors:[Se("invalid-snapshot","unknown metaphor",`${x}.metaphor`)]};let L=N(g.parentGrants,`${x}.parentGrants`);if(!L.ok)return L;let $=N(g.childGrants,`${x}.childGrants`);if(!$.ok)return $;if(!Array.isArray(g.transferred))return{ok:!1,errors:[Se("invalid-snapshot","transferred must be an array",`${x}.transferred`)]};let q=[];for(let b=0;b<g.transferred.length;b++){let I=g.transferred[b];if(typeof I!="string"||!ly(I))return{ok:!1,errors:[Se("invalid-snapshot","invalid exclusive grant",`${x}.transferred[${b}]`)]};q.push(I)}if(g.enterCue!==zt)return{ok:!1,errors:[Se("invalid-snapshot","enterCue mismatch",`${x}.enterCue`)]};let ee=g.exitCue;if(ee!==null&&ee!==br&&ee!==vr)return{ok:!1,errors:[Se("invalid-snapshot","invalid exitCue",`${x}.exitCue`)]};if(g.seed!==null&&typeof g.seed!="string")return{ok:!1,errors:[Se("invalid-snapshot","seed must be string or null",`${x}.seed`)]};if(g.clock!==null&&typeof g.clock!="number")return{ok:!1,errors:[Se("invalid-snapshot","clock must be number or null",`${x}.clock`)]};let Y=g.extraChildGrants===void 0?{ok:!0,grants:[]}:N(g.extraChildGrants,`${x}.extraChildGrants`);if(!Y.ok)return Y;let G=g.childGrantsBefore===void 0?{ok:!0,grants:$.grants}:N(g.childGrantsBefore,`${x}.childGrantsBefore`);if(!G.ok)return G;let y=g.childGrantsBefore===void 0?Uc({childGrantsBefore:G.grants,transferred:q,extraChildGrants:Y.grants}):$.grants;return{ok:!0,frame:{id:g.id,parentId:g.parentId,childId:g.childId,metaphor:g.metaphor,seed:g.seed,clock:g.clock,parentState:g.parentState,parentGrants:L.grants,childGrants:y,childGrantsBefore:G.grants,extraChildGrants:Y.grants,persistence:g.persistence??null,transferred:q,enterCue:zt,exitCue:ee}}},w=g=>{let x=g;if(typeof g=="string")try{x=JSON.parse(g)}catch{return{ok:!1,errors:[Se("invalid-json","portal snapshot JSON is not parseable")]}}if(!Bs(x))return{ok:!1,errors:[Se("invalid-snapshot","snapshot must be an object")]};if(x.schemaVersion!==gr)return{ok:!1,errors:[Se("invalid-version",`portal snapshot schema must be ${gr}`,"schemaVersion")]};if(!Array.isArray(x.stack))return{ok:!1,errors:[Se("invalid-snapshot","stack must be an array","stack")]};let L=[];for(let Y=0;Y<x.stack.length;Y++){let G=K(x.stack[Y],`stack[${Y}]`);if(!G.ok)return G;L.push(G.frame)}if(L.length>r)return{ok:!1,errors:[Se("max-depth",`stack exceeds maxDepth ${r}`,"stack")]};let $=C(x.lastOutcome,"lastOutcome");if(!$.ok)return $;if(x.activeId!==null&&typeof x.activeId!="string")return{ok:!1,errors:[Se("invalid-snapshot","activeId must be string or null","activeId")]};if(!Array.isArray(x.cues))return{ok:!1,errors:[Se("invalid-snapshot","cues must be an array","cues")]};let q=[];for(let Y=0;Y<x.cues.length;Y++){let G=x.cues[Y];if(G!==zt&&G!==br&&G!==vr)return{ok:!1,errors:[Se("invalid-snapshot","unknown cue",`cues[${Y}]`)]};q.push(G)}let ee=L.length===0?E:L[L.length-1].childId;return x.activeId!==ee&&x.activeId!==null&&L.length>0&&x.activeId!==L[L.length-1].childId?{ok:!1,errors:[Se("invalid-snapshot","activeId must be the top child when the stack is non-empty","activeId")]}:{ok:!0,snapshot:{schemaVersion:gr,activeId:x.activeId??ee,stack:L,lastOutcome:$.outcome,cues:q}}};return{enter(g){R();let x=[];(!g.from||!g.to)&&x.push(Se("invalid-enter","from and to are required")),g.from===g.to&&x.push(Se("invalid-enter","cannot enter the same cart")),g.metaphor!==void 0&&!Kc(g.metaphor)&&x.push(Se("invalid-enter","unknown metaphor","metaphor")),d.length>=r&&x.push(Se("max-depth",`portal stack is at maxDepth ${r}`));let L=h();L&&g.from!==L&&x.push(Se("stack-order",`enter must start from the active cart "${L}"`,"from"));let $=i.get(g.from);if($&&!$.targets.includes(g.to)&&x.push(Se("undeclared-target",`"${g.from}" does not declare target "${g.to}"`,"to")),t){try{t.participant(g.from)}catch{x.push(Se("unknown-parent",`unknown parent "${g.from}"`,"from"))}try{t.participant(g.to)}catch{x.push(Se("unknown-child",`unknown child "${g.to}"`,"to"))}}if(x.length)return{ok:!1,errors:x};let q=g.state!==void 0?pn(g.state):B(g.from),ee=g.grants??[],{transferred:Y,parentBefore:G,childBefore:y}=T(g.from,g.to,ee),b={id:a(),parentId:g.from,childId:g.to,metaphor:g.metaphor??"nested-world",seed:g.seed??null,clock:g.clock??null,parentState:q,parentGrants:$s(G),childGrantsBefore:$s(y),transferred:Y,extraChildGrants:[...ee],persistence:g.persistence??null,enterCue:zt,exitCue:null};return d.push(b),W(),P(zt,{parentId:b.parentId,childId:b.childId,metaphor:b.metaphor,seed:b.seed}),{ok:!0,inspect:S()}},exit(g){return _("completed",g)},abort(g){return _("aborted",g)},stack(){return R(),d.map(Fs)},activeId(){return R(),h()},inspect(){return S()},snapshot(){return R(),{schemaVersion:gr,activeId:h(),stack:d.map(Fs),lastOutcome:l,cues:[...f]}},restore(g){R();let x=w(g);if(!x.ok)return x;let L=x.snapshot;if(t){let q=[];for(let ee=0;ee<L.stack.length;ee++){let Y=L.stack[ee];try{t.participant(Y.parentId)}catch{q.push(Se("unknown-parent",`unknown parent "${Y.parentId}"`,`stack[${ee}].parentId`))}try{t.participant(Y.childId)}catch{q.push(Se("unknown-child",`unknown child "${Y.childId}"`,`stack[${ee}].childId`))}}if(q.length)return{ok:!1,errors:q}}let $={stack:d.map(q=>({...q})),lastOutcome:l,cues:[...f],grants:new Map([...o].map(([q,ee])=>[q,ee.list()])),authorized:u(),suspended:c()};try{d.length=0;for(let q of L.stack)d.push({id:q.id,parentId:q.parentId,childId:q.childId,metaphor:q.metaphor,seed:q.seed,clock:q.clock,parentState:pn(q.parentState),parentGrants:[...q.parentGrants],childGrantsBefore:[...q.childGrantsBefore],transferred:[...q.transferred],extraChildGrants:[...q.extraChildGrants],persistence:pn(q.persistence),enterCue:zt,exitCue:q.exitCue});l=L.lastOutcome,f.length=0,f.push(...L.cues);for(let q of d)O(q.parentId).restore({schemaVersion:Jt,grants:q.parentGrants}),O(q.childId).restore({schemaVersion:Jt,grants:q.childGrantsBefore});for(let q of d){let ee=O(q.parentId),Y=O(q.childId);for(let G of q.transferred)ee.revoke(G),Y.grant(G);for(let G of q.extraChildGrants)Y.grant(G)}return A(d),W(),{ok:!0,snapshot:pn(L)}}catch(q){d.length=0,d.push(...$.stack),l=$.lastOutcome,f.length=0,f.push(...$.cues);for(let[ee,Y]of $.grants)O(ee).restore({schemaVersion:Jt,grants:Y});try{v($.authorized),p($.suspended)}catch{}return{ok:!1,errors:[Se("restore-failed",q instanceof Error?q.message:String(q))]}}},grantsOf:O,destroy(){if(!k){for(k=!0;d.length>0;){let g=d.pop();m(g)}if(t)try{W()}catch{}f.length=0,l=null}}}}var Ni=1,Li=512,ht="[REDACTED]",Yt=["prompt","credentials","credential","authorization","apiKey","secret"],yy=new Set([Je,We]);function tt(e){try{return JSON.parse(JSON.stringify(e))}catch{return e}}function Mi(e,t){if(e==null)return e;if(Array.isArray(e))return e.map(i=>Mi(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:Mi(o,t);return r}function gy(e){return e instanceof Error&&typeof e.message=="string"?e.message:"error"}function hy(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 Jc(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 qs(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=Jc(e[n]),i=Jc(t[n]);if(r!==i)return{ok:!1,detail:`record ${n} differs`}}return{ok:!0}}function zc(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 Yc(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 by(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:tt(t.clock),state:Mi(t.state,n),errorCount:t.errors.length};return r&&(i.lastError=gy(r.error)),i}function Vi(e={}){let t=new Set([...Yt,...e.redactedKeys??[]]),n=e.maxRecords??Li,r=e.registry,i=0,o=0,s=!1,a=[],d=[],f,l=[],k=0,E=[],R={},O=()=>{},h=()=>{if(s)throw new Error("Replay inspector has been destroyed")},P=M=>{let A=r?.get(M.type),u={index:o,turn:M.turn,time:M.time,outcome:M.outcome,source:M.source,type:M.type,deliveredTo:M.deliveredTo.slice(),payload:Mi(M.payload,t)};for(o+=1,M.reason&&(u.reason=M.reason),M.detail&&(u.detail=M.detail),M.target&&(u.target=M.target),M.kind&&(u.kind=M.kind),M.envelopeId&&(u.envelopeId=M.envelopeId),M.priorEnvelopeId&&(u.priorEnvelopeId=M.priorEnvelopeId),M.correlationId&&(u.correlationId=M.correlationId),M.causationId&&(u.causationId=M.causationId),M.hops!==void 0&&(u.hops=M.hops),M.seq!==void 0&&(u.seq=M.seq),M.idempotencyKey&&(u.idempotencyKey=M.idempotencyKey),M.schemaVersion!==void 0&&(u.schemaVersion=M.schemaVersion),A&&(u.payloadSchemaVersion=A.payloadSchema.version),a.push(u);a.length>n;)a.shift(),i+=1},B=M=>a.filter(A=>hy(A,M)).map(A=>tt(A)),W=M=>M?M.inspectParticipants().map(A=>Yc(A,A.kind)):E.map(A=>tt(A)),T={watchRouter(M){if(h(),O(),E=M.inspectParticipants().map(u=>Yc(u)),a.length===0)for(let u of M.inspectDecisions())P(u);let A=M.subscribeDecision(u=>P(u));return O=()=>{A(),O=()=>{}},d.push(O),O},bind(M){h(),f&&O(),f=M,k=M.origin,T.watchRouter(M.router),E=W(M);let A={publish(u,v){h();let c={kind:"publish",event:tt(u)};return v?.cause&&(c.extras={cause:tt(v.cause)}),l.push(c),M.publish(u,v)},dispatch(u,v){h();let c=tt(v);typeof c.type=="string"&&yy.has(c.type)?l.push({kind:"asset",participantId:u,event:c}):l.push({kind:"dispatch",participantId:u,event:c}),M.dispatch(u,v)},async step(u=1){h(),l.push({kind:"step",frames:u}),await M.step(u)},async report(){h();let u=await M.inspect(),v=[];for(let c of Object.keys(u.participants).sort())v.push(by(c,u.participants[c],t));E=v,R={};for(let c of v)R[c.id]=tt(c.state);return T.report()},async exportTrace(u){return await A.report(),T.exportTrace(u)},unbind(){O(),f=void 0}};return A},importTrace(M){h();let A=typeof M=="string"?JSON.parse(M):M;if(A.schemaVersion!==Ni)throw new Error("Replay inspector: unsupported export schemaVersion");i=0,o=0,a.length=0,l=tt(A.tape??[]),k=A.origin??0,E=tt(A.participants??[]),R=tt(A.snapshots??{});for(let u of A.records??[])P({outcome:u.outcome,reason:u.reason,detail:u.detail,source:u.source,type:u.type,kind:u.kind,envelopeId:u.envelopeId,priorEnvelopeId:u.priorEnvelopeId,target:u.target,deliveredTo:u.deliveredTo,hops:u.hops,seq:u.seq,correlationId:u.correlationId,causationId:u.causationId,idempotencyKey:u.idempotencyKey,schemaVersion:u.schemaVersion,payload:u.payload,turn:u.turn,time:u.time})},exportTrace(M){return h(),{schemaVersion:Ni,origin:k,redactedKeys:[...t],participants:tt(E),tape:tt(l),records:B(M),snapshots:tt(R)}},report(M){h();let A=B(M);return{schemaVersion:Ni,participants:tt(E),records:A,trees:zc(A),dropped:i}},causationTree(M){h();let A=B(M?{correlationId:M}:void 0);return zc(A)},records(){return h(),a.map(M=>tt(M))},reset(){h(),a.length=0,l=[],i=0,o=0,R={},f&&(E=W(f))},destroy(){if(!s){for(s=!0,O();d.length>0;)d.pop()?.();a.length=0,l=[],E=[],R={},f=void 0}}};return T}async function Ks(e,t,n={}){let r=Vi({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 Sr=1,Zc=1,eu=["queued","claimed","awaiting-evaluation","retry-scheduled","ready","applied","failed","canceled","superseded"],tu=["retryable","permanent","unknown"],nu=["accept","reject","revise"],Bi="job.intent.submitted",Er="job.state.queued",Fi="job.state.claimed",$i="job.state.progress",Hi="job.state.awaiting-evaluation",qi="job.state.retry-scheduled",Ki="job.state.ready",Gi="job.state.applied",Wi="job.state.failed",ji="job.state.canceled",Ui="job.state.superseded",Ws="job.diagnostic.lifecycle",vy=[Bi,Er,Fi,$i,Hi,qi,Ki,Gi,Wi,ji,Ui,Ws],ru=Yt,Sy=new Set(eu),Ey=new Set(tu),ky=new Set(nu),Iy="Job coordinator has been destroyed",Ry=512,Cy=8;function pe(e,t,n){return n?{code:e,detail:t,path:n}:{code:e,detail:t}}function fn(e){return e!==null&&typeof e=="object"&&!Array.isArray(e)}function De(e){try{return JSON.parse(JSON.stringify(e))}catch{return e}}function Gs(e,t){if(e==null)return e;if(Array.isArray(e))return e.map(i=>Gs(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:Gs(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 Ay(){return[vt(fs(Bi,bt())),vt(fe(Er,bt())),vt(fe(Fi,bt())),vt(fe($i,bt())),vt(fe(Hi,bt())),vt(fe(qi,bt())),vt(fe(Ki,bt())),vt(fe(Gi,bt())),vt(fe(Wi,bt())),vt(fe(ji,bt())),vt(fe(Ui,bt())),vt(et(Ws,bt()))]}function iu(){let e=new Map,t=new Map;return{save(n){let r=De(n);e.set(r.jobId,r),t.set(r.idempotencyKey,r.jobId)},get(n){let r=e.get(n);return r?De(r):void 0},getByIdempotencyKey(n){let r=t.get(n);return r?this.get(r):void 0},list(){return[...e.values()].map(n=>De(n))},replaceAll(n){e.clear(),t.clear();for(let r of n)this.save(r)}}}function Py(){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 js(e){return fn(e)?e.schemaVersion===Zc&&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 ou(e){return fn(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 Xc(e){return e===null||typeof e=="string"}function Qc(e){return e===null||typeof e=="number"&&Number.isFinite(e)}function Ty(e){return fn(e)?typeof e.attempt=="number"&&Number.isInteger(e.attempt)&&typeof e.code=="string"&&e.code.length>0&&typeof e.retryability=="string"&&Ey.has(e.retryability)&&typeof e.at=="number"&&Number.isFinite(e.at)&&(e.detail===void 0||typeof e.detail=="string"):!1}function wy(e){return fn(e)?typeof e.decision=="string"&&ky.has(e.decision)&&typeof e.at=="number"&&Number.isFinite(e.at)&&(e.correction===void 0||typeof e.correction=="string"):!1}function xy(e){return!fn(e)||typeof e.reasonCode!="string"||e.reasonCode.length===0?!1:e.resultRef===void 0||js(e.resultRef)}function _y(e,t){if(!fn(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"&&Sy.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",Xc(e.workerId),"workerId must be a string or null"),r("leaseUntil",Qc(e.leaseUntil),"leaseUntil must be a number or null"),r("nextRetryAt",Qc(e.nextRetryAt),"nextRetryAt must be a number or null"),r("supersededBy",Xc(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&&!js(e.resultRef)&&n.push(pe("invalid-result-ref","resultRef is invalid",`${t}.resultRef`)),ou(e.progress)||n.push(pe("invalid-progress","progress is invalid",`${t}.progress`)),(!Array.isArray(e.failureHistory)||!e.failureHistory.every(Ty))&&n.push(pe("invalid-failure-history","failureHistory entries are invalid",`${t}.failureHistory`)),(!Array.isArray(e.evaluatorHistory)||!e.evaluatorHistory.every(wy))&&n.push(pe("invalid-evaluator-history","evaluatorHistory entries are invalid",`${t}.evaluatorHistory`)),e.fallback!==void 0&&!xy(e.fallback)&&n.push(pe("invalid-fallback","fallback is invalid",`${t}.fallback`)),n.length?{ok:!1,errors:n}:{ok:!0,job:De(e)}}function Oy(e){if(!fn(e))return{ok:!1,errors:[pe("invalid-snapshot","snapshot must be a JSON object")]};if(e.schemaVersion!==Sr)return{ok:!1,errors:[pe("schema-mismatch",`expected schemaVersion ${Sr}`,"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=_y(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:Sr,jobs:t,hostAcceptedJobIds:[...e.hostAcceptedJobIds]}}}function Dy(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 Ny(e){switch(e){case"queued":return Er;case"claimed":return Fi;case"awaiting-evaluation":return Hi;case"retry-scheduled":return qi;case"ready":return Ki;case"applied":return Gi;case"failed":return Wi;case"canceled":return ji;case"superseded":return Ui}}function My(e){let t=new Map;for(let c of e.definitions){let p=Dy(c);if(p.length)throw new Error(p.map(m=>m.detail).join("; "));t.set(c.id,De(c))}let n=e.persistence??iu(),r=e.now??(()=>Date.now()),i=0,o=e.createId??(()=>`job-${++i}`),s=e.maxCorrectionChars??Ry,a=e.maxFailureHistory??Cy,d=new Set(ru),f=!1,l=[],k=new Set,E=e.worker,R=()=>{if(f)throw new Error(Iy)},O=c=>{n.save(c)},h=(c,p,m)=>{l.push(c);let S={jobId:p.jobId,state:p.state,definitionId:p.definitionId,correlationId:p.correlationId};m&&(S.reasonCode=m);let _={type:c,kind:c.includes(".intent.")?"intent":c.includes(".diagnostic.")?"diagnostic":"state",payload:S,correlationId:p.correlationId,causationId:p.causationId,idempotencyKey:`${c}:${p.jobId}:${p.updatedAt}`};e.router?.publish(_)},P=(c,p,m)=>(c.state=p,c.updatedAt=r(),O(c),h(Ny(p),c,m),c),B=c=>c==="applied"||c==="failed"||c==="canceled"||c==="superseded",W=(c,p)=>{let m=c.retry.backoffMs;return m.length?m[Math.min(p-1,m.length-1)]??0:0},T=(c,p)=>p.retryability==="permanent"?"permanent":c.retry.retryableCodes.includes(p.code)||p.retryability==="retryable"?"retryable":p.retryability,M=(c,p)=>(c.fallbackApplied=!0,c.fallback=De(p.fallback),p.fallback.resultRef&&(c.resultRef=De(p.fallback.resultRef)),P(c,"failed",p.fallback.reasonCode)),A=(c,p,m)=>(c.failureHistory=[...c.failureHistory,m].slice(-a),c.workerId=null,c.leaseUntil=null,c.attempt>=p.retry.maxAttempts||m.retryability==="permanent"?M(c,p):(c.nextRetryAt=r()+W(p,c.attempt),P(c,"retry-scheduled",m.code))),u=(c,p,m)=>{c.workerId=p,c.leaseUntil=r()+m.leaseMs,c.nextRetryAt=null,c.attempt+=1;let S=P(c,"claimed");return E?.start({jobId:S.jobId,workerId:p,definitionId:S.definitionId,request:De(S.request),attempt:S.attempt}),S},v={submit(c){R();let p=[];c.idempotencyKey||p.push(pe("missing-idempotency","idempotencyKey is required")),c.correlationId||p.push(pe("missing-correlation","correlationId is required"));let m=t.get(c.definitionId);if(m||p.push(pe("unknown-definition",`unknown definition "${c.definitionId}"`)),p.length||!m)return{ok:!1,errors:p};let S=n.getByIdempotencyKey(c.idempotencyKey);if(S)return{ok:!0,job:S};let _=r(),C={jobId:o(),definitionId:m.id,definitionVersion:m.version,idempotencyKey:c.idempotencyKey,state:"queued",request:De(c.request),resultRef:null,progress:{value:0,stage:"queued"},attempt:0,failureHistory:[],evaluatorHistory:[],correlationId:c.correlationId,causationId:c.causationId,workerId:null,leaseUntil:null,createdAt:_,updatedAt:_,timeoutAt:_+m.timeoutMs,nextRetryAt:null,supersededBy:null,fallbackApplied:!1};if(O(C),h(Bi,C),h(Er,C),c.supersedeJobId){let N=n.get(c.supersedeJobId);N&&!B(N.state)&&(N.supersededBy=C.jobId,E?.cancel?.(N.jobId),P(N,"superseded","superseded"))}return{ok:!0,job:De(C)}},claim(c){if(R(),!c)return{ok:!1,errors:[pe("missing-worker","workerId is required")]};v.tick();let m=n.list().filter(_=>_.state==="queued"||_.state==="retry-scheduled"&&(_.nextRetryAt??0)<=r()).sort((_,C)=>_.createdAt-C.createdAt)[0];if(!m)return{ok:!1,errors:[pe("empty-queue","no claimable jobs")]};let S=t.get(m.definitionId);return S?{ok:!0,job:De(u(m,c,S))}:{ok:!1,errors:[pe("unknown-definition",m.definitionId)]}},reportProgress(c,p){R();let m=n.get(c);return m?m.state!=="claimed"?{ok:!1,errors:[pe("invalid-state",`cannot report progress in ${m.state}`)]}:ou(p)?p.value<m.progress.value?{ok:!1,errors:[pe("non-monotonic","progress.value must not decrease")]}:(m.progress=De(p),m.updatedAt=r(),O(m),h($i,m),{ok:!0,job:De(m)}):{ok:!1,errors:[pe("invalid-progress","progress value/stage required")]}:{ok:!1,errors:[pe("unknown-job",c)]}},heartbeat(c){R();let p=n.get(c);if(!p)return{ok:!1,errors:[pe("unknown-job",c)]};if(p.state!=="claimed"||!p.workerId)return{ok:!1,errors:[pe("invalid-state","heartbeat requires a claimed job")]};let m=t.get(p.definitionId);return m?(p.leaseUntil=r()+m.leaseMs,p.updatedAt=r(),O(p),{ok:!0,job:De(p)}):{ok:!1,errors:[pe("unknown-definition",p.definitionId)]}},complete(c,p){R();let m=n.get(c);if(!m)return{ok:!1,errors:[pe("unknown-job",c)]};if(m.state!=="claimed")return{ok:!1,errors:[pe("invalid-state",`cannot complete in ${m.state}`)]};if(!js(p))return{ok:!1,errors:[pe("invalid-result-ref","result must be a reference")]};let S=t.get(m.definitionId);return S&&p.kind!==S.resultKind?{ok:!1,errors:[pe("result-kind",`expected result kind "${S.resultKind}"`)]}:(m.resultRef=De(p),m.workerId=null,m.leaseUntil=null,m.progress={value:Math.max(m.progress.value,1),stage:"awaiting-evaluation"},{ok:!0,job:De(P(m,"awaiting-evaluation"))})},fail(c,p){R();let m=n.get(c);if(!m)return{ok:!1,errors:[pe("unknown-job",c)]};if(m.state!=="claimed"&&m.state!=="queued")return{ok:!1,errors:[pe("invalid-state",`cannot fail in ${m.state}`)]};let S=t.get(m.definitionId);if(!S)return{ok:!1,errors:[pe("unknown-definition",m.definitionId)]};let _=T(S,p),C={attempt:m.attempt,code:p.code,retryability:_,at:r(),detail:p.detail};return E?.cancel?.(m.jobId),{ok:!0,job:De(A(m,S,C))}},evaluate(c,p,m){R();let S=n.get(c);if(!S)return{ok:!1,errors:[pe("unknown-job",c)]};if(S.state!=="awaiting-evaluation")return{ok:!1,errors:[pe("invalid-state","evaluate requires awaiting-evaluation")]};let _=t.get(S.definitionId);if(!_)return{ok:!1,errors:[pe("unknown-definition",S.definitionId)]};if(m!==void 0&&m.length>s)return{ok:!1,errors:[pe("correction-bound",`correction exceeds ${s} chars`)]};if(S.evaluatorHistory=[...S.evaluatorHistory,{decision:p,at:r(),correction:m?.slice(0,s)}],p==="accept")return S.progress={value:1,stage:"ready"},{ok:!0,job:De(P(S,"ready"))};let C={attempt:S.attempt,code:p==="revise"?"evaluator-revise":"evaluator-reject",retryability:"retryable",at:r(),detail:m};return{ok:!0,job:De(A(S,_,C))}},cancel(c){R();let p=n.get(c);return p?B(p.state)||p.state==="applied"?{ok:!1,errors:[pe("invalid-state",`cannot cancel ${p.state}`)]}:(E?.cancel?.(p.jobId),p.workerId=null,p.leaseUntil=null,{ok:!0,job:De(P(p,"canceled","canceled"))}):{ok:!1,errors:[pe("unknown-job",c)]}},recoverStale(){R();let c=[],p=r();for(let m of n.list()){if(m.state!=="claimed"||m.leaseUntil==null||m.leaseUntil>p)continue;let S=t.get(m.definitionId);if(!S)continue;E?.cancel?.(m.jobId);let _={attempt:m.attempt,code:"stale-lease",retryability:"retryable",at:p};c.push(De(A(m,S,_)))}return c},tick(){R();let c=[];c.push(...v.recoverStale());let p=r();for(let m of n.list())if(!(B(m.state)||m.state==="ready"||m.state==="applied")&&p>=m.timeoutAt){let S=t.get(m.definitionId);if(!S)continue;let _={attempt:m.attempt,code:"timeout",retryability:"permanent",at:p};E?.cancel?.(m.jobId),c.push(De(A(m,S,_)))}return c},accept(c){R();let p=n.get(c);return p?p.state!=="ready"?{ok:!1,errors:[pe("not-ready","host may accept only ready jobs")]}:(k.add(p.jobId),{ok:!0,job:De(P(p,"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:[...l]}},snapshot(){return R(),{schemaVersion:Sr,jobs:n.list(),hostAcceptedJobIds:[...k]}},restore(c){R();let p=Oy(c);if(!p.ok)return p;let m=n.list(),S=[...k];try{n.replaceAll(p.snapshot.jobs),k.clear();for(let _ of p.snapshot.hostAcceptedJobIds)k.add(_);return{ok:!0,snapshot:De(p.snapshot)}}catch{n.replaceAll(m),k.clear();for(let _ of S)k.add(_);return{ok:!1,errors:[pe("restore-failed","restore rolled back")]}}},exportTrace(){return R(),{jobs:n.list().map(c=>Gs(c,d)),events:[...l]}},destroy(){f=!0}};return E?.bind({reportProgress:(c,p)=>v.reportProgress(c,p),complete:(c,p)=>v.complete(c,p),fail:(c,p)=>v.fail(c,p),heartbeat:c=>v.heartbeat(c)}),v}var $n=1,zi=["room","region","landmark","frontier"],au=["local","regional"],du=["canonical","discoverable","hidden"],cu=["open","locked","disabled"],uu=["character","party"],lu=["available","busy","traveling"],Yi="world.graph.state.node-added",Xi="world.graph.state.edge-added",Qi="world.graph.state.discovered",Rr="world.graph.state.transit",Cr="world.graph.diagnostic.lifecycle",Ly=[Yi,Xi,Qi,Rr,Cr],Vy=new Set(zi),By=new Set(au),Fy=new Set(du),pu=new Set(cu),$y=new Set(uu),fu=new Set(lu),Hy="World graph has been destroyed",qy=4096;function Q(e,t,n){return n?{code:e,detail:t,path:n}:{code:e,detail:t}}function Mt(e){return e!==null&&typeof e=="object"&&!Array.isArray(e)}function St(e){try{return JSON.parse(JSON.stringify(e))}catch{return e}}function Hn(e){return typeof e=="number"&&Number.isFinite(e)}function nt(e){return typeof e=="string"&&e.length>0}function Js(e,t,n){if(e!==void 0){if(!Mt(e)){n.push(Q("invalid-metadata","metadata must be a JSON object",t));return}return St(e)}}function Ky(e,t,n){if(e!==void 0){if(!Mt(e)){n.push(Q("invalid-requirements","requirements must be a JSON object",t));return}return St(e)}}function Gy(e,t,n){if(e===void 0)return;if(!Mt(e)){n.push(Q("invalid-cost","cost must be a JSON object",t));return}let r={};for(let[i,o]of Object.entries(e)){if(!Hn(o)){n.push(Q("invalid-cost",`cost.${i} must be finite`,t));continue}r[i]=o}return r}function mu(e,t){if(!Mt(e))return{ok:!1,errors:[Q("invalid-node","node must be an object",t)]};let n=[];nt(e.id)||n.push(Q("invalid-id","id is required",`${t}.id`)),(!Number.isInteger(e.version)||e.version<1)&&n.push(Q("invalid-version","version must be an integer \u2265 1",`${t}.version`)),Vy.has(e.kind)||n.push(Q("invalid-kind","unknown node kind",`${t}.kind`)),By.has(e.mapLayer)||n.push(Q("invalid-map-layer","unknown mapLayer",`${t}.mapLayer`)),e.frontier!==void 0&&typeof e.frontier!="boolean"&&n.push(Q("invalid-frontier","frontier must be boolean",`${t}.frontier`));let r=Js(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 yu(e,t){if(!Mt(e))return{ok:!1,errors:[Q("invalid-edge","edge must be an object",t)]};let n=[];nt(e.id)||n.push(Q("invalid-id","id is required",`${t}.id`)),(!Number.isInteger(e.version)||e.version<1)&&n.push(Q("invalid-version","version must be an integer \u2265 1",`${t}.version`)),nt(e.from)||n.push(Q("invalid-from","from is required",`${t}.from`)),nt(e.to)||n.push(Q("invalid-to","to is required",`${t}.to`)),typeof e.directed!="boolean"&&n.push(Q("invalid-directed","directed must be boolean",`${t}.directed`)),nt(e.kind)||n.push(Q("invalid-kind","kind is required",`${t}.kind`)),Fy.has(e.visibility)||n.push(Q("invalid-visibility","unknown visibility",`${t}.visibility`)),pu.has(e.access)||n.push(Q("invalid-access","unknown access",`${t}.access`));let r=Ky(e.requirements,`${t}.requirements`,n),i=Gy(e.cost,`${t}.cost`,n),o=Js(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 gu(e,t){if(!Mt(e))return{ok:!1,errors:[Q("invalid-transit","transit must be an object",t)]};let n=[];return nt(e.originNodeId)||n.push(Q("invalid-origin","originNodeId is required",`${t}.originNodeId`)),nt(e.destinationNodeId)||n.push(Q("invalid-destination","destinationNodeId is required",`${t}.destinationNodeId`)),(!Array.isArray(e.routeEdgeIds)||e.routeEdgeIds.some(r=>!nt(r)))&&n.push(Q("invalid-route","routeEdgeIds must be strings",`${t}.routeEdgeIds`)),Hn(e.departedAt)||n.push(Q("invalid-time","departedAt must be finite semantic time",`${t}.departedAt`)),Hn(e.expectedArrival)||n.push(Q("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 hu(e,t){if(!Mt(e))return{ok:!1,errors:[Q("invalid-entity","entity must be an object",t)]};let n=[];nt(e.id)||n.push(Q("invalid-id","id is required",`${t}.id`)),$y.has(e.kind)||n.push(Q("invalid-kind","unknown entity kind",`${t}.kind`)),fu.has(e.status)||n.push(Q("invalid-status","unknown status",`${t}.status`)),e.locationNodeId!==null&&!nt(e.locationNodeId)&&n.push(Q("invalid-location","locationNodeId must be string or null",`${t}.locationNodeId`));let r=null;if(e.transit!==null&&e.transit!==void 0){let s=gu(e.transit,`${t}.transit`);s.ok?r=s.transit:n.push(...s.errors)}let i=Js(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 Wy(e,t){if(!Mt(e))return{ok:!1,errors:[Q("invalid-discovery","discovery must be an object",t)]};let n=[];return nt(e.observerId)||n.push(Q("invalid-observer","observerId is required",`${t}.observerId`)),(!Array.isArray(e.nodeIds)||e.nodeIds.some(r=>!nt(r)))&&n.push(Q("invalid-node-ids","nodeIds must be strings",`${t}.nodeIds`)),(!Array.isArray(e.edgeIds)||e.edgeIds.some(r=>!nt(r)))&&n.push(Q("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 jy(e,t){let n=e;if(typeof e=="string")try{n=JSON.parse(e)}catch{return{ok:!1,errors:[Q("invalid-json","snapshot JSON is invalid")]}}if(!Mt(n))return{ok:!1,errors:[Q("invalid-snapshot","snapshot must be a JSON object")]};let r=n.schemaVersion;if(typeof r=="number"&&r<$n){let O=n,h=r;for(;h<$n;){let P=t.find(B=>B.from===h&&B.to===h+1);if(!P)return{ok:!1,errors:[Q("unsupported-schema",`no migration from schema ${h}`)]};O=P.migrate(O),h+=1}if(n=O,!Mt(n))return{ok:!1,errors:[Q("invalid-snapshot","migrated snapshot must be an object")]};r=n.schemaVersion}if(r!==$n)return{ok:!1,errors:[Q("unsupported-schema","unsupported world graph snapshot schema")]};if(!nt(n.graphId))return{ok:!1,errors:[Q("invalid-graph-id","graphId is required","graphId")]};if(!Array.isArray(n.nodes))return{ok:!1,errors:[Q("invalid-nodes","nodes must be an array","nodes")]};if(!Array.isArray(n.edges))return{ok:!1,errors:[Q("invalid-edges","edges must be an array","edges")]};if(!Array.isArray(n.entities))return{ok:!1,errors:[Q("invalid-entities","entities must be an array","entities")]};if(!Array.isArray(n.discovery))return{ok:!1,errors:[Q("invalid-discovery","discovery must be an array","discovery")]};let i=[],o=[],s=new Set;n.nodes.forEach((O,h)=>{let P=mu(O,`nodes[${h}]`);if(!P.ok){i.push(...P.errors);return}if(s.has(P.node.id)){i.push(Q("duplicate-id","duplicate node id",`nodes[${h}].id`));return}s.add(P.node.id),o.push(P.node)});let a=[],d=new Set;n.edges.forEach((O,h)=>{let P=yu(O,`edges[${h}]`);if(!P.ok){i.push(...P.errors);return}if(d.has(P.edge.id)){i.push(Q("duplicate-id","duplicate edge id",`edges[${h}].id`));return}s.has(P.edge.id)&&i.push(Q("id-collision","edge id collides with a node id",`edges[${h}].id`)),d.add(P.edge.id),a.push(P.edge)});let f=[],l=new Set;n.entities.forEach((O,h)=>{let P=hu(O,`entities[${h}]`);if(!P.ok){i.push(...P.errors);return}if(l.has(P.entity.id)){i.push(Q("duplicate-id","duplicate entity id",`entities[${h}].id`));return}l.add(P.entity.id),f.push(P.entity)});let k=[],E=new Set;if(n.discovery.forEach((O,h)=>{let P=Wy(O,`discovery[${h}]`);if(!P.ok){i.push(...P.errors);return}if(E.has(P.discovery.observerId)){i.push(Q("duplicate-observer","duplicate observerId",`discovery[${h}].observerId`));return}E.add(P.discovery.observerId),k.push(P.discovery)}),i.length)return{ok:!1,errors:i};let R=Ji(o,a,f,k);return R.length?{ok:!1,errors:R}:{ok:!0,snapshot:{schemaVersion:$n,graphId:n.graphId,nodes:o,edges:a,entities:f,discovery:k}}}function Ji(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(Q("missing-node",`edge ${a.id} from unknown node`,`edges.${a.id}.from`)),i.has(a.to)||s.push(Q("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(Q("missing-node",`entity ${a.id} location unknown`,`entities.${a.id}.locationNodeId`)),a.transit){i.has(a.transit.originNodeId)||s.push(Q("missing-node","transit origin unknown",`entities.${a.id}.transit.originNodeId`)),i.has(a.transit.destinationNodeId)||s.push(Q("missing-node","transit destination unknown",`entities.${a.id}.transit.destinationNodeId`));for(let d of a.transit.routeEdgeIds)o.has(d)||s.push(Q("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(Q("missing-node",`discovery references unknown node ${d}`,`discovery.${a.observerId}`));for(let d of a.edgeIds)o.has(d)||s.push(Q("missing-edge",`discovery references unknown edge ${d}`,`discovery.${a.observerId}`))}return s}function Us(e){return[...e].map(t=>St(t)).sort((t,n)=>t.id.localeCompare(n.id))}function su(e){return[...e].map(t=>St(t)).sort((t,n)=>t.id.localeCompare(n.id))}function Uy(e){return e.directed?[{from:e.from,to:e.to}]:[{from:e.from,to:e.to},{from:e.to,to:e.from}]}function kr(){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 Ir(e){if(!e.ok)throw new Error(e.errors.map(t=>t.detail).join("; "));return e.contract}function Jy(){return[Ir(fe(Yi,kr())),Ir(fe(Xi,kr())),Ir(fe(Qi,kr())),Ir(fe(Rr,kr())),Ir(et(Cr,kr()))]}function zy(e={}){let t=e.migrations??[],n=e.maxPathVisits??qy,r=e.source??"world-graph",i=e.graphId??"world",o=!1,s=new Map,a=new Map,d=new Map,f=new Map,l=[],k=[];function E(){if(o)throw new Error(Hy)}function R(c,p){let m={type:c,payload:p,source:r,kind:c===Cr?"diagnostic":void 0};l.push(m),k.push(c),e.router?.publish(m)}function O(c){return R(Cr,{graphId:i}),{ok:!1,errors:c}}function h(){let c=new Map,p=m=>(c.has(m)||c.set(m,[]),c.get(m));for(let m of s.values())p(m.id);for(let m of a.values())for(let S of Uy(m))p(S.from).push({edge:m,to:S.to});for(let m of c.values())m.sort((S,_)=>S.edge.id.localeCompare(_.edge.id)||S.to.localeCompare(_.to));return c}function P(c,p){let m=mu(c,`nodes.${c.id??"?"}`);return m.ok?s.get(m.node.id)?(p.push(Q("duplicate-id",`node ${m.node.id} already exists`,`nodes.${m.node.id}`)),!1):a.has(m.node.id)?(p.push(Q("id-collision","node id collides with an edge id",`nodes.${m.node.id}`)),!1):(s.set(m.node.id,m.node),R(Yi,{graphId:i,nodeId:m.node.id}),!0):(p.push(...m.errors),!1)}function B(c,p){let m=yu(c,`edges.${c.id??"?"}`);return m.ok?a.has(m.edge.id)?(p.push(Q("duplicate-id",`edge ${m.edge.id} already exists`,`edges.${m.edge.id}`)),!1):s.has(m.edge.id)?(p.push(Q("id-collision","edge id collides with a node id",`edges.${m.edge.id}`)),!1):!s.has(m.edge.from)||!s.has(m.edge.to)?(p.push(Q("missing-node",`edge ${m.edge.id} references unknown node`,`edges.${m.edge.id}`)),!1):(a.set(m.edge.id,m.edge),R(Xi,{graphId:i,edgeId:m.edge.id}),!0):(p.push(...m.errors),!1)}function W(c){let p=f.get(c);return p||(p={nodeIds:new Set,edgeIds:new Set},f.set(c,p)),p}function T(c,p){return p.visibility==="canonical"?!0:f.get(c)?.edgeIds.has(p.id)===!0}function M(c,p){if(f.get(c)?.nodeIds.has(p.id))return!0;if(p.kind==="frontier"||p.frontier){for(let m of a.values())if(T(c,m)&&(m.from===p.id||m.to===p.id)){let S=m.from===p.id?m.to:m.from;if(f.get(c)?.nodeIds.has(S))return!0}}return!1}function A(c,p,m,S){let _=new Map;for(let w of s.values())m(w,null)&&_.set(w.id,St(w));let C=[];for(let w of a.values())!_.has(w.from)||!_.has(w.to)||m(_.get(w.from),w)&&C.push(St(w));let N=Us([..._.values()].filter(w=>w.kind==="frontier"||w.frontier===!0)),K=[...d.values()].filter(w=>!!(w.locationNodeId&&_.has(w.locationNodeId)||w.transit&&(_.has(w.transit.originNodeId)||_.has(w.transit.destinationNodeId)))).map(w=>St(w)).sort((w,g)=>w.id.localeCompare(g.id));return{kind:c,observerId:p,focusNodeId:S,nodes:Us(_.values()),edges:su(C),frontiers:N,entities:K}}function u(c,p,m){let S=new Set;if(!s.has(c))return S;let _=h(),C=[{id:c,dist:0}],N=new Set([c]);for(S.add(c);C.length;){let K=C.shift();if(!(K.dist>=p))for(let w of _.get(K.id)??[]){if(!T(m,w.edge)&&w.edge.visibility!=="canonical"||N.has(w.to))continue;let g=s.get(w.to);g&&(g.mapLayer!=="local"&&g.kind!=="frontier"&&!g.frontier||(N.add(w.to),S.add(w.to),C.push({id:w.to,dist:K.dist+1})))}}return S}function v(c,p,m,S,_){let C=S?.maxVisits??n,N=h(),K=new Map([[c,0]]),w=new Map,g=new Set,x=0;for(;x<C;){let L=null,$=1/0;for(let[q,ee]of K)g.has(q)||(ee<$||ee===$&&(L===null||q.localeCompare(L)<0))&&(L=q,$=ee);if(L===null||_!==null&&L===_)break;g.add(L),x+=1;for(let q of N.get(L)??[]){if(!p.canTraverse(q.edge,L,q.to,m))continue;let ee=p.cost(q.edge,L,q.to,m);if(!Number.isFinite(ee)||ee<0)continue;let Y=$+ee,G=K.get(q.to);(G===void 0||Y<G||Y===G&&q.edge.id.localeCompare(w.get(q.to)?.edge.id??q.edge.id)<0)&&(K.set(q.to,Y),w.set(q.to,{node:L,edge:q.edge,cost:ee}))}}return{dist:K,prev:w}}return{addNode(c){E();let p=[];return P(c,p),p.length?O(p):{ok:!0}},addEdge(c){E();let p=[];return B(c,p),p.length?O(p):{ok:!0}},applyPatch(c){E();let p=new Map(s),m=new Map(a),S=l.length,_=k.length,C=[];for(let N of c.nodes??[])P(N,C);for(let N of c.edges??[])B(N,C);if(C.length){s.clear(),a.clear();for(let[N,K]of p)s.set(N,K);for(let[N,K]of m)a.set(N,K);return l.length=S,k.length=_,O(C)}return{ok:!0}},removeNode(c){if(E(),!s.has(c))return O([Q("unknown-node",c)]);let p=Ji([...s.values()].filter(S=>S.id!==c),[...a.values()].filter(S=>S.from!==c&&S.to!==c),[...d.values()],[...f.entries()].map(([S,_])=>({observerId:S,nodeIds:[..._.nodeIds].filter(C=>C!==c),edgeIds:[..._.edgeIds]}))).filter(S=>S.code!=="missing-node"||!S.detail.includes(c));if(p.length)return O(p);let m=[...a.values()].filter(S=>S.from===c||S.to===c);if(m.length)return O([Q("node-in-use",`remove incident edges first (${m[0].id})`)]);for(let S of d.values())if(S.locationNodeId===c||S.transit?.originNodeId===c||S.transit?.destinationNodeId===c)return O([Q("node-in-use",`entity ${S.id} still references node`)]);s.delete(c);for(let S of f.values())S.nodeIds.delete(c);return{ok:!0}},removeEdge(c){if(E(),!a.has(c))return O([Q("unknown-edge",c)]);for(let p of d.values())if(p.transit?.routeEdgeIds.includes(c))return O([Q("edge-in-use",`entity ${p.id} still references edge`)]);a.delete(c);for(let p of f.values())p.edgeIds.delete(c);return{ok:!0}},setEdgeAccess(c,p){E();let m=a.get(c);return m?pu.has(p)?(a.set(c,{...m,access:p}),{ok:!0}):O([Q("invalid-access",p)]):O([Q("unknown-edge",c)])},discover(c,p){if(E(),!nt(c))return O([Q("invalid-observer","observerId is required")]);let m=[];for(let _ of p.nodeIds??[])s.has(_)||m.push(Q("unknown-node",_));for(let _ of p.edgeIds??[])a.has(_)||m.push(Q("unknown-edge",_));if(m.length)return O(m);let S=W(c);for(let _ of p.nodeIds??[])S.nodeIds.add(_);for(let _ of p.edgeIds??[])S.edgeIds.add(_);return R(Qi,{graphId:i,observerId:c}),{ok:!0}},upsertEntity(c){E();let p=hu(c,`entities.${c.id??"?"}`);if(!p.ok)return O(p.errors);let m=Ji([...s.values()],[...a.values()],[p.entity],[]);return m.length?O(m):(d.set(p.entity.id,p.entity),{ok:!0})},startTransit(c,p,m="traveling"){E();let S=d.get(c);if(!S)return O([Q("unknown-entity",c)]);let _=gu(p,"transit");if(!_.ok)return O(_.errors);let C={...S,status:m,locationNodeId:null,transit:_.transit},N=Ji([...s.values()],[...a.values()],[C],[]);return N.length?O(N):(d.set(c,C),R(Rr,{graphId:i,entityId:c}),{ok:!0})},completeTransit(c,p){E();let m=d.get(c);return m?m.transit?Hn(p)?(d.set(c,{...m,status:"available",locationNodeId:m.transit.destinationNodeId,transit:null}),R(Rr,{graphId:i,entityId:c,semanticTime:p}),{ok:!0}):O([Q("invalid-time","semanticTime must be finite")]):O([Q("not-traveling",c)]):O([Q("unknown-entity",c)])},setEntityStatus(c,p){E();let m=d.get(c);return m?fu.has(p)?(d.set(c,{...m,status:p}),{ok:!0}):O([Q("invalid-status",p)]):O([Q("unknown-entity",c)])},getNode(c){E();let p=s.get(c);return p?St(p):void 0},getEdge(c){E();let p=a.get(c);return p?St(p):void 0},getEntity(c){E();let p=d.get(c);return p?St(p):void 0},projectCanonical(){return E(),A("canonical",void 0,()=>!0)},projectKnown(c){return E(),A("known",c,(p,m)=>m?T(c,m):M(c,p))},projectLocal(c,p,m=8){E();let S=u(p,m,c);return A("local",c,(_,C)=>S.has(_.id)?C?T(c,C)||C.visibility==="canonical":M(c,_)||S.has(_.id):!1,p)},projectRegional(c){return E(),A("regional",c,(p,m)=>p.mapLayer!=="regional"&&p.kind!=="frontier"&&!p.frontier?!1:m?T(c,m):M(c,p))},findPath(c,p,m,S,_){if(E(),!s.has(c))return{ok:!1,errors:[Q("unknown-node",c)]};if(!s.has(p))return{ok:!1,errors:[Q("unknown-node",p)]};if(!Hn(S.semanticTime))return{ok:!1,errors:[Q("invalid-time","semanticTime must be finite")]};if(c===p)return{ok:!0,path:{from:c,to:p,nodeIds:[c],steps:[],totalCost:0}};let{dist:C,prev:N}=v(c,m,S,_,p);if(!C.has(p))return{ok:!1,errors:[Q("unreachable",p)]};let K=[],w=[p],g=p;for(;g!==c;){let x=N.get(g);if(!x)return{ok:!1,errors:[Q("unreachable",p)]};K.push({edgeId:x.edge.id,from:x.node,to:g,cost:x.cost}),g=x.node,w.push(g)}return K.reverse(),w.reverse(),{ok:!0,path:{from:c,to:p,nodeIds:w,steps:K,totalCost:C.get(p)}}},reachable(c,p,m,S){if(E(),!s.has(c)||!Hn(m.semanticTime))return{nodeIds:[]};let{dist:_}=v(c,p,m,S,null);return{nodeIds:[..._.keys()].sort((C,N)=>C.localeCompare(N))}},inspect(){return E(),{destroyed:!1,graphId:i,nodeCount:s.size,edgeCount:a.size,entityCount:d.size,observerCount:f.size,events:[...k]}},snapshot(){return E(),{schemaVersion:$n,graphId:i,nodes:Us(s.values()),edges:su(a.values()),entities:[...d.values()].map(c=>St(c)).sort((c,p)=>c.id.localeCompare(p.id)),discovery:[...f.entries()].map(([c,p])=>({observerId:c,nodeIds:[...p.nodeIds].sort((m,S)=>m.localeCompare(S)),edgeIds:[...p.edgeIds].sort((m,S)=>m.localeCompare(S))})).sort((c,p)=>c.observerId.localeCompare(p.observerId))}},restore(c){E();let p=jy(c,t);if(!p.ok)return p;let m={graphId:i,nodes:new Map(s),edges:new Map(a),entities:new Map(d),discovery:new Map([...f.entries()].map(([S,_])=>[S,{nodeIds:new Set(_.nodeIds),edgeIds:new Set(_.edgeIds)}]))};try{i=p.snapshot.graphId,s.clear(),a.clear(),d.clear(),f.clear();for(let S of p.snapshot.nodes)s.set(S.id,S);for(let S of p.snapshot.edges)a.set(S.id,S);for(let S of p.snapshot.entities)d.set(S.id,S);for(let S of p.snapshot.discovery)f.set(S.observerId,{nodeIds:new Set(S.nodeIds),edgeIds:new Set(S.edgeIds)});return{ok:!0,snapshot:St(p.snapshot)}}catch{i=m.graphId,s.clear(),a.clear(),d.clear(),f.clear();for(let[S,_]of m.nodes)s.set(S,_);for(let[S,_]of m.edges)a.set(S,_);for(let[S,_]of m.entities)d.set(S,_);for(let[S,_]of m.discovery)f.set(S,_);return{ok:!1,errors:[Q("restore-failed","restore rolled back")]}}},events(){return E(),[...l]},destroy(){o=!0,s.clear(),a.clear(),d.clear(),f.clear()}}}var Ar=1,no=1,ku=["add","replace","revise","remove","tombstone","link","unlink"],Iu=["base-revision","entity-revision","entity-hash","identity-required","identity-absent","capability","schema"],io="world.patch.state.accepted",oo="world.patch.state.rejected",so="world.patch.state.superseded",Kn="world.patch.diagnostic.lifecycle",Yy=[io,oo,so,Kn],Ru=["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"],Cu=Yt,bu=new Set(ku),Xy=new Set(Iu),Qy=new Set(Ru),Ys=new Set(zi),Xs=new Set(["exit","edge","graph-edge"]),Zy="World patch applier has been destroyed",eg=new Set(["patchId","schemaVersion","baseRevision","idempotencyKey","preconditions","operations","provenance","supersedes"]),tg=new Set(["op","kind","id","value","from","to","order","refs"]),ng=new Set(["jobId","producer","contentRevisions"]),rg={"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"])},ig=256,og=32,sg=4096,ag=262144;function X(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 Ue(e){return e!==null&&typeof e=="object"&&!Array.isArray(e)}function Re(e){try{return JSON.parse(JSON.stringify(e))}catch{return e}}function ge(e){return typeof e=="string"&&e.length>0}function ot(e){return typeof e=="number"&&Number.isInteger(e)&&Number.isFinite(e)}function Pr(e,t,n,r){for(let i of Object.keys(e))t.has(i)||r.push(X("unknown-field",`unknown field "${i}"`,n?`${n}.${i}`:i))}function Qs(e){if(e===null||typeof e!="object")return e;if(Array.isArray(e))return e.map(Qs);let t=e,n={};for(let r of Object.keys(t).sort())n[r]=Qs(t[r]);return n}function vu(e){let t=JSON.stringify(Qs(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 Zs(e,t){if(e==null)return e;if(Array.isArray(e))return e.map(i=>Zs(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:Zs(o,t);return r}function dg(){return{revision:0,entities:[],links:[],accepted:[]}}function Au(e){return[...e].map(t=>Re(t)).sort((t,n)=>{let r=t.kind.localeCompare(n.kind);return r!==0?r:t.id.localeCompare(n.id)})}function Pu(e){return[...e].map(t=>Re(t)).sort((t,n)=>t.id.localeCompare(n.id))}function cg(e){return[...e].map(t=>Re(t)).sort((t,n)=>t.revision!==n.revision?t.revision-n.revision:t.patchId.localeCompare(n.patchId))}function ro(e){return{revision:e.revision,entities:Au(e.entities),links:Pu(e.links),accepted:cg(e.accepted)}}function Zi(e,t){return e.length<=t?e:[...e.slice(0,t),X("over-limit",`truncated ${e.length-t} additional diagnostics`)]}function Tu(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 eo(){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 to(e){if(!e.ok)throw new Error(e.errors.map(t=>t.detail).join("; "));return e.contract}function ug(){return[to(fe(io,eo())),to(fe(oo,eo())),to(fe(so,eo())),to(et(Kn,eo()))]}function lg(e){return typeof e=="string"&&Qy.has(e)}function wu(){let e=dg();return{current(){return Re(e)},begin(){let t=Re(e),n=null;return{applyWorldRevision(r){n=ro(r)},commit(){n&&(e=n),n=null},rollback(){e=Re(t),n=null}}}}}function xu(e,t,n){if(e===void 0)return;if(!Ue(e)){n.push(X("invalid-schema","refs must be an object",t));return}Pr(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(X("invalid-schema",`refs.${i} must be a non-empty string`,`${t}.${i}`));continue}r[i]=o}}return r}function pg(e,t,n){if(!Ue(e)){n.push(X("invalid-schema","operation must be an object",t));return}Pr(e,tg,t,n),(!ge(e.op)||!bu.has(e.op))&&n.push(X("unknown-op",`unknown op "${String(e.op)}"`,`${t}.op`)),ge(e.kind)||n.push(X("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(X("missing-field","id is required",`${t}.id`))),e.order!==void 0&&!ot(e.order)&&n.push(X("invalid-schema","order must be an integer",`${t}.order`)),e.from!==void 0&&!ge(e.from)&&n.push(X("invalid-schema","from must be a non-empty string",`${t}.from`)),e.to!==void 0&&!ge(e.to)&&n.push(X("invalid-schema","to must be a non-empty string",`${t}.to`));let i=xu(e.refs,`${t}.refs`,n);if(!ge(e.op)||!bu.has(e.op)||!ge(e.kind)||!ge(r))return;(e.op==="link"||e.op==="unlink")&&(!ge(e.from)||!ge(e.to))&&n.push(X("missing-field","link/unlink require from and to",t));let o={op:e.op,kind:e.kind,id:r};return ot(e.order)&&(o.order=e.order),e.value!==void 0&&(o.value=Re(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 fg(e,t,n){if(!Ue(e)){n.push(X("invalid-schema","precondition must be an object",t));return}if(!ge(e.type)||!Xy.has(e.type)){n.push(X("invalid-schema",`unknown precondition type "${String(e.type)}"`,`${t}.type`));return}let r=e.type;switch(Pr(e,rg[r],t,n),r){case"base-revision":if(!ot(e.revision)||e.revision<0){n.push(X("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)||!ot(e.revision)||e.revision<1){n.push(X("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(X("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(X("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(X("invalid-schema","capability name is required",`${t}.name`));return}return{type:r,name:e.name};case"schema":if(!ot(e.schemaVersion)||e.schemaVersion<1){n.push(X("invalid-schema","schemaVersion must be an integer \u2265 1",`${t}.schemaVersion`));return}return{type:r,schemaVersion:e.schemaVersion}}}function _u(e,t,n){if(!Ue(e)){n.push(X("invalid-schema","provenance is required",t));return}if(Pr(e,ng,t,n),!ge(e.producer)){n.push(X("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(X("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(X("invalid-schema","contentRevisions must be string[]",`${t}.contentRevisions`)):r.contentRevisions=[...e.contentRevisions]),r}function mg(e,t){let n=[],r="";try{r=JSON.stringify(e)??""}catch{return{errors:[X("invalid-schema","patch is not JSON-serializable")]}}if(r.length>t.maxBytes&&n.push(X("over-limit",`patch exceeds ${t.maxBytes} bytes`)),!Ue(e))return{errors:[X("invalid-schema","patch must be an object"),...n]};Pr(e,eg,"",n),ge(e.patchId)||n.push(X("missing-field","patchId is required","patchId")),e.schemaVersion!==Ar&&n.push(X("schema-mismatch",`schemaVersion must be ${Ar}`,"schemaVersion")),(!ot(e.baseRevision)||e.baseRevision<0)&&n.push(X("invalid-schema","baseRevision must be an integer \u2265 0","baseRevision")),ge(e.idempotencyKey)||n.push(X("missing-field","idempotencyKey is required","idempotencyKey")),e.supersedes!==void 0&&!ge(e.supersedes)&&n.push(X("invalid-schema","supersedes must be a non-empty string","supersedes"));let i=_u(e.provenance,"provenance",n);Array.isArray(e.operations)?e.operations.length>t.maxOperations&&n.push(X("over-limit",`operations exceed ${t.maxOperations}`,"operations")):n.push(X("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 f=pg(e.operations[d],`operations[${d}]`,n);f&&o.push(f)}let s=[];if(e.preconditions!==void 0)if(!Array.isArray(e.preconditions))n.push(X("invalid-schema","preconditions must be an array","preconditions"));else for(let d=0;d<e.preconditions.length;d++){let f=fg(e.preconditions[d],`preconditions[${d}]`,n);f&&s.push(f)}if(n.length)return{errors:n};let a={patchId:e.patchId,schemaVersion:Ar,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 yg(e){let t=new Map;for(let r of e.entities)t.set(r.id,Re(r));let n=new Map;for(let r of e.links)n.set(r.id,Re(r));return{revision:e.revision,entities:t,links:n,accepted:e.accepted.map(r=>Re(r))}}function qn(e,t,n){let r=e.get(t);if(r&&!(n&&r.kind!==n))return r}function gg(e,t,n){let r=yg(e),i=[],o=[],s=[...t].sort(Tu),a=(f,l)=>{let k={kind:f.kind,id:f.id,revision:l?l.revision+1:1,hash:vu(f.value??null),value:f.value===void 0?null:Re(f.value),tombstoned:!1};f.refs&&(k.refs=Re(f.refs)),r.entities.set(f.id,k),i.push({op:f.op,kind:f.kind,id:f.id})},d=f=>{!f.from||!f.to||r.links.set(f.id,{id:f.id,kind:f.kind,from:f.from,to:f.to,...f.value!==void 0?{value:Re(f.value)}:{}})};for(let f=0;f<s.length;f++){let l=s[f],k=`operations[${f}]`,E=r.entities.get(l.id);switch(l.op){case"add":if(E&&!E.tombstoned){o.push(X("duplicate-id",`identity "${l.id}" already exists`,k));break}a(l),l.from&&l.to&&d(l);break;case"replace":case"revise":if(!E||E.tombstoned){o.push(X("missing-ref",`identity "${l.id}" is absent`,k));break}if(E.kind!==l.kind){o.push(X("missing-ref",`identity "${l.id}" is kind "${E.kind}"`,k));break}a(l,E),l.from&&l.to&&d(l);break;case"remove":if(!E){o.push(X("missing-ref",`identity "${l.id}" is absent`,k));break}r.entities.delete(l.id),r.links.delete(l.id);for(let[R,O]of[...r.links])(O.from===l.id||O.to===l.id)&&r.links.delete(R);i.push({op:l.op,kind:l.kind,id:l.id});break;case"tombstone":if(!E){o.push(X("missing-ref",`identity "${l.id}" is absent`,k));break}E.tombstoned=!0,E.revision+=1,E.hash=vu(null),E.value=null,r.links.delete(l.id);for(let[R,O]of[...r.links])(O.from===l.id||O.to===l.id)&&r.links.delete(R);i.push({op:l.op,kind:l.kind,id:l.id});break;case"link":if(E&&E.kind!==l.kind&&!E.tombstoned){o.push(X("duplicate-id",`identity "${l.id}" already exists`,k));break}a(l,E&&!E.tombstoned?E:void 0),d(l);break;case"unlink":if(!r.links.has(l.id)&&!E){o.push(X("missing-ref",`link "${l.id}" is absent`,k));break}r.links.delete(l.id),E&&(E.tombstoned=!0,E.revision+=1),i.push({op:l.op,kind:l.kind,id:l.id});break}}r.entities.size>n.maxEntities&&o.push(X("over-limit",`entities exceed ${n.maxEntities}`));for(let f of r.links.values()){let l=r.entities.get(f.from),k=r.entities.get(f.to);(!l||l.tombstoned)&&o.push(X("referential-integrity",`link "${f.id}" from "${f.from}" is absent`,`links.${f.id}.from`)),(!k||k.tombstoned)&&o.push(X("referential-integrity",`link "${f.id}" to "${f.to}" is absent`,`links.${f.id}.to`))}return{world:r,changed:i,errors:o}}function hg(e,t,n,r){let i=[];e.baseRevision!==t.revision&&i.push(X("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(X("stale-base",`expected base revision ${s.revision}, current is ${t.revision}`,a,{expectedRevision:t.revision,actualRevision:s.revision}));break;case"entity-revision":{let d=qn(n,s.id,s.kind);d?d.revision!==s.revision&&i.push(X("entity-revision",`identity "${s.id}" revision is ${d.revision}, expected ${s.revision}`,a)):i.push(X("identity-required",`identity "${s.id}" is absent`,a));break}case"entity-hash":{let d=qn(n,s.id,s.kind);d?d.hash!==s.hash&&i.push(X("entity-hash",`identity "${s.id}" hash is ${d.hash}, expected ${s.hash}`,a)):i.push(X("identity-required",`identity "${s.id}" is absent`,a));break}case"identity-required":(!qn(n,s.id,s.kind)||qn(n,s.id,s.kind)?.tombstoned)&&i.push(X("identity-required",`identity "${s.id}" is required`,a));break;case"identity-absent":qn(n,s.id,s.kind)&&!qn(n,s.id,s.kind)?.tombstoned&&i.push(X("identity-absent",`identity "${s.id}" must be absent`,a));break;case"capability":r.has(s.name)||i.push(X("capability-denied",`capability "${s.name}" is not granted`,a));break;case"schema":s.schemaVersion!==Ar&&i.push(X("schema-mismatch",`schema requirement ${s.schemaVersion} is unsupported`,a));break}}return i}function bg(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 Su(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 vg(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,f=new Set(n.entities.filter(l=>!l.tombstoned).map(l=>l.id));for(let l of t)f.add(l.id);for(let l of e.provenance.contentRevisions??[])r&&!Su(r,void 0,l)&&s.push(X("content-unavailable",`content revision "${l}" is not available`,"provenance.contentRevisions"));for(let l=0;l<t.length;l++){let k=t[l],E=`operations[${l}]`,R=k.refs?.contentRevision,O=k.refs?.contentId;R&&r&&!Su(r,O,R)&&s.push(X("content-unavailable",`content revision "${R}" is not available`,`${E}.refs`));let h=k.refs?.binding??(k.kind==="presentation-binding"?k.id:void 0);h&&a&&!a.has(h)&&s.push(X("binding-unavailable",`binding "${h}" is not listed`,`${E}`));let P=k.refs?.asset??(k.kind==="asset"?k.id:void 0);P&&d&&!d.has(P)&&s.push(X("asset-unavailable",`asset "${P}" is not available`,`${E}`));let B=k.refs?.identity;B&&!f.has(B)&&s.push(X("missing-ref",`ref identity "${B}" is absent`,`${E}.refs`))}return s}function Eu(e){if(!Ys.has(e.kind))return;let t=Ue(e.value)?e.value:{},n={id:e.id,version:ot(t.version)&&t.version>=1?t.version:1,kind:ge(t.kind)&&Ys.has(t.kind)?t.kind:e.kind,mapLayer:t.mapLayer==="regional"?"regional":"local"};return t.frontier===!0&&(n.frontier=!0),Ue(t.metadata)&&(n.metadata=Re(t.metadata)),n}function zs(e){if(!Xs.has(e.kind)||!e.from||!e.to)return;let t=Ue(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:ot(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(Ue(t.requirements)&&(i.requirements=Re(t.requirements)),Ue(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 Ue(t.metadata)&&(i.metadata=Re(t.metadata)),i}function Sg(e,t){let n=e.snapshot(),r=new Map(n.nodes.map(d=>[d.id,Re(d)])),i=new Map(n.edges.map(d=>[d.id,Re(d)])),o=[...t].sort(Tu),s=d=>{r.delete(d);for(let[f,l]of[...i])(l.from===d||l.to===d)&&i.delete(f)};for(let d of o)switch(d.op){case"add":{let f=Eu(d);f&&!r.has(f.id)&&r.set(f.id,f);let l=zs(d);l&&!i.has(l.id)&&i.set(l.id,l);break}case"replace":case"revise":{let f=Eu(d);f&&r.set(f.id,f);let l=zs(d);l&&i.set(l.id,l);break}case"link":{let f=zs(d);f&&i.set(f.id,f);break}case"remove":case"tombstone":Ys.has(d.kind)&&s(d.id),Xs.has(d.kind)&&i.delete(d.id);break;case"unlink":Xs.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=>X("graph-apply-failed",d.detail,d.path))}function Eg(e,t){let n=[];if(!Ue(e))return{errors:[X("invalid-snapshot","world must be an object",t)]};if((!ot(e.revision)||e.revision<0)&&n.push(X("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(X("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(!Ue(a)){n.push(X("invalid-snapshot","entity must be an object",d));continue}if(!ge(a.kind)||!ge(a.id)||!ot(a.revision)||a.revision<1){n.push(X("invalid-snapshot","kind, id, and revision are required",d));continue}if(!ge(a.hash)||typeof a.tombstoned!="boolean"){n.push(X("invalid-snapshot","hash and tombstoned are required",d));continue}let f={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=xu(a.refs,`${d}.refs`,n);l&&(f.refs=l)}r.push(f)}let i=[];for(let s=0;s<e.links.length;s++){let a=e.links[s],d=`${t}.links[${s}]`;if(!Ue(a)||!ge(a.id)||!ge(a.kind)||!ge(a.from)||!ge(a.to)){n.push(X("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(!Ue(a)||!ge(a.patchId)||!ge(a.idempotencyKey)||!ot(a.revision)||a.revision<1){n.push(X("invalid-snapshot","accepted patch identity is invalid",d));continue}let f=_u(a.provenance,`${d}.provenance`,n);if(!f)continue;let l={patchId:a.patchId,idempotencyKey:a.idempotencyKey,revision:a.revision,provenance:f};ge(a.supersededBy)&&(l.supersededBy=a.supersededBy),o.push(l)}return n.length?{errors:n}:{errors:[],world:ro({revision:e.revision,entities:r,links:i,accepted:o})}}function kg(e,t,n){if(!Ue(e)){n.push(X("invalid-snapshot","audit record must be an object",t));return}if(e.outcome!=="accepted"&&e.outcome!=="rejected"&&e.outcome!=="superseded"){n.push(X("invalid-snapshot","audit outcome is invalid",`${t}.outcome`));return}if(!ge(e.patchId)||!ge(e.idempotencyKey)||!ot(e.at)){n.push(X("invalid-snapshot","audit identity is invalid",t));return}if(!ot(e.oldRevision)||!ot(e.newRevision)||!Array.isArray(e.reasonCodes)){n.push(X("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:Ue(e.provenance)?e.provenance:{producer:"unknown"},patch:e.patch??null}}function Ig(e){if(!Ue(e))return{ok:!1,errors:[X("invalid-snapshot","snapshot must be an object")]};if(e.schemaVersion!==no)return{ok:!1,errors:[X("invalid-version","unknown snapshot schema version","schemaVersion")]};let t=Eg(e.world,"world");if(!t.world)return{ok:!1,errors:t.errors};let n=[...t.errors??[]];Array.isArray(e.audit)||n.push(X("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=kg(e.audit[o],`audit[${o}]`,n);s&&r.push(s)}if(n.length)return{ok:!1,errors:n};let i={schemaVersion:no,world:t.world,audit:r};return e.graph!==void 0&&(i.graph=Re(e.graph)),{ok:!0,snapshot:i}}function Rg(e={}){let t=e.persistence??wu(),n=e.now??(()=>Date.now()),r=e.source??"world-patch",i={maxOperations:e.limits?.maxOperations??ig,maxDiagnostics:e.limits?.maxDiagnostics??og,maxEntities:e.limits?.maxEntities??sg,maxBytes:e.limits?.maxBytes??ag},o=new Set([...Cu,...e.redact??[]]),s=new Set(e.capabilities??[]),a=e.graphPolicy??{},d=!1,f=[],l=[],k=[],E=null;function R(){if(d)throw new Error(Zy)}function O(){let u=t.current();return{destroyed:d,revision:u.revision,entities:Au(u.entities),links:Pu(u.links),acceptedPatchIds:u.accepted.map(v=>v.patchId),events:[...k],lastRejection:E?Re(E):null}}function h(u,v){let c={type:u,payload:v,source:r,kind:u===Kn?"diagnostic":"state"};l.push(c),k.push(u),e.onEvent?.(c),e.router?.publish(c)}function P(u){f.push(u)}function B(u){let v=mg(u,i);if(!v.patch)return{ok:!1,errors:Zi(v.errors,i.maxDiagnostics)};let c=v.patch,p=t.current(),m=p.accepted.find($=>$.patchId===c.patchId);if(m&&!m.supersededBy)return{ok:!0,patch:c,next:Re(p),changed:[],idempotent:!0};if(m?.supersededBy)return{ok:!1,patch:c,errors:[X("superseded",`patch "${c.patchId}" was superseded by "${m.supersededBy}"`)]};let S=p.accepted.find($=>$.idempotencyKey===c.idempotencyKey&&!$.supersededBy);if(S&&S.patchId!==c.patchId)return{ok:!1,patch:c,errors:[X("idempotency-conflict",`idempotencyKey already used by patch "${S.patchId}"`,"idempotencyKey")]};if(c.supersedes&&!p.accepted.find(q=>q.patchId===c.supersedes))return{ok:!1,patch:c,errors:[X("missing-ref",`superseded patch "${c.supersedes}" is unknown`,"supersedes")]};let _=new Map(p.entities.map($=>[$.id,$])),C=hg(c,p,_,s),N=gg(p,c.operations,i),K=vg(c,c.operations,p,e.content,e.bindings,e.assets),w=[...C,...N.errors,...K];if(!N.world)return{ok:!1,patch:c,errors:Zi(w,i.maxDiagnostics)};let g=ro({revision:p.revision+1,entities:N.world.entities.values(),links:N.world.links.values(),accepted:[...N.world.accepted.map($=>c.supersedes&&$.patchId===c.supersedes?{...$,supersededBy:c.patchId}:$),{patchId:c.patchId,idempotencyKey:c.idempotencyKey,revision:p.revision+1,provenance:Re(c.provenance)}]});(a.detectCycle?.(g)??(!a.allowCycles&&bg(g.links)))&&w.push(X("cycle","patch would introduce a link cycle"));for(let $ of e.domainValidators??[])w.push(...$({patch:c,current:p,preview:g}).map(q=>q.code?q:X("domain",q.detail,q.path)));if(w.length)return{ok:!1,patch:c,errors:Zi(w,i.maxDiagnostics)};let L=c.supersedes?p.accepted.find($=>$.patchId===c.supersedes):void 0;return{ok:!0,patch:c,next:g,changed:N.changed,supersede:L}}function W(u,v,c){let p=Zi(u,i.maxDiagnostics);E=p;let m=t.current(),S=p[0]?.code??"invalid-schema";return v?(P({outcome:"rejected",patchId:v.patchId,idempotencyKey:v.idempotencyKey,at:n(),oldRevision:c?.oldRevision??m.revision,newRevision:c?.oldRevision??m.revision,reasonCodes:p.map(_=>_.code),changedIdentities:[],provenance:Re(v.provenance),patch:Re(v)}),h(oo,{patchId:v.patchId,reasonCode:S,revision:m.revision}),h(Kn,{patchId:v.patchId,reasonCode:S,revision:m.revision})):h(Kn,{reasonCode:S,revision:m.revision}),{ok:!1,errors:p,inspect:O()}}function T(u){if(!e.graph||!u)return[];let v=e.graph.restore(u);return v.ok?[]:v.errors.map(c=>X("graph-apply-failed",c.detail,c.path))}function M(u){let v=t.begin();v.applyWorldRevision(u),v.commit()}return{dryRun(u){R();let v=B(u);return v.ok?v.idempotent?{ok:!0,previewRevision:v.next.revision,changedIdentities:[],diagnostics:[]}:{ok:!0,previewRevision:v.next.revision,changedIdentities:v.changed,diagnostics:[]}:{ok:!1,errors:v.errors}},commit(u){R();let v=B(u);if(!v.ok)return W(v.errors,v.patch);let c=v.patch,p=t.current();if(v.idempotent)return{ok:!0,patchId:c.patchId,oldRevision:p.revision,newRevision:p.revision,changedIdentities:[],idempotent:!0,inspect:O()};let m=e.graph?.snapshot(),S=t.begin();try{if(S.applyWorldRevision(v.next),e.graph){let C=Sg(e.graph,c.operations);if(C.length){try{S.rollback()}catch{}return M(p),T(m),W(C,c,{oldRevision:p.revision})}}S.commit()}catch(C){try{S.rollback()}catch{}return M(p),T(m),W([X("publish-failed",C instanceof Error?C.message:"persistence failed")],c,{oldRevision:p.revision})}let _={patchId:c.patchId,oldRevision:p.revision,newRevision:v.next.revision,changedIdentities:v.changed,producer:c.provenance.producer,jobId:c.provenance.jobId,contentRevisions:c.provenance.contentRevisions};try{t.publish?.(_),v.supersede&&(h(so,{patchId:v.supersede.patchId,supersededBy:c.patchId,revision:v.next.revision}),P({outcome:"superseded",patchId:v.supersede.patchId,idempotencyKey:v.supersede.idempotencyKey,at:n(),oldRevision:p.revision,newRevision:v.next.revision,reasonCodes:["superseded"],changedIdentities:[],provenance:Re(v.supersede.provenance),patch:{supersededBy:c.patchId}})),h(io,{patchId:_.patchId,oldRevision:_.oldRevision,newRevision:_.newRevision,producer:_.producer,jobId:_.jobId,contentRevisions:_.contentRevisions,changedIdentities:_.changedIdentities}),E=null,P({outcome:"accepted",patchId:c.patchId,idempotencyKey:c.idempotencyKey,at:n(),oldRevision:p.revision,newRevision:v.next.revision,reasonCodes:[],changedIdentities:v.changed,provenance:Re(c.provenance),patch:Re(c)})}catch(C){return M(p),T(m),W([X("publish-failed",C instanceof Error?C.message:"publication failed")],c,{oldRevision:p.revision})}return{ok:!0,patchId:c.patchId,oldRevision:p.revision,newRevision:v.next.revision,changedIdentities:v.changed,inspect:O()}},inspect(){return R(),O()},snapshot(){R();let u={schemaVersion:no,world:ro(t.current()),audit:Re(f)};return e.graph&&(u.graph=e.graph.snapshot()),u},restore(u){R();let v=Ig(u);if(!v.ok)return v;let c=t.current(),p=f,m=e.graph?.snapshot();try{if(M(v.snapshot.world),f=Re(v.snapshot.audit),E=null,v.snapshot.graph){let S=T(v.snapshot.graph);if(S.length)return M(c),T(m),f=p,{ok:!1,errors:S}}return{ok:!0,snapshot:v.snapshot}}catch{return M(c),T(m),f=p,{ok:!1,errors:[X("invalid-snapshot","restore failed to persist")]}}},audit(u){R();let v=u?.redact!==!1,c=Re(f);return v?Zs(c,o):c},events(){return R(),l.map(u=>Re(u))},destroy(){d=!0,l.length=0,k.length=0}}}var ao=1,Du=Li,ea=["binding-conflict","asset-failure","revision-rollback","sequence-interruption","text-only-fallback"],Nu=["state-projection","binding","content-revision","staging","asset","sequence","presentation","snapshot"],Mu=[...Yt,"privatePrompt","signedUrl","signedURL","signed_url","presignedUrl","password"],Cg=new Set(ea),Ag=new Set(Nu),Pg=new Set(["signedUrl","signedURL","signed_url","presignedUrl","presignedURL"]),Tg=/[?&](X-Amz-Signature|X-Amz-Credential|X-Amz-Security-Token|X-Goog-Signature|Signature|sig)=/i,wg=/https?:\/\/[^\s"'<>)\]]+/gi,xg="Selection trace has been destroyed",_g=new Set(ea);function Og(e){return typeof e=="string"&&Cg.has(e)}function Dg(e){return typeof e=="string"&&Ag.has(e)}function rt(e){try{return JSON.parse(JSON.stringify(e))}catch{return e}}function Ou(e){return/^https?:\/\//i.test(e)?Tg.test(e):!1}function Lu(e){return Ou(e)?ht:e.replace(wg,t=>Ou(t)?ht:t)}function Rt(e,t){if(e==null)return e;if(typeof e=="string")return Lu(e);if(Array.isArray(e))return e.map(i=>Rt(i,t));if(typeof e!="object")return e;let n=e,r={};for(let[i,o]of Object.entries(n))t.has(i)||Pg.has(i)?r[i]=ht:r[i]=Rt(o,t);return r}function Vu(e,t,n){if(e==null)return e;if(Array.isArray(e))return e.map(o=>Vu(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]=Rt(s,n):i[o]=ht;return i}function Ng(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 Mg(e,t,n){return _g.has(e)||n>=1?!0:n<=0?!1:(t*2654435761>>>0)/4294967296<n}function Lg(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 Vg(e,t){return e.recordSelectionDecision(t)}function Bg(e,t){return{...rt(e),selectionTrace:t}}function Fg(e={}){let t=new Set([...Mu,...e.redactedKeys??[]]),n=new Set(e.projectionWhitelist??[]),r=e.maxRecords??Du,i=e.sampleRate??1,o=e.inspector,s=0,a=0,d=0,f=!1,l=[],k=[],E={},R=()=>{if(f)throw new Error(xg)},O=T=>l.filter(M=>Ng(M,T)).map(M=>rt(M)),h=T=>Vu(T,n,t),P=(T,M)=>{let A={index:M,kind:T.kind,reason:T.reason,summary:Lu(String(T.summary))};return T.turn!==void 0&&(A.turn=T.turn),T.time!==void 0&&(A.time=T.time),T.correlationId&&(A.correlationId=T.correlationId),T.causationId&&(A.causationId=T.causationId),T.envelopeId&&(A.envelopeId=T.envelopeId),T.initiatingEventType&&(A.initiatingEventType=T.initiatingEventType),T.projectionRevision!==void 0&&(A.projectionRevision=T.projectionRevision),T.projection!==void 0?A.projection=h(T.projection):T.hostState!==void 0&&(A.projection=h(T.hostState)),T.bindings&&(A.bindings=Rt(rt(T.bindings.slice()),t)),T.winningBindingId!==void 0&&(A.winningBindingId=T.winningBindingId),T.rejectedBindingIds&&(A.rejectedBindingIds=T.rejectedBindingIds.slice()),T.defaultFallback!==void 0&&(A.defaultFallback=T.defaultFallback),T.requestedContent&&(A.requestedContent=Rt(rt(T.requestedContent),t)),T.activatedContent!==void 0&&(A.activatedContent=T.activatedContent?Rt(rt(T.activatedContent),t):null),T.staging&&(A.staging=Rt(rt(T.staging),t)),T.lastKnownGood!==void 0&&(A.lastKnownGood=T.lastKnownGood?Rt(rt(T.lastKnownGood),t):null),T.asset&&(A.asset=Rt(rt(T.asset),t)),T.sequence&&(A.sequence=Rt(rt(T.sequence),t)),T.presentation&&(A.presentation=Rt(rt(T.presentation),t)),T.snapshot&&(A.snapshot=rt(T.snapshot)),A},B=T=>{for(l.push(T);l.length>r;)l.shift(),s+=1};return{recordSelectionDecision(T){R();let M=d;if(d+=1,!Mg(T.reason,M,i))return a+=1,null;let A=P(T,M);return B(A),rt(A)},records(T){return R(),O(T)},query(T){return R(),O(T)},chain(T){return R(),O({correlationId:T})},exportTrace(T){R();let M=O(T),A=k.length>0?k.filter(v=>T?.correlationId?v.correlationId===T.correlationId:!0):Lg(o,M),u={schemaVersion:ao,redactedKeys:[...t],projectionWhitelist:[...n],dropped:s,sampledOut:a,records:M,inspectorRecords:rt(A)};return E.revision!==void 0&&(u.snapshotRevision=E.revision),E.schemaVersion!==void 0&&(u.snapshotSchemaVersion=E.schemaVersion),E.seed&&(u.snapshotSeed=E.seed),u},importTrace(T){R();let M=typeof T=="string"?JSON.parse(T):T;if(M.schemaVersion!==ao)throw new Error("Selection trace: unsupported export schemaVersion");s=M.dropped??0,a=M.sampledOut??0,d=0,l.length=0,k=rt(M.inspectorRecords??[]),E={},M.snapshotRevision!==void 0&&(E.revision=M.snapshotRevision),M.snapshotSchemaVersion!==void 0&&(E.schemaVersion=M.snapshotSchemaVersion),M.snapshotSeed&&(E.seed=M.snapshotSeed);for(let A of M.records??[]){let u=typeof A.index=="number"?A.index:d;d=Math.max(d,u+1),B(rt(A))}},report(T){return R(),{schemaVersion:ao,records:O(T),dropped:s,sampledOut:a}},setSnapshotProvenance(T){R(),E={...E,...T}},reset(){R(),l.length=0,k=[],s=0,a=0,d=0,E={}},destroy(){f||(f=!0,l.length=0,k=[],E={})}}}var ra=Ci,$g=Ai,Hg=["participant","image","canvas"],qg="Compositor has been destroyed";function Kg(e){return Number.isFinite(e)?e<0?0:e>1?1:e:1}function Gg(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 Wg(e){return{data:new Uint8ClampedArray(e.data),width:e.width,height:e.height,colorSpace:e.colorSpace??"srgb"}}function jg(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:Wg(e.image)}}throw new Error(`createCompositor: layer "${t}" source.kind must be participant, image, or canvas`)}function ta(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=jg(e.source,e.id);return{id:e.id,order:e.order,visible:e.visible!==!1,opacity:Kg(e.opacity??1),blend:n,clip:e.clip?{...e.clip}:null,pointerEvents:r,clearPolicy:i,sourceKind:o.kind,source:o}}function Bu(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 Fu(e){return[...e].sort((t,n)=>t.order-n.order||t.id.localeCompare(n.id))}function na(e,t){return 255-Math.round((255-e)*(255-t)/255)}function Ug(e,t,n,r,i,o,s,a){let d=o/255*s;if(d<=0)return;let f=e[t],l=e[t+1],k=e[t+2],E=e[t+3]/255,R=n,O=r,h=i;a==="screen"&&(R=na(f,n),O=na(l,r),h=na(k,i));let P=d+E*(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((R*d+f*E*(1-d))/P),e[t+1]=Math.round((O*d+l*E*(1-d))/P),e[t+2]=Math.round((h*d+k*E*(1-d))/P),e[t+3]=Math.round(P*255)}function Jg(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,f=(i*t+s)*4;r[f]=e.data[d],r[f+1]=e.data[d+1],r[f+2]=e.data[d+2],r[f+3]=e.data[d+3]}}return{data:r,width:t,height:n,colorSpace:e.colorSpace??"srgb"}}function zg(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 $u(e,t,n){return e?t>=e.x&&n>=e.y&&t<e.x+e.width&&n<e.y+e.height:!0}function Hu(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 co(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 ia(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 u of e.layers){let v=ta(u,n);if(t.has(v.id))throw new Error(`createCompositor: duplicate layer id "${v.id}"`);t.add(v.id),r.set(v.id,v)}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,f=e.offscreen!==!1,l=!e.target;if(!f&&!e.target)throw new Error("createCompositor: target canvas is required when offscreen is false");let k=e.target??document.createElement("canvas"),E=k.getContext("2d",{alpha:!0});if(!E)throw new Error("createCompositor: host canvas has no 2d context");let R=!1,O=()=>{if(R)throw new Error(qg)},h=()=>({width:Math.max(1,Math.round(s*d)),height:Math.max(1,Math.round(a*d))}),P=()=>{let u=h();k.width!==u.width&&(k.width=u.width),k.height!==u.height&&(k.height=u.height),k.style.width=`${s}px`,k.style.height=`${a}px`},B=()=>Fu([...r.values()]).map(Bu),W=u=>{if(u.source.kind==="image")return u.source.image;if(u.source.kind==="canvas")try{return Hu(u.source.canvas)}catch{return}try{let c=i.participant(u.id).cart.canvas;return c?(co(c,u),Hu(c)):void 0}catch{return}},T=(u,v,c)=>{if(u.fill(0),n==="opaque"&&!e.host?.image&&!e.host?.color&&u.fill(0),e.host?.image){let p=Jg(e.host.image,v,c);u.set(p.data);return}e.host?.color&&zg(u,Gg(e.host.color))},M=()=>{let{width:u,height:v}=h();P();let c=E.createImageData(u,v);T(c.data,u,v);for(let p of Fu([...r.values()])){if(!p.visible||p.opacity<=0)continue;let m=W(p);if(!m)continue;let S=p.clearPolicy==="transparent",_=Math.min(u,m.width),C=Math.min(v,m.height);for(let N=0;N<C;N++)for(let K=0;K<_;K++){if(!$u(p.clip,K,N))continue;let w=(N*m.width+K)*4,g=m.data[w],x=m.data[w+1],L=m.data[w+2],$=m.data[w+3];S&&g===0&&x===0&&L===0||$<=0||Ug(c.data,(N*u+K)*4,g,x,L,$,p.opacity,p.blend)}}return E.putImageData(c,0,0),c};P();for(let u of B())try{co(i.participant(u.id).cart.canvas,u)}catch{}return{get canvas(){return k},get width(){return s},get height(){return a},get dpr(){return d},compose(){return O(),M()},captureComposedFrame(){O();let u=M();return{imageData:u,pngDataUrl:k.toDataURL("image/png"),width:u.width,height:u.height,declaredOrder:B()}},resize(u,v,c){O(),s=Math.max(1,u|0),a=Math.max(1,v|0),c!==void 0&&(d=c>0?c:1);let p=h();i.resize(p.width,p.height),P()},setLayer(u,v){O();let c=r.get(u);if(!c)throw new Error(`createCompositor: unknown layer "${u}"`);let p=ta({id:u,order:v.order??c.order,visible:v.visible??c.visible,opacity:v.opacity??c.opacity,blend:v.blend??c.blend,clip:v.clip===void 0?c.clip??void 0:v.clip,pointerEvents:v.pointerEvents??c.pointerEvents,clearPolicy:v.clearPolicy??c.clearPolicy,source:v.source??c.source},n);r.set(u,p);try{co(i.participant(u).cart.canvas,p)}catch{}},addLayer(u){if(O(),r.has(u.id))throw new Error(`createCompositor: duplicate layer id "${u.id}"`);let v=ta(u,n);r.set(v.id,v);try{co(i.participant(v.id).cart.canvas,v)}catch{}},layer(u){O();let v=r.get(u);if(!v)throw new Error(`createCompositor: unknown layer "${u}"`);return Bu(v)},layers(){return O(),B()},pointerTarget(u,v){O();let c=u|0,p=v|0,m=[...B()].reverse();for(let S of m){if(!S.visible||S.pointerEvents==="none"||!$u(S.clip,c,p))continue;let _=r.get(S.id);if(_&&_.source.kind!=="participant")return S.id;try{i.participant(S.id)}catch{continue}return S.id}},unmountLayer(u){if(O(),!r.has(u))throw new Error(`createCompositor: unknown layer "${u}"`);r.delete(u);try{i.detach(u)}catch{}},inspect(){O();let u=B();return{viewport:{width:s,height:a,dpr:d},clearPolicy:n,layers:u,declaredOrder:u.map(v=>v.id)}},destroy(){R||(R=!0,l&&k.parentNode&&k.remove())}}}var wr=1,Uu=["mask","polygon","rect","depth"],Ju=["pass-through","absorb","exclusive","depth-ordered"],Yg=["hover","focus","selected"],zu=["idle","hover","focus","selected"],Xg="Semantic layer controller has been destroyed",Qg=new Set(Uu),Zg=new Set(Ju),eh=new Set(ra);function th(e){return typeof e=="string"&&Qg.has(e)}function sa(e){return typeof e=="string"&&Zg.has(e)}function uo(e){return typeof e=="string"&&eh.has(e)}function da(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 aa(e){return e.selected?"selected":e.focus?"focus":e.hover?"hover":"idle"}function ca(e){return JSON.parse(JSON.stringify(e))}function qu(){return{hover:!1,focus:!1,selected:!1}}function oa(e,t){return{hover:t?.hover??e.hover,focus:t?.focus??e.focus,selected:t?.selected??e.selected}}function Gn(e){return ca(e)}function Tr(e){return ca(e??{})}function Ku(e,t){let n=e.visuals[t]??e.visuals.idle;return{opacity:n?.opacity??1,blend:n?.blend??e.blend,version:n?.version}}function nh(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 Yu(e,t){return e.mask?nh(e.mask,t):e.polygon&&e.polygon.length>=3?dn({id:"",polygon:e.polygon},t):e.rect?dn({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 rh(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 ih(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 Gu(e,t){if(!t||typeof t!="object")throw new Error(`region "${e}" geometry is required`);if(t.mask&&ih(e,t.mask),t.polygon&&t.polygon.length>0&&t.polygon.length<3)throw new Error(`region "${e}" polygon needs 3+ points`);if(da(t).length===0)throw new Error(`region "${e}" needs mask, polygon, rect, or depth`)}function Wu(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 zu){let r=t[n];if(r&&r.blend!==void 0&&!uo(r.blend))throw new Error(`region "${e}" ${n} blend is invalid`)}}}function ju(e,t){return e instanceof Error?e.message:t}function oh(e,t){try{return e.layer(t),!0}catch{return!1}}function ua(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(Xg)};function a(h){let P=aa(h.state);return{id:h.declaration.id,geometryKinds:da(h.geometry),hitTest:h.hitTest,blend:h.blend,order:h.order,depth:h.geometry.depth??0,state:{...h.state},appearance:P,a11y:h.a11y?{...h.a11y}:null,visual:Ku(h,P)}}function d(h){let P=aa(h.state),B=Ku(h,P);if(h.visualLayerId&&n&&B.version&&n.override(h.visualLayerId,B.version),h.compositorLayerId&&t){if(!oh(t,h.compositorLayerId))return;t.setLayer(h.compositorLayerId,{opacity:B.opacity,blend:B.blend,pointerEvents:h.hitTest==="pass-through"?"none":"auto"})}}function f(h){return{geometry:Gn(h.geometry),hitTest:h.hitTest,blend:h.blend,order:h.order,compositorLayerId:h.compositorLayerId,visualLayerId:h.visualLayerId,visuals:Tr(h.visuals),state:{...h.state},a11y:h.a11y?{...h.a11y}:null}}function l(h,P){h.geometry=Gn(P.geometry),h.hitTest=P.hitTest,h.blend=P.blend,h.order=P.order,h.compositorLayerId=P.compositorLayerId,h.visualLayerId=P.visualLayerId,h.visuals=Tr(P.visuals),h.state={...P.state},h.a11y=P.a11y?{...P.a11y}:null}for(let h of e.regions){if(!h?.id)throw new Error("createSemanticLayerController: region id is required");if(o.has(h.id))throw new Error(`createSemanticLayerController: duplicate region id "${h.id}"`);if(Gu(h.id,h.geometry),Wu(h.id,h.visuals),h.hitTest&&!sa(h.hitTest))throw new Error(`createSemanticLayerController: region "${h.id}" hitTest is invalid`);if(h.blend&&!uo(h.blend))throw new Error(`createSemanticLayerController: region "${h.id}" blend is invalid`);let P={declaration:h,geometry:Gn(h.geometry),hitTest:h.hitTest??"absorb",blend:h.blend??"source-over",order:h.order??0,compositorLayerId:h.compositorLayerId??null,visualLayerId:h.visualLayerId??null,visuals:Tr(h.visuals),state:oa(qu(),h.initialState),a11y:null};o.set(h.id,P),d(P)}function k(){return[...o.values()].map(a).sort((h,P)=>h.id<P.id?-1:h.id>P.id?1:0)}function E(h){let P=[...o.values()].filter(B=>B.hitTest!=="pass-through"&&Yu(B.geometry,h));return P.sort(rh),P[0]?.hitTest==="exclusive"?P.filter(B=>B.hitTest==="exclusive"):P[0]?.hitTest==="absorb"?[P[0]]:P}function R(){let h=[...o.values()].map(P=>({id:P.declaration.id,geometry:Gn(P.geometry),hitTest:P.hitTest,blend:P.blend,order:P.order,compositorLayerId:P.compositorLayerId,visualLayerId:P.visualLayerId,visuals:Tr(P.visuals),state:{...P.state},a11y:P.a11y?{...P.a11y}:null})).sort((P,B)=>P.id<B.id?-1:P.id>B.id?1:0);return ca({schemaVersion:wr,frame:r,regions:h})}function O(h){s();let P=[],B=p=>({ok:!1,errors:[...P,p]}),W=h;if(typeof h=="string")try{W=JSON.parse(h)}catch{return B("snapshot JSON is invalid")}if(!W||typeof W!="object"||Array.isArray(W))return B("snapshot must be an object");let T=W;if(T.schemaVersion!==wr)return B("unsupported semantic layer snapshot schema");if(typeof T.frame!="number"||!Number.isFinite(T.frame))return B("frame must be finite");if(!Array.isArray(T.regions))return B("regions must be an array");let M=T.regions,A=new Map;for(let p of M){if(!p||typeof p.id!="string"||p.id.length===0){P.push("region id is required");continue}A.has(p.id)&&P.push(`duplicate region "${p.id}"`),A.set(p.id,p),o.has(p.id)||P.push(`unknown region "${p.id}"`),sa(p.hitTest)||P.push(`region "${p.id}" hitTest is invalid`),uo(p.blend)||P.push(`region "${p.id}" blend is invalid`),(typeof p.order!="number"||!Number.isFinite(p.order))&&P.push(`region "${p.id}" order must be finite`);try{Gu(p.id,p.geometry),Wu(p.id,p.visuals)}catch(m){P.push(ju(m,`region "${p.id}" is invalid`))}}for(let p of o.keys())A.has(p)||P.push(`missing region "${p}"`);if(P.length>0)return{ok:!1,errors:P};let u=r,v=new Map;for(let p of o.values())v.set(p.declaration.id,f(p));let c=()=>{r=u;for(let p of o.values()){let m=v.get(p.declaration.id);m&&l(p,m)}for(let p of o.values())d(p)};r=T.frame;for(let p of o.values()){let m=A.get(p.declaration.id);p.geometry=Gn(m.geometry),p.hitTest=m.hitTest,p.blend=m.blend,p.order=m.order,p.compositorLayerId=m.compositorLayerId??null,p.visualLayerId=m.visualLayerId??null,p.visuals=Tr(m.visuals),p.state=oa(qu(),m.state),p.a11y=m.a11y&&typeof m.a11y.name=="string"&&typeof m.a11y.role=="string"?{name:m.a11y.name,role:m.a11y.role}:null}try{for(let p of o.values())d(p)}catch(p){return c(),B(ju(p,"visual layer apply failed"))}return{ok:!0,snapshot:R()}}return{list(){return s(),k()},inspect(){return s(),k()},inspectPublished(){return s(),k().map(h=>({id:h.id,geometryKinds:h.geometryKinds,a11y:h.a11y}))},get(h){s();let P=o.get(h);return P?a(P):void 0},geometryOf(h){s();let P=o.get(h);return P?Gn(P.geometry):void 0},setRegionState(h,P){s();let B=o.get(h);if(!B)throw new Error(`createSemanticLayerController: unknown region "${h}"`);let W={...B.state};B.state=oa(B.state,P);try{d(B)}catch(T){throw B.state=W,T}},setRegionA11y(h,P){s();let B=o.get(h);if(!B)throw new Error(`createSemanticLayerController: unknown region "${h}"`);B.a11y=P?{name:P.name,role:P.role}:null},hitTest(h){s();let P=E(h);return P[0]?a(P[0]):void 0},hitTestAll(h){return s(),E(h).map(a)},snapshot(){return s(),R()},restore:O,destroy(){i||(i=!0,o.clear())},get frame(){return r}}}var xr=1,Qu=["layer","mask","sprite"],Zu=["show","hide","replace","crossfade"],el=":incoming",po="visual.layer.revealed",_r="visual.layer.hidden",fo="visual.layer.transition-started",mo="visual.layer.transition-completed",Or="visual.layer.failed",sh=[po,_r,fo,mo,Or],tl="host.state.accepted",ah=["asset-failed","missing-source","unknown-layer","unknown-version","invalid-snapshot"],dh="Visual layer controller has been destroyed",ch=new Set(Qu),uh=new Set(Zu);function nl(e){return typeof e=="string"&&ch.has(e)}function rl(e){return typeof e=="string"&&uh.has(e)}function lh(e){return e===po||e===_r||e===fo||e===mo||e===Or}function il(e){return`${e}${el}`}function ph(e){return{frame:e.captureComposedFrame(),layers:e.inspect()}}function fh(e){return{data:new Uint8ClampedArray(e.data),width:e.width,height:e.height,colorSpace:e.colorSpace??"srgb"}}function Wn(e){return JSON.parse(JSON.stringify(e))}function lo(e){if(!(!e||typeof e!="object"||Array.isArray(e)))return e}function mh(e){let t=lo(e);return typeof t?.id=="string"&&t.id.length>0?t.id:void 0}function yh(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 Xu(e){return e?{...e}:null}function la(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=Ot({originFrame:e.originFrame,reducedMotion:r}),s=e.sceneId??null,a=!1,d=0,f=new Map,l=new Map,k=new Map,E=new Map,R=[],O=[],h=()=>{if(a)throw new Error(dh)};function P(y){R.push(y),e.dispatch&&e.dispatch({type:y.type,kind:y.type===Or?"diagnostic":"state",payload:y})}function B(y){O.push(y),P({type:Or,atFrame:y.atFrame,layerId:y.layerId,version:y.version,progress:0,code:y.code})}function W(y,b){k.set(y,b)}function T(y){let b=k.get(y);if(b)return b;if(n?.get(y))return"ready";let I=n?.getProgress().items[y];return I?.state==="failed"?"failed":I?.state==="ready"?"ready":"pending"}function M(y){let b=l.get(y);if(b)return b.kind==="canvas"?{kind:"canvas",canvas:b.canvas}:{kind:"image",image:b.image}}function A(y,b){let I=lt(y.declaration,b);return I?T(I.assetId)==="ready"&&!!M(I.assetId):!1}function u(y){return y.overrideVersion&&A(y,y.overrideVersion)?y.overrideVersion:y.committedVersion}function v(y,b){let I=lt(y.declaration,b);return I?Xu(E.get(I.assetId))??Xu(I.provenance)??null:null}function c(y,b=0){return o.get(y)?.progress??b}function p(y,b,I){try{t.layer(y)}catch{t.addLayer({id:y,order:b,visible:!1,opacity:0,pointerEvents:I.pointerEvents??"none",blend:I.blend,clip:I.clip??void 0,clearPolicy:I.clearPolicy})}}function m(y){try{t.setLayer(y.incomingLayerId,{visible:!1,opacity:0})}catch{}}function S(){for(let y of f.values()){let b=u(y),I=lt(y.declaration,b),D=y.transition,H=D?c(D.cueKey):0,ne=D?.kind==="crossfade"&&D.toVersion!==null&&A(y,D.toVersion);p(y.compositorLayerId,y.order,y);let z=y.visible,ie=1;D?.kind==="hide"?(ie=1-H,H>=1&&(z=!1)):D?.kind==="show"?(z=A(y,D.toVersion),ie=z?D.durationFrames===0?1:H:0):ne&&(ie=1-H);let oe=I?M(I.assetId):void 0;if(t.setLayer(y.compositorLayerId,{order:y.order,visible:z&&!!oe,opacity:ie,blend:y.blend,clip:y.clip??void 0,pointerEvents:y.pointerEvents,clearPolicy:y.clearPolicy,source:oe}),ne&&D){let Pe=lt(y.declaration,D.toVersion),Ie=Pe?M(Pe.assetId):void 0;if(Ie){try{t.layer(y.incomingLayerId)}catch{t.addLayer({id:y.incomingLayerId,order:y.order+1,visible:!1,opacity:0,pointerEvents:"none",blend:y.blend,clip:y.clip??void 0,clearPolicy:y.clearPolicy})}t.setLayer(y.incomingLayerId,{order:y.order+1,visible:!0,opacity:H,blend:y.blend,clip:y.clip??void 0,pointerEvents:"none",clearPolicy:y.clearPolicy,source:Ie});continue}}m(y)}}function _(y){let b=u(y);return{id:y.declaration.id,kind:y.kind,visible:y.visible&&!!(b&&A(y,b)),activeVersion:b,pendingVersion:y.pendingVersion,committedVersion:y.committedVersion,opacity:t.layer(y.compositorLayerId).opacity,order:y.order,provenance:v(y,b),overrideVersion:y.overrideVersion,transition:y.transition?{kind:y.transition.kind,progress:c(y.transition.cueKey),fromVersion:y.transition.fromVersion,toVersion:y.transition.toVersion,cueKey:y.transition.cueKey,startFrame:y.transition.startFrame,durationFrames:y.transition.durationFrames,delayFrames:y.transition.delayFrames,easing:y.transition.easing}:null}}function C(y,b,I){y.committedVersion=b,y.pendingVersion=null,y.transition=null,y.visible=I,S(),P({type:I?po:_r,atFrame:o.frame,layerId:y.declaration.id,version:b,progress:1})}function N(y){y.visible=!1,y.pendingVersion=null,y.transition=null,S(),P({type:_r,atFrame:o.frame,layerId:y.declaration.id,version:y.committedVersion??void 0,progress:1})}function K(y,b,I,D){let H=y.fallback;y.transition=null,y.pendingVersion=null,H==="hide"?y.visible=!1:typeof H=="object"&&H.version&&A(y,H.version)&&(y.committedVersion=H.version,y.visible=!0),S(),B({code:D?"asset-failed":"missing-source",layerId:y.declaration.id,version:b??void 0,assetId:I,message:D?D.message:`visual layer "${y.declaration.id}" kept the prior valid frame`,atFrame:o.frame,failure:D})}function w(y){let b=y.transition;if(b?.kind==="hide")return N(y),!0;let I=y.pendingVersion??b?.toVersion??null;if(!I)return y.transition=null,!0;if(!lt(y.declaration,I))return K(y,I),!0;if(A(y,I))return C(y,I,!0),!0;let D=lt(y.declaration,I).assetId;return T(D)==="failed"?(K(y,I,D),!0):(y.transition=null,y.pendingVersion=I,S(),!1)}function g(){for(let y of f.values())if(!y.transition&&y.pendingVersion){if(A(y,y.pendingVersion))C(y,y.pendingVersion,!0);else if(T(lt(y.declaration,y.pendingVersion)?.assetId??"")==="failed"){let b=lt(y.declaration,y.pendingVersion);K(y,y.pendingVersion,b?.assetId)}}for(let y of f.values())y.overrideVersion&&A(y,y.overrideVersion)&&y.committedVersion!==y.overrideVersion&&C(y,y.overrideVersion,!0)}function x(y,b){W(y,"failed");for(let I of f.values()){let D=I.declaration.versions.find(oe=>oe.assetId===y);if(!D)continue;let H=lt(I.declaration,I.pendingVersion),ne=lt(I.declaration,I.transition?.toVersion??null),z=lt(I.declaration,I.overrideVersion);if(H?.assetId===y||ne?.assetId===y||z?.assetId===y){I.transition&&o.cancel(I.transition.cueKey),z?.assetId===y&&(I.overrideVersion=null),K(I,D.id,y,b);continue}B({code:"asset-failed",layerId:I.declaration.id,version:D.id,assetId:y,message:b?.message??`asset "${y}" failed; prior frame kept`,atFrame:o.frame,failure:b}),S()}}function L(y){for(let b of y){let I=[...f.values()].find(D=>D.transition?.cueKey===b.idempotencyKey);if(!(!I||!I.transition))if(b.type===Bt)P({type:fo,atFrame:b.atFrame,layerId:I.declaration.id,version:I.transition.toVersion??void 0,kind:I.transition.kind,progress:b.progress}),S();else if(b.type===Ut){let D=I.transition.kind,H=I.transition.toVersion??void 0;w(I),P({type:mo,atFrame:b.atFrame,layerId:I.declaration.id,version:H,kind:D,progress:1})}else(b.type===Ft||b.type===_t)&&(I.transition=null,S())}}function $(){let y=R.slice(d).map(b=>Wn(b));return d=R.length,y}for(let y of e.layers){if(!y?.id)throw new Error("createVisualLayerController: layer id is required");if(f.has(y.id))throw new Error(`createVisualLayerController: duplicate layer id "${y.id}"`);if(!nl(y.kind))throw new Error(`createVisualLayerController: layer "${y.id}" kind is invalid`);if(!y.versions?.length)throw new Error(`createVisualLayerController: layer "${y.id}" needs versions`);let b=new Set;for(let ie of y.versions){if(!ie?.id||!ie.assetId)throw new Error(`createVisualLayerController: layer "${y.id}" versions need id and assetId`);if(b.has(ie.id))throw new Error(`createVisualLayerController: layer "${y.id}" duplicate version "${ie.id}"`);b.add(ie.id),ie.provenance&&E.set(ie.assetId,{...ie.provenance})}if(y.initialVersion&&!b.has(y.initialVersion))throw new Error(`createVisualLayerController: layer "${y.id}" unknown initialVersion`);let I=y.compositorLayerId??y.id,D=y.incomingLayerId??il(I),H=y.order??0,ne=y.pointerEvents??(y.kind==="mask"?"none":"auto"),z={declaration:y,compositorLayerId:I,incomingLayerId:D,kind:y.kind,order:H,blend:y.blend??"source-over",clip:y.clip?{...y.clip}:null,pointerEvents:ne,clearPolicy:y.clearPolicy??"opaque",fallback:y.fallback??i,visible:!!y.initialVersion,committedVersion:y.initialVersion??null,pendingVersion:null,overrideVersion:null,transition:null};f.set(y.id,z),p(I,H,z)}S();function q(y){if(h(),!y||typeof y!="object")return{ok:!1,reason:"invalid",detail:"spec is required"};if(!y.layerId)return{ok:!1,reason:"invalid",detail:"layerId is required"};let b=f.get(y.layerId);if(!b)return{ok:!1,reason:"invalid",detail:`unknown layer "${y.layerId}"`};if(!rl(y.kind))return{ok:!1,reason:"invalid",detail:"unsupported kind"};if(y.kind!=="hide"&&!y.toVersion)return{ok:!1,reason:"invalid",detail:"toVersion is required"};if(y.toVersion&&!lt(b.declaration,y.toVersion))return{ok:!1,reason:"invalid",detail:`unknown version "${y.toVersion}"`};let I={name:y.name,idempotencyKey:y.idempotencyKey,startFrame:y.startFrame,durationFrames:y.durationFrames,delayFrames:y.delayFrames,easing:y.easing,repeat:y.repeat,reducedMotion:y.reducedMotion,onDuplicate:y.onDuplicate??"replace"},D=o.snapshot().events.length,H=o.play(I);if(!H.ok)return H;let ne=o.snapshot().events.slice(D);return b.pendingVersion=y.kind==="hide"?b.committedVersion:y.toVersion??null,b.transition={kind:y.kind,cueKey:y.idempotencyKey,fromVersion:y.fromVersion??b.committedVersion,toVersion:y.kind==="hide"?b.committedVersion:y.toVersion??null,startFrame:H.cue.startFrame,durationFrames:H.cue.durationFrames,delayFrames:H.cue.delayFrames,easing:H.cue.easing},L(ne),S(),$(),H}function ee(y){let b=lo(y),I=typeof b?.sceneId=="string"?b.sceneId:void 0;if(e.sceneId&&I&&I!==e.sceneId)return;I&&(s=I);let D=typeof b?.layerId=="string"?b.layerId:typeof b?.overlayId=="string"?b.overlayId:void 0,H=typeof b?.version=="string"?b.version:void 0;if(D&&H){q({name:`visual:${D}:replace`,idempotencyKey:`visual:${D}:accepted`,layerId:D,kind:"replace",toVersion:H,durationFrames:2});return}for(let ne of e.onAccepted??[])q({name:`visual:${ne.layerId}:${ne.kind??"replace"}`,idempotencyKey:ne.idempotencyKey??`visual:${ne.layerId}:accepted`,layerId:ne.layerId,kind:ne.kind??"replace",toVersion:ne.toVersion,durationFrames:ne.durationFrames??2,delayFrames:ne.delayFrames,easing:ne.easing})}function Y(){let y=[...f.values()].map(I=>{let D=_(I);return{id:I.declaration.id,kind:I.kind,visible:I.visible,committedVersion:I.committedVersion,pendingVersion:I.pendingVersion,activeVersion:D.activeVersion,opacity:D.opacity,order:I.order,overrideVersion:I.overrideVersion,provenance:D.provenance,fallback:I.fallback,transition:D.transition}}).sort((I,D)=>I.id<D.id?-1:I.id>D.id?1:0),b={};for(let[I,D]of[...k.entries()].sort(([H],[ne])=>H<ne?-1:H>ne?1:0))b[I]=D;return Wn({schemaVersion:xr,frame:o.frame,sceneId:s,reducedMotion:r,layers:y,assets:b,events:R.map(I=>Wn(I)),diagnostics:O.map(I=>Wn(I))})}function G(y){h();let b=[],I=z=>{let ie={code:"invalid-snapshot",layerId:"",message:z,atFrame:o.frame};return{ok:!1,errors:[...b,ie]}},D=y;if(typeof y=="string")try{D=JSON.parse(y)}catch{return I("snapshot JSON is invalid")}if(!D||typeof D!="object"||Array.isArray(D))return I("snapshot must be an object");let H=D;if(H.schemaVersion!==xr)return I("unsupported visual layer snapshot schema");if(typeof H.frame!="number"||!Number.isFinite(H.frame))return I("frame must be finite");if(!Array.isArray(H.layers))return I("layers must be an array");if(typeof H.reducedMotion=="boolean"&&(r=H.reducedMotion),o=Ot({originFrame:H.frame,reducedMotion:!1}),s=typeof H.sceneId=="string"||H.sceneId===null?H.sceneId:s,R.length=0,O.length=0,d=0,Array.isArray(H.events)&&(R.push(...H.events.map(z=>Wn(z))),d=R.length),Array.isArray(H.diagnostics)&&O.push(...H.diagnostics.map(z=>Wn(z))),k.clear(),H.assets&&typeof H.assets=="object")for(let[z,ie]of Object.entries(H.assets))(ie==="ready"||ie==="failed"||ie==="pending")&&k.set(z,ie);let ne=new Map(H.layers.map(z=>[z.id,z]));for(let z of f.values()){let ie=ne.get(z.declaration.id);ie&&(z.visible=!!ie.visible,z.committedVersion=ie.committedVersion??null,z.pendingVersion=ie.pendingVersion??null,z.overrideVersion=ie.overrideVersion??null,z.transition=null,ie.transition&&o.play({name:`visual:${z.declaration.id}:${ie.transition.kind}`,idempotencyKey:ie.transition.cueKey,startFrame:ie.transition.startFrame,durationFrames:ie.transition.durationFrames,delayFrames:ie.transition.delayFrames,easing:ie.transition.easing,onDuplicate:"replace"}).ok&&(z.transition={kind:ie.transition.kind,cueKey:ie.transition.cueKey,fromVersion:ie.transition.fromVersion,toVersion:ie.transition.toVersion,startFrame:ie.transition.startFrame,durationFrames:ie.transition.durationFrames,delayFrames:ie.transition.delayFrames,easing:ie.transition.easing}))}return S(),o.setReducedMotion(r),{ok:!0,snapshot:Y()}}return{registerSource(y,b){if(h(),typeof y!="string"||y.length===0)throw new Error("createVisualLayerController: assetId is required");if(b instanceof HTMLCanvasElement)l.set(y,{kind:"canvas",canvas:b});else if(b&&"data"in b&&"width"in b)l.set(y,{kind:"image",image:fh(b)});else throw new Error("createVisualLayerController: source must be ImageData or canvas");g(),S()},handleHostEvent(y){if(h(),!y||typeof y!="object")return;if(y.type===tl){ee(y.payload);return}let b=mh(y.payload);if(b){if(y.type===Je){W(b,"ready");let D=lo(y.payload)?.resource;if(D&&typeof D=="object"&&"provenance"in D){let H=D.provenance;H&&E.set(b,{...H})}g(),S();return}if(y.type===We){let I=lo(y.payload);x(b,yh(I?.failure))}}},override(y,b){h();let I=f.get(y);if(!I)throw new Error(`createVisualLayerController: unknown layer "${y}"`);if(b===null){I.overrideVersion=null,S();return}if(!lt(I.declaration,b))throw new Error(`createVisualLayerController: unknown version "${b}" on "${y}"`);if(I.overrideVersion=b,A(I,b)){I.transition&&o.cancel(I.transition.cueKey),C(I,b,!0);return}S()},play:q,setReducedMotion(y){h(),r=!!y,o.setReducedMotion(r)},step(y=1){h();let b=o.step(y);return L(b),g(),S(),$()},snapshot(){return h(),Y()},restore:G,inspect(){return h(),S(),[...f.values()].map(_).sort((y,b)=>y.id<b.id?-1:y.id>b.id?1:0)},captureComposedFrame(){return h(),S(),t.captureComposedFrame()},destroy(){a||(a=!0,o.reset(),R.length=0,O.length=0)},get frame(){return o.frame},get sceneId(){return s},get compositor(){return t},get reducedMotion(){return r}}}var Dr=1,yo="presentation.sequence.state.requested",go="presentation.sequence.state.preloading",ho="presentation.sequence.state.ready",bo="presentation.sequence.state.started",vo="presentation.sequence.state.step-started",So="presentation.sequence.state.step-completed",Eo="presentation.sequence.state.skipped",ko="presentation.sequence.state.interrupted",fa="presentation.sequence.state.failed",Io="presentation.sequence.state.completed",ma="presentation.sequence.diagnostic.lifecycle",sl=[yo,go,ho,bo,vo,So,Eo,ko,fa,Io,ma],al=["audio","caption","semantic-region","visual-layer","cue"],dl=["replace","queue","reject","ignore"],cl=["duration","immediate"],ul=["unavailable","failed","unauthorized","muted"],ll=["requested","preloading","ready","playing","paused","skipped","interrupted","failed","completed"],gh=new Set(al),hh=new Set(dl),bh=new Set(cl),vh=new Set(ul),Sh=new Set(sl),Eh="Presentation sequence player has been destroyed";function ae(e,t,n){return n?{code:e,detail:t,path:n}:{code:e,detail:t}}function He(e){return JSON.parse(JSON.stringify(e))}function qe(e){return!!e&&typeof e=="object"&&!Array.isArray(e)}function _e(e){return typeof e=="string"&&e.length>0}function pa(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)=>pa(r,`${t}[${i}]`,n));return}if(qe(e))for(let[r,i]of Object.entries(e))pa(i,t?`${t}.${r}`:r,n)}function jn(e){return typeof e=="number"&&Number.isFinite(e)&&e>=0}function Ct(){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 At(e){if(!e.ok)throw new Error(e.errors.map(t=>t.detail).join("; "));return e.contract}function kh(){return[At(fe(yo,Ct())),At(fe(go,Ct())),At(fe(ho,Ct())),At(fe(bo,Ct())),At(fe(vo,Ct())),At(fe(So,Ct())),At(fe(Eo,Ct())),At(fe(ko,Ct())),At(fe(fa,Ct())),At(fe(Io,Ct())),At(et(ma,Ct()))]}function pl(e){return typeof e=="string"&&Sh.has(e)}function Ih(e){if(e)return"timeline"in e?e.timeline:e}function Rh(e,t,n){return n?!t||t==="skip"||t==="complete"?0:t.durationFrames:e}function Ch(e,t){return(e.kind==="relative"||e.kind==="simultaneous"?e.delayFrames??0:0)+t}function Ah(e,t,n){if(!qe(e)||!_e(e.kind)){n.push(ae("invalid-timing","timing.kind is required",t));return}if(e.kind==="absolute"){jn(e.atFrame)||n.push(ae("invalid-timing","timing.atFrame must be >= 0",t));return}if(e.kind==="relative"){e.afterStepId!==void 0&&!_e(e.afterStepId)&&n.push(ae("invalid-timing","timing.afterStepId must be a string",t)),e.delayFrames!==void 0&&!jn(e.delayFrames)&&n.push(ae("invalid-timing","timing.delayFrames must be >= 0",t));return}if(e.kind==="simultaneous"){_e(e.withStepId)||n.push(ae("invalid-timing","timing.withStepId is required",t)),e.order!==void 0&&!jn(e.order)&&n.push(ae("invalid-timing","timing.order must be >= 0",t)),e.delayFrames!==void 0&&!jn(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 Ph(e,t,n,r){if(!qe(e)||!_e(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"&&!_e(e.assetBinding)&&r.push(ae("invalid-effect","assetBinding is required",n)),e.kind==="caption"&&(_e(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"&&(_e(e.regionBinding)||r.push(ae("invalid-effect","regionBinding is required",n)),qe(e.state)||r.push(ae("invalid-effect","state is required",n))),e.kind==="visual-layer"&&(_e(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"&&!_e(e.name)&&r.push(ae("invalid-effect","cue name is required",n))}function Th(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 Nr(e){let t=[];if(pa(e,"",t),!qe(e))return{ok:!1,errors:[ae("invalid-definition","sequence must be a JSON object")]};if(_e(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";hh.has(String(n))||t.push(ae("invalid-policy","unsupported interruptionPolicy","interruptionPolicy"));let r=new Set,i=new Set,o=[];e.tracks.forEach((l,k)=>{let E=`tracks[${k}]`;if(!qe(l)){t.push(ae("invalid-track","track must be an object",E));return}if(!_e(l.id)){t.push(ae("invalid-track","track id is required",`${E}.id`));return}if(i.has(l.id)&&t.push(ae("duplicate-track",`duplicate track id "${l.id}"`,E)),i.add(l.id),!gh.has(String(l.kind))){t.push(ae("invalid-kind","unsupported track kind",`${E}.kind`));return}if(!Array.isArray(l.steps)||l.steps.length===0){t.push(ae("invalid-steps","track steps are required",`${E}.steps`));return}let R=[];l.steps.forEach((O,h)=>{let P=`${E}.steps[${h}]`;if(!qe(O)){t.push(ae("invalid-step","step must be an object",P));return}if(!_e(O.id)){t.push(ae("invalid-step","step id is required",`${P}.id`));return}r.has(O.id)&&t.push(ae("duplicate-step",`duplicate step id "${O.id}"`,P)),r.add(O.id),jn(O.durationFrames)||t.push(ae("invalid-duration","durationFrames must be >= 0",`${P}.durationFrames`)),O.delayFrames!==void 0&&!jn(O.delayFrames)&&t.push(ae("invalid-delay","delayFrames must be >= 0",`${P}.delayFrames`)),O.completion!==void 0&&!bh.has(String(O.completion))&&t.push(ae("invalid-completion","unsupported completion rule",`${P}.completion`)),Ah(O.timing,`${P}.timing`,t),Ph(O.effect,String(l.kind),`${P}.effect`,t),R.push(He(O))}),o.push({id:l.id,kind:l.kind,steps:R})});let s=[],a=new Set;e.fallbacks!==void 0&&(Array.isArray(e.fallbacks)?e.fallbacks.forEach((l,k)=>{let E=`fallbacks[${k}]`;if(!qe(l)||!_e(l.id)){t.push(ae("invalid-fallback","fallback id is required",E));return}a.has(l.id)&&t.push(ae("duplicate-fallback",`duplicate fallback id "${l.id}"`,E)),a.add(l.id);let R=l.when;if((!qe(R)||R.capability!=="audio"||!vh.has(String(R.status)))&&t.push(ae("invalid-fallback","unsupported fallback.when",`${E}.when`)),l.omitTrackIds!==void 0)if(!Array.isArray(l.omitTrackIds))t.push(ae("invalid-fallback","omitTrackIds must be an array",E));else for(let O of l.omitTrackIds)i.has(String(O))||t.push(ae("unknown-track",`omitTrackIds references unknown track "${String(O)}"`,E));s.push(He(l))}):t.push(ae("invalid-fallbacks","fallbacks must be an array","fallbacks")));let d={id:String(e.id??""),tracks:o,interruptionPolicy:n,fallbacks:s},f=Th(d);for(let{step:l}of f.values())l.timing.kind==="relative"&&l.timing.afterStepId&&(f.has(l.timing.afterStepId)||t.push(ae("unknown-step",`afterStepId "${l.timing.afterStepId}" does not exist`,`steps.${l.id}`))),l.timing.kind==="simultaneous"&&!f.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:He(d)}}function ol(e,t,n,r){let i=[];for(let l of e.tracks)if(!t.has(l.id))for(let k of l.steps)i.push({track:l,step:k});let o=new Map(i.map(l=>[l.step.id,l])),s=new Map,a=new Set;function d(l){let k=s.get(l);if(k!==void 0)return k;let E=o.get(l);if(!E||a.has(l))return n;a.add(l);let R=Ch(E.step.timing,E.step.delayFrames??0),O=n+R;if(E.step.timing.kind==="absolute")O=n+E.step.timing.atFrame+(E.step.delayFrames??0);else if(E.step.timing.kind==="relative"&&E.step.timing.afterStepId){let h=o.get(E.step.timing.afterStepId);if(h){let P=d(h.step.id),B=f(h.step);O=P+B+R}}else E.step.timing.kind==="simultaneous"&&(O=d(E.step.timing.withStepId)+R);return a.delete(l),s.set(l,O),O}function f(l){return l.completion==="immediate"?0:Rh(l.durationFrames,l.reducedMotion,r)}return i.map(({track:l,step:k})=>{let E=d(k.id),R=f(k),O=k.timing.kind==="simultaneous"?k.timing.order??0:0;return{id:k.id,trackId:l.id,trackKind:l.kind,order:O,startFrame:E,durationFrames:R,endFrame:E+R,effect:He(k.effect),restoreOnComplete:k.restoreOnComplete===!0,reducedSensory:k.reducedSensory??"keep"}}).sort(fl)}function fl(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 Xt(e,t){if(!t)return;let n=e?.[t];return _e(n)?n:void 0}function wh(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===sn)return i.reason??"asset-failed"}}function xh(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=Xt(n.assets,a.effect.assetBinding);if(!d)continue;let f=Xt(n.channels,a.effect.channelBinding);if(o&&!o.isAuthorized(f)&&o.inspect().authorized.length>0)return"unauthorized";if(o?.assetStatus(d)==="failed")return"failed"}return"ok"}function ya(e={}){let t=e.originFrame??0,n=!!e.reducedMotion,r=!!e.reducedSensory,i=e.semantic,o=e.visual,s=Ih(e.audio),a=e.audio,d=new Map,f=Ot({originFrame:t,reducedMotion:n}),l=t,k=!1,E=!1,R=null,O=null,h=[],P=new Map,B=[],W=new Map;for(let b of e.sequences??[]){let I=Nr(b);I.ok&&d.set(I.sequence.id,I.sequence)}function T(){if(E)throw new Error(Eh)}function M(b){B.push(He(b))}function A(b,I,D){let H={type:I,atFrame:l,sequenceId:b.sequenceId,invocationId:b.invocationId,idempotencyKey:b.idempotencyKey};D?.stepId&&(H.stepId=D.stepId),b.selectedFallbackId&&(H.fallbackId=b.selectedFallbackId),D?.reason&&(H.reason=D.reason),M(H)}function u(b){let I=[...b.steps.values()].filter(H=>H.phase==="completed").map(H=>H.resolved.id).sort(),D=[...b.steps.values()].filter(H=>H.phase==="active").map(H=>H.resolved.id).sort();return{sequenceId:b.sequenceId,invocationId:b.invocationId,idempotencyKey:b.idempotencyKey,phase:b.phase,playhead:Math.max(0,l-b.startedAtFrame),startedAtFrame:b.startedAtFrame,completedStepIds:I,activeStepIds:D,selectedFallbackId:b.selectedFallbackId,compiledReducedMotion:b.compiledReducedMotion}}function v(b,I){return fl(b.resolved,I.resolved)}function c(b,I){return`${b.invocationId}:${I}`}function p(b,I){return`${b.invocationId}:${I}`}function m(b){if(b.audioKey&&s?.cancel(b.audioKey),b.captionId){let I=P.get(b.captionId);I&&P.set(b.captionId,{...I,visible:!1})}if(b.regionId&&b.regionKeys&&i){let I={};for(let D of b.regionKeys)I[D]=!1;i.setRegionState(b.regionId,I)}b.visualLayerId&&o&&b.visualTransition==="hide"?o.play({name:`sequence:${b.visualLayerId}:restore`,idempotencyKey:`sequence:${b.visualLayerId}:restore:${l}`,layerId:b.visualLayerId,kind:"show",toVersion:b.visualVersion,durationFrames:0,onDuplicate:"replace"}):b.visualLayerId&&o&&b.visualTransition==="show"&&o.play({name:`sequence:${b.visualLayerId}:restore`,idempotencyKey:`sequence:${b.visualLayerId}:restore:${l}`,layerId:b.visualLayerId,kind:"hide",durationFrames:0,onDuplicate:"replace"}),b.cueKey&&f.cancel(b.cueKey)}function S(b,I){let{resolved:D}=I,H={},ne=r||D.reducedSensory==="skip-audio"||D.reducedSensory==="complete";if(D.effect.kind==="audio"){let z=Xt(b.bindings.assets,D.effect.assetBinding);if(z&&s&&!ne){let ie=p(b,D.id);s.play({name:D.id,idempotencyKey:ie,assetId:z,channelId:Xt(b.bindings.channels,D.effect.channelBinding),durationFrames:D.durationFrames,onDuplicate:"replace"}),H.audioKey=ie,wh(s,ie)&&(I.applied=H,C(b,"failed"),s.cancel(ie),H.audioKey=void 0)}}else if(D.effect.kind==="caption"){let z=Xt(b.bindings.captions,D.effect.textBinding)??"",ie=c(b,D.effect.textBinding);P.set(ie,{id:ie,text:z,visible:D.effect.visible}),H.captionId=ie}else if(D.effect.kind==="semantic-region"){let z=Xt(b.bindings.regions,D.effect.regionBinding);z&&i&&(i.setRegionState(z,D.effect.state),H.regionId=z,H.regionKeys=["hover","focus","selected"].filter(ie=>D.effect.kind==="semantic-region"&&D.effect.state[ie]!==void 0))}else if(D.effect.kind==="visual-layer"){let z=Xt(b.bindings.layers,D.effect.layerBinding),ie=Xt(b.bindings.versions,D.effect.versionBinding);z&&o&&(o.play({name:`sequence:${D.id}`,idempotencyKey:p(b,D.id),layerId:z,kind:D.effect.transition,toVersion:D.effect.transition==="hide"?void 0:ie,durationFrames:D.durationFrames,onDuplicate:"replace"}),H.visualLayerId=z,H.visualVersion=ie??o.inspect().find(oe=>oe.id===z)?.committedVersion??void 0,H.visualTransition=D.effect.transition)}else if(D.effect.kind==="cue"){let z=p(b,D.id);f.play({name:D.effect.name,idempotencyKey:z,durationFrames:D.durationFrames,easing:D.effect.easing,onDuplicate:"replace"}),H.cueKey=z}I.applied=H}function _(b,I,D){if(I.phase==="active"){if(D){I.applied&&m(I.applied),I.phase="skipped";return}I.resolved.restoreOnComplete&&I.applied?m(I.applied):I.applied?.audioKey&&I.resolved.effect.kind,I.phase="completed",A(b,So,{stepId:I.resolved.id})}}function C(b,I){let D=d.get(b.sequenceId);if(!D)return!1;let H=(D.fallbacks??[]).find(z=>z.when.capability==="audio"&&z.when.status===I);if(!H)return!1;if(b.selectedFallbackId===H.id)return!0;b.selectedFallbackId=H.id;let ne=new Set(H.omitTrackIds??[]);for(let z of b.steps.values())ne.has(z.resolved.trackId)&&(z.phase==="pending"?z.phase="skipped":z.phase==="active"&&_(b,z,!0));return!0}function N(b){let I=[...b.steps.values()].filter(D=>D.phase==="pending"&&D.resolved.startFrame<=l).sort(v);for(let D of I)D.phase="active",A(b,vo,{stepId:D.resolved.id}),S(b,D),D.resolved.durationFrames===0&&D.phase==="active"&&_(b,D,!1)}function K(b){let I=[...b.steps.values()].filter(D=>D.phase==="active"&&l>=D.resolved.endFrame).sort(v);for(let D of I)_(b,D,!1)}function w(b){return b.phase==="playing"||b.phase==="paused"||b.phase==="ready"||b.phase==="preloading"||b.phase==="requested"}function g(b){!w(b)||[...b.steps.values()].some(D=>D.phase==="pending"||D.phase==="active")||(b.phase="completed",b.nextAvailable=!0,A(b,Io),R===b&&(R=null,k=!1),ee())}function x(b,I){for(let D of[...b.steps.values()].sort(v))D.phase==="active"?_(b,D,!0):D.phase==="pending"&&(D.phase="skipped")}function L(b,I,D,H,ne=l,z=n){let ie=ol(b,H,ne,z),oe=new Map;for(let Pe of ie)oe.set(Pe.id,{resolved:Pe,phase:"pending",applied:null});return{sequenceId:b.id,invocationId:I.invocationId,idempotencyKey:I.idempotencyKey??I.invocationId,bindings:He(I.bindings??{}),interruptionPolicy:b.interruptionPolicy??"replace",selectedFallbackId:D,phase:"requested",startedAtFrame:l,steps:oe,nextAvailable:!1,compiledReducedMotion:z}}function $(b,I){if(!_e(I.invocationId))return{ok:!1,reason:"invalid",detail:"invocationId is required"};let D=I.idempotencyKey??I.invocationId;if(W.get(D)&&R&&R.idempotencyKey===D)return{ok:!0,invocation:u(R)};let ne=I.bindings??{};M({type:yo,atFrame:l,sequenceId:b.id,invocationId:I.invocationId,idempotencyKey:D});let z={sequenceId:b.id,invocationId:I.invocationId,idempotencyKey:D,bindings:He(ne),interruptionPolicy:b.interruptionPolicy??"replace",selectedFallbackId:null,phase:"preloading",startedAtFrame:l,steps:new Map,nextAvailable:!1,compiledReducedMotion:n};A(z,go);let oe=xh(s,b,ne,a),Pe=null,Ie=new Set;if(oe!=="ok"){let Oe=(b.fallbacks??[]).find(V=>V.when.capability==="audio"&&V.when.status===oe);if(Oe){Pe=Oe.id;for(let V of Oe.omitTrackIds??[])Ie.add(V)}else if(oe==="unavailable"||oe==="failed")for(let V of b.tracks)V.kind==="audio"&&Ie.add(V.id)}if(r)for(let Oe of b.tracks)Oe.kind==="audio"&&Ie.add(Oe.id);let we=L(b,{...I,idempotencyKey:D},Pe,Ie);return we.phase="ready",A(we,ho),we.phase="playing",A(we,bo),R=we,O={sequenceId:b.id,options:{...I,idempotencyKey:D}},W.set(D,we.invocationId),K(we),N(we),g(we),{ok:!0,invocation:u(we)}}function q(b){if(!R||!w(R))return;let I=R;x(I,!0),I.phase="interrupted",I.nextAvailable=!0,A(I,ko,{reason:b}),R=null,k=!1}function ee(){if(R||k)return;let b=h.shift();if(!b)return;let I=d.get(b.sequenceId);I&&$(I,b.options)}function Y(b,I){let D=new Set;if(I){let H=(b.fallbacks??[]).find(ne=>ne.id===I);for(let ne of H?.omitTrackIds??[])D.add(ne)}return ol(b,D,t,n).map(H=>({sequenceId:b.id,stepId:H.id,trackId:H.trackId,kind:H.trackKind,startFrame:H.startFrame,durationFrames:H.durationFrames,order:H.order,effect:He(H.effect)}))}function G(){return He({schemaVersion:Dr,frame:l,reducedMotion:n,reducedSensory:r,paused:k,active:R?u(R):null,queue:h.map(b=>({sequenceId:b.sequenceId,invocationId:b.options.invocationId,idempotencyKey:b.options.idempotencyKey??b.options.invocationId,bindings:He(b.options.bindings??{})})),captions:[...P.values()].sort((b,I)=>b.id<I.id?-1:1),events:B.map(b=>He(b)),bindings:R?He(R.bindings):null})}function y(b){for(let I of[...b.steps.values()].sort(v)){if(I.phase!=="active")continue;let D=Math.max(0,I.resolved.endFrame-l);I.resolved={...I.resolved,durationFrames:D,endFrame:l+D},S(b,I)}}return{define(b){T();let I=Nr(b);return I.ok&&d.set(I.sequence.id,I.sequence),I},playSequence(b,I){T();let D=d.get(b);if(!D)return{ok:!1,reason:"unknown-sequence",detail:`unknown sequence "${b}"`};let H=I.idempotencyKey??I.invocationId;if(R&&w(R)&&R.idempotencyKey===H)return{ok:!0,invocation:u(R)};if(R&&w(R)){let ne=R.interruptionPolicy;if(ne==="reject")return{ok:!1,reason:"busy",detail:"sequence is already playing"};if(ne==="ignore")return{ok:!0,invocation:u(R)};if(ne==="queue")return h.push({sequenceId:b,options:{...I,idempotencyKey:H}}),{ok:!0,invocation:{sequenceId:b,invocationId:I.invocationId,idempotencyKey:H,phase:"requested",playhead:0,startedAtFrame:l,completedStepIds:[],activeStepIds:[],selectedFallbackId:null,compiledReducedMotion:n}};q("replace")}return $(D,{...I,idempotencyKey:H})},skip(b){if(T(),!R||!w(R)||b&&R.invocationId!==b)return!1;let I=R;return x(I,!0),I.phase="skipped",I.nextAvailable=!0,A(I,Eo),R=null,k=!1,ee(),!0},replay(b){T();let I=R&&w(R)?R:null,D=I?{sequenceId:I.sequenceId,options:{invocationId:I.invocationId,idempotencyKey:I.idempotencyKey,bindings:He(I.bindings)}}:O;if(!D)return{ok:!1,reason:"invalid",detail:"no sequence to replay"};if(b&&D.options.invocationId!==b)return{ok:!1,reason:"invalid",detail:"unknown invocation"};let H=d.get(D.sequenceId);return H?(W.delete(D.options.idempotencyKey??D.options.invocationId),I&&(x(I,!0),R=null,k=!1),$(H,D.options)):{ok:!1,reason:"unknown-sequence",detail:`unknown sequence "${D.sequenceId}"`}},pause(){return T(),!R||R.phase!=="playing"?!1:(k=!0,R.phase="paused",!0)},resume(){return T(),!R||R.phase!=="paused"?!1:(k=!1,R.phase="playing",!0)},cancel(b){return T(),!R||!w(R)||b&&R.invocationId!==b?!1:(q("cancel"),ee(),!0)},step(b=1){T();let I=Number.isFinite(b)?Math.max(0,Math.floor(b)):0,D=B.length;if(k)return[];for(let H=0;H<I;H++)l+=1,f.step(1),s?.step(1),o?.step(1),R&&w(R)?(K(R),N(R),g(R)):ee();return B.slice(D).map(H=>He(H))},snapshot(){return T(),G()},restore(b){T();let I={frame:l,paused:k,active:R,queue:h.slice(),captions:new Map(P),events:B.slice(),seenKeys:new Map(W),presentation:f,reducedMotion:n,reducedSensory:r},D=oe=>{l=I.frame,k=I.paused,R=I.active,h.length=0,h.push(...I.queue),P.clear();for(let[Pe,Ie]of I.captions)P.set(Pe,Ie);B.length=0,B.push(...I.events),W.clear();for(let[Pe,Ie]of I.seenKeys)W.set(Pe,Ie);return f=I.presentation,n=I.reducedMotion,r=I.reducedSensory,{ok:!1,errors:oe}},H=b;if(typeof b=="string")try{H=JSON.parse(b)}catch{return D([ae("invalid-json","snapshot JSON is invalid")])}if(!qe(H))return D([ae("invalid-snapshot","snapshot must be a JSON object")]);let ne=[];H.schemaVersion!==Dr&&ne.push(ae("unsupported-schema","unsupported presentation sequence snapshot schema")),(typeof H.frame!="number"||!Number.isFinite(H.frame))&&ne.push(ae("invalid-snapshot","frame must be finite","frame"));let z=H.active;if(z!=null&&(!qe(z)||!_e(z.sequenceId)?ne.push(ae("invalid-snapshot","active.sequenceId is required","active")):d.has(z.sequenceId)||ne.push(ae("unknown-sequence",`unknown sequence "${z.sequenceId}"`,"active.sequenceId"))),H.queue!==void 0&&(Array.isArray(H.queue)?H.queue.forEach((oe,Pe)=>{let Ie=`queue[${Pe}]`;if(!qe(oe)||!_e(oe.sequenceId)){ne.push(ae("invalid-snapshot","queue item sequenceId is required",Ie));return}d.has(oe.sequenceId)||ne.push(ae("unknown-sequence",`unknown sequence "${oe.sequenceId}"`,Ie)),_e(oe.invocationId)||ne.push(ae("invalid-snapshot","queue item invocationId is required",Ie))}):ne.push(ae("invalid-snapshot","queue must be an array","queue"))),ne.length>0)return D(ne);let ie=H.frame;if(typeof ie!="number"||!Number.isFinite(ie))return D([ae("invalid-snapshot","frame must be finite","frame")]);try{if(R&&w(R)&&x(R,!0),P.clear(),h.length=0,B.length=0,W.clear(),k=H.paused===!0,l=ie,typeof H.reducedMotion=="boolean"&&(n=H.reducedMotion),typeof H.reducedSensory=="boolean"&&(r=H.reducedSensory),f=Ot({originFrame:l,reducedMotion:!1}),Array.isArray(H.events))for(let oe of H.events)qe(oe)&&pl(oe.type)&&B.push(He(oe));if(Array.isArray(H.captions))for(let oe of H.captions)qe(oe)&&_e(oe.id)&&P.set(oe.id,{id:oe.id,text:typeof oe.text=="string"?oe.text:"",visible:oe.visible===!0});if(Array.isArray(H.queue))for(let oe of H.queue)!qe(oe)||!_e(oe.sequenceId)||!_e(oe.invocationId)||d.has(oe.sequenceId)&&h.push({sequenceId:oe.sequenceId,options:{invocationId:oe.invocationId,idempotencyKey:_e(oe.idempotencyKey)?oe.idempotencyKey:oe.invocationId,bindings:qe(oe.bindings)?He(oe.bindings):{}}});if(R=null,qe(z)&&_e(z.sequenceId)){let oe=d.get(z.sequenceId),Pe=typeof z.compiledReducedMotion=="boolean"?z.compiledReducedMotion:n,Ie=ll.includes(z.phase)?z.phase:"playing";if(Ie==="skipped"||Ie==="completed"||Ie==="interrupted"||Ie==="failed"){let we=typeof z.startedAtFrame=="number"?z.startedAtFrame:t,Oe=L(oe,{invocationId:String(z.invocationId),idempotencyKey:String(z.idempotencyKey??z.invocationId),bindings:qe(H.bindings)?He(H.bindings):{}},_e(z.selectedFallbackId)?z.selectedFallbackId:null,new Set(Ie==="skipped"?oe.tracks.map(V=>V.id):[]),we,Pe);Oe.phase=Ie,Oe.startedAtFrame=we;for(let V of Oe.steps.values())V.phase="skipped";Oe.nextAvailable=!0,R=null,W.set(Oe.idempotencyKey,Oe.invocationId)}else{let we=new Set,Oe=_e(z.selectedFallbackId)?z.selectedFallbackId:null;if(Oe){let U=(oe.fallbacks??[]).find(Z=>Z.id===Oe);for(let Z of U?.omitTrackIds??[])we.add(Z)}let V=L(oe,{invocationId:String(z.invocationId),idempotencyKey:String(z.idempotencyKey??z.invocationId),bindings:qe(H.bindings)?He(H.bindings):{}},Oe,we,typeof z.startedAtFrame=="number"?z.startedAtFrame:t,Pe);V.phase=k?"paused":"playing",V.startedAtFrame=typeof z.startedAtFrame=="number"?z.startedAtFrame:t;let J=new Set(Array.isArray(z.completedStepIds)?z.completedStepIds.filter(U=>typeof U=="string"):[]),re=new Set(Array.isArray(z.activeStepIds)?z.activeStepIds.filter(U=>typeof U=="string"):[]);for(let U of V.steps.values())J.has(U.resolved.id)?U.phase="completed":re.has(U.resolved.id)||U.resolved.startFrame<=l?U.resolved.endFrame<=l?U.phase="completed":U.phase="active":U.phase="pending";R=V,W.set(V.idempotencyKey,V.invocationId),y(V)}}return f.setReducedMotion(n),{ok:!0,snapshot:G()}}catch(oe){return D([ae("restore-failed",oe instanceof Error?oe.message:String(oe))])}},inspect(){T();let b=R?d.get(R.sequenceId):void 0;return{frame:l,paused:k,reducedMotion:n,reducedSensory:r,active:R?u(R):null,queue:h.map(I=>({sequenceId:I.sequenceId,invocationId:I.options.invocationId,idempotencyKey:I.options.idempotencyKey??I.options.invocationId,phase:"requested",playhead:0,startedAtFrame:l,completedStepIds:[],activeStepIds:[],selectedFallbackId:null,compiledReducedMotion:n})),captions:[...P.values()].sort((I,D)=>I.id<D.id?-1:1),cueIntent:b?Y(b,R?.selectedFallbackId??void 0):[]}},inspectCueIntent(b,I){T();let D=d.get(b);return D?Y(D,I?.fallbackId):[]},get(b){T();let I=d.get(b);return I?He(I):void 0},destroy(){E||(R&&w(R)&&x(R,!0),E=!0,R=null,h.length=0,P.clear(),B.length=0)},setReducedMotion(b){T(),n=!!b,f.setReducedMotion(n)},get frame(){return l},get reducedMotion(){return n},get reducedSensory(){return r}}}var Mr=1,Ro=1,To="presentation.binding.state.applied",Lr="presentation.binding.state.rejected",Vr="presentation.binding.diagnostic.lifecycle",hl=[To,Lr,Vr],bl=["visual-layer","presence","prop","semantic-region","hotspot","sequence","asset"],vl=["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"],_h=new Set(bl),Oh=new Set(hl),Dh=new Set(vl),Nh="Presentation binding runtime has been destroyed",ba=/^[A-Za-z_][A-Za-z0-9_]*(\.[A-Za-z_][A-Za-z0-9_]*)*$/,Mh=new Set(["show","hide","replace"]),Lh=new Set(["id","schemaVersion","bindings","defaults","resources"]),Vh=new Set(["id","priority","when","targets"]),Bh=new Set(["layers","versions","regions","sequences","hotspots","entities","props","assets"]),Fh=new Set(["labels","reducedSensory","reducedMotion"]);function te(e,t,n){return n?{code:e,detail:t,path:n}:{code:e,detail:t}}function st(e){return!!e&&typeof e=="object"&&!Array.isArray(e)}function Ne(e){return typeof e=="string"&&e.length>0}function Ke(e){return JSON.parse(JSON.stringify(e))}function Po(e,t,n){if(typeof e=="function"){n.push(te("callbacks-forbidden","authored bindings must not contain callbacks",t));return}if(Array.isArray(e)){e.forEach((r,i)=>Po(r,`${t}[${i}]`,n));return}if(st(e))for(let[r,i]of Object.entries(e))Po(i,t?`${t}.${r}`:r,n)}function ze(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 ml(e){return e===null||typeof e=="string"||typeof e=="number"&&Number.isFinite(e)||typeof e=="boolean"}function ga(){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 ha(e){if(!e.ok)throw new Error(e.errors.map(t=>t.detail).join("; "));return e.contract}function $h(e){return typeof e=="string"&&Oh.has(e)}function Hh(e){return typeof e=="string"&&Dh.has(e)}function qh(){return[ha(fe(To,ga())),ha(fe(Lr,ga())),ha(et(Vr,ga()))]}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 Kh(e){if(e==null)return"missing";if(!st(e))return"invalid";let t=[];if(Po(e,"",t),t.length>0)return"invalid";try{return Ke(e)}catch{return"invalid"}}function Gh(e,t){if(!ba.test(t))return{found:!1,value:void 0};let n=e;for(let r of t.split(".")){if(!st(n)||!Object.prototype.hasOwnProperty.call(n,r))return{found:!1,value:void 0};n=n[r]}return{found:!0,value:n}}function Wh(e,t){if(!Object.prototype.hasOwnProperty.call(e,t))return;let n=e[t];return typeof n=="function"?n:void 0}function Co(e,t,n){if("all"in e){for(let i of e.all){let o=Co(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=Co(o,t,n);if(s.ok)return s;i=s}return i}if("not"in e){let i=Co(e.not,t,n);return{ok:!i.ok,detail:i.ok?"negation failed":void 0}}if("selector"in e){let i=Wh(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=Gh(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 Ao(e,t,n){if(!st(e)){n.push(te("invalid-predicate","predicate must be an object",t));return}if("all"in e||"any"in e||"not"in e){if("all"in e){if(ze(e,new Set(["all"]),t,n),!Array.isArray(e.all)||e.all.length===0){n.push(te("invalid-predicate","all requires a non-empty array",`${t}.all`));return}return{all:e.all.map((a,d)=>Ao(a,`${t}.all[${d}]`,n)).filter(a=>!!a)}}if("any"in e){if(ze(e,new Set(["any"]),t,n),!Array.isArray(e.any)||e.any.length===0){n.push(te("invalid-predicate","any requires a non-empty array",`${t}.any`));return}return{any:e.any.map((a,d)=>Ao(a,`${t}.any[${d}]`,n)).filter(a=>!!a)}}ze(e,new Set(["not"]),t,n);let o=Ao(e.not,`${t}.not`,n);return o?{not:o}:void 0}if("selector"in e){if(ze(e,new Set(["selector"]),t,n),!Ne(e.selector)){n.push(te("invalid-predicate","selector is required",`${t}.selector`));return}return{selector:e.selector}}if(ze(e,new Set(["path","eq","neq","present"]),t,n),(!Ne(e.path)||!ba.test(e.path))&&n.push(te("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(te("invalid-predicate","predicate needs exactly one of eq, neq, or present",t));return}if(!(!Ne(e.path)||!ba.test(e.path))){if(e.present!==void 0){if(typeof e.present!="boolean"){n.push(te("invalid-predicate","present must be a boolean",`${t}.present`));return}return{path:e.path,present:e.present}}if(e.neq!==void 0){if(!ml(e.neq)){n.push(te("invalid-predicate","neq must be a JSON primitive",`${t}.neq`));return}return{path:e.path,neq:e.neq}}if(!ml(e.eq)){n.push(te("invalid-predicate","eq must be a JSON primitive",`${t}.eq`));return}return{path:e.path,eq:e.eq}}}function jh(e,t,n){if(e===void 0)return;if(!st(e)){n.push(te("impossible-target","region state must be an object",t));return}ze(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(te("impossible-target",`${i} must be a boolean`,`${t}.${i}`));continue}r[i]=o}}return r}function va(e,t,n,r){if(!st(e)){n.push(te("impossible-target","target must be an object",t));return}if(!_h.has(String(e.kind))){n.push(te("impossible-target",`unsupported target kind "${String(e.kind)}"`,`${t}.kind`));return}let i=e.kind;if(i==="visual-layer"){if(ze(e,new Set(["kind","layerId","version","transition"]),t,n),!Ne(e.layerId)){n.push(te("impossible-target","layerId is required",`${t}.layerId`));return}if(!Ne(e.version)){n.push(te("impossible-target","version is required",`${t}.version`));return}e.transition!==void 0&&!Mh.has(String(e.transition))&&n.push(te("impossible-target","transition must be show, hide, or replace",`${t}.transition`)),r?.layers&&!r.layers.includes(e.layerId)&&n.push(te("unknown-resource",`unknown layer "${e.layerId}"`,`${t}.layerId`));let o=r?.versions?.[e.layerId];o&&!o.includes(e.version)&&n.push(te("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(ze(e,new Set(["kind","entityId","present","regionId"]),t,n),!Ne(e.entityId)){n.push(te("impossible-target","entityId is required",`${t}.entityId`));return}if(typeof e.present!="boolean"){n.push(te("impossible-target","present must be a boolean",`${t}.present`));return}r?.entities&&!r.entities.includes(e.entityId)&&n.push(te("unknown-resource",`unknown entity "${e.entityId}"`,`${t}.entityId`)),e.regionId!==void 0&&!Ne(e.regionId)&&n.push(te("impossible-target","regionId must be a string",`${t}.regionId`));let o={kind:"presence",entityId:e.entityId,present:e.present};return Ne(e.regionId)&&(o.regionId=e.regionId),o}if(i==="prop"){if(ze(e,new Set(["kind","propId","visible","layerId"]),t,n),!Ne(e.propId)){n.push(te("impossible-target","propId is required",`${t}.propId`));return}if(typeof e.visible!="boolean"){n.push(te("impossible-target","visible must be a boolean",`${t}.visible`));return}r?.props&&!r.props.includes(e.propId)&&n.push(te("unknown-resource",`unknown prop "${e.propId}"`,`${t}.propId`));let o={kind:"prop",propId:e.propId,visible:e.visible};return Ne(e.layerId)&&(o.layerId=e.layerId),o}if(i==="semantic-region"){if(ze(e,new Set(["kind","regionId","state","hitTestEnabled"]),t,n),!Ne(e.regionId)){n.push(te("impossible-target","regionId is required",`${t}.regionId`));return}r?.regions&&!r.regions.includes(e.regionId)&&n.push(te("unknown-resource",`unknown region "${e.regionId}"`,`${t}.regionId`)),e.hitTestEnabled!==void 0&&typeof e.hitTestEnabled!="boolean"&&n.push(te("impossible-target","hitTestEnabled must be a boolean",`${t}.hitTestEnabled`));let o=jh(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(ze(e,new Set(["kind","hotspotId","enabled","regionId"]),t,n),!Ne(e.hotspotId)){n.push(te("impossible-target","hotspotId is required",`${t}.hotspotId`));return}if(typeof e.enabled!="boolean"){n.push(te("impossible-target","enabled must be a boolean",`${t}.enabled`));return}r?.hotspots&&!r.hotspots.includes(e.hotspotId)&&n.push(te("unknown-resource",`unknown hotspot "${e.hotspotId}"`,`${t}.hotspotId`));let o={kind:"hotspot",hotspotId:e.hotspotId,enabled:e.enabled};return Ne(e.regionId)&&(o.regionId=e.regionId),o}if(i==="sequence"){if(ze(e,new Set(["kind","sequenceId","play"]),t,n),!Ne(e.sequenceId)){n.push(te("impossible-target","sequenceId is required",`${t}.sequenceId`));return}e.play!==void 0&&typeof e.play!="boolean"&&n.push(te("impossible-target","play must be a boolean",`${t}.play`)),r?.sequences&&!r.sequences.includes(e.sequenceId)&&n.push(te("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(ze(e,new Set(["kind","bindingId","assetId"]),t,n),!Ne(e.bindingId)){n.push(te("impossible-target","bindingId is required",`${t}.bindingId`));return}if(!Ne(e.assetId)){n.push(te("impossible-target","assetId is required",`${t}.assetId`));return}return r?.assets&&!r.assets.includes(e.assetId)&&n.push(te("unknown-resource",`unknown asset "${e.assetId}"`,`${t}.assetId`)),{kind:"asset",bindingId:e.bindingId,assetId:e.assetId}}function Uh(e,t,n){if(e===void 0)return;if(!st(e)){n.push(te("invalid-manifest","resources must be an object",t));return}ze(e,Bh,t,n);let r={},i=(E,R)=>{if(E!==void 0){if(!Array.isArray(E)||E.some(O=>!Ne(O))){n.push(te("invalid-manifest",`${R} must be a string array`,`${t}.${R}`));return}return E.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 f=i(e.entities,"entities");f&&(r.entities=f);let l=i(e.props,"props");l&&(r.props=l);let k=i(e.assets,"assets");if(k&&(r.assets=k),e.versions!==void 0)if(!st(e.versions))n.push(te("invalid-manifest","versions must be an object",`${t}.versions`));else{let E={};for(let[R,O]of Object.entries(e.versions)){if(!Array.isArray(O)||O.some(h=>!Ne(h))){n.push(te("invalid-manifest",`versions.${R} must be a string array`,`${t}.versions.${R}`));continue}E[R]=O.slice()}r.versions=E}return r}function wo(e){let t=[];if(Po(e,"",t),!st(e))return{ok:!1,errors:[te("invalid-manifest","bindings manifest must be a JSON object")]};ze(e,Lh,"",t),Ne(e.id)||t.push(te("invalid-id","id is required","id")),e.schemaVersion!==Ro&&t.push(te("invalid-version",`schemaVersion must be ${Ro}`,"schemaVersion")),Array.isArray(e.bindings)||t.push(te("invalid-manifest","bindings must be an array","bindings")),(!Array.isArray(e.defaults)||e.defaults.length===0)&&t.push(te("uncovered-default","defaults must cover required presentation targets","defaults"));let n=Uh(e.resources,"resources",t),r=new Set,i=[];Array.isArray(e.bindings)&&e.bindings.forEach((f,l)=>{let k=`bindings[${l}]`;if(!st(f)){t.push(te("invalid-manifest","binding must be an object",k));return}if(ze(f,Vh,k,t),!Ne(f.id)){t.push(te("invalid-id","binding id is required",`${k}.id`));return}r.has(f.id)&&t.push(te("duplicate-id",`duplicate binding id "${f.id}"`,`${k}.id`)),r.add(f.id),(typeof f.priority!="number"||!Number.isFinite(f.priority))&&t.push(te("invalid-manifest","priority must be a finite number",`${k}.priority`));let E=Ao(f.when,`${k}.when`,t);if(!Array.isArray(f.targets)||f.targets.length===0){t.push(te("impossible-target","binding targets are required",`${k}.targets`));return}let R=f.targets.map((O,h)=>va(O,`${k}.targets[${h}]`,t,n)).filter(O=>!!O);!E||typeof f.priority!="number"||!Number.isFinite(f.priority)||i.push({id:f.id,priority:f.priority,when:E,targets:R})});let o=[],s=new Set;Array.isArray(e.defaults)&&e.defaults.forEach((f,l)=>{let k=va(f,`defaults[${l}]`,t,n);if(!k)return;let E=$t(k);s.has(E)&&t.push(te("duplicate-priority",`duplicate default target "${E}"`,`defaults[${l}]`)),s.add(E),o.push(k)});let a=new Map,d=new Set;for(let f of i){let l=new Set;for(let k of f.targets){let E=$t(k);d.add(E),l.has(E)&&t.push(te("duplicate-priority",`binding "${f.id}" repeats target "${E}"`,`bindings.${f.id}`)),l.add(E);let R=a.get(E);R||(R=new Map,a.set(E,R));let O=R.get(f.priority);O?t.push(te("duplicate-priority",`bindings "${O}" and "${f.id}" share priority ${f.priority} on "${E}"`,`bindings.${f.id}`)):R.set(f.priority,f.id)}}for(let f of d)s.has(f)||t.push(te("uncovered-default",`required target "${f}" has no default`,"defaults"));return t.length>0?{ok:!1,errors:t}:{ok:!0,manifest:Ke({id:String(e.id),schemaVersion:Ro,bindings:i,defaults:o,...n?{resources:n}:{}})}}function Sl(e){return{considered:[],winners:{},rejected:[],fallbacks:[],fallbackReason:e}}function yl(e,t){let n=Sl(t==="uncovered-default"?null:t),r=[],i={};for(let o of e.defaults){let s=$t(o);r.push(Ke(o)),i[s]={bindingId:null,target:Ke(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 Sa(e,t,n={}){let r=Kh(t);if(r==="missing")return yl(e,"missing-state");if(r==="invalid")return yl(e,"invalid-projection");let i=Sl(null),o=[];for(let l of e.bindings){let k=Co(l.when,r,n);if(i.considered.push({bindingId:l.id,predicateResult:k.ok,...k.detail?{detail:k.detail}:{}}),k.ok)o.push(l);else for(let E of l.targets)i.rejected.push({bindingId:l.id,targetKey:$t(E),reason:"predicate-false"})}o.sort((l,k)=>k.priority-l.priority||(l.id<k.id?-1:l.id>k.id?1:0));let s=new Map;for(let l of o)for(let k of l.targets){let E=$t(k),R=s.get(E);if(!R){s.set(E,{bindingId:l.id,priority:l.priority,target:Ke(k)});continue}l.priority<R.priority&&i.rejected.push({bindingId:l.id,targetKey:E,reason:"lower-priority"})}for(let l of e.defaults){let k=$t(l);s.has(k)||(i.fallbacks.push({targetKey:k,reason:"uncovered-default"}),i.winners[k]={bindingId:null,target:Ke(l)})}for(let[l,k]of s)i.winners[l]={bindingId:k.bindingId,target:Ke(k.target)};let a=[...new Set([...s.values()].sort((l,k)=>k.priority-l.priority||(l.bindingId<k.bindingId?-1:1)).map(l=>l.bindingId))],d=[],f=new Set;for(let l of e.defaults){let k=$t(l),E=s.get(k),R=E?E.target:l;f.has(k)||(f.add(k),d.push(Ke(R)))}for(let[l,k]of s)f.has(l)||(f.add(l),d.push(Ke(k.target)));return{selectedBindingIds:a,targets:d,usedFallback:!1,fallbackReason:null,explanation:i}}function Jh(e,t){let n={},r={},i={},o={},s={},a={},d={},f=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 k=l.play!==!1,E=k&&f&&f.sequenceId===l.sequenceId&&(f.phase==="playing"||f.phase==="paused"||f.phase==="requested"||f.phase==="preloading"||f.phase==="ready");a[l.sequenceId]=E?"playing":"idle",k&&E&&(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?Ke(t.override):null,usedFallback:t.usedFallback,fallbackReason:t.fallbackReason,explanation:t.explanation?Ke(t.explanation):null}}function zh(e,t){return e?JSON.stringify(e)===JSON.stringify(t):!1}function gl(e,t){if(e===null)return null;if(e===void 0)return;if(!st(e)){t.push(te("invalid-snapshot","override must be an object"));return}ze(e,Fh,"override",t);let n={};if(e.reducedSensory!==void 0&&(typeof e.reducedSensory!="boolean"?t.push(te("invalid-snapshot","reducedSensory must be a boolean","override.reducedSensory")):n.reducedSensory=e.reducedSensory),e.reducedMotion!==void 0&&(typeof e.reducedMotion!="boolean"?t.push(te("invalid-snapshot","reducedMotion must be a boolean","override.reducedMotion")):n.reducedMotion=e.reducedMotion),e.labels!==void 0)if(!st(e.labels))t.push(te("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(st(o)&&Ne(o.name)&&Ne(o.role)){r[i]={name:o.name,role:o.role};continue}t.push(te("invalid-snapshot",`label "${i}" must be a string or { name, role }`,`override.labels.${i}`))}n.labels=r}return n}function Ea(e){let t=wo(e.manifest);if(!t.ok)throw new Error(`createPresentationBindingRuntime: ${t.errors.map(w=>w.detail).join("; ")}`);let n=t.manifest,r=e.visual,i=e.semantic,o=e.sequences,s=e.selectors??{},a=!1,d=null,f=0,l=[],k=new Map,E=!1,R=null,O=null,h=null,P=!1,B=new Map,W=[],T=()=>{if(a)throw new Error(Nh)};function M(w,g){W.push({type:w,atRevision:d,manifestId:n.id,selectedBindingIds:l.slice(),reason:typeof g.reason=="string"?g.reason:void 0});let x=w.includes(".diagnostic.")?"diagnostic":"state",L={type:w,kind:x,payload:Ke(g)};e.onEvent?.(L),e.router?.publish(L)}function A(){return Jh([...k.values()],{revision:d,selectedBindingIds:l,override:h,usedFallback:E,fallbackReason:R,explanation:O,sequences:o})}function u(w){let g=[];for(let x of w)x.kind==="visual-layer"&&r&&(r.inspect().find($=>$.id===x.layerId)||g.push(te("unknown-resource",`unknown live layer "${x.layerId}"`,x.layerId))),x.kind==="semantic-region"&&i&&!i.get(x.regionId)&&g.push(te("unknown-resource",`unknown live region "${x.regionId}"`,x.regionId)),x.kind==="hotspot"&&x.regionId&&i&&!i.get(x.regionId)&&g.push(te("unknown-resource",`unknown live region "${x.regionId}"`,x.regionId)),x.kind==="presence"&&x.regionId&&i&&!i.get(x.regionId)&&g.push(te("unknown-resource",`unknown live region "${x.regionId}"`,x.regionId)),x.kind==="sequence"&&o&&!o.get(x.sequenceId)&&g.push(te("unknown-resource",`unknown live sequence "${x.sequenceId}"`,x.sequenceId));return g}function v(){if(!(!i||!h?.labels)){for(let[w,g]of Object.entries(h.labels))if(i.get(w))if(typeof g=="string"){let x=i.get(w)?.a11y;i.setRegionA11y(w,{name:g,role:x?.role??"region"})}else i.setRegionA11y(w,{name:g.name,role:g.role})}}function c(){return h?.reducedSensory===!0}function p(w){let g=o?.inspect().active;return!!(g&&g.sequenceId===w&&(g.phase==="playing"||g.phase==="paused"||g.phase==="requested"||g.phase==="preloading"||g.phase==="ready"))}function m(w,g){if(!o)return;let x=c(),L=w.play!==!1&&!x,$=p(w.sequenceId);if(L&&!$&&(!g||P!==x)){let ee=o.playSequence(w.sequenceId,{invocationId:`presentation-binding:${w.sequenceId}`,idempotencyKey:`presentation-binding:${w.sequenceId}`});if(!ee.ok&&ee.reason!=="duplicate")return te("unknown-resource",ee.detail,w.sequenceId)}!L&&$&&o.skip()}function S(){for(let w of k.values())w.kind==="sequence"&&m(w,!0);P=c()}function _(w){if(!i)return[];let g=new Map;for(let Y of w)Y.kind==="hotspot"&&Y.regionId&&g.set(Y.regionId,Y.enabled);for(let Y of w)Y.kind==="semantic-region"&&Y.hitTestEnabled!==void 0&&g.set(Y.regionId,Y.hitTestEnabled);if(g.size===0)return[];let x=new Map,L=!1;for(let[Y,G]of g){let y=i.get(Y);if(!y)continue;y.hitTest!=="pass-through"&&B.set(Y,y.hitTest);let b=B.get(Y)??"absorb",I=G?b:"pass-through";x.set(Y,I),y.hitTest!==I&&(L=!0)}if(!L)return[];let $=i.snapshot(),q={...$,regions:$.regions.map(Y=>{let G=x.get(Y.id);return G&&G!==Y.hitTest?{...Y,hitTest:G}:Y})},ee=i.restore(q);return ee.ok?[]:ee.errors.map(Y=>te("unknown-resource",Y))}function C(w){let g=r?.snapshot(),x=i?.snapshot(),L=o?.snapshot(),$=new Map(B),q=G=>{B.clear();for(let[y,b]of $)B.set(y,b);return o&&L&&o.restore(L),r&&g&&r.restore(g),i&&x&&i.restore(x),G},ee=new Map;for(let G of w)ee.set($t(G),Ke(G));let Y=_(w);if(Y.length>0)return q(Y);for(let[G,y]of ee){let b=k.get(G),I=zh(b,y);if(y.kind==="visual-layer"&&r&&!I){let D=y.transition??"replace",H=r.play({name:`presentation-binding:${y.layerId}:${D}`,idempotencyKey:`presentation-binding:${y.layerId}:${y.version}:${D}`,layerId:y.layerId,kind:D,...D==="hide"?{}:{toVersion:y.version},durationFrames:0,onDuplicate:"ignore"});if(!H.ok&&H.reason!=="duplicate")return q([te("unknown-resource",H.detail,y.layerId)])}if(y.kind==="semantic-region"&&i){let D=y.state??{},H=i.get(y.regionId)?.state,ne={hover:D.hover??H?.hover??!1,focus:D.focus??H?.focus??!1,selected:D.selected??H?.selected??!1};(!H||H.hover!==ne.hover||H.focus!==ne.focus||H.selected!==ne.selected)&&i.setRegionState(y.regionId,ne)}if(y.kind==="hotspot"&&y.regionId&&i){let D=i.get(y.regionId)?.state;(!D||D.selected!==y.enabled)&&i.setRegionState(y.regionId,{selected:y.enabled})}if(y.kind==="presence"&&y.regionId&&i){let D=i.get(y.regionId)?.state;(!D||D.selected!==y.present)&&i.setRegionState(y.regionId,{selected:y.present})}if(y.kind==="sequence"){let D=m(y,I);if(D)return q([D])}}return k=ee,P=c(),v(),[]}function N(w,g){let x=u(w.targets);if(x.length>0)return M(Lr,{manifestId:n.id,revision:String(g),reason:x[0]?.code,selectedBindingIds:l}),M(Vr,{manifestId:n.id,revision:String(g),reason:x[0]?.code}),{ok:!1,errors:x,inspect:A()};let L=C(w.targets);return L.length>0?(M(Lr,{manifestId:n.id,revision:String(g),reason:L[0]?.code,selectedBindingIds:l}),M(Vr,{manifestId:n.id,revision:String(g),reason:L[0]?.code}),{ok:!1,errors:L,inspect:A()}):(d=g,l=w.selectedBindingIds.slice(),E=w.usedFallback,R=w.fallbackReason,O=Ke(w.explanation),M(To,{manifestId:n.id,revision:String(g),selectedBindingIds:l,usedFallback:E,reason:R??void 0}),{ok:!0,revision:g,selectedBindingIds:l.slice(),usedFallback:E,fallbackReason:R,explanation:Ke(w.explanation),inspect:A()})}function K(){return{schemaVersion:Mr,manifestId:n.id,projectionRevision:d,selectedBindingIds:l.slice(),targets:[...k.values()].map(w=>Ke(w)),usedFallback:E,fallbackReason:R,override:h?Ke(h):null}}return{get manifest(){return Ke(n)},apply(w,g){T();let x=g?.revision??f+1;typeof x=="number"&&(f=Math.max(f,x));let L=Sa(n,w,s);return N(L,x)},setOverride(w){T();let g=c();if(w===null)h=null;else{let x=[],L=gl(w,x);if(x.length>0||L===void 0)throw new Error(`createPresentationBindingRuntime: ${x.map($=>$.detail).join("; ")||"invalid override"}`);h=L?Ke(L):null,v()}c()!==g&&S()},evaluate(w){return T(),Sa(n,w,s)},inspect(){return T(),A()},snapshot(){return T(),K()},restore(w){T();let g=I=>({ok:!1,errors:I}),x=w;if(typeof w=="string")try{x=JSON.parse(w)}catch{return g([te("invalid-snapshot","snapshot JSON is invalid")])}if(!st(x))return g([te("invalid-snapshot","snapshot must be a JSON object")]);if(x.schemaVersion!==Mr)return g([te("invalid-schema",`unsupported snapshot schemaVersion ${String(x.schemaVersion)}`,"schemaVersion")]);if(x.manifestId!==n.id)return g([te("invalid-snapshot",`snapshot manifestId "${String(x.manifestId)}" does not match "${n.id}"`,"manifestId")]);if(!Array.isArray(x.selectedBindingIds))return g([te("invalid-snapshot","selectedBindingIds must be an array","selectedBindingIds")]);let L=new Set(n.bindings.map(I=>I.id));for(let I of x.selectedBindingIds)if(!Ne(I)||!L.has(I))return g([te("unknown-resource",`unknown selected binding "${String(I)}"`,"selectedBindingIds")]);if(!Array.isArray(x.targets))return g([te("invalid-snapshot","targets must be an array","targets")]);let $=[],q=x.targets.map((I,D)=>va(I,`targets[${D}]`,$,n.resources)).filter(I=>!!I);if($.length>0)return g($);let ee=[],Y=gl(x.override??null,ee);if(ee.length>0)return g(ee);let G=u(q);if(G.length>0)return g(G);let y=typeof x.projectionRevision=="string"||typeof x.projectionRevision=="number"?x.projectionRevision:x.projectionRevision===null?null:void 0;if(y===void 0)return g([te("invalid-snapshot","projectionRevision must be a string, number, or null","projectionRevision")]);let b=C(q);return b.length>0?g(b):(d=y,typeof y=="number"&&(f=Math.max(f,y)),l=x.selectedBindingIds.filter(I=>Ne(I)),E=x.usedFallback===!0,R=x.fallbackReason==="missing-state"||x.fallbackReason==="invalid-projection"?x.fallbackReason:null,h=Y??null,v(),S(),{ok:!0,snapshot:K()})},destroy(){a||(a=!0,k.clear(),W.length=0)}}}var Fr=1,Ht=1,$r="content.revision.state.discovered",xo="content.revision.state.staging",_o="content.revision.state.validated",Oo="content.revision.state.rejected",Do="content.revision.state.activated",Un="content.revision.state.rolled-back",Jn="content.revision.state.superseded",Hr="content.revision.diagnostic.lifecycle",Yh=[$r,xo,_o,Oo,Do,Un,Jn,Hr],El=["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"],Xh=new Set(El),Qh="Content revision activator has been destroyed",Zh=/^[0-9a-f]+$/i;function ce(e,t,n){return n?{code:e,detail:t,path:n}:{code:e,detail:t}}function Tt(e){return e!==null&&typeof e=="object"&&!Array.isArray(e)}function Te(e){return typeof e=="string"&&e.length>0}function Me(e){try{return JSON.parse(JSON.stringify(e))}catch{return e}}function Pt(e,t){return`${e}@${t}`}function eb(e,t){return e.localeCompare(t,"en",{numeric:!0,sensitivity:"base"})>0}function Br(e,t){return e===t?!0:!e||!t?!1:e.bundleId===t.bundleId&&e.adapterId===t.adapterId}function Qt(){return{version:1,fields:{contentId:{type:"string"},revision:{type:"string"},adapterId:{type:"string"},bundleId:{type:"string",optional:!0},reasonCode:{type:"string",optional:!0}}}}function Zt(e){if(!e.ok)throw new Error(e.errors.map(t=>t.detail).join("; "));return e.contract}function tb(){return[Zt(fe($r,Qt())),Zt(fe(xo,Qt())),Zt(fe(_o,Qt())),Zt(fe(Oo,Qt())),Zt(fe(Do,Qt())),Zt(fe(Un,Qt())),Zt(fe(Jn,Qt())),Zt(et(Hr,Qt()))]}function Ia(e){return typeof e=="string"&&e.length===64&&Zh.test(e)}function nb(e,t){return e===void 0?{ok:!0,fallback:void 0}:Tt(e)?!Te(e.id)||!Pn(e.kind)||!Te(e.url)||!Ia(e.hash)||e.alg!=="sha256"?{ok:!1,errors:[ce("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:[ce("invalid-schema","fallback must be an object",t)]}}function No(e){if(!Tt(e))return{ok:!1,errors:[ce("invalid-manifest","catalog must be an object")]};let t=[];Te(e.contentId)||t.push(ce("invalid-schema","contentId is required","contentId")),(!Te(e.revision)||e.revision==="latest")&&t.push(ce("unknown-revision",'revision must be an exact id, not "latest"',"revision")),e.manifestVersion!==Ht&&t.push(ce("invalid-version",`manifestVersion must be ${Ht}`,"manifestVersion")),Te(e.publisher)||t.push(ce("invalid-schema","publisher is required","publisher")),Te(e.source)||t.push(ce("invalid-schema","source is required","source")),Te(e.adapterId)||t.push(ce("invalid-schema","adapterId is required","adapterId")),(!Array.isArray(e.assets)||e.assets.length===0)&&t.push(ce("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(!Tt(o)){t.push(ce("invalid-schema","asset must be an object",a));return}if(!Te(o.id)||!Pn(o.kind)||!Te(o.url)){t.push(ce("invalid-schema","asset needs id, kind, and url",a));return}if(!Ia(o.hash)||o.alg!=="sha256"){t.push(ce("hash-mismatch","asset hash must be sha256 hex",`${a}.hash`));return}if(r.has(o.id)){t.push(ce("invalid-schema",`duplicate asset id "${o.id}"`,`${a}.id`));return}r.add(o.id);let d=nb(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(!Tt(e.signature)||!Te(e.signature.id)||!Te(e.signature.alg))return{ok:!1,errors:[ce("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:Ht,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 rb(e,t){return{contentId:e.body.id,revision:e.body.cartVersion,manifestVersion:Ht,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:Vs(e),capabilities:e.body.capabilities,signature:{id:e.signature.keyId,alg:e.signature.alg}}}function ib(e,t){return`https://registry.test/worlds/${e}/revisions/${t??"current"}.json`}function ob(e){let t=e.id??"static",n=new Map,r=new Map;for(let o of e.revisions){let s=No({...o,adapterId:o.adapterId||t}),a=Te(o.contentId)?o.contentId:"",d=Te(o.revision)?o.revision:"";if(!(!a||!d))if(s.ok){let f={...s.catalog,adapterId:t,source:s.catalog.source||"static"};n.set(Pt(a,d),{ok:!0,catalog:f});let l=r.get(a);(!l||eb(f.revision,l.revision))&&r.set(a,f)}else n.set(Pt(a,d),s)}let i=e.fetchBytes??(async o=>e.bytesByUrl[o]);return{id:t,hasRevision(o,s){return!!n.get(Pt(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(Pt(o,s));return a?a.ok?{ok:!0,catalog:Me(a.catalog)}:a:{ok:!1,errors:[ce("unknown-revision",`static adapter has no ${o}@${s}`)]}},fetchBytes:i}}function sb(e){let t=e.id??"remote",n=e.catalogUrl??ib,r=new Set((e.known??[]).map(s=>Pt(s.contentId,s.revision))),i=e.fetchBytes??(async s=>e.bytesByUrl?.[s]);async function o(s,a,d){let f=a!=="current",l;try{l=await e.fetch(n(s,f?a:void 0),d)}catch(h){return{ok:!1,errors:[ce("staging-failed",h instanceof Error?h.message:String(h))]}}let k=l;if(Tt(l)&&Tt(l.manifest)){if(Te(l.world)&&l.world!==s)return{ok:!1,errors:[ce("invalid-manifest",`remote world "${String(l.world)}" does not match "${s}"`,"world")]};if(f&&Te(l.revision)&&l.revision!==a)return{ok:!1,errors:[ce("unknown-revision",`remote revision "${String(l.revision)}" does not match "${a}"`,"revision")]};k=l.manifest}let E=await yr(k,e.keys,f?a:void 0);if(!E.ok)return{ok:!1,errors:E.errors.map(h=>ce(h.code,h.detail,h.path))};if(E.manifest.body.id!==s)return{ok:!1,errors:[ce("invalid-manifest",`signed id "${E.manifest.body.id}" does not match "${s}"`,"body.id")]};let R=rb(E.manifest,t);return r.add(Pt(R.contentId,R.revision)),No(R)}return{id:t,hasRevision(s,a){return r.has(Pt(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 ab(e,t){return Tt(e)?!Te(e.id)||!Pn(e.kind)||!Te(e.ref)||!Ia(e.hash)||!Te(e.url)||typeof e.optional!="boolean"||typeof e.usedFallback!="boolean"?{ok:!1,errors:[ce("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:[ce("invalid-snapshot","resource must be an object",t)]}}function ka(e,t){if(e===null)return{ok:!0,bundle:null};if(!Tt(e))return{ok:!1,errors:[ce("invalid-snapshot","bundle must be an object or null",t)]};if(!Te(e.contentId)||!Te(e.revision)||e.revision==="latest")return{ok:!1,errors:[ce("unknown-revision","snapshot bundle must record an exact revision",`${t}.revision`)]};if(e.manifestVersion!==Ht)return{ok:!1,errors:[ce("invalid-version",`bundle manifestVersion must be ${Ht}`,`${t}.manifestVersion`)]};if(!Te(e.publisher)||!Te(e.source)||!Te(e.adapterId)||!Te(e.bundleId))return{ok:!1,errors:[ce("invalid-snapshot","bundle identity is incomplete",t)]};if(!Tt(e.resources))return{ok:!1,errors:[ce("invalid-snapshot","bundle resources must be an object",`${t}.resources`)]};let n={};for(let[i,o]of Object.entries(e.resources)){let s=ab(o,`${t}.resources.${i}`);if(!s.ok)return s;if(s.resource.id!==i)return{ok:!1,errors:[ce("invalid-snapshot",`resource key "${i}" does not match id`,`${t}.resources.${i}`)]};n[i]=s.resource}let r;if(e.signature!==void 0){if(!Tt(e.signature)||!Te(e.signature.id)||!Te(e.signature.alg))return{ok:!1,errors:[ce("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:Ht,publisher:e.publisher,source:e.source,adapterId:e.adapterId,signature:r,resources:n}}}function db(e){let t=e;if(typeof e=="string")try{t=JSON.parse(e)}catch{return{ok:!1,errors:[ce("invalid-snapshot","snapshot JSON is not parseable")]}}if(!Tt(t))return{ok:!1,errors:[ce("invalid-snapshot","snapshot must be an object")]};if(t.schemaVersion!==Fr)return{ok:!1,errors:[ce("invalid-version",`snapshot schema must be ${Fr}`,"schemaVersion")]};if(typeof t.pinned!="boolean")return{ok:!1,errors:[ce("invalid-snapshot","pinned must be a boolean","pinned")]};let n=ka(t.active,"active");if(!n.ok)return n;let r=ka(t.lastKnownGood,"lastKnownGood");if(!r.ok)return r;let i=ka(t.previous,"previous");return i.ok?{ok:!0,snapshot:{schemaVersion:Fr,pinned:t.pinned,active:n.bundle,lastKnownGood:r.bundle,previous:i.bundle}}:i}function cb(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 ub(e){let t=[...e.adapters],n=e.grants??Fn(),r=new Map,i=e.pin===!0,o=!1,s=null,a=null,d=null,f=null,l=null,k=[],E=0,R=null;function O(){if(o)throw new Error(Qh)}function h(c){return c?t.find(p=>p.id===c):t[0]}function P(c,p,m){return(m?t.filter(_=>_.id===m):t).some(_=>_.hasRevision(c,p))}function B(c,p){k.push(c);let m=c.includes(".diagnostic.")?"diagnostic":"state",S={type:c,kind:m,payload:Me(p)};e.onEvent?.(S),e.router?.publish(S)}function W(c,p){return l=c.map(m=>Me(m)),B(Oo,{...p,reasonCode:c[0]?.code}),B(Hr,{...p,reasonCode:c[0]?.code}),{ok:!1,errors:l}}function T(){return{destroyed:o,pinned:i,active:Me(s),lastKnownGood:Me(a),staging:f?Me(f):null,events:[...k],lastRejection:l?Me(l):null}}async function M(c,p,m){if(c.requestedGrants){for(let L of c.requestedGrants)if(!n.has(L))return{ok:!1,errors:[ce("capability-denied",`host did not grant "${L}"`,"requestedGrants")]}}if(c.capabilities){let L=e.hostCapabilities??{contractVersion:1,features:[],integrations:[],grants:n.list()},$=cr(c.capabilities,{...L,grants:n.list()});if(!$.ok)return{ok:!1,errors:$.errors.map(q=>ce(q.code==="missing-grant"||q.code==="capability-denied"||q.code==="ungranted-capability"?"capability-denied":"invalid-schema",q.detail,q.path))}}let S={},_=[];for(let L of c.assets)S[L.url]={url:L.url,hash:L.hash,alg:"sha256"},L.fallback&&(S[L.fallback.url]={url:L.fallback.url,hash:L.fallback.hash,alg:"sha256"}),_.push({id:L.id,ref:L.url,type:L.kind,integrity:`sha256-${L.hash}`,provenance:{contentId:c.contentId,revision:c.revision,publisher:c.publisher,adapterId:c.adapterId},fallback:L.fallback?{id:L.id,ref:L.fallback.url,type:L.fallback.kind,integrity:`sha256-${L.fallback.hash}`}:void 0});let C=ir({declared:S,fetchBytes:async L=>{if(m.aborted)return;let $=Object.values(S).find(G=>G.url===L);if(!$)return;let ee=r.get($.hash)??await p.fetchBytes(L,m);if(!ee||m.aborted)return;let Y=await mr(ee);if(Y!==$.hash)throw Ae({id:"",ref:L,code:"hash-mismatch",message:`hash mismatch for "${L}"`});return r.set(Y,ee),ee},hashBytes:mr}),N=on({resolver:C,emitEvents:!1,wallClockTimeout:!1});if(m.aborted)return N.dispose(),{ok:!1,errors:[ce("superseded","staging aborted")]};let K=()=>{N.abort(),N.dispose()};m.addEventListener("abort",K,{once:!0});let w;try{w=await N.preload(_)}finally{m.removeEventListener("abort",K),N.dispose()}if(m.aborted)return{ok:!1,errors:[ce("superseded","staging aborted")]};let g={},x=[];for(let L of c.assets){let $=w.items[L.id];if($?.state==="ready"){g[L.id]=cb(L,$.resource,$.resource.usedFallback===!0||!!$.failure);continue}if(L.optional)continue;let q=$?.state==="failed"?$.failure:w.failures.find(ee=>ee.id===L.id);x.push(ce(q?.code==="hash-mismatch"?"hash-mismatch":"asset-failed",q?.message??`required asset "${L.id}" failed`,L.id))}return x.length>0?{ok:!1,errors:x}:{ok:!0,bundle:{bundleId:Pt(c.contentId,c.revision),contentId:c.contentId,revision:c.revision,manifestVersion:Ht,publisher:c.publisher,source:c.source,adapterId:c.adapterId,signature:c.signature,resources:g}}}function A(c,p,m){return B(Hr,{...c,reasonCode:p}),{ok:!1,errors:[ce("stale-health-check",m)]}}async function u(c,p){let m=Me(c),S=s;s=m;let _=!0;try{_=e.healthCheck?await e.healthCheck(m):!0}catch(C){return Br(s,m)?(s=S,B(Un,{...p,revision:S?.revision??"",reasonCode:"activation-failed"}),W([ce("activation-failed",C instanceof Error?C.message:String(C))],p)):A(p,"stale-health-check","stale health check ignored; a newer revision is active")}return _?Br(s,m)?(d=S,a=Me(s),l=null,B(Do,p),{ok:!0,bundle:Me(s)}):A(p,"stale-health-check","stale health check ignored; a newer revision is active"):Br(s,m)?(s=S,B(Un,{...p,revision:S?.revision??"",reasonCode:"health-check-failed"}),W([ce("health-check-failed","post-activation health check failed")],p)):A(p,"stale-health-check","stale health check ignored; a newer revision is active")}let v={pin(c=!0){O(),i=c},unpin(){O(),i=!1},isPinned(){return O(),i},async discover(c,p){O();let m=h(p);if(!m)return;let S=await m.discover(c);return S&&B($r,{contentId:S.contentId,revision:S.revision,adapterId:S.adapterId,bundleId:Pt(S.contentId,S.revision)}),S?Me(S):void 0},async activate(c){O();let p=h(c.adapterId);if(!p)return W([ce("unknown-adapter",`unknown adapter "${String(c.adapterId)}"`)],{contentId:c.contentId,revision:c.revision??"",adapterId:c.adapterId??""});let m=c.revision;if(!m){let N=await p.discover(c.contentId);m=N?.revision,N&&B($r,{contentId:N.contentId,revision:N.revision,adapterId:N.adapterId,bundleId:Pt(N.contentId,N.revision)})}if(!Te(m)||m==="latest")return W([ce("unknown-revision","activation requires an exact revision")],{contentId:c.contentId,revision:String(m??""),adapterId:p.id});let S={contentId:c.contentId,revision:m,adapterId:p.id,bundleId:Pt(c.contentId,m)};if(s&&s.contentId===c.contentId&&s.revision===m&&s.adapterId===p.id)return{ok:!0,bundle:Me(s),idempotent:!0};if(i&&s)return W([ce("pinned","activator is pinned; live revision movement is frozen")],S);let _=++E;R?.abort();let C=new AbortController;R=C,f={contentId:c.contentId,revision:m,adapterId:p.id,bundleId:S.bundleId},B(xo,S);try{let N=await p.loadRevision(c.contentId,m,C.signal);if(_!==E||C.signal.aborted)return B(Jn,S),{ok:!1,errors:[ce("superseded",`revision ${m} was superseded`)]};if(!N.ok)return W(N.errors,S);let K=N.catalog,w=No(K);if(!w.ok)return W(w.errors,S);let g=await M(w.catalog,p,C.signal);return _!==E||C.signal.aborted?(B(Jn,S),{ok:!1,errors:[ce("superseded",`revision ${m} was superseded`)]}):g.ok?(B(_o,S),_!==E||C.signal.aborted?(B(Jn,S),{ok:!1,errors:[ce("superseded",`revision ${m} was superseded`)]}):await u(g.bundle,S)):W(g.errors,S)}finally{_===E&&(f=null,R===C&&(R=null))}},rollback(){O();let c=d??a;if(Br(s,c))return{ok:!0,bundle:Me(s),idempotent:!0};if(i)return{ok:!1,errors:[ce("pinned","activator is pinned; live revision movement is frozen")]};let p=s;return s=Me(c),a=Me(c),d=Me(c),B(Un,{contentId:s?.contentId??p?.contentId??"",revision:s?.revision??"",adapterId:s?.adapterId??p?.adapterId??"",bundleId:s?.bundleId,reasonCode:"rolled-back"}),{ok:!0,bundle:Me(s)}},inspect(){return O(),T()},activeBundle(){return O(),Me(s)},snapshot(){return O(),{schemaVersion:Fr,pinned:i,active:Me(s),lastKnownGood:Me(a),previous:Me(d)}},restore(c){O();let p=db(c);if(!p.ok)return p;let m=p.snapshot,S=[m.active,m.lastKnownGood,m.previous];for(let _ of S)if(_&&!P(_.contentId,_.revision,_.adapterId))return{ok:!1,errors:[ce("unknown-revision",`unknown revision ${_.contentId}@${_.revision}`,"revision")]};return i&&!Br(s,m.active)?{ok:!1,errors:[ce("pinned","activator is pinned; live revision movement is frozen")]}:(i=m.pinned,s=Me(m.active),a=Me(m.lastKnownGood),d=Me(m.previous),l=null,{ok:!0,snapshot:v.snapshot()})},provenance(){if(O(),!!s)return{source:s.source,publisher:s.publisher,version:s.revision,signature:s.signature}},destroy(){o=!0,R?.abort(),R=null,f=null}};return v}function lb(e){return typeof e=="string"&&Xh.has(e)}var Mo={width:320,height:180,deviceScaleFactor:1},pb="Browser harness has been destroyed";function fb(e){return typeof CSS<"u"&&typeof CSS.escape=="function"?CSS.escape(e):e.replace(/([\0-\x1f\x7f!"#$%&'()*+,./:;<=>?@[\\\]^`{|}~])/g,"\\$1")}function Ra(e){return{...e,visibleNormalizedRect:{...e.visibleNormalizedRect}}}function Ca(e){return e===void 0?void 0:JSON.parse(JSON.stringify(e))}function Aa(e,t,n){Object.defineProperty(e,"clientWidth",{value:t,configurable:!0}),Object.defineProperty(e,"clientHeight",{value:n,configurable:!0})}function Pa(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 kl(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 mb(e){return e.querySelector("[aria-live]")?.textContent??""}function Il(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 yb(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 Rl(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 Ta(e={}){let t=e.seed??`0x${"00".repeat(32)}`,n=Ca(e.geometry),r=e.semanticLayers,i=e.viewport?.width??Mo.width,o=e.viewport?.height??Mo.height,s=e.viewport?.deviceScaleFactor??Mo.deviceScaleFactor,a=e.reducedMotion===!0,d=e.inputModality??"pointer",f=e.origin??0,l=e.fit??"contain",k=Object.getOwnPropertyDescriptor(window,"devicePixelRatio"),E=Object.getOwnPropertyDescriptor(window,"innerWidth"),R=Object.getOwnPropertyDescriptor(window,"innerHeight"),O=Rl(a),h=()=>{Object.defineProperty(window,"devicePixelRatio",{value:s,configurable:!0}),Object.defineProperty(window,"innerWidth",{value:i,configurable:!0}),Object.defineProperty(window,"innerHeight",{value:o,configurable:!0})};h();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 B=[],W=[],T=!1,M=0,A=e.createId??(()=>`br-${++M}`),u=()=>Rs({contentWidth:e.contentWidth??i,contentHeight:e.contentHeight??o,viewportWidth:i,viewportHeight:o,mode:l,devicePixelRatio:s}),v=u(),c=()=>Math.max(1,Math.round(i*s)),p=()=>Math.max(1,Math.round(o*s)),m=G=>{n=Ca(G)},S=(G,y)=>{let b=n?.regions.find(D=>D.id===G);if(!b)return;let I=Ps(b,v);if(I)return y.style.position=y.style.position||"absolute",y.style.left=`${I.x}px`,y.style.top=`${I.y}px`,y.style.width=`${I.width}px`,y.style.height=`${I.height}px`,Pa(y,I.x,I.y,I.width,I.height),{...I}},_=()=>{v=u(),P.style.width=`${i}px`,P.style.height=`${o}px`,Aa(P,i,o),Pa(P,0,0,i,o),P.dataset.inputModality=d,P.dataset.reducedMotion=a?"true":"false",h()};_();let C=()=>({root:P,get layout(){return Ra(v)},get reducedMotion(){return a},get inputModality(){return d},placeRegion:S,setGeometry(G){m(G)}}),N=e.mount?.(C())??{},K=N.participants??[],w,g,x=()=>{};if(K.length>0){for(let G of K)G.container&&Aa(G.container,c(),p());w=ws({origin:f,width:c(),height:p(),createId:A,now:()=>f,participants:K.map(G=>({...G,seed:G.seed??t,width:G.width??c(),height:G.height??p()}))}),x=w.router.subscribe(["*.*","*.*.*","*.*.*.*","*.*.*.*.*",yt],G=>{W.push(G)}),N.compositor&&(g=ia({...N.compositor,group:w,width:i,height:o,dpr:s}))}let L=()=>({...C(),group:w,compositor:g,publish(G){if(!w)throw new Error("Browser harness: publish requires mounted carts");return w.publish(G)}}),$=()=>{if(_(),w){let G=c(),y=p();for(let b of K){b.container&&(Aa(b.container,G,y),b.container.style.width=`${i}px`,b.container.style.height=`${o}px`);try{let I=w.participant(b.id).cart.canvas;I&&(I.style.width=`${i}px`,I.style.height=`${o}px`,Pa(I,0,0,i,o))}catch{}}}},q=()=>{if(T)throw new Error(pb)};$(),N.ready?.(L());let ee=(G,y,b)=>{if(B.push({type:"click",x:G,y,...b?{selector:b}:{}}),b){let oe=P.querySelector(b);if(!(oe instanceof HTMLElement))throw new Error(`No element matches ${b}`);Il(oe,G,y);return}let I=n?new Set(n.regions.map(oe=>oe.id)):void 0,D=r?r.hitTest(an({x:G,y},v)):void 0,H=D&&(!I||I.has(D.id))?D:void 0,ne=H===void 0&&n!==void 0?lr({x:G,y},v,n,{space:"css"}):H?{id:H.id}:void 0,ie=(ne?P.querySelector(`#${fb(ne.id)}`):null)??yb(P,G,y);Il(ie,G,y)};return{root:P,get group(){return w},get compositor(){return g},get layout(){return Ra(v)},get events(){return W.slice()},get geometry(){return Ca(n)},goto(){q()},setGeometry(G){q(),m(G),N.relayout?.(L())},setViewport(G,y,b){q(),i=Math.max(1,G|0),o=Math.max(1,y|0),b!==void 0&&(s=b>0?b:1),B.push({type:"viewport",width:i,height:o,dpr:s}),g?g.resize(i,o,s):w&&w.resize(c(),p()),$(),N.relayout?.(L())},setReducedMotion(G){q(),a=G,O(),O=Rl(a),B.push({type:"reducedMotion",value:G}),$(),N.relayout?.(L())},setInputModality(G){q(),d=G,B.push({type:"inputModality",value:G}),$()},click(G,y){if(q(),typeof G=="string"){let b=P.querySelector(G);if(!(b instanceof HTMLElement))throw new Error(`No element matches ${G}`);let I=b.getBoundingClientRect();ee(I.left+I.width/2,I.top+I.height/2,G);return}if(y===void 0)throw new Error("click(x, y) requires a y coordinate");ee(G,y)},key(G){q(),B.push({type:"key",key:G}),(document.activeElement instanceof HTMLElement?document.activeElement:P).dispatchEvent(new KeyboardEvent("keydown",{key:G,bubbles:!0,cancelable:!0}))},focus(G){q();let y=P.querySelector(G);if(!(y instanceof HTMLElement))throw new Error(`No element matches ${G}`);y.focus()},async step(G=1){q(),B.push({type:"step",frames:G}),w&&await w.step(G)},async advance(G){q(),B.push({type:"advance",ms:G}),w&&await w.step(Math.max(0,Math.round(G/1e3*30)))},screenshot(){if(q(),g){let G=g.captureComposedFrame();return{imageData:G.imageData,pngDataUrl:G.pngDataUrl,html:P.outerHTML,declaredOrder:G.declaredOrder.map(y=>y.id)}}return{imageData:null,pngDataUrl:null,html:P.outerHTML,declaredOrder:[]}},accessibilitySnapshot(){return q(),{focus:kl(document.activeElement),live:mb(P),html:P.outerHTML,publishedRegions:(r?.inspectPublished()??[]).map(G=>({id:G.id,geometryKinds:[...G.geometryKinds],name:G.a11y?.name??null,role:G.a11y?.role??null}))}},async inspect(){q();let G={},y={},b=0;if(w){let I=await w.inspect();for(let D of I.diagnostics.participantIds)G[D]=w.participant(D).events.slice(),y[D]=I.participants[D]?.state,b=I.diagnostics.clocks[D]?.framesElapsed??b}return{host:N.hostState?.()??null,layout:Ra(v),events:W.slice(),participantEvents:G,state:y,focus:kl(document.activeElement),publishedRegions:(r?.inspectPublished()??[]).map(I=>({id:I.id,geometryKinds:[...I.geometryKinds],name:I.a11y?.name??null,role:I.a11y?.role??null})),scrollTop:P.scrollTop,clock:{framesElapsed:b}}},reproduction(){return q(),{seed:t,viewport:{width:i,height:o,dpr:s},reducedMotion:a,inputModality:d,actions:B.map(G=>({...G}))}},captureComposedFrame(){if(q(),!g)throw new Error("Browser harness: captureComposedFrame requires a compositor");return g.captureComposedFrame()},destroy(){if(!T){T=!0,x(),document.activeElement instanceof HTMLElement&&P.contains(document.activeElement)&&document.activeElement.blur();try{N.destroy?.()}finally{try{g?.destroy()}finally{try{w?.destroy()}finally{P.remove(),O(),k&&Object.defineProperty(window,"devicePixelRatio",k),E&&Object.defineProperty(window,"innerWidth",E),R&&Object.defineProperty(window,"innerHeight",R)}}}}}}}function gb(e){return{async goto(){e.goto()},async setViewportSize(t){e.setViewport(t.width,t.height,t.deviceScaleFactor)},async click(t){e.click(t)},async screenshot(){return e.screenshot()},keyboard:{async press(t){e.key(t)}},locator(t){return{async click(){e.click(t)},async focus(){e.focus(t)}}},async close(){e.destroy()}}}var Oa=1,Vo=1,Fo="production.scenario.state.observed",Gr="production.scenario.state.failed",$o="production.scenario.diagnostic.lifecycle",wl=[Fo,Gr,$o],xl=["input","reducer","routing","binding","cue","pixels","caption","audio","save-replay"],_l=["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"],Ol=["invoked","completed","failed","skipped","fallback"],Dl=["desktop","mobile"],Bo={desktop:{width:64,height:48,deviceScaleFactor:1},mobile:{width:48,height:64,deviceScaleFactor:2}},hb="Production scenario runner has been destroyed",bb=new Set(wl),vb=new Set(_l),Sb=new Set(xl),Eb=new Set(Ol),kb=new Set(["invoked","completed"]),Nl=new Set(Dl),Ib=new Set(["id","schemaVersion","seed","required","matrix","steps"]),Rb=new Set(["participants","layers"]),Cb=new Set(["viewport","width","height","dpr","reducedMotion","mute","failedAssetIds","fallback","inputModality"]),Ab=new Set(["click","key","focus","step","viewport","reducedMotion","mute","failAsset","save","reload","replay"]),Ml="continue",Pb=["browser","visual","sequence","audio","semantic"];function Ve(e,t,n,r){let i={code:e,detail:t};return n&&(i.path=n),r&&(i.boundary=r),i}function Fe(e){return!!e&&typeof e=="object"&&!Array.isArray(e)}function Ye(e){return typeof e=="string"&&e.length>0}function Be(e){return JSON.parse(JSON.stringify(e))}function Da(e,t,n){if(typeof e=="function"){n.push(Ve("callbacks-forbidden","authored scenarios must not contain callbacks",t));return}if(Array.isArray(e)){e.forEach((r,i)=>Da(r,`${t}[${i}]`,n));return}if(Fe(e))for(let[r,i]of Object.entries(e))Da(i,t?`${t}.${r}`:r,n)}function wa(e,t,n,r){for(let i of Object.keys(e))t.has(i)||r.push(Ve("unknown-field",`unknown field "${i}"`,n?`${n}.${i}`:i))}function Cl(e,t,n){if(!Array.isArray(e))return n.push(Ve("invalid-schema","must be an array of strings",t)),[];let r=[];return e.forEach((i,o)=>{if(!Ye(i)){n.push(Ve("invalid-schema","id must be a non-empty string",`${t}[${o}]`));return}r.push(i)}),r}function xa(){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 _a(e){if(!e.ok)throw new Error(e.errors.map(t=>t.detail).join("; "));return e.contract}function Tb(){return[_a(fe(Fo,xa())),_a(fe(Gr,xa())),_a(et($o,xa()))]}function wb(e){return typeof e=="string"&&bb.has(e)}function xb(e){return typeof e=="string"&&vb.has(e)}function _b(e){return typeof e=="string"&&Sb.has(e)}function Ll(e){return typeof e=="string"&&Eb.has(e)}function Ob(e,t,n){if(!Fe(e)||!Ye(e.type)){n.push(Ve("invalid-schema","step.type is required",t));return}if(!Ab.has(e.type)){n.push(Ve("unknown-field",`unknown step type "${e.type}"`,`${t}.type`));return}let r=n.length,i=a=>{Ye(e[a])||n.push(Ve("missing-field",`${e.type} step requires ${a}`,`${t}.${a}`))},o=a=>{(typeof e[a]!="number"||!Number.isFinite(e[a]))&&n.push(Ve("missing-field",`${e.type} step requires numeric ${a}`,`${t}.${a}`))},s=a=>{typeof e[a]!="boolean"&&n.push(Ve("missing-field",`${e.type} step requires boolean ${a}`,`${t}.${a}`))};switch(e.type){case"click":{let a=Ye(e.selector),d=typeof e.x=="number"&&typeof e.y=="number";!a&&!d&&n.push(Ve("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&&!Nl.has(String(e.kind))&&n.push(Ve("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(Ve("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 Be(e)}function Vl(e){let t=[];if(Da(e,"",t),!Fe(e))return{ok:!1,errors:[Ve("invalid-scenario","scenario must be an object")]};if(wa(e,Ib,"",t),Ye(e.id)||t.push(Ve("missing-field","id is required","id")),e.schemaVersion!==Oa&&t.push(Ve("invalid-schema","schemaVersion must be 1","schemaVersion")),Ye(e.seed)||t.push(Ve("missing-field","seed is required","seed")),!Fe(e.required))t.push(Ve("missing-field","required participants and layers are required","required"));else{wa(e.required,Rb,"required",t);let o=Cl(e.required.participants,"required.participants",t),s=Cl(e.required.layers,"required.layers",t);o.length===0&&t.push(Ve("missing-field","required.participants must not be empty","required.participants")),s.length===0&&t.push(Ve("missing-field","required.layers must not be empty","required.layers"))}let n;e.matrix!==void 0&&(Fe(e.matrix)?(wa(e.matrix,Cb,"matrix",t),e.matrix.viewport!==void 0&&!Nl.has(String(e.matrix.viewport))&&t.push(Ve("invalid-schema","matrix.viewport must be desktop or mobile","matrix.viewport")),n=Be(e.matrix)):t.push(Ve("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=Ob(o,`steps[${s}]`,t);a&&r.push(a)})):t.push(Ve("invalid-schema","steps must be an array","steps"))),t.length>0)return{ok:!1,errors:t};let i={id:e.id,schemaVersion:Oa,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 mn(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 qr(e){return JSON.stringify(e)}function Lo(e,t){let n=new Set(t);return e.filter(r=>!n.has(r))}function Bl(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 Db(e){let t=e?.viewport==="mobile"?"mobile":"desktop",n=Bo[t];return{preset:t,viewport:{width:e?.width??n.width,height:e?.height??n.height,deviceScaleFactor:e?.dpr??n.deviceScaleFactor}}}function Nb(e){return{type:"host.intent.select",kind:"intent",payload:{id:e}}}function Mb(e){return{type:"host.intent.key",kind:"intent",payload:{key:e}}}function Kr(e){return{boundary:"audio",code:"invalid-host-audio",detail:e}}function Al(e){return!!e&&typeof e=="object"&&typeof e.setReducedMotion=="function"}function Lb(e){return!!e&&typeof e=="object"&&typeof e.setReducedSensory=="function"}function Vb(e){if(!Fe(e)||!Ll(e.kind))return null;let t={kind:e.kind};return typeof e.atFrame=="number"&&Number.isFinite(e.atFrame)&&(t.atFrame=e.atFrame),Ye(e.name)&&(t.name=e.name),typeof e.caption=="string"&&(t.caption=e.caption),Ye(e.assetId)&&(t.assetId=e.assetId),Ye(e.reason)&&(t.reason=e.reason),Ye(e.id)&&(t.id=e.id),Ye(e.correlationId)&&(t.correlationId=e.correlationId),Ye(e.causationId)&&(t.causationId=e.causationId),t}function Pl(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 Bb(e){if(e===void 0)return{ok:!0,supplied:!1,snapshot:{events:[]}};if(!Fe(e))return{ok:!1,error:Kr("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:Kr("hostAudio requires snapshot() or collect()")};try{typeof r=="function"&&r.call(e);let s=i?t.call(e):n.call(e);if(!Fe(s)||!Array.isArray(s.events))return{ok:!1,error:Kr("hostAudio snapshot.events must be an array")};let a=[];for(let f=0;f<s.events.length;f++){let l=Vb(s.events[f]);if(!l)return{ok:!1,error:Kr(`hostAudio snapshot.events[${f}] is invalid`)};a.push(l)}let d={events:a};return Array.isArray(s.captions)&&(d.captions=s.captions.filter(f=>typeof f=="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:Kr(`hostAudio inspect failed: ${a}`)}}}function Fb(e,t,n,r){return{version:1,cartId:e,seed:t,framesElapsed:n,state:r}}function $b(){return{version:1,landmarks:[],regions:[]}}function pt(e,t){return{boundary:"input",code:e,detail:t}}function Fl(e){let t={};for(let n of e)n.priority!==void 0&&(t[n.id]=n.priority);return t}function Hb(e,t){let n=Fl(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 qb(e,t,n,r,i){let o=lr({x:e,y:t},n,r,{space:"css",precedence:Object.keys(i).length>0?i:void 0});if(!o)return null;let s=an({x:e,y:t},n),a=[];for(let d of r.regions)d.id!==o.id&&dn(d,s)&&a.push(d.id);return a.sort(),{x:e,y:t,selectedControlId:o.id,rejectedControlIds:a}}function Kb(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(!Fe(e)||!Ye(e.id))return{ok:!1,error:pt("invalid-geometry",`controls[${t}] id is required`)};let n={id:e.id};if(Ye(e.name)&&(n.name=e.name),Ye(e.role)&&(n.role=e.role),e.priority!==void 0){if(typeof e.priority!="number"||!Number.isFinite(e.priority))return{ok:!1,error:pt("invalid-geometry",`controls[${t}].priority must be a finite number`)};n.priority=e.priority}return{ok:!0,control:n}}function Tl(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=Kb(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(!Fe(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=Be(t),o=Ts(i);if(!o.ok){let a=o.diagnostics.filter(f=>f.code==="overlap"),d=o.diagnostics.filter(f=>f.code!=="overlap");if(d.length>0){let f=d.some(l=>l.code==="duplicate-id");return{ok:!1,error:pt(f?"ambiguous-geometry":"invalid-geometry",o.diagnostics.map(l=>l.detail).join("; "))}}if(a.length>0){let f=Hb(n,a);if(!f.ok)return{ok:!1,error:pt("ambiguous-geometry",f.detail)}}else return{ok:!1,error:pt("invalid-geometry",o.diagnostics.map(f=>f.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 Ce(e,t,n){return{boundary:e,code:t,detail:n}}function Gb(e){return e==null?null:Fe(e)?e.schemaVersion!==xr?Ce("pixels","invalid-visual-sidecar","unsupported visual layer snapshot schema"):typeof e.frame!="number"||!Number.isFinite(e.frame)?Ce("pixels","invalid-visual-sidecar","visual sidecar frame must be finite"):Array.isArray(e.layers)?null:Ce("pixels","invalid-visual-sidecar","visual sidecar layers must be an array"):Ce("pixels","invalid-visual-sidecar","visual sidecar must be an object")}function Wb(e){return e==null?null:Fe(e)?e.schemaVersion!==wr?Ce("caption","invalid-semantic-sidecar","unsupported semantic layer snapshot schema"):typeof e.frame!="number"||!Number.isFinite(e.frame)?Ce("caption","invalid-semantic-sidecar","semantic sidecar frame must be finite"):Array.isArray(e.regions)?null:Ce("caption","invalid-semantic-sidecar","semantic sidecar regions must be an array"):Ce("caption","invalid-semantic-sidecar","semantic sidecar must be an object")}function jb(e,t){return e==null?null:Fe(e)?e.schemaVersion!==Mr?Ce("binding","invalid-binding-sidecar","unsupported presentation binding snapshot schema"):t&&e.manifestId!==t?Ce("binding","invalid-binding-sidecar",`snapshot manifestId "${String(e.manifestId)}" does not match "${t}"`):Array.isArray(e.selectedBindingIds)?Array.isArray(e.targets)?null:Ce("binding","invalid-binding-sidecar","binding sidecar targets must be an array"):Ce("binding","invalid-binding-sidecar","binding sidecar selectedBindingIds must be an array"):Ce("binding","invalid-binding-sidecar","binding sidecar must be an object")}function Ub(e,t){if(e==null)return null;if(!Fe(e))return Ce("cue","invalid-sequence-sidecar","sequence sidecar must be an object");if(e.schemaVersion!==Dr)return Ce("cue","invalid-sequence-sidecar","unsupported presentation sequence snapshot schema");if(typeof e.frame!="number"||!Number.isFinite(e.frame))return Ce("cue","invalid-sequence-sidecar","sequence sidecar frame must be finite");let n=e.active;if(n!=null){if(!Fe(n)||!Ye(n.sequenceId))return Ce("cue","invalid-sequence-sidecar","active.sequenceId is required");if(!t(n.sequenceId))return Ce("cue","invalid-sequence-sidecar",`unknown sequence "${n.sequenceId}"`)}if(e.queue!==void 0){if(!Array.isArray(e.queue))return Ce("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(!Fe(i)||!Ye(i.sequenceId))return Ce("cue","invalid-sequence-sidecar",`queue[${r}] sequenceId is required`);if(!t(i.sequenceId))return Ce("cue","invalid-sequence-sidecar",`unknown sequence "${i.sequenceId}"`)}}return null}function Jb(e){let t=ar(e);return t.ok?null:Ce("audio","invalid-audio-sidecar",t.errors[0]?.detail??"audio sidecar is invalid")}function $l(e){let t=Vl(e.scenario);if(!t.ok)throw new Error(`createProductionScenarioRunner: ${t.errors.map(F=>F.detail).join("; ")}`);let n=t.scenario,r=n.matrix??{},{preset:i,viewport:o}=Db(r),s=e.host,a=Be(s.initialState),d=null,f,l,k,E=null,R=null,O=null,h=r.reducedMotion===!0,P=null,B=!1,W=[],T=0,M=0,A=e.createId??(()=>`ps-${++T}`),u=e.mapClick??Nb,v=e.mapKey??Mb,c=e.sequenceBindings??{},p=e.origin??0,m=e.semanticRegions&&e.semanticRegions.length>0?ua({originFrame:0,regions:e.semanticRegions}):void 0,S,_,C,N=Es({originFrame:0,reducedSensory:r.reducedMotion===!0||r.mute===!0}),K=Vi(),w,g=null,x=null,L=[],$=[],q={},ee=null,Y=null,G=()=>{},y=()=>{},b=()=>{},I=F=>s.project?s.project(F):Be(F),D=()=>{let F=new Set,j=[];for(let se of[...e.geometry?.regions.map(ve=>ve.id)??[],...(e.semanticRegions??[]).map(ve=>ve.id)])F.has(se)||(F.add(se),j.push({id:se}));return j},H=F=>{if(s.projectInputSurface){let se;try{se=s.projectInputSurface(F)}catch(ve){let he=ve instanceof Error?ve.message:String(ve);return{ok:!1,error:pt("invalid-geometry",`projectInputSurface failed: ${he}`)}}return Fe(se)?Tl(se.controls,se.geometry):{ok:!1,error:pt("invalid-geometry","projectInputSurface must return { controls, geometry }")}}let j=D();return e.geometry?Tl(j,e.geometry):{ok:!0,surface:{controls:j,geometry:$b()}}},ne=()=>{let F=H(a);if(!F.ok){x=F.error,g=F.error,b(F.error);return}x&&g===x&&(g=null),x=null,$=F.surface.controls.map(j=>({...j})),L=$.map(j=>j.id),q=Fl($),Y=Be(F.surface.geometry),y(F.surface.geometry),G(F.surface.controls)},z=F=>w?w.publish(F):U.group?.publish(F),ie=F=>{ne();let j=I(a),se=typeof j.worldRevision=="string"||typeof j.worldRevision=="number"?j.worldRevision:void 0;C?.apply(j,se!==void 0?{revision:se}:void 0);let ve=F;if(ve&&_){M+=1;let he=`${n.id}:${ve}:${M}`;_.playSequence(ve,{invocationId:he,idempotencyKey:he,bindings:c[ve]??{}})}we()},oe=F=>{let j=s.reduce(Be(a),F);d=j,a=Be(j.state);let se=Fe(F.payload)?F.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"}}),ie(j.playSequence),j},Pe=document.createElement("div");Pe.setAttribute("aria-live","polite"),Pe.id="status",Pe.textContent="";let Ie=()=>Bb(e.hostAudio),we=()=>{let F=_?.inspect().captions.filter(ue=>ue.visible).map(ue=>ue.text)??[],j=typeof a.caption=="string"?a.caption:"",se=Ie(),ve=se.ok?Pl(se.snapshot):[],he=ve[ve.length-1]??"";Pe.textContent=F[0]||j||he},Oe=()=>{let F=U.group,j=U.compositor,se=F?F.inspectParticipants().map(Ee=>Ee.id):[],ve=j?j.layers().map(Ee=>Ee.id):[],he=Lo(n.required.participants,se);if(he.length>0)return{boundary:"routing",code:"missing-participant",detail:`missing participants: ${he.join(", ")}`};let ue=Lo(n.required.layers,ve);return ue.length>0?{boundary:"pixels",code:"missing-layer",detail:`missing layers: ${ue.join(", ")}`}:null},V=F=>({scenarioId:n.id,seed:n.seed,boundary:F.boundary,reason:F.detail}),J=F=>{let j={type:$o,kind:"diagnostic",payload:{...V(F),code:F.code}};z(j),e.router?.publish(j)},re=F=>{let j={type:Gr,kind:"state",payload:V(F)};z(j),e.router?.publish(j),J(F)},U=Ta({seed:n.seed,viewport:o,reducedMotion:r.reducedMotion===!0,inputModality:r.inputModality??"pointer",origin:p,createId:A,geometry:e.geometry,semanticLayers:m,contentWidth:e.contentWidth??o.width,contentHeight:e.contentHeight??o.height,mount(F){let j=new Map;return y=se=>{F.setGeometry(se)},G=se=>{let ve=new Set(se.map(ue=>ue.id));for(let[ue,Ee]of[...j])ve.has(ue)||(document.activeElement===Ee&&Ee.blur(),Ee.remove(),j.delete(ue));let he=[...se].sort((ue,Ee)=>{let wt=ue.priority??0,Et=Ee.priority??0;return wt!==Et?wt-Et:ue.id<Ee.id?-1:ue.id>Ee.id?1:0});for(let ue of he){let Ee=j.get(ue.id);Ee||(Ee=document.createElement("button"),Ee.type="button",Ee.id=ue.id,Ee.setAttribute("data-testid",ue.id),Ee.addEventListener("click",()=>{oe(u(ue.id))}),j.set(ue.id,Ee)),F.root.insertBefore(Ee,Pe),Ee.setAttribute("aria-label",ue.name??ue.id),ue.role?Ee.setAttribute("role",ue.role):Ee.removeAttribute("role"),F.placeRegion(ue.id,Ee)}},F.root.append(Pe),{participants:e.participants,compositor:{layers:e.compositorLayers},hostState:()=>Be(a),ready(se){if(se.group&&(w=K.bind(se.group)),se.compositor&&e.visualLayers&&e.visualLayers.length>0){S=la({compositor:se.compositor,originFrame:0,reducedMotion:r.reducedMotion===!0,sceneId:n.id,layers:e.visualLayers});for(let[he,ue]of Object.entries(e.visualSources??{}))S.registerSource(he,ue),S.handleHostEvent({type:Je,kind:"state",payload:{id:he}})}let ve=[];for(let he of e.sequences??[]){let ue=Nr(he);if(!ue.ok)throw new Error(`createProductionScenarioRunner: sequence ${ue.errors.map(Ee=>Ee.detail).join("; ")}`);ve.push(ue.sequence)}if(_=ve.length>0?ya({originFrame:0,reducedMotion:r.reducedMotion===!0,reducedSensory:r.mute===!0||r.fallback===!0,audio:N,semantic:m,visual:S,sequences:ve}):void 0,e.bindings!==void 0){let he=wo(e.bindings);if(!he.ok)throw new Error(`createProductionScenarioRunner: ${he.errors.map(ue=>ue.detail).join("; ")}`);C=Ea({manifest:he.manifest,visual:S,semantic:m,sequences:_})}F.root.addEventListener("keydown",he=>{let ue=v(he.key);ue&&oe(ue)}),ie()},relayout(se){for(let[ve,he]of j)se.placeRegion(ve,he)},destroy(){Pe.remove();for(let se of j.values())se.remove();j.clear()}}}}),Z=()=>{if(B)throw new Error(hb)};N.unlock(),r.mute===!0&&N.broker.mute();let ye=new Set(r.failedAssetIds??[]),Ze=new Set([...ye]);for(let F of Object.values(c))for(let j of Object.values(F.assets??{}))j&&Ze.add(j);for(let F of Ze){let j={type:ye.has(F)?We:Je,kind:"state",payload:{id:F}};N.handleHostEvent(j),S?.handleHostEvent(j)}if(g=Oe(),g||(g=x),!g){let F=Ie();F.ok||(g=F.error)}b=re,g&&re(g);let at=F=>({boundary:"cue",code:"unsupported-preference",detail:F}),Lt=F=>{O=at(F),g=O,re(O)},Vt=F=>{let j=h;h=F,U.setReducedMotion(F);let se=[{id:"browser",applied:!0,reducedMotion:U.reproduction().reducedMotion}];S?Al(S)?(S.setReducedMotion(F),se.push({id:"visual",applied:!0,reducedMotion:S.reducedMotion})):(Lt("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"}),_?Al(_)?(_.setReducedMotion(F),se.push({id:"sequence",applied:!0,reducedMotion:_.reducedMotion})):(Lt("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 ve=F||N.broker.muted;Lb(N)?(N.setReducedSensory(ve),se.push({id:"audio",applied:!0,reducedMotion:F,reducedSensory:N.reducedSensory})):(Lt("audio does not support setReducedSensory"),se.push({id:"audio",applied:!1,reason:"setReducedSensory is not supported"})),m?se.push({id:"semantic",applied:!1,reason:"no-reduced-motion-policy"}):se.push({id:"semantic",applied:!1,reason:"participant-not-mounted"});let he={from:j,to:F,activeSequencePolicy:Ml,participants:se};return P=he,he},zn=async F=>{w?await w.step(F):await U.step(F),S?.step(F),_?.step(F),N.step(F),we()},Gl=(F=Ie())=>{let j=U.group,se=U.compositor,ve=j?j.inspectParticipants().map(xe=>xe.id):[],he=se?se.layers().map(xe=>xe.id):[],ue=Lo(n.required.participants,ve),Ee=Lo(n.required.layers,he),wt=U.events,Et=F.ok?F.snapshot:{events:[]},yn=F.ok?Pl(Et):[],kt=[..._?.inspect().captions.filter(xe=>xe.visible).map(xe=>xe.text)??[],...yn],en=typeof a.caption=="string"?a.caption:"";en&&!kt.includes(en)&&kt.push(en);let le=N.snapshot(),It=Et.events,tn=U.screenshot(),Ul=W.find(xe=>xe.type==="click");return{inputDispatched:W.some(xe=>xe.type==="click"||xe.type==="key"),inputTarget:Ul?.selector,reducerAccepted:d?.accepted===!0,reducerRejected:d?d.accepted===!1:void 0,reducerReason:d?.reason,routedTypes:wt.map(xe=>xe.type),rejected:wt.some(xe=>xe.type===yt),selectedBindingIds:C?.inspect().selectedBindingIds??[],sequenceId:_?.inspect().active?.sequenceId??d?.playSequence??null,sequencePhase:_?.inspect().active?.phase??null,captions:kt,declaredOrder:tn.declaredOrder,requiredParticipantsPresent:ue.length===0,requiredLayersPresent:Ee.length===0,missingParticipants:ue,missingLayers:Ee,audioInvoked:le.events.some(xe=>xe.type==="audio.cue.scheduled"||xe.type==="audio.cue.started")||It.some(xe=>kb.has(xe.kind)),audioFailed:le.events.some(xe=>xe.type==="audio.cue.failed")||It.some(xe=>xe.kind==="failed")||(r.failedAssetIds?.length??0)>0,muted:le.muted||Et.muted===!0,replayMatch:l?.ok,snapshotOk:f!==void 0,audioRestoreOk:k,reducedMotion:h,reducedMotionPropagation:P,activeControlIds:L.slice(),inputHitTest:ee?{...ee}:void 0}},Ba=F=>{g=Oe();let j=Ie();!g&&x&&(g=x),!g&&R&&(g=R),!g&&E&&(g=E),!g&&O&&(g=O),!g&&!j.ok&&(g=j.error);let se=Gl(j),ve={requiredParticipantsPresent:!0,requiredLayersPresent:!0,...F},he=g??Bl(se,ve),ue=U.screenshot(),Ee=U.accessibilitySnapshot(),wt=m?.inspectPublished()??[],Et=K.records(),yn=f?qr(f):"",kt=ue.imageData?new Uint8Array(ue.imageData.data):new Uint8Array,en=Object.keys(e.visualSources??{}).sort(),le=typeof a.worldRevision=="string"||typeof a.worldRevision=="number"?a.worldRevision:null,It={schemaVersion:Vo,scenarioId:n.id,seed:n.seed,matrix:{viewport:i,width:o.width,height:o.height,dpr:o.deviceScaleFactor??1,...r},hashes:{pixels:mn(kt),semantic:mn(qr(wt)),a11y:mn(qr(Ee)),trace:mn(qr(Et)),snapshot:yn?mn(yn):"0".repeat(8),assets:mn(qr(en))},revisions:{world:le,bindings:C?.inspect().revision??null,snapshot:je},traces:{envelopes:U.events.slice(),inspector:Et,audio:N.snapshot().events.slice(),hostAudio:j.ok?[...j.snapshot.events]:[],actions:W.slice()},screenshot:{pngDataUrl:ue.pngDataUrl,declaredOrder:ue.declaredOrder.slice(),width:ue.imageData?.width??o.width,height:ue.imageData?.height??o.height},semantic:wt,a11y:Ee,firstBrokenBoundary:he?.boundary??null,localization:he,participants:U.group?.inspectParticipants().map(tn=>tn.id)??[],layers:U.compositor?.layers().map(tn=>tn.id)??[],observation:se};return z({type:he?Gr:Fo,kind:"state",payload:{scenarioId:n.id,seed:n.seed,boundary:he?.boundary,reason:he?.detail}}),he&&J(he),It},Wl=()=>({schemaVersion:Vo,host:Be(a),lastDecision:d?Be(d):null,visual:S?.snapshot()??null,semantic:m?.snapshot()??null,bindings:C?.snapshot()??null,sequences:_?.snapshot()??null,audio:N.snapshot()}),Fa=()=>{let F=ci({cart:{id:n.id,version:"1"},seed:n.seed,clock:{framesElapsed:0},engineState:Fb(n.id,n.seed,0,Be(a)),hostState:Wl(),createdAt:"2026-09-05T00:00:00.000Z"});if(!F.ok)throw new Error(F.errors.map(j=>j.detail).join("; "));return f=F.snapshot,F.snapshot},$a=F=>{let j=F.hostState;if(!Fe(j)||!Fe(j.host))throw new Error("Production scenario reload: hostState.host is required");let se=Be(j.host),ve=j.audio!==void 0&&j.audio!==null,he=le=>{le.code==="invalid-audio-sidecar"?(k=!1,E=le):E=null,R=le,g=le,re(le)};if(j.schemaVersion!==void 0&&j.schemaVersion!==Vo){he(Ce("save-replay","invalid-schema","unsupported production scenario sidecar schemaVersion"));return}if(s.validateRestoreState){let le=s.validateRestoreState(se);if(!le.ok){he(Ce("save-replay","invalid-host-sidecar",le.detail));return}}let ue=H(se);if(!ue.ok){he(ue.error);return}let Ee=C?.snapshot().manifestId,wt=[j.visual!==void 0&&j.visual!==null&&S?Gb(j.visual):null,j.semantic!==void 0&&j.semantic!==null&&m?Wb(j.semantic):null,j.bindings!==void 0&&j.bindings!==null&&C?jb(j.bindings,Ee):null,j.sequences!==void 0&&j.sequences!==null&&_?Ub(j.sequences,le=>!!_?.get(le)):null,ve?Jb(j.audio):null];for(let le of wt)if(le){he(le);return}ve||(k=!1,E=null);let Et=()=>({hostState:Be(a),lastDecision:d?Be(d):null,visual:S?S.snapshot():null,semantic:m?m.snapshot():null,bindings:C?C.snapshot():null,sequences:_?_.snapshot():null,audio:N.snapshot()}),yn=le=>{a=Be(le.hostState),d=le.lastDecision?Be(le.lastDecision):null;let It=[];return S&&le.visual!==null&&It.push(S.restore(le.visual)),m&&le.semantic!==null&&It.push(m.restore(le.semantic)),C&&le.bindings!==null&&It.push(C.restore(le.bindings)),_&&le.sequences!==null&&It.push(_.restore(le.sequences)),It.push(N.restore(le.audio)),It.every(tn=>tn.ok)},kt=le=>{if(!yn(en)){he(Ce("save-replay","invalid-schema","reload rollback failed after sidecar restore"));return}he(le)},en=Et();if(a=se,d=Fe(j.lastDecision)?Be(j.lastDecision):null,j.visual&&S){let le=S.restore(j.visual);if(!le.ok){kt(Ce("pixels","invalid-visual-sidecar",le.errors[0]?.message??"visual sidecar restore failed"));return}}if(j.semantic&&m){let le=m.restore(j.semantic);if(!le.ok){kt(Ce("caption","invalid-semantic-sidecar",le.errors[0]??"semantic sidecar restore failed"));return}}if(j.bindings&&C){let le=C.restore(j.bindings);if(!le.ok){kt(Ce("binding","invalid-binding-sidecar",le.errors[0]?.detail??"binding sidecar restore failed"));return}}if(j.sequences&&_){let le=_.restore(j.sequences);if(!le.ok){kt(Ce("cue","invalid-sequence-sidecar",le.errors[0]?.detail??"sequence sidecar restore failed"));return}}if(ve){let le=N.restore(j.audio);if(!le.ok){kt(Ce("audio","invalid-audio-sidecar",le.errors[0]?.detail??"audio sidecar restore failed"));return}k=!0,E=null}R=null,ne(),we(),g&&g!==x&&(g=x),f=F},Ha=(F,j)=>{if(Y){let se=qb(F,j,U.layout,Y,q);if(se){ee=se,U.click(`#${se.selectedControlId}`);return}}ee=null,U.click(F,j)},qa=async()=>{let F=U.group;if(!w||!F)return l={ok:!1,detail:"replay requires a mounted runtime group"},l;let j=await w.exportTrace(),se=$l({...e,scenario:n,createId:(()=>{let ve=0;return()=>`ps-${++ve}`})()});try{let ve=await Ks(j,se.harness.group);return l=qs(j.records,ve.report.records),ve.inspector.destroy(),l}finally{se.destroy()}},jl=async F=>{switch(W.push(Be(F)),F.type){case"click":if(typeof F.selector=="string")U.click(F.selector);else if(typeof F.x=="number"&&typeof F.y=="number")Ha(F.x,F.y);else throw new Error("click step requires selector or x,y");return;case"key":U.root.focus(),U.key(F.key);return;case"focus":U.focus(F.selector);return;case"step":await zn(F.frames);return;case"viewport":{let j=F.kind==="mobile"?Bo.mobile:F.kind==="desktop"?Bo.desktop:o;U.setViewport(F.width??j.width,F.height??j.height,F.dpr??j.deviceScaleFactor);return}case"reducedMotion":Vt(F.value);return;case"mute":F.value?N.broker.mute():N.broker.unmute();return;case"failAsset":{let j={type:We,kind:"state",payload:{id:F.assetId}};N.handleHostEvent(j),S?.handleHostEvent(j);return}case"save":Fa();return;case"reload":if(!f)throw new Error("reload requires a prior save");$a(f);return;case"replay":await qa();return}};return{scenario:n,harness:U,audio:N,inspector:K,goto(){Z(),U.goto()},click(F,j){Z(),W.push(typeof F=="string"?{type:"click",selector:F}:{type:"click",x:F,y:j}),typeof F=="string"?U.click(F):Ha(F,j)},key(F){Z(),W.push({type:"key",key:F}),U.root.focus(),U.key(F)},focus(F){Z(),W.push({type:"focus",selector:F}),U.focus(F)},setViewport(F,j,se){Z(),W.push({type:"viewport",width:F,height:j,dpr:se}),U.setViewport(F,j,se)},setReducedMotion(F){Z(),W.push({type:"reducedMotion",value:F}),Vt(F)},mute(F=!0){Z(),W.push({type:"mute",value:F}),F?N.broker.mute():N.broker.unmute()},failAsset(F){Z(),W.push({type:"failAsset",assetId:F});let j={type:We,kind:"state",payload:{id:F}};N.handleHostEvent(j),S?.handleHostEvent(j)},async step(F=1){Z(),W.push({type:"step",frames:F}),await zn(F)},applyHostIntent(F){return Z(),oe(F)},playSequence(F,j=`${n.id}:${F}`){Z(),_?.playSequence(F,{invocationId:j,idempotencyKey:j,bindings:c[F]??{}}),we()},publish(F){return Z(),z(F)},save(){return Z(),W.push({type:"save"}),Fa()},reload(F){Z();let j=F??f;if(!j)throw new Error("reload requires a prior save or an explicit snapshot");W.push({type:"reload"}),$a(j)},async replay(){return Z(),W.push({type:"replay"}),qa()},async run(F){Z(),U.goto();let j=F??n.steps??[];for(let se of j)await jl(se);return Ba()},captureEvidence(F){return Z(),Ba(F)},inspect(){return Z(),{host:Be(a),lastDecision:d,bindings:C?.inspect()??null,sequences:_?.inspect()??null,visual:S?.inspect()??null,semantic:m?.inspect()??null,audio:N.snapshot(),hostAudio:(()=>{let F=Ie();return F.ok&&F.supplied?F.snapshot:null})(),participants:U.group?.inspectParticipants().map(F=>F.id)??[],layers:U.compositor?.layers().map(F=>F.id)??[],composition:(()=>{let F=Oe();if(F)return F;if(x)return x;if(R)return R;if(O)return O;let j=Ie();return j.ok?null:j.error})(),reducedMotion:h,reducedMotionPropagation:P,inputSurface:{controlIds:L.slice(),controls:$.map(F=>({...F})),geometry:Y?Be(Y):null}}},destroy(){B||(B=!0,w?.unbind(),K.destroy(),C?.destroy(),_?.destroy(),S?.destroy(),m?.destroy(),N.destroy(),U.destroy())}}}var zb=128,Yb=144,Xb=176,Qb=224,Zb=0,ev=15,tv=127,nv=8192,rv=16383;function Kl(e){return Number.isInteger(e)&&e>=0&&e<=15}function Wr(e){return Number.isInteger(e)&&e>=0&&e<=127}function Ho(e,t){return e&240|t&15}function iv(e){return e&15}function Va(e){if(!Kl(e.channel))return;let t=e.channel;if(e.kind==="noteon"||e.kind==="noteoff"){let n=e.velocity??(e.kind==="noteon"?100:0);if(!Wr(e.note)||!Wr(n))return;let r=e.kind==="noteon"?144:128;return Uint8Array.from([Ho(r,t),e.note,n])}if(e.kind==="cc")return!Wr(e.controller)||!Wr(e.value)?void 0:Uint8Array.from([Ho(176,t),e.controller,e.value]);if(e.kind==="pitch"&&!(!Number.isInteger(e.value)||e.value<0||e.value>16383))return Uint8Array.from([Ho(224,t),e.value&127,e.value>>7&127])}function Na(e){let t=Ma(e);if(t.length===0)return;let n=t[0],r=n&240,i=n&15;if(n>=128&&t.length>=3){if(r===144||r===128){let o=t[1],s=t[2];return{kind:r===128||s===0?"noteoff":"noteon",channel:i,note:o,velocity:s,status:n,data:t}}if(r===176)return{kind:"cc",channel:i,controller:t[1],value:t[2],status:n,data:t};if(r===224){let o=t[1]|t[2]<<7;return{kind:"pitch",channel:i,value:o,status:n,data:t}}}return{kind:"raw",channel:n>=128?i:void 0,status:n,data:t}}function Ma(e){return e instanceof Uint8Array?new Uint8Array(e):Uint8Array.from(e)}function ov(e){return Array.from(e)}function sv(e){if(!("kind"in e))return!1;let t=e.kind;return t==="noteon"||t==="noteoff"||t==="cc"||t==="pitch"}function Hl(e){if(e instanceof Uint8Array)return Ma(e);if(Array.isArray(e))return e.every(t=>Number.isInteger(t)&&t>=0&&t<=255)?Uint8Array.from(e):void 0;if(!(typeof e!="object"||e===null)){if("data"in e&&e.data instanceof Uint8Array&&e.data.length>0)return Ma(e.data);if(sv(e))return Va(e)}}function av(e,t){return e==="*"?!0:e==="note"?t.kind==="noteon"||t.kind==="noteoff":t.kind===e}function dv(e){return{send(t,n){e.send(Array.from(t),n)}}}function cv(e){if(typeof navigator>"u")return;let t=navigator.requestMIDIAccess;if(typeof t=="function")return t.call(navigator,e)}function ql(e){if(e instanceof Error&&e.message)return e.message;if(typeof e=="string"&&e.length>0)return e}var La=class{constructor(t={}){this.listeners=[];this.attachedInputs=new Set;this.inputCount=0;this.outputCount=0;this.destroyed=!1;this.output=t.output,this.outputOwned=t.output!=null,this.requestMIDIAccess=t.requestMIDIAccess,this.onHardwareMessage=this.onHardwareMessage.bind(this),this.onAccessStateChange=this.onAccessStateChange.bind(this)}subscribe(t,n){if(this.destroyed)return()=>{};let r={kind:t,listener:n};return this.listeners.push(r),()=>{this.listeners=this.listeners.filter(i=>i!==r)}}inject(t){if(this.destroyed)return;let n=Hl(t);if(!n)return;let r=Na(n);r&&this.dispatch(r)}sendNoteOn(t,n,r=100){return this.sendEncoded({kind:"noteon",channel:t,note:n,velocity:r})}sendNoteOff(t,n,r=0){return this.sendEncoded({kind:"noteoff",channel:t,note:n,velocity:r})}sendCc(t,n,r){return this.sendEncoded({kind:"cc",channel:t,controller:n,value:r})}sendPitch(t,n){return this.sendEncoded({kind:"pitch",channel:t,value:n})}send(t){if(this.destroyed)return{ok:!1,reason:"destroyed"};let n=Hl(t);return!n||n.length===0?{ok:!1,reason:"invalid",detail:"empty MIDI payload"}:this.write(n)}async requestAccess(t){if(this.destroyed)return{ok:!1,reason:"destroyed"};if(this.access)return{ok:!0,inputs:this.inputCount,outputs:this.outputCount,sysexEnabled:this.access.sysexEnabled};let n=this.requestMIDIAccess??cv,r=typeof n=="function"?n({sysex:t?.sysex===!0}):void 0;if(r==null)return{ok:!1,reason:"unavailable",detail:"navigator.requestMIDIAccess is not available"};try{let i=await r;return this.destroyed?{ok:!1,reason:"destroyed"}:(this.attachAccess(i),{ok:!0,inputs:this.inputCount,outputs:this.outputCount,sysexEnabled:i.sysexEnabled})}catch(i){return{ok:!1,reason:"denied",detail:ql(i)}}}destroy(){this.destroyed||(this.destroyed=!0,this.detachHardware(),this.listeners=[],this.access=void 0,this.outputOwned||(this.output=void 0))}sendEncoded(t){if(this.destroyed)return{ok:!1,reason:"destroyed"};let n=Va(t);return n?this.write(n):{ok:!1,reason:"invalid",detail:"channel, data, or pitch out of range"}}write(t){if(!this.output)return{ok:!1,reason:"no-port"};try{this.output.send(ov(t))}catch(n){return{ok:!1,reason:"invalid",detail:ql(n)}}return{ok:!0,data:t}}dispatch(t){for(let n of this.listeners)av(n.kind,t)&&n.listener(t)}deliverBytes(t){let n=Na(t);n&&this.dispatch(n)}onHardwareMessage(t){if(this.destroyed)return;let n="data"in t?t.data:void 0;!n||n.length===0||this.deliverBytes(n)}onAccessStateChange(){this.destroyed||!this.access||this.syncPorts(this.access)}attachAccess(t){this.access=t,this.syncPorts(t),t.addEventListener?.("statechange",this.onAccessStateChange)}syncPorts(t){let n=new Set;t.inputs.forEach(a=>n.add(a));for(let a of[...this.attachedInputs])n.has(a)||(a.removeEventListener("midimessage",this.onHardwareMessage),this.attachedInputs.delete(a));t.inputs.forEach(a=>{this.attachedInputs.has(a)||(a.addEventListener("midimessage",this.onHardwareMessage),this.attachedInputs.add(a))});let r=new Set,i=0;t.inputs.forEach(()=>{i+=1});let o=0;if(t.outputs.forEach(a=>{o+=1,r.add(a)}),this.inputCount=i,this.outputCount=o,this.outputOwned||(this.adoptedHardwareOutput&&!r.has(this.adoptedHardwareOutput)&&(this.output=void 0,this.adoptedHardwareOutput=void 0),this.output))return;let s;t.outputs.forEach(a=>{s||(s=a)}),s&&(this.adoptedHardwareOutput=s,this.output=dv(s))}detachHardware(){for(let t of this.attachedInputs)t.removeEventListener("midimessage",this.onHardwareMessage);this.attachedInputs.clear(),this.access?.removeEventListener?.("statechange",this.onAccessStateChange),this.outputOwned||(this.output=void 0,this.adoptedHardwareOutput=void 0),this.inputCount=0,this.outputCount=0}};export{vm as ANCHOR_ORIGINS,We as ASSET_FAILED_EVENT,Pd as ASSET_FAILURE_CODES,Ad as ASSET_KINDS,Je as ASSET_READY_EVENT,Hf as AUDIO_CUE_EVENTS,sn as AUDIO_CUE_FAILED_EVENT,Ei as AUDIO_CUE_SCHEDULED_EVENT,ki as AUDIO_CUE_SKIPPED_EVENT,Si as AUDIO_CUE_SNAPSHOT_SCHEMA_VERSION,sr as AUDIO_CUE_STARTED_EVENT,ac as CAPABILITY_ASSET_KINDS,Ci as CAPABILITY_BLEND_MODES,cc as CAPABILITY_CART_KINDS,Ai as CAPABILITY_CLEAR_POLICIES,Vn as CAPABILITY_DEVICE_GRANTS,dc as CAPABILITY_INTEGRATIONS,sc as CAPABILITY_MANAGERS,Zf as CAPABILITY_MANIFEST_VERSION,oc as CAPABILITY_PHASES,ra as COMPOSITOR_BLEND_MODES,$g as COMPOSITOR_CLEAR_POLICIES,Hg as COMPOSITOR_SOURCE_KINDS,Do as CONTENT_REVISION_ACTIVATED_EVENT,Hr as CONTENT_REVISION_DIAGNOSTIC_EVENT,$r as CONTENT_REVISION_DISCOVERED_EVENT,El as CONTENT_REVISION_ERROR_CODES,Yh as CONTENT_REVISION_EVENTS,Ht as CONTENT_REVISION_MANIFEST_VERSION,Oo as CONTENT_REVISION_REJECTED_EVENT,Un as CONTENT_REVISION_ROLLED_BACK_EVENT,Fr as CONTENT_REVISION_SNAPSHOT_SCHEMA_VERSION,xo as CONTENT_REVISION_STAGING_EVENT,Jn as CONTENT_REVISION_SUPERSEDED_EVENT,_o as CONTENT_REVISION_VALIDATED_EVENT,bm as COORDINATE_SPACES,Ft as CUE_CANCELLED_EVENT,Ut as CUE_COMPLETED_EVENT,Vf as CUE_LIFECYCLE_EVENTS,_t as CUE_REPLACED_EVENT,Bt as CUE_STARTED_EVENT,jr as CYBERART_CANVAS_ATTR,Mo as DEFAULT_BROWSER_VIEWPORT,is as DEFAULT_DUCK_GAIN,Pc as DEFAULT_GROUP_HEIGHT,Ac as DEFAULT_GROUP_WIDTH,mi as DEFAULT_MAX_HOPS,Li as DEFAULT_MAX_INSPECTOR_RECORDS,Du as DEFAULT_MAX_SELECTION_RECORDS,Gc as DEFAULT_PORTAL_MAX_DEPTH,Bo as DEFAULT_PRODUCTION_SCENARIO_VIEWPORTS,Yt as DEFAULT_SENSITIVE_KEYS,di as ENGINE_SNAPSHOT_RUNTIME,or as EVENT_ENVELOPE_VERSION,Vm as EXECUTABLE_MODULE_ERROR_CODES,Ti as GEOMETRY_CONTRACT_VERSION,Jt as HOST_GRANT_SNAPSHOT_SCHEMA_VERSION,Ol as HOST_OWNED_AUDIO_EVENT_KINDS,tl as HOST_STATE_ACCEPTED_EVENT,En as HostChannel,Jd as INVALID_PRESENTATION_MODEL_MESSAGE,Ge as IncompatibleCartStateError,Gi as JOB_APPLIED_EVENT,Hi as JOB_AWAITING_EVALUATION_EVENT,ji as JOB_CANCELED_EVENT,Fi as JOB_CLAIMED_EVENT,Ws as JOB_DIAGNOSTIC_EVENT,nu as JOB_EVALUATOR_DECISIONS,Wi as JOB_FAILED_EVENT,vy as JOB_LIFECYCLE_EVENTS,Sr as JOB_ORCHESTRATION_SNAPSHOT_SCHEMA_VERSION,$i as JOB_PROGRESS_EVENT,Er as JOB_QUEUED_EVENT,Ki as JOB_READY_EVENT,ru as JOB_REDACTED_KEYS,Zc as JOB_RESULT_REF_SCHEMA_VERSION,tu as JOB_RETRYABILITY,qi as JOB_RETRY_SCHEDULED_EVENT,eu as JOB_STATES,Bi as JOB_SUBMITTED_EVENT,Ui as JOB_SUPERSEDED_EVENT,Ur as KeyboardManager,ai as LEGACY_SNAPSHOT_SCHEMA_VERSION,ev as MIDI_CHANNEL_MAX,Zb as MIDI_CHANNEL_MIN,Xb as MIDI_CONTROL_CHANGE,tv as MIDI_DATA_MAX,zb as MIDI_NOTE_OFF,Yb as MIDI_NOTE_ON,Qb as MIDI_PITCH_BEND,nv as MIDI_PITCH_CENTER,rv as MIDI_PITCH_MAX,La as MidiManager,vr as PORTAL_ABORTED_EVENT,zt as PORTAL_ENTERED_EVENT,Hs as PORTAL_EXCLUSIVE_GRANTS,br as PORTAL_EXITED_EVENT,oy as PORTAL_LIFECYCLE_EVENTS,gr as PORTAL_LIFECYCLE_SNAPSHOT_SCHEMA_VERSION,Wc as PORTAL_METAPHORS,jc as PORTAL_OUTCOME_KINDS,hr as PORTAL_OUTCOME_SCHEMA_VERSION,Dn as PRESENTATION_ADAPTER_VERSION,ul as PRESENTATION_AUDIO_CAPABILITY_STATUSES,To as PRESENTATION_BINDING_APPLIED_EVENT,Vr as PRESENTATION_BINDING_DIAGNOSTIC_EVENT,vl as PRESENTATION_BINDING_ERROR_CODES,hl as PRESENTATION_BINDING_EVENTS,Ro as PRESENTATION_BINDING_MANIFEST_VERSION,Lr as PRESENTATION_BINDING_REJECTED_EVENT,Mr as PRESENTATION_BINDING_SNAPSHOT_SCHEMA_VERSION,bl as PRESENTATION_BINDING_TARGET_KINDS,cl as PRESENTATION_COMPLETION_RULES,dl as PRESENTATION_INTERRUPTION_POLICIES,ll as PRESENTATION_INVOCATION_PHASES,ys as PRESENTATION_MODEL_EVENT,Ud as PRESENTATION_PHASES,Io as PRESENTATION_SEQUENCE_COMPLETED_EVENT,ma as PRESENTATION_SEQUENCE_DIAGNOSTIC_EVENT,sl as PRESENTATION_SEQUENCE_EVENTS,fa as PRESENTATION_SEQUENCE_FAILED_EVENT,ko as PRESENTATION_SEQUENCE_INTERRUPTED_EVENT,go as PRESENTATION_SEQUENCE_PRELOADING_EVENT,ho as PRESENTATION_SEQUENCE_READY_EVENT,yo as PRESENTATION_SEQUENCE_REQUESTED_EVENT,Eo as PRESENTATION_SEQUENCE_SKIPPED_EVENT,Dr as PRESENTATION_SEQUENCE_SNAPSHOT_SCHEMA_VERSION,bo as PRESENTATION_SEQUENCE_STARTED_EVENT,So as PRESENTATION_SEQUENCE_STEP_COMPLETED_EVENT,vo as PRESENTATION_SEQUENCE_STEP_STARTED_EVENT,Tf as PRESENTATION_SUBSCRIBE_PATTERNS,al as PRESENTATION_TRACK_KINDS,jd as PRESENTATION_UNSUPPORTED_EVENT,xl as PRODUCTION_SCENARIO_BOUNDARIES,$o as PRODUCTION_SCENARIO_DIAGNOSTIC_EVENT,_l as PRODUCTION_SCENARIO_ERROR_CODES,wl as PRODUCTION_SCENARIO_EVENTS,Gr as PRODUCTION_SCENARIO_FAILED_EVENT,Fo as PRODUCTION_SCENARIO_OBSERVED_EVENT,Oa as PRODUCTION_SCENARIO_SCHEMA_VERSION,Vo as PRODUCTION_SCENARIO_SNAPSHOT_SCHEMA_VERSION,Dl as PRODUCTION_SCENARIO_VIEWPORT_PRESETS,Jr as PointerManager,ht as REDACTED_VALUE,Ml as REDUCED_MOTION_ACTIVE_SEQUENCE_POLICY,Pb as REDUCED_MOTION_PARTICIPANT_IDS,yt as REJECTED_EVENT_TYPE,Gm as REMOTE_CART_ERROR_CODES,Ns as REMOTE_CART_GRANTS,wi as REMOTE_CART_MANIFEST_VERSION,xi as REMOTE_CART_SIGNATURE_ALG,Ni as REPLAY_INSPECTOR_SCHEMA_VERSION,gm as ROUND_TRIP_TOLERANCE,hm as ROUND_TRIP_TOLERANCE_CANVAS_PX,Yn as Random,_i as RemoteCartCapabilityError,Nu as SELECTION_DECISION_KINDS,ea as SELECTION_REASON_CODES,ao as SELECTION_TRACE_SCHEMA_VERSION,Mu as SELECTION_TRACE_SENSITIVE_KEYS,zu as SEMANTIC_APPEARANCE_KEYS,Uu as SEMANTIC_GEOMETRY_KINDS,Ju as SEMANTIC_HIT_TEST_POLICIES,Yg as SEMANTIC_INTERACTION_KEYS,wr as SEMANTIC_LAYER_SNAPSHOT_SCHEMA_VERSION,Cn as SILENT_ASSET_FALLBACK_REF,je as SNAPSHOT_SCHEMA_VERSION,Zo as UNVERSIONED_CART_VERSION,sh as VISUAL_LAYER_EVENTS,Or as VISUAL_LAYER_FAILED_EVENT,ah as VISUAL_LAYER_FAILURE_CODES,_r as VISUAL_LAYER_HIDDEN_EVENT,el as VISUAL_LAYER_INCOMING_SUFFIX,Qu as VISUAL_LAYER_KINDS,po as VISUAL_LAYER_REVEALED_EVENT,xr as VISUAL_LAYER_SNAPSHOT_SCHEMA_VERSION,Zu as VISUAL_LAYER_TRANSITIONS,mo as VISUAL_LAYER_TRANSITION_COMPLETED_EVENT,fo as VISUAL_LAYER_TRANSITION_STARTED_EVENT,Qi as WORLD_DISCOVERED_EVENT,cu as WORLD_EDGE_ACCESS,Xi as WORLD_EDGE_ADDED_EVENT,du as WORLD_EDGE_VISIBILITIES,uu as WORLD_ENTITY_KINDS,lu as WORLD_ENTITY_STATUSES,Cr as WORLD_GRAPH_DIAGNOSTIC_EVENT,Ly as WORLD_GRAPH_EVENTS,$n as WORLD_GRAPH_SNAPSHOT_SCHEMA_VERSION,au as WORLD_MAP_LAYERS,Yi as WORLD_NODE_ADDED_EVENT,zi as WORLD_NODE_KINDS,io as WORLD_PATCH_ACCEPTED_EVENT,Kn as WORLD_PATCH_DIAGNOSTIC_EVENT,Ru as WORLD_PATCH_ERROR_CODES,Yy as WORLD_PATCH_EVENTS,ku as WORLD_PATCH_OPS,Iu as WORLD_PATCH_PRECONDITION_TYPES,Cu as WORLD_PATCH_REDACTED_KEYS,oo as WORLD_PATCH_REJECTED_EVENT,Ar as WORLD_PATCH_SCHEMA_VERSION,no as WORLD_PATCH_SNAPSHOT_SCHEMA_VERSION,so as WORLD_PATCH_SUPERSEDED_EVENT,Rr as WORLD_TRANSIT_EVENT,aa as appearanceForState,ec as applyCueEasing,nr as applySnapshotMigrations,rn as assetStatusEvent,Im as assetToNormalized,ef as attachCartStatePersistence,Qd as attachPresentationAdapter,Bg as attachSelectionTrace,py as cabinetPortal,Ls as canonicalizeRemoteCartBody,Qr as canonicalizeSeed,kc as canvasToCss,Ic as canvasToNormalized,ym as capabilityManifestToJSON,ph as captureVisualLayers,kn as cloneSnapshotJson,Rf as comparePayloadSchemas,qs as compareReplayTraces,tb as contentRevisionEventContracts,Ae as createAssetFailure,on as createAssetPreloader,os as createAudioBroker,rc as createAudioCueTimeline,Ta as createBrowserHarness,ia as createCompositor,ub as createContentRevisionActivator,Pf as createContractRegistry,ir as createDeclaredAssetResolver,vd as createEngineSnapshotMigrations,us as createEventRouter,_s as createExecutableModuleHost,Vp as createFixtureAssetResolver,Es as createHeadlessAudioAdapter,Py as createHeadlessJobWorker,Fn as createHostGrantSet,Bp as createHostedAssetResolver,My as createJobCoordinator,Cm as createLandmarkRegistry,iu as createMemoryJobPersistence,wu as createMemoryWorldPersistence,gb as createPlaywrightCompatibleAdapter,my as createPortalLifecycle,Ea as createPresentationBindingRuntime,Rs as createPresentationLayout,ms as createPresentationModelEvent,ya as createPresentationSequencePlayer,Ot as createPresentationTimeline,$l as createProductionScenarioRunner,Xd as createReferencePresentationCart,ny as createRemoteCartRegistry,iy as createRemoteCartSandbox,sb as createRemoteContentAdapter,Vi as createReplayInspector,ss as createRuntime,ws as createRuntimeGroup,Fg as createSelectionTrace,ua as createSemanticLayerController,Sd as createSnapshotMigrationRegistry,ob as createStaticContentAdapter,zr as createVirtualClock,la as createVisualLayerController,bn as createWallClock,zy as createWorldGraph,Rg as createWorldPatchApplier,Ec as cssToCanvas,an as cssToNormalized,Ed as defaultSnapshotMigrationRegistry,dr as defineCapabilityManifest,et as defineDiagnostic,fs as defineIntent,wo as definePresentationBindings,Nr as definePresentationSequence,Vl as defineProductionScenario,Di as defineRemoteCartManifest,ci as defineSnapshot,fe as defineStateEvent,Cf as deriveAttachOptions,ld as describeReplayMismatch,er as detectSnapshotSchemaVersion,Am as drawGeometryDebug,Va as encodeMidiMessage,Pp as engineStateFromEnvelope,Sa as evaluatePresentationBindings,Gd as familyPatternForType,mn as fnv1aHex,Bn as freezeCapabilityBag,da as geometryKindsOf,Ms as hmacSha256Hex,Hd as inferEventKind,An as isAssetFailure,Td as isAssetFailureCode,Pn as isAssetKind,nc as isAudioCueEventType,lb as isContentRevisionErrorCode,Bf as isCueLifecycleType,Ll as isHostOwnedAudioEventKind,In as isLegacyCartStateBundle,Kl as isMidiChannel,Wr as isMidiData,Hh as isPresentationBindingErrorCode,$h as isPresentationBindingEventType,gs as isPresentationModel,zd as isPresentationPhase,pl as isPresentationSequenceEventType,_b as isProductionScenarioBoundary,xb as isProductionScenarioErrorCode,wb as isProductionScenarioEventType,Dg as isSelectionDecisionKind,Og as isSelectionReasonCode,uo as isSemanticBlendMode,th as isSemanticGeometryKind,sa as isSemanticHitTestPolicy,vp as isSnapshotEnvelope,Sp as isVersionedSnapshot,lh as isVisualLayerEventType,nl as isVisualLayerKind,rl as isVisualLayerTransitionKind,lg as isWorldPatchErrorCode,Ay as jobEventContracts,Kd as kindSegmentInType,Vs as listRequestedRemoteCartGrants,ry as loadRemoteCart,Bl as localizeProductionScenarioFailure,qd as matchEventPattern,iv as midiChannelFromStatus,Ho as midiStatus,Lf as mountPresentationAdapter,yi as normalizeEvent,km as normalizedToAsset,Rm as normalizedToCanvas,Cs as normalizedToCss,fy as paintingPortal,ar as parseAudioCueSnapshot,mm as parseCapabilityManifest,No as parseContentRevisionCatalog,Tm as parseGeometry,Na as parseMidiBytes,Hc as parseRemoteCartManifest,ui as parseSnapshot,Em as pointFromOrigin,dn as pointInHitbox,Yu as pointInSemanticGeometry,lr as pointerToRegion,qh as presentationBindingEventContracts,$t as presentationBindingTargetKey,kh as presentationSequenceEventContracts,Tb as productionScenarioEventContracts,Vg as recordSelectionDecision,Rc as rectToCanvas,As as rectToCss,Ps as regionToViewport,jp as registerCartStateHotkeys,qc as remoteCartProvenanceForSnapshot,Ks as replayExportedTrace,es as resolveImportableCartState,Zr as resolveRuntimeSeed,ts as restoreSnapshotFromUnknown,xd as rewriteHostedAssetRef,Qf as scheduleAudioCue,Pm as serializeGeometry,mr as sha256Hex,ty as signRemoteCartManifest,nn as snapshotErrorsToMessage,tr as snapshotFromCartBundle,cr as validateCapabilityManifest,Ts as validateGeometry,Rn as validateSnapshot,Af as verifyAttachOptions,yr as verifyRemoteCartSignature,il as visualIncomingLayerId,Jy as worldGraphEventContracts,ug as worldPatchEventContracts};
8
+ var Cp=Object.defineProperty;var ld=(e,t)=>()=>(e&&(t=e(e=0)),t);var Ap=(e,t)=>{for(var n in t)Cp(e,n,{get:t[n],enumerable:!0})};var Mp={};function Np(e,t){let n=e.indexOf(Rd);if(n===-1)return null;let r=n+Rd.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 ds,gi,Dp,sr,Rd,Cd=ld(()=>{"use strict";ds=/AudioWorkletProcessor with name:\s*["'`][^"'`]+["'`]\s+is already registered/i,gi="__cyberartWorkletPatchApplied";typeof window<"u"&&!window[gi]&&(window.addEventListener("error",e=>{let t=e?.message??"";ds.test(t)&&(e.preventDefault(),e.stopImmediatePropagation())},!0),window.addEventListener("unhandledrejection",e=>{let t=e?.reason,n=typeof t=="string"?t:t?.message??"";ds.test(n)&&e.preventDefault()}),window[gi]=!0);Dp=!1,sr=(...e)=>{Dp&&console.log("[workletPatch]",...e)},Rd="((AudioWorkletProcessor,registerProcessor)=>{";if(typeof AudioWorklet<"u"&&!AudioWorklet.prototype[gi]){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)),sr(`#${a} addModule`,{url:o.slice(0,64),isBlob:o.startsWith("blob:"),knownBefore:[...d]});let f=o,l=null;if(o.startsWith("blob:")){let k=null;try{k=await(await fetch(o)).text()}catch(E){sr(`#${a} blob fetch failed`,E)}if(k!==null){let E=new Set;for(let C of k.matchAll(t))E.add(C[1]);if(E.size>0){let C=[...E].filter(h=>d.has(h)),O=[...E].filter(h=>!d.has(h));if(C.length>0&&O.length===0){sr(`#${a} short-circuit \u2014 all processors already registered`,C);return}if(C.length>0&&O.length>0){let h=Np(k,C);if(h!==null){let A=new Blob([h],{type:"application/javascript"});l=URL.createObjectURL(A),f=l,sr(`#${a} rewrote blob; skipping`,C,"allowing",O)}else sr(`#${a} blob rewrite failed; passing original through`)}O.forEach(h=>d.add(h))}}}return n.call(this,f,s).then(()=>{l&&URL.revokeObjectURL(l)},k=>{l&&URL.revokeObjectURL(l);let E=(k&&k.message)??"";if(!(ds.test(E)||/already registered/i.test(E)))throw k})},AudioWorklet.prototype[gi]=!0}});var Pd={};Ap(Pd,{AUDIO_LIBRARIES:()=>cs,adaptersFor:()=>bi,importTone:()=>yi,normalizeAudioLibraries:()=>hi});async function yi(){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 hi(e){if(!e)return[];let t=Array.isArray(e)?e:[e],n=[];for(let r of t){if(!(r in cs)){console.warn(`Unknown audio library "${r}"`);continue}let i=r;n.includes(i)||n.push(i)}return n}function bi(e){return e.map(t=>cs[t])}var Ad,cs,us=ld(()=>{"use strict";Ad={id:"tone",async load(){await Promise.resolve().then(()=>(Cd(),Mp))},async unlock(){await Ad.load(),await(await yi()).start()},async resumeIfSuspended(){let e=await yi();e.context.state==="suspended"&&await e.context.resume()},async suspendIfRunning(){let t=(await yi()).context.rawContext;"suspend"in t&&t.state==="running"&&await t.suspend()}},cs={tone:Ad}});var pd=()=>{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"]},ct=window.devicePixelRatio||1,Sn=/Headless/i.test(navigator.userAgent),sS=/Android|webOS|iPhone|iPad|iPod|BlackBerry/i.test(navigator.userAgent)||/Android|webOS|iPhone|iPad|iPod|BlackBerry/i.test(navigator.platform);function fd(){return Math.min(window.innerWidth,window.innerHeight)}var ai="data-cyberart-canvas",En=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[${ai}]`)??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(ai)||this.canvas.setAttribute(ai,""),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/ct}px`,this.canvas.style.height=`${n/ct}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 md(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 gd(e,t=window.innerWidth,n=window.innerHeight){let r=fd(),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 di=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={}}},yd=di;var ci=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))}},hd=ci;function In(){return{now:()=>performance.now()}}function ui(e=0){let t=e;return{now:()=>t,set(n){t=n},advance(n){t+=n}}}var bd=(e,t,n,r)=>({now:e,startTime:t,elapsedSinceStart:e-t,deltaSinceLastUpdate:n===null?0:e-n,deltaSinceLastRender:r===null?0:e-r}),li=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=md(t,n),this.R=r,this.gameManager=s.gameManager,this.hostChannel=s.hostChannel,this.clock=s.clock??In(),this.kind=s.kind??"render",this.keyboardManager=new yd(!1,s.captureKeyboard??!0),this.kind!=="calculation"&&(this.canvas=new En(this.dimensionContext.width,this.dimensionContext.height,1,s.canvasMount),this.drawingContext=this.canvas.ctx,this.pointerManager=new hd(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=bd(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=bd(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 pi=class extends En{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 vd(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 sn=class{constructor(t){this.seed=t.hash,this.useA=!1,this.genA=vd(t.hash.substring(2,32)),this.genB=vd(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 Ed="bafybeicjwcq5lxxtfnyj4p2ugcr7ctyb5wl62cbcechj6tsabdq5whcs7u",Sd="https://salmon-just-firefly-671.mypinata.cloud/ipfs/";function Pp(e){return e.endsWith("/")?e:`${e}/`}var or=null;function Tp(e){return[...Array(e)].map(()=>Math.floor(Math.random()*16).toString(16)).join("")}function wp(e){return e&&e.length>0?e:[{cid:Ed}]}function xp(e){return e.startsWith("0x")?e:`0x${e}`}var Id=/^(0[xX])?[0-9a-fA-F]{64}$/;function _p(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 fi(e){let t=typeof e=="number"?String(e):e;return Id.test(t)?`0x${(t.startsWith("0x")||t.startsWith("0X")?t.slice(2):t).toLowerCase()}`:_p(t)}function mi(e,t){if(typeof e=="number"||t==="deterministic")return fi(e);let n=String(e);return Id.test(n)?fi(n):n.startsWith("0x")||n.startsWith("0X")?n:`0x${n}`}function Op(e){if(!e&&typeof tokenData<"u"&&tokenData?.hash)return{hash:tokenData.hash,tokenId:String(tokenData.tokenId),externalAssetDependencies:wp(tokenData.externalAssetDependencies),preferredIPFSGateway:Pp(tokenData.preferredIPFSGateway||Sd),preferredArweaveGateway:tokenData.preferredArweaveGateway};let t=typeof window<"u"?new URLSearchParams(window.location.search):new URLSearchParams;return{hash:e?xp(e):t.get("hash")||`0x${Tp(64)}`,tokenId:"18009999",externalAssetDependencies:[{cid:Ed}],preferredIPFSGateway:Sd}}function as(e){let t=e?.useCache!==!1;if(t&&or&&!e?.hash)return or;let n=Op(e?.hash);return t?or=n:or||(or=n),n}function kd(e){return new Array(32).fill(null).map((t,n)=>parseInt(e.hash.slice(2+n*2,4+n*2),16))}us();var vi="$cyberartTa",We=class extends Error{constructor(t){super(t),this.name="IncompatibleCartStateError"}},ls={Float32Array,Float64Array,Int8Array,Int16Array,Int32Array,Uint8Array,Uint8ClampedArray,Uint16Array,Uint32Array};function Lp(e){for(let t of Object.keys(ls))if(e instanceof ls[t])return t}function wd(e){return ArrayBuffer.isView(e)&&!(e instanceof DataView)}function gt(e){if(e===null||typeof e!="object"||Array.isArray(e))return!1;let t=Object.getPrototypeOf(e);return t===Object.prototype||t===null}function ps(e){return gt(e)?typeof e[vi]=="string"&&Array.isArray(e.d):!1}function Vp(e){return e==null?!1:typeof e=="function"?!0:!(typeof e!="object"||Array.isArray(e)||wd(e)||gt(e))}var Fp=new Set(["audioContextStarted","midiSynths","keepRatioPrimed","audioInitStarted","musicSeekApplied"]);function Td(e){return e===null?"null":ps(e)?String(e[vi]):Array.isArray(e)?"array":gt(e)?"object":typeof e}function Bp(e,t){return e===t||e==="null"||t==="null"}function Kt(e){return e.trim().toLowerCase().replace(/^0x/,"")}function xd(e,t,n,r){if(!(!n&&!r)&&Kt(e)!==Kt(t))throw new We(`Generative cart state is for seed "${t}", but the live token is "${e}"`)}function kn(e){return typeof e=="number"&&Number.isFinite(e)&&e>0}function _d(e,t){let n=e.dimensions;if(n&&kn(n.width)&&kn(n.height))return n;if(t&&kn(t.width)&&kn(t.height))return{width:t.width,height:t.height};if(gt(e.state)){let r=e.state.containerWidth,i=e.state.containerHeight;if(kn(r)&&kn(i))return{width:r,height:i}}return null}function Rn(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(wd(e)){let n=Lp(e);return n?{[vi]: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=Rn(s,t);a!==void 0&&(i.push(a),o++)}return e.length>0&&o===0?void 0:i}if(!gt(e)||Vp(e))return;let n=Object.keys(e),r={};for(let i of n){if(Fp.has(i))continue;let o=Rn(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 ar(e){if(ps(e)){let t=ls[e[vi]];return t?new t(e.d.map(n=>Number(n))):e}if(Array.isArray(e))return e.map(t=>ar(t));if(gt(e)){let t={};for(let n of Object.keys(e))t[n]=ar(e[n]);return t}return e}function fs(e,t,n,r,i=!0){if(i&&n&&r&&n!==r)throw new We(`Cart state is for "${r}", but the live cart is "${n}"`);if(!gt(t)){if(i)throw new We("Cart state snapshot is empty");return}let o=Object.keys(t);if(o.length===0){if(i)throw new We("Cart state snapshot is empty");return}let s=Rn(e);if(!gt(s)||Object.keys(s).length===0){if(i)throw new We("Live cart has no serializable state");return}let a=o.filter(d=>d in s);if(a.length===0){if(i)throw new We("Cart state snapshot does not overlap the live cart shape");return}for(let d of a){let f=Td(s[d]),l=Td(t[d]);if(!Bp(f,l))throw new We(`Cart state field "${d}" has type ${l}, live cart expects ${f}`);if(f==="object"){let k=t[d],E=e[d];gt(k)&&!ps(k)&&fs(E,k,void 0,void 0,!1)}}}function Od(e,t){if(!gt(e)||!gt(t))return;let n=Rn(e);if(gt(n))for(let r of Object.keys(t))r in n&&(e[r]=ar(t[r]))}function ot(e){let t=typeof e=="string"?JSON.parse(e):e;if(!t||typeof t!="object")throw new We("Cart state bundle is not an object");if(t.version!==1)throw new We(`Unsupported cart state version ${String(t.version)}`);if(typeof t.seed!="string"||typeof t.framesElapsed!="number")throw new We("Cart state bundle is missing seed or framesElapsed");return t}var ze="cyberart.asset.ready",je="cyberart.asset.failed";function Wt(e){try{return JSON.parse(JSON.stringify(e))}catch{return e}}function yt(e){try{return JSON.stringify(e)}catch{return String(e)}}function ms(e,t,n){let r=t??[],i=n??[],o=Math.max(r.length,i.length);for(let s=0;s<o;s++)if(yt(r[s])!==yt(i[s]))return`${e}[${s}]: ${yt(r[s])} vs ${yt(i[s])}`}function Dd(e,t){let n=[];e.seed!==t.seed&&n.push(`seed: ${e.seed} vs ${t.seed}`),e.clock.framesElapsed!==t.clock.framesElapsed&&n.push(`framesElapsed: ${e.clock.framesElapsed} vs ${t.clock.framesElapsed}`),e.clock.now!==t.clock.now&&n.push(`now: ${e.clock.now} vs ${t.clock.now}`),e.clock.frameRate!==t.clock.frameRate&&n.push(`frameRate: ${e.clock.frameRate} vs ${t.clock.frameRate}`),yt(e.rng)!==yt(t.rng)&&n.push(`rng: ${yt(e.rng)} vs ${yt(t.rng)}`);let r=ms("actions",e.actions,t.actions);r&&n.push(r);let i=ms("applied",e.applied,t.applied);i&&n.push(i);let o=ms("events",e.events,t.events);return o&&n.push(o),yt(e.state)!==yt(t.state)&&n.push(`state: ${yt(e.state)} vs ${yt(t.state)}`),n}function Nd(e){return{type:e.status==="ready"?ze:je,kind:"state",payload:e.detail===void 0?{id:e.id}:{id:e.id,detail:e.detail}}}function Hp(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 qp(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 Gp=[[0,0],[16,9],[9,16],[4,3],[3,4],[2,1],[1,2],[3,1],[1,3],[1,1]],ys=Gp[0],Kp=ys[0]/ys[1],gs=30,Wp=120,jp=3840/2160,Up=2160/3840,Si=class{constructor(t=gs,n=!1,r=window.innerWidth,i=window.innerHeight,o=!0,s,a={}){this.framesElapsed=0;this.frameRate=gs;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=hi(a.audio),this.audioLibrariesInternal=this.fallbackAudio,this.kind=a.kind??"render",this.onFrameTiming=a.onFrameTiming;let d=a.deterministic;this.deterministic=!!d;let f=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=ui(f.origin??0),this.clock=this.virtualClock;this.initialScriptedActions=Wt(f.actions??[]),this.scriptedActions=Wt(this.initialScriptedActions)}else this.clock=a.clock??In();this.isBodyCanvas=this.container?!1:o,this.autoMode=n,this.aspectRatio=Kp,this.selectedAsp=ys,this.isFullscreen=!!document.fullscreenElement,this.updateFrameRate(t),this.tempUnpause=!1,this.synchronous=Sn,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?as({hash:this.seed,useCache:!1}):as(),this.rawParams=kd(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]=gd(n,this.containerWidth,this.containerHeight);r*=ct,i*=ct,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 pi(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 sn(this.tokenData),o=new li(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=Wt(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??gs,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=hi(t.metadata?.audio)}async unlockAudio(){if(this.audioLibrariesInternal.length===0)return;let t=bi(this.audioLibrariesInternal);if(Sn){for(let n of t)await n.load();return}for(let n of t)await n.unlock()}async resumeAudioLibraries(){if(!(this.paused||Sn))for(let t of bi(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(Wt(t))}async getReplayMetadata(){let t=await this.exportState();return{seed:this.tokenData.hash,clock:this.getClock(),rng:this.getRandomState(),actions:Wt(this.scriptedActions),applied:Wt(this.appliedActions),events:Wt(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(Nd(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:ct},state:Rn(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=ot(t),o=this._paused,s=this.loopRunning;this.paused=!0,await this.waitUntilUpdateIdle(),fs(r.cartState,i.state,this.animationCart?.metadata?.id,i.cartId),xd(this.tokenData.hash,i.seed,this.animationCart?.metadata?.generative,i.generative),clearTimeout(this.reinitTimeout),this.reinitPending=!1,this.importing=!0;let a=_d(i,n?.framebuffer??this.lastExportedFramebuffer);if(a){this.pinOutputSize(a);let l=a.cssWidth??a.width/ct,k=a.cssHeight??a.height/ct;qp(l,k),this.syncContainerFromDom(),this.pinViewportAtImport={w:this.containerWidth,h:this.containerHeight}}let d=this.customState,f=!1;try{if(this.customState=ar(i.state),this.unloadCart(),!this.prepareCart(this.animationCart))throw new Error("Failed to prepare cart while loading state");this.animation.cartState!==this.customState&&Od(this.animation.cartState,i.state),this.framesElapsed=i.framesElapsed;let l=this.animation,k=l.cartState,E=typeof i.elapsedSinceStart=="number"?i.elapsedSinceStart:Hp(k);l.restoreClock(E,typeof k?.startTime=="number"?k.startTime:void 0),o&&l.setPaused(!0);let C=n?.framebuffer??this.lastExportedFramebuffer;this.kind!=="calculation"&&(C&&l.restoreFramebuffer(C)?k.keepRatioPrimed=!0:await l.renderAnimation(this.framesElapsed,this.rawParams)),this.fitPinnedCanvas(),f=!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,f&&(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&&!Sn&&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/ct,h:t.cssHeight??t.height/ct}}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/ct,s=t.height/ct;if(o<1||s<1||r<1||i<1)return;let a=Math.min(r/o,i/s),d=o*a,f=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=`${f}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,f=0,l=0,k=0;try{if(r||!this.paused||this.tempUnpause){if(!Sn&&!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&&(f=performance.now()-C),this.updateInProgress=!1,this.kind!=="calculation"){a="render";let O=d?performance.now():0;await this.animation.renderAnimation(this.framesElapsed,this.rawParams,t),d&&(l=performance.now()-O)}if(this.autoMode&&this.animation.cartState.saveToken&&!this.savedToken&&!new URLSearchParams(window.location.search).get("hash")){let A=localStorage.getItem("goodones"),F=JSON.stringify(A?[...JSON.parse(A),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 E=d?performance.now():0;this.drawIt(),d&&(k=performance.now()-E)}catch(E){o=!0,s=E,this.handleFrameError(E,a)}finally{this.updateInProgress=!1,d&&!o&&d({frame:this.framesElapsed,updateMs:f,renderMs:l,drawMs:k,totalMs:f+l+k})}o?(this.consecutiveErrorCount++,this.consecutiveErrorCount>=Wp&&(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(jp,Math.max(Up,o))}else this.aspectRatio=t[0]/t[1]}};var Jp="HostChannel has been destroyed",Cn=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(Jp)}};var Ue=2,Ii=1,ki="0.0.5",bs="0",Ld="1970-01-01T00:00:00.000Z";function He(e){if(e===null||typeof e!="object"||Array.isArray(e))return!1;let t=Object.getPrototypeOf(e);return t===Object.prototype||t===null}function An(e){return JSON.parse(JSON.stringify(e))}function Ie(e,t,n,r){e.push(r?{code:t,detail:n,path:r}:{code:t,detail:n})}function Vd(e,t,n){try{let r=JSON.stringify(e);if(r===void 0){Ie(n,"invalid-field",`${t} is not JSON-serializable`,t);return}return JSON.parse(r)}catch{Ie(n,"invalid-field",`${t} is not JSON-serializable`,t);return}}function Ve(e){return typeof e=="string"&&e.length>0}function Ei(e){return typeof e=="number"&&Number.isFinite(e)}function zp(e){return typeof e=="string"&&Number.isFinite(Date.parse(e))}function Pn(e){return!He(e)||typeof e.schemaVersion=="number"?!1:typeof e.version=="number"&&typeof e.seed=="string"&&typeof e.framesElapsed=="number"&&"state"in e}function Yp(e){return He(e)&&e.schemaVersion===Ue&&He(e.engineState)}function Xp(e){return He(e)&&typeof e.schemaVersion=="number"&&He(e.engineState)}function dr(e){if(He(e)){if(typeof e.schemaVersion=="number")return Number.isInteger(e.schemaVersion)?e.schemaVersion:void 0;if(Pn(e))return Ii}}function hs(e,t,n){try{return An(ot(e))}catch(r){let i=r instanceof Error?r.message:"engineState is not a cart state bundle";Ie(n,"invalid-engine-state",i,t);return}}function Qp(e,t,n){if(!He(e)){Ie(n,"invalid-field","cart must be an object",t);return}Ve(e.id)||Ie(n,"invalid-field","cart.id must be a non-empty string",`${t}.id`),Ve(e.version)||Ie(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"?Ie(n,"invalid-field","cart.generative must be a boolean",`${t}.generative`):r.generative=e.generative),r.id&&r.version?r:void 0}function Zp(e,t,n){if(!He(e)){Ie(n,"invalid-field","clock must be an object",t);return}if(!Ei(e.framesElapsed)){Ie(n,"invalid-field","clock.framesElapsed must be a finite number",`${t}.framesElapsed`);return}let r={framesElapsed:e.framesElapsed};return e.elapsedSinceStart!==void 0&&(Ei(e.elapsedSinceStart)?r.elapsedSinceStart=e.elapsedSinceStart:Ie(n,"invalid-field","clock.elapsedSinceStart must be a finite number",`${t}.elapsedSinceStart`)),e.now!==void 0&&(Ei(e.now)?r.now=e.now:Ie(n,"invalid-field","clock.now must be a finite number",`${t}.now`)),e.frameRate!==void 0&&(Ei(e.frameRate)?r.frameRate=e.frameRate:Ie(n,"invalid-field","clock.frameRate must be a finite number",`${t}.frameRate`)),r}function ef(e,t,n){if(e===void 0)return;if(!Array.isArray(e)){Ie(n,"invalid-field","modules must be an array",t);return}let r=[];return e.forEach((i,o)=>{let s=`${t}[${o}]`;if(!He(i)||!Ve(i.id)||!Ve(i.version)){Ie(n,"invalid-field","module refs need non-empty id and version",s);return}r.push({id:i.id,version:i.version})}),r}function tf(e,t,n){if(e===void 0)return;if(!Array.isArray(e)){Ie(n,"invalid-field","assets must be an array",t);return}let r=[];return e.forEach((i,o)=>{let s=`${t}[${o}]`;if(!He(i)||!Ve(i.id)){Ie(n,"invalid-field","asset refs need a non-empty id",s);return}let a={id:i.id};i.version!==void 0&&(Ve(i.version)?a.version=i.version:Ie(n,"invalid-field","asset.version must be a non-empty string",`${s}.version`)),i.ref!==void 0&&(Ve(i.ref)?a.ref=i.ref:Ie(n,"invalid-field","asset.ref must be a non-empty string",`${s}.ref`)),r.push(a)}),r}function nf(e,t,n){if(e===void 0)return;if(!He(e)||!Ve(e.seed)){Ie(n,"invalid-field","rng must include a seed",t);return}if(!He(e.prngA)||!He(e.prngB)){Ie(n,"invalid-field","rng must include prngA and prngB",t);return}if(typeof e.useA!="boolean"){Ie(n,"invalid-field","rng.useA must be a boolean",`${t}.useA`);return}return Vd(e,t,n)}function rf(e,t,n){if(e===void 0)return;if(!He(e)){Ie(n,"invalid-field","provenance must be an object",t);return}let r={};if(e.source!==void 0&&(Ve(e.source)?r.source=e.source:Ie(n,"invalid-field","provenance.source must be a non-empty string",`${t}.source`)),e.integrity!==void 0&&(!He(e.integrity)||!Ve(e.integrity.alg)||!Ve(e.integrity.hash)?Ie(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&&(Ve(e.publisher)?r.publisher=e.publisher:Ie(n,"invalid-field","provenance.publisher must be a non-empty string",`${t}.publisher`)),e.version!==void 0&&(Ve(e.version)?r.version=e.version:Ie(n,"invalid-field","provenance.version must be a non-empty string",`${t}.version`)),e.signature!==void 0&&(!He(e.signature)||!Ve(e.signature.id)||!Ve(e.signature.alg)?Ie(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))Ie(n,"invalid-field","provenance.grants must be an array",`${t}.grants`);else{let i=[];e.grants.forEach((o,s)=>{Ve(o)?i.push(o):Ie(n,"invalid-field","provenance.grants entries must be non-empty strings",`${t}.grants[${s}]`)}),r.grants=i}return r}function Fd(e,t){e.schemaVersion!==void 0&&e.schemaVersion!==Ue&&Ie(t,"invalid-schema",`defineSnapshot produces schema ${Ue}`,"schemaVersion"),Ve(e.seed)||Ie(t,"invalid-field","seed must be a non-empty string","seed");let n=e.runtimeVersion===void 0?ki:e.runtimeVersion;Ve(n)||Ie(t,"invalid-field","runtimeVersion must be a non-empty string","runtimeVersion");let r=e.createdAt===void 0?new Date().toISOString():e.createdAt;zp(r)||Ie(t,"invalid-field","createdAt must be an ISO-8601 date","createdAt");let i=Qp(e.cart,"cart",t),o=Zp(e.clock,"clock",t),s=hs(e.engineState,"engineState",t),a=ef(e.modules,"modules",t),d=tf(e.assets,"assets",t),f=nf(e.rng,"rng",t),l=rf(e.provenance,"provenance",t),k;if(e.hostState!==void 0&&(k=Vd(e.hostState,"hostState",t)),e.hostStateRef!==void 0&&!Ve(e.hostStateRef)&&Ie(t,"invalid-field","hostStateRef must be a non-empty string","hostStateRef"),t.length>0||!i||!o||!s||!Ve(e.seed))return;let E={schemaVersion:Ue,runtimeVersion:n,cart:i,seed:e.seed,clock:o,engineState:s,createdAt:r};return a&&a.length>0&&(E.modules=a),f&&(E.rng=f),k!==void 0&&(E.hostState=k),Ve(e.hostStateRef)&&(E.hostStateRef=e.hostStateRef),d&&d.length>0&&(E.assets=d),l&&(l.source||l.integrity||l.publisher||l.version||l.signature||l.grants)&&(E.provenance=l),E}function Ri(e){if(!He(e))return{ok:!1,errors:[{code:"invalid-snapshot",detail:"Snapshot input is not an object"}]};let t=[],n=Fd(e,t);return!n||t.length>0?{ok:!1,errors:t}:{ok:!0,snapshot:n}}function cr(e,t){return Ve(e.cartId)?Ri({cart:{id:e.cartId,version:t?.cartVersion??bs,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 Md(e){let t=An(e),n={schemaVersion:Ii,engineState:t,seed:t.seed,clock:{framesElapsed:t.framesElapsed,elapsedSinceStart:t.elapsedSinceStart}};return t.cartId&&(n.cart={id:t.cartId,version:bs,generative:t.generative}),n}function Ci(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(!He(t))return{ok:!1,errors:[{code:"invalid-snapshot",detail:"Snapshot is not an object"}]};if(Pn(t))try{return{ok:!0,snapshot:Md(ot(t))}}catch(r){return{ok:!1,errors:[{code:"invalid-engine-state",detail:r instanceof Error?r.message:"Cart state bundle is invalid"}]}}let n=dr(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===Ii){let r=[],i=hs(t.engineState,"engineState",r);return!i||r.length>0?{ok:!1,errors:r}:{ok:!0,snapshot:Md(i)}}if(n!==Ue){if(n>Ue)return{ok:!1,errors:[{code:"unsupported-schema",detail:`Snapshot schema ${n} is newer than ${Ue}`,path:"schemaVersion"}]};let r=[],i=hs(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 Tn(t)}function Tn(e){if(!He(e))return{ok:!1,errors:[{code:"invalid-snapshot",detail:"Snapshot is not an object"}]};if(e.schemaVersion!==Ue)return{ok:!1,errors:[{code:"invalid-schema",detail:`Expected snapshot schema ${Ue}`,path:"schemaVersion"}]};let t=[],n=Fd(e,t);return!n||t.length>0?{ok:!1,errors:t}:{ok:!0,snapshot:n}}function an(e){return e.map(t=>t.detail).join("; ")}function Bd(e){if(Pn(e))return ot(e);if(He(e)&&e.engineState!==void 0)return ot(e.engineState);throw new Error("Legacy snapshot is missing engine state")}function of(e){return ot(An(e.engineState))}function Hd(){return[{from:1,to:2,migrate:af}]}function qd(e){let t=[...e?.migrations??Hd()],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 sf=qd();function Gd(){return sf}function af(e){let t=Bd(e),n=cr(t,{createdAt:Ld,runtimeVersion:ki});if(n.ok===!1)throw new Error(an(n.errors));return n.snapshot}function $d(e){try{return An(e)}catch{return}}function ur(e,t=Gd()){let n=$d(e);if(n===void 0)return{ok:!1,errors:[{code:"invalid-snapshot",detail:"Snapshot is not JSON-serializable"}]};let r=n,i=dr(r);if(i===void 0){let o=Ci(r);if(o.ok===!1)return o;r=o.snapshot,i=o.snapshot.schemaVersion}if(i>Ue)return{ok:!1,errors:[{code:"unsupported-schema",detail:`Snapshot schema ${i} is newer than ${Ue}`,path:"schemaVersion"}]};if(i===Ue)return Tn(r);for(;i<Ue;){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($d(r))}catch(d){let f=d instanceof Error?d.message:"Migration threw";return{ok:!1,errors:[{code:"invalid-migration-result",detail:`Migration ${o.from} \u2192 ${o.to} failed: ${f}`,path:"schemaVersion"}]}}let a=dr(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===Ue){let d=Tn(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 Tn(r)}function vs(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=ur(n,t);if(i.ok===!1)return i;try{return{ok:!0,bundle:ot(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:ot(n)}}catch(i){return{ok:!1,errors:[{code:"invalid-engine-state",detail:i instanceof Error?i.message:"Cart state bundle is invalid"}]}}}function Ss(e,t){let n=Ci(e);return n.ok===!1?n:ur(n.snapshot,t)}var Jd=["image","audio","font","spritesheet"],zd=["timeout","cors","not-found","invalid","aborted","resolver","undeclared","hash-mismatch","unsigned"],wn="cyberart:fallback/silent",Kd="Asset preloader has been destroyed",df=4,cf=new Set(Jd),uf=new Set(zd),lf={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 _n(e){return typeof e=="string"&&cf.has(e)}function Yd(e){return typeof e=="string"&&uf.has(e)}function xn(e){if(!e||typeof e!="object")return!1;let t=e;return typeof t.id=="string"&&typeof t.ref=="string"&&Yd(t.code)&&typeof t.message=="string"}function Ae(e){return{id:e.id,ref:e.ref,code:e.code,message:e.message&&e.message.length>0?e.message:lf[e.code]}}function dn(e,t){return{type:e==="ready"?ze:je,kind:"state",payload:t}}function Ai(e){if(!e?.aborted)return;let t=new Error("aborted");throw t.name="AbortError",t}function pf(e){return e instanceof Error&&e.name==="AbortError"||typeof DOMException<"u"&&e instanceof DOMException&&e.name==="AbortError"}function Es(e){return e?{...e}:void 0}function Dt(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=Es(e.provenance)),e.cors!==void 0&&(t.cors=e.cors),e.usedFallback&&(t.usedFallback=!0),e.managed&&(t.managed=!0),t}function lr(e){return{id:e.id,ref:e.ref,code:e.code,message:e.message}}function ff(e){if(e.state==="ready"){let t={state:"ready",resource:Dt(e.resource)};return e.failure&&(t.failure=lr(e.failure)),t}return e.state==="failed"?{state:"failed",failure:lr(e.failure)}:{state:e.state}}function mf(e){return/^https?:/i.test(e)}function Xd(e){return e.endsWith("/")?e:`${e}/`}function Qd(e,t){let n=Xd(t);if(/^(https?:|data:|blob:)/i.test(e))return e;let r=/^moltazine:post\/([^#]+)#(.+)$/.exec(e);if(r)return`${n}moltazine/${encodeURIComponent(r[1])}/${r[2]}`;let i=/^world:asset\/(.+)$/.exec(e);if(i)return`${n}world/${i[1]}`;let o=/^library:(.+)$/.exec(e);return o?`${n}library/${o[1]}`:`${n}${e.replace(/^\//,"")}`}function gf(e){return{async resolve(t,n){Ai(n);let r=e[t.ref];if(!r)throw Ae({id:t.id,ref:t.ref,code:"not-found",message:`no fixture for ${t.ref}`});if("error"in r)throw Ae({id:t.id,ref:t.ref,code:r.error,message:r.message});return{id:t.id,ref:t.ref,type:t.type,url:r.url,integrity:r.integrity??t.integrity,cors:r.cors??"omit",provenance:r.provenance??t.provenance}}}}function yf(e){let t=Xd(e.cdnBase);return{async resolve(n,r){Ai(r);let i=e.failures?.[n.ref];if(i){let s=typeof i=="string"?i:i.code,a=typeof i=="string"?void 0:i.message;throw Ae({id:n.id,ref:n.ref,code:s,message:a})}let o=Qd(n.ref,t);return{id:n.id,ref:n.ref,type:n.type,url:o,integrity:n.integrity,cors:mf(o)?"anonymous":"omit",provenance:n.provenance}}}}function hf(e){let t="";for(let n=0;n<e.length;n++)t+=e[n].toString(16).padStart(2,"0");return t}async function bf(e){let t=await crypto.subtle.digest("SHA-256",e);return hf(new Uint8Array(t))}function vf(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 pr(e){let t=e.declared,n=e.fetchBytes,r=e.hashBytes??bf;return{async resolve(i,o){Ai(o);let s=t[i.ref];if(!s)throw Ae({id:i.id,ref:i.ref,code:"undeclared",message:`undeclared asset ref "${i.ref}"`});if(!s.hash||typeof s.hash!="string")throw Ae({id:i.id,ref:i.ref,code:"unsigned",message:`unsigned asset "${i.ref}"`});let a=await n(s.url);if(Ai(o),!a)throw Ae({id:i.id,ref:i.ref,code:"unsigned",message:`no signed bytes for "${s.url}"`});if(await r(a)!==s.hash)throw Ae({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:vf(a),integrity:`sha256-${s.hash}`,cors:"omit",provenance:i.provenance}}}}function Sf(e){if(!e||typeof e!="object")return Ae({id:"",ref:"",code:"invalid",message:"declaration is required"});if(typeof e.id!="string"||e.id.length===0)return Ae({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 Ae({id:e.id,ref:"",code:"invalid",message:"ref is required"});if(!_n(e.type))return Ae({id:e.id,ref:e.ref,code:"invalid",message:`unsupported type ${String(e.type)}`});if(e.integrity!==void 0&&typeof e.integrity!="string")return Ae({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 Ae({id:e.id,ref:e.ref,code:"invalid",message:"timeoutMs must be a non-negative finite number"})}function Wd(e){return{id:e.id,ref:wn,type:e.type,url:wn,usedFallback:!0,cors:"omit"}}function jd(e,t){return xn(t)?{id:e.id,ref:e.ref,code:t.code,message:t.message}:pf(t)?Ae({id:e.id,ref:e.ref,code:"aborted"}):Ae({id:e.id,ref:e.ref,code:"resolver",message:t instanceof Error?t.message:String(t)})}function Ud(e,t){if(!t||typeof t.url!="string"||t.url.length===0)throw Ae({id:e.id,ref:e.ref,code:"invalid",message:"resolver returned no url"});if(t.integrity&&e.integrity&&t.integrity!==e.integrity)throw Ae({id:e.id,ref:e.ref,code:"invalid",message:"integrity mismatch"});let n=Dt(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=Es(e.provenance)),n}function cn(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,f=new Map,l=new Set,k=!1;function E(S){return S.code==="aborted"||S.code==="timeout"}function C(S,D,B){let w=jd(S,B);return w.code==="timeout"?w:D.aborted?Ae({id:S.id,ref:S.ref,code:"aborted"}):w}function O(S,D){let B=f.get(S);B||(B=new Set,f.set(S,B)),B.add(D)}function h(S){if(S?.state==="ready")return`${S.resource.type}\0${S.resource.ref}`}function A(S,D){for(let[B,w]of f)if(B!==D&&w.has(S))return!0;for(let[B,w]of r)if(B!==D&&h(w)===S)return!0;return!1}function F(S,D){let B=new Set(f.get(S)),w=h(D);w&&B.add(w),f.delete(S);for(let y of B)A(y,S)||a.delete(y)}function W(){let S=0,D=0,B=0,w=0,y={};for(let[_,L]of r)y[_]=ff(L),L.state==="pending"||L.state==="loading"?S+=1:L.state==="failed"?B+=1:(D+=1,(L.resource.usedFallback||L.failure)&&(w+=1));return{total:r.size,pending:S,ready:D,failed:B,fallbacks:w,items:y,failures:i.map(lr)}}function x(){if(l.size===0)return;let S=W();for(let D of l)D(S)}function N(S){i.push(lr(S))}function P(S){k||!t||!e.dispatch||e.dispatch(S)}function u(S){if(S?.managed&&S.url.startsWith("blob:")&&!(typeof URL>"u"||typeof URL.revokeObjectURL!="function"))try{URL.revokeObjectURL(S.url)}catch{}}function v(S,D){if(k)return;let B=r.get(S);B?.state==="ready"&&u(B.resource),r.set(S,D),x()}function c(S){if(S.fallback!==void 0)return S.fallback==="silent"?{id:`${S.id}::fallback`,ref:wn,type:S.type}:typeof S.fallback=="string"?{id:`${S.id}::fallback`,ref:S.fallback,type:S.type}:{...S.fallback,id:typeof S.fallback.id=="string"&&S.fallback.id.length>0?S.fallback.id:`${S.id}::fallback`}}function p(S,D,B){let w=`${S.type}\0${S.ref}`,y=a.get(w);if(y)return D.aborted?Promise.reject(Ae({id:S.id,ref:S.ref,code:"aborted"})):(O(B,w),Promise.resolve(Dt(y.resource)));if(D.aborted)return Promise.reject(Ae({id:S.id,ref:S.ref,code:"aborted"}));let _=d.get(w);if(!_){let H=new AbortController,G={id:S.id,ref:S.ref,type:S.type};S.integrity!==void 0&&(G.integrity=S.integrity),S.provenance&&(G.provenance=Es(S.provenance)),_={promise:Promise.resolve().then(()=>e.resolver.resolve(G,H.signal)).then(Y=>{let K=Ud(S,Y);if(H.signal.aborted)throw Ae({id:S.id,ref:S.ref,code:"aborted"});return a.set(w,{resource:Dt(K)}),K}).catch(Y=>{throw jd(S,Y)}).finally(()=>{d.delete(w)}),controller:H,waiters:0},d.set(w,_)}let L=_;return L.waiters+=1,new Promise((H,G)=>{let ee=!1,Y=(g,b)=>{ee||(ee=!0,D.removeEventListener("abort",K),L.waiters-=1,b&&L.waiters<=0&&L.controller.abort(),g())},K=()=>{Y(()=>G(Ae({id:S.id,ref:S.ref,code:"aborted"})),!0)};if(D.aborted){K();return}D.addEventListener("abort",K,{once:!0}),L.promise.then(g=>{if(!ee){if(D.aborted){K();return}O(B,w),Y(()=>H(Dt(g)),!1)}},g=>{if(!ee){if(D.aborted){K();return}Y(()=>G(g),!1)}})})}function m(S,D,B){if(D.aborted)return Promise.reject(Ae({id:S.id,ref:S.ref,code:"aborted"}));if(S.ref===wn)return Promise.resolve(Wd(S));let w=new AbortController,y=()=>w.abort();D.addEventListener("abort",y,{once:!0});let _=S.timeoutMs??e.timeoutMs,L,H=!1;return n&&_!==void 0&&_>0&&Number.isFinite(_)&&(L=setTimeout(()=>{H=!0,w.abort()},_)),p(S,w.signal,B).then(G=>{let ee=Ud(S,G);return ee.id=S.id,ee}).catch(G=>{throw H?Ae({id:S.id,ref:S.ref,code:"timeout"}):G}).finally(()=>{L!==void 0&&clearTimeout(L),D.removeEventListener("abort",y)})}async function I(S,D,B,w){try{return{resource:await m(S,D,w)}}catch(y){let _=C(S,D,y);if(E(_)||D.aborted||B>=df)throw _;let L=c(S);if(!L)throw _;if(D.aborted)throw Ae({id:S.id,ref:S.ref,code:"aborted"});if(S.fallback==="silent"||L.ref===wn)return{resource:Wd(S),failure:_};try{let H=await I(L,D,B+1,w);return{resource:{...Dt(H.resource),id:S.id,usedFallback:!0},failure:_}}catch(H){let G=xn(H)&&!E(H)&&!D.aborted?H:C(S,D,H);throw!E(G)&&!D.aborted&&N(_),G}}}async function T(S,D){if(k)throw new Error(Kd);let B=r.get(S.id);if(B?.state==="ready"||B?.state==="failed")return;let w=o.get(S.id);if(w){await w;return}let y=(async()=>{let _=Sf(S);if(_){v(S.id,{state:"failed",failure:_}),N(_),P(dn("failed",{id:S.id,ref:S.ref,failure:_}));return}v(S.id,{state:"loading"});let L=s.get(S.id)??new AbortController;s.has(S.id)||s.set(S.id,L);try{let H=await I(S,L.signal,D,S.id);if(k)return;if(L.signal.aborted){let G=Ae({id:S.id,ref:S.ref,code:"aborted"});v(S.id,{state:"failed",failure:G}),N(G),P(dn("failed",{id:S.id,ref:S.ref,failure:G}));return}if(H.resource.id=S.id,H.failure){v(S.id,{state:"ready",resource:H.resource,failure:H.failure}),N(H.failure),P(dn("failed",{id:S.id,ref:S.ref,failure:H.failure,resource:Dt(H.resource)})),P(dn("ready",{id:S.id,ref:H.resource.ref,resource:Dt(H.resource),failure:H.failure}));return}v(S.id,{state:"ready",resource:H.resource}),P(dn("ready",{id:S.id,ref:S.ref,resource:Dt(H.resource)}))}catch(H){if(k)return;let G=xn(H)&&!E(H)&&!L.signal.aborted?{...lr(H),id:S.id}:C(S,L.signal,H);v(S.id,{state:"failed",failure:G}),N(G),P(dn("failed",{id:S.id,ref:S.ref,failure:G}))}finally{s.get(S.id)===L&&s.delete(S.id)}})();o.set(S.id,y);try{await y}finally{o.delete(S.id)}}return{async preload(S){if(k)throw new Error(Kd);let D=Array.isArray(S)?S:[];for(let B of D)B&&typeof B.id=="string"&&B.id.length>0&&(r.has(B.id)||r.set(B.id,{state:"pending"}),s.has(B.id)||s.set(B.id,new AbortController));return x(),await Promise.all(D.map(B=>T(B,0))),W()},get(S){let D=r.get(S);if(D?.state==="ready")return Dt(D.resource)},getProgress(){return W()},onProgress(S){return l.add(S),()=>{l.delete(S)}},abort(S){if(!k){if(S!==void 0){s.get(S)?.abort();return}for(let D of s.values())D.abort()}},forget(S){if(k)return;if(S===void 0){for(let B of r.values())B.state==="ready"&&u(B.resource);r.clear(),i.length=0,a.clear(),f.clear(),x();return}let D=r.get(S);D?.state==="ready"&&u(D.resource),F(S,D),r.delete(S);for(let B=i.length-1;B>=0;B--)i[B].id===S&&i.splice(B,1);x()},dispose(){if(!k){k=!0;for(let S of s.values())S.abort();s.clear();for(let S of r.values())S.state==="ready"&&u(S.resource);r.clear(),i.length=0,o.clear();for(let S of d.values())S.controller.abort();a.clear(),d.clear(),f.clear(),l.clear()}}}}var ks=.25;function On(e){return e.error===void 0?{state:e.state}:{state:e.state,error:e.error}}function Is(e){return!Number.isFinite(e)||e<0?0:e>1?1:e}function Ef(e){return e instanceof Error&&e.message?e.message:String(e)}async function If(){let{adaptersFor:e}=await Promise.resolve().then(()=>(us(),Pd)),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 kf(e){if(!e||typeof e!="object")return;let t=e.id;return typeof t=="string"&&t.length>0?t:void 0}function Rs(e={}){let t=e.toneStart??If,n=!!e.reducedSensory,r=new Set,i=new Map,o=new Map,s=new Map,a=[],d={state:"locked"},f,l=!1,k=!1;function E(x){for(let N of a.slice())N(x)}function C(x,N){let P=i.get(x);if(P)return N&&!P.participantId&&(P.participantId=N),P;let u={id:x,participantId:N,gain:1,muted:!1,duckGain:1,priority:0,manualDuck:!1};return i.set(x,u),u}function O(x){return l||x.muted?0:Is(x.gain*x.duckGain)}function h(x){return{id:x.id,participantId:x.participantId,gain:x.gain,muted:x.muted,duckGain:x.duckGain,priority:x.priority,effectiveGain:O(x)}}function A(){let x=-1/0;for(let N of s.values())N.priority>x&&(x=N.priority);for(let N of i.values())if(!N.manualDuck){if(x===-1/0){N.duckGain=1;continue}N.duckGain=N.priority<x?ks:1}}async function F(){if(k||d.state==="unlocked")return On(d);if(f)return await f,On(d);d={state:"unlocking"},f=(async()=>{try{await t(),d={state:"unlocked"}}catch(x){d={state:"failed",error:Ef(x)}}})();try{await f}finally{f=void 0}return On(d)}return{unlock:F,status(){return On(d)},authorize(x){k||typeof x!="string"||x.length===0||r.add(x)},revoke(x){k||r.delete(x)},isAuthorized(x){return x===void 0||x.length===0?r.size===0:r.size===0?!0:r.has(x)},setChannelGain(x,N,P){k||typeof x!="string"||x.length===0||(C(x,P).gain=Is(N))},setPriority(x,N,P){k||typeof x!="string"||x.length===0||(C(x,P).priority=Number.isFinite(N)?N:0,A())},mute(){k||(l=!0,E({type:"mute"}))},unmute(){k||(l=!1,E({type:"mute"}))},muteChannel(x,N){k||typeof x!="string"||x.length===0||(C(x,N).muted=!0,E({type:"mute"}))},unmuteChannel(x){if(k)return;let N=i.get(x);N&&(N.muted=!1,E({type:"mute"}))},duck(x,N=ks){if(k||typeof x!="string"||x.length===0)return;let P=C(x);P.manualDuck=!0,P.duckGain=Is(N)},unduck(x){if(k)return;let N=i.get(x);N&&(N.manualDuck=!1,A())},effectiveGain(x){let N=i.get(x);return N?O(N):l?0:1},handleHostEvent(x){if(k||!x||typeof x!="object")return;let N=kf(x.payload);if(N){if(x.type===ze){o.set(N,"ready"),E({type:"asset",id:N,status:"ready"});return}x.type===je&&(o.set(N,"failed"),E({type:"asset",id:N,status:"failed"}))}},assetStatus(x){return o.get(x)},noteCueStarted(x){if(k)return;s.set(x.idempotencyKey,{idempotencyKey:x.idempotencyKey,channelId:x.channelId,participantId:x.participantId,priority:x.priority});let N=C(x.channelId,x.participantId);x.priority>N.priority&&(N.priority=x.priority),A()},noteCueEnded(x){s.delete(x)&&A()},teardown(x){if(!k&&!(typeof x!="string"||x.length===0)){r.delete(x);for(let[N,P]of[...s.entries()])P.participantId===x&&s.delete(N);for(let[N,P]of[...i.entries()])P.participantId===x&&i.delete(N);A(),E({type:"teardown",participantId:x})}},onNotice(x){return a.push(x),()=>{let N=a.indexOf(x);N>=0&&a.splice(N,1)}},inspect(){let x=[...o.entries()].sort(([P],[u])=>P<u?-1:P>u?1:0),N={};for(let[P,u]of x)N[P]=u;return{status:On(d),reducedSensory:n,muted:l,authorized:[...r].sort(),channels:[...i.values()].sort((P,u)=>P.id<u.id?-1:P.id>u.id?1:0).map(h),assets:N}},destroy(){k||(k=!0,s.clear(),i.clear(),r.clear(),E({type:"destroy"}),a.length=0)},get reducedSensory(){return n},get muted(){return l}}}function Zd(e,t){let n=e.dispatch.bind(e);e.dispatch=r=>{t.handleHostEvent(r),n(r)}}function Cs(e){pd();let{container:t,seed:n,captureKeyboard:r=!1,audio:i,deterministic:o,assets:s,audioBroker:a,audioParticipantId:d,kind:f="render",onFrameTiming:l}=e,k=n===void 0?void 0:mi(n,o?"deterministic":"live"),E=new Cn;if(a&&(Zd(E,a),d&&a.authorize(d)),s&&typeof s.resolver?.resolve!="function")throw new Error("createRuntime: assets.resolver is required");let C=s?cn({resolver:s.resolver,timeoutMs:s.timeoutMs,emitEvents:s.emitEvents??!o,wallClockTimeout:!o,dispatch:p=>E.dispatch(p)}):void 0,O=!1,h=null,A,F=l,W=!1,x=t.clientWidth||window.innerWidth,N=t.clientHeight||window.innerHeight,P=new Si(30,!1,x,N,!1,void 0,{container:t,seed:k,captureKeyboard:r,hostChannel:E,audio:i,deterministic:o,kind:f,onFrameTiming:l}),u=()=>{let p=t.clientWidth||window.innerWidth,m=t.clientHeight||window.innerHeight;return p===P.containerWidth&&m===P.containerHeight?!1:(P.containerWidth=p,P.containerHeight=m,!0)},v=null;return!P.isDeterministic&&typeof ResizeObserver<"u"&&(v=new ResizeObserver(()=>{if(O||!h)return;u()&&W&&P.reinit()}),v.observe(t)),P.onError=(p,m)=>{A?.(p,m)},{get tokenData(){return P.tokenData},get hostChannel(){return E},get assets(){return C},get audioBroker(){return a},get kind(){return f},get onError(){return A},set onError(p){A=p},get onFrameTiming(){return F},set onFrameTiming(p){F=p,P.onFrameTiming=p},mount(p,m={}){if(O)throw new Error("createRuntime: cannot mount on a destroyed runtime");h?.destroy(),W=!1,P.customState=m.initialState,P.setGameManager(m.gameManager);let I=m.onEvent?E.onEvent(m.onEvent):()=>{};if(a&&d&&a.authorize(d),!P.prepareCart(p))throw I(),new Error("createRuntime: failed to prepare cart");let T=!1,S={async start(){if(!T){if(u()&&P.isPrepared&&(P.init(),P.unloadCart(),!P.prepareCart(p)))throw new Error("createRuntime: failed to prepare cart");P.needsAudio&&(a?await a.unlock():await P.unlockAudio(),T)||(W=!0,P.beginPlayback())}},pause(){T||(P.paused=!0)},resume(){T||(P.paused=!1)},dispatch(D){T||E.dispatch(D)},snapshot(){if(T)return{seed:"",pngDataUrl:""};let D=P.canvas;return{seed:P.tokenData.hash,metadata:p.metadata,pngDataUrl:D?D.toDataURL("image/png"):""}},destroy(){T||(T=!0,W=!1,I(),E.clearInbound(),P.unloadCart(),h===S&&(h=null))},reload(){if(!T){if(!W){if(P.isPrepared&&(P.unloadCart(),!P.prepareCart(p)))throw new Error("createRuntime: failed to prepare cart");return}P.reloadCart()}},reinit(D){if(!T){if(!W){u();return}P.reinit(D)}},getCartState(){return P.animation?.cartState},exportState(){return T?Promise.reject(new Error("Cart handle has been destroyed")):P.exportState()},exportStateJSON(){return T?Promise.reject(new Error("Cart handle has been destroyed")):P.exportStateJSON()},async importState(D,B){if(T)throw new Error("Cart handle has been destroyed");let w=D,y=D;if(typeof D=="string")try{y=JSON.parse(D)}catch{await P.importState(D,B);return}if(y&&typeof y=="object"&&typeof y.schemaVersion=="number"){let _=vs(y);if(_.ok===!1)throw new We(an(_.errors));await P.importState(_.bundle,B);return}await P.importState(typeof w=="string"?w:y,B)},async exportSnapshot(D){if(T)throw new Error("Cart handle has been destroyed");let B=await P.exportState(),w=P.getClock(),y=cr(B,{...D,rng:P.getRandomState(),clock:{framesElapsed:B.framesElapsed,elapsedSinceStart:B.elapsedSinceStart,now:w.now,frameRate:w.frameRate}});if(y.ok===!1)throw new We(an(y.errors));return y.snapshot},async exportSnapshotJSON(D){return JSON.stringify(await S.exportSnapshot(D))},async importSnapshot(D,B){if(T)throw new Error("Cart handle has been destroyed");let w=Ss(D);if(w.ok===!1)throw new We(an(w.errors));await P.importState(w.snapshot.engineState,B)},peekExportedFramebuffer(){return T?null:P.peekExportedFramebuffer()},peekSeed(){if(!T)return P.peekSeed()},isGenerative(){return T?!1:P.isGenerative()},async step(D=1){if(T)throw new Error("Cart handle has been destroyed");await P.step(D)},async advance(D){if(T)throw new Error("Cart handle has been destroyed");await P.advance(D)},schedule(D){T||P.schedule(D)},getClock(){if(T)throw new Error("Cart handle has been destroyed");return P.getClock()},getRandomState(){if(T)throw new Error("Cart handle has been destroyed");return P.getRandomState()},getReplayMetadata(){return T?Promise.reject(new Error("Cart handle has been destroyed")):P.getReplayMetadata()},get canvas(){return P.canvas},get paused(){return P.paused},set paused(D){T||(P.paused=D)},get tokenData(){return P.tokenData},get isPrepared(){return P.isPrepared},get isLoopRunning(){return P.isLoopRunning},get needsAudio(){return P.needsAudio},get audioLibraries(){return P.audioLibraries}};return h=S,S},async unlockAudio(){if(a){P.needsAudio&&await a.unlock();return}await P.unlockAudio()},destroy(){O||(O=!0,h?.destroy(),h=null,a&&d&&a.teardown(d),v?.disconnect(),v=null,C?.dispose(),E.close(),P.destroy())}}}var Dn="cyberart.state.save",Nn="cyberart.state.load";function Rf(e,t,n={}){let r=n.persist,i=r?{persist:r}:void 0,o=()=>{t.emit({type:Dn,payload:i})},s=()=>{t.emit({type:Nn,payload:i})};e.registerAction("w",o,!0),e.registerAction("W",o,!0),e.registerAction("e",s,!0),e.registerAction("E",s,!0)}function ec(e){if(e.type!==Dn&&e.type!==Nn)return;let t=e.payload?.persist;return t==="localStorage"?t:void 0}var Cf="cyberart-io",Af=1,jt="framebuffers";function As(e,t){return`${e||"unknown"}:${t?Kt(t):"none"}`}function nc(e,t){return`${e||"unknown"}:${t||"none"}`}function Ps(){return new Promise((e,t)=>{let n=indexedDB.open(Cf,Af);n.onupgradeneeded=()=>{let r=n.result;r.objectStoreNames.contains(jt)||r.createObjectStore(jt)},n.onsuccess=()=>e(n.result),n.onerror=()=>t(n.error??new Error("indexedDB open failed"))})}function Pf(e){let t=e.data;return t.buffer.slice(t.byteOffset,t.byteOffset+t.byteLength)}function tc(e,t){return new Promise((n,r)=>{let o=e.transaction(jt,"readonly").objectStore(jt).get(t);o.onsuccess=()=>n(o.result),o.onerror=()=>r(o.error??new Error("indexedDB read failed"))})}async function rc(e,t,n){if(typeof indexedDB>"u")return;let r=await Ps(),i={width:n.width,height:n.height,data:Pf(n)};try{await new Promise((o,s)=>{let a=r.transaction(jt,"readwrite");a.oncomplete=()=>o(),a.onerror=()=>s(a.error??new Error("indexedDB write failed")),a.objectStore(jt).put(i,As(e,t))})}finally{r.close()}}async function ic(e,t){if(typeof indexedDB>"u")return null;let n=await Ps();try{let r=As(e,t),i=nc(e,t),o=await tc(n,r)??(r===i?void 0:await tc(n,i));if(!o||!o.data||o.width<1||o.height<1)return null;let s=new ImageData(o.width,o.height);return s.data.set(new Uint8ClampedArray(o.data)),s}finally{n.close()}}async function oc(e,t){if(typeof indexedDB>"u")return;let n=await Ps();try{await new Promise((r,i)=>{let o=n.transaction(jt,"readwrite");o.oncomplete=()=>r(),o.onerror=()=>i(o.error??new Error("indexedDB delete failed"));let s=o.objectStore(jt);s.delete(As(e,t)),s.delete(nc(e,t))})}finally{n.close()}}var Ts="cyberart.state.",Tf="Saved state",wf="Loaded state",sc="Failed to save state",xf="Failed to load state",_f="No saved state";function Ut(e,t){let n=e||"unknown";return t?Ts+n+"."+Kt(t):Ts+n}function Of(e,t,n){return r=>{if(ec(r)==="localStorage"){if(r.type===Dn){Df(e,t,n);return}r.type===Nn&&Nf(e,t,n)}}}function dc(e){return!!e&&typeof e=="object"&&typeof e.schemaVersion=="number"}function ac(e){if(dc(e)){let t=ur(e);if(t.ok===!1)return null;try{return ot(t.snapshot.engineState)}catch{return null}}if(Pn(e))try{return ot(e)}catch{return null}return null}function Mn(e){try{let t=JSON.parse(e);if(!t||typeof t!="object")return null;let n=t;if(typeof n.savedAt=="number"&&n.bundle&&typeof n.bundle=="object"){let o=ac(n.bundle);return o?{savedAt:n.savedAt,bundle:o}:null}let r=ac(t);if(r)return{savedAt:0,bundle:r};if(dc(t))return null;let i=t;return typeof i.seed=="string"&&typeof i.version=="number"?{savedAt:0,bundle:i}:null}catch{return null}}async function Df(e,t,n){let r=e();if(r)try{let i=await r.exportState(),o=i.cartId??t?.();if(!o){console.error("Refusing to persist cart state without cartId"),n?.(sc,"transient");return}i.generative===!0?(Hf(o),Pi(Ut(o,i.seed),i)):Pi(Ut(o),i);let s=r.peekExportedFramebuffer?.();if(s)try{await rc(o,i.seed,s)}catch(a){console.warn("Failed to save cart framebuffer",a)}n?.(Tf,"transient")}catch(i){console.error("Failed to save cart state",i),n?.(sc,"transient")}}async function Nf(e,t,n){let r=e();if(!r)return;let i=t?.(),o=r.peekSeed?.(),s=r.isGenerative?.()===!0,a=Bf(i,s,o);if(!a){console.warn("No saved cart state for",i||"unknown",s&&o?`(hash ${o})`:""),n?.(_f,"transient");return}try{let d=await ic(i,a.bundle.seed).catch(()=>null);await r.importState(a.bundle,{framebuffer:d}),n?.(wf,"transient")}catch(d){console.error("Failed to load cart state",d),n?.(xf,"transient")}}function Pi(e,t){let n=JSON.stringify({savedAt:Date.now(),bundle:t});Mf(e,n)}function Mf(e,t){for(;;)try{localStorage.setItem(e,t);return}catch(n){if(!Lf(n)||!Vf(e))throw n}}function Lf(e){if(!e||typeof e!="object")return!1;let t=e.name,n=e.code;return t==="QuotaExceededError"||t==="NS_ERROR_DOM_QUOTA_REACHED"||n===22||n===1014}function Vf(e){let t=null,n=1/0;for(let o of Ff()){if(o===e)continue;let s=localStorage.getItem(o);if(!s)continue;let d=Mn(s)?.savedAt??0;d<n&&(n=d,t=o)}if(!t)return!1;let r=localStorage.getItem(t),i=r?Mn(r):null;return localStorage.removeItem(t),i?.bundle&&oc(i.bundle.cartId,i.bundle.seed).catch(()=>{}),!0}function Ff(){let e=[];for(let t=0;t<localStorage.length;t++){let n=localStorage.key(t);n&&n.startsWith(Ts)&&e.push(n)}return e}function Bf(e,t,n){if(t&&n){let i=localStorage.getItem(Ut(e,n));if(i)return Mn(i);let o=localStorage.getItem(Ut(e));if(!o)return null;let s=Mn(o);if(!s||!$f(s.bundle,n))return null;try{Pi(Ut(e,n),s.bundle)}catch{}return s}let r=localStorage.getItem(Ut(e));return r?Mn(r):null}function $f(e,t){return typeof e.seed=="string"&&Kt(e.seed)===Kt(t)}function Hf(e){let t=Ut(e),n=localStorage.getItem(t);if(!n)return;let r=Mn(n);if(r&&typeof r.bundle.seed=="string"){let i=Ut(e,r.bundle.seed);if(!localStorage.getItem(i))try{Pi(i,r.bundle)}catch{return}}localStorage.removeItem(t)}var fr=1,ht="cyberart.diagnostic.rejected",wi=8,qf=new Set(["intent","state","diagnostic"]),Gf=new Set([Dn,Nn]);function Ti(e){return typeof e=="string"&&qf.has(e)}function cc(e){if(e.kind!==void 0)return Ti(e.kind)?e.kind:void 0;if(!(typeof e.type!="string"||e.type.length===0)){if(Gf.has(e.type))return"intent";for(let t of e.type.split("."))if(Ti(t))return t}}function uc(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 Jt(e,t){for(let n of e)if(uc(n,t))return!0;return!1}function Ln(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 xi(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!==fr)return{ok:!1,reason:"malformed",detail:`unsupported schemaVersion ${String(e.schemaVersion)}`};let n=cc(e);if(!n)return{ok:!1,reason:"malformed",detail:`cannot infer kind from type "${e.type}"`};let r=Ln(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??wi,f=t.parentHops===void 0?d:Math.max(0,t.parentHops-1),l=typeof e.idempotencyKey=="string"&&e.idempotencyKey.length>0?e.idempotencyKey:void 0,k={schemaVersion:fr,type:e.type,kind:n,source:t.source,id:i,correlationId:o,seq:t.seq,hops:f};return a&&(k.target=a),s&&(k.causationId=s),l&&(k.idempotencyKey=l),r.value!==void 0&&(k.payload=r.value),{ok:!0,envelope:k}}var Kf=new Set(["rate-limited","storm-detected","hop-limit","loop-detected","not-subscribed"]),Wf=8,jf=8,Uf=16,Jf=256,zf=256,Yf=["*.intent.*"];function ws(e={}){let t=e.hostSource??"host",n="router",r=e.maxPerTurn??Wf,i=e.maxCausationDepth??jf,o=e.maxHops??wi,s=e.maxCorrelationPerTurn??Uf,a=e.maxIndex??Jf,d=e.maxDecisions??zf,f=e.maxPerWindow,l=e.windowMs??1e3,k=e.now??Date.now,E=0,C=e.createId??(()=>`evt-${++E}`),O=new Map,h=[],A=[],F=new Map,W=new Map,x=new Map,N=[],P=0,u=0,v=0;function c(V){try{return JSON.parse(JSON.stringify(V))}catch{return V}}function p(V){for(N.push(V);N.length>d;)N.shift();for(let J of A)try{J(c(V))}catch{}}function m(V,J){let re={outcome:J.outcome,source:J.source,type:V.type,kind:V.kind,envelopeId:V.id,deliveredTo:J.deliveredTo,hops:V.hops,seq:V.seq,correlationId:V.correlationId,schemaVersion:V.schemaVersion,turn:v,time:k()};return J.reason&&(re.reason=J.reason),J.detail&&(re.detail=J.detail),J.priorEnvelopeId&&(re.priorEnvelopeId=J.priorEnvelopeId),V.target&&(re.target=V.target),V.causationId&&(re.causationId=V.causationId),V.idempotencyKey&&(re.idempotencyKey=V.idempotencyKey),V.payload!==void 0&&(re.payload=c(V.payload)),re}let I=[],T=!1;function S(V,J,re){for(V.set(J,re);V.size>a;){let U=V.keys().next().value;if(U===void 0)break;V.delete(U)}}function D(V){S(F,V.id,{type:V.type,source:V.source,causationId:V.causationId,hops:V.hops,correlationId:V.correlationId,idempotencyKey:V.idempotencyKey})}function B(V,J){J&&(V.correlationId||(V.correlationId=J.correlationId),V.causationId||(V.causationId=J.id),!V.idempotencyKey&&J.idempotencyKey&&(V.idempotencyKey=`${J.idempotencyKey}::${V.type}`))}function w(V,J){if(V){let re=F.get(V);return re?re.hops:o}return J}function y(V,J){return`${V}\0${J}`}function _(V,J){V.idempotencyKey&&S(x,y(V.source,V.idempotencyKey),J)}function L(V,J){if(J)return x.get(y(V,J))}function H(V){return L(V.source,V.idempotencyKey)}function G(V){return V.seq+=1,V.seq}function ee(V,J){if(!(typeof J.causationId=="string"&&J.causationId.length>0))return V.lastDelivered}function Y(V){let J=new Set,re=new Set([`${V.type}\0${V.source}`]),U=V.causationId,Z=0;for(;U;){if(Z+=1,Z>i||J.has(U))return!0;J.add(U);let ge=F.get(U);if(!ge)break;let tt=`${ge.type}\0${ge.source}`;if(re.has(tt))return!0;re.add(tt),U=ge.causationId}return!1}function K(V){let J=(W.get(V)??0)+1;return W.set(V,J),J}function g(V,J){f!==void 0&&(V.emitTimestamps=V.emitTimestamps.filter(re=>J-re<l))}function b(V,J){return(J.kind==="state"||J.kind==="diagnostic")&&!V.authoritative?!1:Jt(V.emit,J.type)}function R(V){for(let J of h)if(Jt(J.patterns,V.type))try{J.listener(V)}catch{}}function M(V){let J=[];if(V.target){let re=O.get(V.target);return!re||!Jt(re.subscribe,V.type)||(re.channel.dispatch(V),re.lastDelivered={id:V.id,hops:V.hops,correlationId:V.correlationId,idempotencyKey:V.idempotencyKey},J.push(re.id)),J}for(let re of O.values())Jt(re.subscribe,V.type)&&(re.channel.dispatch(V),re.lastDelivered={id:V.id,hops:V.hops,correlationId:V.correlationId,idempotencyKey:V.idempotencyKey},J.push(re.id));return J}function q(V,J,re,U,Z,ge,tt){let dt={reason:U,eventType:J,source:re};Z&&(dt.detail=Z),u+=1;let Ft=C(),Bt={schemaVersion:fr,type:ht,kind:"diagnostic",source:n,id:Ft,correlationId:ge??Ft,seq:u,hops:0,payload:dt};tt&&(Bt.causationId=tt),D(Bt);let ir=O.get(V);ir&&ir.channel.dispatch(Bt),R(Bt)}function ne(V,J,re,U,Z){if(q(V,Z?.type??(typeof J.type=="string"?J.type:""),Z?.source??V,re,U,Z?.correlationId,Z?.id),Z?.idempotencyKey&&!Kf.has(re)&&_(Z,{status:"rejected"}),Z)p(m(Z,{outcome:"rejected",reason:re,detail:U,source:V,deliveredTo:[]}));else{let ge={outcome:"rejected",reason:re,source:V,type:typeof J.type=="string"?J.type:"",deliveredTo:[],turn:v,time:k()};U&&(ge.detail=U),typeof J.idempotencyKey=="string"&&(ge.idempotencyKey=J.idempotencyKey),p(ge)}}function z(V,J){D(V),_(V,{status:"accepted",envelope:V}),K(V.correlationId),R(V);let re=M(V);p(m(V,{outcome:"accepted",source:J,deliveredTo:re}))}function ie(V,J,re,U){let Z=U?.type??(typeof J.type=="string"?J.type:""),ge={outcome:"duplicate",reason:"duplicate",detail:re.status==="accepted"?"idempotent accepted":"idempotent rejected",source:V,type:Z,deliveredTo:[],turn:v,time:k()};U?(ge.kind=U.kind,ge.envelopeId=U.id,ge.hops=U.hops,ge.seq=U.seq,ge.correlationId=U.correlationId,ge.schemaVersion=U.schemaVersion,U.target&&(ge.target=U.target),U.causationId&&(ge.causationId=U.causationId),U.idempotencyKey&&(ge.idempotencyKey=U.idempotencyKey),U.payload!==void 0&&(ge.payload=c(U.payload))):typeof J.idempotencyKey=="string"&&(ge.idempotencyKey=J.idempotencyKey),re.status==="accepted"&&(ge.priorEnvelopeId=re.envelope.id,ge.envelopeId||(ge.envelopeId=re.envelope.id)),p(ge)}function oe(V,J,re,U){if(!re.ok){ne(V,J,"malformed",re.detail);return}let Z=re.envelope,ge=H(Z);if(ge)return ie(V,J,ge,Z),ge.status==="accepted"?ge.envelope:void 0;if(Z.hops<1){ne(V,J,"hop-limit","no hops remaining",Z);return}if(Z.target&&Z.target!==t){let tt=O.get(Z.target);if(!tt){ne(V,J,"unknown-target",`unknown target "${Z.target}"`,Z);return}if(!Jt(tt.subscribe,Z.type)){ne(V,J,"not-subscribed",`target "${Z.target}" does not subscribe to ${Z.type}`,Z);return}}if(U){if(!b(U,Z)){ne(V,J,"unauthorized","source may not emit this event",Z);return}if(U.emitsThisTurn+=1,U.emitsThisTurn>r){ne(V,J,"rate-limited","maxPerTurn exceeded",Z);return}if(f!==void 0){let dt=k();if(g(U,dt),U.emitTimestamps.push(dt),U.emitTimestamps.length>f){ne(V,J,"rate-limited","maxPerWindow exceeded",Z);return}}if(Y(Z)){ne(V,J,"loop-detected","causation chain cycle or depth exceeded",Z);return}if((W.get(Z.correlationId)??0)+1>s){ne(V,J,"storm-detected","correlationId storm",Z);return}if(e.validate){let dt;try{dt=e.validate(Z)}catch(Ft){let Bt=Ft instanceof Error?Ft.message:"validate threw";ne(V,J,"host-rejected",Bt,Z);return}if(dt!==!0){ne(V,J,"host-rejected",dt.detail,Z);return}}}else{if(Y(Z)){ne(V,J,"loop-detected","causation chain cycle or depth exceeded",Z);return}if((W.get(Z.correlationId)??0)+1>s){ne(V,J,"storm-detected","correlationId storm",Z);return}}return z(Z,V),Z}function Te(V,J){let re=O.get(V);if(!re)return;let U={...J},Z=ee(re,U);B(U,Z);let ge=L(re.id,U.idempotencyKey);if(ge){ie(V,U,ge);return}let tt=G(re),dt=xi(U,{source:re.id,createId:C,seq:tt,causationId:Z?.id,maxHops:o,parentHops:w(U.causationId??Z?.id,Z?.hops)});oe(V,U,dt,re)}function ke(V,J){let re=J?.cause,U={...V};B(U,re);let Z=L(t,U.idempotencyKey);if(Z)return ie(t,U,Z),Z.status==="accepted"?Z.envelope:void 0;P+=1;let ge=xi(U,{source:t,createId:C,seq:P,causationId:U.causationId,maxHops:o,parentHops:w(U.causationId,re?.hops)});return oe(t,U,ge,void 0)}function xe(){if(!T){T=!0;try{for(;I.length>0;){let V=I.shift();V&&(V.kind==="cart"?Te(V.participantId,V.event):V.result=ke(V.event,V.extras))}}finally{T=!1}}}function De(V){I.push(V),xe()}return{attach(V,J,re={}){if(V===t||V===n)throw new Error(`createEventRouter: "${V}" is a reserved participant id`);for(let ge of O.values())if(ge.channel===J&&ge.id!==V)throw new Error(`createEventRouter: channel already attached as "${ge.id}"`);O.get(V)?.unsubscribe();let Z={id:V,channel:J,emit:re.emit??Yf,subscribe:re.subscribe??[],authoritative:re.authoritative===!0,seq:0,emitsThisTurn:0,emitTimestamps:[],unsubscribe:()=>{}};Z.unsubscribe=J.onEvent(ge=>{De({kind:"cart",participantId:V,event:ge})}),O.set(V,Z)},detach(V){let J=O.get(V);J&&(J.unsubscribe(),O.delete(V))},publish(V,J){let re={kind:"publish",event:V,extras:J};return De(re),re.result},subscribe(V,J){let re={patterns:V,listener:J};return h.push(re),()=>{let U=h.indexOf(re);U>=0&&h.splice(U,1)}},subscribeDecision(V){return A.push(V),()=>{let J=A.indexOf(V);J>=0&&A.splice(J,1)}},inspectParticipants(){return[...O.values()].map(V=>({id:V.id,emit:V.emit.slice(),subscribe:V.subscribe.slice(),authoritative:V.authoritative}))},inspectDecisions(){return N.map(V=>c(V))},turn(){v+=1,W.clear();for(let V of O.values())V.emitsThisTurn=0,V.lastDelivered=void 0,f!==void 0&&g(V,k())}}}var Xf=new Set(["string","number","boolean","object","array"]);function Ye(e,t,n){return n?{code:e,detail:t,path:n}:{code:e,detail:t}}function lc(e){if(!(typeof e!="string"||e.length===0)){for(let t of e.split("."))if(Ti(t))return t}}function pc(e){let t=e.split(".");return t.length===0?"*":(t[t.length-1]="*",t.join("."))}function _i(e){let t=[];if(!e||typeof e!="object")return[Ye("invalid-schema","payload schema is required")];if((typeof e.version!="number"||!Number.isInteger(e.version)||e.version<1)&&t.push(Ye("invalid-version","payload schema version must be an integer >= 1")),!e.fields||typeof e.fields!="object"||Array.isArray(e.fields))return t.push(Ye("invalid-fields","payload schema fields must be an object")),t;for(let[n,r]of Object.entries(e.fields)){if(!n){t.push(Ye("invalid-field","field name is required",n));continue}(!r||typeof r!="object"||!Xf.has(r.type))&&t.push(Ye("invalid-field-type",`field "${n}" type must be string | number | boolean | object | array`,n))}return t}function Qf(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 fc(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])=>Ye("missing-field",`payload is missing required field "${o}"`,o))}}if(t===null||typeof t!="object"||Array.isArray(t))return{ok:!1,errors:[Ye("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(Ye("missing-field",`payload is missing required field "${i}"`,i));continue}let s=Qf(n[i]);s!==o.type&&r.push(Ye("field-type",`payload.${i} expected ${o.type}, got ${s}`,i))}return r.length>0?{ok:!1,errors:r}:{ok:!0,payload:t}}function xs(e,t,n={}){let r=_i(e);if(r.length)return{ok:!1,errors:r};let i=fc(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 f of Object.keys(s))a.has(f)||d.push(Ye("unknown-field",`unknown field "${f}"`,f));if(d.length)return{ok:!1,errors:d}}return i}function Zf(e,t,n){let r=pc(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 fc(this.payloadSchema,i)}}}function _s(e,t,n){let r=[];if(typeof t!="string"||t.length===0)r.push(Ye("invalid-type","event type is required"));else if(t.split(".").some(i=>i.length===0))r.push(Ye("invalid-type",`event type "${t}" has empty dotted segments`));else{let i=lc(t);i?i!==e&&r.push(Ye("kind-mismatch",`type "${t}" infers kind "${i}" but this helper defines "${e}"`)):r.push(Ye("kind-mismatch",`type "${t}" has no "${e}" segment; dotted names like host.presentation.* need e.g. host.presentation.${e}.cue-started`))}return r.push(..._i(n)),r.length>0?{ok:!1,errors:r}:{ok:!0,contract:Zf(t,e,n)}}function Os(e,t){return _s("intent",e,t)}function ce(e,t){return _s("state",e,t)}function Xe(e,t){return _s("diagnostic",e,t)}function em(e,t){let n=_i(e),r=_i(t);if(n.length>0||r.length>0||t.version<e.version)return"breaking";let i=Object.keys(e.fields),o=Object.keys(t.fields),s=new Set(i),a=new Set(o);for(let l of i){if(!a.has(l))return"breaking";let k=e.fields[l],E=t.fields[l];if(k.type!==E.type)return"breaking";let C=k.optional!==!0,O=E.optional===!0;if(C&&O||!C&&E.optional!==!0&&k.optional===!0)return"breaking"}let d=!1;for(let l of o)if(!s.has(l)){if(t.fields[l].optional!==!0)return"breaking";d=!0}let f=i.length===o.length&&i.every(l=>t.fields[l].type===e.fields[l].type&&t.fields[l].optional===!0==(e.fields[l].optional===!0));return f&&t.version===e.version?"identical":t.version>e.version&&(d||f)?"backward-compatible":t.version===e.version&&d?"breaking":f?"identical":"breaking"}function tm(e,t){let n=[],r=[],i=new Set,o=new Set;for(let s of e)(t==="authoritative"||s.kind==="intent")&&!i.has(s.emitPattern)&&(i.add(s.emitPattern),n.push(s.emitPattern)),s.kind!=="intent"&&!o.has(s.subscribePattern)&&(o.add(s.subscribePattern),r.push(s.subscribePattern));return{emit:n,subscribe:r,authoritative:t==="authoritative"}}function nm(e,t){let n=e.emit??["*.intent.*"],r=e.authoritative===!0,i=[];for(let o of t)Jt(n,o.type)&&(o.kind==="state"||o.kind==="diagnostic")&&!r&&i.push(Ye("unauthorized-emit",`emit pattern allows ${o.kind} "${o.type}" but attach is not authoritative`,o.type));return i.length>0?{ok:!1,errors:i}:{ok:!0}}function rm(e){let t=new Map;for(let i of e)t.set(i.type,i);let n=i=>{let o=t.get(i.type);return o?o.kind!==i.kind?{ok:!1,errors:[Ye("kind-mismatch",`envelope kind "${i.kind}" does not match contract "${o.kind}"`,i.type)]}:o.validatePayload(i.payload):{ok:!1,errors:[Ye("unknown-type",`no contract registered for "${i.type}"`,i.type)]}};return{get(i){return t.get(i)},manifest(){return[...t.values()].sort((i,o)=>i.type.localeCompare(o.type)).map(i=>i.toManifest())},validateEnvelope:n,asRouterValidate:i=>{let o=n(i);return o.ok?!0:{reason:"host-rejected",detail:o.errors.map(s=>s.detail).join("; ")}}}}var Vn=1,Ns="presentation.state.model",gc="presentation.intent.unsupported",yc=["loading","ready","error","unsupported"],im=["presentation.state.*",ht],om="Presentation adapter has been destroyed",hc="Presentation adapter: model is invalid or not JSON-serializable",sm=new Set(yc);function bc(e){return typeof e=="string"&&sm.has(e)}function Ms(e){if(e===null||typeof e!="object")return!1;let t=e;return!(t.contractVersion!==Vn||!bc(t.phase)||t.reason!==void 0&&typeof t.reason!="string"||t.view!==void 0&&(t.view===null||typeof t.view!="object"))}function Ds(e,t){let n={type:Ns,kind:"state",payload:e};return t?.correlationId&&(n.correlationId=t.correlationId),t?.causationId&&(n.causationId=t.causationId),t?.idempotencyKey&&(n.idempotencyKey=t.idempotencyKey),n}function Ls(){return{contractVersion:Vn,phase:"loading"}}function Vs(e){return{contractVersion:Vn,phase:"unsupported",reason:e}}function Fs(e){let t=Ln(e);return t.ok?Ms(t.value)?{ok:!0,model:t.value}:t.value!==null&&typeof t.value=="object"&&"contractVersion"in t.value&&t.value.contractVersion!==Vn?{ok:!1,reason:"unknown-contract-version",contractVersion:t.value.contractVersion}:{ok:!1,reason:"invalid-model"}:{ok:!1,reason:"model-not-serializable"}}function Oi(e){let t=Fs(e);if(!t.ok)throw new Error(hc);return t.model}function am(e){let t=Ln(e);return t.ok&&Ms(t.value)?t.value:Vs("model-not-serializable")}function dm(e,t){if(e.type!==Ns)return{model:t};let n=Fs(e.payload);return n.ok?{model:n.model}:{model:Vs(n.reason),rejected:{reason:n.reason,contractVersion:n.contractVersion}}}function cm(e){if(e===null||typeof e!="object"||!("regions"in e))return[];let t=e.regions;return Array.isArray(t)?t:[]}function um(e,t,n){return e>=n.x&&e<n.x+n.width&&t>=n.y&&t<n.y+n.height}function lm(e,t){let n=t.intent;if(!n||typeof n.type!="string"||n.type.length===0)return;let r={type:n.type,kind:"intent"};if(n.payload!==void 0){let i=Ln(n.payload);if(!i.ok)return;r.payload=i.value}n.target&&(r.target=n.target),n.correlationId&&(r.correlationId=n.correlationId),n.idempotencyKey&&(r.idempotencyKey=n.idempotencyKey),e.emit(r)}function vc(e,t,n){let r={reason:t};if(n!==void 0){let i=Ln(n);i.ok&&(r.contractVersion=i.value)}e.emit({type:gc,kind:"intent",payload:r})}function mc(e,t,n){let r=t;for(let i of e){let o=dm(i,r);o.rejected&&n&&vc(n,o.rejected.reason,o.rejected.contractVersion),r=o.model}return r}function Sc(){return{metadata:{id:"cyberart.presentation.reference",name:"Reference presentation",frameRate:30},getDefaultState:(e,t,n,r,i,o,s,a,d)=>{let f=i?.model;if(f===void 0)return{model:Ls()};let l=Fs(f);return l.ok?{model:l.model}:(d&&vc(d,l.reason,l.contractVersion),{model:Vs(l.reason)})},update:(e,t,n,r,i,o,s,a,d,f,l)=>{let k=mc(l?.consume()??[],i.model,l);for(;s?.hasClick();){let E=s.consumeClick();if(!(!E||k.phase!=="ready"||!l)){for(let C of cm(k.view))if(um(E.x,E.y,C)){lm(l,C);break}}}return l&&(k=mc(l.consume(),k,l)),k===i.model?i:{...i,model:k}},render:(e,t,n,r,i,o)=>{let s=i.model.view?.background;o.fillStyle=s??"#111",o.fillRect(0,0,r.width,r.height)}}}function Ec(e,t={}){let n=e,r=t.model?Oi(t.model):Ls(),i=!1,o=t.present??t.model!==void 0,s=()=>{if(i)throw new Error(om)},a=d=>{s(),r=Oi(d),n.dispatch(Ds(r))};return o&&n.dispatch(Ds(r)),{version:Vn,get target(){return n},get model(){return am(r)},get phase(){return r.phase},get paused(){return n.paused===!0},present:a,async start(){return s(),n.start()},pause(){s(),n.pause()},resume(){s(),n.resume()},retarget(d){s(),n=d},destroy(){i||(i=!0,n.destroy())}}}function pm(e,t={}){let n=t.model?Oi(t.model):t.initialState?.model!==void 0?Oi(t.initialState.model):Ls(),r=t.cart??Sc(),i=e.mount(r,{initialState:{...t.initialState,model:n},onEvent:t.onEvent});return Ec(i,{model:n,present:!1})}var $t="cue.started",zt="cue.completed",Ht="cue.cancelled",Nt="cue.replaced",fm=[$t,zt,Ht,Nt];function mm(e){return e===$t||e===zt||e===Ht||e===Nt}function kc(e,t){let n=e<0?0:e>1?1:e;return t==="ease-out"?1-(1-n)*(1-n):n}function Ic(e){return{type:e.type,atFrame:e.atFrame,name:e.name,idempotencyKey:e.idempotencyKey,progress:e.progress}}function Di(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 Bs(e){return e.startFrame+e.delayFrames}function gm(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 ym(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 bt(e={}){let t=!!e.reducedMotion,n=e.originFrame??0,r=new Map,i=[];function o(h){i.push(h)}function s(h,A){let F=Bs(h)-Bs(A);return F!==0?F:h.name<A.name?-1:h.name>A.name?1:h.idempotencyKey<A.idempotencyKey?-1:h.idempotencyKey>A.idempotencyKey?1:0}function a(h,A){o({type:A,atFrame:n,name:h.name,idempotencyKey:h.idempotencyKey,progress:h.progress})}function d(h){if(h.phase="completed",h.progress=1,a(h,zt),h.repeatRemaining==="forever"||h.repeatRemaining>0){if(typeof h.repeatRemaining=="number"&&(h.repeatRemaining-=1),h.repeatIndex+=1,h.phase="scheduled",h.progress=0,h.startFrame=n,h.delayFrames=0,h.durationFrames===0){r.delete(h.idempotencyKey);return}h.phase="active",a(h,$t)}else r.delete(h.idempotencyKey)}function f(h){if(h.phase==="cancelled"||h.phase==="completed")return;let A=Bs(h);if(!(n<A)){if(h.phase==="scheduled"&&(h.phase="active",h.progress=h.durationFrames===0?1:0,a(h,$t),h.durationFrames===0)){d(h);return}if(h.phase==="active"){let F=n-A;F>=h.durationFrames?(h.progress=1,d(h)):h.progress=kc(h.durationFrames===0?1:F/h.durationFrames,h.easing)}}}function l(){let h=[...r.values()].sort(s);for(let A of h)f(A)}function k(h){let A=gm(h,n);if("ok"in A&&A.ok===!1)return A;let F=ym(A,t),W=r.get(F.idempotencyKey);if(W&&(W.phase==="scheduled"||W.phase==="active")){if(W.onDuplicate==="reject"||F.onDuplicate==="reject")return{ok:!1,reason:"duplicate",detail:`cue ${F.idempotencyKey} is already ${W.phase}`};if(W.onDuplicate==="ignore"||F.onDuplicate==="ignore")return{ok:!0,cue:Di(W)};W.phase="cancelled",W.progress=W.progress,a(W,Nt),r.delete(W.idempotencyKey)}r.set(F.idempotencyKey,F),f(F);let x=r.get(F.idempotencyKey)??F;return{ok:!0,cue:Di(x)}}function E(h){let A=r.get(h);return!A||A.phase==="completed"||A.phase==="cancelled"?!1:(A.phase="cancelled",a(A,Ht),r.delete(h),!0)}function C(){for(let h of[...r.values()].sort(s))(h.phase==="scheduled"||h.phase==="active")&&(h.phase="cancelled",a(h,Ht));r.clear(),i.length=0,n=e.originFrame??0}function O(h=1){let A=Number.isFinite(h)?Math.max(0,Math.floor(h)):0,F=i.length;for(let W=0;W<A;W++)n+=1,l();return i.slice(F).map(Ic)}return{play:k,step:O,cancel:E,reset:C,snapshot(){return{frame:n,reducedMotion:t,cues:[...r.values()].sort(s).map(Di),events:i.map(Ic)}},get(h){let A=r.get(h);return A?Di(A):void 0},setReducedMotion(h){t=!!h},get frame(){return n},get reducedMotion(){return t}}}var Vi="audio.cue.scheduled",mr="audio.cue.started",Fi="audio.cue.skipped",un="audio.cue.failed",hm=[Vi,mr,Fi,un],Li=1,bm=["scheduled","active","completed","cancelled"],vm=["linear","ease-out"],Sm=["locked","unlocking","unlocked","failed"],Em=["scheduled","started","skipped"];function Cc(e){return e===Vi||e===mr||e===Fi||e===un}function Fn(e){return!!e&&typeof e=="object"&&!Array.isArray(e)}function Lt(e){return typeof e=="string"&&e.length>0}function Mt(e){return typeof e=="number"&&Number.isFinite(e)}function Im(e){return e==="scheduled"||e==="started"||e==="skipped"||e==="failed"||e==="completed"}function Rc(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 gr(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(!Fn(t))return{ok:!1,errors:[be("invalid-snapshot","snapshot must be a JSON object")]};let n=[];t.schemaVersion!==Li&&n.push(be("unsupported-schema",`unsupported audio cue snapshot schemaVersion ${String(t.schemaVersion)}`,"schemaVersion")),Mt(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&&(!Fn(t.unlock)||!Sm.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 f=`cues[${d}]`,l=km(a,f,n);if(l){if(r.has(l.idempotencyKey)){n.push(be("unknown-cue",`duplicate cue idempotencyKey "${l.idempotencyKey}"`,f));return}r.add(l.idempotencyKey),i.push(l)}});let o=[];return Array.isArray(t.events)&&t.events.forEach((a,d)=>{let f=`events[${d}]`,l=Am(a,f,n);l&&o.push(l)}),n.length>0?{ok:!1,errors:n}:{ok:!0,snapshot:{schemaVersion:Li,frame:t.frame,reducedSensory:t.reducedSensory,cues:i,events:o}}}function km(e,t,n){if(!Fn(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(!Im(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(!bm.includes(e.phase)){n.push(be("invalid-snapshot","cue phase is invalid",`${t}.phase`));return}if(!vm.includes(e.easing)){n.push(be("invalid-snapshot","cue easing is invalid",`${t}.easing`));return}if(!Mt(e.startFrame)){n.push(be("invalid-snapshot","cue startFrame must be finite",`${t}.startFrame`));return}if(!Mt(e.durationFrames)||e.durationFrames<0){n.push(be("invalid-snapshot","cue durationFrames must be a non-negative finite number",`${t}.durationFrames`));return}if(!Mt(e.delayFrames)||e.delayFrames<0){n.push(be("invalid-snapshot","cue delayFrames must be a non-negative finite number",`${t}.delayFrames`));return}if(!Mt(e.progress)){n.push(be("invalid-snapshot","cue progress must be finite",`${t}.progress`));return}if(!Mt(e.repeatIndex)){n.push(be("invalid-snapshot","cue repeatIndex must be finite",`${t}.repeatIndex`));return}if(!Mt(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=Rm(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 Rm(e,t,n){if(e!==void 0){if(!Fn(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(!Mt(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 Cm(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 Am(e,t,n){if(!Fn(e)){n.push(be("invalid-snapshot","event must be an object",t));return}if(!Cc(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(!Mt(e.atFrame)){n.push(be("invalid-snapshot","event atFrame must be finite",`${t}.atFrame`));return}if(!Mt(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&&!Rc(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),Rc(e.reason)&&(r.reason=e.reason),r}function Ni(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 Pm(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 Mi(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 Ac(e={}){let t=e.broker,n=!!(e.reducedSensory??t?.reducedSensory),r=bt({originFrame:e.originFrame}),i=new Map,o=[],s=new Set,a=0;function d(u){o.push(u)}function f(u,v,c){let p=r.get(v.idempotencyKey);return Ni({type:u,atFrame:r.frame,name:v.name,idempotencyKey:v.idempotencyKey,assetId:v.assetId,channelId:v.channelId,participantId:v.participantId,reason:c?.reason,progress:c?.progress??p?.progress??0})}function l(u,v){s.delete(u.idempotencyKey),t?.noteCueEnded(u.idempotencyKey),u.audioPhase="failed",d(f(un,u,{reason:v})),r.cancel(u.idempotencyKey),i.delete(u.idempotencyKey)}function k(u,v){s.delete(u.idempotencyKey),u.audioPhase="skipped",d(f(Fi,u,{reason:v}))}function E(u){s.delete(u.idempotencyKey),u.audioPhase="started",t?.noteCueStarted({idempotencyKey:u.idempotencyKey,channelId:u.channelId,participantId:u.participantId,priority:u.priority}),d(f(mr,u))}function C(u){if(u.audioPhase!=="scheduled")return;if(t&&!t.isAuthorized(u.participantId)){k(u,"unauthorized"),r.cancel(u.idempotencyKey),i.delete(u.idempotencyKey);return}if(n||t?.reducedSensory){k(u,"reduced-sensory");return}if(t?.muted||t&&t.effectiveGain(u.channelId)===0){k(u,"muted");return}let v=t?.assetStatus(u.assetId);if(!t){E(u);return}if(v==="failed"){l(u,"asset-failed");return}if(v==="ready"){E(u);return}s.add(u.idempotencyKey)}function O(u,v){for(let c of[...s]){let p=i.get(c);if(!p){s.delete(c);continue}if(!(u&&p.assetId!==u)){if(v==="failed"||t?.assetStatus(p.assetId)==="failed"){l(p,"asset-failed");continue}(v==="ready"||t?.assetStatus(p.assetId)==="ready")&&C(p)}}}function h(u){for(let v of[...i.values()])v.participantId===u&&(v.audioPhase==="scheduled"||v.audioPhase==="started")&&l(v,"torn-down")}function A(u){for(let v of u){let c=i.get(v.idempotencyKey);if(c)if(v.type===$t)C(c);else if(v.type===zt){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 v.type===Ht?(s.delete(c.idempotencyKey),t?.noteCueEnded(c.idempotencyKey),(c.audioPhase==="scheduled"||c.audioPhase==="started")&&(c.audioPhase="failed"),i.delete(c.idempotencyKey)):v.type===Nt&&(s.delete(c.idempotencyKey),t?.noteCueEnded(c.idempotencyKey),i.delete(c.idempotencyKey))}}function F(){let u=o.slice(a).map(Ni);return a=o.length,u}let W=t?.onNotice(u=>{if(u.type==="asset"){if(u.status==="failed"){for(let v of[...i.values()])v.assetId===u.id&&(v.audioPhase==="scheduled"||v.audioPhase==="started")&&l(v,"asset-failed");return}O(u.id,u.status);return}if(u.type==="teardown"){h(u.participantId);return}if(u.type==="destroy")for(let v of[...i.values()])(v.audioPhase==="scheduled"||v.audioPhase==="started")&&l(v,"torn-down")});function x(){for(let u of i.values())t?.noteCueEnded(u.idempotencyKey);i.clear(),s.clear(),o.length=0,a=0,r.reset()}function N(u){if(!u||typeof u!="object")return{ok:!1,reason:"invalid",detail:"spec is required"};if(typeof u.assetId!="string"||u.assetId.length===0)return{ok:!1,reason:"invalid",detail:"assetId is required"};let v=r.snapshot().events.length,c=r.play(Pm(u));if(!c.ok)return c;let p=r.snapshot().events.slice(v),m=p.some(w=>w.type===Nt);if(!m&&i.has(u.idempotencyKey)){let w=i.get(u.idempotencyKey);return{ok:!0,cue:Mi(w,c.cue,r.frame)}}if(m){let w=i.get(u.idempotencyKey);w&&(s.delete(w.idempotencyKey),t?.noteCueEnded(w.idempotencyKey),i.delete(w.idempotencyKey))}let I=u.channelId??u.participantId??"master",T={name:u.name,idempotencyKey:u.idempotencyKey,assetId:u.assetId,channelId:I,participantId:u.participantId,priority:Number.isFinite(u.priority)?u.priority:0,audioPhase:"scheduled"};u.repeat&&(T.repeat=u.repeat),i.set(T.idempotencyKey,T),typeof u.gain=="number"&&t?.setChannelGain(I,u.gain,u.participantId),typeof u.priority=="number"&&t?.setPriority(I,u.priority,u.participantId),d(f(Vi,T)),A(p.filter(w=>w.type!==Nt));let S=i.get(T.idempotencyKey);S&&S.audioPhase==="scheduled"&&t?.assetStatus(S.assetId)==="failed"&&l(S,"asset-failed"),F();let D=i.get(T.idempotencyKey)??T,B=r.get(T.idempotencyKey)??c.cue;return{ok:!0,cue:Mi(D,B,r.frame)}}function P(){return{schemaVersion:Li,frame:r.frame,reducedSensory:n,cues:[...i.values()].map(u=>Mi(u,r.get(u.idempotencyKey),r.frame)).sort((u,v)=>u.name!==v.name?u.name<v.name?-1:1:u.idempotencyKey<v.idempotencyKey?-1:u.idempotencyKey>v.idempotencyKey?1:0),events:o.map(Ni)}}return{play:N,step(u=1){let v=r.step(u);return A(v),F()},cancel(u){let v=i.get(u),c=r.cancel(u);return v&&(s.delete(u),t?.noteCueEnded(u),i.delete(u)),c},reset:x,snapshot(){return P()},restore(u){let v=gr(u);if(!v.ok)return v;let c=bt({originFrame:v.snapshot.frame}),p=new Map,m=new Set,I=v.snapshot.events.map(Ni);for(let B=0;B<v.snapshot.cues.length;B+=1){let w=v.snapshot.cues[B],y={name:w.name,idempotencyKey:w.idempotencyKey,assetId:w.assetId,channelId:w.channelId,participantId:w.participantId,priority:w.priority,audioPhase:w.audioPhase};if(w.repeat&&(y.repeat=w.repeat),p.set(y.idempotencyKey,y),Em.includes(w.audioPhase)){let _=c.play({name:w.name,idempotencyKey:w.idempotencyKey,startFrame:w.startFrame,durationFrames:w.durationFrames,delayFrames:w.delayFrames,easing:w.easing,repeat:Cm(w),onDuplicate:"replace"});if(!_.ok)return{ok:!1,errors:[be("invalid-snapshot",_.detail,`cues[${B}]`)]}}}let T=t?{muted:t.muted,assets:{...t.inspect().assets},started:[...i.values()].filter(B=>B.audioPhase==="started").map(B=>({idempotencyKey:B.idempotencyKey,channelId:B.channelId,participantId:B.participantId,priority:B.priority}))}:null,S={reducedSensory:n,presentation:r,records:new Map(i),pending:new Set(s),events:o.slice(),eventCursor:a},D=B=>{n=S.reducedSensory,r=S.presentation,i.clear();for(let[w,y]of S.records)i.set(w,y);s.clear();for(let w of S.pending)s.add(w);if(o.length=0,o.push(...S.events),a=S.eventCursor,t&&T){T.muted?t.mute():t.unmute();for(let[w,y]of Object.entries(T.assets))t.handleHostEvent({type:y==="ready"?ze:je,kind:"state",payload:{id:w}});for(let w of[...i.values()])t.noteCueEnded(w.idempotencyKey);for(let w of T.started)t.noteCueStarted(w)}return{ok:!1,errors:B}};try{for(let y of i.values())t?.noteCueEnded(y.idempotencyKey);i.clear(),s.clear(),o.length=0,n=v.snapshot.reducedSensory,r=c;for(let[y,_]of p)i.set(y,_);o.push(...I),a=o.length;let B=new Set,w=new Set;for(let y of v.snapshot.events)y.type===mr&&B.add(y.assetId),y.type===un&&y.reason==="asset-failed"&&w.add(y.assetId);if(t){for(let y of B)t.handleHostEvent({type:ze,kind:"state",payload:{id:y}});for(let y of w)t.handleHostEvent({type:je,kind:"state",payload:{id:y}})}for(let y of v.snapshot.cues)if(y.audioPhase==="started"&&t?.noteCueStarted({idempotencyKey:y.idempotencyKey,channelId:y.channelId,participantId:y.participantId,priority:y.priority}),y.audioPhase==="scheduled"){let _=r.get(y.idempotencyKey),L=t?.assetStatus(y.assetId);_?.phase==="active"&&L!=="ready"&&L!=="failed"&&m.add(y.idempotencyKey)}for(let y of m)s.add(y);return{ok:!0,snapshot:P()}}catch(B){let w=B instanceof Error?B.message:String(B);return D([be("invalid-snapshot",w)])}},get(u){let v=i.get(u);if(v)return Mi(v,r.get(u),r.frame)},dispose(){W?.(),x()},get frame(){return r.frame},setReducedSensory(u){n=!!u},get reducedSensory(){return n}}}function Tm(e,t){return e.play(t)}function $s(e={}){let t=Rs({toneStart:async()=>{},reducedSensory:e.reducedSensory}),n=Ac({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=gr(r);if(!i.ok)return i;let o,s=r;if(typeof r=="string")try{s=JSON.parse(r)}catch{return i}Fn(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 wm=1,Tc=["loading","ready","error","unsupported"],wc=["keyboard","pointer","audio","assets","hostChannel"],xc=["image","audio","font","spritesheet"],_c=["tone","midi"],Hi=["source-over","screen"],qi=["transparent","opaque"],Oc=["render","calculation"],Hn=["audio","controller","network","persistence","fullscreen"],xm=new Set(Tc),Dc=new Set(wc),Pc=new Set(xc),Nc=new Set(_c),_m=new Set(["version","id","runtime","phases","managers","assets","acceptedEvents","emittedEvents","permissions","integrations","surface","layers","modules","kind","grants"]),Om=new Set(["minContractVersion","features"]),Dm=new Set(["kinds","declarations"]),Nm=new Set(["id","kind"]),Mm=new Set(["emit","subscribe","authoritative"]),Mc=new Set(["alpha","clearPolicy"]),Lc=new Set(["compositor","blend"]),Vc=new Set(["refs"]),Lm=new Set(["id","version"]),Bi=/^[a-z0-9][a-z0-9.-]*$/i,Fc=new Set(Hi),Bc=new Set(qi),$c=new Set(Oc),Hs=new Set(Hn),Vm=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 ut(e){return e!==null&&typeof e=="object"&&!Array.isArray(e)}function lt(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 Fm(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 Bm(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 $i(e,t){for(let n of t)if(e===n||Bm(n,e))return!0;return!1}function Bn(e){let t=new Set,n=[];for(let r of e)t.has(r)||(t.add(r),n.push(r));return n}function qs(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 $n(e,t){return qs(e,t,(n,r)=>Fm(n)?void 0:de("invalid-pattern",`invalid event pattern "${n}"`,r))}function vt(e,t,n,r,i){return qs(e,t,(o,s)=>n.has(o)?void 0:de(r,`invalid ${i} "${o}"`,s))}function Hc(e,t){return qs(e,t,(n,r)=>/^[a-z0-9][a-z0-9.-]*$/i.test(n)?void 0:de("invalid-feature",`invalid feature tag "${n}"`,r))}function qc(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(!ut(i)){n.push(de("invalid-module","module ref must be an object",s));return}n.push(...lt(i,Lm,s)),(typeof i.id!="string"||i.id.length===0||!Bi.test(i.id))&&n.push(de("invalid-module",`invalid module id "${String(i.id)}"`,`${s}.id`)),(typeof i.version!="string"||i.version.length===0||!Bi.test(i.version))&&n.push(de("invalid-module",`invalid module version "${String(i.version)}"`,`${s}.version`)),typeof i.id=="string"&&Bi.test(i.id)&&typeof i.version=="string"&&Bi.test(i.version)&&r.push({id:i.id,version:i.version})}),n.length>0?{ok:!1,errors:n}:{ok:!0,values:r}}function $m(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 Hm(e){if(!ut(e))return[de("invalid-manifest","capability manifest must be a JSON object")];let t=[...lt(e,_m,"")];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")),!ut(e.runtime))t.push(de("invalid-runtime","runtime is required","runtime"));else{t.push(...lt(e.runtime,Om,"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=Hc(e.runtime.features,"runtime.features");d.ok||t.push(...d.errors)}let n=vt(e.phases,"phases",xm,"invalid-phase","phase");n.ok||t.push(...n.errors);let r=vt(e.managers,"managers",Dc,"invalid-manager","manager");if(r.ok||t.push(...r.errors),!ut(e.assets))t.push(de("invalid-assets","assets is required","assets"));else{t.push(...lt(e.assets,Dm,"assets"));let a=vt(e.assets.kinds,"assets.kinds",Pc,"invalid-asset-kind","asset kind");a.ok||t.push(...a.errors),Array.isArray(e.assets.declarations)?e.assets.declarations.forEach((d,f)=>{let l=`assets.declarations[${f}]`;if(!ut(d)){t.push(de("invalid-assets","asset declaration must be an object",l));return}t.push(...lt(d,Nm,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"||!Pc.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=$n(e.acceptedEvents,"acceptedEvents");i.ok||t.push(...i.errors);let o=$n(e.emittedEvents,"emittedEvents");if(o.ok||t.push(...o.errors),!ut(e.permissions))t.push(de("invalid-permissions","permissions is required","permissions"));else{t.push(...lt(e.permissions,Mm,"permissions"));let a=$n(e.permissions.emit,"permissions.emit");a.ok||t.push(...a.errors);let d=$n(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=vt(e.integrations,"integrations",Nc,"invalid-integration","integration");if(s.ok||t.push(...s.errors),e.surface!==void 0&&(ut(e.surface)?(t.push(...lt(e.surface,Mc,"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"||!Bc.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(!ut(e.layers))t.push(de("invalid-layers","layers must be an object","layers"));else if(t.push(...lt(e.layers,Lc,"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=vt(e.layers.blend,"layers.blend",Fc,"invalid-blend","blend mode");a.ok||t.push(...a.errors)}}if(e.modules!==void 0){if(!ut(e.modules))t.push(de("invalid-module","modules must be an object","modules"));else if(t.push(...lt(e.modules,Vc,"modules")),e.modules.refs!==void 0){let a=qc(e.modules.refs,"modules.refs");a.ok||t.push(...a.errors)}}if(e.kind!==void 0&&(typeof e.kind!="string"||!$c.has(e.kind))&&t.push(de("invalid-kind",`invalid cart kind "${String(e.kind)}"`,"kind")),e.grants!==void 0){let a=vt(e.grants,"grants",Hs,"invalid-grant","grant");a.ok||t.push(...a.errors)}return t}function qm(e){let t=[];return e.emittedEvents.forEach((n,r)=>{$i(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)=>{$i(n,e.permissions.subscribe)||t.push(de("undeclared-permission",`accepted event "${n}" is not covered by permissions.subscribe`,`acceptedEvents[${r}]`))}),t}function Gm(e){let t=Bn(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:Bn(e.phases),managers:Bn(e.managers),assets:{kinds:t,declarations:n},acceptedEvents:[...e.acceptedEvents],emittedEvents:[...e.emittedEvents],permissions:r,integrations:Bn(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=Bn(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=$m(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=Bn(e.grants)),i}function yr(e){let t=Hm(e);if(t.length>0)return{ok:!1,errors:t};let n=Gm(e);return t.push(...qm(n)),t.length>0?{ok:!1,errors:t}:{ok:!0,manifest:n}}function Km(e){let t=e;if(typeof e=="string")try{t=JSON.parse(e)}catch{return{ok:!1,errors:[de("invalid-json","capability manifest JSON is not parseable")]}}return yr(t)}function Wm(e){return JSON.parse(JSON.stringify(e))}function hr(e,t){let n=yr(e),r=n.ok?[]:[...n.errors];if(!ut(t))return{ok:!1,errors:[de("invalid-host","host capabilities must be a JSON object")]};r.push(...lt(t,Vm,"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=Hc(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,f)=>{a.has(d)||r.push(de("unsupported-feature",`host does not support required feature "${d}"`,`runtime.features[${f}]`))})}let o=vt(t.integrations,"host.integrations",Nc,"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,f)=>{a.has(d)||r.push(de("missing-integration",`host does not provide required integration "${d}"`,`integrations[${f}]`))})}if(t.managers!==void 0){let a=vt(t.managers,"host.managers",Dc,"invalid-manager","manager");if(!a.ok)r.push(...a.errors);else if(n.ok){let d=new Set(a.values);n.manifest.managers.forEach((f,l)=>{d.has(f)||r.push(de("missing-manager",`host does not provide required manager "${f}"`,`managers[${l}]`))})}}if(t.emit!==void 0){let a=$n(t.emit,"host.emit");a.ok?n.ok&&n.manifest.permissions.emit.forEach((d,f)=>{$i(d,a.values)||r.push(de("unknown-permission",`host does not allow emit permission "${d}"`,`permissions.emit[${f}]`))}):r.push(...a.errors)}if(t.subscribe!==void 0){let a=$n(t.subscribe,"host.subscribe");a.ok?n.ok&&n.manifest.permissions.subscribe.forEach((d,f)=>{$i(d,a.values)||r.push(de("unknown-permission",`host does not allow subscribe permission "${d}"`,`permissions.subscribe[${f}]`))}):r.push(...a.errors)}if(t.surface!==void 0&&(ut(t.surface)?(r.push(...lt(t.surface,Mc,"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,f)=>{(typeof d!="string"||!Bc.has(d))&&r.push(de("invalid-clear-policy",`invalid clear policy "${String(d)}"`,Array.isArray(t.surface?.clearPolicy)?`host.surface.clearPolicy[${f}]`:"host.surface.clearPolicy"))})):r.push(de("invalid-host","host.surface must be an object","host.surface"))),t.layers!==void 0){if(!ut(t.layers))r.push(de("invalid-host","host.layers must be an object","host.layers"));else if(r.push(...lt(t.layers,Lc,"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=vt(t.layers.blend,"host.layers.blend",Fc,"invalid-blend","blend mode");a.ok||r.push(...a.errors)}}let s;if(t.modules!==void 0)if(!ut(t.modules))r.push(de("invalid-host","host.modules must be an object","host.modules"));else if(r.push(...lt(t.modules,Vc,"host.modules")),t.modules.refs!==void 0){let a=qc(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 f=new Set(d?.blend??[]);a.blend.forEach((l,k)=>{f.has(l)||r.push(de("unsupported-layer",`host does not provide blend mode "${l}"`,`layers.blend[${k}]`))})}}if(n.ok&&n.manifest.modules?.refs){let a=t.modules===void 0?[]:s??[];n.manifest.modules.refs.forEach((d,f)=>{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[${f}]`))})}if(n.ok&&n.manifest.grants&&n.manifest.grants.length>0){let a=t.grants===void 0?{ok:!0,values:[]}:vt(t.grants,"host.grants",Hs,"invalid-grant","grant");if(!a.ok)r.push(...a.errors);else{let d=new Set(a.values);n.manifest.grants.forEach((f,l)=>{d.has(f)||r.push(de("ungranted-capability",`host does not grant "${f}"`,`grants[${l}]`))})}}else if(t.grants!==void 0){let a=vt(t.grants,"host.grants",Hs,"invalid-grant","grant");a.ok||r.push(...a.errors)}if(t.kinds!==void 0){let a=vt(t.kinds,"host.kinds",$c,"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 Ki=1,jm=1e-6,Um=.5,Jm=["normalized","asset","canvas","css","viewport"],zm=["center","top-left","top-right","bottom-left","bottom-right","top","bottom","left","right"],Ym={center:{x:.5,y:.5},"top-left":{x:0,y:0},"top-right":{x:1,y:0},"bottom-left":{x:0,y:1},"bottom-right":{x:1,y:1},top:{x:.5,y:0},bottom:{x:.5,y:1},left:{x:0,y:.5},right:{x:1,y:.5}};function Xm(e){let t=Ym[e];return{x:t.x,y:t.y}}function Gs(e){let t=e.devicePixelRatio??1,{contentWidth:n,contentHeight:r,viewportWidth:i,viewportHeight:o,mode:s}=e,a=i/n,d=o/r,f=s==="contain"?Math.min(a,d):Math.max(a,d),l=n*f,k=r*f,E=(i-l)/2,C=(o-k)/2,O=Gi(-E/l),h=Gi(-C/k),A=Gi(i/l),F=Gi(o/k);return{mode:s,contentWidth:n,contentHeight:r,viewportWidth:i,viewportHeight:o,devicePixelRatio:t,scale:f,offsetX:E,offsetY:C,canvasWidth:i*t,canvasHeight:o*t,visibleNormalizedRect:{x:O,y:h,width:Math.min(A,1-O),height:Math.min(F,1-h)}}}function Qm(e,t){return{x:e.x*t.contentWidth,y:e.y*t.contentHeight}}function Zm(e,t){return{x:e.x/t.contentWidth,y:e.y/t.contentHeight}}function Ks(e,t){return{x:t.offsetX+e.x*t.contentWidth*t.scale,y:t.offsetY+e.y*t.contentHeight*t.scale}}function ln(e,t){return{x:(e.x-t.offsetX)/(t.contentWidth*t.scale),y:(e.y-t.offsetY)/(t.contentHeight*t.scale)}}function Kc(e,t){return{x:e.x*t.devicePixelRatio,y:e.y*t.devicePixelRatio}}function Wc(e,t){return{x:e.x/t.devicePixelRatio,y:e.y/t.devicePixelRatio}}function eg(e,t){return Kc(Ks(e,t),t)}function jc(e,t){return ln(Wc(e,t),t)}function Ws(e,t){let n=Ks({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 Uc(e,t){let n=Ws(e,t),r=t.devicePixelRatio;return{x:n.x*r,y:n.y*r,width:n.width*r,height:n.height*r}}function vr(e,t,n,r){let o=(r?.space??"canvas")==="css"?ln(e,t):jc(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 f=r.precedence[a.id]??Number.NEGATIVE_INFINITY,l=r.precedence[d.id]??Number.NEGATIVE_INFINITY;return l!==f?l-f:a.id<d.id?-1:a.id>d.id?1:0}),s[0]}function js(e,t){let n=br(e);if(n)return Ws(n,t)}function tg(e){let t=new Map,n=r=>{if(t.has(r.id))return{ok:!1,error:"duplicate-id",id:r.id};let i={id:r.id,point:{x:r.point.x,y:r.point.y},...r.origin!==void 0?{origin:r.origin}:{}};return t.set(i.id,i),{ok:!0,landmark:i}};if(e)for(let r of e){let i=n(r);if(!i.ok)throw new Error(`Duplicate landmark id: ${i.id}`)}return{register:n,get:r=>t.get(r),list:()=>[...t.values()]}}function Us(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),Gc(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=br(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&&!og(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(!Gc(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=br(o);if(s)for(let a=i+1;a<e.regions.length;a+=1){let d=e.regions[a],f=br(d);f&&sg(s,f)&&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 ng(e,t,n,r=[]){let i=[],o=(s,a,d)=>{i.push({method:s,id:d,args:a})};for(let s of n.regions){let a=br(s);if(!a)continue;let d=Uc(a,t);e.fillStyle="rgba(0, 180, 255, 0.15)",e.strokeStyle="#00b4ff",e.fillRect&&e.fillRect(d.x,d.y,d.width,d.height),o("fillRect",[d.x,d.y,d.width,d.height],s.id),e.strokeRect&&e.strokeRect(d.x,d.y,d.width,d.height),o("strokeRect",[d.x,d.y,d.width,d.height],s.id),e.font="12px sans-serif";let f=s.id;e.fillText&&e.fillText(f,d.x+4,d.y+14),o("fillText",[f,d.x+4,d.y+14],s.id)}for(let s of r){let a=s.id?`${s.id}: ${s.code}`:s.code,d=16+i.filter(f=>f.method==="fillText").length*14;e.fillText&&e.fillText(a,8,d),o("fillText",[a,8,d],s.id)}return i}function rg(e){return JSON.stringify(e)}function ig(e){return JSON.parse(e)}function Gi(e){return e<=0?0:e>=1?1:e}function Gc(e){return e.x>=0&&e.x<=1&&e.y>=0&&e.y<=1}function og(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 sg(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 br(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?ag(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 ag(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 zc=320,Yc=180,dg=1024,cg="Runtime group has been destroyed";function ug(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 lg(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 Xc(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 Jc(e){try{return JSON.parse(JSON.stringify(e))}catch{return e}}function pg(e){let t=new Set([ht,"*.*","*.*.*","*.*.*.*","*.*.*.*.*"]);for(let n of e){let r=Xc(n);for(let i of r.emit??[])t.add(i);for(let i of r.subscribe??[])t.add(i)}return[...t]}function Js(e){if(!e.participants.length)throw new Error("createRuntimeGroup: at least one participant is required");let t=new Set;for(let u of e.participants){if(!u.id)throw new Error("createRuntimeGroup: participant id is required");if(t.has(u.id))throw new Error(`createRuntimeGroup: duplicate participant id "${u.id}"`);t.add(u.id)}let n=e.origin??0,r=e.width??zc,i=e.height??Yc,o=e.maxTrace??dg,s=[...e.participants].sort((u,v)=>u.id.localeCompare(v.id)),a=[],d=new Map,f=0,l=e.createId??e.router?.createId??(()=>`evt-${++f}`),k=e.now??e.router?.now??(()=>{let u=a[0];if(!u)return n;try{return u.cart.getClock().now}catch{return n}}),E=ws({...e.router,createId:l,now:k,validate:e.validate??e.router?.validate}),C=[],O=!1,h=!1,A=()=>{},F=u=>v=>{u.events.push(v),u.userOnEvent?.(v)},W=()=>{if(h)throw new Error(cg)},x=()=>{A();for(let u of a){try{E.detach(u.id)}catch{}try{u.runtime.destroy()}catch{}u.ownsContainer&&u.container.remove()}a.length=0,d.clear()};try{for(let u of s){let v=u.width??r,c=u.height??i,p=!u.container,m=u.container??lg(v,c),I=Cs({container:m,seed:u.seed??ug(u.id),deterministic:{origin:n},audioBroker:e.audioBroker,audioParticipantId:e.audioBroker?u.id:void 0,kind:u.kind??"render"}),T={id:u.id,kind:u.kind??"render",cartDef:u.cart,initialState:u.initialState,gameManager:u.gameManager,userOnEvent:u.onEvent,runtime:I,container:m,ownsContainer:p,cart:void 0,events:[],errors:[],suspended:!1};I.onError=(S,D)=>{T.errors.push({error:S,info:D})},E.attach(u.id,I.hostChannel,Xc(u)),T.cart=I.mount(u.cart,{initialState:u.initialState,gameManager:u.gameManager,onEvent:F(T)}),a.push(T),d.set(T.id,T)}A=E.subscribe(pg(s),u=>{for(C.push(Jc(u));C.length>o;)C.shift()})}catch(u){throw x(),u}let N=u=>({id:u.id,kind:u.kind,runtime:u.runtime,container:u.container,get events(){return u.events.slice()},get errors(){return u.errors.slice()},get cart(){return u.cart}});return{router:E,origin:n,get paused(){return O},get audioBroker(){return e.audioBroker},participant(u){W();let v=d.get(u);if(!v)throw new Error(`createRuntimeGroup: unknown participant "${u}"`);return N(v)},async step(u=1){if(W(),O)return;let v=Math.max(0,Math.floor(u));for(let c=0;c<v;c++){E.turn();for(let p of a)if(!p.suspended)try{await p.cart.step(1)}catch(m){p.errors.push({error:m,info:{phase:"update",consecutive:p.errors.length+1,stopped:!1}})}}},pause(){W(),O=!0;for(let u of a)u.cart.pause()},resume(){W(),O=!1;for(let u of a)u.cart.resume()},reset(){W(),C.length=0;for(let u of a)u.events.length=0,u.errors.length=0,u.suspended=!1,u.cart=u.runtime.mount(u.cartDef,{initialState:u.initialState,gameManager:u.gameManager,onEvent:F(u)});E.turn()},resize(u,v){W();let c=Math.max(1,u|0),p=Math.max(1,v|0);for(let m of a){Object.defineProperty(m.container,"clientWidth",{value:c,configurable:!0}),Object.defineProperty(m.container,"clientHeight",{value:p,configurable:!0});let I=m.cart.canvas;I&&(I.width=c,I.height=p)}},detach(u){W();let v=d.get(u);if(!v)throw new Error(`createRuntimeGroup: unknown participant "${u}"`);try{E.detach(v.id)}catch{}try{v.runtime.destroy()}catch{}e.audioBroker&&e.audioBroker.teardown(v.id),v.ownsContainer&&v.container.remove();let c=a.indexOf(v);c>=0&&a.splice(c,1),d.delete(u)},suspendParticipant(u){W();let v=d.get(u);if(!v)throw new Error(`createRuntimeGroup: unknown participant "${u}"`);v.suspended=!0,v.cart.pause()},resumeParticipant(u){W();let v=d.get(u);if(!v)throw new Error(`createRuntimeGroup: unknown participant "${u}"`);v.suspended=!1,O||v.cart.resume()},isParticipantSuspended(u){W();let v=d.get(u);if(!v)throw new Error(`createRuntimeGroup: unknown participant "${u}"`);return v.suspended},dispatch(u,v){W();let c=d.get(u);if(!c)throw new Error(`createRuntimeGroup: unknown participant "${u}"`);c.cart.dispatch(v)},publish(u,v){return W(),E.publish(u,v)},inspectParticipants(){W();let u=new Map(a.map(v=>[v.id,v.kind]));return E.inspectParticipants().map(v=>({...v,kind:u.get(v.id)??"render"}))},async inspect(){W();let u={},v={},c=new Map(E.inspectParticipants().map(I=>[I.id,I]));for(let I of a){let T=await I.cart.getReplayMetadata(),S=I.cart.getClock();v[I.id]=S;let D=c.get(I.id);u[I.id]={state:T.state,events:I.events.slice(),errors:I.errors.slice(),kind:I.kind,clock:S,emit:D?.emit.slice()??[],subscribe:D?.subscribe.slice()??[],authoritative:D?.authoritative===!0,suspended:I.suspended}}let p=C.map(I=>Jc(I)),m=a.filter(I=>I.suspended).map(I=>I.id).sort();return{participants:u,trace:p,diagnostics:{paused:O,participantIds:a.map(I=>I.id),suspendedIds:m,clocks:v,rejections:p.filter(I=>I.type===ht).map(I=>I.payload)}}},destroy(){if(!h){h=!0,O=!1;try{x()}finally{C.length=0}}}}}var fg=["invalid-ref","unknown-module","version-mismatch","not-allowlisted","load-failed","invoke-failed","timeout","rate-limited","destroyed"],Qc="executable module host has been destroyed";var mg=/^[a-z0-9][a-z0-9.-]*$/i,gg=/^[a-z0-9][a-z0-9-]*$/i;function fn(e){return{id:e.id,version:e.version}}function zs(e){return`${e.id}@${e.version}`}function Sr(e){return typeof e=="string"&&e.length>0&&mg.test(e)}function yg(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==="*"||gg.test(n))}function tu(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 hg(e,t){return t.some(n=>n.version===e.version&&tu(n.id,e.id))}function Er(e){return e!==null&&typeof e=="object"&&!Array.isArray(e)}function bg(e){return typeof e=="object"&&e!==null&&typeof e.then=="function"}function Zc(e){return e instanceof Error&&e.message?e.message:String(e)}function qn(e){if(e===null||typeof e!="object")return e;if(Array.isArray(e))return Object.freeze(e.map(n=>qn(n)));if(Object.getPrototypeOf(e)!==Object.prototype)return e;let t={};for(let n of Object.keys(e))t[n]=qn(e[n]);return Object.freeze(t)}function eu(e){if(!Er(e))return;let t=e.id,n=e.version;if(!(!Sr(t)||!Sr(n)))return{id:t,version:n}}function vg(e){if(e===void 0)return{};if(!Er(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 Ys(e){if(!Er(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((P,u)=>{if(!Er(P))throw new Error(`createExecutableModuleHost: allowlist[${u}] must be an object`);if(!yg(P.id))throw new Error(`createExecutableModuleHost: allowlist[${u}].id is not a valid id or pattern`);if(!Sr(P.version)||P.version.includes("*"))throw new Error(`createExecutableModuleHost: allowlist[${u}].version must be an exact version`);return{id:P.id,version:P.version}}),n=new Map,r=new Map;for(let[P,u]of e.modules.entries()){if(!Er(u))throw new Error(`createExecutableModuleHost: modules[${P}] must be an object`);if(!Sr(u.id))throw new Error(`createExecutableModuleHost: modules[${P}].id is invalid`);if(!Sr(u.version))throw new Error(`createExecutableModuleHost: modules[${P}].version is invalid`);if(typeof u.create!="function")throw new Error(`createExecutableModuleHost: modules[${P}].create must be a function`);let v=`${u.id}@${u.version}`;if(n.has(v))throw new Error(`createExecutableModuleHost: duplicate module ${v}`);n.set(v,{id:u.id,version:u.version,create:u.create,capabilities:u.capabilities});let c=r.get(u.id)??[];c.push(u.version),r.set(u.id,c)}let i=vg(e.limits),o=e.capabilities,s=new Map,a=new Set,d=[],f=0,l=0,k=!1;function E(P,u,v){let c=v?{code:P,detail:u,ref:fn(v)}:{code:P,detail:u};return d.push(c),d.length>256&&d.shift(),c}function C(P,u,v){return{ok:!1,error:E(P,u,v)}}function O(P){if(k){let I=eu(P);return C("destroyed",Qc,I)}let u=eu(P);if(!u)return C("invalid-ref","module ref requires exact id and version");let v=n.get(zs(u)),c=r.has(u.id),p=hg(u,t),m=t.some(I=>tu(I.id,u.id)&&I.version!==u.version);return p?v?{ok:!0,ref:u,registration:v}:c?C("version-mismatch",`no factory for ${u.id}@${u.version}`,u):C("unknown-module",`unknown module "${u.id}"`,u):m||c&&!v?C("version-mismatch",`no allowlisted factory for ${u.id}@${u.version}`,u):!v&&!c?C("unknown-module",`unknown module "${u.id}"`,u):C("not-allowlisted",`${u.id}@${u.version} is not allowlisted`,u)}function h(P,u){let v=zs(P);if(s.has(v))return{ok:!0,ref:fn(P)};let c=qn({...o??{},...u.capabilities??{}});try{let p=u.create(c);return!p||typeof p.invoke!="function"?C("load-failed",`factory for ${P.id}@${P.version} did not return an invoke() module`,P):(s.set(v,{ref:fn(P),instance:p}),{ok:!0,ref:fn(P)})}catch(p){return C("load-failed",Zc(p),P)}}function A(P){let u=O(P);return u.ok?h(u.ref,u.registration):u}function F(P,u){let v=O(P);if(!v.ok)return Promise.resolve(v);if(i.maxInvokesPerTurn!==void 0&&l>=i.maxInvokesPerTurn)return Promise.resolve(C("rate-limited",`maxInvokesPerTurn ${i.maxInvokesPerTurn} exceeded`,v.ref));l+=1;let c=h(v.ref,v.registration);if(!c.ok)return Promise.resolve(c);let p=s.get(zs(v.ref));if(!p)return Promise.resolve(C("load-failed","module instance was not retained",v.ref));let m=new AbortController;a.add(m);let I=Date.now(),T=i.maxInvokeMs,S;T!==void 0&&(S=setTimeout(()=>m.abort(),T));let D=w=>(S!==void 0&&clearTimeout(S),a.delete(m),k?C("destroyed",Qc,v.ref):w),B=w=>m.signal.aborted&&T!==void 0?C("timeout",`invoke exceeded ${T}ms`,v.ref):C("invoke-failed",Zc(w),v.ref);try{let w=p.instance.invoke(u,{signal:m.signal,turn:f});return bg(w)?new Promise(y=>{let _=!1,L=H=>{_||(_=!0,y(D(H)))};if(T!==void 0){let H=S;H!==void 0&&clearTimeout(H),S=setTimeout(()=>{m.abort(),L(C("timeout",`invoke exceeded ${T}ms`,v.ref))},Math.max(0,T-(Date.now()-I)))}Promise.resolve(w).then(H=>L({ok:!0,value:H}),H=>L(B(H)))}):T!==void 0&&Date.now()-I>=T?(m.abort(),Promise.resolve(D(C("timeout",`invoke exceeded ${T}ms`,v.ref)))):Promise.resolve(D({ok:!0,value:w}))}catch(w){return Promise.resolve(D(B(w)))}}function W(){k||(f+=1,l=0)}function x(){return{allowlist:t.map(fn),registered:[...n.values()].map(P=>({id:P.id,version:P.version})),loaded:[...s.values()].map(P=>fn(P.ref)),turn:f,invokesThisTurn:l,diagnostics:d.map(P=>P.ref?{...P,ref:fn(P.ref)}:{...P})}}function N(){if(!k){k=!0;for(let P of a)P.abort();a.clear();for(let P of s.values())try{P.instance.destroy?.()}catch{}s.clear(),n.clear(),r.clear(),t.length=0}}return{load:A,invoke:F,beginTurn:W,inspect:x,destroy:N}}var Wi=1,ji="hmac-sha256",Yt=1,Zs=Hn,Sg=["invalid-json","invalid-manifest","invalid-version","invalid-signature","unknown-publisher","unknown-key","undeclared-asset","hash-mismatch","unsigned-bytes","capability-denied","destroyed","load-failed"],Ui=class extends Error{constructor(n,r){super(`${r} requires grant "${n}"`);this.code="capability-denied";this.name="RemoteCartCapabilityError",this.grant=n}};function me(e,t,n){return n?{code:e,detail:t,path:n}:{code:e,detail:t}}function gn(e){return e!==null&&typeof e=="object"&&!Array.isArray(e)}function et(e){return typeof e=="string"&&e.length>0}var Xs=new Set(Zs),nu=new Set(["image","audio","font","spritesheet"]),Eg=new Set(["version","id","cartVersion","publisher","assets","requestedGrants","module","capabilities"]),Ig=new Set(["id","kind","url","hash","alg"]),kg=new Set(["alg","keyId","mac"]),ru=/^[a-z0-9][a-z0-9.-]*$/i,Rg=256;function au(e){let t="";for(let n=0;n<e.length;n++)t+=e[n].toString(16).padStart(2,"0");return t}var Cg=/^[0-9a-f]+$/i;function iu(e){if(e.length%2!==0||e.length===0||!Cg.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 Ag(e,t){let n=iu(e),r=iu(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 Ir(e){let t=typeof e=="string"?new TextEncoder().encode(e):e,n=await crypto.subtle.digest("SHA-256",t);return au(new Uint8Array(n))}async function ea(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 au(new Uint8Array(r))}function Qs(e){if(Array.isArray(e))return e.map(Qs);if(!gn(e))return e;let t={};for(let n of Object.keys(e).sort())t[n]=Qs(e[n]);return t}function ta(e){return JSON.stringify(Qs(e))}function Ji(e,t,n){let r=[];for(let i of Object.keys(e))t.has(i)||r.push(me("invalid-manifest",`unknown field "${i}"`,n?`${n}.${i}`:i));return r}function Pg(e){let t=new Set,n=[];for(let r of e)t.has(r)||(t.add(r),n.push(r));return n}function du(e,t){if(!Array.isArray(e))return{ok:!1,errors:[me("invalid-manifest",`${t} must be an array`,t)]};let n=[],r=[];return e.forEach((i,o)=>{let s=`${t}[${o}]`;typeof i!="string"||!Xs.has(i)?n.push(me("invalid-manifest",`invalid grant "${String(i)}"`,s)):r.push(i)}),n.length>0?{ok:!1,errors:n}:{ok:!0,values:Pg(r)}}function Tg(e){if(!Array.isArray(e))return{ok:!1,errors:[me("invalid-manifest","assets must be an array","assets")]};let t=[],n=[],r=new Set;return e.forEach((i,o)=>{let s=`assets[${o}]`;if(!gn(i)){t.push(me("invalid-manifest","asset must be an object",s));return}t.push(...Ji(i,Ig,s)),et(i.id)?r.has(i.id)?t.push(me("invalid-manifest",`duplicate asset id "${i.id}"`,`${s}.id`)):r.add(i.id):t.push(me("invalid-manifest","asset id is required",`${s}.id`)),(typeof i.kind!="string"||!nu.has(i.kind))&&t.push(me("invalid-manifest",`invalid asset kind "${String(i.kind)}"`,`${s}.kind`)),et(i.url)||t.push(me("invalid-manifest","asset url is required",`${s}.url`)),et(i.hash)||t.push(me("unsigned-bytes","asset hash is required",`${s}.hash`)),i.alg!=="sha256"&&t.push(me("invalid-manifest","asset alg must be sha256",`${s}.alg`)),et(i.id)&&typeof i.kind=="string"&&nu.has(i.kind)&&et(i.url)&&et(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 wg(e){return e===void 0?{ok:!0}:gn(e)?!et(e.id)||!ru.test(e.id)?{ok:!1,errors:[me("invalid-manifest","module.id is invalid","module.id")]}:!et(e.version)||!ru.test(e.version)?{ok:!1,errors:[me("invalid-manifest","module.version is invalid","module.version")]}:{ok:!0,value:{id:e.id,version:e.version}}:{ok:!1,errors:[me("invalid-manifest","module must be an object","module")]}}function cu(e){if(!gn(e))return{ok:!1,errors:[me("invalid-manifest","remote cart body must be a JSON object")]};let t=Ji(e,Eg,"");e.version!==void 0&&e.version!==Wi&&t.push(me("invalid-version",`remote cart manifest version must be ${Wi}`,"version")),et(e.id)||t.push(me("invalid-manifest","id is required","id")),et(e.cartVersion)||t.push(me("invalid-manifest","cartVersion is required","cartVersion")),et(e.publisher)||t.push(me("unknown-publisher","publisher is required","publisher"));let n=Tg(e.assets);n.ok||t.push(...n.errors);let r=du(e.requestedGrants,"requestedGrants");r.ok||t.push(...r.errors);let i=wg(e.module);i.ok||t.push(...i.errors);let o;if(e.capabilities!==void 0){let a=yr(e.capabilities);if(a.ok)o=a.manifest;else for(let d of a.errors)t.push(me(d.code,d.detail,d.path?`capabilities.${d.path}`:"capabilities"))}if(t.length>0)return{ok:!1,errors:t};let s={version:Wi,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 xg(e){if(!gn(e))return{ok:!1,errors:[me("invalid-signature","signature must be an object","signature")]};let t=Ji(e,kg,"signature");return e.alg!==ji&&t.push(me("invalid-signature","signature.alg must be hmac-sha256","signature.alg")),et(e.keyId)||t.push(me("unknown-key","signature.keyId is required","signature.keyId")),(!et(e.mac)||!/^[0-9a-f]+$/i.test(e.mac))&&t.push(me("invalid-signature","signature.mac must be hex","signature.mac")),t.length>0?{ok:!1,errors:t}:{ok:!0,signature:{alg:ji,keyId:e.keyId,mac:e.mac.toLowerCase()}}}function zi(e){if(!gn(e))return{ok:!1,errors:[me("invalid-manifest","signed remote cart must be a JSON object")]};let t=cu(e.body),n=xg(e.signature),r=[];t.ok||r.push(...t.errors),n.ok||r.push(...n.errors);let i=Ji(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}}}function uu(e){let t=e;if(typeof e=="string")try{t=JSON.parse(e)}catch{return{ok:!1,errors:[me("invalid-json","remote cart JSON is not parseable")]}}return zi(t)}async function _g(e,t,n){let r=cu(e);if(!r.ok)return r;if(!et(t)||!et(n))return{ok:!1,errors:[me("unknown-key","signing key id and secret are required")]};let i=await ea(t,ta(r.body));return{ok:!0,manifest:{body:r.body,signature:{alg:ji,keyId:n,mac:i}}}}async function kr(e,t,n){let r=zi(e);if(!r.ok)return r;let i=t[r.manifest.signature.keyId];if(!et(i))return{ok:!1,errors:[me("unknown-key",`unknown signature key "${r.manifest.signature.keyId}"`,"signature.keyId")]};let o=await ea(i,ta(r.manifest.body));return Ag(o,r.manifest.signature.mac)?n!==void 0&&r.manifest.body.cartVersion!==n?{ok:!1,errors:[me("invalid-version",`cartVersion ${r.manifest.body.cartVersion} does not match ${n}`,"body.cartVersion")]}:{ok:!0,manifest:r.manifest}:{ok:!1,errors:[me("invalid-signature","HMAC does not match canonical body","signature.mac")]}}function Og(e){let t=new Map;for(let[n,r]of Object.entries(e)){let i=uu(r);i.ok&&t.set(n,i.manifest)}return{get(n){return t.get(n)}}}async function Dg(e){let t;if(e.source.kind==="registry"){let n=e.registry?.get(e.source.id);if(!n)return{ok:!1,errors:[me("invalid-manifest",`unknown registry id "${e.source.id}"`)]};t=n}else{if(typeof e.fetch!="function")return{ok:!1,errors:[me("load-failed","url loads require a fetch adapter")]};try{t=await e.fetch(e.source.url)}catch(n){return{ok:!1,errors:[me("load-failed",n instanceof Error?n.message:String(n))]}}}return kr(t,e.keys,e.expectedVersion)}function na(e){return[...e.body.requestedGrants]}function Gn(e){let t=new Set;if(e)for(let o of e)Xs.has(o)&&t.add(o);function n(){return{schemaVersion:Yt,grants:Zs.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:[me("invalid-json","grant snapshot JSON is not parseable")]}}if(!gn(s))return{ok:!1,errors:[me("invalid-manifest","grant snapshot must be an object")]};if(s.schemaVersion!==Yt)return{ok:!1,errors:[me("invalid-version",`grant snapshot schema must be ${Yt}`,"schemaVersion")]};let a=du(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 Xs.has(o)?(s?t.add(o):t.delete(o),{ok:!0,grants:n().grants}):{ok:!1,errors:[me("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 mn(e,t){return e.push(t),e.length>Rg&&e.shift(),t}function ou(e){return e.code==="undeclared"?me("undeclared-asset",e.message,e.ref):e.code==="hash-mismatch"?me("hash-mismatch",e.message,e.ref):e.code==="unsigned"?me("unsigned-bytes",e.message,e.ref):me("load-failed",e.message,e.ref)}function su(e,t,n,r){let i=(s,a)=>{if(!e.has(s))throw new Ui(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 qn(o)}function lu(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 Ng(e){let t=zi(e.manifest);if(!t.ok)throw new Error(t.errors.map(F=>F.detail).join("; "));let n=t.manifest,r=Gn(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,f=!1,l=!1,k;function E(){return mn(i,me("destroyed","remote cart sandbox has been destroyed"))}async function C(){if(l)return{ok:!0};let F=await kr(n,e.keys);if(!F.ok){for(let W of F.errors)mn(i,W);return{ok:!1,errors:F.errors}}return l=!0,{ok:!0}}async function O(){if(f)return{ok:!1,errors:[E()]};let F=await C();if(!F.ok)return F;if(n.body.capabilities){let P=n.body.capabilities,u=hr(P,{contractVersion:Math.max(1,P.runtime.minContractVersion),features:[...P.runtime.features],integrations:[...P.integrations],grants:r.list()});if(!u.ok){let v=u.errors.map(c=>me(c.code,c.detail,c.path));for(let c of v)mn(i,c);return{ok:!1,errors:v}}}let W=pr({declared:a,fetchBytes:async P=>e.bytesByUrl[P],hashBytes:Ir}),x=cn({resolver:W,emitEvents:!1,wallClockTimeout:!1}),N=n.body.assets.map(P=>({id:P.id,ref:P.id,type:P.kind,integrity:`sha256-${P.hash}`,provenance:{publisher:n.body.publisher,version:n.body.cartVersion}}));try{let P=await x.preload(N);if(P.failed>0)return{ok:!1,errors:P.failures.map(v=>mn(i,ou(v)))};if(d=!0,n.body.module&&e.modules){k=Ys({allowlist:[n.body.module],modules:e.modules,capabilities:su(r,s,e.bytesByUrl,o)});let u=k.load(n.body.module);if(!u.ok){let v=me("load-failed",u.error.detail,`${u.error.ref?.id}@${u.error.ref?.version}`);return mn(i,v),{ok:!1,errors:[v]}}}return{ok:!0,snapshot:P}}catch(P){return xn(P)?{ok:!1,errors:[mn(i,ou(P))]}:{ok:!1,errors:[mn(i,me("load-failed",P instanceof Error?P.message:String(P)))]}}finally{x.dispose()}}function h(){return f?{ok:!1,errors:[E()]}:l?su(r,s,e.bytesByUrl,o):{ok:!1,errors:[me("invalid-signature","verify the manifest HMAC via loadAssets before using capabilities")]}}function A(){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:f,diagnostics:i.map(F=>({...F}))}}return{listRequestedGrants:()=>[...n.body.requestedGrants],grants:r,loadAssets:O,capabilities:h,inspect:A,snapshotProvenance:()=>lu(n,r.list()),destroy(){f||(f=!0,k?.destroy(),o.clear())}}}var Rr=1,Cr=1,fu=8,mu=["cabinet","painting","dream","wormhole","book","nested-world"],gu=["completed","aborted"],sa=["audio","controller","fullscreen"],Xt="portal.lifecycle.entered",Ar="portal.lifecycle.exited",Pr="portal.lifecycle.aborted",Mg=[Xt,Ar,Pr],Lg=new Set(mu),Vg=new Set(gu),Fg=new Set(sa),Bg=new Set(Hn),$g="Portal lifecycle has been destroyed";function Se(e,t,n){return n?{code:e,detail:t,path:n}:{code:e,detail:t}}function ra(e){return e!==null&&typeof e=="object"&&!Array.isArray(e)}function yn(e){try{return JSON.parse(JSON.stringify(e))}catch{return e}}function pu(e){return typeof e=="string"&&Lg.has(e)}function Hg(e){return Fg.has(e)}function oa(e){return[...e].sort()}function yu(e){return oa([...e.childGrantsBefore,...e.transferred,...e.extraChildGrants])}function ia(e){return{id:e.id,parentId:e.parentId,childId:e.childId,metaphor:e.metaphor,seed:e.seed,clock:e.clock,parentState:yn(e.parentState),parentGrants:[...e.parentGrants],childGrants:yu(e),childGrantsBefore:[...e.childGrantsBefore],extraChildGrants:[...e.extraChildGrants],persistence:yn(e.persistence),transferred:[...e.transferred],enterCue:e.enterCue,exitCue:e.exitCue}}function qg(e){return{enter:t=>e.enter({...t,metaphor:"cabinet"}),exit:e.exit,abort:e.abort}}function Gg(e){return{enter:t=>e.enter({...t,metaphor:"painting"}),exit:e.exit,abort:e.abort}}function Kg(e={}){let t=e.group,n=e.audioBroker??t?.audioBroker,r=e.maxDepth??fu,i=new Map((e.declarations??[]).map(y=>[y.id,y])),o=new Map;if(e.grants)for(let[y,_]of Object.entries(e.grants))o.set(y,_);let s=0,a=e.createId??(()=>`portal-${++s}`),d=[],f=[],l=null,k=!1,E=e.rootId??null,C=()=>{if(k)throw new Error($g)},O=y=>{let _=o.get(y);return _||(_=Gn(),o.set(y,_)),_},h=()=>d.length===0?E:d[d.length-1].childId,A=(y,_)=>{if(f.push(y),!t)return;let L={type:y,kind:"state",payload:_};try{t.publish(L)}catch{}},F=y=>{if(!t)return null;try{return yn(t.participant(y).cart.getCartState())}catch{return null}},W=()=>{if(!t)return;let y=new Set;for(let L of d)y.add(L.parentId);let _=new Set(t.inspectParticipants().map(L=>L.id));for(let L of _)y.has(L)?t.isParticipantSuspended(L)||t.suspendParticipant(L):t.isParticipantSuspended(L)&&t.resumeParticipant(L)},x=(y,_,L)=>{let H=O(y),G=O(_),ee=H.list(),Y=G.list(),K=[];for(let g of sa)H.has(g)&&(H.revoke(g),G.grant(g),K.push(g));if(L)for(let g of L)G.grant(g);return N(y,_,K,L??[]),{transferred:K,parentBefore:ee,childBefore:Y}},N=(y,_,L,H)=>{n&&(L.includes("audio")||H.includes("audio"))&&(n.revoke(y),n.authorize(_))},P=y=>{for(let _ of y)N(_.parentId,_.childId,_.transferred,_.extraChildGrants)},u=()=>n?n.inspect().authorized.slice():[],v=y=>{if(!n)return;let _=new Set(y);for(let L of n.inspect().authorized)_.has(L)||n.revoke(L);for(let L of y)n.authorize(L)},c=()=>t?t.inspectParticipants().map(y=>y.id).filter(y=>t.isParticipantSuspended(y)).sort():[],p=y=>{if(!t)return;let _=new Set(y);for(let L of t.inspectParticipants()){let H=t.isParticipantSuspended(L.id);_.has(L.id)&&!H&&t.suspendParticipant(L.id),!_.has(L.id)&&H&&t.resumeParticipant(L.id)}},m=y=>{let _=O(y.parentId),L=O(y.childId);for(let H of y.transferred)L.revoke(H),_.grant(H);for(let H of y.extraChildGrants)y.childGrantsBefore.includes(H)||L.revoke(H);n&&(y.transferred.includes("audio")||y.extraChildGrants.includes("audio"))&&(n.revoke(y.childId),n.authorize(y.parentId))},I=()=>{let y={};for(let[_,L]of o)y[_]=L.list();return{destroyed:k,activeId:k?null:h(),stack:d.map(ia),lastOutcome:l,cues:[...f],grants:y}},T=(y,_)=>{if(C(),d.length===0)return{ok:!1,errors:[Se("empty-stack","no portal is open")]};let L=d[d.length-1],H={schemaVersion:Cr,kind:y,payload:_},G=y==="aborted"?Pr:Ar;return L.exitCue=G,m(L),d.pop(),l=H,W(),A(G,{parentId:L.parentId,childId:L.childId,metaphor:L.metaphor,kind:y}),{ok:!0,inspect:I(),outcome:H}},S=(y,_)=>y===null?{ok:!0,outcome:null}:ra(y)?y.schemaVersion!==Cr?{ok:!1,errors:[Se("invalid-version",`outcome schema must be ${Cr}`,`${_}.schemaVersion`)]}:typeof y.kind!="string"||!Vg.has(y.kind)?{ok:!1,errors:[Se("invalid-snapshot","outcome.kind is required",`${_}.kind`)]}:{ok:!0,outcome:{schemaVersion:Cr,kind:y.kind,payload:y.payload}}:{ok:!1,errors:[Se("invalid-snapshot","outcome must be an object or null",_)]},D=(y,_)=>{if(!Array.isArray(y))return{ok:!1,errors:[Se("invalid-snapshot","grants must be an array",_)]};let L=[];for(let H=0;H<y.length;H++){let G=y[H];if(typeof G!="string"||!Bg.has(G))return{ok:!1,errors:[Se("invalid-snapshot",typeof G=="string"?`unknown grant "${G}"`:"grant must be a string",`${_}[${H}]`)]};L.push(G)}return{ok:!0,grants:L}},B=(y,_)=>{if(!ra(y))return{ok:!1,errors:[Se("invalid-snapshot","frame must be an object",_)]};if(typeof y.id!="string"||y.id.length===0)return{ok:!1,errors:[Se("invalid-snapshot","frame.id is required",`${_}.id`)]};if(typeof y.parentId!="string"||typeof y.childId!="string")return{ok:!1,errors:[Se("invalid-snapshot","parentId and childId are required",_)]};if(!pu(y.metaphor))return{ok:!1,errors:[Se("invalid-snapshot","unknown metaphor",`${_}.metaphor`)]};let L=D(y.parentGrants,`${_}.parentGrants`);if(!L.ok)return L;let H=D(y.childGrants,`${_}.childGrants`);if(!H.ok)return H;if(!Array.isArray(y.transferred))return{ok:!1,errors:[Se("invalid-snapshot","transferred must be an array",`${_}.transferred`)]};let G=[];for(let b=0;b<y.transferred.length;b++){let R=y.transferred[b];if(typeof R!="string"||!Hg(R))return{ok:!1,errors:[Se("invalid-snapshot","invalid exclusive grant",`${_}.transferred[${b}]`)]};G.push(R)}if(y.enterCue!==Xt)return{ok:!1,errors:[Se("invalid-snapshot","enterCue mismatch",`${_}.enterCue`)]};let ee=y.exitCue;if(ee!==null&&ee!==Ar&&ee!==Pr)return{ok:!1,errors:[Se("invalid-snapshot","invalid exitCue",`${_}.exitCue`)]};if(y.seed!==null&&typeof y.seed!="string")return{ok:!1,errors:[Se("invalid-snapshot","seed must be string or null",`${_}.seed`)]};if(y.clock!==null&&typeof y.clock!="number")return{ok:!1,errors:[Se("invalid-snapshot","clock must be number or null",`${_}.clock`)]};let Y=y.extraChildGrants===void 0?{ok:!0,grants:[]}:D(y.extraChildGrants,`${_}.extraChildGrants`);if(!Y.ok)return Y;let K=y.childGrantsBefore===void 0?{ok:!0,grants:H.grants}:D(y.childGrantsBefore,`${_}.childGrantsBefore`);if(!K.ok)return K;let g=y.childGrantsBefore===void 0?yu({childGrantsBefore:K.grants,transferred:G,extraChildGrants:Y.grants}):H.grants;return{ok:!0,frame:{id:y.id,parentId:y.parentId,childId:y.childId,metaphor:y.metaphor,seed:y.seed,clock:y.clock,parentState:y.parentState,parentGrants:L.grants,childGrants:g,childGrantsBefore:K.grants,extraChildGrants:Y.grants,persistence:y.persistence??null,transferred:G,enterCue:Xt,exitCue:ee}}},w=y=>{let _=y;if(typeof y=="string")try{_=JSON.parse(y)}catch{return{ok:!1,errors:[Se("invalid-json","portal snapshot JSON is not parseable")]}}if(!ra(_))return{ok:!1,errors:[Se("invalid-snapshot","snapshot must be an object")]};if(_.schemaVersion!==Rr)return{ok:!1,errors:[Se("invalid-version",`portal snapshot schema must be ${Rr}`,"schemaVersion")]};if(!Array.isArray(_.stack))return{ok:!1,errors:[Se("invalid-snapshot","stack must be an array","stack")]};let L=[];for(let Y=0;Y<_.stack.length;Y++){let K=B(_.stack[Y],`stack[${Y}]`);if(!K.ok)return K;L.push(K.frame)}if(L.length>r)return{ok:!1,errors:[Se("max-depth",`stack exceeds maxDepth ${r}`,"stack")]};let H=S(_.lastOutcome,"lastOutcome");if(!H.ok)return H;if(_.activeId!==null&&typeof _.activeId!="string")return{ok:!1,errors:[Se("invalid-snapshot","activeId must be string or null","activeId")]};if(!Array.isArray(_.cues))return{ok:!1,errors:[Se("invalid-snapshot","cues must be an array","cues")]};let G=[];for(let Y=0;Y<_.cues.length;Y++){let K=_.cues[Y];if(K!==Xt&&K!==Ar&&K!==Pr)return{ok:!1,errors:[Se("invalid-snapshot","unknown cue",`cues[${Y}]`)]};G.push(K)}let ee=L.length===0?E:L[L.length-1].childId;return _.activeId!==ee&&_.activeId!==null&&L.length>0&&_.activeId!==L[L.length-1].childId?{ok:!1,errors:[Se("invalid-snapshot","activeId must be the top child when the stack is non-empty","activeId")]}:{ok:!0,snapshot:{schemaVersion:Rr,activeId:_.activeId??ee,stack:L,lastOutcome:H.outcome,cues:G}}};return{enter(y){C();let _=[];(!y.from||!y.to)&&_.push(Se("invalid-enter","from and to are required")),y.from===y.to&&_.push(Se("invalid-enter","cannot enter the same cart")),y.metaphor!==void 0&&!pu(y.metaphor)&&_.push(Se("invalid-enter","unknown metaphor","metaphor")),d.length>=r&&_.push(Se("max-depth",`portal stack is at maxDepth ${r}`));let L=h();L&&y.from!==L&&_.push(Se("stack-order",`enter must start from the active cart "${L}"`,"from"));let H=i.get(y.from);if(H&&!H.targets.includes(y.to)&&_.push(Se("undeclared-target",`"${y.from}" does not declare target "${y.to}"`,"to")),t){try{t.participant(y.from)}catch{_.push(Se("unknown-parent",`unknown parent "${y.from}"`,"from"))}try{t.participant(y.to)}catch{_.push(Se("unknown-child",`unknown child "${y.to}"`,"to"))}}if(_.length)return{ok:!1,errors:_};let G=y.state!==void 0?yn(y.state):F(y.from),ee=y.grants??[],{transferred:Y,parentBefore:K,childBefore:g}=x(y.from,y.to,ee),b={id:a(),parentId:y.from,childId:y.to,metaphor:y.metaphor??"nested-world",seed:y.seed??null,clock:y.clock??null,parentState:G,parentGrants:oa(K),childGrantsBefore:oa(g),transferred:Y,extraChildGrants:[...ee],persistence:y.persistence??null,enterCue:Xt,exitCue:null};return d.push(b),W(),A(Xt,{parentId:b.parentId,childId:b.childId,metaphor:b.metaphor,seed:b.seed}),{ok:!0,inspect:I()}},exit(y){return T("completed",y)},abort(y){return T("aborted",y)},stack(){return C(),d.map(ia)},activeId(){return C(),h()},inspect(){return I()},snapshot(){return C(),{schemaVersion:Rr,activeId:h(),stack:d.map(ia),lastOutcome:l,cues:[...f]}},restore(y){C();let _=w(y);if(!_.ok)return _;let L=_.snapshot;if(t){let G=[];for(let ee=0;ee<L.stack.length;ee++){let Y=L.stack[ee];try{t.participant(Y.parentId)}catch{G.push(Se("unknown-parent",`unknown parent "${Y.parentId}"`,`stack[${ee}].parentId`))}try{t.participant(Y.childId)}catch{G.push(Se("unknown-child",`unknown child "${Y.childId}"`,`stack[${ee}].childId`))}}if(G.length)return{ok:!1,errors:G}}let H={stack:d.map(G=>({...G})),lastOutcome:l,cues:[...f],grants:new Map([...o].map(([G,ee])=>[G,ee.list()])),authorized:u(),suspended:c()};try{d.length=0;for(let G of L.stack)d.push({id:G.id,parentId:G.parentId,childId:G.childId,metaphor:G.metaphor,seed:G.seed,clock:G.clock,parentState:yn(G.parentState),parentGrants:[...G.parentGrants],childGrantsBefore:[...G.childGrantsBefore],transferred:[...G.transferred],extraChildGrants:[...G.extraChildGrants],persistence:yn(G.persistence),enterCue:Xt,exitCue:G.exitCue});l=L.lastOutcome,f.length=0,f.push(...L.cues);for(let G of d)O(G.parentId).restore({schemaVersion:Yt,grants:G.parentGrants}),O(G.childId).restore({schemaVersion:Yt,grants:G.childGrantsBefore});for(let G of d){let ee=O(G.parentId),Y=O(G.childId);for(let K of G.transferred)ee.revoke(K),Y.grant(K);for(let K of G.extraChildGrants)Y.grant(K)}return P(d),W(),{ok:!0,snapshot:yn(L)}}catch(G){d.length=0,d.push(...H.stack),l=H.lastOutcome,f.length=0,f.push(...H.cues);for(let[ee,Y]of H.grants)O(ee).restore({schemaVersion:Yt,grants:Y});try{v(H.authorized),p(H.suspended)}catch{}return{ok:!1,errors:[Se("restore-failed",G instanceof Error?G.message:String(G))]}}},grantsOf:O,destroy(){if(!k){for(k=!0;d.length>0;){let y=d.pop();m(y)}if(t)try{W()}catch{}f.length=0,l=null}}}}var jn=1,Yi=1,bu=["indeterminate","determinate"],vu=["travel","worldgen","content","audio"],Xi=["pulse","orbit","bars","ripple","static"],Su=["idle","active","completed","failed","canceled"],_r="loading.indicator.started",Or="loading.indicator.updated",Dr="loading.indicator.completed",Un="loading.indicator.failed",Nr="loading.indicator.canceled",Qt="loading.indicator.diagnostic",Eu=[_r,Or,Dr,Un,Nr,Qt],Wg=["invalid-params","invalid-snapshot","schema-mismatch","unknown-field","cart-init-failed","budget-exceeded","invalid-state","restore-failed"],Iu=new Set(bu),jg=new Set(Su),mI=new Set(vu),da=new Set(Xi),ca=/^#[0-9a-fA-F]{6}$/,Ug=1,xr=7,Jg=240,Tr="builtin",zg="Loading indicator controller has been destroyed",Yg=new Set(["schemaVersion","seed","mode","progress","stage","context","statusText","presentation","cartId"]),Xg=new Set(["palette","intensity","motif","variant"]),Qg=new Set(["hue","motif","variant","intensity","palette"]),Zg=new Set(Eu);function Pe(e,t,n,r){let i={code:e,detail:t};return n&&(i.path=n),r!==void 0&&(i.atFrame=r),i}function Jn(e){return e!==null&&typeof e=="object"&&!Array.isArray(e)}function pt(e){try{return JSON.parse(JSON.stringify(e))}catch{return e}}function ku(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 wr(e,t){return(parseInt(ku(`${e}:${t}`).slice(0,8),16)>>>0)/4294967296}function aa(e,t,n,r,i="unknown-field"){for(let o of Object.keys(e))t.has(o)||r.push(Pe(i,`unknown field "${o}"`,n?`${n}.${o}`:o))}function ey(e){let t={schemaVersion:jn,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 hu(e,t,n){let r=t?.intensity??wr(e,"intensity"),i=Math.min(n.maxIntensity,Math.max(0,t?.intensity??r)),o=t?.variant??Math.floor(wr(e,"variant")*(n.maxVariant+1)),s=Math.min(n.maxVariant,Math.max(0,Math.floor(o))),a=Math.floor(wr(e,"motif")*Xi.length),d=t?.motif&&da.has(t.motif)?t.motif:Xi[a]??"pulse",f=Math.floor(wr(e,"hue")*360)%360,l=t?.palette&&ca.test(t.palette)?t.palette:`#${ku(`${e}:palette`).slice(0,6)}`;return{hue:f,motif:d,variant:s,intensity:i,palette:l}}function Kn(){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 Wn(e){if(!e.ok)throw new Error(e.errors.map(t=>t.detail).join("; "));return e.contract}function ty(){return[Wn(ce(_r,Kn())),Wn(ce(Or,Kn())),Wn(ce(Dr,Kn())),Wn(ce(Un,Kn())),Wn(ce(Nr,Kn())),Wn(Xe(Qt,Kn()))]}function ny(e){return e===_r||e===Or||e===Dr||e===Un||e===Nr||e===Qt}function ry(e){return typeof e=="string"&&Iu.has(e)}function Qi(e,t="params"){if(!Jn(e))return{ok:!1,errors:[Pe("invalid-params","params must be a JSON object",t)]};let n=[],r=(o,s,a)=>{s||n.push(Pe("invalid-params",a,`${t}.${o}`))};if(r("schemaVersion",e.schemaVersion===jn,`expected schemaVersion ${jn}`),r("seed",typeof e.seed=="string"&&e.seed.length>0,"seed is required"),r("mode",typeof e.mode=="string"&&Iu.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(!Jn(e.presentation))n.push(Pe("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"&&ca.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"&&da.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<=xr,`variant must be 0..${xr}`),aa(o,Xg,`${t}.presentation`,n)}return aa(e,Yg,t,n),n.length?{ok:!1,errors:n}:{ok:!0,params:ey(e)}}function iy(e,t="variant"){if(!Jn(e))return{ok:!1,errors:[Pe("invalid-snapshot","variant must be a JSON object",t)]};let n=[],r=(i,o,s)=>{o||n.push(Pe("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"&&da.has(e.motif),"unknown motif"),r("variant",typeof e.variant=="number"&&Number.isInteger(e.variant)&&e.variant>=0&&e.variant<=xr,`variant must be 0..${xr}`),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"&&ca.test(e.palette),"palette must be #RRGGBB"),aa(e,Qg,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 Ru(e){let t=e;if(typeof e=="string")try{t=JSON.parse(e)}catch{return{ok:!1,errors:[Pe("invalid-snapshot","snapshot JSON is invalid")]}}if(!Jn(t))return{ok:!1,errors:[Pe("invalid-snapshot","snapshot must be a JSON object")]};if(t.schemaVersion!==Yi)return{ok:!1,errors:[Pe("schema-mismatch",`expected schemaVersion ${Yi}`,"schemaVersion")]};let n=[];if((typeof t.frame!="number"||!Number.isFinite(t.frame))&&n.push(Pe("invalid-snapshot","frame must be finite","frame")),typeof t.reducedMotion!="boolean"&&n.push(Pe("invalid-snapshot","reducedMotion must be a boolean","reducedMotion")),(typeof t.phase!="string"||!jg.has(t.phase))&&n.push(Pe("invalid-snapshot","unknown phase","phase")),t.params!=null){let i=Qi(t.params,"params");i.ok||n.push(...i.errors)}typeof t.usingFallback!="boolean"&&n.push(Pe("invalid-snapshot","usingFallback must be a boolean","usingFallback")),t.fallbackReason!=null&&typeof t.fallbackReason!="string"&&n.push(Pe("invalid-snapshot","fallbackReason must be a string or null","fallbackReason")),(typeof t.cartId!="string"||t.cartId.length===0)&&n.push(Pe("invalid-snapshot","cartId is required","cartId"));let r=iy(t.variant,"variant");return r.ok||n.push(...r.errors),Array.isArray(t.events)||n.push(Pe("invalid-snapshot","events must be an array","events")),Array.isArray(t.diagnostics)||n.push(Pe("invalid-snapshot","diagnostics must be an array","diagnostics")),t.eventLog!==void 0&&(!Array.isArray(t.eventLog)||t.eventLog.some(i=>typeof i!="string"||!Zg.has(i)))&&n.push(Pe("invalid-snapshot","eventLog must be an array of event types","eventLog")),n.length?{ok:!1,errors:n}:{ok:!0,snapshot:pt(t)}}function oy(e){return Jn(e)&&Jn(e.metadata)&&typeof e.getDefaultState=="function"&&typeof e.update=="function"}function sy(e){return(t,n)=>{try{let r=new sn({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 ay(e,t,n,r){if(n||r==="static")return 0;let i=r==="bars"?48:r==="orbit"?60:30,o=wr(t,"phase-offset");return(e+o*i)%i/i}function dy(e={}){let t={maxStepFrames:e.budgets?.maxStepFrames??Jg,maxIntensity:e.budgets?.maxIntensity??Ug,maxVariant:e.budgets?.maxVariant??xr},n=new Map;for(let[T,S]of Object.entries(e.carts??{}))n.set(T,oy(S)?sy(S):S);let r=!!e.reducedMotion,i=!1,o="idle",s=null,a=hu("0x0",void 0,t),d=!1,f=null,l=e.defaultCartId??Tr,k=null,E=[],C=[],O=[],h=e.originFrame??0,A=bt({originFrame:h,reducedMotion:r}),F=()=>{if(i)throw new Error(zg)},W=()=>!s||s.mode==="indeterminate"?null:s.progress??null,x=()=>({phase:o,mode:s?.mode??"indeterminate",progress:W(),stage:s?.stage??null,context:s?.context??null,statusText:s?.statusText??"",seed:s?.seed??"",variant:pt(a),usingFallback:d,cartId:l,frame:A.frame,pulsePhase:ay(A.frame,s?.seed??"0x0",r,a.motif),reducedMotion:r}),N=T=>{C.push(T),O.push(Qt);let S={seed:s?.seed??"",mode:s?.mode??"indeterminate",phase:o,statusText:s?.statusText??"",reasonCode:T.code};e.router?.publish({type:Qt,kind:"diagnostic",payload:S,correlationId:s?.seed??"loading-indicator",idempotencyKey:`${Qt}:${A.frame}:${T.code}`})},P=(T,S)=>{O.push(T);let D={type:T,atFrame:A.frame,seed:s?.seed??"",mode:s?.mode??"indeterminate",phase:o,progress:W(),stage:s?.stage??null,context:s?.context??null,statusText:s?.statusText??"",usingFallback:d,reasonCode:S};E.push(D);let B={type:T,kind:T.includes(".diagnostic.")?"diagnostic":"state",payload:{seed:D.seed,mode:D.mode,phase:D.phase,statusText:D.statusText,progress:D.progress??void 0,usingFallback:D.usingFallback,reasonCode:S},correlationId:D.seed||"loading-indicator",idempotencyKey:`${T}:${D.seed}:${A.frame}`};return e.router?.publish(B),D},u=()=>{k?.destroy?.(),k=null},v=(T,S="cartId")=>{d=!0,f=T,l=Tr,N(Pe("cart-init-failed",T,S,A.frame))},c=(T,S)=>{u(),d=!1,f=null;let D=T.cartId??e.defaultCartId??Tr;if(D===Tr){l=Tr,d=!1,f=null;return}if(!n.has(D)){v(`unknown cart "${D}"`);return}l=D;let w=n.get(D)(T.seed,S);if("ok"in w&&w.ok===!1){v(w.reason);return}k=w},p=(T,S)=>{let D=hu(T.seed,T.presentation,t);T.presentation?.intensity!==void 0&&T.presentation.intensity>t.maxIntensity&&N(Pe("budget-exceeded",`intensity exceeds budget ${t.maxIntensity}`,"presentation.intensity",A.frame)),T.presentation?.variant!==void 0&&T.presentation.variant>t.maxVariant&&N(Pe("budget-exceeded",`variant exceeds budget ${t.maxVariant}`,"presentation.variant",A.frame));let B=s?.seed!==T.seed,w=s?.cartId!==T.cartId;return s=pt(T),a=D,(B||w||!k)&&c(s,a),P(S),{ok:!0,view:x()}},m=T=>(o=T,u(),P(T==="completed"?Dr:T==="failed"?Un:Nr),{ok:!0,view:x()}),I={start(T){F();let S=Qi({...T,schemaVersion:jn});return S.ok?o==="active"?{ok:!1,errors:[Pe("invalid-state","call complete, fail, or cancel before starting again")]}:(o="active",p(S.params,_r)):S},update(T){if(F(),o!=="active"||!s)return{ok:!1,errors:[Pe("invalid-state","update requires an active indicator")]};let S={...s,...T,schemaVersion:jn},D=Qi(S);return D.ok?p(D.params,Or):D},complete(){return F(),o!=="active"?{ok:!1,errors:[Pe("invalid-state","complete requires an active indicator")]}:m("completed")},fail(T="failed"){return F(),o!=="active"?{ok:!1,errors:[Pe("invalid-state","fail requires an active indicator")]}:(o="failed",u(),P(Un,T),{ok:!0,view:x()})},cancel(){return F(),o!=="active"?{ok:!1,errors:[Pe("invalid-state","cancel requires an active indicator")]}:m("canceled")},step(T=1){F();let S=Number.isFinite(T)?Math.max(0,Math.floor(T)):0;S>t.maxStepFrames&&N(Pe("budget-exceeded",`step(${S}) exceeds maxStepFrames ${t.maxStepFrames}`,"step",A.frame));let D=E.length;return A.step(S),o==="active"&&k?.step&&k.step(S,x()),E.slice(D)},snapshot(){return F(),{schemaVersion:Yi,frame:A.frame,reducedMotion:r,phase:o,params:s?pt(s):null,variant:pt(a),usingFallback:d,fallbackReason:f,cartId:l,events:E.map(T=>pt(T)),diagnostics:C.map(T=>pt(T)),eventLog:[...O]}},restore(T){F();let S=Ru(T);if(!S.ok)return S;let D=I.snapshot();try{let B=S.snapshot;r=B.reducedMotion,A.reset(),A.setReducedMotion(r);let w=Math.max(0,B.frame-h);if(w>0&&A.step(w),o=B.phase,s=B.params?pt(B.params):null,a=pt(B.variant),d=B.usingFallback,f=B.fallbackReason,l=B.cartId,E.length=0,E.push(...B.events.map(y=>pt(y))),C.length=0,C.push(...B.diagnostics.map(y=>pt(y))),O.length=0,B.eventLog&&B.eventLog.length>0)O.push(...B.eventLog);else{for(let y of B.events)O.push(y.type);for(let y=0;y<B.diagnostics.length;y++)O.push(Qt)}return u(),o==="active"&&s&&c(s,a),{ok:!0,snapshot:pt(B)}}catch{return I.restore(D),{ok:!1,errors:[Pe("restore-failed","restore rolled back")]}}},inspect(){return F(),{destroyed:!1,view:x(),events:[...O],diagnostics:C.map(T=>pt(T))}},setReducedMotion(T){F(),r=!!T,A.setReducedMotion(r)},destroy(){i=!0,u()},get reducedMotion(){return r},get frame(){return A.frame}};return I}var Zi=1,to=512,St="[REDACTED]",Zt=["prompt","credentials","credential","authorization","apiKey","secret"],cy=new Set([ze,je]);function nt(e){try{return JSON.parse(JSON.stringify(e))}catch{return e}}function eo(e,t){if(e==null)return e;if(Array.isArray(e))return e.map(i=>eo(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)?St:eo(o,t);return r}function uy(e){return e instanceof Error&&typeof e.message=="string"?e.message:"error"}function ly(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 Cu(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 ua(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=Cu(e[n]),i=Cu(t[n]);if(r!==i)return{ok:!1,detail:`record ${n} differs`}}return{ok:!0}}function Au(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 Pu(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 py(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:nt(t.clock),state:eo(t.state,n),errorCount:t.errors.length};return r&&(i.lastError=uy(r.error)),i}function no(e={}){let t=new Set([...Zt,...e.redactedKeys??[]]),n=e.maxRecords??to,r=e.registry,i=0,o=0,s=!1,a=[],d=[],f,l=[],k=0,E=[],C={},O=()=>{},h=()=>{if(s)throw new Error("Replay inspector has been destroyed")},A=N=>{let P=r?.get(N.type),u={index:o,turn:N.turn,time:N.time,outcome:N.outcome,source:N.source,type:N.type,deliveredTo:N.deliveredTo.slice(),payload:eo(N.payload,t)};for(o+=1,N.reason&&(u.reason=N.reason),N.detail&&(u.detail=N.detail),N.target&&(u.target=N.target),N.kind&&(u.kind=N.kind),N.envelopeId&&(u.envelopeId=N.envelopeId),N.priorEnvelopeId&&(u.priorEnvelopeId=N.priorEnvelopeId),N.correlationId&&(u.correlationId=N.correlationId),N.causationId&&(u.causationId=N.causationId),N.hops!==void 0&&(u.hops=N.hops),N.seq!==void 0&&(u.seq=N.seq),N.idempotencyKey&&(u.idempotencyKey=N.idempotencyKey),N.schemaVersion!==void 0&&(u.schemaVersion=N.schemaVersion),P&&(u.payloadSchemaVersion=P.payloadSchema.version),a.push(u);a.length>n;)a.shift(),i+=1},F=N=>a.filter(P=>ly(P,N)).map(P=>nt(P)),W=N=>N?N.inspectParticipants().map(P=>Pu(P,P.kind)):E.map(P=>nt(P)),x={watchRouter(N){if(h(),O(),E=N.inspectParticipants().map(u=>Pu(u)),a.length===0)for(let u of N.inspectDecisions())A(u);let P=N.subscribeDecision(u=>A(u));return O=()=>{P(),O=()=>{}},d.push(O),O},bind(N){h(),f&&O(),f=N,k=N.origin,x.watchRouter(N.router),E=W(N);let P={publish(u,v){h();let c={kind:"publish",event:nt(u)};return v?.cause&&(c.extras={cause:nt(v.cause)}),l.push(c),N.publish(u,v)},dispatch(u,v){h();let c=nt(v);typeof c.type=="string"&&cy.has(c.type)?l.push({kind:"asset",participantId:u,event:c}):l.push({kind:"dispatch",participantId:u,event:c}),N.dispatch(u,v)},async step(u=1){h(),l.push({kind:"step",frames:u}),await N.step(u)},async report(){h();let u=await N.inspect(),v=[];for(let c of Object.keys(u.participants).sort())v.push(py(c,u.participants[c],t));E=v,C={};for(let c of v)C[c.id]=nt(c.state);return x.report()},async exportTrace(u){return await P.report(),x.exportTrace(u)},unbind(){O(),f=void 0}};return P},importTrace(N){h();let P=typeof N=="string"?JSON.parse(N):N;if(P.schemaVersion!==Zi)throw new Error("Replay inspector: unsupported export schemaVersion");i=0,o=0,a.length=0,l=nt(P.tape??[]),k=P.origin??0,E=nt(P.participants??[]),C=nt(P.snapshots??{});for(let u of P.records??[])A({outcome:u.outcome,reason:u.reason,detail:u.detail,source:u.source,type:u.type,kind:u.kind,envelopeId:u.envelopeId,priorEnvelopeId:u.priorEnvelopeId,target:u.target,deliveredTo:u.deliveredTo,hops:u.hops,seq:u.seq,correlationId:u.correlationId,causationId:u.causationId,idempotencyKey:u.idempotencyKey,schemaVersion:u.schemaVersion,payload:u.payload,turn:u.turn,time:u.time})},exportTrace(N){return h(),{schemaVersion:Zi,origin:k,redactedKeys:[...t],participants:nt(E),tape:nt(l),records:F(N),snapshots:nt(C)}},report(N){h();let P=F(N);return{schemaVersion:Zi,participants:nt(E),records:P,trees:Au(P),dropped:i}},causationTree(N){h();let P=F(N?{correlationId:N}:void 0);return Au(P)},records(){return h(),a.map(N=>nt(N))},reset(){h(),a.length=0,l=[],i=0,o=0,C={},f&&(E=W(f))},destroy(){if(!s){for(s=!0,O();d.length>0;)d.pop()?.();a.length=0,l=[],E=[],C={},f=void 0}}};return x}async function la(e,t,n={}){let r=no({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 Mr=1,xu=1,_u=["queued","claimed","awaiting-evaluation","retry-scheduled","ready","applied","failed","canceled","superseded"],Ou=["retryable","permanent","unknown"],Du=["accept","reject","revise"],ro="job.intent.submitted",Lr="job.state.queued",io="job.state.claimed",oo="job.state.progress",so="job.state.awaiting-evaluation",ao="job.state.retry-scheduled",co="job.state.ready",uo="job.state.applied",lo="job.state.failed",po="job.state.canceled",fo="job.state.superseded",fa="job.diagnostic.lifecycle",fy=[ro,Lr,io,oo,so,ao,co,uo,lo,po,fo,fa],Nu=Zt,my=new Set(_u),gy=new Set(Ou),yy=new Set(Du),hy="Job coordinator has been destroyed",by=512,vy=8;function fe(e,t,n){return n?{code:e,detail:t,path:n}:{code:e,detail:t}}function hn(e){return e!==null&&typeof e=="object"&&!Array.isArray(e)}function Ne(e){try{return JSON.parse(JSON.stringify(e))}catch{return e}}function pa(e,t){if(e==null)return e;if(Array.isArray(e))return e.map(i=>pa(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)?St:pa(o,t);return r}function Et(){return{version:1,fields:{jobId:{type:"string"},state:{type:"string"},definitionId:{type:"string"},correlationId:{type:"string",optional:!0},reasonCode:{type:"string",optional:!0}}}}function It(e){if(!e.ok)throw new Error(e.errors.map(t=>t.detail).join("; "));return e.contract}function Sy(){return[It(Os(ro,Et())),It(ce(Lr,Et())),It(ce(io,Et())),It(ce(oo,Et())),It(ce(so,Et())),It(ce(ao,Et())),It(ce(co,Et())),It(ce(uo,Et())),It(ce(lo,Et())),It(ce(po,Et())),It(ce(fo,Et())),It(Xe(fa,Et()))]}function Mu(){let e=new Map,t=new Map;return{save(n){let r=Ne(n);e.set(r.jobId,r),t.set(r.idempotencyKey,r.jobId)},get(n){let r=e.get(n);return r?Ne(r):void 0},getByIdempotencyKey(n){let r=t.get(n);return r?this.get(r):void 0},list(){return[...e.values()].map(n=>Ne(n))},replaceAll(n){e.clear(),t.clear();for(let r of n)this.save(r)}}}function Ey(){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 ma(e){return hn(e)?e.schemaVersion===xu&&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 Lu(e){return hn(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 Tu(e){return e===null||typeof e=="string"}function wu(e){return e===null||typeof e=="number"&&Number.isFinite(e)}function Iy(e){return hn(e)?typeof e.attempt=="number"&&Number.isInteger(e.attempt)&&typeof e.code=="string"&&e.code.length>0&&typeof e.retryability=="string"&&gy.has(e.retryability)&&typeof e.at=="number"&&Number.isFinite(e.at)&&(e.detail===void 0||typeof e.detail=="string"):!1}function ky(e){return hn(e)?typeof e.decision=="string"&&yy.has(e.decision)&&typeof e.at=="number"&&Number.isFinite(e.at)&&(e.correction===void 0||typeof e.correction=="string"):!1}function Ry(e){return!hn(e)||typeof e.reasonCode!="string"||e.reasonCode.length===0?!1:e.resultRef===void 0||ma(e.resultRef)}function Cy(e,t){if(!hn(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"&&my.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",Tu(e.workerId),"workerId must be a string or null"),r("leaseUntil",wu(e.leaseUntil),"leaseUntil must be a number or null"),r("nextRetryAt",wu(e.nextRetryAt),"nextRetryAt must be a number or null"),r("supersededBy",Tu(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&&!ma(e.resultRef)&&n.push(fe("invalid-result-ref","resultRef is invalid",`${t}.resultRef`)),Lu(e.progress)||n.push(fe("invalid-progress","progress is invalid",`${t}.progress`)),(!Array.isArray(e.failureHistory)||!e.failureHistory.every(Iy))&&n.push(fe("invalid-failure-history","failureHistory entries are invalid",`${t}.failureHistory`)),(!Array.isArray(e.evaluatorHistory)||!e.evaluatorHistory.every(ky))&&n.push(fe("invalid-evaluator-history","evaluatorHistory entries are invalid",`${t}.evaluatorHistory`)),e.fallback!==void 0&&!Ry(e.fallback)&&n.push(fe("invalid-fallback","fallback is invalid",`${t}.fallback`)),n.length?{ok:!1,errors:n}:{ok:!0,job:Ne(e)}}function Ay(e){if(!hn(e))return{ok:!1,errors:[fe("invalid-snapshot","snapshot must be a JSON object")]};if(e.schemaVersion!==Mr)return{ok:!1,errors:[fe("schema-mismatch",`expected schemaVersion ${Mr}`,"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=Cy(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:Mr,jobs:t,hostAcceptedJobIds:[...e.hostAcceptedJobIds]}}}function Py(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 Ty(e){switch(e){case"queued":return Lr;case"claimed":return io;case"awaiting-evaluation":return so;case"retry-scheduled":return ao;case"ready":return co;case"applied":return uo;case"failed":return lo;case"canceled":return po;case"superseded":return fo}}function wy(e){let t=new Map;for(let c of e.definitions){let p=Py(c);if(p.length)throw new Error(p.map(m=>m.detail).join("; "));t.set(c.id,Ne(c))}let n=e.persistence??Mu(),r=e.now??(()=>Date.now()),i=0,o=e.createId??(()=>`job-${++i}`),s=e.maxCorrectionChars??by,a=e.maxFailureHistory??vy,d=new Set(Nu),f=!1,l=[],k=new Set,E=e.worker,C=()=>{if(f)throw new Error(hy)},O=c=>{n.save(c)},h=(c,p,m)=>{l.push(c);let I={jobId:p.jobId,state:p.state,definitionId:p.definitionId,correlationId:p.correlationId};m&&(I.reasonCode=m);let T={type:c,kind:c.includes(".intent.")?"intent":c.includes(".diagnostic.")?"diagnostic":"state",payload:I,correlationId:p.correlationId,causationId:p.causationId,idempotencyKey:`${c}:${p.jobId}:${p.updatedAt}`};e.router?.publish(T)},A=(c,p,m)=>(c.state=p,c.updatedAt=r(),O(c),h(Ty(p),c,m),c),F=c=>c==="applied"||c==="failed"||c==="canceled"||c==="superseded",W=(c,p)=>{let m=c.retry.backoffMs;return m.length?m[Math.min(p-1,m.length-1)]??0:0},x=(c,p)=>p.retryability==="permanent"?"permanent":c.retry.retryableCodes.includes(p.code)||p.retryability==="retryable"?"retryable":p.retryability,N=(c,p)=>(c.fallbackApplied=!0,c.fallback=Ne(p.fallback),p.fallback.resultRef&&(c.resultRef=Ne(p.fallback.resultRef)),A(c,"failed",p.fallback.reasonCode)),P=(c,p,m)=>(c.failureHistory=[...c.failureHistory,m].slice(-a),c.workerId=null,c.leaseUntil=null,c.attempt>=p.retry.maxAttempts||m.retryability==="permanent"?N(c,p):(c.nextRetryAt=r()+W(p,c.attempt),A(c,"retry-scheduled",m.code))),u=(c,p,m)=>{c.workerId=p,c.leaseUntil=r()+m.leaseMs,c.nextRetryAt=null,c.attempt+=1;let I=A(c,"claimed");return E?.start({jobId:I.jobId,workerId:p,definitionId:I.definitionId,request:Ne(I.request),attempt:I.attempt}),I},v={submit(c){C();let p=[];c.idempotencyKey||p.push(fe("missing-idempotency","idempotencyKey is required")),c.correlationId||p.push(fe("missing-correlation","correlationId is required"));let m=t.get(c.definitionId);if(m||p.push(fe("unknown-definition",`unknown definition "${c.definitionId}"`)),p.length||!m)return{ok:!1,errors:p};let I=xs(m.requestSchema,c.request);if(!I.ok)return{ok:!1,errors:I.errors.map(B=>fe("invalid-request",B.detail,B.path?`request.${B.path}`:"request"))};let T=n.getByIdempotencyKey(c.idempotencyKey);if(T)return{ok:!0,job:T};let S=r(),D={jobId:o(),definitionId:m.id,definitionVersion:m.version,idempotencyKey:c.idempotencyKey,state:"queued",request:Ne(c.request),resultRef:null,progress:{value:0,stage:"queued"},attempt:0,failureHistory:[],evaluatorHistory:[],correlationId:c.correlationId,causationId:c.causationId,workerId:null,leaseUntil:null,createdAt:S,updatedAt:S,timeoutAt:S+m.timeoutMs,nextRetryAt:null,supersededBy:null,fallbackApplied:!1};if(O(D),h(ro,D),h(Lr,D),c.supersedeJobId){let B=n.get(c.supersedeJobId);B&&!F(B.state)&&(B.supersededBy=D.jobId,E?.cancel?.(B.jobId),A(B,"superseded","superseded"))}return{ok:!0,job:Ne(D)}},claim(c){if(C(),!c)return{ok:!1,errors:[fe("missing-worker","workerId is required")]};v.tick();let m=n.list().filter(T=>T.state==="queued"||T.state==="retry-scheduled"&&(T.nextRetryAt??0)<=r()).sort((T,S)=>T.createdAt-S.createdAt)[0];if(!m)return{ok:!1,errors:[fe("empty-queue","no claimable jobs")]};let I=t.get(m.definitionId);return I?{ok:!0,job:Ne(u(m,c,I))}:{ok:!1,errors:[fe("unknown-definition",m.definitionId)]}},reportProgress(c,p){C();let m=n.get(c);return m?m.state!=="claimed"?{ok:!1,errors:[fe("invalid-state",`cannot report progress in ${m.state}`)]}:Lu(p)?p.value<m.progress.value?{ok:!1,errors:[fe("non-monotonic","progress.value must not decrease")]}:(m.progress=Ne(p),m.updatedAt=r(),O(m),h(oo,m),{ok:!0,job:Ne(m)}):{ok:!1,errors:[fe("invalid-progress","progress value/stage required")]}:{ok:!1,errors:[fe("unknown-job",c)]}},heartbeat(c){C();let p=n.get(c);if(!p)return{ok:!1,errors:[fe("unknown-job",c)]};if(p.state!=="claimed"||!p.workerId)return{ok:!1,errors:[fe("invalid-state","heartbeat requires a claimed job")]};let m=t.get(p.definitionId);return m?(p.leaseUntil=r()+m.leaseMs,p.updatedAt=r(),O(p),{ok:!0,job:Ne(p)}):{ok:!1,errors:[fe("unknown-definition",p.definitionId)]}},complete(c,p){C();let m=n.get(c);if(!m)return{ok:!1,errors:[fe("unknown-job",c)]};if(m.state!=="claimed")return{ok:!1,errors:[fe("invalid-state",`cannot complete in ${m.state}`)]};if(!ma(p))return{ok:!1,errors:[fe("invalid-result-ref","result must be a reference")]};let I=t.get(m.definitionId);return I&&p.kind!==I.resultKind?{ok:!1,errors:[fe("result-kind",`expected result kind "${I.resultKind}"`)]}:(m.resultRef=Ne(p),m.workerId=null,m.leaseUntil=null,m.progress={value:Math.max(m.progress.value,1),stage:"awaiting-evaluation"},{ok:!0,job:Ne(A(m,"awaiting-evaluation"))})},fail(c,p){C();let m=n.get(c);if(!m)return{ok:!1,errors:[fe("unknown-job",c)]};if(m.state!=="claimed"&&m.state!=="queued")return{ok:!1,errors:[fe("invalid-state",`cannot fail in ${m.state}`)]};let I=t.get(m.definitionId);if(!I)return{ok:!1,errors:[fe("unknown-definition",m.definitionId)]};let T=x(I,p),S={attempt:m.attempt,code:p.code,retryability:T,at:r(),detail:p.detail};return E?.cancel?.(m.jobId),{ok:!0,job:Ne(P(m,I,S))}},evaluate(c,p,m){C();let I=n.get(c);if(!I)return{ok:!1,errors:[fe("unknown-job",c)]};if(I.state!=="awaiting-evaluation")return{ok:!1,errors:[fe("invalid-state","evaluate requires awaiting-evaluation")]};let T=t.get(I.definitionId);if(!T)return{ok:!1,errors:[fe("unknown-definition",I.definitionId)]};if(m!==void 0&&m.length>s)return{ok:!1,errors:[fe("correction-bound",`correction exceeds ${s} chars`)]};if(I.evaluatorHistory=[...I.evaluatorHistory,{decision:p,at:r(),correction:m?.slice(0,s)}],p==="accept")return I.progress={value:1,stage:"ready"},{ok:!0,job:Ne(A(I,"ready"))};let S={attempt:I.attempt,code:p==="revise"?"evaluator-revise":"evaluator-reject",retryability:"retryable",at:r(),detail:m};return{ok:!0,job:Ne(P(I,T,S))}},cancel(c){C();let p=n.get(c);return p?F(p.state)||p.state==="applied"?{ok:!1,errors:[fe("invalid-state",`cannot cancel ${p.state}`)]}:(E?.cancel?.(p.jobId),p.workerId=null,p.leaseUntil=null,{ok:!0,job:Ne(A(p,"canceled","canceled"))}):{ok:!1,errors:[fe("unknown-job",c)]}},recoverStale(){C();let c=[],p=r();for(let m of n.list()){if(m.state!=="claimed"||m.leaseUntil==null||m.leaseUntil>p)continue;let I=t.get(m.definitionId);if(!I)continue;E?.cancel?.(m.jobId);let T={attempt:m.attempt,code:"stale-lease",retryability:"retryable",at:p};c.push(Ne(P(m,I,T)))}return c},tick(){C();let c=[];c.push(...v.recoverStale());let p=r();for(let m of n.list())if(!(F(m.state)||m.state==="ready"||m.state==="applied")&&p>=m.timeoutAt){let I=t.get(m.definitionId);if(!I)continue;let T={attempt:m.attempt,code:"timeout",retryability:"permanent",at:p};E?.cancel?.(m.jobId),c.push(Ne(P(m,I,T)))}return c},accept(c){C();let p=n.get(c);return p?p.state!=="ready"?{ok:!1,errors:[fe("not-ready","host may accept only ready jobs")]}:(k.add(p.jobId),{ok:!0,job:Ne(A(p,"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:Mr,jobs:n.list(),hostAcceptedJobIds:[...k]}},restore(c){C();let p=Ay(c);if(!p.ok)return p;let m=n.list(),I=[...k];try{n.replaceAll(p.snapshot.jobs),k.clear();for(let T of p.snapshot.hostAcceptedJobIds)k.add(T);return{ok:!0,snapshot:Ne(p.snapshot)}}catch{n.replaceAll(m),k.clear();for(let T of I)k.add(T);return{ok:!1,errors:[fe("restore-failed","restore rolled back")]}}},exportTrace(){return C(),{jobs:n.list().map(c=>pa(c,d)),events:[...l]}},destroy(){f=!0}};return E?.bind({reportProgress:(c,p)=>v.reportProgress(c,p),complete:(c,p)=>v.complete(c,p),fail:(c,p)=>v.fail(c,p),heartbeat:c=>v.heartbeat(c)}),v}var zn=1,go=["room","region","landmark","frontier"],Fu=["local","regional"],Bu=["canonical","discoverable","hidden"],$u=["open","locked","disabled"],Hu=["character","party"],qu=["available","busy","traveling"],yo="world.graph.state.node-added",ho="world.graph.state.edge-added",bo="world.graph.state.discovered",Br="world.graph.state.transit",$r="world.graph.diagnostic.lifecycle",xy=[yo,ho,bo,Br,$r],_y=new Set(go),Oy=new Set(Fu),Dy=new Set(Bu),Gu=new Set($u),Ny=new Set(Hu),Ku=new Set(qu),My="World graph has been destroyed",Ly=4096;function Q(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 kt(e){try{return JSON.parse(JSON.stringify(e))}catch{return e}}function Yn(e){return typeof e=="number"&&Number.isFinite(e)}function rt(e){return typeof e=="string"&&e.length>0}function ya(e,t,n){if(e!==void 0){if(!Vt(e)){n.push(Q("invalid-metadata","metadata must be a JSON object",t));return}return kt(e)}}function Vy(e,t,n){if(e!==void 0){if(!Vt(e)){n.push(Q("invalid-requirements","requirements must be a JSON object",t));return}return kt(e)}}function Fy(e,t,n){if(e===void 0)return;if(!Vt(e)){n.push(Q("invalid-cost","cost must be a JSON object",t));return}let r={};for(let[i,o]of Object.entries(e)){if(!Yn(o)){n.push(Q("invalid-cost",`cost.${i} must be finite`,t));continue}r[i]=o}return r}function Wu(e,t){if(!Vt(e))return{ok:!1,errors:[Q("invalid-node","node must be an object",t)]};let n=[];rt(e.id)||n.push(Q("invalid-id","id is required",`${t}.id`)),(!Number.isInteger(e.version)||e.version<1)&&n.push(Q("invalid-version","version must be an integer \u2265 1",`${t}.version`)),_y.has(e.kind)||n.push(Q("invalid-kind","unknown node kind",`${t}.kind`)),Oy.has(e.mapLayer)||n.push(Q("invalid-map-layer","unknown mapLayer",`${t}.mapLayer`)),e.frontier!==void 0&&typeof e.frontier!="boolean"&&n.push(Q("invalid-frontier","frontier must be boolean",`${t}.frontier`));let r=ya(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 ju(e,t){if(!Vt(e))return{ok:!1,errors:[Q("invalid-edge","edge must be an object",t)]};let n=[];rt(e.id)||n.push(Q("invalid-id","id is required",`${t}.id`)),(!Number.isInteger(e.version)||e.version<1)&&n.push(Q("invalid-version","version must be an integer \u2265 1",`${t}.version`)),rt(e.from)||n.push(Q("invalid-from","from is required",`${t}.from`)),rt(e.to)||n.push(Q("invalid-to","to is required",`${t}.to`)),typeof e.directed!="boolean"&&n.push(Q("invalid-directed","directed must be boolean",`${t}.directed`)),rt(e.kind)||n.push(Q("invalid-kind","kind is required",`${t}.kind`)),Dy.has(e.visibility)||n.push(Q("invalid-visibility","unknown visibility",`${t}.visibility`)),Gu.has(e.access)||n.push(Q("invalid-access","unknown access",`${t}.access`));let r=Vy(e.requirements,`${t}.requirements`,n),i=Fy(e.cost,`${t}.cost`,n),o=ya(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 Uu(e,t){if(!Vt(e))return{ok:!1,errors:[Q("invalid-transit","transit must be an object",t)]};let n=[];return rt(e.originNodeId)||n.push(Q("invalid-origin","originNodeId is required",`${t}.originNodeId`)),rt(e.destinationNodeId)||n.push(Q("invalid-destination","destinationNodeId is required",`${t}.destinationNodeId`)),(!Array.isArray(e.routeEdgeIds)||e.routeEdgeIds.some(r=>!rt(r)))&&n.push(Q("invalid-route","routeEdgeIds must be strings",`${t}.routeEdgeIds`)),Yn(e.departedAt)||n.push(Q("invalid-time","departedAt must be finite semantic time",`${t}.departedAt`)),Yn(e.expectedArrival)||n.push(Q("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 Ju(e,t){if(!Vt(e))return{ok:!1,errors:[Q("invalid-entity","entity must be an object",t)]};let n=[];rt(e.id)||n.push(Q("invalid-id","id is required",`${t}.id`)),Ny.has(e.kind)||n.push(Q("invalid-kind","unknown entity kind",`${t}.kind`)),Ku.has(e.status)||n.push(Q("invalid-status","unknown status",`${t}.status`)),e.locationNodeId!==null&&!rt(e.locationNodeId)&&n.push(Q("invalid-location","locationNodeId must be string or null",`${t}.locationNodeId`));let r=null;if(e.transit!==null&&e.transit!==void 0){let s=Uu(e.transit,`${t}.transit`);s.ok?r=s.transit:n.push(...s.errors)}let i=ya(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 By(e,t){if(!Vt(e))return{ok:!1,errors:[Q("invalid-discovery","discovery must be an object",t)]};let n=[];return rt(e.observerId)||n.push(Q("invalid-observer","observerId is required",`${t}.observerId`)),(!Array.isArray(e.nodeIds)||e.nodeIds.some(r=>!rt(r)))&&n.push(Q("invalid-node-ids","nodeIds must be strings",`${t}.nodeIds`)),(!Array.isArray(e.edgeIds)||e.edgeIds.some(r=>!rt(r)))&&n.push(Q("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 $y(e,t){let n=e;if(typeof e=="string")try{n=JSON.parse(e)}catch{return{ok:!1,errors:[Q("invalid-json","snapshot JSON is invalid")]}}if(!Vt(n))return{ok:!1,errors:[Q("invalid-snapshot","snapshot must be a JSON object")]};let r=n.schemaVersion;if(typeof r=="number"&&r<zn){let O=n,h=r;for(;h<zn;){let A=t.find(F=>F.from===h&&F.to===h+1);if(!A)return{ok:!1,errors:[Q("unsupported-schema",`no migration from schema ${h}`)]};O=A.migrate(O),h+=1}if(n=O,!Vt(n))return{ok:!1,errors:[Q("invalid-snapshot","migrated snapshot must be an object")]};r=n.schemaVersion}if(r!==zn)return{ok:!1,errors:[Q("unsupported-schema","unsupported world graph snapshot schema")]};if(!rt(n.graphId))return{ok:!1,errors:[Q("invalid-graph-id","graphId is required","graphId")]};if(!Array.isArray(n.nodes))return{ok:!1,errors:[Q("invalid-nodes","nodes must be an array","nodes")]};if(!Array.isArray(n.edges))return{ok:!1,errors:[Q("invalid-edges","edges must be an array","edges")]};if(!Array.isArray(n.entities))return{ok:!1,errors:[Q("invalid-entities","entities must be an array","entities")]};if(!Array.isArray(n.discovery))return{ok:!1,errors:[Q("invalid-discovery","discovery must be an array","discovery")]};let i=[],o=[],s=new Set;n.nodes.forEach((O,h)=>{let A=Wu(O,`nodes[${h}]`);if(!A.ok){i.push(...A.errors);return}if(s.has(A.node.id)){i.push(Q("duplicate-id","duplicate node id",`nodes[${h}].id`));return}s.add(A.node.id),o.push(A.node)});let a=[],d=new Set;n.edges.forEach((O,h)=>{let A=ju(O,`edges[${h}]`);if(!A.ok){i.push(...A.errors);return}if(d.has(A.edge.id)){i.push(Q("duplicate-id","duplicate edge id",`edges[${h}].id`));return}s.has(A.edge.id)&&i.push(Q("id-collision","edge id collides with a node id",`edges[${h}].id`)),d.add(A.edge.id),a.push(A.edge)});let f=[],l=new Set;n.entities.forEach((O,h)=>{let A=Ju(O,`entities[${h}]`);if(!A.ok){i.push(...A.errors);return}if(l.has(A.entity.id)){i.push(Q("duplicate-id","duplicate entity id",`entities[${h}].id`));return}l.add(A.entity.id),f.push(A.entity)});let k=[],E=new Set;if(n.discovery.forEach((O,h)=>{let A=By(O,`discovery[${h}]`);if(!A.ok){i.push(...A.errors);return}if(E.has(A.discovery.observerId)){i.push(Q("duplicate-observer","duplicate observerId",`discovery[${h}].observerId`));return}E.add(A.discovery.observerId),k.push(A.discovery)}),i.length)return{ok:!1,errors:i};let C=mo(o,a,f,k);return C.length?{ok:!1,errors:C}:{ok:!0,snapshot:{schemaVersion:zn,graphId:n.graphId,nodes:o,edges:a,entities:f,discovery:k}}}function mo(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(Q("missing-node",`edge ${a.id} from unknown node`,`edges.${a.id}.from`)),i.has(a.to)||s.push(Q("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(Q("missing-node",`entity ${a.id} location unknown`,`entities.${a.id}.locationNodeId`)),a.transit){i.has(a.transit.originNodeId)||s.push(Q("missing-node","transit origin unknown",`entities.${a.id}.transit.originNodeId`)),i.has(a.transit.destinationNodeId)||s.push(Q("missing-node","transit destination unknown",`entities.${a.id}.transit.destinationNodeId`));for(let d of a.transit.routeEdgeIds)o.has(d)||s.push(Q("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(Q("missing-node",`discovery references unknown node ${d}`,`discovery.${a.observerId}`));for(let d of a.edgeIds)o.has(d)||s.push(Q("missing-edge",`discovery references unknown edge ${d}`,`discovery.${a.observerId}`))}return s}function ga(e){return[...e].map(t=>kt(t)).sort((t,n)=>t.id.localeCompare(n.id))}function Vu(e){return[...e].map(t=>kt(t)).sort((t,n)=>t.id.localeCompare(n.id))}function Hy(e){return e.directed?[{from:e.from,to:e.to}]:[{from:e.from,to:e.to},{from:e.to,to:e.from}]}function Vr(){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 Fr(e){if(!e.ok)throw new Error(e.errors.map(t=>t.detail).join("; "));return e.contract}function qy(){return[Fr(ce(yo,Vr())),Fr(ce(ho,Vr())),Fr(ce(bo,Vr())),Fr(ce(Br,Vr())),Fr(Xe($r,Vr()))]}function Gy(e={}){let t=e.migrations??[],n=e.maxPathVisits??Ly,r=e.source??"world-graph",i=e.graphId??"world",o=!1,s=new Map,a=new Map,d=new Map,f=new Map,l=[],k=[];function E(){if(o)throw new Error(My)}function C(c,p){let m={type:c,payload:p,source:r,kind:c===$r?"diagnostic":void 0};l.push(m),k.push(c),e.router?.publish(m)}function O(c){return C($r,{graphId:i}),{ok:!1,errors:c}}function h(){let c=new Map,p=m=>(c.has(m)||c.set(m,[]),c.get(m));for(let m of s.values())p(m.id);for(let m of a.values())for(let I of Hy(m))p(I.from).push({edge:m,to:I.to});for(let m of c.values())m.sort((I,T)=>I.edge.id.localeCompare(T.edge.id)||I.to.localeCompare(T.to));return c}function A(c,p){let m=Wu(c,`nodes.${c.id??"?"}`);return m.ok?s.get(m.node.id)?(p.push(Q("duplicate-id",`node ${m.node.id} already exists`,`nodes.${m.node.id}`)),!1):a.has(m.node.id)?(p.push(Q("id-collision","node id collides with an edge id",`nodes.${m.node.id}`)),!1):(s.set(m.node.id,m.node),C(yo,{graphId:i,nodeId:m.node.id}),!0):(p.push(...m.errors),!1)}function F(c,p){let m=ju(c,`edges.${c.id??"?"}`);return m.ok?a.has(m.edge.id)?(p.push(Q("duplicate-id",`edge ${m.edge.id} already exists`,`edges.${m.edge.id}`)),!1):s.has(m.edge.id)?(p.push(Q("id-collision","edge id collides with a node id",`edges.${m.edge.id}`)),!1):!s.has(m.edge.from)||!s.has(m.edge.to)?(p.push(Q("missing-node",`edge ${m.edge.id} references unknown node`,`edges.${m.edge.id}`)),!1):(a.set(m.edge.id,m.edge),C(ho,{graphId:i,edgeId:m.edge.id}),!0):(p.push(...m.errors),!1)}function W(c){let p=f.get(c);return p||(p={nodeIds:new Set,edgeIds:new Set},f.set(c,p)),p}function x(c,p){return p.visibility==="canonical"?!0:f.get(c)?.edgeIds.has(p.id)===!0}function N(c,p){if(f.get(c)?.nodeIds.has(p.id))return!0;if(p.kind==="frontier"||p.frontier){for(let m of a.values())if(x(c,m)&&(m.from===p.id||m.to===p.id)){let I=m.from===p.id?m.to:m.from;if(f.get(c)?.nodeIds.has(I))return!0}}return!1}function P(c,p,m,I){let T=new Map;for(let w of s.values())m(w,null)&&T.set(w.id,kt(w));let S=[];for(let w of a.values())!T.has(w.from)||!T.has(w.to)||m(T.get(w.from),w)&&S.push(kt(w));let D=ga([...T.values()].filter(w=>w.kind==="frontier"||w.frontier===!0)),B=[...d.values()].filter(w=>!!(w.locationNodeId&&T.has(w.locationNodeId)||w.transit&&(T.has(w.transit.originNodeId)||T.has(w.transit.destinationNodeId)))).map(w=>kt(w)).sort((w,y)=>w.id.localeCompare(y.id));return{kind:c,observerId:p,focusNodeId:I,nodes:ga(T.values()),edges:Vu(S),frontiers:D,entities:B}}function u(c,p,m){let I=new Set;if(!s.has(c))return I;let T=h(),S=[{id:c,dist:0}],D=new Set([c]);for(I.add(c);S.length;){let B=S.shift();if(!(B.dist>=p))for(let w of T.get(B.id)??[]){if(!x(m,w.edge)&&w.edge.visibility!=="canonical"||D.has(w.to))continue;let y=s.get(w.to);y&&(y.mapLayer!=="local"&&y.kind!=="frontier"&&!y.frontier||(D.add(w.to),I.add(w.to),S.push({id:w.to,dist:B.dist+1})))}}return I}function v(c,p,m,I,T){let S=I?.maxVisits??n,D=h(),B=new Map([[c,0]]),w=new Map,y=new Set,_=0;for(;_<S;){let L=null,H=1/0;for(let[G,ee]of B)y.has(G)||(ee<H||ee===H&&(L===null||G.localeCompare(L)<0))&&(L=G,H=ee);if(L===null||T!==null&&L===T)break;y.add(L),_+=1;for(let G of D.get(L)??[]){if(!p.canTraverse(G.edge,L,G.to,m))continue;let ee=p.cost(G.edge,L,G.to,m);if(!Number.isFinite(ee)||ee<0)continue;let Y=H+ee,K=B.get(G.to);(K===void 0||Y<K||Y===K&&G.edge.id.localeCompare(w.get(G.to)?.edge.id??G.edge.id)<0)&&(B.set(G.to,Y),w.set(G.to,{node:L,edge:G.edge,cost:ee}))}}return{dist:B,prev:w}}return{addNode(c){E();let p=[];return A(c,p),p.length?O(p):{ok:!0}},addEdge(c){E();let p=[];return F(c,p),p.length?O(p):{ok:!0}},applyPatch(c){E();let p=new Map(s),m=new Map(a),I=l.length,T=k.length,S=[];for(let D of c.nodes??[])A(D,S);for(let D of c.edges??[])F(D,S);if(S.length){s.clear(),a.clear();for(let[D,B]of p)s.set(D,B);for(let[D,B]of m)a.set(D,B);return l.length=I,k.length=T,O(S)}return{ok:!0}},removeNode(c){if(E(),!s.has(c))return O([Q("unknown-node",c)]);let p=mo([...s.values()].filter(I=>I.id!==c),[...a.values()].filter(I=>I.from!==c&&I.to!==c),[...d.values()],[...f.entries()].map(([I,T])=>({observerId:I,nodeIds:[...T.nodeIds].filter(S=>S!==c),edgeIds:[...T.edgeIds]}))).filter(I=>I.code!=="missing-node"||!I.detail.includes(c));if(p.length)return O(p);let m=[...a.values()].filter(I=>I.from===c||I.to===c);if(m.length)return O([Q("node-in-use",`remove incident edges first (${m[0].id})`)]);for(let I of d.values())if(I.locationNodeId===c||I.transit?.originNodeId===c||I.transit?.destinationNodeId===c)return O([Q("node-in-use",`entity ${I.id} still references node`)]);s.delete(c);for(let I of f.values())I.nodeIds.delete(c);return{ok:!0}},removeEdge(c){if(E(),!a.has(c))return O([Q("unknown-edge",c)]);for(let p of d.values())if(p.transit?.routeEdgeIds.includes(c))return O([Q("edge-in-use",`entity ${p.id} still references edge`)]);a.delete(c);for(let p of f.values())p.edgeIds.delete(c);return{ok:!0}},setEdgeAccess(c,p){E();let m=a.get(c);return m?Gu.has(p)?(a.set(c,{...m,access:p}),{ok:!0}):O([Q("invalid-access",p)]):O([Q("unknown-edge",c)])},discover(c,p){if(E(),!rt(c))return O([Q("invalid-observer","observerId is required")]);let m=[];for(let T of p.nodeIds??[])s.has(T)||m.push(Q("unknown-node",T));for(let T of p.edgeIds??[])a.has(T)||m.push(Q("unknown-edge",T));if(m.length)return O(m);let I=W(c);for(let T of p.nodeIds??[])I.nodeIds.add(T);for(let T of p.edgeIds??[])I.edgeIds.add(T);return C(bo,{graphId:i,observerId:c}),{ok:!0}},upsertEntity(c){E();let p=Ju(c,`entities.${c.id??"?"}`);if(!p.ok)return O(p.errors);let m=mo([...s.values()],[...a.values()],[p.entity],[]);return m.length?O(m):(d.set(p.entity.id,p.entity),{ok:!0})},startTransit(c,p,m="traveling"){E();let I=d.get(c);if(!I)return O([Q("unknown-entity",c)]);let T=Uu(p,"transit");if(!T.ok)return O(T.errors);let S={...I,status:m,locationNodeId:null,transit:T.transit},D=mo([...s.values()],[...a.values()],[S],[]);return D.length?O(D):(d.set(c,S),C(Br,{graphId:i,entityId:c}),{ok:!0})},completeTransit(c,p){E();let m=d.get(c);return m?m.transit?Yn(p)?(d.set(c,{...m,status:"available",locationNodeId:m.transit.destinationNodeId,transit:null}),C(Br,{graphId:i,entityId:c,semanticTime:p}),{ok:!0}):O([Q("invalid-time","semanticTime must be finite")]):O([Q("not-traveling",c)]):O([Q("unknown-entity",c)])},setEntityStatus(c,p){E();let m=d.get(c);return m?Ku.has(p)?(d.set(c,{...m,status:p}),{ok:!0}):O([Q("invalid-status",p)]):O([Q("unknown-entity",c)])},getNode(c){E();let p=s.get(c);return p?kt(p):void 0},getEdge(c){E();let p=a.get(c);return p?kt(p):void 0},getEntity(c){E();let p=d.get(c);return p?kt(p):void 0},projectCanonical(){return E(),P("canonical",void 0,()=>!0)},projectKnown(c){return E(),P("known",c,(p,m)=>m?x(c,m):N(c,p))},projectLocal(c,p,m=8){E();let I=u(p,m,c);return P("local",c,(T,S)=>I.has(T.id)?S?x(c,S)||S.visibility==="canonical":N(c,T)||I.has(T.id):!1,p)},projectRegional(c){return E(),P("regional",c,(p,m)=>p.mapLayer!=="regional"&&p.kind!=="frontier"&&!p.frontier?!1:m?x(c,m):N(c,p))},findPath(c,p,m,I,T){if(E(),!s.has(c))return{ok:!1,errors:[Q("unknown-node",c)]};if(!s.has(p))return{ok:!1,errors:[Q("unknown-node",p)]};if(!Yn(I.semanticTime))return{ok:!1,errors:[Q("invalid-time","semanticTime must be finite")]};if(c===p)return{ok:!0,path:{from:c,to:p,nodeIds:[c],steps:[],totalCost:0}};let{dist:S,prev:D}=v(c,m,I,T,p);if(!S.has(p))return{ok:!1,errors:[Q("unreachable",p)]};let B=[],w=[p],y=p;for(;y!==c;){let _=D.get(y);if(!_)return{ok:!1,errors:[Q("unreachable",p)]};B.push({edgeId:_.edge.id,from:_.node,to:y,cost:_.cost}),y=_.node,w.push(y)}return B.reverse(),w.reverse(),{ok:!0,path:{from:c,to:p,nodeIds:w,steps:B,totalCost:S.get(p)}}},reachable(c,p,m,I){if(E(),!s.has(c)||!Yn(m.semanticTime))return{nodeIds:[]};let{dist:T}=v(c,p,m,I,null);return{nodeIds:[...T.keys()].sort((S,D)=>S.localeCompare(D))}},inspect(){return E(),{destroyed:!1,graphId:i,nodeCount:s.size,edgeCount:a.size,entityCount:d.size,observerCount:f.size,events:[...k]}},snapshot(){return E(),{schemaVersion:zn,graphId:i,nodes:ga(s.values()),edges:Vu(a.values()),entities:[...d.values()].map(c=>kt(c)).sort((c,p)=>c.id.localeCompare(p.id)),discovery:[...f.entries()].map(([c,p])=>({observerId:c,nodeIds:[...p.nodeIds].sort((m,I)=>m.localeCompare(I)),edgeIds:[...p.edgeIds].sort((m,I)=>m.localeCompare(I))})).sort((c,p)=>c.observerId.localeCompare(p.observerId))}},restore(c){E();let p=$y(c,t);if(!p.ok)return p;let m={graphId:i,nodes:new Map(s),edges:new Map(a),entities:new Map(d),discovery:new Map([...f.entries()].map(([I,T])=>[I,{nodeIds:new Set(T.nodeIds),edgeIds:new Set(T.edgeIds)}]))};try{i=p.snapshot.graphId,s.clear(),a.clear(),d.clear(),f.clear();for(let I of p.snapshot.nodes)s.set(I.id,I);for(let I of p.snapshot.edges)a.set(I.id,I);for(let I of p.snapshot.entities)d.set(I.id,I);for(let I of p.snapshot.discovery)f.set(I.observerId,{nodeIds:new Set(I.nodeIds),edgeIds:new Set(I.edgeIds)});return{ok:!0,snapshot:kt(p.snapshot)}}catch{i=m.graphId,s.clear(),a.clear(),d.clear(),f.clear();for(let[I,T]of m.nodes)s.set(I,T);for(let[I,T]of m.edges)a.set(I,T);for(let[I,T]of m.entities)d.set(I,T);for(let[I,T]of m.discovery)f.set(I,T);return{ok:!1,errors:[Q("restore-failed","restore rolled back")]}}},events(){return E(),[...l]},destroy(){o=!0,s.clear(),a.clear(),d.clear(),f.clear()}}}var Hr=1,Io=1,Zu=["add","replace","revise","remove","tombstone","link","unlink"],el=["base-revision","entity-revision","entity-hash","identity-required","identity-absent","capability","schema"],Ro="world.patch.state.accepted",Co="world.patch.state.rejected",Ao="world.patch.state.superseded",Qn="world.patch.diagnostic.lifecycle",Ky=[Ro,Co,Ao,Qn],tl=["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"],nl=Zt,zu=new Set(Zu),Wy=new Set(el),jy=new Set(tl),ba=new Set(go),va=new Set(["exit","edge","graph-edge"]),Uy="World patch applier has been destroyed",Jy=new Set(["patchId","schemaVersion","baseRevision","idempotencyKey","preconditions","operations","provenance","supersedes"]),zy=new Set(["op","kind","id","value","from","to","order","refs"]),Yy=new Set(["jobId","producer","contentRevisions"]),Xy={"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"])},Qy=256,Zy=32,eh=4096,th=262144;function X(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 Re(e){try{return JSON.parse(JSON.stringify(e))}catch{return e}}function ye(e){return typeof e=="string"&&e.length>0}function st(e){return typeof e=="number"&&Number.isInteger(e)&&Number.isFinite(e)}function qr(e,t,n,r){for(let i of Object.keys(e))t.has(i)||r.push(X("unknown-field",`unknown field "${i}"`,n?`${n}.${i}`:i))}function Sa(e){if(e===null||typeof e!="object")return e;if(Array.isArray(e))return e.map(Sa);let t=e,n={};for(let r of Object.keys(t).sort())n[r]=Sa(t[r]);return n}function Yu(e){let t=JSON.stringify(Sa(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 Ea(e,t){if(e==null)return e;if(Array.isArray(e))return e.map(i=>Ea(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)?St:Ea(o,t);return r}function nh(){return{revision:0,entities:[],links:[],accepted:[]}}function rl(e){return[...e].map(t=>Re(t)).sort((t,n)=>{let r=t.kind.localeCompare(n.kind);return r!==0?r:t.id.localeCompare(n.id)})}function il(e){return[...e].map(t=>Re(t)).sort((t,n)=>t.id.localeCompare(n.id))}function rh(e){return[...e].map(t=>Re(t)).sort((t,n)=>t.revision!==n.revision?t.revision-n.revision:t.patchId.localeCompare(n.patchId))}function ko(e){return{revision:e.revision,entities:rl(e.entities),links:il(e.links),accepted:rh(e.accepted)}}function vo(e,t){return e.length<=t?e:[...e.slice(0,t),X("over-limit",`truncated ${e.length-t} additional diagnostics`)]}function ol(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 So(){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 Eo(e){if(!e.ok)throw new Error(e.errors.map(t=>t.detail).join("; "));return e.contract}function ih(){return[Eo(ce(Ro,So())),Eo(ce(Co,So())),Eo(ce(Ao,So())),Eo(Xe(Qn,So()))]}function oh(e){return typeof e=="string"&&jy.has(e)}function sl(){let e=nh();return{current(){return Re(e)},begin(){let t=Re(e),n=null;return{applyWorldRevision(r){n=ko(r)},commit(){n&&(e=n),n=null},rollback(){e=Re(t),n=null}}}}}function al(e,t,n){if(e===void 0)return;if(!Je(e)){n.push(X("invalid-schema","refs must be an object",t));return}qr(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(!ye(o)){n.push(X("invalid-schema",`refs.${i} must be a non-empty string`,`${t}.${i}`));continue}r[i]=o}}return r}function sh(e,t,n){if(!Je(e)){n.push(X("invalid-schema","operation must be an object",t));return}qr(e,zy,t,n),(!ye(e.op)||!zu.has(e.op))&&n.push(X("unknown-op",`unknown op "${String(e.op)}"`,`${t}.op`)),ye(e.kind)||n.push(X("missing-field","kind is required",`${t}.kind`));let r=e.id;ye(r)||((e.op==="link"||e.op==="unlink")&&ye(e.from)&&ye(e.to)?r=`${e.kind??"link"}:${e.from}:${e.to}`:n.push(X("missing-field","id is required",`${t}.id`))),e.order!==void 0&&!st(e.order)&&n.push(X("invalid-schema","order must be an integer",`${t}.order`)),e.from!==void 0&&!ye(e.from)&&n.push(X("invalid-schema","from must be a non-empty string",`${t}.from`)),e.to!==void 0&&!ye(e.to)&&n.push(X("invalid-schema","to must be a non-empty string",`${t}.to`));let i=al(e.refs,`${t}.refs`,n);if(!ye(e.op)||!zu.has(e.op)||!ye(e.kind)||!ye(r))return;(e.op==="link"||e.op==="unlink")&&(!ye(e.from)||!ye(e.to))&&n.push(X("missing-field","link/unlink require from and to",t));let o={op:e.op,kind:e.kind,id:r};return st(e.order)&&(o.order=e.order),e.value!==void 0&&(o.value=Re(e.value)),ye(e.from)&&(o.from=e.from),ye(e.to)&&(o.to=e.to),i&&Object.keys(i).length&&(o.refs=i),o}function ah(e,t,n){if(!Je(e)){n.push(X("invalid-schema","precondition must be an object",t));return}if(!ye(e.type)||!Wy.has(e.type)){n.push(X("invalid-schema",`unknown precondition type "${String(e.type)}"`,`${t}.type`));return}let r=e.type;switch(qr(e,Xy[r],t,n),r){case"base-revision":if(!st(e.revision)||e.revision<0){n.push(X("invalid-schema","revision must be an integer \u2265 0",`${t}.revision`));return}return{type:r,revision:e.revision};case"entity-revision":if(!ye(e.kind)||!ye(e.id)||!st(e.revision)||e.revision<1){n.push(X("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(!ye(e.kind)||!ye(e.id)||!ye(e.hash)){n.push(X("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(!ye(e.kind)||!ye(e.id)){n.push(X("invalid-schema","kind and id are required",t));return}return{type:r,kind:e.kind,id:e.id};case"capability":if(!ye(e.name)){n.push(X("invalid-schema","capability name is required",`${t}.name`));return}return{type:r,name:e.name};case"schema":if(!st(e.schemaVersion)||e.schemaVersion<1){n.push(X("invalid-schema","schemaVersion must be an integer \u2265 1",`${t}.schemaVersion`));return}return{type:r,schemaVersion:e.schemaVersion}}}function dl(e,t,n){if(!Je(e)){n.push(X("invalid-schema","provenance is required",t));return}if(qr(e,Yy,t,n),!ye(e.producer)){n.push(X("missing-field","producer is required",`${t}.producer`));return}let r={producer:e.producer};return e.jobId!==void 0&&(ye(e.jobId)?r.jobId=e.jobId:n.push(X("invalid-schema","jobId must be a non-empty string",`${t}.jobId`))),e.contentRevisions!==void 0&&(!Array.isArray(e.contentRevisions)||e.contentRevisions.some(i=>!ye(i))?n.push(X("invalid-schema","contentRevisions must be string[]",`${t}.contentRevisions`)):r.contentRevisions=[...e.contentRevisions]),r}function dh(e,t){let n=[],r="";try{r=JSON.stringify(e)??""}catch{return{errors:[X("invalid-schema","patch is not JSON-serializable")]}}if(r.length>t.maxBytes&&n.push(X("over-limit",`patch exceeds ${t.maxBytes} bytes`)),!Je(e))return{errors:[X("invalid-schema","patch must be an object"),...n]};qr(e,Jy,"",n),ye(e.patchId)||n.push(X("missing-field","patchId is required","patchId")),e.schemaVersion!==Hr&&n.push(X("schema-mismatch",`schemaVersion must be ${Hr}`,"schemaVersion")),(!st(e.baseRevision)||e.baseRevision<0)&&n.push(X("invalid-schema","baseRevision must be an integer \u2265 0","baseRevision")),ye(e.idempotencyKey)||n.push(X("missing-field","idempotencyKey is required","idempotencyKey")),e.supersedes!==void 0&&!ye(e.supersedes)&&n.push(X("invalid-schema","supersedes must be a non-empty string","supersedes"));let i=dl(e.provenance,"provenance",n);Array.isArray(e.operations)?e.operations.length>t.maxOperations&&n.push(X("over-limit",`operations exceed ${t.maxOperations}`,"operations")):n.push(X("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 f=sh(e.operations[d],`operations[${d}]`,n);f&&o.push(f)}let s=[];if(e.preconditions!==void 0)if(!Array.isArray(e.preconditions))n.push(X("invalid-schema","preconditions must be an array","preconditions"));else for(let d=0;d<e.preconditions.length;d++){let f=ah(e.preconditions[d],`preconditions[${d}]`,n);f&&s.push(f)}if(n.length)return{errors:n};let a={patchId:e.patchId,schemaVersion:Hr,baseRevision:e.baseRevision,idempotencyKey:e.idempotencyKey,operations:o,provenance:i};return s.length&&(a.preconditions=s),ye(e.supersedes)&&(a.supersedes=e.supersedes),{patch:a,errors:n}}function ch(e){let t=new Map;for(let r of e.entities)t.set(r.id,Re(r));let n=new Map;for(let r of e.links)n.set(r.id,Re(r));return{revision:e.revision,entities:t,links:n,accepted:e.accepted.map(r=>Re(r))}}function Xn(e,t,n){let r=e.get(t);if(r&&!(n&&r.kind!==n))return r}function uh(e,t,n){let r=ch(e),i=[],o=[],s=[...t].sort(ol),a=(f,l)=>{let k={kind:f.kind,id:f.id,revision:l?l.revision+1:1,hash:Yu(f.value??null),value:f.value===void 0?null:Re(f.value),tombstoned:!1};f.refs&&(k.refs=Re(f.refs)),r.entities.set(f.id,k),i.push({op:f.op,kind:f.kind,id:f.id})},d=f=>{!f.from||!f.to||r.links.set(f.id,{id:f.id,kind:f.kind,from:f.from,to:f.to,...f.value!==void 0?{value:Re(f.value)}:{}})};for(let f=0;f<s.length;f++){let l=s[f],k=`operations[${f}]`,E=r.entities.get(l.id);switch(l.op){case"add":if(E&&!E.tombstoned){o.push(X("duplicate-id",`identity "${l.id}" already exists`,k));break}a(l),l.from&&l.to&&d(l);break;case"replace":case"revise":if(!E||E.tombstoned){o.push(X("missing-ref",`identity "${l.id}" is absent`,k));break}if(E.kind!==l.kind){o.push(X("missing-ref",`identity "${l.id}" is kind "${E.kind}"`,k));break}a(l,E),l.from&&l.to&&d(l);break;case"remove":if(!E){o.push(X("missing-ref",`identity "${l.id}" is absent`,k));break}r.entities.delete(l.id),r.links.delete(l.id);for(let[C,O]of[...r.links])(O.from===l.id||O.to===l.id)&&r.links.delete(C);i.push({op:l.op,kind:l.kind,id:l.id});break;case"tombstone":if(!E){o.push(X("missing-ref",`identity "${l.id}" is absent`,k));break}E.tombstoned=!0,E.revision+=1,E.hash=Yu(null),E.value=null,r.links.delete(l.id);for(let[C,O]of[...r.links])(O.from===l.id||O.to===l.id)&&r.links.delete(C);i.push({op:l.op,kind:l.kind,id:l.id});break;case"link":if(E&&E.kind!==l.kind&&!E.tombstoned){o.push(X("duplicate-id",`identity "${l.id}" already exists`,k));break}a(l,E&&!E.tombstoned?E:void 0),d(l);break;case"unlink":if(!r.links.has(l.id)&&!E){o.push(X("missing-ref",`link "${l.id}" is absent`,k));break}r.links.delete(l.id),E&&(E.tombstoned=!0,E.revision+=1),i.push({op:l.op,kind:l.kind,id:l.id});break}}r.entities.size>n.maxEntities&&o.push(X("over-limit",`entities exceed ${n.maxEntities}`));for(let f of r.links.values()){let l=r.entities.get(f.from),k=r.entities.get(f.to);(!l||l.tombstoned)&&o.push(X("referential-integrity",`link "${f.id}" from "${f.from}" is absent`,`links.${f.id}.from`)),(!k||k.tombstoned)&&o.push(X("referential-integrity",`link "${f.id}" to "${f.to}" is absent`,`links.${f.id}.to`))}return{world:r,changed:i,errors:o}}function lh(e,t,n,r){let i=[];e.baseRevision!==t.revision&&i.push(X("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(X("stale-base",`expected base revision ${s.revision}, current is ${t.revision}`,a,{expectedRevision:t.revision,actualRevision:s.revision}));break;case"entity-revision":{let d=Xn(n,s.id,s.kind);d?d.revision!==s.revision&&i.push(X("entity-revision",`identity "${s.id}" revision is ${d.revision}, expected ${s.revision}`,a)):i.push(X("identity-required",`identity "${s.id}" is absent`,a));break}case"entity-hash":{let d=Xn(n,s.id,s.kind);d?d.hash!==s.hash&&i.push(X("entity-hash",`identity "${s.id}" hash is ${d.hash}, expected ${s.hash}`,a)):i.push(X("identity-required",`identity "${s.id}" is absent`,a));break}case"identity-required":(!Xn(n,s.id,s.kind)||Xn(n,s.id,s.kind)?.tombstoned)&&i.push(X("identity-required",`identity "${s.id}" is required`,a));break;case"identity-absent":Xn(n,s.id,s.kind)&&!Xn(n,s.id,s.kind)?.tombstoned&&i.push(X("identity-absent",`identity "${s.id}" must be absent`,a));break;case"capability":r.has(s.name)||i.push(X("capability-denied",`capability "${s.name}" is not granted`,a));break;case"schema":s.schemaVersion!==Hr&&i.push(X("schema-mismatch",`schema requirement ${s.schemaVersion} is unsupported`,a));break}}return i}function ph(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 Xu(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 fh(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,f=new Set(n.entities.filter(l=>!l.tombstoned).map(l=>l.id));for(let l of t)f.add(l.id);for(let l of e.provenance.contentRevisions??[])r&&!Xu(r,void 0,l)&&s.push(X("content-unavailable",`content revision "${l}" is not available`,"provenance.contentRevisions"));for(let l=0;l<t.length;l++){let k=t[l],E=`operations[${l}]`,C=k.refs?.contentRevision,O=k.refs?.contentId;C&&r&&!Xu(r,O,C)&&s.push(X("content-unavailable",`content revision "${C}" is not available`,`${E}.refs`));let h=k.refs?.binding??(k.kind==="presentation-binding"?k.id:void 0);h&&a&&!a.has(h)&&s.push(X("binding-unavailable",`binding "${h}" is not listed`,`${E}`));let A=k.refs?.asset??(k.kind==="asset"?k.id:void 0);A&&d&&!d.has(A)&&s.push(X("asset-unavailable",`asset "${A}" is not available`,`${E}`));let F=k.refs?.identity;F&&!f.has(F)&&s.push(X("missing-ref",`ref identity "${F}" is absent`,`${E}.refs`))}return s}function Qu(e){if(!ba.has(e.kind))return;let t=Je(e.value)?e.value:{},n={id:e.id,version:st(t.version)&&t.version>=1?t.version:1,kind:ye(t.kind)&&ba.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=Re(t.metadata)),n}function ha(e){if(!va.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:st(t.version)&&t.version>=1?t.version:1,from:e.from,to:e.to,directed:t.directed===!0,kind:ye(t.kind)?t.kind:"door",visibility:n,access:r};if(Je(t.requirements)&&(i.requirements=Re(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=Re(t.metadata)),i}function mh(e,t){let n=e.snapshot(),r=new Map(n.nodes.map(d=>[d.id,Re(d)])),i=new Map(n.edges.map(d=>[d.id,Re(d)])),o=[...t].sort(ol),s=d=>{r.delete(d);for(let[f,l]of[...i])(l.from===d||l.to===d)&&i.delete(f)};for(let d of o)switch(d.op){case"add":{let f=Qu(d);f&&!r.has(f.id)&&r.set(f.id,f);let l=ha(d);l&&!i.has(l.id)&&i.set(l.id,l);break}case"replace":case"revise":{let f=Qu(d);f&&r.set(f.id,f);let l=ha(d);l&&i.set(l.id,l);break}case"link":{let f=ha(d);f&&i.set(f.id,f);break}case"remove":case"tombstone":ba.has(d.kind)&&s(d.id),va.has(d.kind)&&i.delete(d.id);break;case"unlink":va.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=>X("graph-apply-failed",d.detail,d.path))}function gh(e,t){let n=[];if(!Je(e))return{errors:[X("invalid-snapshot","world must be an object",t)]};if((!st(e.revision)||e.revision<0)&&n.push(X("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(X("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(X("invalid-snapshot","entity must be an object",d));continue}if(!ye(a.kind)||!ye(a.id)||!st(a.revision)||a.revision<1){n.push(X("invalid-snapshot","kind, id, and revision are required",d));continue}if(!ye(a.hash)||typeof a.tombstoned!="boolean"){n.push(X("invalid-snapshot","hash and tombstoned are required",d));continue}let f={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=al(a.refs,`${d}.refs`,n);l&&(f.refs=l)}r.push(f)}let i=[];for(let s=0;s<e.links.length;s++){let a=e.links[s],d=`${t}.links[${s}]`;if(!Je(a)||!ye(a.id)||!ye(a.kind)||!ye(a.from)||!ye(a.to)){n.push(X("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)||!ye(a.patchId)||!ye(a.idempotencyKey)||!st(a.revision)||a.revision<1){n.push(X("invalid-snapshot","accepted patch identity is invalid",d));continue}let f=dl(a.provenance,`${d}.provenance`,n);if(!f)continue;let l={patchId:a.patchId,idempotencyKey:a.idempotencyKey,revision:a.revision,provenance:f};ye(a.supersededBy)&&(l.supersededBy=a.supersededBy),o.push(l)}return n.length?{errors:n}:{errors:[],world:ko({revision:e.revision,entities:r,links:i,accepted:o})}}function yh(e,t,n){if(!Je(e)){n.push(X("invalid-snapshot","audit record must be an object",t));return}if(e.outcome!=="accepted"&&e.outcome!=="rejected"&&e.outcome!=="superseded"){n.push(X("invalid-snapshot","audit outcome is invalid",`${t}.outcome`));return}if(!ye(e.patchId)||!ye(e.idempotencyKey)||!st(e.at)){n.push(X("invalid-snapshot","audit identity is invalid",t));return}if(!st(e.oldRevision)||!st(e.newRevision)||!Array.isArray(e.reasonCodes)){n.push(X("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 hh(e){if(!Je(e))return{ok:!1,errors:[X("invalid-snapshot","snapshot must be an object")]};if(e.schemaVersion!==Io)return{ok:!1,errors:[X("invalid-version","unknown snapshot schema version","schemaVersion")]};let t=gh(e.world,"world");if(!t.world)return{ok:!1,errors:t.errors};let n=[...t.errors??[]];Array.isArray(e.audit)||n.push(X("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=yh(e.audit[o],`audit[${o}]`,n);s&&r.push(s)}if(n.length)return{ok:!1,errors:n};let i={schemaVersion:Io,world:t.world,audit:r};return e.graph!==void 0&&(i.graph=Re(e.graph)),{ok:!0,snapshot:i}}function bh(e={}){let t=e.persistence??sl(),n=e.now??(()=>Date.now()),r=e.source??"world-patch",i={maxOperations:e.limits?.maxOperations??Qy,maxDiagnostics:e.limits?.maxDiagnostics??Zy,maxEntities:e.limits?.maxEntities??eh,maxBytes:e.limits?.maxBytes??th},o=new Set([...nl,...e.redact??[]]),s=new Set(e.capabilities??[]),a=e.graphPolicy??{},d=!1,f=[],l=[],k=[],E=null;function C(){if(d)throw new Error(Uy)}function O(){let u=t.current();return{destroyed:d,revision:u.revision,entities:rl(u.entities),links:il(u.links),acceptedPatchIds:u.accepted.map(v=>v.patchId),events:[...k],lastRejection:E?Re(E):null}}function h(u,v){let c={type:u,payload:v,source:r,kind:u===Qn?"diagnostic":"state"};l.push(c),k.push(u),e.onEvent?.(c),e.router?.publish(c)}function A(u){f.push(u)}function F(u){let v=dh(u,i);if(!v.patch)return{ok:!1,errors:vo(v.errors,i.maxDiagnostics)};let c=v.patch,p=t.current(),m=p.accepted.find(H=>H.patchId===c.patchId);if(m&&!m.supersededBy)return{ok:!0,patch:c,next:Re(p),changed:[],idempotent:!0};if(m?.supersededBy)return{ok:!1,patch:c,errors:[X("superseded",`patch "${c.patchId}" was superseded by "${m.supersededBy}"`)]};let I=p.accepted.find(H=>H.idempotencyKey===c.idempotencyKey&&!H.supersededBy);if(I&&I.patchId!==c.patchId)return{ok:!1,patch:c,errors:[X("idempotency-conflict",`idempotencyKey already used by patch "${I.patchId}"`,"idempotencyKey")]};if(c.supersedes&&!p.accepted.find(G=>G.patchId===c.supersedes))return{ok:!1,patch:c,errors:[X("missing-ref",`superseded patch "${c.supersedes}" is unknown`,"supersedes")]};let T=new Map(p.entities.map(H=>[H.id,H])),S=lh(c,p,T,s),D=uh(p,c.operations,i),B=fh(c,c.operations,p,e.content,e.bindings,e.assets),w=[...S,...D.errors,...B];if(!D.world)return{ok:!1,patch:c,errors:vo(w,i.maxDiagnostics)};let y=ko({revision:p.revision+1,entities:D.world.entities.values(),links:D.world.links.values(),accepted:[...D.world.accepted.map(H=>c.supersedes&&H.patchId===c.supersedes?{...H,supersededBy:c.patchId}:H),{patchId:c.patchId,idempotencyKey:c.idempotencyKey,revision:p.revision+1,provenance:Re(c.provenance)}]});(a.detectCycle?.(y)??(!a.allowCycles&&ph(y.links)))&&w.push(X("cycle","patch would introduce a link cycle"));for(let H of e.domainValidators??[])w.push(...H({patch:c,current:p,preview:y}).map(G=>G.code?G:X("domain",G.detail,G.path)));if(w.length)return{ok:!1,patch:c,errors:vo(w,i.maxDiagnostics)};let L=c.supersedes?p.accepted.find(H=>H.patchId===c.supersedes):void 0;return{ok:!0,patch:c,next:y,changed:D.changed,supersede:L}}function W(u,v,c){let p=vo(u,i.maxDiagnostics);E=p;let m=t.current(),I=p[0]?.code??"invalid-schema";return v?(A({outcome:"rejected",patchId:v.patchId,idempotencyKey:v.idempotencyKey,at:n(),oldRevision:c?.oldRevision??m.revision,newRevision:c?.oldRevision??m.revision,reasonCodes:p.map(T=>T.code),changedIdentities:[],provenance:Re(v.provenance),patch:Re(v)}),h(Co,{patchId:v.patchId,reasonCode:I,revision:m.revision}),h(Qn,{patchId:v.patchId,reasonCode:I,revision:m.revision})):h(Qn,{reasonCode:I,revision:m.revision}),{ok:!1,errors:p,inspect:O()}}function x(u){if(!e.graph||!u)return[];let v=e.graph.restore(u);return v.ok?[]:v.errors.map(c=>X("graph-apply-failed",c.detail,c.path))}function N(u){let v=t.begin();v.applyWorldRevision(u),v.commit()}return{dryRun(u){C();let v=F(u);return v.ok?v.idempotent?{ok:!0,previewRevision:v.next.revision,changedIdentities:[],diagnostics:[]}:{ok:!0,previewRevision:v.next.revision,changedIdentities:v.changed,diagnostics:[]}:{ok:!1,errors:v.errors}},commit(u){C();let v=F(u);if(!v.ok)return W(v.errors,v.patch);let c=v.patch,p=t.current();if(v.idempotent)return{ok:!0,patchId:c.patchId,oldRevision:p.revision,newRevision:p.revision,changedIdentities:[],idempotent:!0,inspect:O()};let m=e.graph?.snapshot(),I=t.begin();try{if(I.applyWorldRevision(v.next),e.graph){let S=mh(e.graph,c.operations);if(S.length){try{I.rollback()}catch{}return N(p),x(m),W(S,c,{oldRevision:p.revision})}}I.commit()}catch(S){try{I.rollback()}catch{}return N(p),x(m),W([X("publish-failed",S instanceof Error?S.message:"persistence failed")],c,{oldRevision:p.revision})}let T={patchId:c.patchId,oldRevision:p.revision,newRevision:v.next.revision,changedIdentities:v.changed,producer:c.provenance.producer,jobId:c.provenance.jobId,contentRevisions:c.provenance.contentRevisions};try{t.publish?.(T),v.supersede&&(h(Ao,{patchId:v.supersede.patchId,supersededBy:c.patchId,revision:v.next.revision}),A({outcome:"superseded",patchId:v.supersede.patchId,idempotencyKey:v.supersede.idempotencyKey,at:n(),oldRevision:p.revision,newRevision:v.next.revision,reasonCodes:["superseded"],changedIdentities:[],provenance:Re(v.supersede.provenance),patch:{supersededBy:c.patchId}})),h(Ro,{patchId:T.patchId,oldRevision:T.oldRevision,newRevision:T.newRevision,producer:T.producer,jobId:T.jobId,contentRevisions:T.contentRevisions,changedIdentities:T.changedIdentities}),E=null,A({outcome:"accepted",patchId:c.patchId,idempotencyKey:c.idempotencyKey,at:n(),oldRevision:p.revision,newRevision:v.next.revision,reasonCodes:[],changedIdentities:v.changed,provenance:Re(c.provenance),patch:Re(c)})}catch(S){return N(p),x(m),W([X("publish-failed",S instanceof Error?S.message:"publication failed")],c,{oldRevision:p.revision})}return{ok:!0,patchId:c.patchId,oldRevision:p.revision,newRevision:v.next.revision,changedIdentities:v.changed,inspect:O()}},inspect(){return C(),O()},snapshot(){C();let u={schemaVersion:Io,world:ko(t.current()),audit:Re(f)};return e.graph&&(u.graph=e.graph.snapshot()),u},restore(u){C();let v=hh(u);if(!v.ok)return v;let c=t.current(),p=f,m=e.graph?.snapshot();try{if(N(v.snapshot.world),f=Re(v.snapshot.audit),E=null,v.snapshot.graph){let I=x(v.snapshot.graph);if(I.length)return N(c),x(m),f=p,{ok:!1,errors:I}}return{ok:!0,snapshot:v.snapshot}}catch{return N(c),x(m),f=p,{ok:!1,errors:[X("invalid-snapshot","restore failed to persist")]}}},audit(u){C();let v=u?.redact!==!1,c=Re(f);return v?Ea(c,o):c},events(){return C(),l.map(u=>Re(u))},destroy(){d=!0,l.length=0,k.length=0}}}var Po=1,ul=to,Ia=["binding-conflict","asset-failure","revision-rollback","sequence-interruption","text-only-fallback"],ll=["state-projection","binding","content-revision","staging","asset","sequence","presentation","snapshot"],pl=[...Zt,"privatePrompt","signedUrl","signedURL","signed_url","presignedUrl","password"],vh=new Set(Ia),Sh=new Set(ll),Eh=new Set(["signedUrl","signedURL","signed_url","presignedUrl","presignedURL"]),Ih=/[?&](X-Amz-Signature|X-Amz-Credential|X-Amz-Security-Token|X-Goog-Signature|Signature|sig)=/i,kh=/https?:\/\/[^\s"'<>)\]]+/gi,Rh="Selection trace has been destroyed",Ch=new Set(Ia);function Ah(e){return typeof e=="string"&&vh.has(e)}function Ph(e){return typeof e=="string"&&Sh.has(e)}function it(e){try{return JSON.parse(JSON.stringify(e))}catch{return e}}function cl(e){return/^https?:\/\//i.test(e)?Ih.test(e):!1}function fl(e){return cl(e)?St:e.replace(kh,t=>cl(t)?St:t)}function Pt(e,t){if(e==null)return e;if(typeof e=="string")return fl(e);if(Array.isArray(e))return e.map(i=>Pt(i,t));if(typeof e!="object")return e;let n=e,r={};for(let[i,o]of Object.entries(n))t.has(i)||Eh.has(i)?r[i]=St:r[i]=Pt(o,t);return r}function ml(e,t,n){if(e==null)return e;if(Array.isArray(e))return e.map(o=>ml(o,t,n));if(typeof e!="object")return St;let r=e,i={};for(let[o,s]of Object.entries(r))t.has(o)?i[o]=Pt(s,n):i[o]=St;return i}function Th(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 wh(e,t,n){return Ch.has(e)||n>=1?!0:n<=0?!1:(t*2654435761>>>0)/4294967296<n}function xh(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 _h(e,t){return e.recordSelectionDecision(t)}function Oh(e,t){return{...it(e),selectionTrace:t}}function Dh(e={}){let t=new Set([...pl,...e.redactedKeys??[]]),n=new Set(e.projectionWhitelist??[]),r=e.maxRecords??ul,i=e.sampleRate??1,o=e.inspector,s=0,a=0,d=0,f=!1,l=[],k=[],E={},C=()=>{if(f)throw new Error(Rh)},O=x=>l.filter(N=>Th(N,x)).map(N=>it(N)),h=x=>ml(x,n,t),A=(x,N)=>{let P={index:N,kind:x.kind,reason:x.reason,summary:fl(String(x.summary))};return x.turn!==void 0&&(P.turn=x.turn),x.time!==void 0&&(P.time=x.time),x.correlationId&&(P.correlationId=x.correlationId),x.causationId&&(P.causationId=x.causationId),x.envelopeId&&(P.envelopeId=x.envelopeId),x.initiatingEventType&&(P.initiatingEventType=x.initiatingEventType),x.projectionRevision!==void 0&&(P.projectionRevision=x.projectionRevision),x.projection!==void 0?P.projection=h(x.projection):x.hostState!==void 0&&(P.projection=h(x.hostState)),x.bindings&&(P.bindings=Pt(it(x.bindings.slice()),t)),x.winningBindingId!==void 0&&(P.winningBindingId=x.winningBindingId),x.rejectedBindingIds&&(P.rejectedBindingIds=x.rejectedBindingIds.slice()),x.defaultFallback!==void 0&&(P.defaultFallback=x.defaultFallback),x.requestedContent&&(P.requestedContent=Pt(it(x.requestedContent),t)),x.activatedContent!==void 0&&(P.activatedContent=x.activatedContent?Pt(it(x.activatedContent),t):null),x.staging&&(P.staging=Pt(it(x.staging),t)),x.lastKnownGood!==void 0&&(P.lastKnownGood=x.lastKnownGood?Pt(it(x.lastKnownGood),t):null),x.asset&&(P.asset=Pt(it(x.asset),t)),x.sequence&&(P.sequence=Pt(it(x.sequence),t)),x.presentation&&(P.presentation=Pt(it(x.presentation),t)),x.snapshot&&(P.snapshot=it(x.snapshot)),P},F=x=>{for(l.push(x);l.length>r;)l.shift(),s+=1};return{recordSelectionDecision(x){C();let N=d;if(d+=1,!wh(x.reason,N,i))return a+=1,null;let P=A(x,N);return F(P),it(P)},records(x){return C(),O(x)},query(x){return C(),O(x)},chain(x){return C(),O({correlationId:x})},exportTrace(x){C();let N=O(x),P=k.length>0?k.filter(v=>x?.correlationId?v.correlationId===x.correlationId:!0):xh(o,N),u={schemaVersion:Po,redactedKeys:[...t],projectionWhitelist:[...n],dropped:s,sampledOut:a,records:N,inspectorRecords:it(P)};return E.revision!==void 0&&(u.snapshotRevision=E.revision),E.schemaVersion!==void 0&&(u.snapshotSchemaVersion=E.schemaVersion),E.seed&&(u.snapshotSeed=E.seed),u},importTrace(x){C();let N=typeof x=="string"?JSON.parse(x):x;if(N.schemaVersion!==Po)throw new Error("Selection trace: unsupported export schemaVersion");s=N.dropped??0,a=N.sampledOut??0,d=0,l.length=0,k=it(N.inspectorRecords??[]),E={},N.snapshotRevision!==void 0&&(E.revision=N.snapshotRevision),N.snapshotSchemaVersion!==void 0&&(E.schemaVersion=N.snapshotSchemaVersion),N.snapshotSeed&&(E.seed=N.snapshotSeed);for(let P of N.records??[]){let u=typeof P.index=="number"?P.index:d;d=Math.max(d,u+1),F(it(P))}},report(x){return C(),{schemaVersion:Po,records:O(x),dropped:s,sampledOut:a}},setSnapshotProvenance(x){C(),E={...E,...x}},reset(){C(),l.length=0,k=[],s=0,a=0,d=0,E={}},destroy(){f||(f=!0,l.length=0,k=[],E={})}}}var Ca=Hi,Nh=qi,Mh=["participant","image","canvas"],Lh="Compositor has been destroyed";function Vh(e){return Number.isFinite(e)?e<0?0:e>1?1:e:1}function Fh(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 Bh(e){return{data:new Uint8ClampedArray(e.data),width:e.width,height:e.height,colorSpace:e.colorSpace??"srgb"}}function $h(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:Bh(e.image)}}throw new Error(`createCompositor: layer "${t}" source.kind must be participant, image, or canvas`)}function ka(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=$h(e.source,e.id);return{id:e.id,order:e.order,visible:e.visible!==!1,opacity:Vh(e.opacity??1),blend:n,clip:e.clip?{...e.clip}:null,pointerEvents:r,clearPolicy:i,sourceKind:o.kind,source:o}}function gl(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 yl(e){return[...e].sort((t,n)=>t.order-n.order||t.id.localeCompare(n.id))}function Ra(e,t){return 255-Math.round((255-e)*(255-t)/255)}function Hh(e,t,n,r,i,o,s,a){let d=o/255*s;if(d<=0)return;let f=e[t],l=e[t+1],k=e[t+2],E=e[t+3]/255,C=n,O=r,h=i;a==="screen"&&(C=Ra(f,n),O=Ra(l,r),h=Ra(k,i));let A=d+E*(1-d);if(A<=0){e[t]=0,e[t+1]=0,e[t+2]=0,e[t+3]=0;return}e[t]=Math.round((C*d+f*E*(1-d))/A),e[t+1]=Math.round((O*d+l*E*(1-d))/A),e[t+2]=Math.round((h*d+k*E*(1-d))/A),e[t+3]=Math.round(A*255)}function qh(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,f=(i*t+s)*4;r[f]=e.data[d],r[f+1]=e.data[d+1],r[f+2]=e.data[d+2],r[f+3]=e.data[d+3]}}return{data:r,width:t,height:n,colorSpace:e.colorSpace??"srgb"}}function Gh(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 hl(e,t,n){return e?t>=e.x&&n>=e.y&&t<e.x+e.width&&n<e.y+e.height:!0}function bl(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 To(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 Aa(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 u of e.layers){let v=ka(u,n);if(t.has(v.id))throw new Error(`createCompositor: duplicate layer id "${v.id}"`);t.add(v.id),r.set(v.id,v)}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,f=e.offscreen!==!1,l=!e.target;if(!f&&!e.target)throw new Error("createCompositor: target canvas is required when offscreen is false");let k=e.target??document.createElement("canvas"),E=k.getContext("2d",{alpha:!0});if(!E)throw new Error("createCompositor: host canvas has no 2d context");let C=!1,O=()=>{if(C)throw new Error(Lh)},h=()=>({width:Math.max(1,Math.round(s*d)),height:Math.max(1,Math.round(a*d))}),A=()=>{let u=h();k.width!==u.width&&(k.width=u.width),k.height!==u.height&&(k.height=u.height),k.style.width=`${s}px`,k.style.height=`${a}px`},F=()=>yl([...r.values()]).map(gl),W=u=>{if(u.source.kind==="image")return u.source.image;if(u.source.kind==="canvas")try{return bl(u.source.canvas)}catch{return}try{let c=i.participant(u.id).cart.canvas;return c?(To(c,u),bl(c)):void 0}catch{return}},x=(u,v,c)=>{if(u.fill(0),n==="opaque"&&!e.host?.image&&!e.host?.color&&u.fill(0),e.host?.image){let p=qh(e.host.image,v,c);u.set(p.data);return}e.host?.color&&Gh(u,Fh(e.host.color))},N=()=>{let{width:u,height:v}=h();A();let c=E.createImageData(u,v);x(c.data,u,v);for(let p of yl([...r.values()])){if(!p.visible||p.opacity<=0)continue;let m=W(p);if(!m)continue;let I=p.clearPolicy==="transparent",T=Math.min(u,m.width),S=Math.min(v,m.height);for(let D=0;D<S;D++)for(let B=0;B<T;B++){if(!hl(p.clip,B,D))continue;let w=(D*m.width+B)*4,y=m.data[w],_=m.data[w+1],L=m.data[w+2],H=m.data[w+3];I&&y===0&&_===0&&L===0||H<=0||Hh(c.data,(D*u+B)*4,y,_,L,H,p.opacity,p.blend)}}return E.putImageData(c,0,0),c};A();for(let u of F())try{To(i.participant(u.id).cart.canvas,u)}catch{}return{get canvas(){return k},get width(){return s},get height(){return a},get dpr(){return d},compose(){return O(),N()},captureComposedFrame(){O();let u=N();return{imageData:u,pngDataUrl:k.toDataURL("image/png"),width:u.width,height:u.height,declaredOrder:F()}},resize(u,v,c){O(),s=Math.max(1,u|0),a=Math.max(1,v|0),c!==void 0&&(d=c>0?c:1);let p=h();i.resize(p.width,p.height),A()},setLayer(u,v){O();let c=r.get(u);if(!c)throw new Error(`createCompositor: unknown layer "${u}"`);let p=ka({id:u,order:v.order??c.order,visible:v.visible??c.visible,opacity:v.opacity??c.opacity,blend:v.blend??c.blend,clip:v.clip===void 0?c.clip??void 0:v.clip,pointerEvents:v.pointerEvents??c.pointerEvents,clearPolicy:v.clearPolicy??c.clearPolicy,source:v.source??c.source},n);r.set(u,p);try{To(i.participant(u).cart.canvas,p)}catch{}},addLayer(u){if(O(),r.has(u.id))throw new Error(`createCompositor: duplicate layer id "${u.id}"`);let v=ka(u,n);r.set(v.id,v);try{To(i.participant(v.id).cart.canvas,v)}catch{}},layer(u){O();let v=r.get(u);if(!v)throw new Error(`createCompositor: unknown layer "${u}"`);return gl(v)},layers(){return O(),F()},pointerTarget(u,v){O();let c=u|0,p=v|0,m=[...F()].reverse();for(let I of m){if(!I.visible||I.pointerEvents==="none"||!hl(I.clip,c,p))continue;let T=r.get(I.id);if(T&&T.source.kind!=="participant")return I.id;try{i.participant(I.id)}catch{continue}return I.id}},unmountLayer(u){if(O(),!r.has(u))throw new Error(`createCompositor: unknown layer "${u}"`);r.delete(u);try{i.detach(u)}catch{}},inspect(){O();let u=F();return{viewport:{width:s,height:a,dpr:d},clearPolicy:n,layers:u,declaredOrder:u.map(v=>v.id)}},destroy(){C||(C=!0,l&&k.parentNode&&k.remove())}}}var Kr=1,Rl=["mask","polygon","rect","depth"],Cl=["pass-through","absorb","exclusive","depth-ordered"],Kh=["hover","focus","selected"],Al=["idle","hover","focus","selected"],Wh="Semantic layer controller has been destroyed",jh=new Set(Rl),Uh=new Set(Cl),Jh=new Set(Ca);function zh(e){return typeof e=="string"&&jh.has(e)}function Ta(e){return typeof e=="string"&&Uh.has(e)}function wo(e){return typeof e=="string"&&Jh.has(e)}function xa(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 wa(e){return e.selected?"selected":e.focus?"focus":e.hover?"hover":"idle"}function _a(e){return JSON.parse(JSON.stringify(e))}function vl(){return{hover:!1,focus:!1,selected:!1}}function Pa(e,t){return{hover:t?.hover??e.hover,focus:t?.focus??e.focus,selected:t?.selected??e.selected}}function Zn(e){return _a(e)}function Gr(e){return _a(e??{})}function Sl(e,t){let n=e.visuals[t]??e.visuals.idle;return{opacity:n?.opacity??1,blend:n?.blend??e.blend,version:n?.version}}function Yh(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 Pl(e,t){return e.mask?Yh(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 Xh(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 Qh(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 El(e,t){if(!t||typeof t!="object")throw new Error(`region "${e}" geometry is required`);if(t.mask&&Qh(e,t.mask),t.polygon&&t.polygon.length>0&&t.polygon.length<3)throw new Error(`region "${e}" polygon needs 3+ points`);if(xa(t).length===0)throw new Error(`region "${e}" needs mask, polygon, rect, or depth`)}function Il(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 Al){let r=t[n];if(r&&r.blend!==void 0&&!wo(r.blend))throw new Error(`region "${e}" ${n} blend is invalid`)}}}function kl(e,t){return e instanceof Error?e.message:t}function Zh(e,t){try{return e.layer(t),!0}catch{return!1}}function Oa(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(Wh)};function a(h){let A=wa(h.state);return{id:h.declaration.id,geometryKinds:xa(h.geometry),hitTest:h.hitTest,blend:h.blend,order:h.order,depth:h.geometry.depth??0,state:{...h.state},appearance:A,a11y:h.a11y?{...h.a11y}:null,visual:Sl(h,A)}}function d(h){let A=wa(h.state),F=Sl(h,A);if(h.visualLayerId&&n&&F.version&&n.override(h.visualLayerId,F.version),h.compositorLayerId&&t){if(!Zh(t,h.compositorLayerId))return;t.setLayer(h.compositorLayerId,{opacity:F.opacity,blend:F.blend,pointerEvents:h.hitTest==="pass-through"?"none":"auto"})}}function f(h){return{geometry:Zn(h.geometry),hitTest:h.hitTest,blend:h.blend,order:h.order,compositorLayerId:h.compositorLayerId,visualLayerId:h.visualLayerId,visuals:Gr(h.visuals),state:{...h.state},a11y:h.a11y?{...h.a11y}:null}}function l(h,A){h.geometry=Zn(A.geometry),h.hitTest=A.hitTest,h.blend=A.blend,h.order=A.order,h.compositorLayerId=A.compositorLayerId,h.visualLayerId=A.visualLayerId,h.visuals=Gr(A.visuals),h.state={...A.state},h.a11y=A.a11y?{...A.a11y}:null}for(let h of e.regions){if(!h?.id)throw new Error("createSemanticLayerController: region id is required");if(o.has(h.id))throw new Error(`createSemanticLayerController: duplicate region id "${h.id}"`);if(El(h.id,h.geometry),Il(h.id,h.visuals),h.hitTest&&!Ta(h.hitTest))throw new Error(`createSemanticLayerController: region "${h.id}" hitTest is invalid`);if(h.blend&&!wo(h.blend))throw new Error(`createSemanticLayerController: region "${h.id}" blend is invalid`);let A={declaration:h,geometry:Zn(h.geometry),hitTest:h.hitTest??"absorb",blend:h.blend??"source-over",order:h.order??0,compositorLayerId:h.compositorLayerId??null,visualLayerId:h.visualLayerId??null,visuals:Gr(h.visuals),state:Pa(vl(),h.initialState),a11y:null};o.set(h.id,A),d(A)}function k(){return[...o.values()].map(a).sort((h,A)=>h.id<A.id?-1:h.id>A.id?1:0)}function E(h){let A=[...o.values()].filter(F=>F.hitTest!=="pass-through"&&Pl(F.geometry,h));return A.sort(Xh),A[0]?.hitTest==="exclusive"?A.filter(F=>F.hitTest==="exclusive"):A[0]?.hitTest==="absorb"?[A[0]]:A}function C(){let h=[...o.values()].map(A=>({id:A.declaration.id,geometry:Zn(A.geometry),hitTest:A.hitTest,blend:A.blend,order:A.order,compositorLayerId:A.compositorLayerId,visualLayerId:A.visualLayerId,visuals:Gr(A.visuals),state:{...A.state},a11y:A.a11y?{...A.a11y}:null})).sort((A,F)=>A.id<F.id?-1:A.id>F.id?1:0);return _a({schemaVersion:Kr,frame:r,regions:h})}function O(h){s();let A=[],F=p=>({ok:!1,errors:[...A,p]}),W=h;if(typeof h=="string")try{W=JSON.parse(h)}catch{return F("snapshot JSON is invalid")}if(!W||typeof W!="object"||Array.isArray(W))return F("snapshot must be an object");let x=W;if(x.schemaVersion!==Kr)return F("unsupported semantic layer snapshot schema");if(typeof x.frame!="number"||!Number.isFinite(x.frame))return F("frame must be finite");if(!Array.isArray(x.regions))return F("regions must be an array");let N=x.regions,P=new Map;for(let p of N){if(!p||typeof p.id!="string"||p.id.length===0){A.push("region id is required");continue}P.has(p.id)&&A.push(`duplicate region "${p.id}"`),P.set(p.id,p),o.has(p.id)||A.push(`unknown region "${p.id}"`),Ta(p.hitTest)||A.push(`region "${p.id}" hitTest is invalid`),wo(p.blend)||A.push(`region "${p.id}" blend is invalid`),(typeof p.order!="number"||!Number.isFinite(p.order))&&A.push(`region "${p.id}" order must be finite`);try{El(p.id,p.geometry),Il(p.id,p.visuals)}catch(m){A.push(kl(m,`region "${p.id}" is invalid`))}}for(let p of o.keys())P.has(p)||A.push(`missing region "${p}"`);if(A.length>0)return{ok:!1,errors:A};let u=r,v=new Map;for(let p of o.values())v.set(p.declaration.id,f(p));let c=()=>{r=u;for(let p of o.values()){let m=v.get(p.declaration.id);m&&l(p,m)}for(let p of o.values())d(p)};r=x.frame;for(let p of o.values()){let m=P.get(p.declaration.id);p.geometry=Zn(m.geometry),p.hitTest=m.hitTest,p.blend=m.blend,p.order=m.order,p.compositorLayerId=m.compositorLayerId??null,p.visualLayerId=m.visualLayerId??null,p.visuals=Gr(m.visuals),p.state=Pa(vl(),m.state),p.a11y=m.a11y&&typeof m.a11y.name=="string"&&typeof m.a11y.role=="string"?{name:m.a11y.name,role:m.a11y.role}:null}try{for(let p of o.values())d(p)}catch(p){return c(),F(kl(p,"visual layer apply failed"))}return{ok:!0,snapshot:C()}}return{list(){return s(),k()},inspect(){return s(),k()},inspectPublished(){return s(),k().map(h=>({id:h.id,geometryKinds:h.geometryKinds,a11y:h.a11y}))},get(h){s();let A=o.get(h);return A?a(A):void 0},geometryOf(h){s();let A=o.get(h);return A?Zn(A.geometry):void 0},setRegionState(h,A){s();let F=o.get(h);if(!F)throw new Error(`createSemanticLayerController: unknown region "${h}"`);let W={...F.state};F.state=Pa(F.state,A);try{d(F)}catch(x){throw F.state=W,x}},setRegionA11y(h,A){s();let F=o.get(h);if(!F)throw new Error(`createSemanticLayerController: unknown region "${h}"`);F.a11y=A?{name:A.name,role:A.role}:null},hitTest(h){s();let A=E(h);return A[0]?a(A[0]):void 0},hitTestAll(h){return s(),E(h).map(a)},snapshot(){return s(),C()},restore:O,destroy(){i||(i=!0,o.clear())},get frame(){return r}}}var Wr=1,wl=["layer","mask","sprite"],xl=["show","hide","replace","crossfade"],_l=":incoming",_o="visual.layer.revealed",jr="visual.layer.hidden",Oo="visual.layer.transition-started",Do="visual.layer.transition-completed",Ur="visual.layer.failed",eb=[_o,jr,Oo,Do,Ur],Ol="host.state.accepted",tb=["asset-failed","missing-source","unknown-layer","unknown-version","invalid-snapshot"],nb="Visual layer controller has been destroyed",rb=new Set(wl),ib=new Set(xl);function Dl(e){return typeof e=="string"&&rb.has(e)}function Nl(e){return typeof e=="string"&&ib.has(e)}function ob(e){return e===_o||e===jr||e===Oo||e===Do||e===Ur}function Ml(e){return`${e}${_l}`}function sb(e){return{frame:e.captureComposedFrame(),layers:e.inspect()}}function ab(e){return{data:new Uint8ClampedArray(e.data),width:e.width,height:e.height,colorSpace:e.colorSpace??"srgb"}}function er(e){return JSON.parse(JSON.stringify(e))}function xo(e){if(!(!e||typeof e!="object"||Array.isArray(e)))return e}function db(e){let t=xo(e);return typeof t?.id=="string"&&t.id.length>0?t.id:void 0}function cb(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 ft(e,t){if(t)return e.versions.find(n=>n.id===t)}function Tl(e){return e?{...e}:null}function Da(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=bt({originFrame:e.originFrame,reducedMotion:r}),s=e.sceneId??null,a=!1,d=0,f=new Map,l=new Map,k=new Map,E=new Map,C=[],O=[],h=()=>{if(a)throw new Error(nb)};function A(g){C.push(g),e.dispatch&&e.dispatch({type:g.type,kind:g.type===Ur?"diagnostic":"state",payload:g})}function F(g){O.push(g),A({type:Ur,atFrame:g.atFrame,layerId:g.layerId,version:g.version,progress:0,code:g.code})}function W(g,b){k.set(g,b)}function x(g){let b=k.get(g);if(b)return b;if(n?.get(g))return"ready";let R=n?.getProgress().items[g];return R?.state==="failed"?"failed":R?.state==="ready"?"ready":"pending"}function N(g){let b=l.get(g);if(b)return b.kind==="canvas"?{kind:"canvas",canvas:b.canvas}:{kind:"image",image:b.image}}function P(g,b){let R=ft(g.declaration,b);return R?x(R.assetId)==="ready"&&!!N(R.assetId):!1}function u(g){return g.overrideVersion&&P(g,g.overrideVersion)?g.overrideVersion:g.committedVersion}function v(g,b){let R=ft(g.declaration,b);return R?Tl(E.get(R.assetId))??Tl(R.provenance)??null:null}function c(g,b=0){return o.get(g)?.progress??b}function p(g,b,R){try{t.layer(g)}catch{t.addLayer({id:g,order:b,visible:!1,opacity:0,pointerEvents:R.pointerEvents??"none",blend:R.blend,clip:R.clip??void 0,clearPolicy:R.clearPolicy})}}function m(g){try{t.setLayer(g.incomingLayerId,{visible:!1,opacity:0})}catch{}}function I(){for(let g of f.values()){let b=u(g),R=ft(g.declaration,b),M=g.transition,q=M?c(M.cueKey):0,ne=M?.kind==="crossfade"&&M.toVersion!==null&&P(g,M.toVersion);p(g.compositorLayerId,g.order,g);let z=g.visible,ie=1;M?.kind==="hide"?(ie=1-q,q>=1&&(z=!1)):M?.kind==="show"?(z=P(g,M.toVersion),ie=z?M.durationFrames===0?1:q:0):ne&&(ie=1-q);let oe=R?N(R.assetId):void 0;if(t.setLayer(g.compositorLayerId,{order:g.order,visible:z&&!!oe,opacity:ie,blend:g.blend,clip:g.clip??void 0,pointerEvents:g.pointerEvents,clearPolicy:g.clearPolicy,source:oe}),ne&&M){let Te=ft(g.declaration,M.toVersion),ke=Te?N(Te.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:q,blend:g.blend,clip:g.clip??void 0,pointerEvents:"none",clearPolicy:g.clearPolicy,source:ke});continue}}m(g)}}function T(g){let b=u(g);return{id:g.declaration.id,kind:g.kind,visible:g.visible&&!!(b&&P(g,b)),activeVersion:b,pendingVersion:g.pendingVersion,committedVersion:g.committedVersion,opacity:t.layer(g.compositorLayerId).opacity,order:g.order,provenance:v(g,b),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 S(g,b,R){g.committedVersion=b,g.pendingVersion=null,g.transition=null,g.visible=R,I(),A({type:R?_o:jr,atFrame:o.frame,layerId:g.declaration.id,version:b,progress:1})}function D(g){g.visible=!1,g.pendingVersion=null,g.transition=null,I(),A({type:jr,atFrame:o.frame,layerId:g.declaration.id,version:g.committedVersion??void 0,progress:1})}function B(g,b,R,M){let q=g.fallback;g.transition=null,g.pendingVersion=null,q==="hide"?g.visible=!1:typeof q=="object"&&q.version&&P(g,q.version)&&(g.committedVersion=q.version,g.visible=!0),I(),F({code:M?"asset-failed":"missing-source",layerId:g.declaration.id,version:b??void 0,assetId:R,message:M?M.message:`visual layer "${g.declaration.id}" kept the prior valid frame`,atFrame:o.frame,failure:M})}function w(g){let b=g.transition;if(b?.kind==="hide")return D(g),!0;let R=g.pendingVersion??b?.toVersion??null;if(!R)return g.transition=null,!0;if(!ft(g.declaration,R))return B(g,R),!0;if(P(g,R))return S(g,R,!0),!0;let M=ft(g.declaration,R).assetId;return x(M)==="failed"?(B(g,R,M),!0):(g.transition=null,g.pendingVersion=R,I(),!1)}function y(){for(let g of f.values())if(!g.transition&&g.pendingVersion){if(P(g,g.pendingVersion))S(g,g.pendingVersion,!0);else if(x(ft(g.declaration,g.pendingVersion)?.assetId??"")==="failed"){let b=ft(g.declaration,g.pendingVersion);B(g,g.pendingVersion,b?.assetId)}}for(let g of f.values())g.overrideVersion&&P(g,g.overrideVersion)&&g.committedVersion!==g.overrideVersion&&S(g,g.overrideVersion,!0)}function _(g,b){W(g,"failed");for(let R of f.values()){let M=R.declaration.versions.find(oe=>oe.assetId===g);if(!M)continue;let q=ft(R.declaration,R.pendingVersion),ne=ft(R.declaration,R.transition?.toVersion??null),z=ft(R.declaration,R.overrideVersion);if(q?.assetId===g||ne?.assetId===g||z?.assetId===g){R.transition&&o.cancel(R.transition.cueKey),z?.assetId===g&&(R.overrideVersion=null),B(R,M.id,g,b);continue}F({code:"asset-failed",layerId:R.declaration.id,version:M.id,assetId:g,message:b?.message??`asset "${g}" failed; prior frame kept`,atFrame:o.frame,failure:b}),I()}}function L(g){for(let b of g){let R=[...f.values()].find(M=>M.transition?.cueKey===b.idempotencyKey);if(!(!R||!R.transition))if(b.type===$t)A({type:Oo,atFrame:b.atFrame,layerId:R.declaration.id,version:R.transition.toVersion??void 0,kind:R.transition.kind,progress:b.progress}),I();else if(b.type===zt){let M=R.transition.kind,q=R.transition.toVersion??void 0;w(R),A({type:Do,atFrame:b.atFrame,layerId:R.declaration.id,version:q,kind:M,progress:1})}else(b.type===Ht||b.type===Nt)&&(R.transition=null,I())}}function H(){let g=C.slice(d).map(b=>er(b));return d=C.length,g}for(let g of e.layers){if(!g?.id)throw new Error("createVisualLayerController: layer id is required");if(f.has(g.id))throw new Error(`createVisualLayerController: duplicate layer id "${g.id}"`);if(!Dl(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 b=new Set;for(let ie of g.versions){if(!ie?.id||!ie.assetId)throw new Error(`createVisualLayerController: layer "${g.id}" versions need id and assetId`);if(b.has(ie.id))throw new Error(`createVisualLayerController: layer "${g.id}" duplicate version "${ie.id}"`);b.add(ie.id),ie.provenance&&E.set(ie.assetId,{...ie.provenance})}if(g.initialVersion&&!b.has(g.initialVersion))throw new Error(`createVisualLayerController: layer "${g.id}" unknown initialVersion`);let R=g.compositorLayerId??g.id,M=g.incomingLayerId??Ml(R),q=g.order??0,ne=g.pointerEvents??(g.kind==="mask"?"none":"auto"),z={declaration:g,compositorLayerId:R,incomingLayerId:M,kind:g.kind,order:q,blend:g.blend??"source-over",clip:g.clip?{...g.clip}:null,pointerEvents:ne,clearPolicy:g.clearPolicy??"opaque",fallback:g.fallback??i,visible:!!g.initialVersion,committedVersion:g.initialVersion??null,pendingVersion:null,overrideVersion:null,transition:null};f.set(g.id,z),p(R,q,z)}I();function G(g){if(h(),!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 b=f.get(g.layerId);if(!b)return{ok:!1,reason:"invalid",detail:`unknown layer "${g.layerId}"`};if(!Nl(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&&!ft(b.declaration,g.toVersion))return{ok:!1,reason:"invalid",detail:`unknown version "${g.toVersion}"`};let R={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(R);if(!q.ok)return q;let ne=o.snapshot().events.slice(M);return b.pendingVersion=g.kind==="hide"?b.committedVersion:g.toVersion??null,b.transition={kind:g.kind,cueKey:g.idempotencyKey,fromVersion:g.fromVersion??b.committedVersion,toVersion:g.kind==="hide"?b.committedVersion:g.toVersion??null,startFrame:q.cue.startFrame,durationFrames:q.cue.durationFrames,delayFrames:q.cue.delayFrames,easing:q.cue.easing},L(ne),I(),H(),q}function ee(g){let b=xo(g),R=typeof b?.sceneId=="string"?b.sceneId:void 0;if(e.sceneId&&R&&R!==e.sceneId)return;R&&(s=R);let M=typeof b?.layerId=="string"?b.layerId:typeof b?.overlayId=="string"?b.overlayId:void 0,q=typeof b?.version=="string"?b.version:void 0;if(M&&q){G({name:`visual:${M}:replace`,idempotencyKey:`visual:${M}:accepted`,layerId:M,kind:"replace",toVersion:q,durationFrames:2});return}for(let ne of e.onAccepted??[])G({name:`visual:${ne.layerId}:${ne.kind??"replace"}`,idempotencyKey:ne.idempotencyKey??`visual:${ne.layerId}:accepted`,layerId:ne.layerId,kind:ne.kind??"replace",toVersion:ne.toVersion,durationFrames:ne.durationFrames??2,delayFrames:ne.delayFrames,easing:ne.easing})}function Y(){let g=[...f.values()].map(R=>{let M=T(R);return{id:R.declaration.id,kind:R.kind,visible:R.visible,committedVersion:R.committedVersion,pendingVersion:R.pendingVersion,activeVersion:M.activeVersion,opacity:M.opacity,order:R.order,overrideVersion:R.overrideVersion,provenance:M.provenance,fallback:R.fallback,transition:M.transition}}).sort((R,M)=>R.id<M.id?-1:R.id>M.id?1:0),b={};for(let[R,M]of[...k.entries()].sort(([q],[ne])=>q<ne?-1:q>ne?1:0))b[R]=M;return er({schemaVersion:Wr,frame:o.frame,sceneId:s,reducedMotion:r,layers:g,assets:b,events:C.map(R=>er(R)),diagnostics:O.map(R=>er(R))})}function K(g){h();let b=[],R=z=>{let ie={code:"invalid-snapshot",layerId:"",message:z,atFrame:o.frame};return{ok:!1,errors:[...b,ie]}},M=g;if(typeof g=="string")try{M=JSON.parse(g)}catch{return R("snapshot JSON is invalid")}if(!M||typeof M!="object"||Array.isArray(M))return R("snapshot must be an object");let q=M;if(q.schemaVersion!==Wr)return R("unsupported visual layer snapshot schema");if(typeof q.frame!="number"||!Number.isFinite(q.frame))return R("frame must be finite");if(!Array.isArray(q.layers))return R("layers must be an array");if(typeof q.reducedMotion=="boolean"&&(r=q.reducedMotion),o=bt({originFrame:q.frame,reducedMotion:!1}),s=typeof q.sceneId=="string"||q.sceneId===null?q.sceneId:s,C.length=0,O.length=0,d=0,Array.isArray(q.events)&&(C.push(...q.events.map(z=>er(z))),d=C.length),Array.isArray(q.diagnostics)&&O.push(...q.diagnostics.map(z=>er(z))),k.clear(),q.assets&&typeof q.assets=="object")for(let[z,ie]of Object.entries(q.assets))(ie==="ready"||ie==="failed"||ie==="pending")&&k.set(z,ie);let ne=new Map(q.layers.map(z=>[z.id,z]));for(let z of f.values()){let ie=ne.get(z.declaration.id);ie&&(z.visible=!!ie.visible,z.committedVersion=ie.committedVersion??null,z.pendingVersion=ie.pendingVersion??null,z.overrideVersion=ie.overrideVersion??null,z.transition=null,ie.transition&&o.play({name:`visual:${z.declaration.id}:${ie.transition.kind}`,idempotencyKey:ie.transition.cueKey,startFrame:ie.transition.startFrame,durationFrames:ie.transition.durationFrames,delayFrames:ie.transition.delayFrames,easing:ie.transition.easing,onDuplicate:"replace"}).ok&&(z.transition={kind:ie.transition.kind,cueKey:ie.transition.cueKey,fromVersion:ie.transition.fromVersion,toVersion:ie.transition.toVersion,startFrame:ie.transition.startFrame,durationFrames:ie.transition.durationFrames,delayFrames:ie.transition.delayFrames,easing:ie.transition.easing}))}return I(),o.setReducedMotion(r),{ok:!0,snapshot:Y()}}return{registerSource(g,b){if(h(),typeof g!="string"||g.length===0)throw new Error("createVisualLayerController: assetId is required");if(b instanceof HTMLCanvasElement)l.set(g,{kind:"canvas",canvas:b});else if(b&&"data"in b&&"width"in b)l.set(g,{kind:"image",image:ab(b)});else throw new Error("createVisualLayerController: source must be ImageData or canvas");y(),I()},handleHostEvent(g){if(h(),!g||typeof g!="object")return;if(g.type===Ol){ee(g.payload);return}let b=db(g.payload);if(b){if(g.type===ze){W(b,"ready");let M=xo(g.payload)?.resource;if(M&&typeof M=="object"&&"provenance"in M){let q=M.provenance;q&&E.set(b,{...q})}y(),I();return}if(g.type===je){let R=xo(g.payload);_(b,cb(R?.failure))}}},override(g,b){h();let R=f.get(g);if(!R)throw new Error(`createVisualLayerController: unknown layer "${g}"`);if(b===null){R.overrideVersion=null,I();return}if(!ft(R.declaration,b))throw new Error(`createVisualLayerController: unknown version "${b}" on "${g}"`);if(R.overrideVersion=b,P(R,b)){R.transition&&o.cancel(R.transition.cueKey),S(R,b,!0);return}I()},play:G,setReducedMotion(g){h(),r=!!g,o.setReducedMotion(r)},step(g=1){h();let b=o.step(g);return L(b),y(),I(),H()},snapshot(){return h(),Y()},restore:K,inspect(){return h(),I(),[...f.values()].map(T).sort((g,b)=>g.id<b.id?-1:g.id>b.id?1:0)},captureComposedFrame(){return h(),I(),t.captureComposedFrame()},destroy(){a||(a=!0,o.reset(),C.length=0,O.length=0)},get frame(){return o.frame},get sceneId(){return s},get compositor(){return t},get reducedMotion(){return r}}}var Jr=1,No="presentation.sequence.state.requested",Mo="presentation.sequence.state.preloading",Lo="presentation.sequence.state.ready",Vo="presentation.sequence.state.started",Fo="presentation.sequence.state.step-started",Bo="presentation.sequence.state.step-completed",$o="presentation.sequence.state.skipped",Ho="presentation.sequence.state.interrupted",Ma="presentation.sequence.state.failed",qo="presentation.sequence.state.completed",La="presentation.sequence.diagnostic.lifecycle",Vl=[No,Mo,Lo,Vo,Fo,Bo,$o,Ho,Ma,qo,La],Fl=["audio","caption","semantic-region","visual-layer","cue"],Bl=["replace","queue","reject","ignore"],$l=["duration","immediate"],Hl=["unavailable","failed","unauthorized","muted"],ql=["requested","preloading","ready","playing","paused","skipped","interrupted","failed","completed"],ub=new Set(Fl),lb=new Set(Bl),pb=new Set($l),fb=new Set(Hl),mb=new Set(Vl),gb="Presentation sequence player has been destroyed";function ae(e,t,n){return n?{code:e,detail:t,path:n}:{code:e,detail:t}}function qe(e){return JSON.parse(JSON.stringify(e))}function Ge(e){return!!e&&typeof e=="object"&&!Array.isArray(e)}function Oe(e){return typeof e=="string"&&e.length>0}function Na(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)=>Na(r,`${t}[${i}]`,n));return}if(Ge(e))for(let[r,i]of Object.entries(e))Na(i,t?`${t}.${r}`:r,n)}function tr(e){return typeof e=="number"&&Number.isFinite(e)&&e>=0}function Tt(){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 wt(e){if(!e.ok)throw new Error(e.errors.map(t=>t.detail).join("; "));return e.contract}function yb(){return[wt(ce(No,Tt())),wt(ce(Mo,Tt())),wt(ce(Lo,Tt())),wt(ce(Vo,Tt())),wt(ce(Fo,Tt())),wt(ce(Bo,Tt())),wt(ce($o,Tt())),wt(ce(Ho,Tt())),wt(ce(Ma,Tt())),wt(ce(qo,Tt())),wt(Xe(La,Tt()))]}function Gl(e){return typeof e=="string"&&mb.has(e)}function hb(e){if(e)return"timeline"in e?e.timeline:e}function bb(e,t,n){return n?!t||t==="skip"||t==="complete"?0:t.durationFrames:e}function vb(e,t){return(e.kind==="relative"||e.kind==="simultaneous"?e.delayFrames??0:0)+t}function Sb(e,t,n){if(!Ge(e)||!Oe(e.kind)){n.push(ae("invalid-timing","timing.kind is required",t));return}if(e.kind==="absolute"){tr(e.atFrame)||n.push(ae("invalid-timing","timing.atFrame must be >= 0",t));return}if(e.kind==="relative"){e.afterStepId!==void 0&&!Oe(e.afterStepId)&&n.push(ae("invalid-timing","timing.afterStepId must be a string",t)),e.delayFrames!==void 0&&!tr(e.delayFrames)&&n.push(ae("invalid-timing","timing.delayFrames must be >= 0",t));return}if(e.kind==="simultaneous"){Oe(e.withStepId)||n.push(ae("invalid-timing","timing.withStepId is required",t)),e.order!==void 0&&!tr(e.order)&&n.push(ae("invalid-timing","timing.order must be >= 0",t)),e.delayFrames!==void 0&&!tr(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 Eb(e,t,n,r){if(!Ge(e)||!Oe(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"&&!Oe(e.assetBinding)&&r.push(ae("invalid-effect","assetBinding is required",n)),e.kind==="caption"&&(Oe(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"&&(Oe(e.regionBinding)||r.push(ae("invalid-effect","regionBinding is required",n)),Ge(e.state)||r.push(ae("invalid-effect","state is required",n))),e.kind==="visual-layer"&&(Oe(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"&&!Oe(e.name)&&r.push(ae("invalid-effect","cue name is required",n))}function Ib(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 zr(e){let t=[];if(Na(e,"",t),!Ge(e))return{ok:!1,errors:[ae("invalid-definition","sequence must be a JSON object")]};if(Oe(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";lb.has(String(n))||t.push(ae("invalid-policy","unsupported interruptionPolicy","interruptionPolicy"));let r=new Set,i=new Set,o=[];e.tracks.forEach((l,k)=>{let E=`tracks[${k}]`;if(!Ge(l)){t.push(ae("invalid-track","track must be an object",E));return}if(!Oe(l.id)){t.push(ae("invalid-track","track id is required",`${E}.id`));return}if(i.has(l.id)&&t.push(ae("duplicate-track",`duplicate track id "${l.id}"`,E)),i.add(l.id),!ub.has(String(l.kind))){t.push(ae("invalid-kind","unsupported track kind",`${E}.kind`));return}if(!Array.isArray(l.steps)||l.steps.length===0){t.push(ae("invalid-steps","track steps are required",`${E}.steps`));return}let C=[];l.steps.forEach((O,h)=>{let A=`${E}.steps[${h}]`;if(!Ge(O)){t.push(ae("invalid-step","step must be an object",A));return}if(!Oe(O.id)){t.push(ae("invalid-step","step id is required",`${A}.id`));return}r.has(O.id)&&t.push(ae("duplicate-step",`duplicate step id "${O.id}"`,A)),r.add(O.id),tr(O.durationFrames)||t.push(ae("invalid-duration","durationFrames must be >= 0",`${A}.durationFrames`)),O.delayFrames!==void 0&&!tr(O.delayFrames)&&t.push(ae("invalid-delay","delayFrames must be >= 0",`${A}.delayFrames`)),O.completion!==void 0&&!pb.has(String(O.completion))&&t.push(ae("invalid-completion","unsupported completion rule",`${A}.completion`)),Sb(O.timing,`${A}.timing`,t),Eb(O.effect,String(l.kind),`${A}.effect`,t),C.push(qe(O))}),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,k)=>{let E=`fallbacks[${k}]`;if(!Ge(l)||!Oe(l.id)){t.push(ae("invalid-fallback","fallback id is required",E));return}a.has(l.id)&&t.push(ae("duplicate-fallback",`duplicate fallback id "${l.id}"`,E)),a.add(l.id);let C=l.when;if((!Ge(C)||C.capability!=="audio"||!fb.has(String(C.status)))&&t.push(ae("invalid-fallback","unsupported fallback.when",`${E}.when`)),l.omitTrackIds!==void 0)if(!Array.isArray(l.omitTrackIds))t.push(ae("invalid-fallback","omitTrackIds must be an array",E));else for(let O of l.omitTrackIds)i.has(String(O))||t.push(ae("unknown-track",`omitTrackIds references unknown track "${String(O)}"`,E));s.push(qe(l))}):t.push(ae("invalid-fallbacks","fallbacks must be an array","fallbacks")));let d={id:String(e.id??""),tracks:o,interruptionPolicy:n,fallbacks:s},f=Ib(d);for(let{step:l}of f.values())l.timing.kind==="relative"&&l.timing.afterStepId&&(f.has(l.timing.afterStepId)||t.push(ae("unknown-step",`afterStepId "${l.timing.afterStepId}" does not exist`,`steps.${l.id}`))),l.timing.kind==="simultaneous"&&!f.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:qe(d)}}function Ll(e,t,n,r){let i=[];for(let l of e.tracks)if(!t.has(l.id))for(let k of l.steps)i.push({track:l,step:k});let o=new Map(i.map(l=>[l.step.id,l])),s=new Map,a=new Set;function d(l){let k=s.get(l);if(k!==void 0)return k;let E=o.get(l);if(!E||a.has(l))return n;a.add(l);let C=vb(E.step.timing,E.step.delayFrames??0),O=n+C;if(E.step.timing.kind==="absolute")O=n+E.step.timing.atFrame+(E.step.delayFrames??0);else if(E.step.timing.kind==="relative"&&E.step.timing.afterStepId){let h=o.get(E.step.timing.afterStepId);if(h){let A=d(h.step.id),F=f(h.step);O=A+F+C}}else E.step.timing.kind==="simultaneous"&&(O=d(E.step.timing.withStepId)+C);return a.delete(l),s.set(l,O),O}function f(l){return l.completion==="immediate"?0:bb(l.durationFrames,l.reducedMotion,r)}return i.map(({track:l,step:k})=>{let E=d(k.id),C=f(k),O=k.timing.kind==="simultaneous"?k.timing.order??0:0;return{id:k.id,trackId:l.id,trackKind:l.kind,order:O,startFrame:E,durationFrames:C,endFrame:E+C,effect:qe(k.effect),restoreOnComplete:k.restoreOnComplete===!0,reducedSensory:k.reducedSensory??"keep"}}).sort(Kl)}function Kl(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 en(e,t){if(!t)return;let n=e?.[t];return Oe(n)?n:void 0}function kb(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===un)return i.reason??"asset-failed"}}function Rb(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=en(n.assets,a.effect.assetBinding);if(!d)continue;let f=en(n.channels,a.effect.channelBinding);if(o&&!o.isAuthorized(f)&&o.inspect().authorized.length>0)return"unauthorized";if(o?.assetStatus(d)==="failed")return"failed"}return"ok"}function Va(e={}){let t=e.originFrame??0,n=!!e.reducedMotion,r=!!e.reducedSensory,i=e.semantic,o=e.visual,s=hb(e.audio),a=e.audio,d=new Map,f=bt({originFrame:t,reducedMotion:n}),l=t,k=!1,E=!1,C=null,O=null,h=[],A=new Map,F=[],W=new Map;for(let b of e.sequences??[]){let R=zr(b);R.ok&&d.set(R.sequence.id,R.sequence)}function x(){if(E)throw new Error(gb)}function N(b){F.push(qe(b))}function P(b,R,M){let q={type:R,atFrame:l,sequenceId:b.sequenceId,invocationId:b.invocationId,idempotencyKey:b.idempotencyKey};M?.stepId&&(q.stepId=M.stepId),b.selectedFallbackId&&(q.fallbackId=b.selectedFallbackId),M?.reason&&(q.reason=M.reason),N(q)}function u(b){let R=[...b.steps.values()].filter(q=>q.phase==="completed").map(q=>q.resolved.id).sort(),M=[...b.steps.values()].filter(q=>q.phase==="active").map(q=>q.resolved.id).sort();return{sequenceId:b.sequenceId,invocationId:b.invocationId,idempotencyKey:b.idempotencyKey,phase:b.phase,playhead:Math.max(0,l-b.startedAtFrame),startedAtFrame:b.startedAtFrame,completedStepIds:R,activeStepIds:M,selectedFallbackId:b.selectedFallbackId,compiledReducedMotion:b.compiledReducedMotion}}function v(b,R){return Kl(b.resolved,R.resolved)}function c(b,R){return`${b.invocationId}:${R}`}function p(b,R){return`${b.invocationId}:${R}`}function m(b){if(b.audioKey&&s?.cancel(b.audioKey),b.captionId){let R=A.get(b.captionId);R&&A.set(b.captionId,{...R,visible:!1})}if(b.regionId&&b.regionKeys&&i){let R={};for(let M of b.regionKeys)R[M]=!1;i.setRegionState(b.regionId,R)}b.visualLayerId&&o&&b.visualTransition==="hide"?o.play({name:`sequence:${b.visualLayerId}:restore`,idempotencyKey:`sequence:${b.visualLayerId}:restore:${l}`,layerId:b.visualLayerId,kind:"show",toVersion:b.visualVersion,durationFrames:0,onDuplicate:"replace"}):b.visualLayerId&&o&&b.visualTransition==="show"&&o.play({name:`sequence:${b.visualLayerId}:restore`,idempotencyKey:`sequence:${b.visualLayerId}:restore:${l}`,layerId:b.visualLayerId,kind:"hide",durationFrames:0,onDuplicate:"replace"}),b.cueKey&&f.cancel(b.cueKey)}function I(b,R){let{resolved:M}=R,q={},ne=r||M.reducedSensory==="skip-audio"||M.reducedSensory==="complete";if(M.effect.kind==="audio"){let z=en(b.bindings.assets,M.effect.assetBinding);if(z&&s&&!ne){let ie=p(b,M.id);s.play({name:M.id,idempotencyKey:ie,assetId:z,channelId:en(b.bindings.channels,M.effect.channelBinding),durationFrames:M.durationFrames,onDuplicate:"replace"}),q.audioKey=ie,kb(s,ie)&&(R.applied=q,S(b,"failed"),s.cancel(ie),q.audioKey=void 0)}}else if(M.effect.kind==="caption"){let z=en(b.bindings.captions,M.effect.textBinding)??"",ie=c(b,M.effect.textBinding);A.set(ie,{id:ie,text:z,visible:M.effect.visible}),q.captionId=ie}else if(M.effect.kind==="semantic-region"){let z=en(b.bindings.regions,M.effect.regionBinding);z&&i&&(i.setRegionState(z,M.effect.state),q.regionId=z,q.regionKeys=["hover","focus","selected"].filter(ie=>M.effect.kind==="semantic-region"&&M.effect.state[ie]!==void 0))}else if(M.effect.kind==="visual-layer"){let z=en(b.bindings.layers,M.effect.layerBinding),ie=en(b.bindings.versions,M.effect.versionBinding);z&&o&&(o.play({name:`sequence:${M.id}`,idempotencyKey:p(b,M.id),layerId:z,kind:M.effect.transition,toVersion:M.effect.transition==="hide"?void 0:ie,durationFrames:M.durationFrames,onDuplicate:"replace"}),q.visualLayerId=z,q.visualVersion=ie??o.inspect().find(oe=>oe.id===z)?.committedVersion??void 0,q.visualTransition=M.effect.transition)}else if(M.effect.kind==="cue"){let z=p(b,M.id);f.play({name:M.effect.name,idempotencyKey:z,durationFrames:M.durationFrames,easing:M.effect.easing,onDuplicate:"replace"}),q.cueKey=z}R.applied=q}function T(b,R,M){if(R.phase==="active"){if(M){R.applied&&m(R.applied),R.phase="skipped";return}R.resolved.restoreOnComplete&&R.applied?m(R.applied):R.applied?.audioKey&&R.resolved.effect.kind,R.phase="completed",P(b,Bo,{stepId:R.resolved.id})}}function S(b,R){let M=d.get(b.sequenceId);if(!M)return!1;let q=(M.fallbacks??[]).find(z=>z.when.capability==="audio"&&z.when.status===R);if(!q)return!1;if(b.selectedFallbackId===q.id)return!0;b.selectedFallbackId=q.id;let ne=new Set(q.omitTrackIds??[]);for(let z of b.steps.values())ne.has(z.resolved.trackId)&&(z.phase==="pending"?z.phase="skipped":z.phase==="active"&&T(b,z,!0));return!0}function D(b){let R=[...b.steps.values()].filter(M=>M.phase==="pending"&&M.resolved.startFrame<=l).sort(v);for(let M of R)M.phase="active",P(b,Fo,{stepId:M.resolved.id}),I(b,M),M.resolved.durationFrames===0&&M.phase==="active"&&T(b,M,!1)}function B(b){let R=[...b.steps.values()].filter(M=>M.phase==="active"&&l>=M.resolved.endFrame).sort(v);for(let M of R)T(b,M,!1)}function w(b){return b.phase==="playing"||b.phase==="paused"||b.phase==="ready"||b.phase==="preloading"||b.phase==="requested"}function y(b){!w(b)||[...b.steps.values()].some(M=>M.phase==="pending"||M.phase==="active")||(b.phase="completed",b.nextAvailable=!0,P(b,qo),C===b&&(C=null,k=!1),ee())}function _(b,R){for(let M of[...b.steps.values()].sort(v))M.phase==="active"?T(b,M,!0):M.phase==="pending"&&(M.phase="skipped")}function L(b,R,M,q,ne=l,z=n){let ie=Ll(b,q,ne,z),oe=new Map;for(let Te of ie)oe.set(Te.id,{resolved:Te,phase:"pending",applied:null});return{sequenceId:b.id,invocationId:R.invocationId,idempotencyKey:R.idempotencyKey??R.invocationId,bindings:qe(R.bindings??{}),interruptionPolicy:b.interruptionPolicy??"replace",selectedFallbackId:M,phase:"requested",startedAtFrame:l,steps:oe,nextAvailable:!1,compiledReducedMotion:z}}function H(b,R){if(!Oe(R.invocationId))return{ok:!1,reason:"invalid",detail:"invocationId is required"};let M=R.idempotencyKey??R.invocationId;if(W.get(M)&&C&&C.idempotencyKey===M)return{ok:!0,invocation:u(C)};let ne=R.bindings??{};N({type:No,atFrame:l,sequenceId:b.id,invocationId:R.invocationId,idempotencyKey:M});let z={sequenceId:b.id,invocationId:R.invocationId,idempotencyKey:M,bindings:qe(ne),interruptionPolicy:b.interruptionPolicy??"replace",selectedFallbackId:null,phase:"preloading",startedAtFrame:l,steps:new Map,nextAvailable:!1,compiledReducedMotion:n};P(z,Mo);let oe=Rb(s,b,ne,a),Te=null,ke=new Set;if(oe!=="ok"){let De=(b.fallbacks??[]).find(V=>V.when.capability==="audio"&&V.when.status===oe);if(De){Te=De.id;for(let V of De.omitTrackIds??[])ke.add(V)}else if(oe==="unavailable"||oe==="failed")for(let V of b.tracks)V.kind==="audio"&&ke.add(V.id)}if(r)for(let De of b.tracks)De.kind==="audio"&&ke.add(De.id);let xe=L(b,{...R,idempotencyKey:M},Te,ke);return xe.phase="ready",P(xe,Lo),xe.phase="playing",P(xe,Vo),C=xe,O={sequenceId:b.id,options:{...R,idempotencyKey:M}},W.set(M,xe.invocationId),B(xe),D(xe),y(xe),{ok:!0,invocation:u(xe)}}function G(b){if(!C||!w(C))return;let R=C;_(R,!0),R.phase="interrupted",R.nextAvailable=!0,P(R,Ho,{reason:b}),C=null,k=!1}function ee(){if(C||k)return;let b=h.shift();if(!b)return;let R=d.get(b.sequenceId);R&&H(R,b.options)}function Y(b,R){let M=new Set;if(R){let q=(b.fallbacks??[]).find(ne=>ne.id===R);for(let ne of q?.omitTrackIds??[])M.add(ne)}return Ll(b,M,t,n).map(q=>({sequenceId:b.id,stepId:q.id,trackId:q.trackId,kind:q.trackKind,startFrame:q.startFrame,durationFrames:q.durationFrames,order:q.order,effect:qe(q.effect)}))}function K(){return qe({schemaVersion:Jr,frame:l,reducedMotion:n,reducedSensory:r,paused:k,active:C?u(C):null,queue:h.map(b=>({sequenceId:b.sequenceId,invocationId:b.options.invocationId,idempotencyKey:b.options.idempotencyKey??b.options.invocationId,bindings:qe(b.options.bindings??{})})),captions:[...A.values()].sort((b,R)=>b.id<R.id?-1:1),events:F.map(b=>qe(b)),bindings:C?qe(C.bindings):null})}function g(b){for(let R of[...b.steps.values()].sort(v)){if(R.phase!=="active")continue;let M=Math.max(0,R.resolved.endFrame-l);R.resolved={...R.resolved,durationFrames:M,endFrame:l+M},I(b,R)}}return{define(b){x();let R=zr(b);return R.ok&&d.set(R.sequence.id,R.sequence),R},playSequence(b,R){x();let M=d.get(b);if(!M)return{ok:!1,reason:"unknown-sequence",detail:`unknown sequence "${b}"`};let q=R.idempotencyKey??R.invocationId;if(C&&w(C)&&C.idempotencyKey===q)return{ok:!0,invocation:u(C)};if(C&&w(C)){let ne=C.interruptionPolicy;if(ne==="reject")return{ok:!1,reason:"busy",detail:"sequence is already playing"};if(ne==="ignore")return{ok:!0,invocation:u(C)};if(ne==="queue")return h.push({sequenceId:b,options:{...R,idempotencyKey:q}}),{ok:!0,invocation:{sequenceId:b,invocationId:R.invocationId,idempotencyKey:q,phase:"requested",playhead:0,startedAtFrame:l,completedStepIds:[],activeStepIds:[],selectedFallbackId:null,compiledReducedMotion:n}};G("replace")}return H(M,{...R,idempotencyKey:q})},skip(b){if(x(),!C||!w(C)||b&&C.invocationId!==b)return!1;let R=C;return _(R,!0),R.phase="skipped",R.nextAvailable=!0,P(R,$o),C=null,k=!1,ee(),!0},replay(b){x();let R=C&&w(C)?C:null,M=R?{sequenceId:R.sequenceId,options:{invocationId:R.invocationId,idempotencyKey:R.idempotencyKey,bindings:qe(R.bindings)}}:O;if(!M)return{ok:!1,reason:"invalid",detail:"no sequence to replay"};if(b&&M.options.invocationId!==b)return{ok:!1,reason:"invalid",detail:"unknown invocation"};let q=d.get(M.sequenceId);return q?(W.delete(M.options.idempotencyKey??M.options.invocationId),R&&(_(R,!0),C=null,k=!1),H(q,M.options)):{ok:!1,reason:"unknown-sequence",detail:`unknown sequence "${M.sequenceId}"`}},pause(){return x(),!C||C.phase!=="playing"?!1:(k=!0,C.phase="paused",!0)},resume(){return x(),!C||C.phase!=="paused"?!1:(k=!1,C.phase="playing",!0)},cancel(b){return x(),!C||!w(C)||b&&C.invocationId!==b?!1:(G("cancel"),ee(),!0)},step(b=1){x();let R=Number.isFinite(b)?Math.max(0,Math.floor(b)):0,M=F.length;if(k)return[];for(let q=0;q<R;q++)l+=1,f.step(1),s?.step(1),o?.step(1),C&&w(C)?(B(C),D(C),y(C)):ee();return F.slice(M).map(q=>qe(q))},snapshot(){return x(),K()},restore(b){x();let R={frame:l,paused:k,active:C,queue:h.slice(),captions:new Map(A),events:F.slice(),seenKeys:new Map(W),presentation:f,reducedMotion:n,reducedSensory:r},M=oe=>{l=R.frame,k=R.paused,C=R.active,h.length=0,h.push(...R.queue),A.clear();for(let[Te,ke]of R.captions)A.set(Te,ke);F.length=0,F.push(...R.events),W.clear();for(let[Te,ke]of R.seenKeys)W.set(Te,ke);return f=R.presentation,n=R.reducedMotion,r=R.reducedSensory,{ok:!1,errors:oe}},q=b;if(typeof b=="string")try{q=JSON.parse(b)}catch{return M([ae("invalid-json","snapshot JSON is invalid")])}if(!Ge(q))return M([ae("invalid-snapshot","snapshot must be a JSON object")]);let ne=[];q.schemaVersion!==Jr&&ne.push(ae("unsupported-schema","unsupported presentation sequence snapshot schema")),(typeof q.frame!="number"||!Number.isFinite(q.frame))&&ne.push(ae("invalid-snapshot","frame must be finite","frame"));let z=q.active;if(z!=null&&(!Ge(z)||!Oe(z.sequenceId)?ne.push(ae("invalid-snapshot","active.sequenceId is required","active")):d.has(z.sequenceId)||ne.push(ae("unknown-sequence",`unknown sequence "${z.sequenceId}"`,"active.sequenceId"))),q.queue!==void 0&&(Array.isArray(q.queue)?q.queue.forEach((oe,Te)=>{let ke=`queue[${Te}]`;if(!Ge(oe)||!Oe(oe.sequenceId)){ne.push(ae("invalid-snapshot","queue item sequenceId is required",ke));return}d.has(oe.sequenceId)||ne.push(ae("unknown-sequence",`unknown sequence "${oe.sequenceId}"`,ke)),Oe(oe.invocationId)||ne.push(ae("invalid-snapshot","queue item invocationId is required",ke))}):ne.push(ae("invalid-snapshot","queue must be an array","queue"))),ne.length>0)return M(ne);let ie=q.frame;if(typeof ie!="number"||!Number.isFinite(ie))return M([ae("invalid-snapshot","frame must be finite","frame")]);try{if(C&&w(C)&&_(C,!0),A.clear(),h.length=0,F.length=0,W.clear(),k=q.paused===!0,l=ie,typeof q.reducedMotion=="boolean"&&(n=q.reducedMotion),typeof q.reducedSensory=="boolean"&&(r=q.reducedSensory),f=bt({originFrame:l,reducedMotion:!1}),Array.isArray(q.events))for(let oe of q.events)Ge(oe)&&Gl(oe.type)&&F.push(qe(oe));if(Array.isArray(q.captions))for(let oe of q.captions)Ge(oe)&&Oe(oe.id)&&A.set(oe.id,{id:oe.id,text:typeof oe.text=="string"?oe.text:"",visible:oe.visible===!0});if(Array.isArray(q.queue))for(let oe of q.queue)!Ge(oe)||!Oe(oe.sequenceId)||!Oe(oe.invocationId)||d.has(oe.sequenceId)&&h.push({sequenceId:oe.sequenceId,options:{invocationId:oe.invocationId,idempotencyKey:Oe(oe.idempotencyKey)?oe.idempotencyKey:oe.invocationId,bindings:Ge(oe.bindings)?qe(oe.bindings):{}}});if(C=null,Ge(z)&&Oe(z.sequenceId)){let oe=d.get(z.sequenceId),Te=typeof z.compiledReducedMotion=="boolean"?z.compiledReducedMotion:n,ke=ql.includes(z.phase)?z.phase:"playing";if(ke==="skipped"||ke==="completed"||ke==="interrupted"||ke==="failed"){let xe=typeof z.startedAtFrame=="number"?z.startedAtFrame:t,De=L(oe,{invocationId:String(z.invocationId),idempotencyKey:String(z.idempotencyKey??z.invocationId),bindings:Ge(q.bindings)?qe(q.bindings):{}},Oe(z.selectedFallbackId)?z.selectedFallbackId:null,new Set(ke==="skipped"?oe.tracks.map(V=>V.id):[]),xe,Te);De.phase=ke,De.startedAtFrame=xe;for(let V of De.steps.values())V.phase="skipped";De.nextAvailable=!0,C=null,W.set(De.idempotencyKey,De.invocationId)}else{let xe=new Set,De=Oe(z.selectedFallbackId)?z.selectedFallbackId:null;if(De){let U=(oe.fallbacks??[]).find(Z=>Z.id===De);for(let Z of U?.omitTrackIds??[])xe.add(Z)}let V=L(oe,{invocationId:String(z.invocationId),idempotencyKey:String(z.idempotencyKey??z.invocationId),bindings:Ge(q.bindings)?qe(q.bindings):{}},De,xe,typeof z.startedAtFrame=="number"?z.startedAtFrame:t,Te);V.phase=k?"paused":"playing",V.startedAtFrame=typeof z.startedAtFrame=="number"?z.startedAtFrame:t;let J=new Set(Array.isArray(z.completedStepIds)?z.completedStepIds.filter(U=>typeof U=="string"):[]),re=new Set(Array.isArray(z.activeStepIds)?z.activeStepIds.filter(U=>typeof U=="string"):[]);for(let U of V.steps.values())J.has(U.resolved.id)?U.phase="completed":re.has(U.resolved.id)||U.resolved.startFrame<=l?U.resolved.endFrame<=l?U.phase="completed":U.phase="active":U.phase="pending";C=V,W.set(V.idempotencyKey,V.invocationId),g(V)}}return f.setReducedMotion(n),{ok:!0,snapshot:K()}}catch(oe){return M([ae("restore-failed",oe instanceof Error?oe.message:String(oe))])}},inspect(){x();let b=C?d.get(C.sequenceId):void 0;return{frame:l,paused:k,reducedMotion:n,reducedSensory:r,active:C?u(C):null,queue:h.map(R=>({sequenceId:R.sequenceId,invocationId:R.options.invocationId,idempotencyKey:R.options.idempotencyKey??R.options.invocationId,phase:"requested",playhead:0,startedAtFrame:l,completedStepIds:[],activeStepIds:[],selectedFallbackId:null,compiledReducedMotion:n})),captions:[...A.values()].sort((R,M)=>R.id<M.id?-1:1),cueIntent:b?Y(b,C?.selectedFallbackId??void 0):[]}},inspectCueIntent(b,R){x();let M=d.get(b);return M?Y(M,R?.fallbackId):[]},get(b){x();let R=d.get(b);return R?qe(R):void 0},destroy(){E||(C&&w(C)&&_(C,!0),E=!0,C=null,h.length=0,A.clear(),F.length=0)},setReducedMotion(b){x(),n=!!b,f.setReducedMotion(n)},get frame(){return l},get reducedMotion(){return n},get reducedSensory(){return r}}}var Yr=1,Go=1,Uo="presentation.binding.state.applied",Xr="presentation.binding.state.rejected",Qr="presentation.binding.diagnostic.lifecycle",Jl=[Uo,Xr,Qr],zl=["visual-layer","presence","prop","semantic-region","hotspot","sequence","asset"],Yl=["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"],Cb=new Set(zl),Ab=new Set(Jl),Pb=new Set(Yl),Tb="Presentation binding runtime has been destroyed",$a=/^[A-Za-z_][A-Za-z0-9_]*(\.[A-Za-z_][A-Za-z0-9_]*)*$/,wb=new Set(["show","hide","replace"]),xb=new Set(["id","schemaVersion","bindings","defaults","resources"]),_b=new Set(["id","priority","when","targets"]),Ob=new Set(["layers","versions","regions","sequences","hotspots","entities","props","assets"]),Db=new Set(["labels","reducedSensory","reducedMotion"]);function te(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 Me(e){return typeof e=="string"&&e.length>0}function Ke(e){return JSON.parse(JSON.stringify(e))}function jo(e,t,n){if(typeof e=="function"){n.push(te("callbacks-forbidden","authored bindings must not contain callbacks",t));return}if(Array.isArray(e)){e.forEach((r,i)=>jo(r,`${t}[${i}]`,n));return}if(at(e))for(let[r,i]of Object.entries(e))jo(i,t?`${t}.${r}`:r,n)}function Qe(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 Wl(e){return e===null||typeof e=="string"||typeof e=="number"&&Number.isFinite(e)||typeof e=="boolean"}function Fa(){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 Ba(e){if(!e.ok)throw new Error(e.errors.map(t=>t.detail).join("; "));return e.contract}function Nb(e){return typeof e=="string"&&Ab.has(e)}function Mb(e){return typeof e=="string"&&Pb.has(e)}function Lb(){return[Ba(ce(Uo,Fa())),Ba(ce(Xr,Fa())),Ba(Xe(Qr,Fa()))]}function qt(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 Vb(e){if(e==null)return"missing";if(!at(e))return"invalid";let t=[];if(jo(e,"",t),t.length>0)return"invalid";try{return Ke(e)}catch{return"invalid"}}function Fb(e,t){if(!$a.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 Bb(e,t){if(!Object.prototype.hasOwnProperty.call(e,t))return;let n=e[t];return typeof n=="function"?n:void 0}function Ko(e,t,n){if("all"in e){for(let i of e.all){let o=Ko(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=Ko(o,t,n);if(s.ok)return s;i=s}return i}if("not"in e){let i=Ko(e.not,t,n);return{ok:!i.ok,detail:i.ok?"negation failed":void 0}}if("selector"in e){let i=Bb(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=Fb(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 Wo(e,t,n){if(!at(e)){n.push(te("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(te("invalid-predicate","all requires a non-empty array",`${t}.all`));return}return{all:e.all.map((a,d)=>Wo(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(te("invalid-predicate","any requires a non-empty array",`${t}.any`));return}return{any:e.any.map((a,d)=>Wo(a,`${t}.any[${d}]`,n)).filter(a=>!!a)}}Qe(e,new Set(["not"]),t,n);let o=Wo(e.not,`${t}.not`,n);return o?{not:o}:void 0}if("selector"in e){if(Qe(e,new Set(["selector"]),t,n),!Me(e.selector)){n.push(te("invalid-predicate","selector is required",`${t}.selector`));return}return{selector:e.selector}}if(Qe(e,new Set(["path","eq","neq","present"]),t,n),(!Me(e.path)||!$a.test(e.path))&&n.push(te("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(te("invalid-predicate","predicate needs exactly one of eq, neq, or present",t));return}if(!(!Me(e.path)||!$a.test(e.path))){if(e.present!==void 0){if(typeof e.present!="boolean"){n.push(te("invalid-predicate","present must be a boolean",`${t}.present`));return}return{path:e.path,present:e.present}}if(e.neq!==void 0){if(!Wl(e.neq)){n.push(te("invalid-predicate","neq must be a JSON primitive",`${t}.neq`));return}return{path:e.path,neq:e.neq}}if(!Wl(e.eq)){n.push(te("invalid-predicate","eq must be a JSON primitive",`${t}.eq`));return}return{path:e.path,eq:e.eq}}}function $b(e,t,n){if(e===void 0)return;if(!at(e)){n.push(te("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(te("impossible-target",`${i} must be a boolean`,`${t}.${i}`));continue}r[i]=o}}return r}function Ha(e,t,n,r){if(!at(e)){n.push(te("impossible-target","target must be an object",t));return}if(!Cb.has(String(e.kind))){n.push(te("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),!Me(e.layerId)){n.push(te("impossible-target","layerId is required",`${t}.layerId`));return}if(!Me(e.version)){n.push(te("impossible-target","version is required",`${t}.version`));return}e.transition!==void 0&&!wb.has(String(e.transition))&&n.push(te("impossible-target","transition must be show, hide, or replace",`${t}.transition`)),r?.layers&&!r.layers.includes(e.layerId)&&n.push(te("unknown-resource",`unknown layer "${e.layerId}"`,`${t}.layerId`));let o=r?.versions?.[e.layerId];o&&!o.includes(e.version)&&n.push(te("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),!Me(e.entityId)){n.push(te("impossible-target","entityId is required",`${t}.entityId`));return}if(typeof e.present!="boolean"){n.push(te("impossible-target","present must be a boolean",`${t}.present`));return}r?.entities&&!r.entities.includes(e.entityId)&&n.push(te("unknown-resource",`unknown entity "${e.entityId}"`,`${t}.entityId`)),e.regionId!==void 0&&!Me(e.regionId)&&n.push(te("impossible-target","regionId must be a string",`${t}.regionId`));let o={kind:"presence",entityId:e.entityId,present:e.present};return Me(e.regionId)&&(o.regionId=e.regionId),o}if(i==="prop"){if(Qe(e,new Set(["kind","propId","visible","layerId"]),t,n),!Me(e.propId)){n.push(te("impossible-target","propId is required",`${t}.propId`));return}if(typeof e.visible!="boolean"){n.push(te("impossible-target","visible must be a boolean",`${t}.visible`));return}r?.props&&!r.props.includes(e.propId)&&n.push(te("unknown-resource",`unknown prop "${e.propId}"`,`${t}.propId`));let o={kind:"prop",propId:e.propId,visible:e.visible};return Me(e.layerId)&&(o.layerId=e.layerId),o}if(i==="semantic-region"){if(Qe(e,new Set(["kind","regionId","state","hitTestEnabled"]),t,n),!Me(e.regionId)){n.push(te("impossible-target","regionId is required",`${t}.regionId`));return}r?.regions&&!r.regions.includes(e.regionId)&&n.push(te("unknown-resource",`unknown region "${e.regionId}"`,`${t}.regionId`)),e.hitTestEnabled!==void 0&&typeof e.hitTestEnabled!="boolean"&&n.push(te("impossible-target","hitTestEnabled must be a boolean",`${t}.hitTestEnabled`));let o=$b(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),!Me(e.hotspotId)){n.push(te("impossible-target","hotspotId is required",`${t}.hotspotId`));return}if(typeof e.enabled!="boolean"){n.push(te("impossible-target","enabled must be a boolean",`${t}.enabled`));return}r?.hotspots&&!r.hotspots.includes(e.hotspotId)&&n.push(te("unknown-resource",`unknown hotspot "${e.hotspotId}"`,`${t}.hotspotId`));let o={kind:"hotspot",hotspotId:e.hotspotId,enabled:e.enabled};return Me(e.regionId)&&(o.regionId=e.regionId),o}if(i==="sequence"){if(Qe(e,new Set(["kind","sequenceId","play"]),t,n),!Me(e.sequenceId)){n.push(te("impossible-target","sequenceId is required",`${t}.sequenceId`));return}e.play!==void 0&&typeof e.play!="boolean"&&n.push(te("impossible-target","play must be a boolean",`${t}.play`)),r?.sequences&&!r.sequences.includes(e.sequenceId)&&n.push(te("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),!Me(e.bindingId)){n.push(te("impossible-target","bindingId is required",`${t}.bindingId`));return}if(!Me(e.assetId)){n.push(te("impossible-target","assetId is required",`${t}.assetId`));return}return r?.assets&&!r.assets.includes(e.assetId)&&n.push(te("unknown-resource",`unknown asset "${e.assetId}"`,`${t}.assetId`)),{kind:"asset",bindingId:e.bindingId,assetId:e.assetId}}function Hb(e,t,n){if(e===void 0)return;if(!at(e)){n.push(te("invalid-manifest","resources must be an object",t));return}Qe(e,Ob,t,n);let r={},i=(E,C)=>{if(E!==void 0){if(!Array.isArray(E)||E.some(O=>!Me(O))){n.push(te("invalid-manifest",`${C} must be a string array`,`${t}.${C}`));return}return E.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 f=i(e.entities,"entities");f&&(r.entities=f);let l=i(e.props,"props");l&&(r.props=l);let k=i(e.assets,"assets");if(k&&(r.assets=k),e.versions!==void 0)if(!at(e.versions))n.push(te("invalid-manifest","versions must be an object",`${t}.versions`));else{let E={};for(let[C,O]of Object.entries(e.versions)){if(!Array.isArray(O)||O.some(h=>!Me(h))){n.push(te("invalid-manifest",`versions.${C} must be a string array`,`${t}.versions.${C}`));continue}E[C]=O.slice()}r.versions=E}return r}function Jo(e){let t=[];if(jo(e,"",t),!at(e))return{ok:!1,errors:[te("invalid-manifest","bindings manifest must be a JSON object")]};Qe(e,xb,"",t),Me(e.id)||t.push(te("invalid-id","id is required","id")),e.schemaVersion!==Go&&t.push(te("invalid-version",`schemaVersion must be ${Go}`,"schemaVersion")),Array.isArray(e.bindings)||t.push(te("invalid-manifest","bindings must be an array","bindings")),(!Array.isArray(e.defaults)||e.defaults.length===0)&&t.push(te("uncovered-default","defaults must cover required presentation targets","defaults"));let n=Hb(e.resources,"resources",t),r=new Set,i=[];Array.isArray(e.bindings)&&e.bindings.forEach((f,l)=>{let k=`bindings[${l}]`;if(!at(f)){t.push(te("invalid-manifest","binding must be an object",k));return}if(Qe(f,_b,k,t),!Me(f.id)){t.push(te("invalid-id","binding id is required",`${k}.id`));return}r.has(f.id)&&t.push(te("duplicate-id",`duplicate binding id "${f.id}"`,`${k}.id`)),r.add(f.id),(typeof f.priority!="number"||!Number.isFinite(f.priority))&&t.push(te("invalid-manifest","priority must be a finite number",`${k}.priority`));let E=Wo(f.when,`${k}.when`,t);if(!Array.isArray(f.targets)||f.targets.length===0){t.push(te("impossible-target","binding targets are required",`${k}.targets`));return}let C=f.targets.map((O,h)=>Ha(O,`${k}.targets[${h}]`,t,n)).filter(O=>!!O);!E||typeof f.priority!="number"||!Number.isFinite(f.priority)||i.push({id:f.id,priority:f.priority,when:E,targets:C})});let o=[],s=new Set;Array.isArray(e.defaults)&&e.defaults.forEach((f,l)=>{let k=Ha(f,`defaults[${l}]`,t,n);if(!k)return;let E=qt(k);s.has(E)&&t.push(te("duplicate-priority",`duplicate default target "${E}"`,`defaults[${l}]`)),s.add(E),o.push(k)});let a=new Map,d=new Set;for(let f of i){let l=new Set;for(let k of f.targets){let E=qt(k);d.add(E),l.has(E)&&t.push(te("duplicate-priority",`binding "${f.id}" repeats target "${E}"`,`bindings.${f.id}`)),l.add(E);let C=a.get(E);C||(C=new Map,a.set(E,C));let O=C.get(f.priority);O?t.push(te("duplicate-priority",`bindings "${O}" and "${f.id}" share priority ${f.priority} on "${E}"`,`bindings.${f.id}`)):C.set(f.priority,f.id)}}for(let f of d)s.has(f)||t.push(te("uncovered-default",`required target "${f}" has no default`,"defaults"));return t.length>0?{ok:!1,errors:t}:{ok:!0,manifest:Ke({id:String(e.id),schemaVersion:Go,bindings:i,defaults:o,...n?{resources:n}:{}})}}function Xl(e){return{considered:[],winners:{},rejected:[],fallbacks:[],fallbackReason:e}}function jl(e,t){let n=Xl(t==="uncovered-default"?null:t),r=[],i={};for(let o of e.defaults){let s=qt(o);r.push(Ke(o)),i[s]={bindingId:null,target:Ke(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 qa(e,t,n={}){let r=Vb(t);if(r==="missing")return jl(e,"missing-state");if(r==="invalid")return jl(e,"invalid-projection");let i=Xl(null),o=[];for(let l of e.bindings){let k=Ko(l.when,r,n);if(i.considered.push({bindingId:l.id,predicateResult:k.ok,...k.detail?{detail:k.detail}:{}}),k.ok)o.push(l);else for(let E of l.targets)i.rejected.push({bindingId:l.id,targetKey:qt(E),reason:"predicate-false"})}o.sort((l,k)=>k.priority-l.priority||(l.id<k.id?-1:l.id>k.id?1:0));let s=new Map;for(let l of o)for(let k of l.targets){let E=qt(k),C=s.get(E);if(!C){s.set(E,{bindingId:l.id,priority:l.priority,target:Ke(k)});continue}l.priority<C.priority&&i.rejected.push({bindingId:l.id,targetKey:E,reason:"lower-priority"})}for(let l of e.defaults){let k=qt(l);s.has(k)||(i.fallbacks.push({targetKey:k,reason:"uncovered-default"}),i.winners[k]={bindingId:null,target:Ke(l)})}for(let[l,k]of s)i.winners[l]={bindingId:k.bindingId,target:Ke(k.target)};let a=[...new Set([...s.values()].sort((l,k)=>k.priority-l.priority||(l.bindingId<k.bindingId?-1:1)).map(l=>l.bindingId))],d=[],f=new Set;for(let l of e.defaults){let k=qt(l),E=s.get(k),C=E?E.target:l;f.has(k)||(f.add(k),d.push(Ke(C)))}for(let[l,k]of s)f.has(l)||(f.add(l),d.push(Ke(k.target)));return{selectedBindingIds:a,targets:d,usedFallback:!1,fallbackReason:null,explanation:i}}function qb(e,t){let n={},r={},i={},o={},s={},a={},d={},f=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 k=l.play!==!1,E=k&&f&&f.sequenceId===l.sequenceId&&(f.phase==="playing"||f.phase==="paused"||f.phase==="requested"||f.phase==="preloading"||f.phase==="ready");a[l.sequenceId]=E?"playing":"idle",k&&E&&(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?Ke(t.override):null,usedFallback:t.usedFallback,fallbackReason:t.fallbackReason,explanation:t.explanation?Ke(t.explanation):null}}function Gb(e,t){return e?JSON.stringify(e)===JSON.stringify(t):!1}function Ul(e,t){if(e===null)return null;if(e===void 0)return;if(!at(e)){t.push(te("invalid-snapshot","override must be an object"));return}Qe(e,Db,"override",t);let n={};if(e.reducedSensory!==void 0&&(typeof e.reducedSensory!="boolean"?t.push(te("invalid-snapshot","reducedSensory must be a boolean","override.reducedSensory")):n.reducedSensory=e.reducedSensory),e.reducedMotion!==void 0&&(typeof e.reducedMotion!="boolean"?t.push(te("invalid-snapshot","reducedMotion must be a boolean","override.reducedMotion")):n.reducedMotion=e.reducedMotion),e.labels!==void 0)if(!at(e.labels))t.push(te("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)&&Me(o.name)&&Me(o.role)){r[i]={name:o.name,role:o.role};continue}t.push(te("invalid-snapshot",`label "${i}" must be a string or { name, role }`,`override.labels.${i}`))}n.labels=r}return n}function Ga(e){let t=Jo(e.manifest);if(!t.ok)throw new Error(`createPresentationBindingRuntime: ${t.errors.map(w=>w.detail).join("; ")}`);let n=t.manifest,r=e.visual,i=e.semantic,o=e.sequences,s=e.selectors??{},a=!1,d=null,f=0,l=[],k=new Map,E=!1,C=null,O=null,h=null,A=!1,F=new Map,W=[],x=()=>{if(a)throw new Error(Tb)};function N(w,y){W.push({type:w,atRevision:d,manifestId:n.id,selectedBindingIds:l.slice(),reason:typeof y.reason=="string"?y.reason:void 0});let _=w.includes(".diagnostic.")?"diagnostic":"state",L={type:w,kind:_,payload:Ke(y)};e.onEvent?.(L),e.router?.publish(L)}function P(){return qb([...k.values()],{revision:d,selectedBindingIds:l,override:h,usedFallback:E,fallbackReason:C,explanation:O,sequences:o})}function u(w){let y=[];for(let _ of w)_.kind==="visual-layer"&&r&&(r.inspect().find(H=>H.id===_.layerId)||y.push(te("unknown-resource",`unknown live layer "${_.layerId}"`,_.layerId))),_.kind==="semantic-region"&&i&&!i.get(_.regionId)&&y.push(te("unknown-resource",`unknown live region "${_.regionId}"`,_.regionId)),_.kind==="hotspot"&&_.regionId&&i&&!i.get(_.regionId)&&y.push(te("unknown-resource",`unknown live region "${_.regionId}"`,_.regionId)),_.kind==="presence"&&_.regionId&&i&&!i.get(_.regionId)&&y.push(te("unknown-resource",`unknown live region "${_.regionId}"`,_.regionId)),_.kind==="sequence"&&o&&!o.get(_.sequenceId)&&y.push(te("unknown-resource",`unknown live sequence "${_.sequenceId}"`,_.sequenceId));return y}function v(){if(!(!i||!h?.labels)){for(let[w,y]of Object.entries(h.labels))if(i.get(w))if(typeof y=="string"){let _=i.get(w)?.a11y;i.setRegionA11y(w,{name:y,role:_?.role??"region"})}else i.setRegionA11y(w,{name:y.name,role:y.role})}}function c(){return h?.reducedSensory===!0}function p(w){let y=o?.inspect().active;return!!(y&&y.sequenceId===w&&(y.phase==="playing"||y.phase==="paused"||y.phase==="requested"||y.phase==="preloading"||y.phase==="ready"))}function m(w,y){if(!o)return;let _=c(),L=w.play!==!1&&!_,H=p(w.sequenceId);if(L&&!H&&(!y||A!==_)){let ee=o.playSequence(w.sequenceId,{invocationId:`presentation-binding:${w.sequenceId}`,idempotencyKey:`presentation-binding:${w.sequenceId}`});if(!ee.ok&&ee.reason!=="duplicate")return te("unknown-resource",ee.detail,w.sequenceId)}!L&&H&&o.skip()}function I(){for(let w of k.values())w.kind==="sequence"&&m(w,!0);A=c()}function T(w){if(!i)return[];let y=new Map;for(let Y of w)Y.kind==="hotspot"&&Y.regionId&&y.set(Y.regionId,Y.enabled);for(let Y of w)Y.kind==="semantic-region"&&Y.hitTestEnabled!==void 0&&y.set(Y.regionId,Y.hitTestEnabled);if(y.size===0)return[];let _=new Map,L=!1;for(let[Y,K]of y){let g=i.get(Y);if(!g)continue;g.hitTest!=="pass-through"&&F.set(Y,g.hitTest);let b=F.get(Y)??"absorb",R=K?b:"pass-through";_.set(Y,R),g.hitTest!==R&&(L=!0)}if(!L)return[];let H=i.snapshot(),G={...H,regions:H.regions.map(Y=>{let K=_.get(Y.id);return K&&K!==Y.hitTest?{...Y,hitTest:K}:Y})},ee=i.restore(G);return ee.ok?[]:ee.errors.map(Y=>te("unknown-resource",Y))}function S(w){let y=r?.snapshot(),_=i?.snapshot(),L=o?.snapshot(),H=new Map(F),G=K=>{F.clear();for(let[g,b]of H)F.set(g,b);return o&&L&&o.restore(L),r&&y&&r.restore(y),i&&_&&i.restore(_),K},ee=new Map;for(let K of w)ee.set(qt(K),Ke(K));let Y=T(w);if(Y.length>0)return G(Y);for(let[K,g]of ee){let b=k.get(K),R=Gb(b,g);if(g.kind==="visual-layer"&&r&&!R){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 G([te("unknown-resource",q.detail,g.layerId)])}if(g.kind==="semantic-region"&&i){let M=g.state??{},q=i.get(g.regionId)?.state,ne={hover:M.hover??q?.hover??!1,focus:M.focus??q?.focus??!1,selected:M.selected??q?.selected??!1};(!q||q.hover!==ne.hover||q.focus!==ne.focus||q.selected!==ne.selected)&&i.setRegionState(g.regionId,ne)}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=m(g,R);if(M)return G([M])}}return k=ee,A=c(),v(),[]}function D(w,y){let _=u(w.targets);if(_.length>0)return N(Xr,{manifestId:n.id,revision:String(y),reason:_[0]?.code,selectedBindingIds:l}),N(Qr,{manifestId:n.id,revision:String(y),reason:_[0]?.code}),{ok:!1,errors:_,inspect:P()};let L=S(w.targets);return L.length>0?(N(Xr,{manifestId:n.id,revision:String(y),reason:L[0]?.code,selectedBindingIds:l}),N(Qr,{manifestId:n.id,revision:String(y),reason:L[0]?.code}),{ok:!1,errors:L,inspect:P()}):(d=y,l=w.selectedBindingIds.slice(),E=w.usedFallback,C=w.fallbackReason,O=Ke(w.explanation),N(Uo,{manifestId:n.id,revision:String(y),selectedBindingIds:l,usedFallback:E,reason:C??void 0}),{ok:!0,revision:y,selectedBindingIds:l.slice(),usedFallback:E,fallbackReason:C,explanation:Ke(w.explanation),inspect:P()})}function B(){return{schemaVersion:Yr,manifestId:n.id,projectionRevision:d,selectedBindingIds:l.slice(),targets:[...k.values()].map(w=>Ke(w)),usedFallback:E,fallbackReason:C,override:h?Ke(h):null}}return{get manifest(){return Ke(n)},apply(w,y){x();let _=y?.revision??f+1;typeof _=="number"&&(f=Math.max(f,_));let L=qa(n,w,s);return D(L,_)},setOverride(w){x();let y=c();if(w===null)h=null;else{let _=[],L=Ul(w,_);if(_.length>0||L===void 0)throw new Error(`createPresentationBindingRuntime: ${_.map(H=>H.detail).join("; ")||"invalid override"}`);h=L?Ke(L):null,v()}c()!==y&&I()},evaluate(w){return x(),qa(n,w,s)},inspect(){return x(),P()},snapshot(){return x(),B()},restore(w){x();let y=R=>({ok:!1,errors:R}),_=w;if(typeof w=="string")try{_=JSON.parse(w)}catch{return y([te("invalid-snapshot","snapshot JSON is invalid")])}if(!at(_))return y([te("invalid-snapshot","snapshot must be a JSON object")]);if(_.schemaVersion!==Yr)return y([te("invalid-schema",`unsupported snapshot schemaVersion ${String(_.schemaVersion)}`,"schemaVersion")]);if(_.manifestId!==n.id)return y([te("invalid-snapshot",`snapshot manifestId "${String(_.manifestId)}" does not match "${n.id}"`,"manifestId")]);if(!Array.isArray(_.selectedBindingIds))return y([te("invalid-snapshot","selectedBindingIds must be an array","selectedBindingIds")]);let L=new Set(n.bindings.map(R=>R.id));for(let R of _.selectedBindingIds)if(!Me(R)||!L.has(R))return y([te("unknown-resource",`unknown selected binding "${String(R)}"`,"selectedBindingIds")]);if(!Array.isArray(_.targets))return y([te("invalid-snapshot","targets must be an array","targets")]);let H=[],G=_.targets.map((R,M)=>Ha(R,`targets[${M}]`,H,n.resources)).filter(R=>!!R);if(H.length>0)return y(H);let ee=[],Y=Ul(_.override??null,ee);if(ee.length>0)return y(ee);let K=u(G);if(K.length>0)return y(K);let g=typeof _.projectionRevision=="string"||typeof _.projectionRevision=="number"?_.projectionRevision:_.projectionRevision===null?null:void 0;if(g===void 0)return y([te("invalid-snapshot","projectionRevision must be a string, number, or null","projectionRevision")]);let b=S(G);return b.length>0?y(b):(d=g,typeof g=="number"&&(f=Math.max(f,g)),l=_.selectedBindingIds.filter(R=>Me(R)),E=_.usedFallback===!0,C=_.fallbackReason==="missing-state"||_.fallbackReason==="invalid-projection"?_.fallbackReason:null,h=Y??null,v(),I(),{ok:!0,snapshot:B()})},destroy(){a||(a=!0,k.clear(),W.length=0)}}}var ei=1,Gt=1,ti="content.revision.state.discovered",zo="content.revision.state.staging",Yo="content.revision.state.validated",Xo="content.revision.state.rejected",Qo="content.revision.state.activated",nr="content.revision.state.rolled-back",rr="content.revision.state.superseded",ni="content.revision.diagnostic.lifecycle",Kb=[ti,zo,Yo,Xo,Qo,nr,rr,ni],Ql=["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"],Wb=new Set(Ql),jb="Content revision activator has been destroyed",Ub=/^[0-9a-f]+$/i;function ue(e,t,n){return n?{code:e,detail:t,path:n}:{code:e,detail:t}}function _t(e){return e!==null&&typeof e=="object"&&!Array.isArray(e)}function we(e){return typeof e=="string"&&e.length>0}function Le(e){try{return JSON.parse(JSON.stringify(e))}catch{return e}}function xt(e,t){return`${e}@${t}`}function Jb(e,t){return e.localeCompare(t,"en",{numeric:!0,sensitivity:"base"})>0}function Zr(e,t){return e===t?!0:!e||!t?!1:e.bundleId===t.bundleId&&e.adapterId===t.adapterId}function tn(){return{version:1,fields:{contentId:{type:"string"},revision:{type:"string"},adapterId:{type:"string"},bundleId:{type:"string",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 zb(){return[nn(ce(ti,tn())),nn(ce(zo,tn())),nn(ce(Yo,tn())),nn(ce(Xo,tn())),nn(ce(Qo,tn())),nn(ce(nr,tn())),nn(ce(rr,tn())),nn(Xe(ni,tn()))]}function Wa(e){return typeof e=="string"&&e.length===64&&Ub.test(e)}function Yb(e,t){return e===void 0?{ok:!0,fallback:void 0}:_t(e)?!we(e.id)||!_n(e.kind)||!we(e.url)||!Wa(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 Zo(e){if(!_t(e))return{ok:!1,errors:[ue("invalid-manifest","catalog must be an object")]};let t=[];we(e.contentId)||t.push(ue("invalid-schema","contentId is required","contentId")),(!we(e.revision)||e.revision==="latest")&&t.push(ue("unknown-revision",'revision must be an exact id, not "latest"',"revision")),e.manifestVersion!==Gt&&t.push(ue("invalid-version",`manifestVersion must be ${Gt}`,"manifestVersion")),we(e.publisher)||t.push(ue("invalid-schema","publisher is required","publisher")),we(e.source)||t.push(ue("invalid-schema","source is required","source")),we(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(!_t(o)){t.push(ue("invalid-schema","asset must be an object",a));return}if(!we(o.id)||!_n(o.kind)||!we(o.url)){t.push(ue("invalid-schema","asset needs id, kind, and url",a));return}if(!Wa(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=Yb(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(!_t(e.signature)||!we(e.signature.id)||!we(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:Gt,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 Xb(e,t){return{contentId:e.body.id,revision:e.body.cartVersion,manifestVersion:Gt,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:na(e),capabilities:e.body.capabilities,signature:{id:e.signature.keyId,alg:e.signature.alg}}}function Qb(e,t){return`https://registry.test/worlds/${e}/revisions/${t??"current"}.json`}function Zb(e){let t=e.id??"static",n=new Map,r=new Map;for(let o of e.revisions){let s=Zo({...o,adapterId:o.adapterId||t}),a=we(o.contentId)?o.contentId:"",d=we(o.revision)?o.revision:"";if(!(!a||!d))if(s.ok){let f={...s.catalog,adapterId:t,source:s.catalog.source||"static"};n.set(xt(a,d),{ok:!0,catalog:f});let l=r.get(a);(!l||Jb(f.revision,l.revision))&&r.set(a,f)}else n.set(xt(a,d),s)}let i=e.fetchBytes??(async o=>e.bytesByUrl[o]);return{id:t,hasRevision(o,s){return!!n.get(xt(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(xt(o,s));return a?a.ok?{ok:!0,catalog:Le(a.catalog)}:a:{ok:!1,errors:[ue("unknown-revision",`static adapter has no ${o}@${s}`)]}},fetchBytes:i}}function ev(e){let t=e.id??"remote",n=e.catalogUrl??Qb,r=new Set((e.known??[]).map(s=>xt(s.contentId,s.revision))),i=e.fetchBytes??(async s=>e.bytesByUrl?.[s]);async function o(s,a,d){let f=a!=="current",l;try{l=await e.fetch(n(s,f?a:void 0),d)}catch(h){return{ok:!1,errors:[ue("staging-failed",h instanceof Error?h.message:String(h))]}}let k=l;if(_t(l)&&_t(l.manifest)){if(we(l.world)&&l.world!==s)return{ok:!1,errors:[ue("invalid-manifest",`remote world "${String(l.world)}" does not match "${s}"`,"world")]};if(f&&we(l.revision)&&l.revision!==a)return{ok:!1,errors:[ue("unknown-revision",`remote revision "${String(l.revision)}" does not match "${a}"`,"revision")]};k=l.manifest}let E=await kr(k,e.keys,f?a:void 0);if(!E.ok)return{ok:!1,errors:E.errors.map(h=>ue(h.code,h.detail,h.path))};if(E.manifest.body.id!==s)return{ok:!1,errors:[ue("invalid-manifest",`signed id "${E.manifest.body.id}" does not match "${s}"`,"body.id")]};let C=Xb(E.manifest,t);return r.add(xt(C.contentId,C.revision)),Zo(C)}return{id:t,hasRevision(s,a){return r.has(xt(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 tv(e,t){return _t(e)?!we(e.id)||!_n(e.kind)||!we(e.ref)||!Wa(e.hash)||!we(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 Ka(e,t){if(e===null)return{ok:!0,bundle:null};if(!_t(e))return{ok:!1,errors:[ue("invalid-snapshot","bundle must be an object or null",t)]};if(!we(e.contentId)||!we(e.revision)||e.revision==="latest")return{ok:!1,errors:[ue("unknown-revision","snapshot bundle must record an exact revision",`${t}.revision`)]};if(e.manifestVersion!==Gt)return{ok:!1,errors:[ue("invalid-version",`bundle manifestVersion must be ${Gt}`,`${t}.manifestVersion`)]};if(!we(e.publisher)||!we(e.source)||!we(e.adapterId)||!we(e.bundleId))return{ok:!1,errors:[ue("invalid-snapshot","bundle identity is incomplete",t)]};if(!_t(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=tv(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(!_t(e.signature)||!we(e.signature.id)||!we(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:Gt,publisher:e.publisher,source:e.source,adapterId:e.adapterId,signature:r,resources:n}}}function nv(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(!_t(t))return{ok:!1,errors:[ue("invalid-snapshot","snapshot must be an object")]};if(t.schemaVersion!==ei)return{ok:!1,errors:[ue("invalid-version",`snapshot schema must be ${ei}`,"schemaVersion")]};if(typeof t.pinned!="boolean")return{ok:!1,errors:[ue("invalid-snapshot","pinned must be a boolean","pinned")]};let n=Ka(t.active,"active");if(!n.ok)return n;let r=Ka(t.lastKnownGood,"lastKnownGood");if(!r.ok)return r;let i=Ka(t.previous,"previous");return i.ok?{ok:!0,snapshot:{schemaVersion:ei,pinned:t.pinned,active:n.bundle,lastKnownGood:r.bundle,previous:i.bundle}}:i}function rv(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 iv(e){let t=[...e.adapters],n=e.grants??Gn(),r=new Map,i=e.pin===!0,o=!1,s=null,a=null,d=null,f=null,l=null,k=[],E=0,C=null;function O(){if(o)throw new Error(jb)}function h(c){return c?t.find(p=>p.id===c):t[0]}function A(c,p,m){return(m?t.filter(T=>T.id===m):t).some(T=>T.hasRevision(c,p))}function F(c,p){k.push(c);let m=c.includes(".diagnostic.")?"diagnostic":"state",I={type:c,kind:m,payload:Le(p)};e.onEvent?.(I),e.router?.publish(I)}function W(c,p){return l=c.map(m=>Le(m)),F(Xo,{...p,reasonCode:c[0]?.code}),F(ni,{...p,reasonCode:c[0]?.code}),{ok:!1,errors:l}}function x(){return{destroyed:o,pinned:i,active:Le(s),lastKnownGood:Le(a),staging:f?Le(f):null,events:[...k],lastRejection:l?Le(l):null}}async function N(c,p,m){if(c.requestedGrants){for(let L of c.requestedGrants)if(!n.has(L))return{ok:!1,errors:[ue("capability-denied",`host did not grant "${L}"`,"requestedGrants")]}}if(c.capabilities){let L=e.hostCapabilities??{contractVersion:1,features:[],integrations:[],grants:n.list()},H=hr(c.capabilities,{...L,grants:n.list()});if(!H.ok)return{ok:!1,errors:H.errors.map(G=>ue(G.code==="missing-grant"||G.code==="capability-denied"||G.code==="ungranted-capability"?"capability-denied":"invalid-schema",G.detail,G.path))}}let I={},T=[];for(let L of c.assets)I[L.url]={url:L.url,hash:L.hash,alg:"sha256"},L.fallback&&(I[L.fallback.url]={url:L.fallback.url,hash:L.fallback.hash,alg:"sha256"}),T.push({id:L.id,ref:L.url,type:L.kind,integrity:`sha256-${L.hash}`,provenance:{contentId:c.contentId,revision:c.revision,publisher:c.publisher,adapterId:c.adapterId},fallback:L.fallback?{id:L.id,ref:L.fallback.url,type:L.fallback.kind,integrity:`sha256-${L.fallback.hash}`}:void 0});let S=pr({declared:I,fetchBytes:async L=>{if(m.aborted)return;let H=Object.values(I).find(K=>K.url===L);if(!H)return;let ee=r.get(H.hash)??await p.fetchBytes(L,m);if(!ee||m.aborted)return;let Y=await Ir(ee);if(Y!==H.hash)throw Ae({id:"",ref:L,code:"hash-mismatch",message:`hash mismatch for "${L}"`});return r.set(Y,ee),ee},hashBytes:Ir}),D=cn({resolver:S,emitEvents:!1,wallClockTimeout:!1});if(m.aborted)return D.dispose(),{ok:!1,errors:[ue("superseded","staging aborted")]};let B=()=>{D.abort(),D.dispose()};m.addEventListener("abort",B,{once:!0});let w;try{w=await D.preload(T)}finally{m.removeEventListener("abort",B),D.dispose()}if(m.aborted)return{ok:!1,errors:[ue("superseded","staging aborted")]};let y={},_=[];for(let L of c.assets){let H=w.items[L.id];if(H?.state==="ready"){y[L.id]=rv(L,H.resource,H.resource.usedFallback===!0||!!H.failure);continue}if(L.optional)continue;let G=H?.state==="failed"?H.failure:w.failures.find(ee=>ee.id===L.id);_.push(ue(G?.code==="hash-mismatch"?"hash-mismatch":"asset-failed",G?.message??`required asset "${L.id}" failed`,L.id))}return _.length>0?{ok:!1,errors:_}:{ok:!0,bundle:{bundleId:xt(c.contentId,c.revision),contentId:c.contentId,revision:c.revision,manifestVersion:Gt,publisher:c.publisher,source:c.source,adapterId:c.adapterId,signature:c.signature,resources:y}}}function P(c,p,m){return F(ni,{...c,reasonCode:p}),{ok:!1,errors:[ue("stale-health-check",m)]}}async function u(c,p){let m=Le(c),I=s;s=m;let T=!0;try{T=e.healthCheck?await e.healthCheck(m):!0}catch(S){return Zr(s,m)?(s=I,F(nr,{...p,revision:I?.revision??"",reasonCode:"activation-failed"}),W([ue("activation-failed",S instanceof Error?S.message:String(S))],p)):P(p,"stale-health-check","stale health check ignored; a newer revision is active")}return T?Zr(s,m)?(d=I,a=Le(s),l=null,F(Qo,p),{ok:!0,bundle:Le(s)}):P(p,"stale-health-check","stale health check ignored; a newer revision is active"):Zr(s,m)?(s=I,F(nr,{...p,revision:I?.revision??"",reasonCode:"health-check-failed"}),W([ue("health-check-failed","post-activation health check failed")],p)):P(p,"stale-health-check","stale health check ignored; a newer revision is active")}let v={pin(c=!0){O(),i=c},unpin(){O(),i=!1},isPinned(){return O(),i},async discover(c,p){O();let m=h(p);if(!m)return;let I=await m.discover(c);return I&&F(ti,{contentId:I.contentId,revision:I.revision,adapterId:I.adapterId,bundleId:xt(I.contentId,I.revision)}),I?Le(I):void 0},async activate(c){O();let p=h(c.adapterId);if(!p)return W([ue("unknown-adapter",`unknown adapter "${String(c.adapterId)}"`)],{contentId:c.contentId,revision:c.revision??"",adapterId:c.adapterId??""});let m=c.revision;if(!m){let D=await p.discover(c.contentId);m=D?.revision,D&&F(ti,{contentId:D.contentId,revision:D.revision,adapterId:D.adapterId,bundleId:xt(D.contentId,D.revision)})}if(!we(m)||m==="latest")return W([ue("unknown-revision","activation requires an exact revision")],{contentId:c.contentId,revision:String(m??""),adapterId:p.id});let I={contentId:c.contentId,revision:m,adapterId:p.id,bundleId:xt(c.contentId,m)};if(s&&s.contentId===c.contentId&&s.revision===m&&s.adapterId===p.id)return{ok:!0,bundle:Le(s),idempotent:!0};if(i&&s)return W([ue("pinned","activator is pinned; live revision movement is frozen")],I);let T=++E;C?.abort();let S=new AbortController;C=S,f={contentId:c.contentId,revision:m,adapterId:p.id,bundleId:I.bundleId},F(zo,I);try{let D=await p.loadRevision(c.contentId,m,S.signal);if(T!==E||S.signal.aborted)return F(rr,I),{ok:!1,errors:[ue("superseded",`revision ${m} was superseded`)]};if(!D.ok)return W(D.errors,I);let B=D.catalog,w=Zo(B);if(!w.ok)return W(w.errors,I);let y=await N(w.catalog,p,S.signal);return T!==E||S.signal.aborted?(F(rr,I),{ok:!1,errors:[ue("superseded",`revision ${m} was superseded`)]}):y.ok?(F(Yo,I),T!==E||S.signal.aborted?(F(rr,I),{ok:!1,errors:[ue("superseded",`revision ${m} was superseded`)]}):await u(y.bundle,I)):W(y.errors,I)}finally{T===E&&(f=null,C===S&&(C=null))}},rollback(){O();let c=d??a;if(Zr(s,c))return{ok:!0,bundle:Le(s),idempotent:!0};if(i)return{ok:!1,errors:[ue("pinned","activator is pinned; live revision movement is frozen")]};let p=s;return s=Le(c),a=Le(c),d=Le(c),F(nr,{contentId:s?.contentId??p?.contentId??"",revision:s?.revision??"",adapterId:s?.adapterId??p?.adapterId??"",bundleId:s?.bundleId,reasonCode:"rolled-back"}),{ok:!0,bundle:Le(s)}},inspect(){return O(),x()},activeBundle(){return O(),Le(s)},snapshot(){return O(),{schemaVersion:ei,pinned:i,active:Le(s),lastKnownGood:Le(a),previous:Le(d)}},restore(c){O();let p=nv(c);if(!p.ok)return p;let m=p.snapshot,I=[m.active,m.lastKnownGood,m.previous];for(let T of I)if(T&&!A(T.contentId,T.revision,T.adapterId))return{ok:!1,errors:[ue("unknown-revision",`unknown revision ${T.contentId}@${T.revision}`,"revision")]};return i&&!Zr(s,m.active)?{ok:!1,errors:[ue("pinned","activator is pinned; live revision movement is frozen")]}:(i=m.pinned,s=Le(m.active),a=Le(m.lastKnownGood),d=Le(m.previous),l=null,{ok:!0,snapshot:v.snapshot()})},provenance(){if(O(),!!s)return{source:s.source,publisher:s.publisher,version:s.revision,signature:s.signature}},destroy(){o=!0,C?.abort(),C=null,f=null}};return v}function ov(e){return typeof e=="string"&&Wb.has(e)}var es={width:320,height:180,deviceScaleFactor:1},sv="Browser harness has been destroyed";function av(e){return typeof CSS<"u"&&typeof CSS.escape=="function"?CSS.escape(e):e.replace(/([\0-\x1f\x7f!"#$%&'()*+,./:;<=>?@[\\\]^`{|}~])/g,"\\$1")}function ja(e){return{...e,visibleNormalizedRect:{...e.visibleNormalizedRect}}}function Ua(e){return e===void 0?void 0:JSON.parse(JSON.stringify(e))}function Ja(e,t,n){Object.defineProperty(e,"clientWidth",{value:t,configurable:!0}),Object.defineProperty(e,"clientHeight",{value:n,configurable:!0})}function za(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 Zl(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 dv(e){return e.querySelector("[aria-live]")?.textContent??""}function ep(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 cv(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 tp(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 Ya(e={}){let t=e.seed??`0x${"00".repeat(32)}`,n=Ua(e.geometry),r=e.semanticLayers,i=e.viewport?.width??es.width,o=e.viewport?.height??es.height,s=e.viewport?.deviceScaleFactor??es.deviceScaleFactor,a=e.reducedMotion===!0,d=e.inputModality??"pointer",f=e.origin??0,l=e.fit??"contain",k=Object.getOwnPropertyDescriptor(window,"devicePixelRatio"),E=Object.getOwnPropertyDescriptor(window,"innerWidth"),C=Object.getOwnPropertyDescriptor(window,"innerHeight"),O=tp(a),h=()=>{Object.defineProperty(window,"devicePixelRatio",{value:s,configurable:!0}),Object.defineProperty(window,"innerWidth",{value:i,configurable:!0}),Object.defineProperty(window,"innerHeight",{value:o,configurable:!0})};h();let A=document.createElement("div");A.setAttribute("data-cyberart-browser-harness",""),A.style.position="relative",A.style.overflow="auto",A.tabIndex=-1,document.body.appendChild(A);let F=[],W=[],x=!1,N=0,P=e.createId??(()=>`br-${++N}`),u=()=>Gs({contentWidth:e.contentWidth??i,contentHeight:e.contentHeight??o,viewportWidth:i,viewportHeight:o,mode:l,devicePixelRatio:s}),v=u(),c=()=>Math.max(1,Math.round(i*s)),p=()=>Math.max(1,Math.round(o*s)),m=K=>{n=Ua(K)},I=(K,g)=>{let b=n?.regions.find(M=>M.id===K);if(!b)return;let R=js(b,v);if(R)return g.style.position=g.style.position||"absolute",g.style.left=`${R.x}px`,g.style.top=`${R.y}px`,g.style.width=`${R.width}px`,g.style.height=`${R.height}px`,za(g,R.x,R.y,R.width,R.height),{...R}},T=()=>{v=u(),A.style.width=`${i}px`,A.style.height=`${o}px`,Ja(A,i,o),za(A,0,0,i,o),A.dataset.inputModality=d,A.dataset.reducedMotion=a?"true":"false",h()};T();let S=()=>({root:A,get layout(){return ja(v)},get reducedMotion(){return a},get inputModality(){return d},placeRegion:I,setGeometry(K){m(K)}}),D=e.mount?.(S())??{},B=D.participants??[],w,y,_=()=>{};if(B.length>0){for(let K of B)K.container&&Ja(K.container,c(),p());w=Js({origin:f,width:c(),height:p(),createId:P,now:()=>f,participants:B.map(K=>({...K,seed:K.seed??t,width:K.width??c(),height:K.height??p()}))}),_=w.router.subscribe(["*.*","*.*.*","*.*.*.*","*.*.*.*.*",ht],K=>{W.push(K)}),D.compositor&&(y=Aa({...D.compositor,group:w,width:i,height:o,dpr:s}))}let L=()=>({...S(),group:w,compositor:y,publish(K){if(!w)throw new Error("Browser harness: publish requires mounted carts");return w.publish(K)}}),H=()=>{if(T(),w){let K=c(),g=p();for(let b of B){b.container&&(Ja(b.container,K,g),b.container.style.width=`${i}px`,b.container.style.height=`${o}px`);try{let R=w.participant(b.id).cart.canvas;R&&(R.style.width=`${i}px`,R.style.height=`${o}px`,za(R,0,0,i,o))}catch{}}}},G=()=>{if(x)throw new Error(sv)};H(),D.ready?.(L());let ee=(K,g,b)=>{if(F.push({type:"click",x:K,y:g,...b?{selector:b}:{}}),b){let oe=A.querySelector(b);if(!(oe instanceof HTMLElement))throw new Error(`No element matches ${b}`);ep(oe,K,g);return}let R=n?new Set(n.regions.map(oe=>oe.id)):void 0,M=r?r.hitTest(ln({x:K,y:g},v)):void 0,q=M&&(!R||R.has(M.id))?M:void 0,ne=q===void 0&&n!==void 0?vr({x:K,y:g},v,n,{space:"css"}):q?{id:q.id}:void 0,ie=(ne?A.querySelector(`#${av(ne.id)}`):null)??cv(A,K,g);ep(ie,K,g)};return{root:A,get group(){return w},get compositor(){return y},get layout(){return ja(v)},get events(){return W.slice()},get geometry(){return Ua(n)},goto(){G()},setGeometry(K){G(),m(K),D.relayout?.(L())},setViewport(K,g,b){G(),i=Math.max(1,K|0),o=Math.max(1,g|0),b!==void 0&&(s=b>0?b:1),F.push({type:"viewport",width:i,height:o,dpr:s}),y?y.resize(i,o,s):w&&w.resize(c(),p()),H(),D.relayout?.(L())},setReducedMotion(K){G(),a=K,O(),O=tp(a),F.push({type:"reducedMotion",value:K}),H(),D.relayout?.(L())},setInputModality(K){G(),d=K,F.push({type:"inputModality",value:K}),H()},click(K,g){if(G(),typeof K=="string"){let b=A.querySelector(K);if(!(b instanceof HTMLElement))throw new Error(`No element matches ${K}`);let R=b.getBoundingClientRect();ee(R.left+R.width/2,R.top+R.height/2,K);return}if(g===void 0)throw new Error("click(x, y) requires a y coordinate");ee(K,g)},key(K){G(),F.push({type:"key",key:K}),(document.activeElement instanceof HTMLElement?document.activeElement:A).dispatchEvent(new KeyboardEvent("keydown",{key:K,bubbles:!0,cancelable:!0}))},focus(K){G();let g=A.querySelector(K);if(!(g instanceof HTMLElement))throw new Error(`No element matches ${K}`);g.focus()},async step(K=1){G(),F.push({type:"step",frames:K}),w&&await w.step(K)},async advance(K){G(),F.push({type:"advance",ms:K}),w&&await w.step(Math.max(0,Math.round(K/1e3*30)))},screenshot(){if(G(),y){let K=y.captureComposedFrame();return{imageData:K.imageData,pngDataUrl:K.pngDataUrl,html:A.outerHTML,declaredOrder:K.declaredOrder.map(g=>g.id)}}return{imageData:null,pngDataUrl:null,html:A.outerHTML,declaredOrder:[]}},accessibilitySnapshot(){return G(),{focus:Zl(document.activeElement),live:dv(A),html:A.outerHTML,publishedRegions:(r?.inspectPublished()??[]).map(K=>({id:K.id,geometryKinds:[...K.geometryKinds],name:K.a11y?.name??null,role:K.a11y?.role??null}))}},async inspect(){G();let K={},g={},b=0;if(w){let R=await w.inspect();for(let M of R.diagnostics.participantIds)K[M]=w.participant(M).events.slice(),g[M]=R.participants[M]?.state,b=R.diagnostics.clocks[M]?.framesElapsed??b}return{host:D.hostState?.()??null,layout:ja(v),events:W.slice(),participantEvents:K,state:g,focus:Zl(document.activeElement),publishedRegions:(r?.inspectPublished()??[]).map(R=>({id:R.id,geometryKinds:[...R.geometryKinds],name:R.a11y?.name??null,role:R.a11y?.role??null})),scrollTop:A.scrollTop,clock:{framesElapsed:b}}},reproduction(){return G(),{seed:t,viewport:{width:i,height:o,dpr:s},reducedMotion:a,inputModality:d,actions:F.map(K=>({...K}))}},captureComposedFrame(){if(G(),!y)throw new Error("Browser harness: captureComposedFrame requires a compositor");return y.captureComposedFrame()},destroy(){if(!x){x=!0,_(),document.activeElement instanceof HTMLElement&&A.contains(document.activeElement)&&document.activeElement.blur();try{D.destroy?.()}finally{try{y?.destroy()}finally{try{w?.destroy()}finally{A.remove(),O(),k&&Object.defineProperty(window,"devicePixelRatio",k),E&&Object.defineProperty(window,"innerWidth",E),C&&Object.defineProperty(window,"innerHeight",C)}}}}}}}function uv(e){return{async goto(){e.goto()},async setViewportSize(t){e.setViewport(t.width,t.height,t.deviceScaleFactor)},async click(t){e.click(t)},async screenshot(){return e.screenshot()},keyboard:{async press(t){e.key(t)}},locator(t){return{async click(){e.click(t)},async focus(){e.focus(t)}}},async close(){e.destroy()}}}var ed=1,ns=1,is="production.scenario.state.observed",oi="production.scenario.state.failed",os="production.scenario.diagnostic.lifecycle",sp=[is,oi,os],ap=["input","reducer","routing","binding","cue","pixels","caption","audio","save-replay"],dp=["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"],cp=["invoked","completed","failed","skipped","fallback"],up=["desktop","mobile"],rs={desktop:{width:64,height:48,deviceScaleFactor:1},mobile:{width:48,height:64,deviceScaleFactor:2}},lv="Production scenario runner has been destroyed",pv=new Set(sp),fv=new Set(dp),mv=new Set(ap),gv=new Set(cp),yv=new Set(["invoked","completed"]),lp=new Set(up),hv=new Set(["id","schemaVersion","seed","required","matrix","steps"]),bv=new Set(["participants","layers"]),vv=new Set(["viewport","width","height","dpr","reducedMotion","mute","failedAssetIds","fallback","inputModality"]),Sv=new Set(["click","key","focus","step","viewport","reducedMotion","mute","failAsset","save","reload","replay"]),pp="continue",Ev=["browser","visual","sequence","audio","semantic"];function Fe(e,t,n,r){let i={code:e,detail:t};return n&&(i.path=n),r&&(i.boundary=r),i}function $e(e){return!!e&&typeof e=="object"&&!Array.isArray(e)}function Ze(e){return typeof e=="string"&&e.length>0}function Be(e){return JSON.parse(JSON.stringify(e))}function td(e,t,n){if(typeof e=="function"){n.push(Fe("callbacks-forbidden","authored scenarios must not contain callbacks",t));return}if(Array.isArray(e)){e.forEach((r,i)=>td(r,`${t}[${i}]`,n));return}if($e(e))for(let[r,i]of Object.entries(e))td(i,t?`${t}.${r}`:r,n)}function Xa(e,t,n,r){for(let i of Object.keys(e))t.has(i)||r.push(Fe("unknown-field",`unknown field "${i}"`,n?`${n}.${i}`:i))}function np(e,t,n){if(!Array.isArray(e))return n.push(Fe("invalid-schema","must be an array of strings",t)),[];let r=[];return e.forEach((i,o)=>{if(!Ze(i)){n.push(Fe("invalid-schema","id must be a non-empty string",`${t}[${o}]`));return}r.push(i)}),r}function Qa(){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 Za(e){if(!e.ok)throw new Error(e.errors.map(t=>t.detail).join("; "));return e.contract}function Iv(){return[Za(ce(is,Qa())),Za(ce(oi,Qa())),Za(Xe(os,Qa()))]}function kv(e){return typeof e=="string"&&pv.has(e)}function Rv(e){return typeof e=="string"&&fv.has(e)}function Cv(e){return typeof e=="string"&&mv.has(e)}function fp(e){return typeof e=="string"&&gv.has(e)}function Av(e,t,n){if(!$e(e)||!Ze(e.type)){n.push(Fe("invalid-schema","step.type is required",t));return}if(!Sv.has(e.type)){n.push(Fe("unknown-field",`unknown step type "${e.type}"`,`${t}.type`));return}let r=n.length,i=a=>{Ze(e[a])||n.push(Fe("missing-field",`${e.type} step requires ${a}`,`${t}.${a}`))},o=a=>{(typeof e[a]!="number"||!Number.isFinite(e[a]))&&n.push(Fe("missing-field",`${e.type} step requires numeric ${a}`,`${t}.${a}`))},s=a=>{typeof e[a]!="boolean"&&n.push(Fe("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(Fe("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&&!lp.has(String(e.kind))&&n.push(Fe("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(Fe("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 Be(e)}function mp(e){let t=[];if(td(e,"",t),!$e(e))return{ok:!1,errors:[Fe("invalid-scenario","scenario must be an object")]};if(Xa(e,hv,"",t),Ze(e.id)||t.push(Fe("missing-field","id is required","id")),e.schemaVersion!==ed&&t.push(Fe("invalid-schema","schemaVersion must be 1","schemaVersion")),Ze(e.seed)||t.push(Fe("missing-field","seed is required","seed")),!$e(e.required))t.push(Fe("missing-field","required participants and layers are required","required"));else{Xa(e.required,bv,"required",t);let o=np(e.required.participants,"required.participants",t),s=np(e.required.layers,"required.layers",t);o.length===0&&t.push(Fe("missing-field","required.participants must not be empty","required.participants")),s.length===0&&t.push(Fe("missing-field","required.layers must not be empty","required.layers"))}let n;e.matrix!==void 0&&($e(e.matrix)?(Xa(e.matrix,vv,"matrix",t),e.matrix.viewport!==void 0&&!lp.has(String(e.matrix.viewport))&&t.push(Fe("invalid-schema","matrix.viewport must be desktop or mobile","matrix.viewport")),n=Be(e.matrix)):t.push(Fe("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=Av(o,`steps[${s}]`,t);a&&r.push(a)})):t.push(Fe("invalid-schema","steps must be an array","steps"))),t.length>0)return{ok:!1,errors:t};let i={id:e.id,schemaVersion:ed,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 bn(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 ri(e){return JSON.stringify(e)}function ts(e,t){let n=new Set(t);return e.filter(r=>!n.has(r))}function gp(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 Pv(e){let t=e?.viewport==="mobile"?"mobile":"desktop",n=rs[t];return{preset:t,viewport:{width:e?.width??n.width,height:e?.height??n.height,deviceScaleFactor:e?.dpr??n.deviceScaleFactor}}}function Tv(e){return{type:"host.intent.select",kind:"intent",payload:{id:e}}}function wv(e){return{type:"host.intent.key",kind:"intent",payload:{key:e}}}function ii(e){return{boundary:"audio",code:"invalid-host-audio",detail:e}}function rp(e){return!!e&&typeof e=="object"&&typeof e.setReducedMotion=="function"}function xv(e){return!!e&&typeof e=="object"&&typeof e.setReducedSensory=="function"}function _v(e){if(!$e(e)||!fp(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 ip(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 Ov(e){if(e===void 0)return{ok:!0,supplied:!1,snapshot:{events:[]}};if(!$e(e))return{ok:!1,error:ii("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:ii("hostAudio requires snapshot() or collect()")};try{typeof r=="function"&&r.call(e);let s=i?t.call(e):n.call(e);if(!$e(s)||!Array.isArray(s.events))return{ok:!1,error:ii("hostAudio snapshot.events must be an array")};let a=[];for(let f=0;f<s.events.length;f++){let l=_v(s.events[f]);if(!l)return{ok:!1,error:ii(`hostAudio snapshot.events[${f}] is invalid`)};a.push(l)}let d={events:a};return Array.isArray(s.captions)&&(d.captions=s.captions.filter(f=>typeof f=="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:ii(`hostAudio inspect failed: ${a}`)}}}function Dv(e,t,n,r){return{version:1,cartId:e,seed:t,framesElapsed:n,state:r}}function Nv(){return{version:1,landmarks:[],regions:[]}}function mt(e,t){return{boundary:"input",code:e,detail:t}}function yp(e){let t={};for(let n of e)n.priority!==void 0&&(t[n.id]=n.priority);return t}function Mv(e,t){let n=yp(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 Lv(e,t,n,r,i){let o=vr({x:e,y:t},n,r,{space:"css",precedence:Object.keys(i).length>0?i:void 0});if(!o)return null;let s=ln({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 Vv(e,t){if(typeof e=="string")return e.length===0?{ok:!1,error:mt("invalid-geometry",`controls[${t}] id is required`)}:{ok:!0,control:{id:e}};if(!$e(e)||!Ze(e.id))return{ok:!1,error:mt("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:mt("invalid-geometry",`controls[${t}].priority must be a finite number`)};n.priority=e.priority}return{ok:!0,control:n}}function op(e,t){if(!Array.isArray(e))return{ok:!1,error:mt("invalid-geometry","controls must be an array")};let n=[],r=new Set;for(let a=0;a<e.length;a++){let d=Vv(e[a],a);if(!d.ok)return d;if(r.has(d.control.id))return{ok:!1,error:mt("ambiguous-geometry",`duplicate control id "${d.control.id}"`)};r.add(d.control.id),n.push(d.control)}if(!$e(t))return{ok:!1,error:mt("invalid-geometry","geometry document is required")};if(t.version!==1||!Array.isArray(t.landmarks)||!Array.isArray(t.regions))return{ok:!1,error:mt("invalid-geometry","geometry document is invalid")};let i=Be(t),o=Us(i);if(!o.ok){let a=o.diagnostics.filter(f=>f.code==="overlap"),d=o.diagnostics.filter(f=>f.code!=="overlap");if(d.length>0){let f=d.some(l=>l.code==="duplicate-id");return{ok:!1,error:mt(f?"ambiguous-geometry":"invalid-geometry",o.diagnostics.map(l=>l.detail).join("; "))}}if(a.length>0){let f=Mv(n,a);if(!f.ok)return{ok:!1,error:mt("ambiguous-geometry",f.detail)}}else return{ok:!1,error:mt("invalid-geometry",o.diagnostics.map(f=>f.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:mt("stale-geometry",`control "${a.id}" has no region in the active geometry`)};return{ok:!0,surface:{controls:n,geometry:i}}}function Ce(e,t,n){return{boundary:e,code:t,detail:n}}function Fv(e){return e==null?null:$e(e)?e.schemaVersion!==Wr?Ce("pixels","invalid-visual-sidecar","unsupported visual layer snapshot schema"):typeof e.frame!="number"||!Number.isFinite(e.frame)?Ce("pixels","invalid-visual-sidecar","visual sidecar frame must be finite"):Array.isArray(e.layers)?null:Ce("pixels","invalid-visual-sidecar","visual sidecar layers must be an array"):Ce("pixels","invalid-visual-sidecar","visual sidecar must be an object")}function Bv(e){return e==null?null:$e(e)?e.schemaVersion!==Kr?Ce("caption","invalid-semantic-sidecar","unsupported semantic layer snapshot schema"):typeof e.frame!="number"||!Number.isFinite(e.frame)?Ce("caption","invalid-semantic-sidecar","semantic sidecar frame must be finite"):Array.isArray(e.regions)?null:Ce("caption","invalid-semantic-sidecar","semantic sidecar regions must be an array"):Ce("caption","invalid-semantic-sidecar","semantic sidecar must be an object")}function $v(e,t){return e==null?null:$e(e)?e.schemaVersion!==Yr?Ce("binding","invalid-binding-sidecar","unsupported presentation binding snapshot schema"):t&&e.manifestId!==t?Ce("binding","invalid-binding-sidecar",`snapshot manifestId "${String(e.manifestId)}" does not match "${t}"`):Array.isArray(e.selectedBindingIds)?Array.isArray(e.targets)?null:Ce("binding","invalid-binding-sidecar","binding sidecar targets must be an array"):Ce("binding","invalid-binding-sidecar","binding sidecar selectedBindingIds must be an array"):Ce("binding","invalid-binding-sidecar","binding sidecar must be an object")}function Hv(e,t){if(e==null)return null;if(!$e(e))return Ce("cue","invalid-sequence-sidecar","sequence sidecar must be an object");if(e.schemaVersion!==Jr)return Ce("cue","invalid-sequence-sidecar","unsupported presentation sequence snapshot schema");if(typeof e.frame!="number"||!Number.isFinite(e.frame))return Ce("cue","invalid-sequence-sidecar","sequence sidecar frame must be finite");let n=e.active;if(n!=null){if(!$e(n)||!Ze(n.sequenceId))return Ce("cue","invalid-sequence-sidecar","active.sequenceId is required");if(!t(n.sequenceId))return Ce("cue","invalid-sequence-sidecar",`unknown sequence "${n.sequenceId}"`)}if(e.queue!==void 0){if(!Array.isArray(e.queue))return Ce("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(!$e(i)||!Ze(i.sequenceId))return Ce("cue","invalid-sequence-sidecar",`queue[${r}] sequenceId is required`);if(!t(i.sequenceId))return Ce("cue","invalid-sequence-sidecar",`unknown sequence "${i.sequenceId}"`)}}return null}function qv(e){let t=gr(e);return t.ok?null:Ce("audio","invalid-audio-sidecar",t.errors[0]?.detail??"audio sidecar is invalid")}function hp(e){let t=mp(e.scenario);if(!t.ok)throw new Error(`createProductionScenarioRunner: ${t.errors.map($=>$.detail).join("; ")}`);let n=t.scenario,r=n.matrix??{},{preset:i,viewport:o}=Pv(r),s=e.host,a=Be(s.initialState),d=null,f,l,k,E=null,C=null,O=null,h=r.reducedMotion===!0,A=null,F=!1,W=[],x=0,N=0,P=e.createId??(()=>`ps-${++x}`),u=e.mapClick??Tv,v=e.mapKey??wv,c=e.sequenceBindings??{},p=e.origin??0,m=e.semanticRegions&&e.semanticRegions.length>0?Oa({originFrame:0,regions:e.semanticRegions}):void 0,I,T,S,D=$s({originFrame:0,reducedSensory:r.reducedMotion===!0||r.mute===!0}),B=no(),w,y=null,_=null,L=[],H=[],G={},ee=null,Y=null,K=()=>{},g=()=>{},b=()=>{},R=$=>s.project?s.project($):Be($),M=()=>{let $=new Set,j=[];for(let se of[...e.geometry?.regions.map(ve=>ve.id)??[],...(e.semanticRegions??[]).map(ve=>ve.id)])$.has(se)||($.add(se),j.push({id:se}));return j},q=$=>{if(s.projectInputSurface){let se;try{se=s.projectInputSurface($)}catch(ve){let he=ve instanceof Error?ve.message:String(ve);return{ok:!1,error:mt("invalid-geometry",`projectInputSurface failed: ${he}`)}}return $e(se)?op(se.controls,se.geometry):{ok:!1,error:mt("invalid-geometry","projectInputSurface must return { controls, geometry }")}}let j=M();return e.geometry?op(j,e.geometry):{ok:!0,surface:{controls:j,geometry:Nv()}}},ne=()=>{let $=q(a);if(!$.ok){_=$.error,y=$.error,b($.error);return}_&&y===_&&(y=null),_=null,H=$.surface.controls.map(j=>({...j})),L=H.map(j=>j.id),G=yp(H),Y=Be($.surface.geometry),g($.surface.geometry),K($.surface.controls)},z=$=>w?w.publish($):U.group?.publish($),ie=$=>{ne();let j=R(a),se=typeof j.worldRevision=="string"||typeof j.worldRevision=="number"?j.worldRevision:void 0;S?.apply(j,se!==void 0?{revision:se}:void 0);let ve=$;if(ve&&T){N+=1;let he=`${n.id}:${ve}:${N}`;T.playSequence(ve,{invocationId:he,idempotencyKey:he,bindings:c[ve]??{}})}xe()},oe=$=>{let j=s.reduce(Be(a),$);d=j,a=Be(j.state);let se=$e($.payload)?$.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"}}),ie(j.playSequence),j},Te=document.createElement("div");Te.setAttribute("aria-live","polite"),Te.id="status",Te.textContent="";let ke=()=>Ov(e.hostAudio),xe=()=>{let $=T?.inspect().captions.filter(le=>le.visible).map(le=>le.text)??[],j=typeof a.caption=="string"?a.caption:"",se=ke(),ve=se.ok?ip(se.snapshot):[],he=ve[ve.length-1]??"";Te.textContent=$[0]||j||he},De=()=>{let $=U.group,j=U.compositor,se=$?$.inspectParticipants().map(Ee=>Ee.id):[],ve=j?j.layers().map(Ee=>Ee.id):[],he=ts(n.required.participants,se);if(he.length>0)return{boundary:"routing",code:"missing-participant",detail:`missing participants: ${he.join(", ")}`};let le=ts(n.required.layers,ve);return le.length>0?{boundary:"pixels",code:"missing-layer",detail:`missing layers: ${le.join(", ")}`}:null},V=$=>({scenarioId:n.id,seed:n.seed,boundary:$.boundary,reason:$.detail}),J=$=>{let j={type:os,kind:"diagnostic",payload:{...V($),code:$.code}};z(j),e.router?.publish(j)},re=$=>{let j={type:oi,kind:"state",payload:V($)};z(j),e.router?.publish(j),J($)},U=Ya({seed:n.seed,viewport:o,reducedMotion:r.reducedMotion===!0,inputModality:r.inputModality??"pointer",origin:p,createId:P,geometry:e.geometry,semanticLayers:m,contentWidth:e.contentWidth??o.width,contentHeight:e.contentHeight??o.height,mount($){let j=new Map;return g=se=>{$.setGeometry(se)},K=se=>{let ve=new Set(se.map(le=>le.id));for(let[le,Ee]of[...j])ve.has(le)||(document.activeElement===Ee&&Ee.blur(),Ee.remove(),j.delete(le));let he=[...se].sort((le,Ee)=>{let Ot=le.priority??0,Rt=Ee.priority??0;return Ot!==Rt?Ot-Rt:le.id<Ee.id?-1:le.id>Ee.id?1:0});for(let le of he){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",()=>{oe(u(le.id))}),j.set(le.id,Ee)),$.root.insertBefore(Ee,Te),Ee.setAttribute("aria-label",le.name??le.id),le.role?Ee.setAttribute("role",le.role):Ee.removeAttribute("role"),$.placeRegion(le.id,Ee)}},$.root.append(Te),{participants:e.participants,compositor:{layers:e.compositorLayers},hostState:()=>Be(a),ready(se){if(se.group&&(w=B.bind(se.group)),se.compositor&&e.visualLayers&&e.visualLayers.length>0){I=Da({compositor:se.compositor,originFrame:0,reducedMotion:r.reducedMotion===!0,sceneId:n.id,layers:e.visualLayers});for(let[he,le]of Object.entries(e.visualSources??{}))I.registerSource(he,le),I.handleHostEvent({type:ze,kind:"state",payload:{id:he}})}let ve=[];for(let he of e.sequences??[]){let le=zr(he);if(!le.ok)throw new Error(`createProductionScenarioRunner: sequence ${le.errors.map(Ee=>Ee.detail).join("; ")}`);ve.push(le.sequence)}if(T=ve.length>0?Va({originFrame:0,reducedMotion:r.reducedMotion===!0,reducedSensory:r.mute===!0||r.fallback===!0,audio:D,semantic:m,visual:I,sequences:ve}):void 0,e.bindings!==void 0){let he=Jo(e.bindings);if(!he.ok)throw new Error(`createProductionScenarioRunner: ${he.errors.map(le=>le.detail).join("; ")}`);S=Ga({manifest:he.manifest,visual:I,semantic:m,sequences:T})}$.root.addEventListener("keydown",he=>{let le=v(he.key);le&&oe(le)}),ie()},relayout(se){for(let[ve,he]of j)se.placeRegion(ve,he)},destroy(){Te.remove();for(let se of j.values())se.remove();j.clear()}}}}),Z=()=>{if(F)throw new Error(lv)};D.unlock(),r.mute===!0&&D.broker.mute();let ge=new Set(r.failedAssetIds??[]),tt=new Set([...ge]);for(let $ of Object.values(c))for(let j of Object.values($.assets??{}))j&&tt.add(j);for(let $ of tt){let j={type:ge.has($)?je:ze,kind:"state",payload:{id:$}};D.handleHostEvent(j),I?.handleHostEvent(j)}if(y=De(),y||(y=_),!y){let $=ke();$.ok||(y=$.error)}b=re,y&&re(y);let dt=$=>({boundary:"cue",code:"unsupported-preference",detail:$}),Ft=$=>{O=dt($),y=O,re(O)},Bt=$=>{let j=h;h=$,U.setReducedMotion($);let se=[{id:"browser",applied:!0,reducedMotion:U.reproduction().reducedMotion}];I?rp(I)?(I.setReducedMotion($),se.push({id:"visual",applied:!0,reducedMotion:I.reducedMotion})):(Ft("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"}),T?rp(T)?(T.setReducedMotion($),se.push({id:"sequence",applied:!0,reducedMotion:T.reducedMotion})):(Ft("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 ve=$||D.broker.muted;xv(D)?(D.setReducedSensory(ve),se.push({id:"audio",applied:!0,reducedMotion:$,reducedSensory:D.reducedSensory})):(Ft("audio does not support setReducedSensory"),se.push({id:"audio",applied:!1,reason:"setReducedSensory is not supported"})),m?se.push({id:"semantic",applied:!1,reason:"no-reduced-motion-policy"}):se.push({id:"semantic",applied:!1,reason:"participant-not-mounted"});let he={from:j,to:$,activeSequencePolicy:pp,participants:se};return A=he,he},ir=async $=>{w?await w.step($):await U.step($),I?.step($),T?.step($),D.step($),xe()},Ep=($=ke())=>{let j=U.group,se=U.compositor,ve=j?j.inspectParticipants().map(_e=>_e.id):[],he=se?se.layers().map(_e=>_e.id):[],le=ts(n.required.participants,ve),Ee=ts(n.required.layers,he),Ot=U.events,Rt=$.ok?$.snapshot:{events:[]},vn=$.ok?ip(Rt):[],Ct=[...T?.inspect().captions.filter(_e=>_e.visible).map(_e=>_e.text)??[],...vn],rn=typeof a.caption=="string"?a.caption:"";rn&&!Ct.includes(rn)&&Ct.push(rn);let pe=D.snapshot(),At=Rt.events,on=U.screenshot(),Rp=W.find(_e=>_e.type==="click");return{inputDispatched:W.some(_e=>_e.type==="click"||_e.type==="key"),inputTarget:Rp?.selector,reducerAccepted:d?.accepted===!0,reducerRejected:d?d.accepted===!1:void 0,reducerReason:d?.reason,routedTypes:Ot.map(_e=>_e.type),rejected:Ot.some(_e=>_e.type===ht),selectedBindingIds:S?.inspect().selectedBindingIds??[],sequenceId:T?.inspect().active?.sequenceId??d?.playSequence??null,sequencePhase:T?.inspect().active?.phase??null,captions:Ct,declaredOrder:on.declaredOrder,requiredParticipantsPresent:le.length===0,requiredLayersPresent:Ee.length===0,missingParticipants:le,missingLayers:Ee,audioInvoked:pe.events.some(_e=>_e.type==="audio.cue.scheduled"||_e.type==="audio.cue.started")||At.some(_e=>yv.has(_e.kind)),audioFailed:pe.events.some(_e=>_e.type==="audio.cue.failed")||At.some(_e=>_e.kind==="failed")||(r.failedAssetIds?.length??0)>0,muted:pe.muted||Rt.muted===!0,replayMatch:l?.ok,snapshotOk:f!==void 0,audioRestoreOk:k,reducedMotion:h,reducedMotionPropagation:A,activeControlIds:L.slice(),inputHitTest:ee?{...ee}:void 0}},sd=$=>{y=De();let j=ke();!y&&_&&(y=_),!y&&C&&(y=C),!y&&E&&(y=E),!y&&O&&(y=O),!y&&!j.ok&&(y=j.error);let se=Ep(j),ve={requiredParticipantsPresent:!0,requiredLayersPresent:!0,...$},he=y??gp(se,ve),le=U.screenshot(),Ee=U.accessibilitySnapshot(),Ot=m?.inspectPublished()??[],Rt=B.records(),vn=f?ri(f):"",Ct=le.imageData?new Uint8Array(le.imageData.data):new Uint8Array,rn=Object.keys(e.visualSources??{}).sort(),pe=typeof a.worldRevision=="string"||typeof a.worldRevision=="number"?a.worldRevision:null,At={schemaVersion:ns,scenarioId:n.id,seed:n.seed,matrix:{viewport:i,width:o.width,height:o.height,dpr:o.deviceScaleFactor??1,...r},hashes:{pixels:bn(Ct),semantic:bn(ri(Ot)),a11y:bn(ri(Ee)),trace:bn(ri(Rt)),snapshot:vn?bn(vn):"0".repeat(8),assets:bn(ri(rn))},revisions:{world:pe,bindings:S?.inspect().revision??null,snapshot:Ue},traces:{envelopes:U.events.slice(),inspector:Rt,audio:D.snapshot().events.slice(),hostAudio:j.ok?[...j.snapshot.events]:[],actions:W.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:he?.boundary??null,localization:he,participants:U.group?.inspectParticipants().map(on=>on.id)??[],layers:U.compositor?.layers().map(on=>on.id)??[],observation:se};return z({type:he?oi:is,kind:"state",payload:{scenarioId:n.id,seed:n.seed,boundary:he?.boundary,reason:he?.detail}}),he&&J(he),At},Ip=()=>({schemaVersion:ns,host:Be(a),lastDecision:d?Be(d):null,visual:I?.snapshot()??null,semantic:m?.snapshot()??null,bindings:S?.snapshot()??null,sequences:T?.snapshot()??null,audio:D.snapshot()}),ad=()=>{let $=Ri({cart:{id:n.id,version:"1"},seed:n.seed,clock:{framesElapsed:0},engineState:Dv(n.id,n.seed,0,Be(a)),hostState:Ip(),createdAt:"2026-09-05T00:00:00.000Z"});if(!$.ok)throw new Error($.errors.map(j=>j.detail).join("; "));return f=$.snapshot,$.snapshot},dd=$=>{let j=$.hostState;if(!$e(j)||!$e(j.host))throw new Error("Production scenario reload: hostState.host is required");let se=Be(j.host),ve=j.audio!==void 0&&j.audio!==null,he=pe=>{pe.code==="invalid-audio-sidecar"?(k=!1,E=pe):E=null,C=pe,y=pe,re(pe)};if(j.schemaVersion!==void 0&&j.schemaVersion!==ns){he(Ce("save-replay","invalid-schema","unsupported production scenario sidecar schemaVersion"));return}if(s.validateRestoreState){let pe=s.validateRestoreState(se);if(!pe.ok){he(Ce("save-replay","invalid-host-sidecar",pe.detail));return}}let le=q(se);if(!le.ok){he(le.error);return}let Ee=S?.snapshot().manifestId,Ot=[j.visual!==void 0&&j.visual!==null&&I?Fv(j.visual):null,j.semantic!==void 0&&j.semantic!==null&&m?Bv(j.semantic):null,j.bindings!==void 0&&j.bindings!==null&&S?$v(j.bindings,Ee):null,j.sequences!==void 0&&j.sequences!==null&&T?Hv(j.sequences,pe=>!!T?.get(pe)):null,ve?qv(j.audio):null];for(let pe of Ot)if(pe){he(pe);return}ve||(k=!1,E=null);let Rt=()=>({hostState:Be(a),lastDecision:d?Be(d):null,visual:I?I.snapshot():null,semantic:m?m.snapshot():null,bindings:S?S.snapshot():null,sequences:T?T.snapshot():null,audio:D.snapshot()}),vn=pe=>{a=Be(pe.hostState),d=pe.lastDecision?Be(pe.lastDecision):null;let At=[];return I&&pe.visual!==null&&At.push(I.restore(pe.visual)),m&&pe.semantic!==null&&At.push(m.restore(pe.semantic)),S&&pe.bindings!==null&&At.push(S.restore(pe.bindings)),T&&pe.sequences!==null&&At.push(T.restore(pe.sequences)),At.push(D.restore(pe.audio)),At.every(on=>on.ok)},Ct=pe=>{if(!vn(rn)){he(Ce("save-replay","invalid-schema","reload rollback failed after sidecar restore"));return}he(pe)},rn=Rt();if(a=se,d=$e(j.lastDecision)?Be(j.lastDecision):null,j.visual&&I){let pe=I.restore(j.visual);if(!pe.ok){Ct(Ce("pixels","invalid-visual-sidecar",pe.errors[0]?.message??"visual sidecar restore failed"));return}}if(j.semantic&&m){let pe=m.restore(j.semantic);if(!pe.ok){Ct(Ce("caption","invalid-semantic-sidecar",pe.errors[0]??"semantic sidecar restore failed"));return}}if(j.bindings&&S){let pe=S.restore(j.bindings);if(!pe.ok){Ct(Ce("binding","invalid-binding-sidecar",pe.errors[0]?.detail??"binding sidecar restore failed"));return}}if(j.sequences&&T){let pe=T.restore(j.sequences);if(!pe.ok){Ct(Ce("cue","invalid-sequence-sidecar",pe.errors[0]?.detail??"sequence sidecar restore failed"));return}}if(ve){let pe=D.restore(j.audio);if(!pe.ok){Ct(Ce("audio","invalid-audio-sidecar",pe.errors[0]?.detail??"audio sidecar restore failed"));return}k=!0,E=null}C=null,ne(),xe(),y&&y!==_&&(y=_),f=$},cd=($,j)=>{if(Y){let se=Lv($,j,U.layout,Y,G);if(se){ee=se,U.click(`#${se.selectedControlId}`);return}}ee=null,U.click($,j)},ud=async()=>{let $=U.group;if(!w||!$)return l={ok:!1,detail:"replay requires a mounted runtime group"},l;let j=await w.exportTrace(),se=hp({...e,scenario:n,createId:(()=>{let ve=0;return()=>`ps-${++ve}`})()});try{let ve=await la(j,se.harness.group);return l=ua(j.records,ve.report.records),ve.inspector.destroy(),l}finally{se.destroy()}},kp=async $=>{switch(W.push(Be($)),$.type){case"click":if(typeof $.selector=="string")U.click($.selector);else if(typeof $.x=="number"&&typeof $.y=="number")cd($.x,$.y);else throw new Error("click step requires selector or x,y");return;case"key":U.root.focus(),U.key($.key);return;case"focus":U.focus($.selector);return;case"step":await ir($.frames);return;case"viewport":{let j=$.kind==="mobile"?rs.mobile:$.kind==="desktop"?rs.desktop:o;U.setViewport($.width??j.width,$.height??j.height,$.dpr??j.deviceScaleFactor);return}case"reducedMotion":Bt($.value);return;case"mute":$.value?D.broker.mute():D.broker.unmute();return;case"failAsset":{let j={type:je,kind:"state",payload:{id:$.assetId}};D.handleHostEvent(j),I?.handleHostEvent(j);return}case"save":ad();return;case"reload":if(!f)throw new Error("reload requires a prior save");dd(f);return;case"replay":await ud();return}};return{scenario:n,harness:U,audio:D,inspector:B,goto(){Z(),U.goto()},click($,j){Z(),W.push(typeof $=="string"?{type:"click",selector:$}:{type:"click",x:$,y:j}),typeof $=="string"?U.click($):cd($,j)},key($){Z(),W.push({type:"key",key:$}),U.root.focus(),U.key($)},focus($){Z(),W.push({type:"focus",selector:$}),U.focus($)},setViewport($,j,se){Z(),W.push({type:"viewport",width:$,height:j,dpr:se}),U.setViewport($,j,se)},setReducedMotion($){Z(),W.push({type:"reducedMotion",value:$}),Bt($)},mute($=!0){Z(),W.push({type:"mute",value:$}),$?D.broker.mute():D.broker.unmute()},failAsset($){Z(),W.push({type:"failAsset",assetId:$});let j={type:je,kind:"state",payload:{id:$}};D.handleHostEvent(j),I?.handleHostEvent(j)},async step($=1){Z(),W.push({type:"step",frames:$}),await ir($)},applyHostIntent($){return Z(),oe($)},playSequence($,j=`${n.id}:${$}`){Z(),T?.playSequence($,{invocationId:j,idempotencyKey:j,bindings:c[$]??{}}),xe()},publish($){return Z(),z($)},save(){return Z(),W.push({type:"save"}),ad()},reload($){Z();let j=$??f;if(!j)throw new Error("reload requires a prior save or an explicit snapshot");W.push({type:"reload"}),dd(j)},async replay(){return Z(),W.push({type:"replay"}),ud()},async run($){Z(),U.goto();let j=$??n.steps??[];for(let se of j)await kp(se);return sd()},captureEvidence($){return Z(),sd($)},inspect(){return Z(),{host:Be(a),lastDecision:d,bindings:S?.inspect()??null,sequences:T?.inspect()??null,visual:I?.inspect()??null,semantic:m?.inspect()??null,audio:D.snapshot(),hostAudio:(()=>{let $=ke();return $.ok&&$.supplied?$.snapshot:null})(),participants:U.group?.inspectParticipants().map($=>$.id)??[],layers:U.compositor?.layers().map($=>$.id)??[],composition:(()=>{let $=De();if($)return $;if(_)return _;if(C)return C;if(O)return O;let j=ke();return j.ok?null:j.error})(),reducedMotion:h,reducedMotionPropagation:A,inputSurface:{controlIds:L.slice(),controls:H.map($=>({...$})),geometry:Y?Be(Y):null}}},destroy(){F||(F=!0,w?.unbind(),B.destroy(),S?.destroy(),T?.destroy(),I?.destroy(),m?.destroy(),D.destroy(),U.destroy())}}}var Gv=128,Kv=144,Wv=176,jv=224,Uv=0,Jv=15,zv=127,Yv=8192,Xv=16383;function Sp(e){return Number.isInteger(e)&&e>=0&&e<=15}function si(e){return Number.isInteger(e)&&e>=0&&e<=127}function ss(e,t){return e&240|t&15}function Qv(e){return e&15}function od(e){if(!Sp(e.channel))return;let t=e.channel;if(e.kind==="noteon"||e.kind==="noteoff"){let n=e.velocity??(e.kind==="noteon"?100:0);if(!si(e.note)||!si(n))return;let r=e.kind==="noteon"?144:128;return Uint8Array.from([ss(r,t),e.note,n])}if(e.kind==="cc")return!si(e.controller)||!si(e.value)?void 0:Uint8Array.from([ss(176,t),e.controller,e.value]);if(e.kind==="pitch"&&!(!Number.isInteger(e.value)||e.value<0||e.value>16383))return Uint8Array.from([ss(224,t),e.value&127,e.value>>7&127])}function nd(e){let t=rd(e);if(t.length===0)return;let n=t[0],r=n&240,i=n&15;if(n>=128&&t.length>=3){if(r===144||r===128){let o=t[1],s=t[2];return{kind:r===128||s===0?"noteoff":"noteon",channel:i,note:o,velocity:s,status:n,data:t}}if(r===176)return{kind:"cc",channel:i,controller:t[1],value:t[2],status:n,data:t};if(r===224){let o=t[1]|t[2]<<7;return{kind:"pitch",channel:i,value:o,status:n,data:t}}}return{kind:"raw",channel:n>=128?i:void 0,status:n,data:t}}function rd(e){return e instanceof Uint8Array?new Uint8Array(e):Uint8Array.from(e)}function Zv(e){return Array.from(e)}function eS(e){if(!("kind"in e))return!1;let t=e.kind;return t==="noteon"||t==="noteoff"||t==="cc"||t==="pitch"}function bp(e){if(e instanceof Uint8Array)return rd(e);if(Array.isArray(e))return e.every(t=>Number.isInteger(t)&&t>=0&&t<=255)?Uint8Array.from(e):void 0;if(!(typeof e!="object"||e===null)){if("data"in e&&e.data instanceof Uint8Array&&e.data.length>0)return rd(e.data);if(eS(e))return od(e)}}function tS(e,t){return e==="*"?!0:e==="note"?t.kind==="noteon"||t.kind==="noteoff":t.kind===e}function nS(e){return{send(t,n){e.send(Array.from(t),n)}}}function rS(e){if(typeof navigator>"u")return;let t=navigator.requestMIDIAccess;if(typeof t=="function")return t.call(navigator,e)}function vp(e){if(e instanceof Error&&e.message)return e.message;if(typeof e=="string"&&e.length>0)return e}var id=class{constructor(t={}){this.listeners=[];this.attachedInputs=new Set;this.inputCount=0;this.outputCount=0;this.destroyed=!1;this.output=t.output,this.outputOwned=t.output!=null,this.requestMIDIAccess=t.requestMIDIAccess,this.onHardwareMessage=this.onHardwareMessage.bind(this),this.onAccessStateChange=this.onAccessStateChange.bind(this)}subscribe(t,n){if(this.destroyed)return()=>{};let r={kind:t,listener:n};return this.listeners.push(r),()=>{this.listeners=this.listeners.filter(i=>i!==r)}}inject(t){if(this.destroyed)return;let n=bp(t);if(!n)return;let r=nd(n);r&&this.dispatch(r)}sendNoteOn(t,n,r=100){return this.sendEncoded({kind:"noteon",channel:t,note:n,velocity:r})}sendNoteOff(t,n,r=0){return this.sendEncoded({kind:"noteoff",channel:t,note:n,velocity:r})}sendCc(t,n,r){return this.sendEncoded({kind:"cc",channel:t,controller:n,value:r})}sendPitch(t,n){return this.sendEncoded({kind:"pitch",channel:t,value:n})}send(t){if(this.destroyed)return{ok:!1,reason:"destroyed"};let n=bp(t);return!n||n.length===0?{ok:!1,reason:"invalid",detail:"empty MIDI payload"}:this.write(n)}async requestAccess(t){if(this.destroyed)return{ok:!1,reason:"destroyed"};if(this.access)return{ok:!0,inputs:this.inputCount,outputs:this.outputCount,sysexEnabled:this.access.sysexEnabled};let n=this.requestMIDIAccess??rS,r=typeof n=="function"?n({sysex:t?.sysex===!0}):void 0;if(r==null)return{ok:!1,reason:"unavailable",detail:"navigator.requestMIDIAccess is not available"};try{let i=await r;return this.destroyed?{ok:!1,reason:"destroyed"}:(this.attachAccess(i),{ok:!0,inputs:this.inputCount,outputs:this.outputCount,sysexEnabled:i.sysexEnabled})}catch(i){return{ok:!1,reason:"denied",detail:vp(i)}}}destroy(){this.destroyed||(this.destroyed=!0,this.detachHardware(),this.listeners=[],this.access=void 0,this.outputOwned||(this.output=void 0))}sendEncoded(t){if(this.destroyed)return{ok:!1,reason:"destroyed"};let n=od(t);return n?this.write(n):{ok:!1,reason:"invalid",detail:"channel, data, or pitch out of range"}}write(t){if(!this.output)return{ok:!1,reason:"no-port"};try{this.output.send(Zv(t))}catch(n){return{ok:!1,reason:"invalid",detail:vp(n)}}return{ok:!0,data:t}}dispatch(t){for(let n of this.listeners)tS(n.kind,t)&&n.listener(t)}deliverBytes(t){let n=nd(t);n&&this.dispatch(n)}onHardwareMessage(t){if(this.destroyed)return;let n="data"in t?t.data:void 0;!n||n.length===0||this.deliverBytes(n)}onAccessStateChange(){this.destroyed||!this.access||this.syncPorts(this.access)}attachAccess(t){this.access=t,this.syncPorts(t),t.addEventListener?.("statechange",this.onAccessStateChange)}syncPorts(t){let n=new Set;t.inputs.forEach(a=>n.add(a));for(let a of[...this.attachedInputs])n.has(a)||(a.removeEventListener("midimessage",this.onHardwareMessage),this.attachedInputs.delete(a));t.inputs.forEach(a=>{this.attachedInputs.has(a)||(a.addEventListener("midimessage",this.onHardwareMessage),this.attachedInputs.add(a))});let r=new Set,i=0;t.inputs.forEach(()=>{i+=1});let o=0;if(t.outputs.forEach(a=>{o+=1,r.add(a)}),this.inputCount=i,this.outputCount=o,this.outputOwned||(this.adoptedHardwareOutput&&!r.has(this.adoptedHardwareOutput)&&(this.output=void 0,this.adoptedHardwareOutput=void 0),this.output))return;let s;t.outputs.forEach(a=>{s||(s=a)}),s&&(this.adoptedHardwareOutput=s,this.output=nS(s))}detachHardware(){for(let t of this.attachedInputs)t.removeEventListener("midimessage",this.onHardwareMessage);this.attachedInputs.clear(),this.access?.removeEventListener?.("statechange",this.onAccessStateChange),this.outputOwned||(this.output=void 0,this.adoptedHardwareOutput=void 0),this.inputCount=0,this.outputCount=0}};export{zm as ANCHOR_ORIGINS,je as ASSET_FAILED_EVENT,zd as ASSET_FAILURE_CODES,Jd as ASSET_KINDS,ze as ASSET_READY_EVENT,hm as AUDIO_CUE_EVENTS,un as AUDIO_CUE_FAILED_EVENT,Vi as AUDIO_CUE_SCHEDULED_EVENT,Fi as AUDIO_CUE_SKIPPED_EVENT,Li as AUDIO_CUE_SNAPSHOT_SCHEMA_VERSION,mr as AUDIO_CUE_STARTED_EVENT,xc as CAPABILITY_ASSET_KINDS,Hi as CAPABILITY_BLEND_MODES,Oc as CAPABILITY_CART_KINDS,qi as CAPABILITY_CLEAR_POLICIES,Hn as CAPABILITY_DEVICE_GRANTS,_c as CAPABILITY_INTEGRATIONS,wc as CAPABILITY_MANAGERS,wm as CAPABILITY_MANIFEST_VERSION,Tc as CAPABILITY_PHASES,Ca as COMPOSITOR_BLEND_MODES,Nh as COMPOSITOR_CLEAR_POLICIES,Mh as COMPOSITOR_SOURCE_KINDS,Qo as CONTENT_REVISION_ACTIVATED_EVENT,ni as CONTENT_REVISION_DIAGNOSTIC_EVENT,ti as CONTENT_REVISION_DISCOVERED_EVENT,Ql as CONTENT_REVISION_ERROR_CODES,Kb as CONTENT_REVISION_EVENTS,Gt as CONTENT_REVISION_MANIFEST_VERSION,Xo as CONTENT_REVISION_REJECTED_EVENT,nr as CONTENT_REVISION_ROLLED_BACK_EVENT,ei as CONTENT_REVISION_SNAPSHOT_SCHEMA_VERSION,zo as CONTENT_REVISION_STAGING_EVENT,rr as CONTENT_REVISION_SUPERSEDED_EVENT,Yo as CONTENT_REVISION_VALIDATED_EVENT,Jm as COORDINATE_SPACES,Ht as CUE_CANCELLED_EVENT,zt as CUE_COMPLETED_EVENT,fm as CUE_LIFECYCLE_EVENTS,Nt as CUE_REPLACED_EVENT,$t as CUE_STARTED_EVENT,ai as CYBERART_CANVAS_ATTR,es as DEFAULT_BROWSER_VIEWPORT,ks as DEFAULT_DUCK_GAIN,Yc as DEFAULT_GROUP_HEIGHT,zc as DEFAULT_GROUP_WIDTH,wi as DEFAULT_MAX_HOPS,to as DEFAULT_MAX_INSPECTOR_RECORDS,ul as DEFAULT_MAX_SELECTION_RECORDS,fu as DEFAULT_PORTAL_MAX_DEPTH,rs as DEFAULT_PRODUCTION_SCENARIO_VIEWPORTS,Zt as DEFAULT_SENSITIVE_KEYS,ki as ENGINE_SNAPSHOT_RUNTIME,fr as EVENT_ENVELOPE_VERSION,fg as EXECUTABLE_MODULE_ERROR_CODES,Ki as GEOMETRY_CONTRACT_VERSION,Yt as HOST_GRANT_SNAPSHOT_SCHEMA_VERSION,cp as HOST_OWNED_AUDIO_EVENT_KINDS,Ol as HOST_STATE_ACCEPTED_EVENT,Cn as HostChannel,hc as INVALID_PRESENTATION_MODEL_MESSAGE,We as IncompatibleCartStateError,uo as JOB_APPLIED_EVENT,so as JOB_AWAITING_EVALUATION_EVENT,po as JOB_CANCELED_EVENT,io as JOB_CLAIMED_EVENT,fa as JOB_DIAGNOSTIC_EVENT,Du as JOB_EVALUATOR_DECISIONS,lo as JOB_FAILED_EVENT,fy as JOB_LIFECYCLE_EVENTS,Mr as JOB_ORCHESTRATION_SNAPSHOT_SCHEMA_VERSION,oo as JOB_PROGRESS_EVENT,Lr as JOB_QUEUED_EVENT,co as JOB_READY_EVENT,Nu as JOB_REDACTED_KEYS,xu as JOB_RESULT_REF_SCHEMA_VERSION,Ou as JOB_RETRYABILITY,ao as JOB_RETRY_SCHEDULED_EVENT,_u as JOB_STATES,ro as JOB_SUBMITTED_EVENT,fo as JOB_SUPERSEDED_EVENT,di as KeyboardManager,Ii as LEGACY_SNAPSHOT_SCHEMA_VERSION,Nr as LOADING_INDICATOR_CANCELED_EVENT,Dr as LOADING_INDICATOR_COMPLETED_EVENT,vu as LOADING_INDICATOR_CONTEXTS,Wg as LOADING_INDICATOR_DIAGNOSTIC_CODES,Qt as LOADING_INDICATOR_DIAGNOSTIC_EVENT,Eu as LOADING_INDICATOR_EVENTS,Un as LOADING_INDICATOR_FAILED_EVENT,bu as LOADING_INDICATOR_MODES,Xi as LOADING_INDICATOR_MOTIFS,jn as LOADING_INDICATOR_PARAM_SCHEMA_VERSION,Su as LOADING_INDICATOR_PHASES,Yi as LOADING_INDICATOR_SNAPSHOT_SCHEMA_VERSION,_r as LOADING_INDICATOR_STARTED_EVENT,Or as LOADING_INDICATOR_UPDATED_EVENT,Jv as MIDI_CHANNEL_MAX,Uv as MIDI_CHANNEL_MIN,Wv as MIDI_CONTROL_CHANGE,zv as MIDI_DATA_MAX,Gv as MIDI_NOTE_OFF,Kv as MIDI_NOTE_ON,jv as MIDI_PITCH_BEND,Yv as MIDI_PITCH_CENTER,Xv as MIDI_PITCH_MAX,id as MidiManager,Pr as PORTAL_ABORTED_EVENT,Xt as PORTAL_ENTERED_EVENT,sa as PORTAL_EXCLUSIVE_GRANTS,Ar as PORTAL_EXITED_EVENT,Mg as PORTAL_LIFECYCLE_EVENTS,Rr as PORTAL_LIFECYCLE_SNAPSHOT_SCHEMA_VERSION,mu as PORTAL_METAPHORS,gu as PORTAL_OUTCOME_KINDS,Cr as PORTAL_OUTCOME_SCHEMA_VERSION,Vn as PRESENTATION_ADAPTER_VERSION,Hl as PRESENTATION_AUDIO_CAPABILITY_STATUSES,Uo as PRESENTATION_BINDING_APPLIED_EVENT,Qr as PRESENTATION_BINDING_DIAGNOSTIC_EVENT,Yl as PRESENTATION_BINDING_ERROR_CODES,Jl as PRESENTATION_BINDING_EVENTS,Go as PRESENTATION_BINDING_MANIFEST_VERSION,Xr as PRESENTATION_BINDING_REJECTED_EVENT,Yr as PRESENTATION_BINDING_SNAPSHOT_SCHEMA_VERSION,zl as PRESENTATION_BINDING_TARGET_KINDS,$l as PRESENTATION_COMPLETION_RULES,Bl as PRESENTATION_INTERRUPTION_POLICIES,ql as PRESENTATION_INVOCATION_PHASES,Ns as PRESENTATION_MODEL_EVENT,yc as PRESENTATION_PHASES,qo as PRESENTATION_SEQUENCE_COMPLETED_EVENT,La as PRESENTATION_SEQUENCE_DIAGNOSTIC_EVENT,Vl as PRESENTATION_SEQUENCE_EVENTS,Ma as PRESENTATION_SEQUENCE_FAILED_EVENT,Ho as PRESENTATION_SEQUENCE_INTERRUPTED_EVENT,Mo as PRESENTATION_SEQUENCE_PRELOADING_EVENT,Lo as PRESENTATION_SEQUENCE_READY_EVENT,No as PRESENTATION_SEQUENCE_REQUESTED_EVENT,$o as PRESENTATION_SEQUENCE_SKIPPED_EVENT,Jr as PRESENTATION_SEQUENCE_SNAPSHOT_SCHEMA_VERSION,Vo as PRESENTATION_SEQUENCE_STARTED_EVENT,Bo as PRESENTATION_SEQUENCE_STEP_COMPLETED_EVENT,Fo as PRESENTATION_SEQUENCE_STEP_STARTED_EVENT,im as PRESENTATION_SUBSCRIBE_PATTERNS,Fl as PRESENTATION_TRACK_KINDS,gc as PRESENTATION_UNSUPPORTED_EVENT,ap as PRODUCTION_SCENARIO_BOUNDARIES,os as PRODUCTION_SCENARIO_DIAGNOSTIC_EVENT,dp as PRODUCTION_SCENARIO_ERROR_CODES,sp as PRODUCTION_SCENARIO_EVENTS,oi as PRODUCTION_SCENARIO_FAILED_EVENT,is as PRODUCTION_SCENARIO_OBSERVED_EVENT,ed as PRODUCTION_SCENARIO_SCHEMA_VERSION,ns as PRODUCTION_SCENARIO_SNAPSHOT_SCHEMA_VERSION,up as PRODUCTION_SCENARIO_VIEWPORT_PRESETS,ci as PointerManager,St as REDACTED_VALUE,pp as REDUCED_MOTION_ACTIVE_SEQUENCE_POLICY,Ev as REDUCED_MOTION_PARTICIPANT_IDS,ht as REJECTED_EVENT_TYPE,Sg as REMOTE_CART_ERROR_CODES,Zs as REMOTE_CART_GRANTS,Wi as REMOTE_CART_MANIFEST_VERSION,ji as REMOTE_CART_SIGNATURE_ALG,Zi as REPLAY_INSPECTOR_SCHEMA_VERSION,jm as ROUND_TRIP_TOLERANCE,Um as ROUND_TRIP_TOLERANCE_CANVAS_PX,sn as Random,Ui as RemoteCartCapabilityError,ll as SELECTION_DECISION_KINDS,Ia as SELECTION_REASON_CODES,Po as SELECTION_TRACE_SCHEMA_VERSION,pl as SELECTION_TRACE_SENSITIVE_KEYS,Al as SEMANTIC_APPEARANCE_KEYS,Rl as SEMANTIC_GEOMETRY_KINDS,Cl as SEMANTIC_HIT_TEST_POLICIES,Kh as SEMANTIC_INTERACTION_KEYS,Kr as SEMANTIC_LAYER_SNAPSHOT_SCHEMA_VERSION,wn as SILENT_ASSET_FALLBACK_REF,Ue as SNAPSHOT_SCHEMA_VERSION,bs as UNVERSIONED_CART_VERSION,eb as VISUAL_LAYER_EVENTS,Ur as VISUAL_LAYER_FAILED_EVENT,tb as VISUAL_LAYER_FAILURE_CODES,jr as VISUAL_LAYER_HIDDEN_EVENT,_l as VISUAL_LAYER_INCOMING_SUFFIX,wl as VISUAL_LAYER_KINDS,_o as VISUAL_LAYER_REVEALED_EVENT,Wr as VISUAL_LAYER_SNAPSHOT_SCHEMA_VERSION,xl as VISUAL_LAYER_TRANSITIONS,Do as VISUAL_LAYER_TRANSITION_COMPLETED_EVENT,Oo as VISUAL_LAYER_TRANSITION_STARTED_EVENT,bo as WORLD_DISCOVERED_EVENT,$u as WORLD_EDGE_ACCESS,ho as WORLD_EDGE_ADDED_EVENT,Bu as WORLD_EDGE_VISIBILITIES,Hu as WORLD_ENTITY_KINDS,qu as WORLD_ENTITY_STATUSES,$r as WORLD_GRAPH_DIAGNOSTIC_EVENT,xy as WORLD_GRAPH_EVENTS,zn as WORLD_GRAPH_SNAPSHOT_SCHEMA_VERSION,Fu as WORLD_MAP_LAYERS,yo as WORLD_NODE_ADDED_EVENT,go as WORLD_NODE_KINDS,Ro as WORLD_PATCH_ACCEPTED_EVENT,Qn as WORLD_PATCH_DIAGNOSTIC_EVENT,tl as WORLD_PATCH_ERROR_CODES,Ky as WORLD_PATCH_EVENTS,Zu as WORLD_PATCH_OPS,el as WORLD_PATCH_PRECONDITION_TYPES,nl as WORLD_PATCH_REDACTED_KEYS,Co as WORLD_PATCH_REJECTED_EVENT,Hr as WORLD_PATCH_SCHEMA_VERSION,Io as WORLD_PATCH_SNAPSHOT_SCHEMA_VERSION,Ao as WORLD_PATCH_SUPERSEDED_EVENT,Br as WORLD_TRANSIT_EVENT,wa as appearanceForState,kc as applyCueEasing,ur as applySnapshotMigrations,dn as assetStatusEvent,Zm as assetToNormalized,Of as attachCartStatePersistence,Ec as attachPresentationAdapter,Oh as attachSelectionTrace,qg as cabinetPortal,ta as canonicalizeRemoteCartBody,fi as canonicalizeSeed,Wc as canvasToCss,jc as canvasToNormalized,Wm as capabilityManifestToJSON,sb as captureVisualLayers,An as cloneSnapshotJson,em as comparePayloadSchemas,ua as compareReplayTraces,zb as contentRevisionEventContracts,Ae as createAssetFailure,cn as createAssetPreloader,Rs as createAudioBroker,Ac as createAudioCueTimeline,Ya as createBrowserHarness,Aa as createCompositor,iv as createContentRevisionActivator,rm as createContractRegistry,pr as createDeclaredAssetResolver,Hd as createEngineSnapshotMigrations,ws as createEventRouter,Ys as createExecutableModuleHost,gf as createFixtureAssetResolver,$s as createHeadlessAudioAdapter,Ey as createHeadlessJobWorker,Gn as createHostGrantSet,yf as createHostedAssetResolver,wy as createJobCoordinator,tg as createLandmarkRegistry,dy as createLoadingIndicatorController,Mu as createMemoryJobPersistence,sl as createMemoryWorldPersistence,uv as createPlaywrightCompatibleAdapter,Kg as createPortalLifecycle,Ga as createPresentationBindingRuntime,Gs as createPresentationLayout,Ds as createPresentationModelEvent,Va as createPresentationSequencePlayer,bt as createPresentationTimeline,hp as createProductionScenarioRunner,Sc as createReferencePresentationCart,Og as createRemoteCartRegistry,Ng as createRemoteCartSandbox,ev as createRemoteContentAdapter,no as createReplayInspector,Cs as createRuntime,Js as createRuntimeGroup,Dh as createSelectionTrace,Oa as createSemanticLayerController,qd as createSnapshotMigrationRegistry,Zb as createStaticContentAdapter,ui as createVirtualClock,Da as createVisualLayerController,In as createWallClock,Gy as createWorldGraph,bh as createWorldPatchApplier,Kc as cssToCanvas,ln as cssToNormalized,Gd as defaultSnapshotMigrationRegistry,yr as defineCapabilityManifest,Xe as defineDiagnostic,Os as defineIntent,Jo as definePresentationBindings,zr as definePresentationSequence,mp as defineProductionScenario,zi as defineRemoteCartManifest,Ri as defineSnapshot,ce as defineStateEvent,tm as deriveAttachOptions,Dd as describeReplayMismatch,dr as detectSnapshotSchemaVersion,ng as drawGeometryDebug,od as encodeMidiMessage,of as engineStateFromEnvelope,qa as evaluatePresentationBindings,pc as familyPatternForType,bn as fnv1aHex,qn as freezeCapabilityBag,xa as geometryKindsOf,ea as hmacSha256Hex,cc as inferEventKind,xn as isAssetFailure,Yd as isAssetFailureCode,_n as isAssetKind,Cc as isAudioCueEventType,ov as isContentRevisionErrorCode,mm as isCueLifecycleType,fp as isHostOwnedAudioEventKind,Pn as isLegacyCartStateBundle,ny as isLoadingIndicatorEventType,ry as isLoadingIndicatorMode,Sp as isMidiChannel,si as isMidiData,Mb as isPresentationBindingErrorCode,Nb as isPresentationBindingEventType,Ms as isPresentationModel,bc as isPresentationPhase,Gl as isPresentationSequenceEventType,Cv as isProductionScenarioBoundary,Rv as isProductionScenarioErrorCode,kv as isProductionScenarioEventType,Ph as isSelectionDecisionKind,Ah as isSelectionReasonCode,wo as isSemanticBlendMode,zh as isSemanticGeometryKind,Ta as isSemanticHitTestPolicy,Yp as isSnapshotEnvelope,Xp as isVersionedSnapshot,ob as isVisualLayerEventType,Dl as isVisualLayerKind,Nl as isVisualLayerTransitionKind,oh as isWorldPatchErrorCode,Sy as jobEventContracts,lc as kindSegmentInType,na as listRequestedRemoteCartGrants,Dg as loadRemoteCart,ty as loadingIndicatorEventContracts,gp as localizeProductionScenarioFailure,uc as matchEventPattern,Qv as midiChannelFromStatus,ss as midiStatus,pm as mountPresentationAdapter,xi as normalizeEvent,Qm as normalizedToAsset,eg as normalizedToCanvas,Ks as normalizedToCss,Gg as paintingPortal,gr as parseAudioCueSnapshot,Km as parseCapabilityManifest,Zo as parseContentRevisionCatalog,ig as parseGeometry,Qi as parseLoadingIndicatorParams,Ru as parseLoadingIndicatorSnapshot,nd as parseMidiBytes,uu as parseRemoteCartManifest,Ci as parseSnapshot,Xm as pointFromOrigin,pn as pointInHitbox,Pl as pointInSemanticGeometry,vr as pointerToRegion,Lb as presentationBindingEventContracts,qt as presentationBindingTargetKey,yb as presentationSequenceEventContracts,Iv as productionScenarioEventContracts,_h as recordSelectionDecision,Uc as rectToCanvas,Ws as rectToCss,js as regionToViewport,Rf as registerCartStateHotkeys,lu as remoteCartProvenanceForSnapshot,la as replayExportedTrace,vs as resolveImportableCartState,mi as resolveRuntimeSeed,Ss as restoreSnapshotFromUnknown,Qd as rewriteHostedAssetRef,Tm as scheduleAudioCue,rg as serializeGeometry,Ir as sha256Hex,_g as signRemoteCartManifest,an as snapshotErrorsToMessage,cr as snapshotFromCartBundle,hr as validateCapabilityManifest,Us as validateGeometry,xs as validatePayloadAgainstSchema,Tn as validateSnapshot,nm as verifyAttachOptions,kr as verifyRemoteCartSignature,Ml as visualIncomingLayerId,qy as worldGraphEventContracts,ih as worldPatchEventContracts};