handler-playable-sdk 0.1.10 → 0.1.11

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.
@@ -1,4 +1,4 @@
1
- var u={};function I(e,t,n=!1){u[e]||(u[e]=[]),u[e].push({fn:t,once:n})}function V(e,t){if(u[e]){if(!t){delete u[e];return}u[e]=u[e].filter(n=>n.fn!==t)}}function P(e,...t){let n=u[e];if(n)for(let i of[...n])i.fn(...t),i.once&&V(e,i.fn)}function a(e,t){I(e,t,!0)}var R={name:"handler-playable-sdk",version:"0.1.10",description:"Handler Playable SDK v0.1 with contract-aligned surface (root sandbox, canonical event envelope).",main:"dist/index.js",module:"dist/index.mjs",types:"dist/index.d.ts",exports:{".":{types:"./dist/index.d.ts",import:"./dist/index.mjs",require:"./dist/index.js"},"./pixi":{types:"./dist/pixi/index.d.ts",import:"./dist/pixi/index.mjs",require:"./dist/pixi/index.js"},"./three":{types:"./dist/three/index.d.ts",import:"./dist/three/index.mjs",require:"./dist/three/index.js"}},scripts:{build:"tsup src/index.ts src/pixi/index.ts src/three/index.ts --format cjs,esm --dts --clean --minify",lint:"eslint 'src/**/*.{ts,tsx}'",typecheck:"tsc --noEmit",prepublishOnly:"npm run build"},author:"Handler",license:"MIT",publishConfig:{access:"public"},repository:{type:"git",url:"https://github.com/HandlerAIGames/handler-playable-sdk.git"},files:["dist","LICENSE","README.md"],peerDependencies:{"pixi.js":"^8.0.0",three:"^0.160.0"},peerDependenciesMeta:{"pixi.js":{optional:!0},three:{optional:!0}},devDependencies:{"@types/three":"^0.160.0",eslint:"^8.57.1","pixi.js":"^8.8.1",three:"^0.160.0","ts-node":"^10.9.2",tsup:"^8.4.0",typescript:"^5.7.2"}};var s=0,Se=s++,Z=s++,ee=s++,te=s++,ne=s++,ie=s++,oe=s++,re=s++,ae=s++,se=s++,de=s++,le=s++,r=Se;function ce(){return r===Z}function ue(){return r===ee}function fe(){return r===te}function pe(){return r===ne}function g(){return r===ie}function y(){return r===oe}function me(){return r===re}function ge(){return r===ae}function ye(){return r===se}function H(){return r===de}function F(){return r===le}function we(){let e=typeof AD_PROTOCOL!="undefined"?AD_PROTOCOL:"none",t=typeof AD_NETWORK!="undefined"?AD_NETWORK:"web_embed";if(e==="mraid")try{mraid.getState(),r=Z;return}catch{}else if(e==="dapi")try{dapi.isReady(),r=ee;return}catch{}if(t==="facebook")try{typeof FbPlayableAd!="undefined"&&(r=te)}catch{}else if(t==="google")try{typeof ExitApi!="undefined"&&(r=ne)}catch{}else if(t==="mintegral")window.gameReady&&(r=ie);else if(t==="tapjoy")window.TJ_API&&(r=oe);else if(t==="tiktok")window.openAppStore&&(r=re);else if(t==="smadex")try{window.smxTracking&&(r=ae)}catch{}else if(t==="snapchat")try{window.ScPlayableAd&&(r=se)}catch{}else t==="vungle"?r=de:(e==="nucleo"||t==="nucleo")&&(r=le)}var Ee={mechanic_id:"TODO_mechanic_id",variant_id:"TODO_variant_id",deployment_id:"TODO_deployment_id",export_id:"TODO_export_id",profile_id:"TODO_profile_id",instance_id:"default"},Ce=Math.random().toString(36).slice(2),w=null,A={...Ee},Ae="web_embed",De={},G=!1,E=!1,T=!1,ke=!1,B=1,W=0,z=!1,d=!1,j="",h=Math.floor(window.innerWidth),b=Math.floor(window.innerHeight),K=h>b,l=!1,k=!1,he=!1,be=!1,U=!1,M=null;function _e(){if(w)return w;let e=document.createElement("div");return e.id="handler-root",e.setAttribute("data-handler-root","true"),document.body.appendChild(e),w=e,e}function N(e){switch(e){case"interaction":return"engagement";case"finish":return"complete";case"install":return"cta_click";default:return e}}function Te(e,t){return{event_name:e,ts:Date.now(),session_id:Ce,deployment_id:A.deployment_id,variant_id:A.variant_id,export_profile_id:A.profile_id,instance_id:A.instance_id||"default",env:Ae==="mraid"?"mraid":"web",payload:t}}function o(e,t){let n=N(e),i=Te(n,t);P(n,i),n!==e&&P(e,i)}function O(){M&&(M(h,b),M=null)}function _(e){B=e,o("volume",e)}function v(e){e&&(ke=!0),!T&&(T=!0,o("pause"),_(0))}function S(e){!e&&ke||T&&(T=!1,o("resume"),_(B))}function p(e,t){h=Math.floor(e||window.innerWidth),b=Math.floor(t||window.innerHeight),K=h>b,o("resize",{width:h,height:b})}function Le(){if(ce())try{let e=mraid.getMaxSize();p(e.width,e.height);let t=()=>{mraid.isViewable()&&mraid.getState()!=="hidden"?S():v()};if(mraid.addEventListener("viewableChange",t),mraid.addEventListener("stateChange",t),mraid.addEventListener("sizeChange",()=>{let n=mraid.getMaxSize();p(n.width,n.height)}),mraid.getAudioVolume){let n=mraid.getAudioVolume();_(n?1:0)}if(mraid.addEventListener("audioVolumeChange",n=>{n!==null&&_(n>0?1:0)}),mraid.addEventListener("error",(n,i)=>{console.warn("mraid error:",n,"action:",i)}),z=!0,mraid.isViewable()&&mraid.getState()!=="hidden")l=!0,o("boot"),o("view"),o("ready"),d=!0,O();else{let n=()=>{l=!0,o("boot"),o("view"),o("ready"),d=!0,O()};mraid.addEventListener("ready",n)}}catch(e){console.warn("MRAID hook skipped",e)}}function Ie(){if(ue())try{let e=dapi.getScreenSize();p(e.width,e.height),dapi.addEventListener("viewableChange",n=>{n.isViewable?S():v()}),dapi.addEventListener("adResized",n=>{let i=dapi.getScreenSize();p(n.width||i.width,n.height||i.height)});let t=dapi.getAudioVolume();if(_(t?1:0),dapi.addEventListener("audioVolumeChange",n=>_(n?1:0)),z=!0,dapi.isViewable())l=!0,o("boot"),o("view"),o("ready"),d=!0,O();else{let n=()=>{l=!0,o("boot"),o("view"),o("ready"),d=!0,O()};dapi.addEventListener("ready",n)}}catch(e){console.warn("DAPI hook skipped",e)}}function ve(){let e=()=>{l||document.visibilityState==="visible"&&(document.readyState==="complete"||document.readyState==="interactive")&&(l=!0,o("boot"),o("view"),o("ready"),d=!0,O(),k&&(k=!1,f.start()))};window.addEventListener("resize",()=>p()),document.addEventListener("visibilitychange",()=>{document.visibilityState==="visible"?(S(),e()):v()}),document.readyState==="complete"||document.readyState==="interactive"?e():window.addEventListener("load",e),z=!0}function Pe(){let e=t=>{typeof TouchEvent!="undefined"&&t instanceof TouchEvent&&(he=!0),!(he&&t instanceof MouseEvent)&&(W+=1,o("interaction",W))};document.addEventListener("mousedown",e),document.addEventListener("touchstart",e)}function Re(e){var i,c,x,C,J,D,q,L,$,X,Y,Q;let t=typeof AD_PROTOCOL!="undefined"?AD_PROTOCOL:"none";if((typeof AD_NETWORK!="undefined"?AD_NETWORK:"web_embed")==="google")try{(i=window.ExitApi)==null||i.exit();return}catch{}if(t==="mraid"&&typeof mraid!="undefined")mraid.open(e||"");else if(t==="dapi"&&typeof dapi!="undefined")dapi.openStoreUrl();else if(y())(x=(c=window.TJ_API)==null?void 0:c.click)==null||x.call(c);else if(fe())(J=(C=window.FbPlayableAd)==null?void 0:C.onCTAClick)==null||J.call(C);else if(ye())(q=(D=window.ScPlayableAd)==null?void 0:D.onCTAClick)==null||q.call(D);else if(ge())try{($=(L=window.smxTracking)==null?void 0:L.redirect)==null||$.call(L)}catch(m){console.warn("Smadex redirect failed",m)}else if(pe()){let m=window.ExitApi;m&&typeof m.exit=="function"?m.exit(e||j||""):e&&window.open(e)}else g()?(X=window.install)==null||X.call(window):me()?(Y=window.openAppStore)==null||Y.call(window):H()?(Q=parent==null?void 0:parent.postMessage)==null||Q.call(parent,"download","*"):e&&window.open(e)}function Me(){let e=typeof AD_NETWORK!="undefined"?AD_NETWORK:"web_embed",t=n=>{if(!n)return;let i=new Image;i.src=n};if(e==="bigabid"){let n=window.BIGABID_BIDTIMEMACROS;if(!n)return;a("view",()=>t(n.mraid_viewable)),a("start",()=>t(n.game_viewable)),a("engagement",()=>t(n.engagement));let i=()=>t(n.complete);a("complete",i),I("engagement",c=>{var x;((x=c==null?void 0:c.payload)==null?void 0:x.count)>3&&i()}),a("cta_click",()=>t(n.click))}else if(e==="inmobi"){let n=window.INMOBI_DSPMACROS;if(!n)return;a("view",()=>t(n.Ad_Load_Start)),a("start",()=>t(n.Ad_Viewable)),a("engagement",()=>t(n.First_Engagement)),a("complete",()=>t(n.Gameplay_Complete)),a("cta_click",()=>t(n.DSP_Click)),a("start",()=>{[5,10,15,20,25,30].forEach(i=>setTimeout(()=>t(n[`Spent_${i}_Seconds`]),i*1e3))})}}function Ne(){if(!y())return;let e=window.TJ_API;e&&e.setPlayableAPI&&e.setPlayableAPI({skipAd:()=>{try{f.finish()}catch(t){console.warn("Tapjoy skip failed",t)}}})}function xe(){var t,n,i;let e=window.TJ_API;(t=e==null?void 0:e.objectiveComplete)==null||t.call(e),(n=e==null?void 0:e.playableFinished)==null||n.call(e),(i=e==null?void 0:e.gameplayFinished)==null||i.call(e)}function je(){g()&&(window.mintGameStart=()=>{S(!0),p()},window.mintGameClose=()=>{v(!0)})}function ze(){if(!F())return;let e=window.NUC;!e||!e.trigger||(f.on("cta_click",()=>{var t,n;return(n=(t=e.trigger).convert)==null?void 0:n.call(t,j)}),f.on("complete",()=>{var t,n;return(n=(t=e.trigger).tryAgain)==null?void 0:n.call(t)}))}var f={init(e={},t){if(Ae=e.profile||"web_embed",De=e.consent||{},A={...Ee,...e.ids||{}},w=e.rootEl||w,j=e.destinationUrl||(/android/i.test(navigator.userAgent)?"https://play.google.com/store":"https://www.apple.com/app-store/"),t&&(M=t),o("init"),document.body.oncontextmenu=()=>!1,_e(),Ve(w),we(),Le(),Ie(),!z){if(document.readyState==="complete")ve();else if(!be){be=!0;let n=()=>{ve(),window.removeEventListener("load",n),document.removeEventListener("DOMContentLoaded",n)};window.addEventListener("load",n),document.addEventListener("DOMContentLoaded",n)}}Pe(),Me(),Ne(),je(),ze(),console.log(`%c @handler/playable-sdk %c v${R.version||"0.0.0"} `,"background: #007acc; color: #fff; font-size: 14px; padding: 4px 8px; border-top-left-radius: 4px; border-bottom-left-radius: 4px;","background: #e1e4e8; color: #333; font-size: 14px; padding: 4px 8px; border-top-right-radius: 4px; border-bottom-right-radius: 4px;"),l&&!d&&(o("boot"),o("view"),o("ready"),k&&(k=!1,f.start()),d=!0),d=l},getRoot(){return _e()},get version(){return R.version||"0.0.0"},get maxWidth(){return h},get maxHeight(){return b},get isLandscape(){return K},get isReady(){return d},get isStarted(){return G},get isPaused(){return T},get isFinished(){return E},get volume(){return B},get interactions(){return W},on(e,t){I(N(e),t)},off(e,t){V(N(e),t)},start(){var e,t;if(!G){if(!l){k=!0;return}if(G=!0,o("start"),p(),g())v(),(e=window.gameReady)==null||e.call(window);else if(y()){let n=window.TJ_API;(t=n==null?void 0:n.setPlayableBuild)==null||t.call(n,{orientation:K?"landscape":"portrait",buildID:R.version||"dev"})}}},finish(){var e,t;E||(E=!0,o("complete"),g()?(e=window.gameEnd)==null||e.call(window):H()?(t=parent==null?void 0:parent.postMessage)==null||t.call(parent,"complete","*"):y()&&xe())},install(e){if(!E){E=!0,y()?(xe(),setTimeout(()=>f.install(e),300)):(o("complete"),setTimeout(()=>f.install(e),0));return}U||(U=!0,setTimeout(()=>U=!1,500),o("cta_click"),o("conversion"),Re(e||j))},emit(e,t){let n=N(e);if(!["view","boot","start","engagement","complete","cta_click","conversion","retry","pause","resume","resize","volume","error"].includes(n)&&!n.startsWith("custom."))throw new Error(`Event ${e} must be canonical or namespaced as custom.<mechanic_id>.<event>`);let i=Te(n,t);P(n,i)},retry(){var e,t,n;if(g())(e=window.gameRetry)==null||e.call(window);else if(F()){let i=window.NUC;(n=(t=i==null?void 0:i.trigger)==null?void 0:t.tryAgain)==null||n.call(t)}o("engagement",{action:"retry"})},pause(){v(!0)},resume(){S(!0)},resize(e,t){p(e,t)}},Be=f;function Ve(e){let t=document.createElement("script");t.type="text/javascript",t.textContent=`
1
+ var u={};function I(e,t,n=!1){u[e]||(u[e]=[]),u[e].push({fn:t,once:n})}function V(e,t){if(u[e]){if(!t){delete u[e];return}u[e]=u[e].filter(n=>n.fn!==t)}}function P(e,...t){let n=u[e];if(n)for(let i of[...n])i.fn(...t),i.once&&V(e,i.fn)}function a(e,t){I(e,t,!0)}var R={name:"handler-playable-sdk",version:"0.1.11",description:"Handler Playable SDK v0.1 with contract-aligned surface (root sandbox, canonical event envelope).",main:"dist/index.js",module:"dist/index.mjs",types:"dist/index.d.ts",exports:{".":{types:"./dist/index.d.ts",import:"./dist/index.mjs",require:"./dist/index.js"},"./pixi":{types:"./dist/pixi/index.d.ts",import:"./dist/pixi/index.mjs",require:"./dist/pixi/index.js"},"./three":{types:"./dist/three/index.d.ts",import:"./dist/three/index.mjs",require:"./dist/three/index.js"}},scripts:{build:"tsup src/index.ts src/pixi/index.ts src/three/index.ts --format cjs,esm --dts --clean --minify",lint:"eslint 'src/**/*.{ts,tsx}'",typecheck:"tsc --noEmit",prepublishOnly:"npm run build"},author:"Handler",license:"MIT",publishConfig:{access:"public"},repository:{type:"git",url:"https://github.com/HandlerAIGames/handler-playable-sdk.git"},files:["dist","LICENSE","README.md"],peerDependencies:{"pixi.js":"^8.0.0",three:"^0.160.0"},peerDependenciesMeta:{"pixi.js":{optional:!0},three:{optional:!0}},devDependencies:{"@types/three":"^0.160.0",eslint:"^8.57.1","pixi.js":"^8.8.1",three:"^0.160.0","ts-node":"^10.9.2",tsup:"^8.4.0",typescript:"^5.7.2"}};var s=0,Se=s++,Z=s++,ee=s++,te=s++,ne=s++,ie=s++,oe=s++,re=s++,ae=s++,se=s++,de=s++,le=s++,r=Se;function ce(){return r===Z}function ue(){return r===ee}function fe(){return r===te}function pe(){return r===ne}function g(){return r===ie}function y(){return r===oe}function me(){return r===re}function ge(){return r===ae}function ye(){return r===se}function H(){return r===de}function F(){return r===le}function we(){let e=typeof AD_PROTOCOL!="undefined"?AD_PROTOCOL:"none",t=typeof AD_NETWORK!="undefined"?AD_NETWORK:"web_embed";if(e==="mraid")try{mraid.getState(),r=Z;return}catch{}else if(e==="dapi")try{dapi.isReady(),r=ee;return}catch{}if(t==="facebook")try{typeof FbPlayableAd!="undefined"&&(r=te)}catch{}else if(t==="google")try{typeof ExitApi!="undefined"&&(r=ne)}catch{}else if(t==="mintegral")window.gameReady&&(r=ie);else if(t==="tapjoy")window.TJ_API&&(r=oe);else if(t==="tiktok")window.openAppStore&&(r=re);else if(t==="smadex")try{window.smxTracking&&(r=ae)}catch{}else if(t==="snapchat")try{window.ScPlayableAd&&(r=se)}catch{}else t==="vungle"?r=de:(e==="nucleo"||t==="nucleo")&&(r=le)}var Ee={mechanic_id:"TODO_mechanic_id",variant_id:"TODO_variant_id",deployment_id:"TODO_deployment_id",export_id:"TODO_export_id",profile_id:"TODO_profile_id",instance_id:"default"},Ce=Math.random().toString(36).slice(2),w=null,A={...Ee},Ae="web_embed",De={},G=!1,E=!1,T=!1,ke=!1,B=1,W=0,z=!1,d=!1,j="",h=Math.floor(window.innerWidth),b=Math.floor(window.innerHeight),K=h>b,l=!1,k=!1,he=!1,be=!1,U=!1,M=null;function _e(){if(w)return w;let e=document.createElement("div");return e.id="handler-root",e.setAttribute("data-handler-root","true"),document.body.appendChild(e),w=e,e}function N(e){switch(e){case"interaction":return"engagement";case"finish":return"complete";case"install":return"cta_click";default:return e}}function Te(e,t){return{event_name:e,ts:Date.now(),session_id:Ce,deployment_id:A.deployment_id,variant_id:A.variant_id,export_profile_id:A.profile_id,instance_id:A.instance_id||"default",env:Ae==="mraid"?"mraid":"web",payload:t}}function o(e,t){let n=N(e),i=Te(n,t);P(n,i),n!==e&&P(e,i)}function O(){M&&(M(h,b),M=null)}function _(e){B=e,o("volume",e)}function v(e){e&&(ke=!0),!T&&(T=!0,o("pause"),_(0))}function S(e){!e&&ke||T&&(T=!1,o("resume"),_(B))}function p(e,t){h=Math.floor(e||window.innerWidth),b=Math.floor(t||window.innerHeight),K=h>b,o("resize",{width:h,height:b})}function Le(){if(ce())try{let e=mraid.getMaxSize();p(e.width,e.height);let t=()=>{mraid.isViewable()&&mraid.getState()!=="hidden"?S():v()};if(mraid.addEventListener("viewableChange",t),mraid.addEventListener("stateChange",t),mraid.addEventListener("sizeChange",()=>{let n=mraid.getMaxSize();p(n.width,n.height)}),mraid.getAudioVolume){let n=mraid.getAudioVolume();_(n?1:0)}if(mraid.addEventListener("audioVolumeChange",n=>{n!==null&&_(n>0?1:0)}),mraid.addEventListener("error",(n,i)=>{console.warn("mraid error:",n,"action:",i)}),z=!0,mraid.isViewable()&&mraid.getState()!=="hidden")l=!0,o("boot"),o("view"),o("ready"),d=!0,O();else{let n=()=>{l=!0,o("boot"),o("view"),o("ready"),d=!0,O()};mraid.addEventListener("ready",n)}}catch(e){console.warn("MRAID hook skipped",e)}}function Ie(){if(ue())try{let e=dapi.getScreenSize();p(e.width,e.height),dapi.addEventListener("viewableChange",n=>{n.isViewable?S():v()}),dapi.addEventListener("adResized",n=>{let i=dapi.getScreenSize();p(n.width||i.width,n.height||i.height)});let t=dapi.getAudioVolume();if(_(t?1:0),dapi.addEventListener("audioVolumeChange",n=>_(n?1:0)),z=!0,dapi.isViewable())l=!0,o("boot"),o("view"),o("ready"),d=!0,O();else{let n=()=>{l=!0,o("boot"),o("view"),o("ready"),d=!0,O()};dapi.addEventListener("ready",n)}}catch(e){console.warn("DAPI hook skipped",e)}}function ve(){let e=()=>{l||document.visibilityState==="visible"&&(document.readyState==="complete"||document.readyState==="interactive")&&(l=!0,o("boot"),o("view"),o("ready"),d=!0,O(),k&&(k=!1,f.start()))};window.addEventListener("resize",()=>p()),document.addEventListener("visibilitychange",()=>{document.visibilityState==="visible"?(S(),e()):v()}),document.readyState==="complete"||document.readyState==="interactive"?e():window.addEventListener("load",e),z=!0}function Pe(){let e=t=>{typeof TouchEvent!="undefined"&&t instanceof TouchEvent&&(he=!0),!(he&&t instanceof MouseEvent)&&(W+=1,o("interaction",W))};document.addEventListener("mousedown",e),document.addEventListener("touchstart",e)}function Re(e){var i,c,x,C,J,D,q,L,$,X,Y,Q;let t=typeof AD_PROTOCOL!="undefined"?AD_PROTOCOL:"none";if((typeof AD_NETWORK!="undefined"?AD_NETWORK:"web_embed")==="google")try{(i=window.ExitApi)==null||i.exit();return}catch{}if(t==="mraid"&&typeof mraid!="undefined")mraid.open(e||"");else if(t==="dapi"&&typeof dapi!="undefined")dapi.openStoreUrl();else if(y())(x=(c=window.TJ_API)==null?void 0:c.click)==null||x.call(c);else if(fe())(J=(C=window.FbPlayableAd)==null?void 0:C.onCTAClick)==null||J.call(C);else if(ye())(q=(D=window.ScPlayableAd)==null?void 0:D.onCTAClick)==null||q.call(D);else if(ge())try{($=(L=window.smxTracking)==null?void 0:L.redirect)==null||$.call(L)}catch(m){console.warn("Smadex redirect failed",m)}else if(pe()){let m=window.ExitApi;m&&typeof m.exit=="function"?m.exit(e||j||""):e&&window.open(e)}else g()?(X=window.install)==null||X.call(window):me()?(Y=window.openAppStore)==null||Y.call(window):H()?(Q=parent==null?void 0:parent.postMessage)==null||Q.call(parent,"download","*"):e&&window.open(e)}function Me(){let e=typeof AD_NETWORK!="undefined"?AD_NETWORK:"web_embed",t=n=>{if(!n)return;let i=new Image;i.src=n};if(e==="bigabid"){let n=window.BIGABID_BIDTIMEMACROS;if(!n)return;a("view",()=>t(n.mraid_viewable)),a("start",()=>t(n.game_viewable)),a("engagement",()=>t(n.engagement));let i=()=>t(n.complete);a("complete",i),I("engagement",c=>{var x;((x=c==null?void 0:c.payload)==null?void 0:x.count)>3&&i()}),a("cta_click",()=>t(n.click))}else if(e==="inmobi"){let n=window.INMOBI_DSPMACROS;if(!n)return;a("view",()=>t(n.Ad_Load_Start)),a("start",()=>t(n.Ad_Viewable)),a("engagement",()=>t(n.First_Engagement)),a("complete",()=>t(n.Gameplay_Complete)),a("cta_click",()=>t(n.DSP_Click)),a("start",()=>{[5,10,15,20,25,30].forEach(i=>setTimeout(()=>t(n[`Spent_${i}_Seconds`]),i*1e3))})}}function Ne(){if(!y())return;let e=window.TJ_API;e&&e.setPlayableAPI&&e.setPlayableAPI({skipAd:()=>{try{f.finish()}catch(t){console.warn("Tapjoy skip failed",t)}}})}function xe(){var t,n,i;let e=window.TJ_API;(t=e==null?void 0:e.objectiveComplete)==null||t.call(e),(n=e==null?void 0:e.playableFinished)==null||n.call(e),(i=e==null?void 0:e.gameplayFinished)==null||i.call(e)}function je(){g()&&(window.mintGameStart=()=>{S(!0),p()},window.mintGameClose=()=>{v(!0)})}function ze(){if(!F())return;let e=window.NUC;!e||!e.trigger||(f.on("cta_click",()=>{var t,n;return(n=(t=e.trigger).convert)==null?void 0:n.call(t,j)}),f.on("complete",()=>{var t,n;return(n=(t=e.trigger).tryAgain)==null?void 0:n.call(t)}))}var f={init(e={},t){if(Ae=e.profile||"web_embed",De=e.consent||{},A={...Ee,...e.ids||{}},w=e.rootEl||w,j=e.destinationUrl||(/android/i.test(navigator.userAgent)?"https://play.google.com/store":"https://www.apple.com/app-store/"),t&&(M=t),o("init"),document.body.oncontextmenu=()=>!1,_e(),Ve(w),we(),Le(),Ie(),!z){if(document.readyState==="complete")ve();else if(!be){be=!0;let n=()=>{ve(),window.removeEventListener("load",n),document.removeEventListener("DOMContentLoaded",n)};window.addEventListener("load",n),document.addEventListener("DOMContentLoaded",n)}}Pe(),Me(),Ne(),je(),ze(),console.log(`%c @handler/playable-sdk %c v${R.version||"0.0.0"} `,"background: #007acc; color: #fff; font-size: 14px; padding: 4px 8px; border-top-left-radius: 4px; border-bottom-left-radius: 4px;","background: #e1e4e8; color: #333; font-size: 14px; padding: 4px 8px; border-top-right-radius: 4px; border-bottom-right-radius: 4px;"),l&&!d&&(o("boot"),o("view"),o("ready"),k&&(k=!1,f.start()),d=!0),d=l},getRoot(){return _e()},get version(){return R.version||"0.0.0"},get maxWidth(){return h},get maxHeight(){return b},get isLandscape(){return K},get isReady(){return d},get isStarted(){return G},get isPaused(){return T},get isFinished(){return E},get volume(){return B},get interactions(){return W},on(e,t){I(N(e),t)},off(e,t){V(N(e),t)},start(){var e,t;if(!G){if(!l){k=!0;return}if(G=!0,o("start"),p(),g())v(),(e=window.gameReady)==null||e.call(window);else if(y()){let n=window.TJ_API;(t=n==null?void 0:n.setPlayableBuild)==null||t.call(n,{orientation:K?"landscape":"portrait",buildID:R.version||"dev"})}}},finish(){var e,t;E||(E=!0,o("complete"),g()?(e=window.gameEnd)==null||e.call(window):H()?(t=parent==null?void 0:parent.postMessage)==null||t.call(parent,"complete","*"):y()&&xe())},install(e){if(!E){E=!0,y()?(xe(),setTimeout(()=>f.install(e),300)):(o("complete"),setTimeout(()=>f.install(e),0));return}U||(U=!0,setTimeout(()=>U=!1,500),o("cta_click"),o("conversion"),Re(e||j))},emit(e,t){let n=N(e);if(!["view","boot","start","engagement","complete","cta_click","conversion","retry","pause","resume","resize","volume","error"].includes(n)&&!n.startsWith("custom."))throw new Error(`Event ${e} must be canonical or namespaced as custom.<mechanic_id>.<event>`);let i=Te(n,t);P(n,i)},retry(){var e,t,n;if(g())(e=window.gameRetry)==null||e.call(window);else if(F()){let i=window.NUC;(n=(t=i==null?void 0:i.trigger)==null?void 0:t.tryAgain)==null||n.call(t)}o("engagement",{action:"retry"})},pause(){v(!0)},resume(){S(!0)},resize(e,t){p(e,t)}},Be=f;function Ve(e){let t=document.createElement("script");t.type="text/javascript",t.textContent=`
2
2
  (function(){
3
3
  var events = ['touchstart','touchend','mousedown','keydown'];
4
4
  function unlock(){
package/dist/index.js CHANGED
@@ -1,4 +1,4 @@
1
- "use strict";var V=Object.defineProperty;var Se=Object.getOwnPropertyDescriptor;var Ce=Object.getOwnPropertyNames;var De=Object.prototype.hasOwnProperty;var Le=(e,t)=>{for(var n in t)V(e,n,{get:t[n],enumerable:!0})},Ie=(e,t,n,i)=>{if(t&&typeof t=="object"||typeof t=="function")for(let a of Ce(t))!De.call(e,a)&&a!==n&&V(e,a,{get:()=>t[a],enumerable:!(i=Se(t,a))||i.enumerable});return e};var Pe=e=>Ie(V({},"__esModule",{value:!0}),e);var qe={};Le(qe,{Handler:()=>u,default:()=>Be});module.exports=Pe(qe);var f={};function I(e,t,n=!1){f[e]||(f[e]=[]),f[e].push({fn:t,once:n})}function H(e,t){if(f[e]){if(!t){delete f[e];return}f[e]=f[e].filter(n=>n.fn!==t)}}function P(e,...t){let n=f[e];if(n)for(let i of[...n])i.fn(...t),i.once&&H(e,i.fn)}function s(e,t){I(e,t,!0)}var R={name:"handler-playable-sdk",version:"0.1.10",description:"Handler Playable SDK v0.1 with contract-aligned surface (root sandbox, canonical event envelope).",main:"dist/index.js",module:"dist/index.mjs",types:"dist/index.d.ts",exports:{".":{types:"./dist/index.d.ts",import:"./dist/index.mjs",require:"./dist/index.js"},"./pixi":{types:"./dist/pixi/index.d.ts",import:"./dist/pixi/index.mjs",require:"./dist/pixi/index.js"},"./three":{types:"./dist/three/index.d.ts",import:"./dist/three/index.mjs",require:"./dist/three/index.js"}},scripts:{build:"tsup src/index.ts src/pixi/index.ts src/three/index.ts --format cjs,esm --dts --clean --minify",lint:"eslint 'src/**/*.{ts,tsx}'",typecheck:"tsc --noEmit",prepublishOnly:"npm run build"},author:"Handler",license:"MIT",publishConfig:{access:"public"},repository:{type:"git",url:"https://github.com/HandlerAIGames/handler-playable-sdk.git"},files:["dist","LICENSE","README.md"],peerDependencies:{"pixi.js":"^8.0.0",three:"^0.160.0"},peerDependenciesMeta:{"pixi.js":{optional:!0},three:{optional:!0}},devDependencies:{"@types/three":"^0.160.0",eslint:"^8.57.1","pixi.js":"^8.8.1",three:"^0.160.0","ts-node":"^10.9.2",tsup:"^8.4.0",typescript:"^5.7.2"}};var d=0,Me=d++,ee=d++,te=d++,ne=d++,ie=d++,oe=d++,re=d++,ae=d++,se=d++,de=d++,le=d++,ce=d++,r=Me;function ue(){return r===ee}function fe(){return r===te}function pe(){return r===ne}function me(){return r===ie}function g(){return r===oe}function y(){return r===re}function ge(){return r===ae}function ye(){return r===se}function we(){return r===de}function F(){return r===le}function G(){return r===ce}function he(){let e=typeof AD_PROTOCOL!="undefined"?AD_PROTOCOL:"none",t=typeof AD_NETWORK!="undefined"?AD_NETWORK:"web_embed";if(e==="mraid")try{mraid.getState(),r=ee;return}catch{}else if(e==="dapi")try{dapi.isReady(),r=te;return}catch{}if(t==="facebook")try{typeof FbPlayableAd!="undefined"&&(r=ne)}catch{}else if(t==="google")try{typeof ExitApi!="undefined"&&(r=ie)}catch{}else if(t==="mintegral")window.gameReady&&(r=oe);else if(t==="tapjoy")window.TJ_API&&(r=re);else if(t==="tiktok")window.openAppStore&&(r=ae);else if(t==="smadex")try{window.smxTracking&&(r=se)}catch{}else if(t==="snapchat")try{window.ScPlayableAd&&(r=de)}catch{}else t==="vungle"?r=le:(e==="nucleo"||t==="nucleo")&&(r=ce)}var Ae={mechanic_id:"TODO_mechanic_id",variant_id:"TODO_variant_id",deployment_id:"TODO_deployment_id",export_id:"TODO_export_id",profile_id:"TODO_profile_id",instance_id:"default"},Ne=Math.random().toString(36).slice(2),w=null,A={...Ae},ke="web_embed",je={},U=!1,E=!1,T=!1,Te=!1,J=1,K=0,z=!1,l=!1,j="",h=Math.floor(window.innerWidth),b=Math.floor(window.innerHeight),B=h>b,c=!1,k=!1,be=!1,_e=!1,W=!1,M=null;function ve(){if(w)return w;let e=document.createElement("div");return e.id="handler-root",e.setAttribute("data-handler-root","true"),document.body.appendChild(e),w=e,e}function N(e){switch(e){case"interaction":return"engagement";case"finish":return"complete";case"install":return"cta_click";default:return e}}function Oe(e,t){return{event_name:e,ts:Date.now(),session_id:Ne,deployment_id:A.deployment_id,variant_id:A.variant_id,export_profile_id:A.profile_id,instance_id:A.instance_id||"default",env:ke==="mraid"?"mraid":"web",payload:t}}function o(e,t){let n=N(e),i=Oe(n,t);P(n,i),n!==e&&P(e,i)}function O(){M&&(M(h,b),M=null)}function _(e){J=e,o("volume",e)}function v(e){e&&(Te=!0),!T&&(T=!0,o("pause"),_(0))}function S(e){!e&&Te||T&&(T=!1,o("resume"),_(J))}function p(e,t){h=Math.floor(e||window.innerWidth),b=Math.floor(t||window.innerHeight),B=h>b,o("resize",{width:h,height:b})}function ze(){if(ue())try{let e=mraid.getMaxSize();p(e.width,e.height);let t=()=>{mraid.isViewable()&&mraid.getState()!=="hidden"?S():v()};if(mraid.addEventListener("viewableChange",t),mraid.addEventListener("stateChange",t),mraid.addEventListener("sizeChange",()=>{let n=mraid.getMaxSize();p(n.width,n.height)}),mraid.getAudioVolume){let n=mraid.getAudioVolume();_(n?1:0)}if(mraid.addEventListener("audioVolumeChange",n=>{n!==null&&_(n>0?1:0)}),mraid.addEventListener("error",(n,i)=>{console.warn("mraid error:",n,"action:",i)}),z=!0,mraid.isViewable()&&mraid.getState()!=="hidden")c=!0,o("boot"),o("view"),o("ready"),l=!0,O();else{let n=()=>{c=!0,o("boot"),o("view"),o("ready"),l=!0,O()};mraid.addEventListener("ready",n)}}catch(e){console.warn("MRAID hook skipped",e)}}function Ve(){if(fe())try{let e=dapi.getScreenSize();p(e.width,e.height),dapi.addEventListener("viewableChange",n=>{n.isViewable?S():v()}),dapi.addEventListener("adResized",n=>{let i=dapi.getScreenSize();p(n.width||i.width,n.height||i.height)});let t=dapi.getAudioVolume();if(_(t?1:0),dapi.addEventListener("audioVolumeChange",n=>_(n?1:0)),z=!0,dapi.isViewable())c=!0,o("boot"),o("view"),o("ready"),l=!0,O();else{let n=()=>{c=!0,o("boot"),o("view"),o("ready"),l=!0,O()};dapi.addEventListener("ready",n)}}catch(e){console.warn("DAPI hook skipped",e)}}function xe(){let e=()=>{c||document.visibilityState==="visible"&&(document.readyState==="complete"||document.readyState==="interactive")&&(c=!0,o("boot"),o("view"),o("ready"),l=!0,O(),k&&(k=!1,u.start()))};window.addEventListener("resize",()=>p()),document.addEventListener("visibilitychange",()=>{document.visibilityState==="visible"?(S(),e()):v()}),document.readyState==="complete"||document.readyState==="interactive"?e():window.addEventListener("load",e),z=!0}function He(){let e=t=>{typeof TouchEvent!="undefined"&&t instanceof TouchEvent&&(be=!0),!(be&&t instanceof MouseEvent)&&(K+=1,o("interaction",K))};document.addEventListener("mousedown",e),document.addEventListener("touchstart",e)}function Fe(e){var i,a,x,C,q,D,$,L,X,Y,Q,Z;let t=typeof AD_PROTOCOL!="undefined"?AD_PROTOCOL:"none";if((typeof AD_NETWORK!="undefined"?AD_NETWORK:"web_embed")==="google")try{(i=window.ExitApi)==null||i.exit();return}catch{}if(t==="mraid"&&typeof mraid!="undefined")mraid.open(e||"");else if(t==="dapi"&&typeof dapi!="undefined")dapi.openStoreUrl();else if(y())(x=(a=window.TJ_API)==null?void 0:a.click)==null||x.call(a);else if(pe())(q=(C=window.FbPlayableAd)==null?void 0:C.onCTAClick)==null||q.call(C);else if(we())($=(D=window.ScPlayableAd)==null?void 0:D.onCTAClick)==null||$.call(D);else if(ye())try{(X=(L=window.smxTracking)==null?void 0:L.redirect)==null||X.call(L)}catch(m){console.warn("Smadex redirect failed",m)}else if(me()){let m=window.ExitApi;m&&typeof m.exit=="function"?m.exit(e||j||""):e&&window.open(e)}else g()?(Y=window.install)==null||Y.call(window):ge()?(Q=window.openAppStore)==null||Q.call(window):F()?(Z=parent==null?void 0:parent.postMessage)==null||Z.call(parent,"download","*"):e&&window.open(e)}function Ge(){let e=typeof AD_NETWORK!="undefined"?AD_NETWORK:"web_embed",t=n=>{if(!n)return;let i=new Image;i.src=n};if(e==="bigabid"){let n=window.BIGABID_BIDTIMEMACROS;if(!n)return;s("view",()=>t(n.mraid_viewable)),s("start",()=>t(n.game_viewable)),s("engagement",()=>t(n.engagement));let i=()=>t(n.complete);s("complete",i),I("engagement",a=>{var x;((x=a==null?void 0:a.payload)==null?void 0:x.count)>3&&i()}),s("cta_click",()=>t(n.click))}else if(e==="inmobi"){let n=window.INMOBI_DSPMACROS;if(!n)return;s("view",()=>t(n.Ad_Load_Start)),s("start",()=>t(n.Ad_Viewable)),s("engagement",()=>t(n.First_Engagement)),s("complete",()=>t(n.Gameplay_Complete)),s("cta_click",()=>t(n.DSP_Click)),s("start",()=>{[5,10,15,20,25,30].forEach(i=>setTimeout(()=>t(n[`Spent_${i}_Seconds`]),i*1e3))})}}function Ue(){if(!y())return;let e=window.TJ_API;e&&e.setPlayableAPI&&e.setPlayableAPI({skipAd:()=>{try{u.finish()}catch(t){console.warn("Tapjoy skip failed",t)}}})}function Ee(){var t,n,i;let e=window.TJ_API;(t=e==null?void 0:e.objectiveComplete)==null||t.call(e),(n=e==null?void 0:e.playableFinished)==null||n.call(e),(i=e==null?void 0:e.gameplayFinished)==null||i.call(e)}function We(){g()&&(window.mintGameStart=()=>{S(!0),p()},window.mintGameClose=()=>{v(!0)})}function Ke(){if(!G())return;let e=window.NUC;!e||!e.trigger||(u.on("cta_click",()=>{var t,n;return(n=(t=e.trigger).convert)==null?void 0:n.call(t,j)}),u.on("complete",()=>{var t,n;return(n=(t=e.trigger).tryAgain)==null?void 0:n.call(t)}))}var u={init(e={},t){if(ke=e.profile||"web_embed",je=e.consent||{},A={...Ae,...e.ids||{}},w=e.rootEl||w,j=e.destinationUrl||(/android/i.test(navigator.userAgent)?"https://play.google.com/store":"https://www.apple.com/app-store/"),t&&(M=t),o("init"),document.body.oncontextmenu=()=>!1,ve(),Je(w),he(),ze(),Ve(),!z){if(document.readyState==="complete")xe();else if(!_e){_e=!0;let n=()=>{xe(),window.removeEventListener("load",n),document.removeEventListener("DOMContentLoaded",n)};window.addEventListener("load",n),document.addEventListener("DOMContentLoaded",n)}}He(),Ge(),Ue(),We(),Ke(),console.log(`%c @handler/playable-sdk %c v${R.version||"0.0.0"} `,"background: #007acc; color: #fff; font-size: 14px; padding: 4px 8px; border-top-left-radius: 4px; border-bottom-left-radius: 4px;","background: #e1e4e8; color: #333; font-size: 14px; padding: 4px 8px; border-top-right-radius: 4px; border-bottom-right-radius: 4px;"),c&&!l&&(o("boot"),o("view"),o("ready"),k&&(k=!1,u.start()),l=!0),l=c},getRoot(){return ve()},get version(){return R.version||"0.0.0"},get maxWidth(){return h},get maxHeight(){return b},get isLandscape(){return B},get isReady(){return l},get isStarted(){return U},get isPaused(){return T},get isFinished(){return E},get volume(){return J},get interactions(){return K},on(e,t){I(N(e),t)},off(e,t){H(N(e),t)},start(){var e,t;if(!U){if(!c){k=!0;return}if(U=!0,o("start"),p(),g())v(),(e=window.gameReady)==null||e.call(window);else if(y()){let n=window.TJ_API;(t=n==null?void 0:n.setPlayableBuild)==null||t.call(n,{orientation:B?"landscape":"portrait",buildID:R.version||"dev"})}}},finish(){var e,t;E||(E=!0,o("complete"),g()?(e=window.gameEnd)==null||e.call(window):F()?(t=parent==null?void 0:parent.postMessage)==null||t.call(parent,"complete","*"):y()&&Ee())},install(e){if(!E){E=!0,y()?(Ee(),setTimeout(()=>u.install(e),300)):(o("complete"),setTimeout(()=>u.install(e),0));return}W||(W=!0,setTimeout(()=>W=!1,500),o("cta_click"),o("conversion"),Fe(e||j))},emit(e,t){let n=N(e);if(!["view","boot","start","engagement","complete","cta_click","conversion","retry","pause","resume","resize","volume","error"].includes(n)&&!n.startsWith("custom."))throw new Error(`Event ${e} must be canonical or namespaced as custom.<mechanic_id>.<event>`);let i=Oe(n,t);P(n,i)},retry(){var e,t,n;if(g())(e=window.gameRetry)==null||e.call(window);else if(G()){let i=window.NUC;(n=(t=i==null?void 0:i.trigger)==null?void 0:t.tryAgain)==null||n.call(t)}o("engagement",{action:"retry"})},pause(){v(!0)},resume(){S(!0)},resize(e,t){p(e,t)}},Be=u;function Je(e){let t=document.createElement("script");t.type="text/javascript",t.textContent=`
1
+ "use strict";var V=Object.defineProperty;var Se=Object.getOwnPropertyDescriptor;var Ce=Object.getOwnPropertyNames;var De=Object.prototype.hasOwnProperty;var Le=(e,t)=>{for(var n in t)V(e,n,{get:t[n],enumerable:!0})},Ie=(e,t,n,i)=>{if(t&&typeof t=="object"||typeof t=="function")for(let a of Ce(t))!De.call(e,a)&&a!==n&&V(e,a,{get:()=>t[a],enumerable:!(i=Se(t,a))||i.enumerable});return e};var Pe=e=>Ie(V({},"__esModule",{value:!0}),e);var qe={};Le(qe,{Handler:()=>u,default:()=>Be});module.exports=Pe(qe);var f={};function I(e,t,n=!1){f[e]||(f[e]=[]),f[e].push({fn:t,once:n})}function H(e,t){if(f[e]){if(!t){delete f[e];return}f[e]=f[e].filter(n=>n.fn!==t)}}function P(e,...t){let n=f[e];if(n)for(let i of[...n])i.fn(...t),i.once&&H(e,i.fn)}function s(e,t){I(e,t,!0)}var R={name:"handler-playable-sdk",version:"0.1.11",description:"Handler Playable SDK v0.1 with contract-aligned surface (root sandbox, canonical event envelope).",main:"dist/index.js",module:"dist/index.mjs",types:"dist/index.d.ts",exports:{".":{types:"./dist/index.d.ts",import:"./dist/index.mjs",require:"./dist/index.js"},"./pixi":{types:"./dist/pixi/index.d.ts",import:"./dist/pixi/index.mjs",require:"./dist/pixi/index.js"},"./three":{types:"./dist/three/index.d.ts",import:"./dist/three/index.mjs",require:"./dist/three/index.js"}},scripts:{build:"tsup src/index.ts src/pixi/index.ts src/three/index.ts --format cjs,esm --dts --clean --minify",lint:"eslint 'src/**/*.{ts,tsx}'",typecheck:"tsc --noEmit",prepublishOnly:"npm run build"},author:"Handler",license:"MIT",publishConfig:{access:"public"},repository:{type:"git",url:"https://github.com/HandlerAIGames/handler-playable-sdk.git"},files:["dist","LICENSE","README.md"],peerDependencies:{"pixi.js":"^8.0.0",three:"^0.160.0"},peerDependenciesMeta:{"pixi.js":{optional:!0},three:{optional:!0}},devDependencies:{"@types/three":"^0.160.0",eslint:"^8.57.1","pixi.js":"^8.8.1",three:"^0.160.0","ts-node":"^10.9.2",tsup:"^8.4.0",typescript:"^5.7.2"}};var d=0,Me=d++,ee=d++,te=d++,ne=d++,ie=d++,oe=d++,re=d++,ae=d++,se=d++,de=d++,le=d++,ce=d++,r=Me;function ue(){return r===ee}function fe(){return r===te}function pe(){return r===ne}function me(){return r===ie}function g(){return r===oe}function y(){return r===re}function ge(){return r===ae}function ye(){return r===se}function we(){return r===de}function F(){return r===le}function G(){return r===ce}function he(){let e=typeof AD_PROTOCOL!="undefined"?AD_PROTOCOL:"none",t=typeof AD_NETWORK!="undefined"?AD_NETWORK:"web_embed";if(e==="mraid")try{mraid.getState(),r=ee;return}catch{}else if(e==="dapi")try{dapi.isReady(),r=te;return}catch{}if(t==="facebook")try{typeof FbPlayableAd!="undefined"&&(r=ne)}catch{}else if(t==="google")try{typeof ExitApi!="undefined"&&(r=ie)}catch{}else if(t==="mintegral")window.gameReady&&(r=oe);else if(t==="tapjoy")window.TJ_API&&(r=re);else if(t==="tiktok")window.openAppStore&&(r=ae);else if(t==="smadex")try{window.smxTracking&&(r=se)}catch{}else if(t==="snapchat")try{window.ScPlayableAd&&(r=de)}catch{}else t==="vungle"?r=le:(e==="nucleo"||t==="nucleo")&&(r=ce)}var Ae={mechanic_id:"TODO_mechanic_id",variant_id:"TODO_variant_id",deployment_id:"TODO_deployment_id",export_id:"TODO_export_id",profile_id:"TODO_profile_id",instance_id:"default"},Ne=Math.random().toString(36).slice(2),w=null,A={...Ae},ke="web_embed",je={},U=!1,E=!1,T=!1,Te=!1,J=1,K=0,z=!1,l=!1,j="",h=Math.floor(window.innerWidth),b=Math.floor(window.innerHeight),B=h>b,c=!1,k=!1,be=!1,_e=!1,W=!1,M=null;function ve(){if(w)return w;let e=document.createElement("div");return e.id="handler-root",e.setAttribute("data-handler-root","true"),document.body.appendChild(e),w=e,e}function N(e){switch(e){case"interaction":return"engagement";case"finish":return"complete";case"install":return"cta_click";default:return e}}function Oe(e,t){return{event_name:e,ts:Date.now(),session_id:Ne,deployment_id:A.deployment_id,variant_id:A.variant_id,export_profile_id:A.profile_id,instance_id:A.instance_id||"default",env:ke==="mraid"?"mraid":"web",payload:t}}function o(e,t){let n=N(e),i=Oe(n,t);P(n,i),n!==e&&P(e,i)}function O(){M&&(M(h,b),M=null)}function _(e){J=e,o("volume",e)}function v(e){e&&(Te=!0),!T&&(T=!0,o("pause"),_(0))}function S(e){!e&&Te||T&&(T=!1,o("resume"),_(J))}function p(e,t){h=Math.floor(e||window.innerWidth),b=Math.floor(t||window.innerHeight),B=h>b,o("resize",{width:h,height:b})}function ze(){if(ue())try{let e=mraid.getMaxSize();p(e.width,e.height);let t=()=>{mraid.isViewable()&&mraid.getState()!=="hidden"?S():v()};if(mraid.addEventListener("viewableChange",t),mraid.addEventListener("stateChange",t),mraid.addEventListener("sizeChange",()=>{let n=mraid.getMaxSize();p(n.width,n.height)}),mraid.getAudioVolume){let n=mraid.getAudioVolume();_(n?1:0)}if(mraid.addEventListener("audioVolumeChange",n=>{n!==null&&_(n>0?1:0)}),mraid.addEventListener("error",(n,i)=>{console.warn("mraid error:",n,"action:",i)}),z=!0,mraid.isViewable()&&mraid.getState()!=="hidden")c=!0,o("boot"),o("view"),o("ready"),l=!0,O();else{let n=()=>{c=!0,o("boot"),o("view"),o("ready"),l=!0,O()};mraid.addEventListener("ready",n)}}catch(e){console.warn("MRAID hook skipped",e)}}function Ve(){if(fe())try{let e=dapi.getScreenSize();p(e.width,e.height),dapi.addEventListener("viewableChange",n=>{n.isViewable?S():v()}),dapi.addEventListener("adResized",n=>{let i=dapi.getScreenSize();p(n.width||i.width,n.height||i.height)});let t=dapi.getAudioVolume();if(_(t?1:0),dapi.addEventListener("audioVolumeChange",n=>_(n?1:0)),z=!0,dapi.isViewable())c=!0,o("boot"),o("view"),o("ready"),l=!0,O();else{let n=()=>{c=!0,o("boot"),o("view"),o("ready"),l=!0,O()};dapi.addEventListener("ready",n)}}catch(e){console.warn("DAPI hook skipped",e)}}function xe(){let e=()=>{c||document.visibilityState==="visible"&&(document.readyState==="complete"||document.readyState==="interactive")&&(c=!0,o("boot"),o("view"),o("ready"),l=!0,O(),k&&(k=!1,u.start()))};window.addEventListener("resize",()=>p()),document.addEventListener("visibilitychange",()=>{document.visibilityState==="visible"?(S(),e()):v()}),document.readyState==="complete"||document.readyState==="interactive"?e():window.addEventListener("load",e),z=!0}function He(){let e=t=>{typeof TouchEvent!="undefined"&&t instanceof TouchEvent&&(be=!0),!(be&&t instanceof MouseEvent)&&(K+=1,o("interaction",K))};document.addEventListener("mousedown",e),document.addEventListener("touchstart",e)}function Fe(e){var i,a,x,C,q,D,$,L,X,Y,Q,Z;let t=typeof AD_PROTOCOL!="undefined"?AD_PROTOCOL:"none";if((typeof AD_NETWORK!="undefined"?AD_NETWORK:"web_embed")==="google")try{(i=window.ExitApi)==null||i.exit();return}catch{}if(t==="mraid"&&typeof mraid!="undefined")mraid.open(e||"");else if(t==="dapi"&&typeof dapi!="undefined")dapi.openStoreUrl();else if(y())(x=(a=window.TJ_API)==null?void 0:a.click)==null||x.call(a);else if(pe())(q=(C=window.FbPlayableAd)==null?void 0:C.onCTAClick)==null||q.call(C);else if(we())($=(D=window.ScPlayableAd)==null?void 0:D.onCTAClick)==null||$.call(D);else if(ye())try{(X=(L=window.smxTracking)==null?void 0:L.redirect)==null||X.call(L)}catch(m){console.warn("Smadex redirect failed",m)}else if(me()){let m=window.ExitApi;m&&typeof m.exit=="function"?m.exit(e||j||""):e&&window.open(e)}else g()?(Y=window.install)==null||Y.call(window):ge()?(Q=window.openAppStore)==null||Q.call(window):F()?(Z=parent==null?void 0:parent.postMessage)==null||Z.call(parent,"download","*"):e&&window.open(e)}function Ge(){let e=typeof AD_NETWORK!="undefined"?AD_NETWORK:"web_embed",t=n=>{if(!n)return;let i=new Image;i.src=n};if(e==="bigabid"){let n=window.BIGABID_BIDTIMEMACROS;if(!n)return;s("view",()=>t(n.mraid_viewable)),s("start",()=>t(n.game_viewable)),s("engagement",()=>t(n.engagement));let i=()=>t(n.complete);s("complete",i),I("engagement",a=>{var x;((x=a==null?void 0:a.payload)==null?void 0:x.count)>3&&i()}),s("cta_click",()=>t(n.click))}else if(e==="inmobi"){let n=window.INMOBI_DSPMACROS;if(!n)return;s("view",()=>t(n.Ad_Load_Start)),s("start",()=>t(n.Ad_Viewable)),s("engagement",()=>t(n.First_Engagement)),s("complete",()=>t(n.Gameplay_Complete)),s("cta_click",()=>t(n.DSP_Click)),s("start",()=>{[5,10,15,20,25,30].forEach(i=>setTimeout(()=>t(n[`Spent_${i}_Seconds`]),i*1e3))})}}function Ue(){if(!y())return;let e=window.TJ_API;e&&e.setPlayableAPI&&e.setPlayableAPI({skipAd:()=>{try{u.finish()}catch(t){console.warn("Tapjoy skip failed",t)}}})}function Ee(){var t,n,i;let e=window.TJ_API;(t=e==null?void 0:e.objectiveComplete)==null||t.call(e),(n=e==null?void 0:e.playableFinished)==null||n.call(e),(i=e==null?void 0:e.gameplayFinished)==null||i.call(e)}function We(){g()&&(window.mintGameStart=()=>{S(!0),p()},window.mintGameClose=()=>{v(!0)})}function Ke(){if(!G())return;let e=window.NUC;!e||!e.trigger||(u.on("cta_click",()=>{var t,n;return(n=(t=e.trigger).convert)==null?void 0:n.call(t,j)}),u.on("complete",()=>{var t,n;return(n=(t=e.trigger).tryAgain)==null?void 0:n.call(t)}))}var u={init(e={},t){if(ke=e.profile||"web_embed",je=e.consent||{},A={...Ae,...e.ids||{}},w=e.rootEl||w,j=e.destinationUrl||(/android/i.test(navigator.userAgent)?"https://play.google.com/store":"https://www.apple.com/app-store/"),t&&(M=t),o("init"),document.body.oncontextmenu=()=>!1,ve(),Je(w),he(),ze(),Ve(),!z){if(document.readyState==="complete")xe();else if(!_e){_e=!0;let n=()=>{xe(),window.removeEventListener("load",n),document.removeEventListener("DOMContentLoaded",n)};window.addEventListener("load",n),document.addEventListener("DOMContentLoaded",n)}}He(),Ge(),Ue(),We(),Ke(),console.log(`%c @handler/playable-sdk %c v${R.version||"0.0.0"} `,"background: #007acc; color: #fff; font-size: 14px; padding: 4px 8px; border-top-left-radius: 4px; border-bottom-left-radius: 4px;","background: #e1e4e8; color: #333; font-size: 14px; padding: 4px 8px; border-top-right-radius: 4px; border-bottom-right-radius: 4px;"),c&&!l&&(o("boot"),o("view"),o("ready"),k&&(k=!1,u.start()),l=!0),l=c},getRoot(){return ve()},get version(){return R.version||"0.0.0"},get maxWidth(){return h},get maxHeight(){return b},get isLandscape(){return B},get isReady(){return l},get isStarted(){return U},get isPaused(){return T},get isFinished(){return E},get volume(){return J},get interactions(){return K},on(e,t){I(N(e),t)},off(e,t){H(N(e),t)},start(){var e,t;if(!U){if(!c){k=!0;return}if(U=!0,o("start"),p(),g())v(),(e=window.gameReady)==null||e.call(window);else if(y()){let n=window.TJ_API;(t=n==null?void 0:n.setPlayableBuild)==null||t.call(n,{orientation:B?"landscape":"portrait",buildID:R.version||"dev"})}}},finish(){var e,t;E||(E=!0,o("complete"),g()?(e=window.gameEnd)==null||e.call(window):F()?(t=parent==null?void 0:parent.postMessage)==null||t.call(parent,"complete","*"):y()&&Ee())},install(e){if(!E){E=!0,y()?(Ee(),setTimeout(()=>u.install(e),300)):(o("complete"),setTimeout(()=>u.install(e),0));return}W||(W=!0,setTimeout(()=>W=!1,500),o("cta_click"),o("conversion"),Fe(e||j))},emit(e,t){let n=N(e);if(!["view","boot","start","engagement","complete","cta_click","conversion","retry","pause","resume","resize","volume","error"].includes(n)&&!n.startsWith("custom."))throw new Error(`Event ${e} must be canonical or namespaced as custom.<mechanic_id>.<event>`);let i=Oe(n,t);P(n,i)},retry(){var e,t,n;if(g())(e=window.gameRetry)==null||e.call(window);else if(G()){let i=window.NUC;(n=(t=i==null?void 0:i.trigger)==null?void 0:t.tryAgain)==null||n.call(t)}o("engagement",{action:"retry"})},pause(){v(!0)},resume(){S(!0)},resize(e,t){p(e,t)}},Be=u;function Je(e){let t=document.createElement("script");t.type="text/javascript",t.textContent=`
2
2
  (function(){
3
3
  var events = ['touchstart','touchend','mousedown','keydown'];
4
4
  function unlock(){
package/dist/index.mjs CHANGED
@@ -1 +1 @@
1
- import{a,b}from"./chunk-LQX44TET.mjs";export{a as Handler,b as default};
1
+ import{a,b}from"./chunk-3J2MAJRK.mjs";export{a as Handler,b as default};
@@ -1,4 +1,4 @@
1
- "use strict";var Ke=Object.defineProperty;var Ka=Object.getOwnPropertyDescriptor;var $a=Object.getOwnPropertyNames;var Ja=Object.prototype.hasOwnProperty;var Qa=(e,t)=>{for(var n in t)Ke(e,n,{get:t[n],enumerable:!0})},Za=(e,t,n,a)=>{if(t&&typeof t=="object"||typeof t=="function")for(let o of $a(t))!Ja.call(e,o)&&o!==n&&Ke(e,o,{get:()=>t[o],enumerable:!(a=Ka(t,o))||a.enumerable});return e};var Ua=e=>Za(Ke({},"__esModule",{value:!0}),e);var bi={};Qa(bi,{GameObject:()=>Ae,GameObjectManager:()=>Ie,Renderer:()=>Ce,Transform:()=>Se,animateHandClick:()=>ia,animatePanelEntrance:()=>aa,createBrushTexture:()=>ca,createEndGamePanel:()=>na,createHandTutorial:()=>oa,createPixiBase:()=>Un,createTutorialLabel:()=>sa,getRegisteredFontIds:()=>ta,loadAsset:()=>at,loadCharacterFrames:()=>la,registerFont:()=>ea,resolveFont:()=>G,resolveFontWeight:()=>j,updateHandAnimation:()=>ra});module.exports=Ua(bi);var Zn=require("pixi.js");var ee={};function Re(e,t,n=!1){ee[e]||(ee[e]=[]),ee[e].push({fn:t,once:n})}function $e(e,t){if(ee[e]){if(!t){delete ee[e];return}ee[e]=ee[e].filter(n=>n.fn!==t)}}function ze(e,...t){let n=ee[e];if(n)for(let a of[...n])a.fn(...t),a.once&&$e(e,a.fn)}function W(e,t){Re(e,t,!0)}var He={name:"handler-playable-sdk",version:"0.1.10",description:"Handler Playable SDK v0.1 with contract-aligned surface (root sandbox, canonical event envelope).",main:"dist/index.js",module:"dist/index.mjs",types:"dist/index.d.ts",exports:{".":{types:"./dist/index.d.ts",import:"./dist/index.mjs",require:"./dist/index.js"},"./pixi":{types:"./dist/pixi/index.d.ts",import:"./dist/pixi/index.mjs",require:"./dist/pixi/index.js"},"./three":{types:"./dist/three/index.d.ts",import:"./dist/three/index.mjs",require:"./dist/three/index.js"}},scripts:{build:"tsup src/index.ts src/pixi/index.ts src/three/index.ts --format cjs,esm --dts --clean --minify",lint:"eslint 'src/**/*.{ts,tsx}'",typecheck:"tsc --noEmit",prepublishOnly:"npm run build"},author:"Handler",license:"MIT",publishConfig:{access:"public"},repository:{type:"git",url:"https://github.com/HandlerAIGames/handler-playable-sdk.git"},files:["dist","LICENSE","README.md"],peerDependencies:{"pixi.js":"^8.0.0",three:"^0.160.0"},peerDependenciesMeta:{"pixi.js":{optional:!0},three:{optional:!0}},devDependencies:{"@types/three":"^0.160.0",eslint:"^8.57.1","pixi.js":"^8.8.1",three:"^0.160.0","ts-node":"^10.9.2",tsup:"^8.4.0",typescript:"^5.7.2"}};var N=0,ti=N++,Sn=N++,Cn=N++,An=N++,En=N++,kn=N++,Dn=N++,Pn=N++,Mn=N++,Fn=N++,Ln=N++,Rn=N++,_=ti;function zn(){return _===Sn}function Hn(){return _===Cn}function On(){return _===An}function Wn(){return _===En}function de(){return _===kn}function ue(){return _===Dn}function Nn(){return _===Pn}function Yn(){return _===Mn}function Bn(){return _===Fn}function Je(){return _===Ln}function Qe(){return _===Rn}function In(){let e=typeof AD_PROTOCOL!="undefined"?AD_PROTOCOL:"none",t=typeof AD_NETWORK!="undefined"?AD_NETWORK:"web_embed";if(e==="mraid")try{mraid.getState(),_=Sn;return}catch{}else if(e==="dapi")try{dapi.isReady(),_=Cn;return}catch{}if(t==="facebook")try{typeof FbPlayableAd!="undefined"&&(_=An)}catch{}else if(t==="google")try{typeof ExitApi!="undefined"&&(_=En)}catch{}else if(t==="mintegral")window.gameReady&&(_=kn);else if(t==="tapjoy")window.TJ_API&&(_=Dn);else if(t==="tiktok")window.openAppStore&&(_=Pn);else if(t==="smadex")try{window.smxTracking&&(_=Mn)}catch{}else if(t==="snapchat")try{window.ScPlayableAd&&(_=Fn)}catch{}else t==="vungle"?_=Ln:(e==="nucleo"||t==="nucleo")&&(_=Rn)}var Kn={mechanic_id:"TODO_mechanic_id",variant_id:"TODO_variant_id",deployment_id:"TODO_deployment_id",export_id:"TODO_export_id",profile_id:"TODO_profile_id",instance_id:"default"},ni=Math.random().toString(36).slice(2),pe=null,be={...Kn},$n="web_embed",ai={},Ze=!1,_e=!1,xe=!1,Jn=!1,nt=1,et=0,Ye=!1,J=!1,Ne="",fe=Math.floor(window.innerWidth),me=Math.floor(window.innerHeight),tt=fe>me,Q=!1,we=!1,Gn=!1,jn=!1,Ue=!1,Oe=null;function Vn(){if(pe)return pe;let e=document.createElement("div");return e.id="handler-root",e.setAttribute("data-handler-root","true"),document.body.appendChild(e),pe=e,e}function We(e){switch(e){case"interaction":return"engagement";case"finish":return"complete";case"install":return"cta_click";default:return e}}function Qn(e,t){return{event_name:e,ts:Date.now(),session_id:ni,deployment_id:be.deployment_id,variant_id:be.variant_id,export_profile_id:be.profile_id,instance_id:be.instance_id||"default",env:$n==="mraid"?"mraid":"web",payload:t}}function y(e,t){let n=We(e),a=Qn(n,t);ze(n,a),n!==e&&ze(e,a)}function Te(){Oe&&(Oe(fe,me),Oe=null)}function he(e){nt=e,y("volume",e)}function ye(e){e&&(Jn=!0),!xe&&(xe=!0,y("pause"),he(0))}function ve(e){!e&&Jn||xe&&(xe=!1,y("resume"),he(nt))}function ne(e,t){fe=Math.floor(e||window.innerWidth),me=Math.floor(t||window.innerHeight),tt=fe>me,y("resize",{width:fe,height:me})}function ii(){if(zn())try{let e=mraid.getMaxSize();ne(e.width,e.height);let t=()=>{mraid.isViewable()&&mraid.getState()!=="hidden"?ve():ye()};if(mraid.addEventListener("viewableChange",t),mraid.addEventListener("stateChange",t),mraid.addEventListener("sizeChange",()=>{let n=mraid.getMaxSize();ne(n.width,n.height)}),mraid.getAudioVolume){let n=mraid.getAudioVolume();he(n?1:0)}if(mraid.addEventListener("audioVolumeChange",n=>{n!==null&&he(n>0?1:0)}),mraid.addEventListener("error",(n,a)=>{console.warn("mraid error:",n,"action:",a)}),Ye=!0,mraid.isViewable()&&mraid.getState()!=="hidden")Q=!0,y("boot"),y("view"),y("ready"),J=!0,Te();else{let n=()=>{Q=!0,y("boot"),y("view"),y("ready"),J=!0,Te()};mraid.addEventListener("ready",n)}}catch(e){console.warn("MRAID hook skipped",e)}}function oi(){if(Hn())try{let e=dapi.getScreenSize();ne(e.width,e.height),dapi.addEventListener("viewableChange",n=>{n.isViewable?ve():ye()}),dapi.addEventListener("adResized",n=>{let a=dapi.getScreenSize();ne(n.width||a.width,n.height||a.height)});let t=dapi.getAudioVolume();if(he(t?1:0),dapi.addEventListener("audioVolumeChange",n=>he(n?1:0)),Ye=!0,dapi.isViewable())Q=!0,y("boot"),y("view"),y("ready"),J=!0,Te();else{let n=()=>{Q=!0,y("boot"),y("view"),y("ready"),J=!0,Te()};dapi.addEventListener("ready",n)}}catch(e){console.warn("DAPI hook skipped",e)}}function qn(){let e=()=>{Q||document.visibilityState==="visible"&&(document.readyState==="complete"||document.readyState==="interactive")&&(Q=!0,y("boot"),y("view"),y("ready"),J=!0,Te(),we&&(we=!1,te.start()))};window.addEventListener("resize",()=>ne()),document.addEventListener("visibilitychange",()=>{document.visibilityState==="visible"?(ve(),e()):ye()}),document.readyState==="complete"||document.readyState==="interactive"?e():window.addEventListener("load",e),Ye=!0}function si(){let e=t=>{typeof TouchEvent!="undefined"&&t instanceof TouchEvent&&(Gn=!0),!(Gn&&t instanceof MouseEvent)&&(et+=1,y("interaction",et))};document.addEventListener("mousedown",e),document.addEventListener("touchstart",e)}function ri(e){var a,o,i,s,r,l,d,p,f,u,c,h;let t=typeof AD_PROTOCOL!="undefined"?AD_PROTOCOL:"none";if((typeof AD_NETWORK!="undefined"?AD_NETWORK:"web_embed")==="google")try{(a=window.ExitApi)==null||a.exit();return}catch{}if(t==="mraid"&&typeof mraid!="undefined")mraid.open(e||"");else if(t==="dapi"&&typeof dapi!="undefined")dapi.openStoreUrl();else if(ue())(i=(o=window.TJ_API)==null?void 0:o.click)==null||i.call(o);else if(On())(r=(s=window.FbPlayableAd)==null?void 0:s.onCTAClick)==null||r.call(s);else if(Bn())(d=(l=window.ScPlayableAd)==null?void 0:l.onCTAClick)==null||d.call(l);else if(Yn())try{(f=(p=window.smxTracking)==null?void 0:p.redirect)==null||f.call(p)}catch(m){console.warn("Smadex redirect failed",m)}else if(Wn()){let m=window.ExitApi;m&&typeof m.exit=="function"?m.exit(e||Ne||""):e&&window.open(e)}else de()?(u=window.install)==null||u.call(window):Nn()?(c=window.openAppStore)==null||c.call(window):Je()?(h=parent==null?void 0:parent.postMessage)==null||h.call(parent,"download","*"):e&&window.open(e)}function li(){let e=typeof AD_NETWORK!="undefined"?AD_NETWORK:"web_embed",t=n=>{if(!n)return;let a=new Image;a.src=n};if(e==="bigabid"){let n=window.BIGABID_BIDTIMEMACROS;if(!n)return;W("view",()=>t(n.mraid_viewable)),W("start",()=>t(n.game_viewable)),W("engagement",()=>t(n.engagement));let a=()=>t(n.complete);W("complete",a),Re("engagement",o=>{var i;((i=o==null?void 0:o.payload)==null?void 0:i.count)>3&&a()}),W("cta_click",()=>t(n.click))}else if(e==="inmobi"){let n=window.INMOBI_DSPMACROS;if(!n)return;W("view",()=>t(n.Ad_Load_Start)),W("start",()=>t(n.Ad_Viewable)),W("engagement",()=>t(n.First_Engagement)),W("complete",()=>t(n.Gameplay_Complete)),W("cta_click",()=>t(n.DSP_Click)),W("start",()=>{[5,10,15,20,25,30].forEach(a=>setTimeout(()=>t(n[`Spent_${a}_Seconds`]),a*1e3))})}}function ci(){if(!ue())return;let e=window.TJ_API;e&&e.setPlayableAPI&&e.setPlayableAPI({skipAd:()=>{try{te.finish()}catch(t){console.warn("Tapjoy skip failed",t)}}})}function Xn(){var t,n,a;let e=window.TJ_API;(t=e==null?void 0:e.objectiveComplete)==null||t.call(e),(n=e==null?void 0:e.playableFinished)==null||n.call(e),(a=e==null?void 0:e.gameplayFinished)==null||a.call(e)}function di(){de()&&(window.mintGameStart=()=>{ve(!0),ne()},window.mintGameClose=()=>{ye(!0)})}function ui(){if(!Qe())return;let e=window.NUC;!e||!e.trigger||(te.on("cta_click",()=>{var t,n;return(n=(t=e.trigger).convert)==null?void 0:n.call(t,Ne)}),te.on("complete",()=>{var t,n;return(n=(t=e.trigger).tryAgain)==null?void 0:n.call(t)}))}var te={init(e={},t){if($n=e.profile||"web_embed",ai=e.consent||{},be={...Kn,...e.ids||{}},pe=e.rootEl||pe,Ne=e.destinationUrl||(/android/i.test(navigator.userAgent)?"https://play.google.com/store":"https://www.apple.com/app-store/"),t&&(Oe=t),y("init"),document.body.oncontextmenu=()=>!1,Vn(),pi(pe),In(),ii(),oi(),!Ye){if(document.readyState==="complete")qn();else if(!jn){jn=!0;let n=()=>{qn(),window.removeEventListener("load",n),document.removeEventListener("DOMContentLoaded",n)};window.addEventListener("load",n),document.addEventListener("DOMContentLoaded",n)}}si(),li(),ci(),di(),ui(),console.log(`%c @handler/playable-sdk %c v${He.version||"0.0.0"} `,"background: #007acc; color: #fff; font-size: 14px; padding: 4px 8px; border-top-left-radius: 4px; border-bottom-left-radius: 4px;","background: #e1e4e8; color: #333; font-size: 14px; padding: 4px 8px; border-top-right-radius: 4px; border-bottom-right-radius: 4px;"),Q&&!J&&(y("boot"),y("view"),y("ready"),we&&(we=!1,te.start()),J=!0),J=Q},getRoot(){return Vn()},get version(){return He.version||"0.0.0"},get maxWidth(){return fe},get maxHeight(){return me},get isLandscape(){return tt},get isReady(){return J},get isStarted(){return Ze},get isPaused(){return xe},get isFinished(){return _e},get volume(){return nt},get interactions(){return et},on(e,t){Re(We(e),t)},off(e,t){$e(We(e),t)},start(){var e,t;if(!Ze){if(!Q){we=!0;return}if(Ze=!0,y("start"),ne(),de())ye(),(e=window.gameReady)==null||e.call(window);else if(ue()){let n=window.TJ_API;(t=n==null?void 0:n.setPlayableBuild)==null||t.call(n,{orientation:tt?"landscape":"portrait",buildID:He.version||"dev"})}}},finish(){var e,t;_e||(_e=!0,y("complete"),de()?(e=window.gameEnd)==null||e.call(window):Je()?(t=parent==null?void 0:parent.postMessage)==null||t.call(parent,"complete","*"):ue()&&Xn())},install(e){if(!_e){_e=!0,ue()?(Xn(),setTimeout(()=>te.install(e),300)):(y("complete"),setTimeout(()=>te.install(e),0));return}Ue||(Ue=!0,setTimeout(()=>Ue=!1,500),y("cta_click"),y("conversion"),ri(e||Ne))},emit(e,t){let n=We(e);if(!["view","boot","start","engagement","complete","cta_click","conversion","retry","pause","resume","resize","volume","error"].includes(n)&&!n.startsWith("custom."))throw new Error(`Event ${e} must be canonical or namespaced as custom.<mechanic_id>.<event>`);let a=Qn(n,t);ze(n,a)},retry(){var e,t,n;if(de())(e=window.gameRetry)==null||e.call(window);else if(Qe()){let a=window.NUC;(n=(t=a==null?void 0:a.trigger)==null?void 0:t.tryAgain)==null||n.call(t)}y("engagement",{action:"retry"})},pause(){ye(!0)},resume(){ve(!0)},resize(e,t){ne(e,t)}},Be=te;function pi(e){let t=document.createElement("script");t.type="text/javascript",t.textContent=`
1
+ "use strict";var Ke=Object.defineProperty;var Ka=Object.getOwnPropertyDescriptor;var $a=Object.getOwnPropertyNames;var Ja=Object.prototype.hasOwnProperty;var Qa=(e,t)=>{for(var n in t)Ke(e,n,{get:t[n],enumerable:!0})},Za=(e,t,n,a)=>{if(t&&typeof t=="object"||typeof t=="function")for(let o of $a(t))!Ja.call(e,o)&&o!==n&&Ke(e,o,{get:()=>t[o],enumerable:!(a=Ka(t,o))||a.enumerable});return e};var Ua=e=>Za(Ke({},"__esModule",{value:!0}),e);var bi={};Qa(bi,{GameObject:()=>Ae,GameObjectManager:()=>Ie,Renderer:()=>Ce,Transform:()=>Se,animateHandClick:()=>ia,animatePanelEntrance:()=>aa,createBrushTexture:()=>ca,createEndGamePanel:()=>na,createHandTutorial:()=>oa,createPixiBase:()=>Un,createTutorialLabel:()=>sa,getRegisteredFontIds:()=>ta,loadAsset:()=>at,loadCharacterFrames:()=>la,registerFont:()=>ea,resolveFont:()=>G,resolveFontWeight:()=>j,updateHandAnimation:()=>ra});module.exports=Ua(bi);var Zn=require("pixi.js");var ee={};function Re(e,t,n=!1){ee[e]||(ee[e]=[]),ee[e].push({fn:t,once:n})}function $e(e,t){if(ee[e]){if(!t){delete ee[e];return}ee[e]=ee[e].filter(n=>n.fn!==t)}}function ze(e,...t){let n=ee[e];if(n)for(let a of[...n])a.fn(...t),a.once&&$e(e,a.fn)}function W(e,t){Re(e,t,!0)}var He={name:"handler-playable-sdk",version:"0.1.11",description:"Handler Playable SDK v0.1 with contract-aligned surface (root sandbox, canonical event envelope).",main:"dist/index.js",module:"dist/index.mjs",types:"dist/index.d.ts",exports:{".":{types:"./dist/index.d.ts",import:"./dist/index.mjs",require:"./dist/index.js"},"./pixi":{types:"./dist/pixi/index.d.ts",import:"./dist/pixi/index.mjs",require:"./dist/pixi/index.js"},"./three":{types:"./dist/three/index.d.ts",import:"./dist/three/index.mjs",require:"./dist/three/index.js"}},scripts:{build:"tsup src/index.ts src/pixi/index.ts src/three/index.ts --format cjs,esm --dts --clean --minify",lint:"eslint 'src/**/*.{ts,tsx}'",typecheck:"tsc --noEmit",prepublishOnly:"npm run build"},author:"Handler",license:"MIT",publishConfig:{access:"public"},repository:{type:"git",url:"https://github.com/HandlerAIGames/handler-playable-sdk.git"},files:["dist","LICENSE","README.md"],peerDependencies:{"pixi.js":"^8.0.0",three:"^0.160.0"},peerDependenciesMeta:{"pixi.js":{optional:!0},three:{optional:!0}},devDependencies:{"@types/three":"^0.160.0",eslint:"^8.57.1","pixi.js":"^8.8.1",three:"^0.160.0","ts-node":"^10.9.2",tsup:"^8.4.0",typescript:"^5.7.2"}};var N=0,ti=N++,Sn=N++,Cn=N++,An=N++,En=N++,kn=N++,Dn=N++,Pn=N++,Mn=N++,Fn=N++,Ln=N++,Rn=N++,_=ti;function zn(){return _===Sn}function Hn(){return _===Cn}function On(){return _===An}function Wn(){return _===En}function de(){return _===kn}function ue(){return _===Dn}function Nn(){return _===Pn}function Yn(){return _===Mn}function Bn(){return _===Fn}function Je(){return _===Ln}function Qe(){return _===Rn}function In(){let e=typeof AD_PROTOCOL!="undefined"?AD_PROTOCOL:"none",t=typeof AD_NETWORK!="undefined"?AD_NETWORK:"web_embed";if(e==="mraid")try{mraid.getState(),_=Sn;return}catch{}else if(e==="dapi")try{dapi.isReady(),_=Cn;return}catch{}if(t==="facebook")try{typeof FbPlayableAd!="undefined"&&(_=An)}catch{}else if(t==="google")try{typeof ExitApi!="undefined"&&(_=En)}catch{}else if(t==="mintegral")window.gameReady&&(_=kn);else if(t==="tapjoy")window.TJ_API&&(_=Dn);else if(t==="tiktok")window.openAppStore&&(_=Pn);else if(t==="smadex")try{window.smxTracking&&(_=Mn)}catch{}else if(t==="snapchat")try{window.ScPlayableAd&&(_=Fn)}catch{}else t==="vungle"?_=Ln:(e==="nucleo"||t==="nucleo")&&(_=Rn)}var Kn={mechanic_id:"TODO_mechanic_id",variant_id:"TODO_variant_id",deployment_id:"TODO_deployment_id",export_id:"TODO_export_id",profile_id:"TODO_profile_id",instance_id:"default"},ni=Math.random().toString(36).slice(2),pe=null,be={...Kn},$n="web_embed",ai={},Ze=!1,_e=!1,xe=!1,Jn=!1,nt=1,et=0,Ye=!1,J=!1,Ne="",fe=Math.floor(window.innerWidth),me=Math.floor(window.innerHeight),tt=fe>me,Q=!1,we=!1,Gn=!1,jn=!1,Ue=!1,Oe=null;function Vn(){if(pe)return pe;let e=document.createElement("div");return e.id="handler-root",e.setAttribute("data-handler-root","true"),document.body.appendChild(e),pe=e,e}function We(e){switch(e){case"interaction":return"engagement";case"finish":return"complete";case"install":return"cta_click";default:return e}}function Qn(e,t){return{event_name:e,ts:Date.now(),session_id:ni,deployment_id:be.deployment_id,variant_id:be.variant_id,export_profile_id:be.profile_id,instance_id:be.instance_id||"default",env:$n==="mraid"?"mraid":"web",payload:t}}function y(e,t){let n=We(e),a=Qn(n,t);ze(n,a),n!==e&&ze(e,a)}function Te(){Oe&&(Oe(fe,me),Oe=null)}function he(e){nt=e,y("volume",e)}function ye(e){e&&(Jn=!0),!xe&&(xe=!0,y("pause"),he(0))}function ve(e){!e&&Jn||xe&&(xe=!1,y("resume"),he(nt))}function ne(e,t){fe=Math.floor(e||window.innerWidth),me=Math.floor(t||window.innerHeight),tt=fe>me,y("resize",{width:fe,height:me})}function ii(){if(zn())try{let e=mraid.getMaxSize();ne(e.width,e.height);let t=()=>{mraid.isViewable()&&mraid.getState()!=="hidden"?ve():ye()};if(mraid.addEventListener("viewableChange",t),mraid.addEventListener("stateChange",t),mraid.addEventListener("sizeChange",()=>{let n=mraid.getMaxSize();ne(n.width,n.height)}),mraid.getAudioVolume){let n=mraid.getAudioVolume();he(n?1:0)}if(mraid.addEventListener("audioVolumeChange",n=>{n!==null&&he(n>0?1:0)}),mraid.addEventListener("error",(n,a)=>{console.warn("mraid error:",n,"action:",a)}),Ye=!0,mraid.isViewable()&&mraid.getState()!=="hidden")Q=!0,y("boot"),y("view"),y("ready"),J=!0,Te();else{let n=()=>{Q=!0,y("boot"),y("view"),y("ready"),J=!0,Te()};mraid.addEventListener("ready",n)}}catch(e){console.warn("MRAID hook skipped",e)}}function oi(){if(Hn())try{let e=dapi.getScreenSize();ne(e.width,e.height),dapi.addEventListener("viewableChange",n=>{n.isViewable?ve():ye()}),dapi.addEventListener("adResized",n=>{let a=dapi.getScreenSize();ne(n.width||a.width,n.height||a.height)});let t=dapi.getAudioVolume();if(he(t?1:0),dapi.addEventListener("audioVolumeChange",n=>he(n?1:0)),Ye=!0,dapi.isViewable())Q=!0,y("boot"),y("view"),y("ready"),J=!0,Te();else{let n=()=>{Q=!0,y("boot"),y("view"),y("ready"),J=!0,Te()};dapi.addEventListener("ready",n)}}catch(e){console.warn("DAPI hook skipped",e)}}function qn(){let e=()=>{Q||document.visibilityState==="visible"&&(document.readyState==="complete"||document.readyState==="interactive")&&(Q=!0,y("boot"),y("view"),y("ready"),J=!0,Te(),we&&(we=!1,te.start()))};window.addEventListener("resize",()=>ne()),document.addEventListener("visibilitychange",()=>{document.visibilityState==="visible"?(ve(),e()):ye()}),document.readyState==="complete"||document.readyState==="interactive"?e():window.addEventListener("load",e),Ye=!0}function si(){let e=t=>{typeof TouchEvent!="undefined"&&t instanceof TouchEvent&&(Gn=!0),!(Gn&&t instanceof MouseEvent)&&(et+=1,y("interaction",et))};document.addEventListener("mousedown",e),document.addEventListener("touchstart",e)}function ri(e){var a,o,i,s,r,l,d,p,f,u,c,h;let t=typeof AD_PROTOCOL!="undefined"?AD_PROTOCOL:"none";if((typeof AD_NETWORK!="undefined"?AD_NETWORK:"web_embed")==="google")try{(a=window.ExitApi)==null||a.exit();return}catch{}if(t==="mraid"&&typeof mraid!="undefined")mraid.open(e||"");else if(t==="dapi"&&typeof dapi!="undefined")dapi.openStoreUrl();else if(ue())(i=(o=window.TJ_API)==null?void 0:o.click)==null||i.call(o);else if(On())(r=(s=window.FbPlayableAd)==null?void 0:s.onCTAClick)==null||r.call(s);else if(Bn())(d=(l=window.ScPlayableAd)==null?void 0:l.onCTAClick)==null||d.call(l);else if(Yn())try{(f=(p=window.smxTracking)==null?void 0:p.redirect)==null||f.call(p)}catch(m){console.warn("Smadex redirect failed",m)}else if(Wn()){let m=window.ExitApi;m&&typeof m.exit=="function"?m.exit(e||Ne||""):e&&window.open(e)}else de()?(u=window.install)==null||u.call(window):Nn()?(c=window.openAppStore)==null||c.call(window):Je()?(h=parent==null?void 0:parent.postMessage)==null||h.call(parent,"download","*"):e&&window.open(e)}function li(){let e=typeof AD_NETWORK!="undefined"?AD_NETWORK:"web_embed",t=n=>{if(!n)return;let a=new Image;a.src=n};if(e==="bigabid"){let n=window.BIGABID_BIDTIMEMACROS;if(!n)return;W("view",()=>t(n.mraid_viewable)),W("start",()=>t(n.game_viewable)),W("engagement",()=>t(n.engagement));let a=()=>t(n.complete);W("complete",a),Re("engagement",o=>{var i;((i=o==null?void 0:o.payload)==null?void 0:i.count)>3&&a()}),W("cta_click",()=>t(n.click))}else if(e==="inmobi"){let n=window.INMOBI_DSPMACROS;if(!n)return;W("view",()=>t(n.Ad_Load_Start)),W("start",()=>t(n.Ad_Viewable)),W("engagement",()=>t(n.First_Engagement)),W("complete",()=>t(n.Gameplay_Complete)),W("cta_click",()=>t(n.DSP_Click)),W("start",()=>{[5,10,15,20,25,30].forEach(a=>setTimeout(()=>t(n[`Spent_${a}_Seconds`]),a*1e3))})}}function ci(){if(!ue())return;let e=window.TJ_API;e&&e.setPlayableAPI&&e.setPlayableAPI({skipAd:()=>{try{te.finish()}catch(t){console.warn("Tapjoy skip failed",t)}}})}function Xn(){var t,n,a;let e=window.TJ_API;(t=e==null?void 0:e.objectiveComplete)==null||t.call(e),(n=e==null?void 0:e.playableFinished)==null||n.call(e),(a=e==null?void 0:e.gameplayFinished)==null||a.call(e)}function di(){de()&&(window.mintGameStart=()=>{ve(!0),ne()},window.mintGameClose=()=>{ye(!0)})}function ui(){if(!Qe())return;let e=window.NUC;!e||!e.trigger||(te.on("cta_click",()=>{var t,n;return(n=(t=e.trigger).convert)==null?void 0:n.call(t,Ne)}),te.on("complete",()=>{var t,n;return(n=(t=e.trigger).tryAgain)==null?void 0:n.call(t)}))}var te={init(e={},t){if($n=e.profile||"web_embed",ai=e.consent||{},be={...Kn,...e.ids||{}},pe=e.rootEl||pe,Ne=e.destinationUrl||(/android/i.test(navigator.userAgent)?"https://play.google.com/store":"https://www.apple.com/app-store/"),t&&(Oe=t),y("init"),document.body.oncontextmenu=()=>!1,Vn(),pi(pe),In(),ii(),oi(),!Ye){if(document.readyState==="complete")qn();else if(!jn){jn=!0;let n=()=>{qn(),window.removeEventListener("load",n),document.removeEventListener("DOMContentLoaded",n)};window.addEventListener("load",n),document.addEventListener("DOMContentLoaded",n)}}si(),li(),ci(),di(),ui(),console.log(`%c @handler/playable-sdk %c v${He.version||"0.0.0"} `,"background: #007acc; color: #fff; font-size: 14px; padding: 4px 8px; border-top-left-radius: 4px; border-bottom-left-radius: 4px;","background: #e1e4e8; color: #333; font-size: 14px; padding: 4px 8px; border-top-right-radius: 4px; border-bottom-right-radius: 4px;"),Q&&!J&&(y("boot"),y("view"),y("ready"),we&&(we=!1,te.start()),J=!0),J=Q},getRoot(){return Vn()},get version(){return He.version||"0.0.0"},get maxWidth(){return fe},get maxHeight(){return me},get isLandscape(){return tt},get isReady(){return J},get isStarted(){return Ze},get isPaused(){return xe},get isFinished(){return _e},get volume(){return nt},get interactions(){return et},on(e,t){Re(We(e),t)},off(e,t){$e(We(e),t)},start(){var e,t;if(!Ze){if(!Q){we=!0;return}if(Ze=!0,y("start"),ne(),de())ye(),(e=window.gameReady)==null||e.call(window);else if(ue()){let n=window.TJ_API;(t=n==null?void 0:n.setPlayableBuild)==null||t.call(n,{orientation:tt?"landscape":"portrait",buildID:He.version||"dev"})}}},finish(){var e,t;_e||(_e=!0,y("complete"),de()?(e=window.gameEnd)==null||e.call(window):Je()?(t=parent==null?void 0:parent.postMessage)==null||t.call(parent,"complete","*"):ue()&&Xn())},install(e){if(!_e){_e=!0,ue()?(Xn(),setTimeout(()=>te.install(e),300)):(y("complete"),setTimeout(()=>te.install(e),0));return}Ue||(Ue=!0,setTimeout(()=>Ue=!1,500),y("cta_click"),y("conversion"),ri(e||Ne))},emit(e,t){let n=We(e);if(!["view","boot","start","engagement","complete","cta_click","conversion","retry","pause","resume","resize","volume","error"].includes(n)&&!n.startsWith("custom."))throw new Error(`Event ${e} must be canonical or namespaced as custom.<mechanic_id>.<event>`);let a=Qn(n,t);ze(n,a)},retry(){var e,t,n;if(de())(e=window.gameRetry)==null||e.call(window);else if(Qe()){let a=window.NUC;(n=(t=a==null?void 0:a.trigger)==null?void 0:t.tryAgain)==null||n.call(t)}y("engagement",{action:"retry"})},pause(){ye(!0)},resume(){ve(!0)},resize(e,t){ne(e,t)}},Be=te;function pi(e){let t=document.createElement("script");t.type="text/javascript",t.textContent=`
2
2
  (function(){
3
3
  var events = ['touchstart','touchend','mousedown','keydown'];
4
4
  function unlock(){
@@ -1 +1 @@
1
- import{b as lt}from"../chunk-LQX44TET.mjs";import{Application as Pn}from"pixi.js";async function Mn(e,t={}){let a=new Pn;await a.init({resizeTo:e,autoDensity:!0,resolution:window.devicePixelRatio||1,antialias:!0,backgroundAlpha:0});let o=n=>{var c,d,p,u,h,l;let i=(p=(d=(c=n==null?void 0:n.width)!=null?c:e.clientWidth)!=null?d:window.innerWidth)!=null?p:320,r=(l=(h=(u=n==null?void 0:n.height)!=null?u:e.clientHeight)!=null?h:window.innerHeight)!=null?l:480;a.renderer.resize(i,r)};e.innerHTML="",e.style.position="relative",e.style.display="flex",e.style.flexDirection="column",e.style.alignItems="stretch",e.style.width="100%",e.style.height="100dvh",e.style.minHeight="100vh",e.style.maxWidth="100%",e.style.maxHeight="100%",e.style.boxSizing="border-box",e.style.overflow="hidden",t.background&&(e.style.background=t.background),e.appendChild(a.canvas);let s=document.createElement("div");return s.setAttribute("style",["position:absolute","inset:0","display:flex","flex-direction:column","align-items:center","justify-content:flex-start","gap:12px","pointer-events:none","font-family:Arial,sans-serif","padding:20px 16px","padding-bottom:clamp(24px, 6vh, 96px)","box-sizing:border-box","z-index:2"].join(";")),e.appendChild(s),lt.on("pause",()=>{a.ticker.stop(),document.querySelectorAll("audio").forEach(i=>i.pause())}),lt.on("resume",()=>{a.ticker.start(),document.querySelectorAll("audio").forEach(i=>{i.currentTime>0&&!i.ended&&i.play().catch(()=>{})})}),lt.on("resize",({payload:n})=>{o({width:n==null?void 0:n.width,height:n==null?void 0:n.height})}),window.addEventListener("resize",()=>o()),requestAnimationFrame(()=>o()),{app:a,stage:a.stage,overlay:s,applySize:o}}var ct=class{constructor(t){var a,o;this.position=(t==null?void 0:t.position)||{x:0,y:0},this.scale=(a=t==null?void 0:t.scale)!=null?a:1,this.rotation=(o=t==null?void 0:t.rotation)!=null?o:0}update(t){t.position!==void 0&&(this.position={...t.position}),t.scale!==void 0&&(this.scale=t.scale),t.rotation!==void 0&&(this.rotation=t.rotation)}syncToPixi(t){t.position.set(this.position.x,this.position.y),t.scale.set(this.scale),t.rotation=this.rotation}},dt=class{constructor(t){var a,o,s,n;this.z_index=(a=t==null?void 0:t.z_index)!=null?a:0,this.alpha=(o=t==null?void 0:t.alpha)!=null?o:1,this.visible=(s=t==null?void 0:t.visible)!=null?s:!0,this.tint=(n=t==null?void 0:t.tint)!=null?n:null}update(t){t.z_index!==void 0&&(this.z_index=t.z_index),t.alpha!==void 0&&(this.alpha=t.alpha),t.visible!==void 0&&(this.visible=t.visible),t.tint!==void 0&&(this.tint=t.tint)}syncToPixi(t){t.zIndex=this.z_index,t.alpha=this.alpha,t.visible=this.visible,this.tint!==null&&"tint"in t&&(t.tint=this.tint)}},ht=class{constructor(t,a,o,s){this.instanceId=t,this.objectConfig=a,this.pixiObject=o,this._config=s,this.transform=new ct(s.transform),this.renderer=new dt(s.render),this.sync()}sync(){this.transform.syncToPixi(this.pixiObject),this.renderer.syncToPixi(this.pixiObject)}updateConfig(t){this._config=t,t.transform&&this.transform.update(t.transform),t.render&&this.renderer.update(t.render),this.sync()}getComponent(t){return this._config[t]}getPosition(){return{...this.transform.position}}setPosition(t,a){this.transform.position={x:t,y:a},this.transform.syncToPixi(this.pixiObject)}getAlpha(){return this.renderer.alpha}setAlpha(t){this.renderer.alpha=t,this.renderer.syncToPixi(this.pixiObject)}getVisible(){return this.renderer.visible}setVisible(t){this.renderer.visible=t,this.renderer.syncToPixi(this.pixiObject)}},gt=class{constructor(t){this.objects=new Map;this.config=t}create(t,a){let o=this.config.objects.get(t);if(!o)throw new Error(`Object config not found: ${t}`);let s=new ht(t,o.object_config||t,a,o);return this.objects.set(t,s),s}get(t){return this.objects.get(t)}updateConfig(t){this.config=t;for(let[a,o]of this.objects.entries()){let s=t.objects.get(a);s&&o.updateConfig(s)}}getAll(){return Array.from(this.objects.values())}remove(t){this.objects.delete(t)}clear(){this.objects.clear()}};var pt={"brand.primary":{family:"Arial, sans-serif",weight:"400"},"brand.warning":{family:"Arial Black, Arial, sans-serif",weight:"900"},"brand.heading":{family:"Arial Black, Arial, sans-serif",weight:"800"},"brand.body":{family:"Arial, sans-serif",weight:"400"}};function X(e){let t=pt[e];return t?t.family:(console.warn(`Font ID "${e}" not found in registry, using fallback`),"Arial, sans-serif")}function q(e){var a;let t=pt[e];return t&&(a=t.weight)!=null?a:"400"}function En(e,t){pt[e]=t}function Dn(){return Object.keys(pt)}import{Container as Yn,Graphics as ut,Text as tt,Sprite as Le,Texture as _t}from"pixi.js";function kn(e,t,a){var Dt,Yt,kt,zt,Ht,Wt,Bt,Rt,Lt,Gt,Nt,Xt,qt,$t,Vt,jt,Jt,Kt,Qt,Zt,Ot,It,Ut,te,ee,ne,ae,se,ie,oe,re,le,ce,de,he,pe,ue,me,fe,ye,ge,_e,be,xe,we,Te,Ce,Se,ve,Ae,Fe,Pe,Me,Ee,De,Ye,ke,ze,He,We;let o=e.objects.get("ui_endgame_1"),s=e.objects.get("ui_endgame_logo_1"),n=e.objects.get("ui_endgame_title_1"),i=e.objects.get("ui_endgame_subtitle_1"),r=e.objects.get("ui_endgame_footer_1"),c=e.objects.get("ui_endgame_cta_1"),d=e.objects.get("ui_endgame_cta_hint_1"),p=e.objects.get("ui_endgame_hand_1"),u=e.engine.runtime||{},h=new Yn;h.alpha=0,h.visible=!1;let l=((Dt=o==null?void 0:o.gameplay)==null?void 0:Dt.tuning)||{},m=(o==null?void 0:o.render)||{},f=(Yt=l.panel_width)!=null?Yt:320,y=(kt=l.panel_height)!=null?kt:400,_=(zt=l.panel_padding)!=null?zt:32,b=(Ht=l.panel_radius)!=null?Ht:24,C=m.background_color||l.panel_bg_color||"#1a0a0a",x=m.background_alpha!==void 0&&m.background_alpha!==null?m.background_alpha:(Wt=l.panel_bg_alpha)!=null?Wt:.98,S=m.border_color||l.panel_border_color||"#ffffff",v=(Bt=l.panel_border_width)!=null?Bt:2,w=(Rt=l.panel_border_alpha)!=null?Rt:.3,T=new ut;T.roundRect(-f/2,-y/2,f,y,b);let g=C.replace("#","");T.fill({color:parseInt(g,16),alpha:x});let A=S.replace("#","");T.stroke({color:parseInt(A,16),width:v,alpha:w});let M=new ut;M.roundRect(-f/2+2,-y/2+2,f-4,y-4,b-2),M.stroke({color:16777215,width:1,alpha:.1}),T.addChild(M),h.addChild(T);let B=((Lt=s==null?void 0:s.gameplay)==null?void 0:Lt.tuning)||{},$=(s==null?void 0:s.transform)||{},z=(Gt=B.logo_size)!=null?Gt:56,R=(Nt=$.scale)!=null?Nt:1,j=(qt=(Xt=$.offset)==null?void 0:Xt.y)!=null?qt:-130,qe=($t=B.logo_alpha)!=null?$t:1,F=new Le(a||_t.EMPTY);F.anchor.set(.5);let K=0,Q=0;if(a&&a!==_t.EMPTY){let P=a.frame,N=a.baseTexture;P&&P.width&&P.height?(K=P.width,Q=P.height):N&&N.width&&N.height?(K=N.width,Q=N.height):a.width&&a.height&&(K=a.width,Q=a.height)}if(K>0&&Q>0){let P=K/Q,N,yt;P>1?(N=z,yt=z/P):(yt=z,N=z*P);let Be=N/K,Re=yt/Q;Be*=R,Re*=R,F.scale.set(Be,Re)}else{let P=z/100*R;F.scale.set(P)}F.position.set(0,j),F.alpha=0,F.visible=!0,F.targetAlpha=qe,F.baseScaleX=F.scale.x,F.baseScaleY=F.scale.y,h.addChild(F);let E=n==null?void 0:n.ui,H=((Vt=n==null?void 0:n.gameplay)==null?void 0:Vt.tuning)||{},$e=(E==null?void 0:E.text)||"MISSION ACCOMPLISHED",xt=(E==null?void 0:E.font)||"brand.heading",Ve=(E==null?void 0:E.fontSize)||24,je=(jt=E==null?void 0:E.letterSpacing)!=null?jt:1,et=(Jt=n==null?void 0:n.render)==null?void 0:Jt.tint,Je=typeof et=="string"?et:et?`#${et.toString(16).padStart(6,"0")}`:"#00FF88",wt=f-_*2-30,Ke=H.font_weight_override?H.font_weight_override:q(xt),V=new tt({text:$e,style:{fontFamily:X(xt),fontSize:Ve,fontWeight:Ke,fill:Je,align:"center",letterSpacing:je,wordWrap:!1,stroke:{color:H.stroke_color||"#000000",width:(Kt=H.stroke_width)!=null?Kt:2},dropShadow:{color:H.shadow_color||"#000000",alpha:(Qt=H.shadow_alpha)!=null?Qt:.9,angle:(Zt=H.shadow_angle)!=null?Zt:0,blur:(Ot=H.shadow_blur)!=null?Ot:8,distance:(It=H.shadow_distance)!=null?It:4}}});if(V.width>wt){let P=wt/V.width;V.scale.set(P)}V.anchor.set(.5);let Tt=(Ut=l.title_offset_y)!=null?Ut:30,Qe=Tt+((te=H.animation_start_y_offset)!=null?te:-20);V.position.set(0,Qe),V.alpha=0,h.addChild(V);let D=i==null?void 0:i.ui,Ct=((ee=i==null?void 0:i.gameplay)==null?void 0:ee.tuning)||{},Ze=(D==null?void 0:D.text)||"RESCUE COMPLETE",St=(D==null?void 0:D.font)||"brand.body",Oe=(D==null?void 0:D.fontSize)||11,Ie=(ne=D==null?void 0:D.letterSpacing)!=null?ne:.5,nt=(ae=i==null?void 0:i.render)==null?void 0:ae.tint,Ue=typeof nt=="string"?nt:nt?`#${nt.toString(16).padStart(6,"0")}`:"#B0B0B0",Z=new tt({text:Ze,style:{fontFamily:X(St),fontSize:Oe,fontWeight:q(St),fill:Ue,align:"center",letterSpacing:Ie}});Z.anchor.set(.5);let tn=Tt+20+((se=Ct.animation_start_y_offset)!=null?se:-10);Z.position.set(0,tn),Z.alpha=0,Z.animationStartYOffset=(ie=Ct.animation_start_y_offset)!=null?ie:-10,h.addChild(Z);let L=r==null?void 0:r.ui,vt=((oe=r==null?void 0:r.gameplay)==null?void 0:oe.tuning)||{},en=(L==null?void 0:L.text)||((re=u.ui)==null?void 0:re.cta_hint)||"Continue the adventure!",At=(L==null?void 0:L.font)||"brand.body",nn=(L==null?void 0:L.fontSize)||16,at=(le=r==null?void 0:r.render)==null?void 0:le.tint,an=typeof at=="string"?at:at?`#${at.toString(16).padStart(6,"0")}`:"#FFFFFF",sn=(ce=vt.max_width)!=null?ce:f-_*2,on=(de=vt.line_height)!=null?de:1.4,O=new tt({text:en,style:{fontFamily:X(At),fontSize:nn,fontWeight:q(At),fill:an,align:"center",wordWrap:!0,wordWrapWidth:sn,lineHeight:on}});O.anchor.set(.5);let rn=(he=l.footer_offset_y)!=null?he:120;O.position.set(0,rn);let ln=((pe=r==null?void 0:r.render)==null?void 0:pe.alpha)!==void 0&&((ue=r==null?void 0:r.render)==null?void 0:ue.alpha)!==null?r.render.alpha:1;O.alpha=0,O.targetAlpha=ln,h.addChild(O);let G=((me=c==null?void 0:c.gameplay)==null?void 0:me.tuning)||{},Y=c==null?void 0:c.ui,st=(fe=G.button_width)!=null?fe:260,it=(ye=G.button_height)!=null?ye:56,Ft=(ge=G.button_radius)!=null?ge:16,cn=G.button_bg_color||((_e=u.theme)==null?void 0:_e.cta_background)||"#ffb43b",dn=(be=G.button_bg_alpha)!=null?be:1,hn=G.button_border_color||"#ffffff",pn=(xe=G.button_border_width)!=null?xe:2,un=(we=G.button_border_alpha)!=null?we:.2,ot=(Te=l.cta_offset_y)!=null?Te:160,W=new ut;W.roundRect(-st/2,-it/2,st,it,Ft);let mn=cn.replace("#","");W.fill({color:parseInt(mn,16),alpha:dn});let fn=hn.replace("#","");W.stroke({color:parseInt(fn,16),width:pn,alpha:un});let mt=new ut;mt.roundRect(-st/2+2,-it/2+2,st-4,it-4,Ft-2),mt.stroke({color:0,width:1,alpha:.15}),W.addChild(mt),W.position.set(0,ot),W.alpha=0,W.eventMode="static",W.cursor="pointer",h.addChild(W);let yn=(Y==null?void 0:Y.text)||((Ce=u.ui)==null?void 0:Ce.cta_label_end)||"DOWNLOAD",Pt=(Y==null?void 0:Y.font)||"brand.heading",gn=(Y==null?void 0:Y.fontSize)||20,_n=G.button_text_color||((Se=u.theme)==null?void 0:Se.cta_text)||"#1a0a0a",U=new tt({text:yn,style:{fontFamily:X(Pt),fontSize:gn,fontWeight:q(Pt),fill:_n,align:"center",letterSpacing:(ve=Y==null?void 0:Y.letterSpacing)!=null?ve:1}});U.anchor.set(.5),U.position.set(0,ot),U.alpha=0,h.addChild(U);let k=d==null?void 0:d.ui,Mt=((Ae=d==null?void 0:d.gameplay)==null?void 0:Ae.tuning)||{},bn=(k==null?void 0:k.text)||"Play the full game",Et=(k==null?void 0:k.font)||"brand.body",xn=(k==null?void 0:k.fontSize)||11,wn=(Fe=k==null?void 0:k.letterSpacing)!=null?Fe:0,rt=(Pe=d==null?void 0:d.render)==null?void 0:Pe.tint,Tn=typeof rt=="string"?rt:rt?`#${rt.toString(16).padStart(6,"0")}`:"#CCCCCC",I=new tt({text:bn,style:{fontFamily:X(Et),fontSize:xn,fontWeight:q(Et),fill:Tn,align:"center",letterSpacing:wn}});I.anchor.set(.5);let Cn=ot+35+((Me=Mt.animation_start_y_offset)!=null?Me:5);I.position.set(0,Cn),I.alpha=0,I.animationStartYOffset=(Ee=Mt.animation_start_y_offset)!=null?Ee:5,h.addChild(I);let ft=((De=p==null?void 0:p.gameplay)==null?void 0:De.tuning)||{},Sn=(Ye=ft.hand_offset_x)!=null?Ye:50,vn=(ke=ft.hand_offset_y)!=null?ke:50,An=(He=(ze=p==null?void 0:p.transform)==null?void 0:ze.scale)!=null?He:.1875,Fn=(We=ft.hand_scale_multiplier)!=null?We:2.5,J=new Le(t||_t.EMPTY);return J.anchor.set(.5),J.scale.set(An*Fn),J.position.set(Sn,ot+vn),J.alpha=0,J.visible=!1,h.addChild(J),{panel:h,logo:F,title:V,subtitle:Z,footer:O,ctaButton:W,ctaText:U,ctaHint:I,hand:J}}function zn(e,t,a){var v,w,T,g,A,M,B,$;let o=t.objects.get("ui_endgame_1"),s=((v=o==null?void 0:o.gameplay)==null?void 0:v.tuning)||{},n=(w=s.animation_duration_ms)!=null?w:800,i=(T=s.fade_in_duration_ms)!=null?T:600,r=(g=s.scale_animation_intensity)!=null?g:.1,c=(A=s.logo_animation_delay_ms)!=null?A:100,d=(M=s.title_animation_delay_ms)!=null?M:200,p=(B=s.footer_animation_delay_ms)!=null?B:300,u=($=s.cta_animation_delay_ms)!=null?$:400,{panel:h,logo:l,title:m,subtitle:f,footer:y,ctaButton:_,ctaText:b,ctaHint:C}=e;h.visible=!0;let x=Date.now(),S=()=>{let z=Date.now()-x,R=Math.min(z/i,1),j=1-Math.pow(1-R,3);h.alpha=j,h.scale.set(1+r*(1-j)),R<1?requestAnimationFrame(S):(setTimeout(()=>Hn(l,n,t),c),setTimeout(()=>{Wn(m,n),setTimeout(()=>Bn(f,n),50)},d),setTimeout(()=>Rn(y,n),p),setTimeout(()=>{Ln(_,b,n),setTimeout(()=>Gn(C,n),50),a&&a()},u))};S()}function Hn(e,t,a){var h,l,m,f,y;let o=a==null?void 0:a.objects.get("ui_endgame_logo_1"),n=(l=(((h=o==null?void 0:o.gameplay)==null?void 0:h.tuning)||{}).animation_start_scale)!=null?l:1.2,i=Date.now(),r=e.alpha,c=(m=e.targetAlpha)!=null?m:1,d=(f=e.baseScaleX)!=null?f:e.scale.x,p=(y=e.baseScaleY)!=null?y:e.scale.y,u=()=>{let _=Date.now()-i,b=Math.min(_/t,1),C=1-Math.pow(1-b,2);e.alpha=r+(c-r)*C;let x=n+(1-n)*C;e.scale.set(d*x,p*x),b<1&&requestAnimationFrame(u)};u()}function Wn(e,t){let a=Date.now(),o=e.alpha,s=e.y,n=()=>{let i=Date.now()-a,r=Math.min(i/t,1),c=1-Math.pow(1-r,2);e.alpha=o+(1-o)*c,e.y=s-20*(1-c),r<1&&requestAnimationFrame(n)};n()}function Bn(e,t){var r;let a=Date.now(),o=e.alpha,s=e.position.y,n=s-((r=e.animationStartYOffset)!=null?r:-10),i=()=>{let c=Date.now()-a,d=Math.min(c/t,1),p=1-Math.pow(1-d,2);e.alpha=o+(1-o)*p,e.position.y=s+(n-s)*p,d<1&&requestAnimationFrame(i)};i()}function Rn(e,t){var i;let a=Date.now(),o=e.alpha,s=(i=e.targetAlpha)!=null?i:1,n=()=>{let r=Date.now()-a,c=Math.min(r/t,1),d=1-Math.pow(1-c,2);e.alpha=o+(s-o)*d,c<1&&requestAnimationFrame(n)};n()}function Ln(e,t,a){let o=Date.now(),s=e.alpha,n=()=>{let i=Date.now()-o,r=Math.min(i/a,1),c=1-Math.pow(1-r,2);e.alpha=s+(1-s)*c,t.alpha=s+(1-s)*c,e.scale.set(1+.1*(1-c)),r<1&&requestAnimationFrame(n)};n()}function Gn(e,t){var r;let a=Date.now(),o=e.alpha,s=e.position.y,n=s-((r=e.animationStartYOffset)!=null?r:5),i=()=>{let c=Date.now()-a,d=Math.min(c/t,1),p=1-Math.pow(1-d,2);e.alpha=o+(1-o)*p,e.position.y=s+(n-s)*p,d<1&&requestAnimationFrame(i)};i()}function Nn(e,t,a,o){var p,u,h,l;let s=a.objects.get("ui_endgame_hand_1"),n=((p=s==null?void 0:s.gameplay)==null?void 0:p.tuning)||{},i=(u=n.click_animation_duration_ms)!=null?u:600,r=(h=n.click_delay_ms)!=null?h:2e3,c=(l=n.click_repeat_delay_ms)!=null?l:3e3,d=()=>{var v,w;e.visible=!0,e.alpha=1;let m=e.x,f=e.y,y=(v=n.hand_offset_x)!=null?v:50,_=(w=n.hand_offset_y)!=null?w:50,b=t.x+y,C=t.y+_,x=Date.now(),S=()=>{var z,R,j;let T=Date.now()-x,g=Math.min(T/i,1),A=g<.5?2*g*g:1-Math.pow(-2*g+2,2)/2;e.x=m+(b-m)*A,e.y=f+(C-f)*A;let M=(R=(z=s==null?void 0:s.transform)==null?void 0:z.scale)!=null?R:.1875,B=(j=n.hand_scale_multiplier)!=null?j:2.5,$=M*B;e.scale.set($+$*.2*Math.sin(g*Math.PI)),g<1?requestAnimationFrame(S):(t.scale.set(.95),setTimeout(()=>{t.scale.set(1),o()},100),setTimeout(()=>{e.alpha=0,setTimeout(()=>{e.x=m,e.y=f,d()},c)},500))};S()};setTimeout(d,r)}import{Sprite as Xn,Text as qn}from"pixi.js";function $n(e,t,a){var p,u,h,l;let o=t.objects.get("hand_tutorial_1"),s=((p=o==null?void 0:o.gameplay)==null?void 0:p.tuning)||{},n=(o==null?void 0:o.render)||{},i=(o==null?void 0:o.transform)||{},r=new Xn(e);r.anchor.set(.5),r.alpha=0;let c=(u=s.hand_scale_multiplier)!=null?u:2.5,d=(h=i.scale)!=null?h:.1875;return r.scale.set(d*c),r.zIndex=(l=n.z_index)!=null?l:99999,r}function Vn(e){var m,f,y,_,b,C,x,S,v,w;let t=e.objects.get("ui_tutorial_1"),a=t==null?void 0:t.ui,o=(t==null?void 0:t.render)||{},s=((m=e.engine.runtime)==null?void 0:m.ui_styles)||{},n=((f=e.engine.runtime)==null?void 0:f.ui)||{},i=(a==null?void 0:a.text)||n.tutorial_label||n.label_text||"CLEAN!",r=(a==null?void 0:a.font)||"brand.warning",c=(a==null?void 0:a.fontSize)||s.label_font_size||52,d=(_=a==null?void 0:a.letterSpacing)!=null?_:(y=s.label_letter_spacing)!=null?y:-1,p=(a==null?void 0:a.align)||"center",u=o.tint,h=typeof u=="string"?u:u?`#${u.toString(16).padStart(6,"0")}`:s.label_fill||"#FFF1C1",l=new qn({text:i,style:{fontFamily:X(r),fontSize:c,fontWeight:q(r),fill:h,align:p,letterSpacing:d,stroke:{color:s.label_stroke||"#8B0000",width:2},dropShadow:{color:s.label_shadow_color||"#000000",alpha:(b=s.label_shadow_alpha)!=null?b:.8,angle:(C=s.label_shadow_angle)!=null?C:0,blur:(x=s.label_shadow_blur)!=null?x:4,distance:(S=s.label_shadow_distance)!=null?S:2}}});return l.anchor.set(.5,0),l.alpha=(v=o.alpha)!=null?v:0,l.visible=(w=o.visible)!=null?w:!0,l}function jn(e,t,a,o,s){var c,d,p,u,h,l,m;let n=s.objects.get("hand_tutorial_1"),i=((c=n==null?void 0:n.gameplay)==null?void 0:c.tuning)||{},r=(n==null?void 0:n.transform)||{};if(!o){let f=(d=i.animation_duration)!=null?d:1.5,y=a%f/f,_=y<.5?2*y*y:-1+(4-2*y)*y,b=(p=i.x_offset)!=null?p:0,C=(u=i.y_offset)!=null?u:0,x=(h=i.animation_range)!=null?h:40,S=x*.7,v=x,w=t.x+b+S,T=t.y+C+v,g=w+S,A=T+v;e.x=w+(g-w)*_,e.y=T+(A-T)*_;let M=(l=r.scale)!=null?l:.1875,B=(m=i.hand_scale_multiplier)!=null?m:2.5;e.scale.set(M*B)}}import{Graphics as Ge,Assets as Ne,Texture as Jn,Rectangle as Kn,Color as bt}from"pixi.js";async function Xe(e,t,a=16777215,o=!1){try{let n=(globalThis.INLINE_ASSETS||{})[e];return await Ne.load(n||e)}catch{console.warn(`Asset missing: ${e}. Using placeholder.`);let n=new Ge;return o?n.roundRect(0,0,60,120,10).fill({color:a}):(n.circle(30,30,30).fill({color:a}),n.rect(25,30,10,40).fill({color:a})),t.renderer.generateTexture(n)}}async function Qn(e,t,a){var f,y,_,b,C,x,S,v,w,T;let s=(globalThis.INLINE_ASSETS||{})[e]||e,n;try{n=await Ne.load(s),console.log("[character] loaded sheet",{path:e,sourceUsed:s})}catch(g){let M=(a.gameplay.character_sheet||{}).fallback_color||"#ff00ff";n=await Xe(e,t,new bt(M).toNumber(),!0),console.warn("[character] fallback loadAsset used",{path:e,err:g})}let i=n.source||n.baseTexture||n;i&&"valid"in i&&i.valid===!1&&typeof i.once=="function"&&await new Promise(g=>i.once("loaded",g));let r=a.gameplay.character_sheet||{},c=(f=r.cols)!=null?f:3,d=(y=r.rows)!=null?y:2,p=(x=(C=(_=i==null?void 0:i.width)!=null?_:i==null?void 0:i.pixelWidth)!=null?C:(b=i==null?void 0:i.baseTexture)==null?void 0:b.width)!=null?x:n.width,u=(T=(w=(S=i==null?void 0:i.height)!=null?S:i==null?void 0:i.pixelHeight)!=null?w:(v=i==null?void 0:i.baseTexture)==null?void 0:v.height)!=null?T:n.height,h=p/c,l=u/d;if(!Number.isFinite(h)||!Number.isFinite(l)||h<=0||l<=0||!i)return[n];let m=[];for(let g=0;g<d;g++)for(let A=0;A<c;A++)m.push(new Jn({source:i,frame:new Kn(A*h,g*l,h,l)}));return m.length>2&&m.push(...m.slice(1,-1).reverse()),console.log("[character] frames prepared",{count:m.length}),m}function Zn(e,t){var p,u,h,l;let a=t.gameplay.brush||{},o=new bt(t.theme.brush_color||"#ffffff").toNumber(),s=(p=a.radius)!=null?p:20,n=(u=a.inner_radius)!=null?u:15,i=(h=a.alpha)!=null?h:.8,r=(l=a.inner_alpha)!=null?l:.3,c=a.inner_color||"#ffffff",d=new Ge;return d.circle(0,0,s).fill({color:o,alpha:i}),d.circle(0,0,n).fill({color:new bt(c).toNumber(),alpha:r}),e.renderer.generateTexture(d)}export{ht as GameObject,gt as GameObjectManager,dt as Renderer,ct as Transform,Nn as animateHandClick,zn as animatePanelEntrance,Zn as createBrushTexture,kn as createEndGamePanel,$n as createHandTutorial,Mn as createPixiBase,Vn as createTutorialLabel,Dn as getRegisteredFontIds,Xe as loadAsset,Qn as loadCharacterFrames,En as registerFont,X as resolveFont,q as resolveFontWeight,jn as updateHandAnimation};
1
+ import{b as lt}from"../chunk-3J2MAJRK.mjs";import{Application as Pn}from"pixi.js";async function Mn(e,t={}){let a=new Pn;await a.init({resizeTo:e,autoDensity:!0,resolution:window.devicePixelRatio||1,antialias:!0,backgroundAlpha:0});let o=n=>{var c,d,p,u,h,l;let i=(p=(d=(c=n==null?void 0:n.width)!=null?c:e.clientWidth)!=null?d:window.innerWidth)!=null?p:320,r=(l=(h=(u=n==null?void 0:n.height)!=null?u:e.clientHeight)!=null?h:window.innerHeight)!=null?l:480;a.renderer.resize(i,r)};e.innerHTML="",e.style.position="relative",e.style.display="flex",e.style.flexDirection="column",e.style.alignItems="stretch",e.style.width="100%",e.style.height="100dvh",e.style.minHeight="100vh",e.style.maxWidth="100%",e.style.maxHeight="100%",e.style.boxSizing="border-box",e.style.overflow="hidden",t.background&&(e.style.background=t.background),e.appendChild(a.canvas);let s=document.createElement("div");return s.setAttribute("style",["position:absolute","inset:0","display:flex","flex-direction:column","align-items:center","justify-content:flex-start","gap:12px","pointer-events:none","font-family:Arial,sans-serif","padding:20px 16px","padding-bottom:clamp(24px, 6vh, 96px)","box-sizing:border-box","z-index:2"].join(";")),e.appendChild(s),lt.on("pause",()=>{a.ticker.stop(),document.querySelectorAll("audio").forEach(i=>i.pause())}),lt.on("resume",()=>{a.ticker.start(),document.querySelectorAll("audio").forEach(i=>{i.currentTime>0&&!i.ended&&i.play().catch(()=>{})})}),lt.on("resize",({payload:n})=>{o({width:n==null?void 0:n.width,height:n==null?void 0:n.height})}),window.addEventListener("resize",()=>o()),requestAnimationFrame(()=>o()),{app:a,stage:a.stage,overlay:s,applySize:o}}var ct=class{constructor(t){var a,o;this.position=(t==null?void 0:t.position)||{x:0,y:0},this.scale=(a=t==null?void 0:t.scale)!=null?a:1,this.rotation=(o=t==null?void 0:t.rotation)!=null?o:0}update(t){t.position!==void 0&&(this.position={...t.position}),t.scale!==void 0&&(this.scale=t.scale),t.rotation!==void 0&&(this.rotation=t.rotation)}syncToPixi(t){t.position.set(this.position.x,this.position.y),t.scale.set(this.scale),t.rotation=this.rotation}},dt=class{constructor(t){var a,o,s,n;this.z_index=(a=t==null?void 0:t.z_index)!=null?a:0,this.alpha=(o=t==null?void 0:t.alpha)!=null?o:1,this.visible=(s=t==null?void 0:t.visible)!=null?s:!0,this.tint=(n=t==null?void 0:t.tint)!=null?n:null}update(t){t.z_index!==void 0&&(this.z_index=t.z_index),t.alpha!==void 0&&(this.alpha=t.alpha),t.visible!==void 0&&(this.visible=t.visible),t.tint!==void 0&&(this.tint=t.tint)}syncToPixi(t){t.zIndex=this.z_index,t.alpha=this.alpha,t.visible=this.visible,this.tint!==null&&"tint"in t&&(t.tint=this.tint)}},ht=class{constructor(t,a,o,s){this.instanceId=t,this.objectConfig=a,this.pixiObject=o,this._config=s,this.transform=new ct(s.transform),this.renderer=new dt(s.render),this.sync()}sync(){this.transform.syncToPixi(this.pixiObject),this.renderer.syncToPixi(this.pixiObject)}updateConfig(t){this._config=t,t.transform&&this.transform.update(t.transform),t.render&&this.renderer.update(t.render),this.sync()}getComponent(t){return this._config[t]}getPosition(){return{...this.transform.position}}setPosition(t,a){this.transform.position={x:t,y:a},this.transform.syncToPixi(this.pixiObject)}getAlpha(){return this.renderer.alpha}setAlpha(t){this.renderer.alpha=t,this.renderer.syncToPixi(this.pixiObject)}getVisible(){return this.renderer.visible}setVisible(t){this.renderer.visible=t,this.renderer.syncToPixi(this.pixiObject)}},gt=class{constructor(t){this.objects=new Map;this.config=t}create(t,a){let o=this.config.objects.get(t);if(!o)throw new Error(`Object config not found: ${t}`);let s=new ht(t,o.object_config||t,a,o);return this.objects.set(t,s),s}get(t){return this.objects.get(t)}updateConfig(t){this.config=t;for(let[a,o]of this.objects.entries()){let s=t.objects.get(a);s&&o.updateConfig(s)}}getAll(){return Array.from(this.objects.values())}remove(t){this.objects.delete(t)}clear(){this.objects.clear()}};var pt={"brand.primary":{family:"Arial, sans-serif",weight:"400"},"brand.warning":{family:"Arial Black, Arial, sans-serif",weight:"900"},"brand.heading":{family:"Arial Black, Arial, sans-serif",weight:"800"},"brand.body":{family:"Arial, sans-serif",weight:"400"}};function X(e){let t=pt[e];return t?t.family:(console.warn(`Font ID "${e}" not found in registry, using fallback`),"Arial, sans-serif")}function q(e){var a;let t=pt[e];return t&&(a=t.weight)!=null?a:"400"}function En(e,t){pt[e]=t}function Dn(){return Object.keys(pt)}import{Container as Yn,Graphics as ut,Text as tt,Sprite as Le,Texture as _t}from"pixi.js";function kn(e,t,a){var Dt,Yt,kt,zt,Ht,Wt,Bt,Rt,Lt,Gt,Nt,Xt,qt,$t,Vt,jt,Jt,Kt,Qt,Zt,Ot,It,Ut,te,ee,ne,ae,se,ie,oe,re,le,ce,de,he,pe,ue,me,fe,ye,ge,_e,be,xe,we,Te,Ce,Se,ve,Ae,Fe,Pe,Me,Ee,De,Ye,ke,ze,He,We;let o=e.objects.get("ui_endgame_1"),s=e.objects.get("ui_endgame_logo_1"),n=e.objects.get("ui_endgame_title_1"),i=e.objects.get("ui_endgame_subtitle_1"),r=e.objects.get("ui_endgame_footer_1"),c=e.objects.get("ui_endgame_cta_1"),d=e.objects.get("ui_endgame_cta_hint_1"),p=e.objects.get("ui_endgame_hand_1"),u=e.engine.runtime||{},h=new Yn;h.alpha=0,h.visible=!1;let l=((Dt=o==null?void 0:o.gameplay)==null?void 0:Dt.tuning)||{},m=(o==null?void 0:o.render)||{},f=(Yt=l.panel_width)!=null?Yt:320,y=(kt=l.panel_height)!=null?kt:400,_=(zt=l.panel_padding)!=null?zt:32,b=(Ht=l.panel_radius)!=null?Ht:24,C=m.background_color||l.panel_bg_color||"#1a0a0a",x=m.background_alpha!==void 0&&m.background_alpha!==null?m.background_alpha:(Wt=l.panel_bg_alpha)!=null?Wt:.98,S=m.border_color||l.panel_border_color||"#ffffff",v=(Bt=l.panel_border_width)!=null?Bt:2,w=(Rt=l.panel_border_alpha)!=null?Rt:.3,T=new ut;T.roundRect(-f/2,-y/2,f,y,b);let g=C.replace("#","");T.fill({color:parseInt(g,16),alpha:x});let A=S.replace("#","");T.stroke({color:parseInt(A,16),width:v,alpha:w});let M=new ut;M.roundRect(-f/2+2,-y/2+2,f-4,y-4,b-2),M.stroke({color:16777215,width:1,alpha:.1}),T.addChild(M),h.addChild(T);let B=((Lt=s==null?void 0:s.gameplay)==null?void 0:Lt.tuning)||{},$=(s==null?void 0:s.transform)||{},z=(Gt=B.logo_size)!=null?Gt:56,R=(Nt=$.scale)!=null?Nt:1,j=(qt=(Xt=$.offset)==null?void 0:Xt.y)!=null?qt:-130,qe=($t=B.logo_alpha)!=null?$t:1,F=new Le(a||_t.EMPTY);F.anchor.set(.5);let K=0,Q=0;if(a&&a!==_t.EMPTY){let P=a.frame,N=a.baseTexture;P&&P.width&&P.height?(K=P.width,Q=P.height):N&&N.width&&N.height?(K=N.width,Q=N.height):a.width&&a.height&&(K=a.width,Q=a.height)}if(K>0&&Q>0){let P=K/Q,N,yt;P>1?(N=z,yt=z/P):(yt=z,N=z*P);let Be=N/K,Re=yt/Q;Be*=R,Re*=R,F.scale.set(Be,Re)}else{let P=z/100*R;F.scale.set(P)}F.position.set(0,j),F.alpha=0,F.visible=!0,F.targetAlpha=qe,F.baseScaleX=F.scale.x,F.baseScaleY=F.scale.y,h.addChild(F);let E=n==null?void 0:n.ui,H=((Vt=n==null?void 0:n.gameplay)==null?void 0:Vt.tuning)||{},$e=(E==null?void 0:E.text)||"MISSION ACCOMPLISHED",xt=(E==null?void 0:E.font)||"brand.heading",Ve=(E==null?void 0:E.fontSize)||24,je=(jt=E==null?void 0:E.letterSpacing)!=null?jt:1,et=(Jt=n==null?void 0:n.render)==null?void 0:Jt.tint,Je=typeof et=="string"?et:et?`#${et.toString(16).padStart(6,"0")}`:"#00FF88",wt=f-_*2-30,Ke=H.font_weight_override?H.font_weight_override:q(xt),V=new tt({text:$e,style:{fontFamily:X(xt),fontSize:Ve,fontWeight:Ke,fill:Je,align:"center",letterSpacing:je,wordWrap:!1,stroke:{color:H.stroke_color||"#000000",width:(Kt=H.stroke_width)!=null?Kt:2},dropShadow:{color:H.shadow_color||"#000000",alpha:(Qt=H.shadow_alpha)!=null?Qt:.9,angle:(Zt=H.shadow_angle)!=null?Zt:0,blur:(Ot=H.shadow_blur)!=null?Ot:8,distance:(It=H.shadow_distance)!=null?It:4}}});if(V.width>wt){let P=wt/V.width;V.scale.set(P)}V.anchor.set(.5);let Tt=(Ut=l.title_offset_y)!=null?Ut:30,Qe=Tt+((te=H.animation_start_y_offset)!=null?te:-20);V.position.set(0,Qe),V.alpha=0,h.addChild(V);let D=i==null?void 0:i.ui,Ct=((ee=i==null?void 0:i.gameplay)==null?void 0:ee.tuning)||{},Ze=(D==null?void 0:D.text)||"RESCUE COMPLETE",St=(D==null?void 0:D.font)||"brand.body",Oe=(D==null?void 0:D.fontSize)||11,Ie=(ne=D==null?void 0:D.letterSpacing)!=null?ne:.5,nt=(ae=i==null?void 0:i.render)==null?void 0:ae.tint,Ue=typeof nt=="string"?nt:nt?`#${nt.toString(16).padStart(6,"0")}`:"#B0B0B0",Z=new tt({text:Ze,style:{fontFamily:X(St),fontSize:Oe,fontWeight:q(St),fill:Ue,align:"center",letterSpacing:Ie}});Z.anchor.set(.5);let tn=Tt+20+((se=Ct.animation_start_y_offset)!=null?se:-10);Z.position.set(0,tn),Z.alpha=0,Z.animationStartYOffset=(ie=Ct.animation_start_y_offset)!=null?ie:-10,h.addChild(Z);let L=r==null?void 0:r.ui,vt=((oe=r==null?void 0:r.gameplay)==null?void 0:oe.tuning)||{},en=(L==null?void 0:L.text)||((re=u.ui)==null?void 0:re.cta_hint)||"Continue the adventure!",At=(L==null?void 0:L.font)||"brand.body",nn=(L==null?void 0:L.fontSize)||16,at=(le=r==null?void 0:r.render)==null?void 0:le.tint,an=typeof at=="string"?at:at?`#${at.toString(16).padStart(6,"0")}`:"#FFFFFF",sn=(ce=vt.max_width)!=null?ce:f-_*2,on=(de=vt.line_height)!=null?de:1.4,O=new tt({text:en,style:{fontFamily:X(At),fontSize:nn,fontWeight:q(At),fill:an,align:"center",wordWrap:!0,wordWrapWidth:sn,lineHeight:on}});O.anchor.set(.5);let rn=(he=l.footer_offset_y)!=null?he:120;O.position.set(0,rn);let ln=((pe=r==null?void 0:r.render)==null?void 0:pe.alpha)!==void 0&&((ue=r==null?void 0:r.render)==null?void 0:ue.alpha)!==null?r.render.alpha:1;O.alpha=0,O.targetAlpha=ln,h.addChild(O);let G=((me=c==null?void 0:c.gameplay)==null?void 0:me.tuning)||{},Y=c==null?void 0:c.ui,st=(fe=G.button_width)!=null?fe:260,it=(ye=G.button_height)!=null?ye:56,Ft=(ge=G.button_radius)!=null?ge:16,cn=G.button_bg_color||((_e=u.theme)==null?void 0:_e.cta_background)||"#ffb43b",dn=(be=G.button_bg_alpha)!=null?be:1,hn=G.button_border_color||"#ffffff",pn=(xe=G.button_border_width)!=null?xe:2,un=(we=G.button_border_alpha)!=null?we:.2,ot=(Te=l.cta_offset_y)!=null?Te:160,W=new ut;W.roundRect(-st/2,-it/2,st,it,Ft);let mn=cn.replace("#","");W.fill({color:parseInt(mn,16),alpha:dn});let fn=hn.replace("#","");W.stroke({color:parseInt(fn,16),width:pn,alpha:un});let mt=new ut;mt.roundRect(-st/2+2,-it/2+2,st-4,it-4,Ft-2),mt.stroke({color:0,width:1,alpha:.15}),W.addChild(mt),W.position.set(0,ot),W.alpha=0,W.eventMode="static",W.cursor="pointer",h.addChild(W);let yn=(Y==null?void 0:Y.text)||((Ce=u.ui)==null?void 0:Ce.cta_label_end)||"DOWNLOAD",Pt=(Y==null?void 0:Y.font)||"brand.heading",gn=(Y==null?void 0:Y.fontSize)||20,_n=G.button_text_color||((Se=u.theme)==null?void 0:Se.cta_text)||"#1a0a0a",U=new tt({text:yn,style:{fontFamily:X(Pt),fontSize:gn,fontWeight:q(Pt),fill:_n,align:"center",letterSpacing:(ve=Y==null?void 0:Y.letterSpacing)!=null?ve:1}});U.anchor.set(.5),U.position.set(0,ot),U.alpha=0,h.addChild(U);let k=d==null?void 0:d.ui,Mt=((Ae=d==null?void 0:d.gameplay)==null?void 0:Ae.tuning)||{},bn=(k==null?void 0:k.text)||"Play the full game",Et=(k==null?void 0:k.font)||"brand.body",xn=(k==null?void 0:k.fontSize)||11,wn=(Fe=k==null?void 0:k.letterSpacing)!=null?Fe:0,rt=(Pe=d==null?void 0:d.render)==null?void 0:Pe.tint,Tn=typeof rt=="string"?rt:rt?`#${rt.toString(16).padStart(6,"0")}`:"#CCCCCC",I=new tt({text:bn,style:{fontFamily:X(Et),fontSize:xn,fontWeight:q(Et),fill:Tn,align:"center",letterSpacing:wn}});I.anchor.set(.5);let Cn=ot+35+((Me=Mt.animation_start_y_offset)!=null?Me:5);I.position.set(0,Cn),I.alpha=0,I.animationStartYOffset=(Ee=Mt.animation_start_y_offset)!=null?Ee:5,h.addChild(I);let ft=((De=p==null?void 0:p.gameplay)==null?void 0:De.tuning)||{},Sn=(Ye=ft.hand_offset_x)!=null?Ye:50,vn=(ke=ft.hand_offset_y)!=null?ke:50,An=(He=(ze=p==null?void 0:p.transform)==null?void 0:ze.scale)!=null?He:.1875,Fn=(We=ft.hand_scale_multiplier)!=null?We:2.5,J=new Le(t||_t.EMPTY);return J.anchor.set(.5),J.scale.set(An*Fn),J.position.set(Sn,ot+vn),J.alpha=0,J.visible=!1,h.addChild(J),{panel:h,logo:F,title:V,subtitle:Z,footer:O,ctaButton:W,ctaText:U,ctaHint:I,hand:J}}function zn(e,t,a){var v,w,T,g,A,M,B,$;let o=t.objects.get("ui_endgame_1"),s=((v=o==null?void 0:o.gameplay)==null?void 0:v.tuning)||{},n=(w=s.animation_duration_ms)!=null?w:800,i=(T=s.fade_in_duration_ms)!=null?T:600,r=(g=s.scale_animation_intensity)!=null?g:.1,c=(A=s.logo_animation_delay_ms)!=null?A:100,d=(M=s.title_animation_delay_ms)!=null?M:200,p=(B=s.footer_animation_delay_ms)!=null?B:300,u=($=s.cta_animation_delay_ms)!=null?$:400,{panel:h,logo:l,title:m,subtitle:f,footer:y,ctaButton:_,ctaText:b,ctaHint:C}=e;h.visible=!0;let x=Date.now(),S=()=>{let z=Date.now()-x,R=Math.min(z/i,1),j=1-Math.pow(1-R,3);h.alpha=j,h.scale.set(1+r*(1-j)),R<1?requestAnimationFrame(S):(setTimeout(()=>Hn(l,n,t),c),setTimeout(()=>{Wn(m,n),setTimeout(()=>Bn(f,n),50)},d),setTimeout(()=>Rn(y,n),p),setTimeout(()=>{Ln(_,b,n),setTimeout(()=>Gn(C,n),50),a&&a()},u))};S()}function Hn(e,t,a){var h,l,m,f,y;let o=a==null?void 0:a.objects.get("ui_endgame_logo_1"),n=(l=(((h=o==null?void 0:o.gameplay)==null?void 0:h.tuning)||{}).animation_start_scale)!=null?l:1.2,i=Date.now(),r=e.alpha,c=(m=e.targetAlpha)!=null?m:1,d=(f=e.baseScaleX)!=null?f:e.scale.x,p=(y=e.baseScaleY)!=null?y:e.scale.y,u=()=>{let _=Date.now()-i,b=Math.min(_/t,1),C=1-Math.pow(1-b,2);e.alpha=r+(c-r)*C;let x=n+(1-n)*C;e.scale.set(d*x,p*x),b<1&&requestAnimationFrame(u)};u()}function Wn(e,t){let a=Date.now(),o=e.alpha,s=e.y,n=()=>{let i=Date.now()-a,r=Math.min(i/t,1),c=1-Math.pow(1-r,2);e.alpha=o+(1-o)*c,e.y=s-20*(1-c),r<1&&requestAnimationFrame(n)};n()}function Bn(e,t){var r;let a=Date.now(),o=e.alpha,s=e.position.y,n=s-((r=e.animationStartYOffset)!=null?r:-10),i=()=>{let c=Date.now()-a,d=Math.min(c/t,1),p=1-Math.pow(1-d,2);e.alpha=o+(1-o)*p,e.position.y=s+(n-s)*p,d<1&&requestAnimationFrame(i)};i()}function Rn(e,t){var i;let a=Date.now(),o=e.alpha,s=(i=e.targetAlpha)!=null?i:1,n=()=>{let r=Date.now()-a,c=Math.min(r/t,1),d=1-Math.pow(1-c,2);e.alpha=o+(s-o)*d,c<1&&requestAnimationFrame(n)};n()}function Ln(e,t,a){let o=Date.now(),s=e.alpha,n=()=>{let i=Date.now()-o,r=Math.min(i/a,1),c=1-Math.pow(1-r,2);e.alpha=s+(1-s)*c,t.alpha=s+(1-s)*c,e.scale.set(1+.1*(1-c)),r<1&&requestAnimationFrame(n)};n()}function Gn(e,t){var r;let a=Date.now(),o=e.alpha,s=e.position.y,n=s-((r=e.animationStartYOffset)!=null?r:5),i=()=>{let c=Date.now()-a,d=Math.min(c/t,1),p=1-Math.pow(1-d,2);e.alpha=o+(1-o)*p,e.position.y=s+(n-s)*p,d<1&&requestAnimationFrame(i)};i()}function Nn(e,t,a,o){var p,u,h,l;let s=a.objects.get("ui_endgame_hand_1"),n=((p=s==null?void 0:s.gameplay)==null?void 0:p.tuning)||{},i=(u=n.click_animation_duration_ms)!=null?u:600,r=(h=n.click_delay_ms)!=null?h:2e3,c=(l=n.click_repeat_delay_ms)!=null?l:3e3,d=()=>{var v,w;e.visible=!0,e.alpha=1;let m=e.x,f=e.y,y=(v=n.hand_offset_x)!=null?v:50,_=(w=n.hand_offset_y)!=null?w:50,b=t.x+y,C=t.y+_,x=Date.now(),S=()=>{var z,R,j;let T=Date.now()-x,g=Math.min(T/i,1),A=g<.5?2*g*g:1-Math.pow(-2*g+2,2)/2;e.x=m+(b-m)*A,e.y=f+(C-f)*A;let M=(R=(z=s==null?void 0:s.transform)==null?void 0:z.scale)!=null?R:.1875,B=(j=n.hand_scale_multiplier)!=null?j:2.5,$=M*B;e.scale.set($+$*.2*Math.sin(g*Math.PI)),g<1?requestAnimationFrame(S):(t.scale.set(.95),setTimeout(()=>{t.scale.set(1),o()},100),setTimeout(()=>{e.alpha=0,setTimeout(()=>{e.x=m,e.y=f,d()},c)},500))};S()};setTimeout(d,r)}import{Sprite as Xn,Text as qn}from"pixi.js";function $n(e,t,a){var p,u,h,l;let o=t.objects.get("hand_tutorial_1"),s=((p=o==null?void 0:o.gameplay)==null?void 0:p.tuning)||{},n=(o==null?void 0:o.render)||{},i=(o==null?void 0:o.transform)||{},r=new Xn(e);r.anchor.set(.5),r.alpha=0;let c=(u=s.hand_scale_multiplier)!=null?u:2.5,d=(h=i.scale)!=null?h:.1875;return r.scale.set(d*c),r.zIndex=(l=n.z_index)!=null?l:99999,r}function Vn(e){var m,f,y,_,b,C,x,S,v,w;let t=e.objects.get("ui_tutorial_1"),a=t==null?void 0:t.ui,o=(t==null?void 0:t.render)||{},s=((m=e.engine.runtime)==null?void 0:m.ui_styles)||{},n=((f=e.engine.runtime)==null?void 0:f.ui)||{},i=(a==null?void 0:a.text)||n.tutorial_label||n.label_text||"CLEAN!",r=(a==null?void 0:a.font)||"brand.warning",c=(a==null?void 0:a.fontSize)||s.label_font_size||52,d=(_=a==null?void 0:a.letterSpacing)!=null?_:(y=s.label_letter_spacing)!=null?y:-1,p=(a==null?void 0:a.align)||"center",u=o.tint,h=typeof u=="string"?u:u?`#${u.toString(16).padStart(6,"0")}`:s.label_fill||"#FFF1C1",l=new qn({text:i,style:{fontFamily:X(r),fontSize:c,fontWeight:q(r),fill:h,align:p,letterSpacing:d,stroke:{color:s.label_stroke||"#8B0000",width:2},dropShadow:{color:s.label_shadow_color||"#000000",alpha:(b=s.label_shadow_alpha)!=null?b:.8,angle:(C=s.label_shadow_angle)!=null?C:0,blur:(x=s.label_shadow_blur)!=null?x:4,distance:(S=s.label_shadow_distance)!=null?S:2}}});return l.anchor.set(.5,0),l.alpha=(v=o.alpha)!=null?v:0,l.visible=(w=o.visible)!=null?w:!0,l}function jn(e,t,a,o,s){var c,d,p,u,h,l,m;let n=s.objects.get("hand_tutorial_1"),i=((c=n==null?void 0:n.gameplay)==null?void 0:c.tuning)||{},r=(n==null?void 0:n.transform)||{};if(!o){let f=(d=i.animation_duration)!=null?d:1.5,y=a%f/f,_=y<.5?2*y*y:-1+(4-2*y)*y,b=(p=i.x_offset)!=null?p:0,C=(u=i.y_offset)!=null?u:0,x=(h=i.animation_range)!=null?h:40,S=x*.7,v=x,w=t.x+b+S,T=t.y+C+v,g=w+S,A=T+v;e.x=w+(g-w)*_,e.y=T+(A-T)*_;let M=(l=r.scale)!=null?l:.1875,B=(m=i.hand_scale_multiplier)!=null?m:2.5;e.scale.set(M*B)}}import{Graphics as Ge,Assets as Ne,Texture as Jn,Rectangle as Kn,Color as bt}from"pixi.js";async function Xe(e,t,a=16777215,o=!1){try{let n=(globalThis.INLINE_ASSETS||{})[e];return await Ne.load(n||e)}catch{console.warn(`Asset missing: ${e}. Using placeholder.`);let n=new Ge;return o?n.roundRect(0,0,60,120,10).fill({color:a}):(n.circle(30,30,30).fill({color:a}),n.rect(25,30,10,40).fill({color:a})),t.renderer.generateTexture(n)}}async function Qn(e,t,a){var f,y,_,b,C,x,S,v,w,T;let s=(globalThis.INLINE_ASSETS||{})[e]||e,n;try{n=await Ne.load(s),console.log("[character] loaded sheet",{path:e,sourceUsed:s})}catch(g){let M=(a.gameplay.character_sheet||{}).fallback_color||"#ff00ff";n=await Xe(e,t,new bt(M).toNumber(),!0),console.warn("[character] fallback loadAsset used",{path:e,err:g})}let i=n.source||n.baseTexture||n;i&&"valid"in i&&i.valid===!1&&typeof i.once=="function"&&await new Promise(g=>i.once("loaded",g));let r=a.gameplay.character_sheet||{},c=(f=r.cols)!=null?f:3,d=(y=r.rows)!=null?y:2,p=(x=(C=(_=i==null?void 0:i.width)!=null?_:i==null?void 0:i.pixelWidth)!=null?C:(b=i==null?void 0:i.baseTexture)==null?void 0:b.width)!=null?x:n.width,u=(T=(w=(S=i==null?void 0:i.height)!=null?S:i==null?void 0:i.pixelHeight)!=null?w:(v=i==null?void 0:i.baseTexture)==null?void 0:v.height)!=null?T:n.height,h=p/c,l=u/d;if(!Number.isFinite(h)||!Number.isFinite(l)||h<=0||l<=0||!i)return[n];let m=[];for(let g=0;g<d;g++)for(let A=0;A<c;A++)m.push(new Jn({source:i,frame:new Kn(A*h,g*l,h,l)}));return m.length>2&&m.push(...m.slice(1,-1).reverse()),console.log("[character] frames prepared",{count:m.length}),m}function Zn(e,t){var p,u,h,l;let a=t.gameplay.brush||{},o=new bt(t.theme.brush_color||"#ffffff").toNumber(),s=(p=a.radius)!=null?p:20,n=(u=a.inner_radius)!=null?u:15,i=(h=a.alpha)!=null?h:.8,r=(l=a.inner_alpha)!=null?l:.3,c=a.inner_color||"#ffffff",d=new Ge;return d.circle(0,0,s).fill({color:o,alpha:i}),d.circle(0,0,n).fill({color:new bt(c).toNumber(),alpha:r}),e.renderer.generateTexture(d)}export{ht as GameObject,gt as GameObjectManager,dt as Renderer,ct as Transform,Nn as animateHandClick,zn as animatePanelEntrance,Zn as createBrushTexture,kn as createEndGamePanel,$n as createHandTutorial,Mn as createPixiBase,Vn as createTutorialLabel,Dn as getRegisteredFontIds,Xe as loadAsset,Qn as loadCharacterFrames,En as registerFont,X as resolveFont,q as resolveFontWeight,jn as updateHandAnimation};
@@ -1,4 +1,4 @@
1
- "use strict";var oa=Object.create;var De=Object.defineProperty;var ra=Object.getOwnPropertyDescriptor;var la=Object.getOwnPropertyNames;var ca=Object.getPrototypeOf,da=Object.prototype.hasOwnProperty;var pa=(e,t)=>{for(var n in t)De(e,n,{get:t[n],enumerable:!0})},Fn=(e,t,n,i)=>{if(t&&typeof t=="object"||typeof t=="function")for(let a of la(t))!da.call(e,a)&&a!==n&&De(e,a,{get:()=>t[a],enumerable:!(i=ra(t,a))||i.enumerable});return e};var xe=(e,t,n)=>(n=e!=null?oa(ca(e)):{},Fn(t||!e||!e.__esModule?De(n,"default",{value:e,enumerable:!0}):n,e)),ua=e=>Fn(De({},"__esModule",{value:!0}),e);var Fa={};pa(Fa,{AspectClass:()=>lt,GameObject:()=>Re,GameObjectManager:()=>Ge,Renderer:()=>Ae,ResponsiveUISystem:()=>fe,Transform:()=>Ce,animateHandClick:()=>ui,animatePanelEntrance:()=>pi,createBrushTexture:()=>bi,createEndGamePanel:()=>di,createHandTutorial:()=>mi,createThreeBase:()=>ri,createTutorialLabel:()=>fi,getAspectClass:()=>Ie,getRegisteredFontIds:()=>ci,loadAsset:()=>ct,loadCharacterFrames:()=>gi,registerFont:()=>li,resolveFont:()=>O,resolveFontWeight:()=>Y,updateHandAnimation:()=>hi});module.exports=ua(Fa);var he=xe(require("three"));var K={};function $e(e,t,n=!1){K[e]||(K[e]=[]),K[e].push({fn:t,once:n})}function et(e,t){if(K[e]){if(!t){delete K[e];return}K[e]=K[e].filter(n=>n.fn!==t)}}function Pe(e,...t){let n=K[e];if(n)for(let i of[...n])i.fn(...t),i.once&&et(e,i.fn)}function W(e,t){$e(e,t,!0)}var We={name:"handler-playable-sdk",version:"0.1.10",description:"Handler Playable SDK v0.1 with contract-aligned surface (root sandbox, canonical event envelope).",main:"dist/index.js",module:"dist/index.mjs",types:"dist/index.d.ts",exports:{".":{types:"./dist/index.d.ts",import:"./dist/index.mjs",require:"./dist/index.js"},"./pixi":{types:"./dist/pixi/index.d.ts",import:"./dist/pixi/index.mjs",require:"./dist/pixi/index.js"},"./three":{types:"./dist/three/index.d.ts",import:"./dist/three/index.mjs",require:"./dist/three/index.js"}},scripts:{build:"tsup src/index.ts src/pixi/index.ts src/three/index.ts --format cjs,esm --dts --clean --minify",lint:"eslint 'src/**/*.{ts,tsx}'",typecheck:"tsc --noEmit",prepublishOnly:"npm run build"},author:"Handler",license:"MIT",publishConfig:{access:"public"},repository:{type:"git",url:"https://github.com/HandlerAIGames/handler-playable-sdk.git"},files:["dist","LICENSE","README.md"],peerDependencies:{"pixi.js":"^8.0.0",three:"^0.160.0"},peerDependenciesMeta:{"pixi.js":{optional:!0},three:{optional:!0}},devDependencies:{"@types/three":"^0.160.0",eslint:"^8.57.1","pixi.js":"^8.8.1",three:"^0.160.0","ts-node":"^10.9.2",tsup:"^8.4.0",typescript:"^5.7.2"}};var z=0,fa=z++,kn=z++,Dn=z++,$n=z++,Pn=z++,Wn=z++,zn=z++,Bn=z++,Nn=z++,On=z++,Yn=z++,In=z++,S=fa;function Gn(){return S===kn}function jn(){return S===Dn}function Vn(){return S===$n}function qn(){return S===Pn}function re(){return S===Wn}function le(){return S===zn}function Xn(){return S===Bn}function Kn(){return S===Nn}function Jn(){return S===On}function tt(){return S===Yn}function nt(){return S===In}function Zn(){let e=typeof AD_PROTOCOL!="undefined"?AD_PROTOCOL:"none",t=typeof AD_NETWORK!="undefined"?AD_NETWORK:"web_embed";if(e==="mraid")try{mraid.getState(),S=kn;return}catch{}else if(e==="dapi")try{dapi.isReady(),S=Dn;return}catch{}if(t==="facebook")try{typeof FbPlayableAd!="undefined"&&(S=$n)}catch{}else if(t==="google")try{typeof ExitApi!="undefined"&&(S=Pn)}catch{}else if(t==="mintegral")window.gameReady&&(S=Wn);else if(t==="tapjoy")window.TJ_API&&(S=zn);else if(t==="tiktok")window.openAppStore&&(S=Bn);else if(t==="smadex")try{window.smxTracking&&(S=Nn)}catch{}else if(t==="snapchat")try{window.ScPlayableAd&&(S=On)}catch{}else t==="vungle"?S=Yn:(e==="nucleo"||t==="nucleo")&&(S=In)}var ii={mechanic_id:"TODO_mechanic_id",variant_id:"TODO_variant_id",deployment_id:"TODO_deployment_id",export_id:"TODO_export_id",profile_id:"TODO_profile_id",instance_id:"default"},ha=Math.random().toString(36).slice(2),ce=null,Ee={...ii},ai="web_embed",ya={},it=!1,_e=!1,Te=!1,si=!1,rt=1,st=0,Oe=!1,V=!1,Ne="",de=Math.floor(window.innerWidth),pe=Math.floor(window.innerHeight),ot=de>pe,q=!1,we=!1,Qn=!1,Un=!1,at=!1,ze=null;function ei(){if(ce)return ce;let e=document.createElement("div");return e.id="handler-root",e.setAttribute("data-handler-root","true"),document.body.appendChild(e),ce=e,e}function Be(e){switch(e){case"interaction":return"engagement";case"finish":return"complete";case"install":return"cta_click";default:return e}}function oi(e,t){return{event_name:e,ts:Date.now(),session_id:ha,deployment_id:Ee.deployment_id,variant_id:Ee.variant_id,export_profile_id:Ee.profile_id,instance_id:Ee.instance_id||"default",env:ai==="mraid"?"mraid":"web",payload:t}}function _(e,t){let n=Be(e),i=oi(n,t);Pe(n,i),n!==e&&Pe(e,i)}function ve(){ze&&(ze(de,pe),ze=null)}function ue(e){rt=e,_("volume",e)}function me(e){e&&(si=!0),!Te&&(Te=!0,_("pause"),ue(0))}function Se(e){!e&&si||Te&&(Te=!1,_("resume"),ue(rt))}function Z(e,t){de=Math.floor(e||window.innerWidth),pe=Math.floor(t||window.innerHeight),ot=de>pe,_("resize",{width:de,height:pe})}function ga(){if(Gn())try{let e=mraid.getMaxSize();Z(e.width,e.height);let t=()=>{mraid.isViewable()&&mraid.getState()!=="hidden"?Se():me()};if(mraid.addEventListener("viewableChange",t),mraid.addEventListener("stateChange",t),mraid.addEventListener("sizeChange",()=>{let n=mraid.getMaxSize();Z(n.width,n.height)}),mraid.getAudioVolume){let n=mraid.getAudioVolume();ue(n?1:0)}if(mraid.addEventListener("audioVolumeChange",n=>{n!==null&&ue(n>0?1:0)}),mraid.addEventListener("error",(n,i)=>{console.warn("mraid error:",n,"action:",i)}),Oe=!0,mraid.isViewable()&&mraid.getState()!=="hidden")q=!0,_("boot"),_("view"),_("ready"),V=!0,ve();else{let n=()=>{q=!0,_("boot"),_("view"),_("ready"),V=!0,ve()};mraid.addEventListener("ready",n)}}catch(e){console.warn("MRAID hook skipped",e)}}function ba(){if(jn())try{let e=dapi.getScreenSize();Z(e.width,e.height),dapi.addEventListener("viewableChange",n=>{n.isViewable?Se():me()}),dapi.addEventListener("adResized",n=>{let i=dapi.getScreenSize();Z(n.width||i.width,n.height||i.height)});let t=dapi.getAudioVolume();if(ue(t?1:0),dapi.addEventListener("audioVolumeChange",n=>ue(n?1:0)),Oe=!0,dapi.isViewable())q=!0,_("boot"),_("view"),_("ready"),V=!0,ve();else{let n=()=>{q=!0,_("boot"),_("view"),_("ready"),V=!0,ve()};dapi.addEventListener("ready",n)}}catch(e){console.warn("DAPI hook skipped",e)}}function ti(){let e=()=>{q||document.visibilityState==="visible"&&(document.readyState==="complete"||document.readyState==="interactive")&&(q=!0,_("boot"),_("view"),_("ready"),V=!0,ve(),we&&(we=!1,J.start()))};window.addEventListener("resize",()=>Z()),document.addEventListener("visibilitychange",()=>{document.visibilityState==="visible"?(Se(),e()):me()}),document.readyState==="complete"||document.readyState==="interactive"?e():window.addEventListener("load",e),Oe=!0}function xa(){let e=t=>{typeof TouchEvent!="undefined"&&t instanceof TouchEvent&&(Qn=!0),!(Qn&&t instanceof MouseEvent)&&(st+=1,_("interaction",st))};document.addEventListener("mousedown",e),document.addEventListener("touchstart",e)}function _a(e){var i,a,s,o,d,r,f,l,u,c,p,b;let t=typeof AD_PROTOCOL!="undefined"?AD_PROTOCOL:"none";if((typeof AD_NETWORK!="undefined"?AD_NETWORK:"web_embed")==="google")try{(i=window.ExitApi)==null||i.exit();return}catch{}if(t==="mraid"&&typeof mraid!="undefined")mraid.open(e||"");else if(t==="dapi"&&typeof dapi!="undefined")dapi.openStoreUrl();else if(le())(s=(a=window.TJ_API)==null?void 0:a.click)==null||s.call(a);else if(Vn())(d=(o=window.FbPlayableAd)==null?void 0:o.onCTAClick)==null||d.call(o);else if(Jn())(f=(r=window.ScPlayableAd)==null?void 0:r.onCTAClick)==null||f.call(r);else if(Kn())try{(u=(l=window.smxTracking)==null?void 0:l.redirect)==null||u.call(l)}catch(x){console.warn("Smadex redirect failed",x)}else if(qn()){let x=window.ExitApi;x&&typeof x.exit=="function"?x.exit(e||Ne||""):e&&window.open(e)}else re()?(c=window.install)==null||c.call(window):Xn()?(p=window.openAppStore)==null||p.call(window):tt()?(b=parent==null?void 0:parent.postMessage)==null||b.call(parent,"download","*"):e&&window.open(e)}function Ea(){let e=typeof AD_NETWORK!="undefined"?AD_NETWORK:"web_embed",t=n=>{if(!n)return;let i=new Image;i.src=n};if(e==="bigabid"){let n=window.BIGABID_BIDTIMEMACROS;if(!n)return;W("view",()=>t(n.mraid_viewable)),W("start",()=>t(n.game_viewable)),W("engagement",()=>t(n.engagement));let i=()=>t(n.complete);W("complete",i),$e("engagement",a=>{var s;((s=a==null?void 0:a.payload)==null?void 0:s.count)>3&&i()}),W("cta_click",()=>t(n.click))}else if(e==="inmobi"){let n=window.INMOBI_DSPMACROS;if(!n)return;W("view",()=>t(n.Ad_Load_Start)),W("start",()=>t(n.Ad_Viewable)),W("engagement",()=>t(n.First_Engagement)),W("complete",()=>t(n.Gameplay_Complete)),W("cta_click",()=>t(n.DSP_Click)),W("start",()=>{[5,10,15,20,25,30].forEach(i=>setTimeout(()=>t(n[`Spent_${i}_Seconds`]),i*1e3))})}}function wa(){if(!le())return;let e=window.TJ_API;e&&e.setPlayableAPI&&e.setPlayableAPI({skipAd:()=>{try{J.finish()}catch(t){console.warn("Tapjoy skip failed",t)}}})}function ni(){var t,n,i;let e=window.TJ_API;(t=e==null?void 0:e.objectiveComplete)==null||t.call(e),(n=e==null?void 0:e.playableFinished)==null||n.call(e),(i=e==null?void 0:e.gameplayFinished)==null||i.call(e)}function Ta(){re()&&(window.mintGameStart=()=>{Se(!0),Z()},window.mintGameClose=()=>{me(!0)})}function va(){if(!nt())return;let e=window.NUC;!e||!e.trigger||(J.on("cta_click",()=>{var t,n;return(n=(t=e.trigger).convert)==null?void 0:n.call(t,Ne)}),J.on("complete",()=>{var t,n;return(n=(t=e.trigger).tryAgain)==null?void 0:n.call(t)}))}var J={init(e={},t){if(ai=e.profile||"web_embed",ya=e.consent||{},Ee={...ii,...e.ids||{}},ce=e.rootEl||ce,Ne=e.destinationUrl||(/android/i.test(navigator.userAgent)?"https://play.google.com/store":"https://www.apple.com/app-store/"),t&&(ze=t),_("init"),document.body.oncontextmenu=()=>!1,ei(),Sa(ce),Zn(),ga(),ba(),!Oe){if(document.readyState==="complete")ti();else if(!Un){Un=!0;let n=()=>{ti(),window.removeEventListener("load",n),document.removeEventListener("DOMContentLoaded",n)};window.addEventListener("load",n),document.addEventListener("DOMContentLoaded",n)}}xa(),Ea(),wa(),Ta(),va(),console.log(`%c @handler/playable-sdk %c v${We.version||"0.0.0"} `,"background: #007acc; color: #fff; font-size: 14px; padding: 4px 8px; border-top-left-radius: 4px; border-bottom-left-radius: 4px;","background: #e1e4e8; color: #333; font-size: 14px; padding: 4px 8px; border-top-right-radius: 4px; border-bottom-right-radius: 4px;"),q&&!V&&(_("boot"),_("view"),_("ready"),we&&(we=!1,J.start()),V=!0),V=q},getRoot(){return ei()},get version(){return We.version||"0.0.0"},get maxWidth(){return de},get maxHeight(){return pe},get isLandscape(){return ot},get isReady(){return V},get isStarted(){return it},get isPaused(){return Te},get isFinished(){return _e},get volume(){return rt},get interactions(){return st},on(e,t){$e(Be(e),t)},off(e,t){et(Be(e),t)},start(){var e,t;if(!it){if(!q){we=!0;return}if(it=!0,_("start"),Z(),re())me(),(e=window.gameReady)==null||e.call(window);else if(le()){let n=window.TJ_API;(t=n==null?void 0:n.setPlayableBuild)==null||t.call(n,{orientation:ot?"landscape":"portrait",buildID:We.version||"dev"})}}},finish(){var e,t;_e||(_e=!0,_("complete"),re()?(e=window.gameEnd)==null||e.call(window):tt()?(t=parent==null?void 0:parent.postMessage)==null||t.call(parent,"complete","*"):le()&&ni())},install(e){if(!_e){_e=!0,le()?(ni(),setTimeout(()=>J.install(e),300)):(_("complete"),setTimeout(()=>J.install(e),0));return}at||(at=!0,setTimeout(()=>at=!1,500),_("cta_click"),_("conversion"),_a(e||Ne))},emit(e,t){let n=Be(e);if(!["view","boot","start","engagement","complete","cta_click","conversion","retry","pause","resume","resize","volume","error"].includes(n)&&!n.startsWith("custom."))throw new Error(`Event ${e} must be canonical or namespaced as custom.<mechanic_id>.<event>`);let i=oi(n,t);Pe(n,i)},retry(){var e,t,n;if(re())(e=window.gameRetry)==null||e.call(window);else if(nt()){let i=window.NUC;(n=(t=i==null?void 0:i.trigger)==null?void 0:t.tryAgain)==null||n.call(t)}_("engagement",{action:"retry"})},pause(){me(!0)},resume(){Se(!0)},resize(e,t){Z(e,t)}},Ye=J;function Sa(e){let t=document.createElement("script");t.type="text/javascript",t.textContent=`
1
+ "use strict";var ca=Object.create;var Pe=Object.defineProperty;var da=Object.getOwnPropertyDescriptor;var pa=Object.getOwnPropertyNames;var ma=Object.getPrototypeOf,ua=Object.prototype.hasOwnProperty;var ha=(e,t)=>{for(var n in t)Pe(e,n,{get:t[n],enumerable:!0})},Pn=(e,t,n,i)=>{if(t&&typeof t=="object"||typeof t=="function")for(let a of pa(t))!ua.call(e,a)&&a!==n&&Pe(e,a,{get:()=>t[a],enumerable:!(i=da(t,a))||i.enumerable});return e};var xe=(e,t,n)=>(n=e!=null?ca(ma(e)):{},Pn(t||!e||!e.__esModule?Pe(n,"default",{value:e,enumerable:!0}):n,e)),fa=e=>Pn(Pe({},"__esModule",{value:!0}),e);var $a={};ha($a,{AspectClass:()=>dt,GameObject:()=>Re,GameObjectManager:()=>je,Renderer:()=>Ae,ResponsiveUISystem:()=>he,Transform:()=>Ce,animateHandClick:()=>yi,animatePanelEntrance:()=>fi,createBrushTexture:()=>Ei,createEndGamePanel:()=>hi,createHandTutorial:()=>gi,createThreeBase:()=>pi,createTutorialLabel:()=>bi,getAspectClass:()=>Ve,getRegisteredFontIds:()=>ui,loadAsset:()=>pt,loadCharacterFrames:()=>wi,registerFont:()=>mi,resolveFont:()=>N,resolveFontWeight:()=>Y,updateHandAnimation:()=>xi});module.exports=fa($a);var fe=xe(require("three"));var J={};function We(e,t,n=!1){J[e]||(J[e]=[]),J[e].push({fn:t,once:n})}function nt(e,t){if(J[e]){if(!t){delete J[e];return}J[e]=J[e].filter(n=>n.fn!==t)}}function ze(e,...t){let n=J[e];if(n)for(let i of[...n])i.fn(...t),i.once&&nt(e,i.fn)}function k(e,t){We(e,t,!0)}var Be={name:"handler-playable-sdk",version:"0.1.11",description:"Handler Playable SDK v0.1 with contract-aligned surface (root sandbox, canonical event envelope).",main:"dist/index.js",module:"dist/index.mjs",types:"dist/index.d.ts",exports:{".":{types:"./dist/index.d.ts",import:"./dist/index.mjs",require:"./dist/index.js"},"./pixi":{types:"./dist/pixi/index.d.ts",import:"./dist/pixi/index.mjs",require:"./dist/pixi/index.js"},"./three":{types:"./dist/three/index.d.ts",import:"./dist/three/index.mjs",require:"./dist/three/index.js"}},scripts:{build:"tsup src/index.ts src/pixi/index.ts src/three/index.ts --format cjs,esm --dts --clean --minify",lint:"eslint 'src/**/*.{ts,tsx}'",typecheck:"tsc --noEmit",prepublishOnly:"npm run build"},author:"Handler",license:"MIT",publishConfig:{access:"public"},repository:{type:"git",url:"https://github.com/HandlerAIGames/handler-playable-sdk.git"},files:["dist","LICENSE","README.md"],peerDependencies:{"pixi.js":"^8.0.0",three:"^0.160.0"},peerDependenciesMeta:{"pixi.js":{optional:!0},three:{optional:!0}},devDependencies:{"@types/three":"^0.160.0",eslint:"^8.57.1","pixi.js":"^8.8.1",three:"^0.160.0","ts-node":"^10.9.2",tsup:"^8.4.0",typescript:"^5.7.2"}};var D=0,ga=D++,Wn=D++,zn=D++,Bn=D++,On=D++,Nn=D++,Yn=D++,In=D++,Gn=D++,Vn=D++,jn=D++,qn=D++,E=ga;function Xn(){return E===Wn}function Kn(){return E===zn}function Jn(){return E===Bn}function Zn(){return E===On}function re(){return E===Nn}function le(){return E===Yn}function Qn(){return E===In}function Un(){return E===Gn}function ei(){return E===Vn}function it(){return E===jn}function at(){return E===qn}function ti(){let e=typeof AD_PROTOCOL!="undefined"?AD_PROTOCOL:"none",t=typeof AD_NETWORK!="undefined"?AD_NETWORK:"web_embed";if(e==="mraid")try{mraid.getState(),E=Wn;return}catch{}else if(e==="dapi")try{dapi.isReady(),E=zn;return}catch{}if(t==="facebook")try{typeof FbPlayableAd!="undefined"&&(E=Bn)}catch{}else if(t==="google")try{typeof ExitApi!="undefined"&&(E=On)}catch{}else if(t==="mintegral")window.gameReady&&(E=Nn);else if(t==="tapjoy")window.TJ_API&&(E=Yn);else if(t==="tiktok")window.openAppStore&&(E=In);else if(t==="smadex")try{window.smxTracking&&(E=Gn)}catch{}else if(t==="snapchat")try{window.ScPlayableAd&&(E=Vn)}catch{}else t==="vungle"?E=jn:(e==="nucleo"||t==="nucleo")&&(E=qn)}var ri={mechanic_id:"TODO_mechanic_id",variant_id:"TODO_variant_id",deployment_id:"TODO_deployment_id",export_id:"TODO_export_id",profile_id:"TODO_profile_id",instance_id:"default"},ba=Math.random().toString(36).slice(2),ce=null,we={...ri},li="web_embed",xa={},st=!1,_e=!1,Te=!1,ci=!1,ct=1,rt=0,Ie=!1,q=!1,Ye="",de=Math.floor(window.innerWidth),pe=Math.floor(window.innerHeight),lt=de>pe,X=!1,Ee=!1,ni=!1,ii=!1,ot=!1,Oe=null;function ai(){if(ce)return ce;let e=document.createElement("div");return e.id="handler-root",e.setAttribute("data-handler-root","true"),document.body.appendChild(e),ce=e,e}function Ne(e){switch(e){case"interaction":return"engagement";case"finish":return"complete";case"install":return"cta_click";default:return e}}function di(e,t){return{event_name:e,ts:Date.now(),session_id:ba,deployment_id:we.deployment_id,variant_id:we.variant_id,export_profile_id:we.profile_id,instance_id:we.instance_id||"default",env:li==="mraid"?"mraid":"web",payload:t}}function _(e,t){let n=Ne(e),i=di(n,t);ze(n,i),n!==e&&ze(e,i)}function ve(){Oe&&(Oe(de,pe),Oe=null)}function me(e){ct=e,_("volume",e)}function ue(e){e&&(ci=!0),!Te&&(Te=!0,_("pause"),me(0))}function Se(e){!e&&ci||Te&&(Te=!1,_("resume"),me(ct))}function Q(e,t){de=Math.floor(e||window.innerWidth),pe=Math.floor(t||window.innerHeight),lt=de>pe,_("resize",{width:de,height:pe})}function _a(){if(Xn())try{let e=mraid.getMaxSize();Q(e.width,e.height);let t=()=>{mraid.isViewable()&&mraid.getState()!=="hidden"?Se():ue()};if(mraid.addEventListener("viewableChange",t),mraid.addEventListener("stateChange",t),mraid.addEventListener("sizeChange",()=>{let n=mraid.getMaxSize();Q(n.width,n.height)}),mraid.getAudioVolume){let n=mraid.getAudioVolume();me(n?1:0)}if(mraid.addEventListener("audioVolumeChange",n=>{n!==null&&me(n>0?1:0)}),mraid.addEventListener("error",(n,i)=>{console.warn("mraid error:",n,"action:",i)}),Ie=!0,mraid.isViewable()&&mraid.getState()!=="hidden")X=!0,_("boot"),_("view"),_("ready"),q=!0,ve();else{let n=()=>{X=!0,_("boot"),_("view"),_("ready"),q=!0,ve()};mraid.addEventListener("ready",n)}}catch(e){console.warn("MRAID hook skipped",e)}}function wa(){if(Kn())try{let e=dapi.getScreenSize();Q(e.width,e.height),dapi.addEventListener("viewableChange",n=>{n.isViewable?Se():ue()}),dapi.addEventListener("adResized",n=>{let i=dapi.getScreenSize();Q(n.width||i.width,n.height||i.height)});let t=dapi.getAudioVolume();if(me(t?1:0),dapi.addEventListener("audioVolumeChange",n=>me(n?1:0)),Ie=!0,dapi.isViewable())X=!0,_("boot"),_("view"),_("ready"),q=!0,ve();else{let n=()=>{X=!0,_("boot"),_("view"),_("ready"),q=!0,ve()};dapi.addEventListener("ready",n)}}catch(e){console.warn("DAPI hook skipped",e)}}function si(){let e=()=>{X||document.visibilityState==="visible"&&(document.readyState==="complete"||document.readyState==="interactive")&&(X=!0,_("boot"),_("view"),_("ready"),q=!0,ve(),Ee&&(Ee=!1,Z.start()))};window.addEventListener("resize",()=>Q()),document.addEventListener("visibilitychange",()=>{document.visibilityState==="visible"?(Se(),e()):ue()}),document.readyState==="complete"||document.readyState==="interactive"?e():window.addEventListener("load",e),Ie=!0}function Ea(){let e=t=>{typeof TouchEvent!="undefined"&&t instanceof TouchEvent&&(ni=!0),!(ni&&t instanceof MouseEvent)&&(rt+=1,_("interaction",rt))};document.addEventListener("mousedown",e),document.addEventListener("touchstart",e)}function Ta(e){var i,a,s,o,p,l,h,c,u,r,m,g;let t=typeof AD_PROTOCOL!="undefined"?AD_PROTOCOL:"none";if((typeof AD_NETWORK!="undefined"?AD_NETWORK:"web_embed")==="google")try{(i=window.ExitApi)==null||i.exit();return}catch{}if(t==="mraid"&&typeof mraid!="undefined")mraid.open(e||"");else if(t==="dapi"&&typeof dapi!="undefined")dapi.openStoreUrl();else if(le())(s=(a=window.TJ_API)==null?void 0:a.click)==null||s.call(a);else if(Jn())(p=(o=window.FbPlayableAd)==null?void 0:o.onCTAClick)==null||p.call(o);else if(ei())(h=(l=window.ScPlayableAd)==null?void 0:l.onCTAClick)==null||h.call(l);else if(Un())try{(u=(c=window.smxTracking)==null?void 0:c.redirect)==null||u.call(c)}catch(b){console.warn("Smadex redirect failed",b)}else if(Zn()){let b=window.ExitApi;b&&typeof b.exit=="function"?b.exit(e||Ye||""):e&&window.open(e)}else re()?(r=window.install)==null||r.call(window):Qn()?(m=window.openAppStore)==null||m.call(window):it()?(g=parent==null?void 0:parent.postMessage)==null||g.call(parent,"download","*"):e&&window.open(e)}function va(){let e=typeof AD_NETWORK!="undefined"?AD_NETWORK:"web_embed",t=n=>{if(!n)return;let i=new Image;i.src=n};if(e==="bigabid"){let n=window.BIGABID_BIDTIMEMACROS;if(!n)return;k("view",()=>t(n.mraid_viewable)),k("start",()=>t(n.game_viewable)),k("engagement",()=>t(n.engagement));let i=()=>t(n.complete);k("complete",i),We("engagement",a=>{var s;((s=a==null?void 0:a.payload)==null?void 0:s.count)>3&&i()}),k("cta_click",()=>t(n.click))}else if(e==="inmobi"){let n=window.INMOBI_DSPMACROS;if(!n)return;k("view",()=>t(n.Ad_Load_Start)),k("start",()=>t(n.Ad_Viewable)),k("engagement",()=>t(n.First_Engagement)),k("complete",()=>t(n.Gameplay_Complete)),k("cta_click",()=>t(n.DSP_Click)),k("start",()=>{[5,10,15,20,25,30].forEach(i=>setTimeout(()=>t(n[`Spent_${i}_Seconds`]),i*1e3))})}}function Sa(){if(!le())return;let e=window.TJ_API;e&&e.setPlayableAPI&&e.setPlayableAPI({skipAd:()=>{try{Z.finish()}catch(t){console.warn("Tapjoy skip failed",t)}}})}function oi(){var t,n,i;let e=window.TJ_API;(t=e==null?void 0:e.objectiveComplete)==null||t.call(e),(n=e==null?void 0:e.playableFinished)==null||n.call(e),(i=e==null?void 0:e.gameplayFinished)==null||i.call(e)}function Ca(){re()&&(window.mintGameStart=()=>{Se(!0),Q()},window.mintGameClose=()=>{ue(!0)})}function Aa(){if(!at())return;let e=window.NUC;!e||!e.trigger||(Z.on("cta_click",()=>{var t,n;return(n=(t=e.trigger).convert)==null?void 0:n.call(t,Ye)}),Z.on("complete",()=>{var t,n;return(n=(t=e.trigger).tryAgain)==null?void 0:n.call(t)}))}var Z={init(e={},t){if(li=e.profile||"web_embed",xa=e.consent||{},we={...ri,...e.ids||{}},ce=e.rootEl||ce,Ye=e.destinationUrl||(/android/i.test(navigator.userAgent)?"https://play.google.com/store":"https://www.apple.com/app-store/"),t&&(Oe=t),_("init"),document.body.oncontextmenu=()=>!1,ai(),Ra(ce),ti(),_a(),wa(),!Ie){if(document.readyState==="complete")si();else if(!ii){ii=!0;let n=()=>{si(),window.removeEventListener("load",n),document.removeEventListener("DOMContentLoaded",n)};window.addEventListener("load",n),document.addEventListener("DOMContentLoaded",n)}}Ea(),va(),Sa(),Ca(),Aa(),console.log(`%c @handler/playable-sdk %c v${Be.version||"0.0.0"} `,"background: #007acc; color: #fff; font-size: 14px; padding: 4px 8px; border-top-left-radius: 4px; border-bottom-left-radius: 4px;","background: #e1e4e8; color: #333; font-size: 14px; padding: 4px 8px; border-top-right-radius: 4px; border-bottom-right-radius: 4px;"),X&&!q&&(_("boot"),_("view"),_("ready"),Ee&&(Ee=!1,Z.start()),q=!0),q=X},getRoot(){return ai()},get version(){return Be.version||"0.0.0"},get maxWidth(){return de},get maxHeight(){return pe},get isLandscape(){return lt},get isReady(){return q},get isStarted(){return st},get isPaused(){return Te},get isFinished(){return _e},get volume(){return ct},get interactions(){return rt},on(e,t){We(Ne(e),t)},off(e,t){nt(Ne(e),t)},start(){var e,t;if(!st){if(!X){Ee=!0;return}if(st=!0,_("start"),Q(),re())ue(),(e=window.gameReady)==null||e.call(window);else if(le()){let n=window.TJ_API;(t=n==null?void 0:n.setPlayableBuild)==null||t.call(n,{orientation:lt?"landscape":"portrait",buildID:Be.version||"dev"})}}},finish(){var e,t;_e||(_e=!0,_("complete"),re()?(e=window.gameEnd)==null||e.call(window):it()?(t=parent==null?void 0:parent.postMessage)==null||t.call(parent,"complete","*"):le()&&oi())},install(e){if(!_e){_e=!0,le()?(oi(),setTimeout(()=>Z.install(e),300)):(_("complete"),setTimeout(()=>Z.install(e),0));return}ot||(ot=!0,setTimeout(()=>ot=!1,500),_("cta_click"),_("conversion"),Ta(e||Ye))},emit(e,t){let n=Ne(e);if(!["view","boot","start","engagement","complete","cta_click","conversion","retry","pause","resume","resize","volume","error"].includes(n)&&!n.startsWith("custom."))throw new Error(`Event ${e} must be canonical or namespaced as custom.<mechanic_id>.<event>`);let i=di(n,t);ze(n,i)},retry(){var e,t,n;if(re())(e=window.gameRetry)==null||e.call(window);else if(at()){let i=window.NUC;(n=(t=i==null?void 0:i.trigger)==null?void 0:t.tryAgain)==null||n.call(t)}_("engagement",{action:"retry"})},pause(){ue(!0)},resume(){Se(!0)},resize(e,t){Q(e,t)}},Ge=Z;function Ra(e){let t=document.createElement("script");t.type="text/javascript",t.textContent=`
2
2
  (function(){
3
3
  var events = ['touchstart','touchend','mousedown','keydown'];
4
4
  function unlock(){
@@ -14,19 +14,16 @@
14
14
  }
15
15
  events.forEach(function(e){ document.addEventListener(e, unlock, false); });
16
16
  })();
17
- `,e.appendChild(t)}var lt=(i=>(i[i.PHONE_TALL=0]="PHONE_TALL",i[i.TABLET=1]="TABLET",i[i.LANDSCAPE=2]="LANDSCAPE",i))(lt||{});function Ie(e,t){let n=e/t;return n<=.62?0:n<=.85?1:2}var fe=class{constructor(t,n){this.root=t,this.stage=n,this.uiFrame=document.createElement("div"),this.uiFrame.style.position="absolute",this.uiFrame.style.top="0",this.uiFrame.style.bottom="0",this.uiFrame.style.left="50%",this.uiFrame.style.transform="translateX(-50%)",this.uiFrame.style.width="100%",this.uiFrame.style.maxWidth="420px",this.uiFrame.style.pointerEvents="none",this.stage.appendChild(this.uiFrame),this.uiContainer=document.createElement("div"),this.uiContainer.setAttribute("style",["position:absolute","inset:0","display:flex","flex-direction:column","justify-content:flex-start","gap:12px","pointer-events:none","padding:20px 16px","padding-bottom:clamp(24px, 6vh, 96px)","box-sizing:border-box","z-index:2"].join(";")),this.uiFrame.appendChild(this.uiContainer),this.updateLayout()}getUIFrame(){return this.uiFrame}getUIContainer(){return this.uiContainer}updateLayout(){let t=this.stage.getBoundingClientRect(),n=Ie(t.width,t.height);n===0?this.uiFrame.style.maxWidth="420px":n===1?this.uiFrame.style.maxWidth="520px":this.uiFrame.style.maxWidth="640px"}getAspectClass(){let t=this.stage.getBoundingClientRect();return Ie(t.width,t.height)}};async function ri(e,t={}){let n=()=>{let m=e.style.width||"",g=e.style.height||"",h=320,y=480,w=window.getComputedStyle(e),v=m||w.width,C=g||w.height;if(v&&v!=="auto"&&!v.includes("%")){let E=parseFloat(v);!isNaN(E)&&E>0&&isFinite(E)&&(h=E)}if(C&&C!=="auto"&&!C.includes("%")){let E=parseFloat(C);!isNaN(E)&&E>0&&isFinite(E)&&(y=E)}let A=e.clientWidth,T=e.clientHeight;if((h===320||h<=0||!isFinite(h))&&A&&A>0&&(h=A),(y===480||y<=0||!isFinite(y))&&T&&T>0&&(y=T),h<=0||y<=0||!isFinite(h)||!isFinite(y)){let E=e.getBoundingClientRect();E.width>0&&isFinite(E.width)&&(h=E.width),E.height>0&&isFinite(E.height)&&(y=E.height)}return(h<=0||!isFinite(h))&&(h=e.clientWidth||window.innerWidth||320),(y<=0||!isFinite(y))&&(y=e.clientHeight||window.innerHeight||480),console.log("[THREE-BASE] getSize result:",{width:h,height:y,styleWidth:m,styleHeight:g,effectiveWidth:v,effectiveHeight:C,computedWidth:w.width,computedHeight:w.height,clientWidth:A,clientHeight:T,boundingRect:e.getBoundingClientRect()}),{width:h,height:y}},i=e.style.width&&!e.style.width.includes("%"),a=e.style.height&&!e.style.height.includes("%");e.style.position||(e.style.position="relative"),e.style.display||(e.style.display="block"),e.style.width=e.style.width||"100%",e.style.height=e.style.height||"100%",e.style.minWidth="100%",e.style.minHeight="100%",e.style.maxWidth="100%",e.style.maxHeight="100%",e.style.boxSizing="border-box",e.style.overflow="hidden",e.style.margin="0",e.style.padding="0",e.style.border="none";let s=t.background||"linear-gradient(160deg, #0d1020, #0f1c2f)";e.style.setProperty("background",s,"important"),e.style.setProperty("background-size","cover","important"),e.style.setProperty("background-position","center","important"),e.style.setProperty("background-repeat","no-repeat","important");let o=document.createElement("div");o.style.cssText=`
17
+ `,e.appendChild(t)}var dt=(i=>(i[i.PHONE_TALL=0]="PHONE_TALL",i[i.TABLET=1]="TABLET",i[i.LANDSCAPE=2]="LANDSCAPE",i))(dt||{});function Ve(e,t){let n=e/t;return n<=.62?0:n<=.85?1:2}var he=class{constructor(t,n){this.root=t,this.stage=n,this.uiFrame=document.createElement("div"),this.uiFrame.style.position="absolute",this.uiFrame.style.top="0",this.uiFrame.style.bottom="0",this.uiFrame.style.left="50%",this.uiFrame.style.transform="translateX(-50%)",this.uiFrame.style.width="100%",this.uiFrame.style.maxWidth="420px",this.uiFrame.style.pointerEvents="none",this.stage.appendChild(this.uiFrame),this.uiContainer=document.createElement("div"),this.uiContainer.setAttribute("style",["position:absolute","inset:0","display:flex","flex-direction:column","justify-content:flex-start","gap:12px","pointer-events:none","padding:20px 16px","padding-bottom:clamp(24px, 6vh, 96px)","box-sizing:border-box","z-index:2"].join(";")),this.uiFrame.appendChild(this.uiContainer),this.updateLayout()}getUIFrame(){return this.uiFrame}getUIContainer(){return this.uiContainer}updateLayout(){let t=this.stage.getBoundingClientRect(),n=Ve(t.width,t.height);n===0?this.uiFrame.style.maxWidth="420px":n===1?this.uiFrame.style.maxWidth="520px":this.uiFrame.style.maxWidth="640px"}getAspectClass(){let t=this.stage.getBoundingClientRect();return Ve(t.width,t.height)}};async function pi(e,t={}){let n=()=>{let d=e.getBoundingClientRect(),f=d.width,y=d.height;return(f<=0||!isFinite(f))&&(f=e.clientWidth||window.innerWidth||320),(y<=0||!isFinite(y))&&(y=e.clientHeight||window.innerHeight||480),(f<=0||!isFinite(f))&&(f=320),(y<=0||!isFinite(y))&&(y=480),console.log("[THREE-BASE] getSize result:",{width:f,height:y,boundingRect:{width:d.width,height:d.height},clientSize:{width:e.clientWidth,height:e.clientHeight}}),{width:f,height:y}},i=e.style.width&&!e.style.width.includes("%"),a=e.style.height&&!e.style.height.includes("%");e.style.position||(e.style.position="relative"),e.style.display||(e.style.display="block"),e.style.width=e.style.width||"100%",e.style.height=e.style.height||"100%",e.style.minWidth="100%",e.style.minHeight="100%",e.style.maxWidth="100%",e.style.maxHeight="100%",e.style.boxSizing="border-box",e.style.overflow="hidden",e.style.margin="0",e.style.padding="0",e.style.border="none";let s=t.background||"linear-gradient(160deg, #0d1020, #0f1c2f)";e.style.setProperty("background",s,"important"),e.style.setProperty("background-size","cover","important"),e.style.setProperty("background-position","center","important"),e.style.setProperty("background-repeat","no-repeat","important");let o=document.createElement("div");o.style.cssText=`
18
18
  position: absolute !important;
19
- top: 0 !important;
20
- left: 0 !important;
21
- right: 0 !important;
22
- bottom: 0 !important;
19
+ inset: 0 !important;
23
20
  width: 100% !important;
24
21
  height: 100% !important;
25
22
  min-width: 100% !important;
26
23
  min-height: 100% !important;
27
- display: flex;
28
- align-items: center;
29
- justify-content: center;
24
+ max-width: 100% !important;
25
+ max-height: 100% !important;
26
+ display: block !important;
30
27
  background: ${s} !important;
31
28
  background-size: cover !important;
32
29
  background-position: center !important;
@@ -37,19 +34,17 @@
37
34
  margin: 0 !important;
38
35
  padding: 0 !important;
39
36
  border: none !important;
40
- `,e.appendChild(o);let d=document.createElement("div");d.setAttribute("style",["position:absolute","inset:0","width:100%","height:100%","pointer-events:auto"].join(";")),o.appendChild(d);let r=new he.Scene,{width:f,height:l}=n(),u=new he.PerspectiveCamera(55,f/l,.1,100);u.position.set(0,0,3.2),u.lookAt(0,0,0),u.updateMatrixWorld();let c=new he.WebGLRenderer({antialias:!0,alpha:!0,preserveDrawingBuffer:!0});c.setPixelRatio(window.devicePixelRatio||1),c.setSize(f,l),c.setClearColor(0,0),c.domElement.style.position="absolute",c.domElement.style.top="0",c.domElement.style.left="0",c.domElement.style.width="100%",c.domElement.style.height="100%",c.domElement.style.display="block",c.domElement.style.pointerEvents="auto",d.appendChild(c.domElement);let p=m=>{let g,h;if(typeof(m==null?void 0:m.width)=="number"&&m.width>0?g=m.width:g=n().width,typeof(m==null?void 0:m.height)=="number"&&m.height>0?h=m.height:h=n().height,g<=0||h<=0||!isFinite(g)||!isFinite(h)){console.warn("[THREE-BASE] Invalid size in applySize, using getSize fallback",{newWidth:g,newHeight:h,size:m});let y=n();g=y.width,h=y.height}console.log("[THREE-BASE] applySize:",{newWidth:g,newHeight:h,providedSize:m,containerSize:n()}),c.setSize(g,h),c.setPixelRatio(window.devicePixelRatio||1),u.aspect=g/h,u.updateProjectionMatrix()};requestAnimationFrame(()=>p());let b=!1;Ye.on("pause",()=>{b=!0,document.querySelectorAll("audio").forEach(g=>g.pause())}),Ye.on("resume",()=>{b=!1,document.querySelectorAll("audio").forEach(g=>{g.currentTime>0&&!g.ended&&g.play().catch(()=>{})})});let x=new fe(e,o);return Ye.on("resize",({payload:m})=>{p({width:m==null?void 0:m.width,height:m==null?void 0:m.height}),x.updateLayout()}),window.addEventListener("resize",()=>{p(),x.updateLayout()}),{scene:r,camera:u,renderer:c,uiSystem:x,applySize:p}}var H=xe(require("three")),Ce=class{constructor(t){var n,i;this.position=(t==null?void 0:t.position)||{x:0,y:0},this.scale=(n=t==null?void 0:t.scale)!=null?n:1,this.rotation=(i=t==null?void 0:t.rotation)!=null?i:0}update(t){t.position!==void 0&&(this.position={...t.position}),t.scale!==void 0&&(this.scale=t.scale),t.rotation!==void 0&&(this.rotation=t.rotation)}syncToThree(t){let n=t.position.z,i=n===0||!isFinite(n)?.5:n;t.position.set(this.position.x,this.position.y,i),t.scale.set(this.scale,this.scale,this.scale),t.rotation.z=this.rotation}},Ae=class{constructor(t){var n,i,a,s;this.z_index=(n=t==null?void 0:t.z_index)!=null?n:0,this.alpha=(i=t==null?void 0:t.alpha)!=null?i:1,this.visible=(a=t==null?void 0:t.visible)!=null?a:!0,this.tint=(s=t==null?void 0:t.tint)!=null?s:null}update(t){t.z_index!==void 0&&(this.z_index=t.z_index),t.alpha!==void 0&&(this.alpha=t.alpha),t.visible!==void 0&&(this.visible=t.visible),t.tint!==void 0&&(this.tint=t.tint)}syncToThree(t){if(t.renderOrder=this.z_index,t.visible=this.visible,t instanceof H.Mesh&&t.material&&(Array.isArray(t.material)?t.material.forEach(n=>{n instanceof H.Material&&(n.opacity=this.alpha,n.transparent=this.alpha<1)}):t.material instanceof H.Material&&(t.material.opacity=this.alpha,t.material.transparent=this.alpha<1)),this.tint!==null&&t instanceof H.Mesh&&t.material){let n=typeof this.tint=="string"?new H.Color(this.tint):new H.Color(this.tint);Array.isArray(t.material)?t.material.forEach(i=>{(i instanceof H.MeshBasicMaterial||i instanceof H.MeshStandardMaterial)&&i.color.copy(n)}):(t.material instanceof H.MeshBasicMaterial||t.material instanceof H.MeshStandardMaterial)&&t.material.color.copy(n)}}},Re=class{constructor(t,n,i,a){this.instanceId=t,this.objectConfig=n,this.threeObject=i,this._config=a,this.transform=new Ce(a.transform),this.renderer=new Ae(a.render),this.sync()}sync(){this.transform.syncToThree(this.threeObject),this.renderer.syncToThree(this.threeObject)}updateConfig(t){this._config=t,t.transform&&this.transform.update(t.transform),t.render&&this.renderer.update(t.render),this.sync()}getComponent(t){return this._config[t]}getPosition(){return{...this.transform.position}}setPosition(t,n){this.transform.position={x:t,y:n},this.transform.syncToThree(this.threeObject)}getAlpha(){return this.renderer.alpha}setAlpha(t){this.renderer.alpha=t,this.renderer.syncToThree(this.threeObject)}getVisible(){return this.renderer.visible}setVisible(t){this.renderer.visible=t,this.renderer.syncToThree(this.threeObject)}},Ge=class{constructor(t){this.objects=new Map;this.config=t}create(t,n){let i=this.config.objects.get(t);if(!i)throw new Error(`Object config not found: ${t}`);let a=new Re(t,i.object_config||t,n,i);return this.objects.set(t,a),a}get(t){return this.objects.get(t)}updateConfig(t){this.config=t;for(let[n,i]of this.objects.entries()){let a=t.objects.get(n);a&&i.updateConfig(a)}}getAll(){return Array.from(this.objects.values())}remove(t){this.objects.delete(t)}clear(){this.objects.clear()}};var je={"brand.primary":{family:"Arial, sans-serif",weight:"400"},"brand.warning":{family:"Arial Black, Arial, sans-serif",weight:"900"},"brand.heading":{family:"Arial Black, Arial, sans-serif",weight:"800"},"brand.body":{family:"Arial, sans-serif",weight:"400"}};function O(e){let t=je[e];return t?t.family:(console.warn(`Font ID "${e}" not found in registry, using fallback`),"Arial, sans-serif")}function Y(e){var n;let t=je[e];return t&&(n=t.weight)!=null?n:"400"}function li(e,t){je[e]=t}function ci(){return Object.keys(je)}var ye=xe(require("three"));function ae(e){return{element:e,get alpha(){return parseFloat(e.style.opacity||"1")},set alpha(t){e.style.opacity=t.toString()},get visible(){return e.style.display!=="none"},set visible(t){e.style.display=t?"":"none"},position:{set(t,n){e.style.left=`${t}px`,e.style.top=`${n}px`},get x(){return parseFloat(e.style.left||"0")},get y(){return parseFloat(e.style.top||"0")}},scale:{set(t,n){e.style.transform=`scale(${t})`},get x(){let t=e.style.transform.match(/scale\(([^)]+)\)/);return t?parseFloat(t[1]):1}}}}function di(e,t,n,i){var Tt,vt,St,Ct,At,Rt,Ht,Mt,Lt,Ft,kt,Dt,$t,Pt,Wt,zt,Bt,Nt,Ot,Yt,It,Gt,jt,Vt,qt,Xt,Kt,Jt,Zt,Qt,Ut,en,tn,nn,an,sn,on,rn,ln,cn,dn,pn,un,mn,fn,hn,yn,gn,bn,xn,_n,En,wn,Tn,vn,Sn,Cn,An,Rn,Hn,Mn,Ln;let a=e.objects.get("ui_endgame_1"),s=e.objects.get("ui_endgame_logo_1"),o=e.objects.get("ui_endgame_title_1"),d=e.objects.get("ui_endgame_subtitle_1"),r=e.objects.get("ui_endgame_footer_1"),f=e.objects.get("ui_endgame_cta_1"),l=e.objects.get("ui_endgame_cta_hint_1"),u=e.objects.get("ui_endgame_hand_1"),c=e.engine.runtime||{},p=((Tt=a==null?void 0:a.gameplay)==null?void 0:Tt.tuning)||{},b=(a==null?void 0:a.render)||{},x=(vt=p.panel_width)!=null?vt:320,m=(St=p.panel_height)!=null?St:400,g=(Ct=p.panel_padding)!=null?Ct:32,h=(At=p.panel_radius)!=null?At:24,y=b.background_color||p.panel_bg_color||"#1a0a0a",w=b.background_alpha!==void 0&&b.background_alpha!==null?b.background_alpha:(Rt=p.panel_bg_alpha)!=null?Rt:.98,v=b.border_color||p.panel_border_color||"#ffffff",C=(Ht=p.panel_border_width)!=null?Ht:2,A=(Mt=p.panel_border_alpha)!=null?Mt:.3,T=document.createElement("div");T.style.cssText=`
37
+ overflow: hidden !important;
38
+ `,e.appendChild(o);let p=document.createElement("div");p.setAttribute("style",["position:absolute","inset:0","width:100%","height:100%","min-width:100%","min-height:100%","max-width:100%","max-height:100%","pointer-events:auto","box-sizing:border-box","margin:0","padding:0","overflow:hidden"].join(";")),o.appendChild(p);let l=new fe.Scene,{width:h,height:c}=n(),u=new fe.PerspectiveCamera(55,h/c,.1,100);u.position.set(0,0,3.2),u.lookAt(0,0,0),u.updateMatrixWorld();let r=new fe.WebGLRenderer({antialias:!0,alpha:!0,preserveDrawingBuffer:!0});r.setPixelRatio(window.devicePixelRatio||1),r.setSize(h,c),r.setClearColor(0,0),r.domElement.style.position="absolute",r.domElement.style.top="0",r.domElement.style.left="0",r.domElement.style.right="0",r.domElement.style.bottom="0",r.domElement.style.width="100%",r.domElement.style.height="100%",r.domElement.style.minWidth="100%",r.domElement.style.minHeight="100%",r.domElement.style.maxWidth="100%",r.domElement.style.maxHeight="100%",r.domElement.style.display="block",r.domElement.style.pointerEvents="auto",r.domElement.style.margin="0",r.domElement.style.padding="0",r.domElement.style.boxSizing="border-box",p.appendChild(r.domElement);let m=d=>{let f=e.getBoundingClientRect(),y=f.width,x=f.height;(y<=0||!isFinite(y))&&(y=e.clientWidth||window.innerWidth||320),(x<=0||!isFinite(x))&&(x=e.clientHeight||window.innerHeight||480),typeof(d==null?void 0:d.width)=="number"&&d.width>0&&(Math.abs(d.width-f.width)>1&&console.warn("[THREE-BASE] Provided width differs from container:",{provided:d.width,container:f.width}),y=d.width),typeof(d==null?void 0:d.height)=="number"&&d.height>0&&(Math.abs(d.height-f.height)>1&&console.warn("[THREE-BASE] Provided height differs from container:",{provided:d.height,container:f.height}),x=d.height),(y<=0||x<=0||!isFinite(y)||!isFinite(x))&&(console.warn("[THREE-BASE] Invalid size in applySize, using fallback",{newWidth:y,newHeight:x,size:d,rootRect:f}),y=f.width||e.clientWidth||320,x=f.height||e.clientHeight||480),console.log("[THREE-BASE] applySize:",{newWidth:y,newHeight:x,rootRect:{width:f.width,height:f.height},clientSize:{width:e.clientWidth,height:e.clientHeight},providedSize:d});let w=Math.floor(y),T=Math.floor(x);r.setSize(w,T),r.setPixelRatio(window.devicePixelRatio||1),u.aspect=w/T,u.updateProjectionMatrix()};requestAnimationFrame(()=>{requestAnimationFrame(()=>{m()})});let g=!1;Ge.on("pause",()=>{g=!0,document.querySelectorAll("audio").forEach(f=>f.pause())}),Ge.on("resume",()=>{g=!1,document.querySelectorAll("audio").forEach(f=>{f.currentTime>0&&!f.ended&&f.play().catch(()=>{})})});let b=new he(e,o);return Ge.on("resize",({payload:d})=>{m({width:d==null?void 0:d.width,height:d==null?void 0:d.height}),b.updateLayout()}),window.addEventListener("resize",()=>{m(),b.updateLayout()}),{scene:l,camera:u,renderer:r,uiSystem:b,applySize:m}}var S=xe(require("three")),Ce=class{constructor(t){var n,i;this.position=(t==null?void 0:t.position)||{x:0,y:0},this.scale=(n=t==null?void 0:t.scale)!=null?n:1,this.rotation=(i=t==null?void 0:t.rotation)!=null?i:0}update(t){t.position!==void 0&&(this.position={...t.position}),t.scale!==void 0&&(this.scale=t.scale),t.rotation!==void 0&&(this.rotation=t.rotation)}syncToThree(t){let n=t.position.z,i=n===0||!isFinite(n)?.5:n;t.position.set(this.position.x,this.position.y,i),t.scale.set(this.scale,this.scale,this.scale),t.rotation.z=this.rotation}},Ae=class{constructor(t){var n,i,a,s;this.z_index=(n=t==null?void 0:t.z_index)!=null?n:0,this.alpha=(i=t==null?void 0:t.alpha)!=null?i:1,this.visible=(a=t==null?void 0:t.visible)!=null?a:!0,this.tint=(s=t==null?void 0:t.tint)!=null?s:null}update(t){t.z_index!==void 0&&(this.z_index=t.z_index),t.alpha!==void 0&&(this.alpha=t.alpha),t.visible!==void 0&&(this.visible=t.visible),t.tint!==void 0&&(this.tint=t.tint)}syncToThree(t){if(t.renderOrder=this.z_index,t.visible=this.visible,t instanceof S.Mesh&&t.material&&(Array.isArray(t.material)?t.material.forEach(n=>{n instanceof S.Material&&(n.opacity=this.alpha,n.transparent=this.alpha<1)}):t.material instanceof S.Material&&(t.material.opacity=this.alpha,t.material.transparent=this.alpha<1)),this.tint!==null&&t instanceof S.Mesh&&t.material){let n=typeof this.tint=="string"?new S.Color(this.tint):new S.Color(this.tint);Array.isArray(t.material)?t.material.forEach(i=>{(i instanceof S.MeshBasicMaterial||i instanceof S.MeshStandardMaterial)&&i.color.copy(n)}):(t.material instanceof S.MeshBasicMaterial||t.material instanceof S.MeshStandardMaterial)&&t.material.color.copy(n)}}},Re=class{constructor(t,n,i,a){this.instanceId=t,this.objectConfig=n,this.threeObject=i,this._config=a,this.transform=new Ce(a.transform),this.renderer=new Ae(a.render),this.sync()}sync(){this.transform.syncToThree(this.threeObject),this.renderer.syncToThree(this.threeObject)}updateConfig(t){this._config=t,t.transform&&this.transform.update(t.transform),t.render&&this.renderer.update(t.render),this.sync()}getComponent(t){return this._config[t]}getPosition(){return{...this.transform.position}}setPosition(t,n){this.transform.position={x:t,y:n},this.transform.syncToThree(this.threeObject)}getAlpha(){return this.renderer.alpha}setAlpha(t){this.renderer.alpha=t,this.renderer.syncToThree(this.threeObject)}getVisible(){return this.renderer.visible}setVisible(t){this.renderer.visible=t,this.renderer.syncToThree(this.threeObject)}},je=class{constructor(t){this.objects=new Map;this.config=t}create(t,n){let i=this.config.objects.get(t);if(!i)throw new Error(`Object config not found: ${t}`);let a=new Re(t,i.object_config||t,n,i);return this.objects.set(t,a),a}get(t){return this.objects.get(t)}updateConfig(t){this.config=t;for(let[n,i]of this.objects.entries()){let a=t.objects.get(n);a&&i.updateConfig(a)}}getAll(){return Array.from(this.objects.values())}remove(t){this.objects.delete(t)}clear(){this.objects.clear()}};var qe={"brand.primary":{family:"Arial, sans-serif",weight:"400"},"brand.warning":{family:"Arial Black, Arial, sans-serif",weight:"900"},"brand.heading":{family:"Arial Black, Arial, sans-serif",weight:"800"},"brand.body":{family:"Arial, sans-serif",weight:"400"}};function N(e){let t=qe[e];return t?t.family:(console.warn(`Font ID "${e}" not found in registry, using fallback`),"Arial, sans-serif")}function Y(e){var n;let t=qe[e];return t&&(n=t.weight)!=null?n:"400"}function mi(e,t){qe[e]=t}function ui(){return Object.keys(qe)}var ye=xe(require("three"));function ae(e){return{element:e,get alpha(){return parseFloat(e.style.opacity||"1")},set alpha(t){e.style.opacity=t.toString()},get visible(){return e.style.display!=="none"},set visible(t){e.style.display=t?"":"none"},position:{set(t,n){e.style.left=`${t}px`,e.style.top=`${n}px`},get x(){return parseFloat(e.style.left||"0")},get y(){return parseFloat(e.style.top||"0")}},scale:{set(t,n){e.style.transform=`scale(${t})`},get x(){let t=e.style.transform.match(/scale\(([^)]+)\)/);return t?parseFloat(t[1]):1}}}}function hi(e,t,n,i){var At,Rt,Ht,Mt,Lt,Ft,kt,Dt,$t,Pt,Wt,zt,Bt,Ot,Nt,Yt,It,Gt,Vt,jt,qt,Xt,Kt,Jt,Zt,Qt,Ut,en,tn,nn,an,sn,on,rn,ln,cn,dn,pn,mn,un,hn,fn,yn,gn,bn,xn,_n,wn,En,Tn,vn,Sn,Cn,An,Rn,Hn,Mn,Ln,Fn,kn,Dn,$n;let a=e.objects.get("ui_endgame_1"),s=e.objects.get("ui_endgame_logo_1"),o=e.objects.get("ui_endgame_title_1"),p=e.objects.get("ui_endgame_subtitle_1"),l=e.objects.get("ui_endgame_footer_1"),h=e.objects.get("ui_endgame_cta_1"),c=e.objects.get("ui_endgame_cta_hint_1"),u=e.objects.get("ui_endgame_hand_1"),r=e.engine.runtime||{},m=((At=a==null?void 0:a.gameplay)==null?void 0:At.tuning)||{},g=(a==null?void 0:a.render)||{},b=i.getBoundingClientRect(),d=b.width>0?b.width*.9:320,f=b.height>0?b.height*.85:400,y=Math.min((Rt=m.panel_width)!=null?Rt:320,d),x=Math.min((Ht=m.panel_height)!=null?Ht:400,f),w=(Mt=m.panel_padding)!=null?Mt:32,T=(Lt=m.panel_radius)!=null?Lt:24,A=g.background_color||m.panel_bg_color||"#1a0a0a",$=g.background_alpha!==void 0&&g.background_alpha!==null?g.background_alpha:(Ft=m.panel_bg_alpha)!=null?Ft:.98,P=g.border_color||m.panel_border_color||"#ffffff",K=(kt=m.panel_border_width)!=null?kt:2,R=(Dt=m.panel_border_alpha)!=null?Dt:.3,v=document.createElement("div");v.style.cssText=`
41
39
  position: absolute;
42
- width: ${x}px;
43
- height: ${m}px;
44
- background: ${y};
45
- opacity: ${w};
46
- border: ${C}px solid ${v};
47
- border-opacity: ${A};
48
- border-radius: ${h}px;
49
- display: flex;
50
- flex-direction: column;
51
- align-items: center;
52
- justify-content: center;
40
+ width: ${y}px;
41
+ height: ${x}px;
42
+ background: ${A};
43
+ opacity: ${$};
44
+ border: ${K}px solid ${P};
45
+ border-opacity: ${R};
46
+ border-radius: ${T}px;
47
+ display: block;
53
48
  transform: translate(-50%, -50%);
54
49
  opacity: 0;
55
50
  visibility: hidden;
@@ -57,79 +52,81 @@
57
52
  left: 50%;
58
53
  top: 50%;
59
54
  z-index: 1000;
60
- `,i.appendChild(T);let E=ae(T);E.element=T;let M=((Lt=s==null?void 0:s.gameplay)==null?void 0:Lt.tuning)||{},N=(s==null?void 0:s.transform)||{},F=(Ft=M.logo_size)!=null?Ft:56,B=(kt=N.scale)!=null?kt:1,se=($t=(Dt=N.offset)==null?void 0:Dt.y)!=null?$t:-130,Q=(Pt=M.logo_alpha)!=null?Pt:1,X=new ye.SpriteMaterial({map:n||void 0,transparent:!0,alphaTest:.1}),R=new ye.Sprite(X);R.position.set(0,se,0),R.material.opacity=0;let U=0,He=0;if(n&&(U=((Wt=n.image)==null?void 0:Wt.width)||100,He=((zt=n.image)==null?void 0:zt.height)||100),U>0&&He>0){let oe=U/He,Qe,Ue;oe>1?(Qe=F,Ue=F/oe):(Ue=F,Qe=F*oe);let aa=Qe/U*B,sa=Ue/He*B;R.scale.set(aa,sa,1)}else{let oe=F/100*B;R.scale.set(oe,oe,1)}R.targetAlpha=Q,R.baseScaleX=R.scale.x,R.baseScaleY=R.scale.y;let k=o==null?void 0:o.ui,I=((Bt=o==null?void 0:o.gameplay)==null?void 0:Bt.tuning)||{},xi=(k==null?void 0:k.text)||"MISSION ACCOMPLISHED",dt=(k==null?void 0:k.font)||"brand.heading",_i=(k==null?void 0:k.fontSize)||24,Ei=(Nt=k==null?void 0:k.letterSpacing)!=null?Nt:1,Me=(Ot=o==null?void 0:o.render)==null?void 0:Ot.tint,wi=typeof Me=="string"?Me:Me?`#${Me.toString(16).padStart(6,"0")}`:"#00FF88",Ti=x-g*2-30,vi=I.font_weight_override?I.font_weight_override:Y(dt),ee=document.createElement("div");ee.textContent=xi,ee.style.cssText=`
61
- font-family: ${O(dt)};
62
- font-size: ${_i}px;
63
- font-weight: ${vi};
64
- color: ${wi};
55
+ box-sizing: border-box;
56
+ padding: ${w}px;
57
+ `,i.appendChild(v);let I=ae(v);I.element=v;let z=(($t=s==null?void 0:s.gameplay)==null?void 0:$t.tuning)||{},U=(s==null?void 0:s.transform)||{},W=(Pt=z.logo_size)!=null?Pt:56,B=(Wt=U.scale)!=null?Wt:1,se=(Bt=(zt=U.offset)==null?void 0:zt.y)!=null?Bt:-130,He=(Ot=z.logo_alpha)!=null?Ot:1,Ti=new ye.SpriteMaterial({map:n||void 0,transparent:!0,alphaTest:.1}),O=new ye.Sprite(Ti);O.position.set(0,se,0),O.material.opacity=0;let Me=0,Le=0;if(n&&(Me=((Nt=n.image)==null?void 0:Nt.width)||100,Le=((Yt=n.image)==null?void 0:Yt.height)||100),Me>0&&Le>0){let oe=Me/Le,et,tt;oe>1?(et=W,tt=W/oe):(tt=W,et=W*oe);let ra=et/Me*B,la=tt/Le*B;O.scale.set(ra,la,1)}else{let oe=W/100*B;O.scale.set(oe,oe,1)}O.targetAlpha=He,O.baseScaleX=O.scale.x,O.baseScaleY=O.scale.y;let H=o==null?void 0:o.ui,G=((It=o==null?void 0:o.gameplay)==null?void 0:It.tuning)||{},vi=(H==null?void 0:H.text)||"MISSION ACCOMPLISHED",mt=(H==null?void 0:H.font)||"brand.heading",ut=(H==null?void 0:H.fontSize)||24,Si=(Gt=H==null?void 0:H.letterSpacing)!=null?Gt:1,Fe=(Vt=o==null?void 0:o.render)==null?void 0:Vt.tint,Ci=typeof Fe=="string"?Fe:Fe?`#${Fe.toString(16).padStart(6,"0")}`:"#00FF88",Ai=y-w*2-30,Ri=G.font_weight_override?G.font_weight_override:Y(mt),ee=document.createElement("div");ee.textContent=vi,ee.style.cssText=`
58
+ font-family: ${N(mt)};
59
+ font-size: ${ut}px;
60
+ font-weight: ${Ri};
61
+ color: ${Ci};
65
62
  text-align: center;
66
- letter-spacing: ${Ei}px;
67
- -webkit-text-stroke: ${(Yt=I.stroke_width)!=null?Yt:2}px ${I.stroke_color||"#000000"};
68
- text-shadow: ${(It=I.shadow_distance)!=null?It:4}px ${(Gt=I.shadow_distance)!=null?Gt:4}px ${(jt=I.shadow_blur)!=null?jt:8}px rgba(0,0,0,${(Vt=I.shadow_alpha)!=null?Vt:.9});
63
+ letter-spacing: ${Si}px;
64
+ -webkit-text-stroke: ${(jt=G.stroke_width)!=null?jt:2}px ${G.stroke_color||"#000000"};
65
+ text-shadow: ${(qt=G.shadow_distance)!=null?qt:4}px ${(Xt=G.shadow_distance)!=null?Xt:4}px ${(Kt=G.shadow_blur)!=null?Kt:8}px rgba(0,0,0,${(Jt=G.shadow_alpha)!=null?Jt:.9});
69
66
  opacity: 0;
70
67
  position: absolute;
71
68
  transform: translate(-50%, -50%);
72
69
  white-space: nowrap;
73
- max-width: ${Ti}px;
74
- `;let pt=(qt=p.title_offset_y)!=null?qt:30,Si=pt+((Xt=I.animation_start_y_offset)!=null?Xt:-20);ee.style.top=`${Si}px`,ee.style.left="50%";let ut=ae(ee);ut.element=ee,T.appendChild(ee);let D=d==null?void 0:d.ui,mt=((Kt=d==null?void 0:d.gameplay)==null?void 0:Kt.tuning)||{},Ci=(D==null?void 0:D.text)||"RESCUE COMPLETE",ft=(D==null?void 0:D.font)||"brand.body",Ai=(D==null?void 0:D.fontSize)||11,Ri=(Jt=D==null?void 0:D.letterSpacing)!=null?Jt:.5,Le=(Zt=d==null?void 0:d.render)==null?void 0:Zt.tint,Hi=typeof Le=="string"?Le:Le?`#${Le.toString(16).padStart(6,"0")}`:"#B0B0B0",te=document.createElement("div");te.textContent=Ci,te.style.cssText=`
75
- font-family: ${O(ft)};
76
- font-size: ${Ai}px;
77
- font-weight: ${Y(ft)};
78
- color: ${Hi};
70
+ max-width: ${Ai}px;
71
+ `;let ht=(Zt=m.title_offset_y)!=null?Zt:x*.25,Hi=ht+((Qt=G.animation_start_y_offset)!=null?Qt:-20);ee.style.top=`${Hi}px`,ee.style.left="50%";let ft=ae(ee);ft.element=ee,v.appendChild(ee);let M=p==null?void 0:p.ui,yt=((Ut=p==null?void 0:p.gameplay)==null?void 0:Ut.tuning)||{},Mi=(M==null?void 0:M.text)||"RESCUE COMPLETE",gt=(M==null?void 0:M.font)||"brand.body",Li=(M==null?void 0:M.fontSize)||11,Fi=(en=M==null?void 0:M.letterSpacing)!=null?en:.5,ke=(tn=p==null?void 0:p.render)==null?void 0:tn.tint,ki=typeof ke=="string"?ke:ke?`#${ke.toString(16).padStart(6,"0")}`:"#B0B0B0",te=document.createElement("div");te.textContent=Mi,te.style.cssText=`
72
+ font-family: ${N(gt)};
73
+ font-size: ${Li}px;
74
+ font-weight: ${Y(gt)};
75
+ color: ${ki};
79
76
  text-align: center;
80
- letter-spacing: ${Ri}px;
77
+ letter-spacing: ${Fi}px;
81
78
  opacity: 0;
82
79
  position: absolute;
83
80
  transform: translate(-50%, -50%);
84
81
  white-space: nowrap;
85
- `;let Mi=pt+20+((Qt=mt.animation_start_y_offset)!=null?Qt:-10);te.style.top=`${Mi}px`,te.style.left="50%";let qe=ae(te);qe.element=te,qe.animationStartYOffset=(Ut=mt.animation_start_y_offset)!=null?Ut:-10,T.appendChild(te);let G=r==null?void 0:r.ui,ht=((en=r==null?void 0:r.gameplay)==null?void 0:en.tuning)||{},Li=(G==null?void 0:G.text)||((tn=c.ui)==null?void 0:tn.cta_hint)||"Continue the adventure!",yt=(G==null?void 0:G.font)||"brand.body",Fi=(G==null?void 0:G.fontSize)||16,Fe=(nn=r==null?void 0:r.render)==null?void 0:nn.tint,ki=typeof Fe=="string"?Fe:Fe?`#${Fe.toString(16).padStart(6,"0")}`:"#FFFFFF",Di=(an=ht.max_width)!=null?an:x-g*2,$i=(sn=ht.line_height)!=null?sn:1.4,ne=document.createElement("div");ne.textContent=Li,ne.style.cssText=`
86
- font-family: ${O(yt)};
87
- font-size: ${Fi}px;
88
- font-weight: ${Y(yt)};
89
- color: ${ki};
82
+ `;let Di=ht+ut*2.5+((nn=yt.animation_start_y_offset)!=null?nn:-10);te.style.top=`${Di}px`,te.style.left="50%";let Ke=ae(te);Ke.element=te,Ke.animationStartYOffset=(an=yt.animation_start_y_offset)!=null?an:-10,v.appendChild(te);let V=l==null?void 0:l.ui,bt=((sn=l==null?void 0:l.gameplay)==null?void 0:sn.tuning)||{},$i=(V==null?void 0:V.text)||((on=r.ui)==null?void 0:on.cta_hint)||"Continue the adventure!",xt=(V==null?void 0:V.font)||"brand.body",Pi=(V==null?void 0:V.fontSize)||16,De=(rn=l==null?void 0:l.render)==null?void 0:rn.tint,Wi=typeof De=="string"?De:De?`#${De.toString(16).padStart(6,"0")}`:"#FFFFFF",zi=(ln=bt.max_width)!=null?ln:y-w*2,Bi=(cn=bt.line_height)!=null?cn:1.4,ne=document.createElement("div");ne.textContent=$i,ne.style.cssText=`
83
+ font-family: ${N(xt)};
84
+ font-size: ${Pi}px;
85
+ font-weight: ${Y(xt)};
86
+ color: ${Wi};
90
87
  text-align: center;
91
88
  opacity: 0;
92
89
  position: absolute;
93
90
  transform: translate(-50%, -50%);
94
- max-width: ${Di}px;
95
- line-height: ${$i};
91
+ max-width: ${zi}px;
92
+ line-height: ${Bi};
96
93
  word-wrap: break-word;
97
- `;let Pi=(on=p.footer_offset_y)!=null?on:120;ne.style.top=`${Pi}px`,ne.style.left="50%";let Xe=ae(ne);Xe.element=ne;let Wi=((rn=r==null?void 0:r.render)==null?void 0:rn.alpha)!==void 0&&((ln=r==null?void 0:r.render)==null?void 0:ln.alpha)!==null?r.render.alpha:1;Xe.targetAlpha=Wi,T.appendChild(ne);let j=((cn=f==null?void 0:f.gameplay)==null?void 0:cn.tuning)||{},$=f==null?void 0:f.ui,zi=(dn=j.button_width)!=null?dn:260,Bi=(pn=j.button_height)!=null?pn:56,Ni=(un=j.button_radius)!=null?un:16,Oi=j.button_bg_color||((mn=c.theme)==null?void 0:mn.cta_background)||"#ffb43b",Yi=(fn=j.button_bg_alpha)!=null?fn:1,Ii=j.button_border_color||"#ffffff",Gi=(hn=j.button_border_width)!=null?hn:2,Da=(yn=j.button_border_alpha)!=null?yn:.2,Ke=(gn=p.cta_offset_y)!=null?gn:160,L=document.createElement("button");L.style.cssText=`
98
- width: ${zi}px;
99
- height: ${Bi}px;
100
- background: ${Oi};
101
- opacity: ${Yi};
102
- border: ${Gi}px solid ${Ii};
103
- border-radius: ${Ni}px;
94
+ `;let Oi=(dn=m.footer_offset_y)!=null?dn:x*.5;ne.style.top=`${Oi}px`,ne.style.left="50%";let Je=ae(ne);Je.element=ne;let Ni=((pn=l==null?void 0:l.render)==null?void 0:pn.alpha)!==void 0&&((mn=l==null?void 0:l.render)==null?void 0:mn.alpha)!==null?l.render.alpha:1;Je.targetAlpha=Ni,v.appendChild(ne);let j=((un=h==null?void 0:h.gameplay)==null?void 0:un.tuning)||{},L=h==null?void 0:h.ui,Yi=(hn=j.button_width)!=null?hn:260,_t=(fn=j.button_height)!=null?fn:56,Ii=(yn=j.button_radius)!=null?yn:16,Gi=j.button_bg_color||((gn=r.theme)==null?void 0:gn.cta_background)||"#ffb43b",Vi=(bn=j.button_bg_alpha)!=null?bn:1,ji=j.button_border_color||"#ffffff",qi=(xn=j.button_border_width)!=null?xn:2,Wa=(_n=j.button_border_alpha)!=null?_n:.2,Ze=(wn=m.cta_offset_y)!=null?wn:x*.75,C=document.createElement("button");C.style.cssText=`
95
+ width: ${Yi}px;
96
+ height: ${_t}px;
97
+ background: ${Gi};
98
+ opacity: ${Vi};
99
+ border: ${qi}px solid ${ji};
100
+ border-radius: ${Ii}px;
104
101
  cursor: pointer;
105
102
  opacity: 0;
106
103
  position: absolute;
107
104
  transform: translate(-50%, -50%);
108
105
  box-shadow: inset 0 0 1px rgba(0,0,0,0.15);
109
- `,L.style.top=`${Ke}px`,L.style.left="50%";let gt=ae(L);gt.element=L,T.appendChild(L);let ji=($==null?void 0:$.text)||((bn=c.ui)==null?void 0:bn.cta_label_end)||"DOWNLOAD",bt=($==null?void 0:$.font)||"brand.heading",Vi=($==null?void 0:$.fontSize)||20,qi=j.button_text_color||((xn=c.theme)==null?void 0:xn.cta_text)||"#1a0a0a";L.textContent=ji,L.style.fontFamily=O(bt),L.style.fontSize=`${Vi}px`,L.style.fontWeight=String(Y(bt)),L.style.color=qi,L.style.letterSpacing=`${(_n=$==null?void 0:$.letterSpacing)!=null?_n:1}px`;let xt=ae(L);xt.element=L;let P=l==null?void 0:l.ui,_t=((En=l==null?void 0:l.gameplay)==null?void 0:En.tuning)||{},Xi=(P==null?void 0:P.text)||"Play the full game",Et=(P==null?void 0:P.font)||"brand.body",Ki=(P==null?void 0:P.fontSize)||11,Ji=(wn=P==null?void 0:P.letterSpacing)!=null?wn:0,ke=(Tn=l==null?void 0:l.render)==null?void 0:Tn.tint,Zi=typeof ke=="string"?ke:ke?`#${ke.toString(16).padStart(6,"0")}`:"#CCCCCC",ie=document.createElement("div");ie.textContent=Xi,ie.style.cssText=`
110
- font-family: ${O(Et)};
111
- font-size: ${Ki}px;
112
- font-weight: ${Y(Et)};
113
- color: ${Zi};
106
+ `,C.style.top=`${Ze}px`,C.style.left="50%";let wt=ae(C);wt.element=C,v.appendChild(C);let Xi=(L==null?void 0:L.text)||((En=r.ui)==null?void 0:En.cta_label_end)||"DOWNLOAD",Et=(L==null?void 0:L.font)||"brand.heading",Ki=(L==null?void 0:L.fontSize)||20,Ji=j.button_text_color||((Tn=r.theme)==null?void 0:Tn.cta_text)||"#1a0a0a";C.textContent=Xi,C.style.fontFamily=N(Et),C.style.fontSize=`${Ki}px`,C.style.fontWeight=String(Y(Et)),C.style.color=Ji,C.style.letterSpacing=`${(vn=L==null?void 0:L.letterSpacing)!=null?vn:1}px`;let Tt=ae(C);Tt.element=C;let F=c==null?void 0:c.ui,vt=((Sn=c==null?void 0:c.gameplay)==null?void 0:Sn.tuning)||{},Zi=(F==null?void 0:F.text)||"Play the full game",St=(F==null?void 0:F.font)||"brand.body",Qi=(F==null?void 0:F.fontSize)||11,Ui=(Cn=F==null?void 0:F.letterSpacing)!=null?Cn:0,$e=(An=c==null?void 0:c.render)==null?void 0:An.tint,ea=typeof $e=="string"?$e:$e?`#${$e.toString(16).padStart(6,"0")}`:"#CCCCCC",ie=document.createElement("div");ie.textContent=Zi,ie.style.cssText=`
107
+ font-family: ${N(St)};
108
+ font-size: ${Qi}px;
109
+ font-weight: ${Y(St)};
110
+ color: ${ea};
114
111
  text-align: center;
115
- letter-spacing: ${Ji}px;
112
+ letter-spacing: ${Ui}px;
116
113
  opacity: 0;
117
114
  position: absolute;
118
115
  transform: translate(-50%, -50%);
119
116
  white-space: nowrap;
120
- `;let Qi=Ke+35+((vn=_t.animation_start_y_offset)!=null?vn:5);ie.style.top=`${Qi}px`,ie.style.left="50%";let Je=ae(ie);Je.element=ie,Je.animationStartYOffset=(Sn=_t.animation_start_y_offset)!=null?Sn:5,T.appendChild(ie);let Ze=((Cn=u==null?void 0:u.gameplay)==null?void 0:Cn.tuning)||{},Ui=(An=Ze.hand_offset_x)!=null?An:50,ea=(Rn=Ze.hand_offset_y)!=null?Rn:50,ta=(Mn=(Hn=u==null?void 0:u.transform)==null?void 0:Hn.scale)!=null?Mn:.1875,na=(Ln=Ze.hand_scale_multiplier)!=null?Ln:2.5,ia=new ye.SpriteMaterial({map:t||void 0,transparent:!0,alphaTest:.1}),be=new ye.Sprite(ia),wt=ta*na*100;return be.scale.set(wt,wt,1),be.position.set(Ui,Ke+ea,0),be.material.opacity=0,be.visible=!1,{panel:E,logo:R,title:ut,subtitle:qe,footer:Xe,ctaButton:gt,ctaText:xt,ctaHint:Je,hand:be}}function pi(e,t,n){var C,A,T,E,M,N,F,B;let i=t.objects.get("ui_endgame_1"),a=((C=i==null?void 0:i.gameplay)==null?void 0:C.tuning)||{},s=(A=a.animation_duration_ms)!=null?A:800,o=(T=a.fade_in_duration_ms)!=null?T:600,d=(E=a.scale_animation_intensity)!=null?E:.1,r=(M=a.logo_animation_delay_ms)!=null?M:100,f=(N=a.title_animation_delay_ms)!=null?N:200,l=(F=a.footer_animation_delay_ms)!=null?F:300,u=(B=a.cta_animation_delay_ms)!=null?B:400,{panel:c,logo:p,title:b,subtitle:x,footer:m,ctaButton:g,ctaText:h,ctaHint:y}=e;c.visible=!0,c.element.style.visibility="visible";let w=Date.now(),v=()=>{let se=Date.now()-w,Q=Math.min(se/o,1),X=1-Math.pow(1-Q,3);c.alpha=X,c.element.style.opacity=X.toString();let R=1+d*(1-X);c.element.style.transform=`translate(-50%, -50%) scale(${R})`,Q<1?requestAnimationFrame(v):(setTimeout(()=>Ca(p,s,t),r),setTimeout(()=>{Aa(b,s),setTimeout(()=>Ra(x,s),50)},f),setTimeout(()=>Ha(m,s),l),setTimeout(()=>{Ma(g,h,s),setTimeout(()=>La(y,s),50),n&&n()},u))};v()}function Ca(e,t,n){var c,p,b,x,m;let i=n==null?void 0:n.objects.get("ui_endgame_logo_1"),s=(p=(((c=i==null?void 0:i.gameplay)==null?void 0:c.tuning)||{}).animation_start_scale)!=null?p:1.2,o=Date.now(),d=e.material.opacity,r=(b=e.targetAlpha)!=null?b:1,f=(x=e.baseScaleX)!=null?x:e.scale.x,l=(m=e.baseScaleY)!=null?m:e.scale.y,u=()=>{let g=Date.now()-o,h=Math.min(g/t,1),y=1-Math.pow(1-h,2);e.material.opacity=d+(r-d)*y;let w=s+(1-s)*y;e.scale.set(f*w,l*w,1),h<1&&requestAnimationFrame(u)};u()}function Aa(e,t){let n=Date.now(),i=parseFloat(e.element.style.opacity||"0"),a=parseFloat(e.element.style.top||"0"),s=()=>{let o=Date.now()-n,d=Math.min(o/t,1),r=1-Math.pow(1-d,2);e.element.style.opacity=(i+(1-i)*r).toString(),e.element.style.top=`${a-20*(1-r)}px`,d<1&&requestAnimationFrame(s)};s()}function Ra(e,t){var d;let n=Date.now(),i=parseFloat(e.element.style.opacity||"0"),a=parseFloat(e.element.style.top||"0"),s=a-((d=e.animationStartYOffset)!=null?d:-10),o=()=>{let r=Date.now()-n,f=Math.min(r/t,1),l=1-Math.pow(1-f,2);e.element.style.opacity=(i+(1-i)*l).toString(),e.element.style.top=`${a+(s-a)*l}px`,f<1&&requestAnimationFrame(o)};o()}function Ha(e,t){var o;let n=Date.now(),i=parseFloat(e.element.style.opacity||"0"),a=(o=e.targetAlpha)!=null?o:1,s=()=>{let d=Date.now()-n,r=Math.min(d/t,1),f=1-Math.pow(1-r,2);e.element.style.opacity=(i+(a-i)*f).toString(),r<1&&requestAnimationFrame(s)};s()}function Ma(e,t,n){let i=Date.now(),a=parseFloat(e.element.style.opacity||"0"),s=()=>{let o=Date.now()-i,d=Math.min(o/n,1),r=1-Math.pow(1-d,2);e.element.style.opacity=(a+(1-a)*r).toString(),t.element.style.opacity=(a+(1-a)*r).toString(),e.element.style.transform=`translate(-50%, -50%) scale(${1+.1*(1-r)})`,d<1&&requestAnimationFrame(s)};s()}function La(e,t){var d;let n=Date.now(),i=parseFloat(e.element.style.opacity||"0"),a=parseFloat(e.element.style.top||"0"),s=a-((d=e.animationStartYOffset)!=null?d:5),o=()=>{let r=Date.now()-n,f=Math.min(r/t,1),l=1-Math.pow(1-f,2);e.element.style.opacity=(i+(1-i)*l).toString(),e.element.style.top=`${a+(s-a)*l}px`,f<1&&requestAnimationFrame(o)};o()}function ui(e,t,n,i){var l,u,c,p;let a=n.objects.get("ui_endgame_hand_1"),s=((l=a==null?void 0:a.gameplay)==null?void 0:l.tuning)||{},o=(u=s.click_animation_duration_ms)!=null?u:600,d=(c=s.click_delay_ms)!=null?c:2e3,r=(p=s.click_repeat_delay_ms)!=null?p:3e3,f=()=>{var A,T;e.visible=!0,e.material.opacity=1;let b=e.position.x,x=e.position.y,m=(A=s.hand_offset_x)!=null?A:50,g=(T=s.hand_offset_y)!=null?T:50,h=t.element.getBoundingClientRect(),y=m,w=g,v=Date.now(),C=()=>{var X,R,U;let E=Date.now()-v,M=Math.min(E/o,1),N=M<.5?2*M*M:1-Math.pow(-2*M+2,2)/2;e.position.set(b+(y-b)*N,x+(w-x)*N,0);let F=(R=(X=a==null?void 0:a.transform)==null?void 0:X.scale)!=null?R:.1875,B=(U=s.hand_scale_multiplier)!=null?U:2.5,se=F*B*100,Q=se+se*.2*Math.sin(M*Math.PI);e.scale.set(Q,Q,1),M<1?requestAnimationFrame(C):(t.element.style.transform="translate(-50%, -50%) scale(0.95)",setTimeout(()=>{t.element.style.transform="translate(-50%, -50%) scale(1)",i()},100),setTimeout(()=>{e.material.opacity=0,setTimeout(()=>{e.position.set(b,x,0),f()},r)},500))};C()};setTimeout(f,d)}var Ve=xe(require("three"));function mi(e,t,n){var u,c,p,b;let i=t.objects.get("hand_tutorial_1"),a=((u=i==null?void 0:i.gameplay)==null?void 0:u.tuning)||{},s=(i==null?void 0:i.render)||{},o=(i==null?void 0:i.transform)||{},d=new Ve.SpriteMaterial({map:e||void 0,transparent:!0,alphaTest:.1}),r=new Ve.Sprite(d);r.position.set(n.x,n.y,0),r.material.opacity=0;let f=(c=a.hand_scale_multiplier)!=null?c:2.5,l=(p=o.scale)!=null?p:.1875;return r.scale.set(l*f*100,l*f*100,1),r.renderOrder=(b=s.z_index)!=null?b:99999,r}function fi(e){var b,x,m,g,h,y,w,v,C;let t=e.objects.get("ui_tutorial_1"),n=t==null?void 0:t.ui,i=(t==null?void 0:t.render)||{},a=((b=e.engine.runtime)==null?void 0:b.ui_styles)||{},s=((x=e.engine.runtime)==null?void 0:x.ui)||{},o=(n==null?void 0:n.text)||s.tutorial_label||s.label_text||"CLEAN!",d=(n==null?void 0:n.font)||"brand.warning",r=(n==null?void 0:n.fontSize)||a.label_font_size||52,f=(g=n==null?void 0:n.letterSpacing)!=null?g:(m=a.label_letter_spacing)!=null?m:-1,l=(n==null?void 0:n.align)||"center",u=i.tint,c=typeof u=="string"?u:u?`#${u.toString(16).padStart(6,"0")}`:a.label_fill||"#FFF1C1",p=document.createElement("div");return p.textContent=o,p.style.cssText=`
121
- font-family: ${O(d)};
122
- font-size: ${r}px;
123
- font-weight: ${Y(d)};
124
- color: ${c};
125
- text-align: ${l};
126
- letter-spacing: ${f}px;
127
- text-shadow: ${(h=a.label_shadow_distance)!=null?h:2}px ${(y=a.label_shadow_distance)!=null?y:2}px ${(w=a.label_shadow_blur)!=null?w:4}px rgba(0,0,0,${(v=a.label_shadow_alpha)!=null?v:.8});
117
+ `;let ta=Ze+_t/2+15+((Rn=vt.animation_start_y_offset)!=null?Rn:5);ie.style.top=`${ta}px`,ie.style.left="50%";let Qe=ae(ie);Qe.element=ie,Qe.animationStartYOffset=(Hn=vt.animation_start_y_offset)!=null?Hn:5,v.appendChild(ie);let Ue=((Mn=u==null?void 0:u.gameplay)==null?void 0:Mn.tuning)||{},na=(Ln=Ue.hand_offset_x)!=null?Ln:50,ia=(Fn=Ue.hand_offset_y)!=null?Fn:50,aa=(Dn=(kn=u==null?void 0:u.transform)==null?void 0:kn.scale)!=null?Dn:.1875,sa=($n=Ue.hand_scale_multiplier)!=null?$n:2.5,oa=new ye.SpriteMaterial({map:t||void 0,transparent:!0,alphaTest:.1}),be=new ye.Sprite(oa),Ct=aa*sa*100;return be.scale.set(Ct,Ct,1),be.position.set(na,Ze+ia,0),be.material.opacity=0,be.visible=!1,{panel:I,logo:O,title:ft,subtitle:Ke,footer:Je,ctaButton:wt,ctaText:Tt,ctaHint:Qe,hand:be}}function fi(e,t,n){var A,$,P,K,R,v,I,z;let i=t.objects.get("ui_endgame_1"),a=((A=i==null?void 0:i.gameplay)==null?void 0:A.tuning)||{},s=($=a.animation_duration_ms)!=null?$:800,o=(P=a.fade_in_duration_ms)!=null?P:600,p=(K=a.scale_animation_intensity)!=null?K:.1,l=(R=a.logo_animation_delay_ms)!=null?R:100,h=(v=a.title_animation_delay_ms)!=null?v:200,c=(I=a.footer_animation_delay_ms)!=null?I:300,u=(z=a.cta_animation_delay_ms)!=null?z:400,{panel:r,logo:m,title:g,subtitle:b,footer:d,ctaButton:f,ctaText:y,ctaHint:x}=e;r.visible=!0,r.element.style.visibility="visible";let w=Date.now(),T=()=>{let U=Date.now()-w,W=Math.min(U/o,1),B=1-Math.pow(1-W,3);r.alpha=B,r.element.style.opacity=B.toString();let se=1+p*(1-B);r.element.style.transform=`translate(-50%, -50%) scale(${se})`,W<1?requestAnimationFrame(T):(setTimeout(()=>Ha(m,s,t),l),setTimeout(()=>{Ma(g,s),setTimeout(()=>La(b,s),50)},h),setTimeout(()=>Fa(d,s),c),setTimeout(()=>{ka(f,y,s),setTimeout(()=>Da(x,s),50),n&&n()},u))};T()}function Ha(e,t,n){var r,m,g,b,d;let i=n==null?void 0:n.objects.get("ui_endgame_logo_1"),s=(m=(((r=i==null?void 0:i.gameplay)==null?void 0:r.tuning)||{}).animation_start_scale)!=null?m:1.2,o=Date.now(),p=e.material.opacity,l=(g=e.targetAlpha)!=null?g:1,h=(b=e.baseScaleX)!=null?b:e.scale.x,c=(d=e.baseScaleY)!=null?d:e.scale.y,u=()=>{let f=Date.now()-o,y=Math.min(f/t,1),x=1-Math.pow(1-y,2);e.material.opacity=p+(l-p)*x;let w=s+(1-s)*x;e.scale.set(h*w,c*w,1),y<1&&requestAnimationFrame(u)};u()}function Ma(e,t){let n=Date.now(),i=parseFloat(e.element.style.opacity||"0"),a=parseFloat(e.element.style.top||"0"),s=()=>{let o=Date.now()-n,p=Math.min(o/t,1),l=1-Math.pow(1-p,2);e.element.style.opacity=(i+(1-i)*l).toString(),e.element.style.top=`${a-20*(1-l)}px`,p<1&&requestAnimationFrame(s)};s()}function La(e,t){var p;let n=Date.now(),i=parseFloat(e.element.style.opacity||"0"),a=parseFloat(e.element.style.top||"0"),s=a-((p=e.animationStartYOffset)!=null?p:-10),o=()=>{let l=Date.now()-n,h=Math.min(l/t,1),c=1-Math.pow(1-h,2);e.element.style.opacity=(i+(1-i)*c).toString(),e.element.style.top=`${a+(s-a)*c}px`,h<1&&requestAnimationFrame(o)};o()}function Fa(e,t){var o;let n=Date.now(),i=parseFloat(e.element.style.opacity||"0"),a=(o=e.targetAlpha)!=null?o:1,s=()=>{let p=Date.now()-n,l=Math.min(p/t,1),h=1-Math.pow(1-l,2);e.element.style.opacity=(i+(a-i)*h).toString(),l<1&&requestAnimationFrame(s)};s()}function ka(e,t,n){let i=Date.now(),a=parseFloat(e.element.style.opacity||"0"),s=()=>{let o=Date.now()-i,p=Math.min(o/n,1),l=1-Math.pow(1-p,2);e.element.style.opacity=(a+(1-a)*l).toString(),t.element.style.opacity=(a+(1-a)*l).toString(),e.element.style.transform=`translate(-50%, -50%) scale(${1+.1*(1-l)})`,p<1&&requestAnimationFrame(s)};s()}function Da(e,t){var p;let n=Date.now(),i=parseFloat(e.element.style.opacity||"0"),a=parseFloat(e.element.style.top||"0"),s=a-((p=e.animationStartYOffset)!=null?p:5),o=()=>{let l=Date.now()-n,h=Math.min(l/t,1),c=1-Math.pow(1-h,2);e.element.style.opacity=(i+(1-i)*c).toString(),e.element.style.top=`${a+(s-a)*c}px`,h<1&&requestAnimationFrame(o)};o()}function yi(e,t,n,i){var c,u,r,m;let a=n.objects.get("ui_endgame_hand_1"),s=((c=a==null?void 0:a.gameplay)==null?void 0:c.tuning)||{},o=(u=s.click_animation_duration_ms)!=null?u:600,p=(r=s.click_delay_ms)!=null?r:2e3,l=(m=s.click_repeat_delay_ms)!=null?m:3e3,h=()=>{var $,P;e.visible=!0,e.material.opacity=1;let g=e.position.x,b=e.position.y,d=($=s.hand_offset_x)!=null?$:50,f=(P=s.hand_offset_y)!=null?P:50,y=t.element.getBoundingClientRect(),x=d,w=f,T=Date.now(),A=()=>{var B,se,He;let K=Date.now()-T,R=Math.min(K/o,1),v=R<.5?2*R*R:1-Math.pow(-2*R+2,2)/2;e.position.set(g+(x-g)*v,b+(w-b)*v,0);let I=(se=(B=a==null?void 0:a.transform)==null?void 0:B.scale)!=null?se:.1875,z=(He=s.hand_scale_multiplier)!=null?He:2.5,U=I*z*100,W=U+U*.2*Math.sin(R*Math.PI);e.scale.set(W,W,1),R<1?requestAnimationFrame(A):(t.element.style.transform="translate(-50%, -50%) scale(0.95)",setTimeout(()=>{t.element.style.transform="translate(-50%, -50%) scale(1)",i()},100),setTimeout(()=>{e.material.opacity=0,setTimeout(()=>{e.position.set(g,b,0),h()},l)},500))};A()};setTimeout(h,p)}var Xe=xe(require("three"));function gi(e,t,n){var u,r,m,g;let i=t.objects.get("hand_tutorial_1"),a=((u=i==null?void 0:i.gameplay)==null?void 0:u.tuning)||{},s=(i==null?void 0:i.render)||{},o=(i==null?void 0:i.transform)||{},p=new Xe.SpriteMaterial({map:e||void 0,transparent:!0,alphaTest:.1}),l=new Xe.Sprite(p);l.position.set(n.x,n.y,0),l.material.opacity=0;let h=(r=a.hand_scale_multiplier)!=null?r:2.5,c=(m=o.scale)!=null?m:.1875;return l.scale.set(c*h*100,c*h*100,1),l.renderOrder=(g=s.z_index)!=null?g:99999,l}function bi(e){var g,b,d,f,y,x,w,T,A;let t=e.objects.get("ui_tutorial_1"),n=t==null?void 0:t.ui,i=(t==null?void 0:t.render)||{},a=((g=e.engine.runtime)==null?void 0:g.ui_styles)||{},s=((b=e.engine.runtime)==null?void 0:b.ui)||{},o=(n==null?void 0:n.text)||s.tutorial_label||s.label_text||"CLEAN!",p=(n==null?void 0:n.font)||"brand.warning",l=(n==null?void 0:n.fontSize)||a.label_font_size||52,h=(f=n==null?void 0:n.letterSpacing)!=null?f:(d=a.label_letter_spacing)!=null?d:-1,c=(n==null?void 0:n.align)||"center",u=i.tint,r=typeof u=="string"?u:u?`#${u.toString(16).padStart(6,"0")}`:a.label_fill||"#FFF1C1",m=document.createElement("div");return m.textContent=o,m.style.cssText=`
118
+ font-family: ${N(p)};
119
+ font-size: ${l}px;
120
+ font-weight: ${Y(p)};
121
+ color: ${r};
122
+ text-align: ${c};
123
+ letter-spacing: ${h}px;
124
+ text-shadow: ${(y=a.label_shadow_distance)!=null?y:2}px ${(x=a.label_shadow_distance)!=null?x:2}px ${(w=a.label_shadow_blur)!=null?w:4}px rgba(0,0,0,${(T=a.label_shadow_alpha)!=null?T:.8});
128
125
  -webkit-text-stroke: ${a.label_stroke||"#8B0000"} 2px;
129
- opacity: ${(C=i.alpha)!=null?C:0};
126
+ opacity: ${(A=i.alpha)!=null?A:0};
130
127
  visibility: ${i.visible!==!1?"visible":"hidden"};
131
128
  pointer-events: none;
132
129
  position: absolute;
133
130
  transform: translate(-50%, -50%);
134
131
  white-space: nowrap;
135
- `,p}function hi(e,t,n,i,a){var r,f,l,u,c,p,b;let s=a.objects.get("hand_tutorial_1"),o=((r=s==null?void 0:s.gameplay)==null?void 0:r.tuning)||{},d=(s==null?void 0:s.transform)||{};if(!i){let x=(f=o.animation_duration)!=null?f:1.5,m=n%x/x,g=m<.5?2*m*m:-1+(4-2*m)*m,h=(l=o.x_offset)!=null?l:0,y=(u=o.y_offset)!=null?u:0,w=(c=o.animation_range)!=null?c:40,v=w*.7,C=w,A=t.x+h+v,T=t.y+y+C,E=A+v,M=T+C;e.position.set(A+(E-A)*g,T+(M-T)*g,0);let N=(p=d.scale)!=null?p:.1875,F=(b=o.hand_scale_multiplier)!=null?b:2.5,B=N*F*100;e.scale.set(B,B,1)}}var ge=xe(require("three")),yi=new ge.TextureLoader;async function ct(e,t,n=16777215,i=!1){try{let s=(globalThis.INLINE_ASSETS||{})[e];return await yi.loadAsync(s||e)}catch{console.warn(`Asset missing: ${e}. Using placeholder.`);let s=document.createElement("canvas");s.width=64,s.height=64;let o=s.getContext("2d");return o&&(o.fillStyle=`#${n.toString(16).padStart(6,"0")}`,i?o.fillRect(0,0,30,60):(o.beginPath(),o.arc(32,32,30,0,Math.PI*2),o.fill(),o.fillRect(27,32,10,40))),new ge.CanvasTexture(s)}}async function gi(e,t,n){var b,x,m,g;let a=(globalThis.INLINE_ASSETS||{})[e]||e,s;try{s=await yi.loadAsync(a),console.log("[character] loaded sheet",{path:e,sourceUsed:a})}catch(h){let v=((n.gameplay.character_sheet||{}).fallback_color||"#ff00ff").replace("#","");s=await ct(e,t,parseInt(v,16),!0),console.warn("[character] fallback loadAsset used",{path:e,err:h})}if(!s)return[];let o=n.gameplay.character_sheet||{},d=(b=o.cols)!=null?b:3,r=(x=o.rows)!=null?x:2,f=((m=s.image)==null?void 0:m.width)||0,l=((g=s.image)==null?void 0:g.height)||0,u=f/d,c=l/r;if(!Number.isFinite(u)||!Number.isFinite(c)||u<=0||c<=0)return[s];let p=[];for(let h=0;h<r;h++)for(let y=0;y<d;y++){let w=document.createElement("canvas");w.width=u,w.height=c;let v=w.getContext("2d");v&&s.image&&v.drawImage(s.image,y*u,h*c,u,c,0,0,u,c),p.push(new ge.CanvasTexture(w))}return p.length>2&&p.push(...p.slice(1,-1).reverse()),console.log("[character] frames prepared",{count:p.length}),p}function bi(e,t){var u,c,p,b;let n=t.gameplay.brush||{},i=t.theme.brush_color||"#ffffff",a=(u=n.radius)!=null?u:20,s=(c=n.inner_radius)!=null?c:15,o=(p=n.alpha)!=null?p:.8,d=(b=n.inner_alpha)!=null?b:.3,r=n.inner_color||"#ffffff",f=document.createElement("canvas");f.width=a*2,f.height=a*2;let l=f.getContext("2d");return l&&(l.clearRect(0,0,f.width,f.height),l.beginPath(),l.arc(a,a,a,0,Math.PI*2),l.fillStyle=i,l.globalAlpha=o,l.fill(),l.beginPath(),l.arc(a,a,s,0,Math.PI*2),l.fillStyle=r,l.globalAlpha=d,l.fill()),new ge.CanvasTexture(f)}0&&(module.exports={AspectClass,GameObject,GameObjectManager,Renderer,ResponsiveUISystem,Transform,animateHandClick,animatePanelEntrance,createBrushTexture,createEndGamePanel,createHandTutorial,createThreeBase,createTutorialLabel,getAspectClass,getRegisteredFontIds,loadAsset,loadCharacterFrames,registerFont,resolveFont,resolveFontWeight,updateHandAnimation});
132
+ `,m}function xi(e,t,n,i,a){var l,h,c,u,r,m,g;let s=a.objects.get("hand_tutorial_1"),o=((l=s==null?void 0:s.gameplay)==null?void 0:l.tuning)||{},p=(s==null?void 0:s.transform)||{};if(!i){let b=(h=o.animation_duration)!=null?h:1.5,d=n%b/b,f=d<.5?2*d*d:-1+(4-2*d)*d,y=(c=o.x_offset)!=null?c:0,x=(u=o.y_offset)!=null?u:0,w=(r=o.animation_range)!=null?r:40,T=w*.7,A=w,$=t.x+y+T,P=t.y+x+A,K=$+T,R=P+A;e.position.set($+(K-$)*f,P+(R-P)*f,0);let v=(m=p.scale)!=null?m:.1875,I=(g=o.hand_scale_multiplier)!=null?g:2.5,z=v*I*100;e.scale.set(z,z,1)}}var ge=xe(require("three")),_i=new ge.TextureLoader;async function pt(e,t,n=16777215,i=!1){try{let s=(globalThis.INLINE_ASSETS||{})[e];return await _i.loadAsync(s||e)}catch{console.warn(`Asset missing: ${e}. Using placeholder.`);let s=document.createElement("canvas");s.width=64,s.height=64;let o=s.getContext("2d");return o&&(o.fillStyle=`#${n.toString(16).padStart(6,"0")}`,i?o.fillRect(0,0,30,60):(o.beginPath(),o.arc(32,32,30,0,Math.PI*2),o.fill(),o.fillRect(27,32,10,40))),new ge.CanvasTexture(s)}}async function wi(e,t,n){var g,b,d,f;let a=(globalThis.INLINE_ASSETS||{})[e]||e,s;try{s=await _i.loadAsync(a),console.log("[character] loaded sheet",{path:e,sourceUsed:a})}catch(y){let T=((n.gameplay.character_sheet||{}).fallback_color||"#ff00ff").replace("#","");s=await pt(e,t,parseInt(T,16),!0),console.warn("[character] fallback loadAsset used",{path:e,err:y})}if(!s)return[];let o=n.gameplay.character_sheet||{},p=(g=o.cols)!=null?g:3,l=(b=o.rows)!=null?b:2,h=((d=s.image)==null?void 0:d.width)||0,c=((f=s.image)==null?void 0:f.height)||0,u=h/p,r=c/l;if(!Number.isFinite(u)||!Number.isFinite(r)||u<=0||r<=0)return[s];let m=[];for(let y=0;y<l;y++)for(let x=0;x<p;x++){let w=document.createElement("canvas");w.width=u,w.height=r;let T=w.getContext("2d");T&&s.image&&T.drawImage(s.image,x*u,y*r,u,r,0,0,u,r),m.push(new ge.CanvasTexture(w))}return m.length>2&&m.push(...m.slice(1,-1).reverse()),console.log("[character] frames prepared",{count:m.length}),m}function Ei(e,t){var u,r,m,g;let n=t.gameplay.brush||{},i=t.theme.brush_color||"#ffffff",a=(u=n.radius)!=null?u:20,s=(r=n.inner_radius)!=null?r:15,o=(m=n.alpha)!=null?m:.8,p=(g=n.inner_alpha)!=null?g:.3,l=n.inner_color||"#ffffff",h=document.createElement("canvas");h.width=a*2,h.height=a*2;let c=h.getContext("2d");return c&&(c.clearRect(0,0,h.width,h.height),c.beginPath(),c.arc(a,a,a,0,Math.PI*2),c.fillStyle=i,c.globalAlpha=o,c.fill(),c.beginPath(),c.arc(a,a,s,0,Math.PI*2),c.fillStyle=l,c.globalAlpha=p,c.fill()),new ge.CanvasTexture(h)}0&&(module.exports={AspectClass,GameObject,GameObjectManager,Renderer,ResponsiveUISystem,Transform,animateHandClick,animatePanelEntrance,createBrushTexture,createEndGamePanel,createHandTutorial,createThreeBase,createTutorialLabel,getAspectClass,getRegisteredFontIds,loadAsset,loadCharacterFrames,registerFont,resolveFont,resolveFontWeight,updateHandAnimation});
@@ -1,16 +1,13 @@
1
- import{b as lt}from"../chunk-LQX44TET.mjs";import*as I from"three";var qe=(s=>(s[s.PHONE_TALL=0]="PHONE_TALL",s[s.TABLET=1]="TABLET",s[s.LANDSCAPE=2]="LANDSCAPE",s))(qe||{});function Et(e,t){let n=e/t;return n<=.62?0:n<=.85?1:2}var nt=class{constructor(t,n){this.root=t,this.stage=n,this.uiFrame=document.createElement("div"),this.uiFrame.style.position="absolute",this.uiFrame.style.top="0",this.uiFrame.style.bottom="0",this.uiFrame.style.left="50%",this.uiFrame.style.transform="translateX(-50%)",this.uiFrame.style.width="100%",this.uiFrame.style.maxWidth="420px",this.uiFrame.style.pointerEvents="none",this.stage.appendChild(this.uiFrame),this.uiContainer=document.createElement("div"),this.uiContainer.setAttribute("style",["position:absolute","inset:0","display:flex","flex-direction:column","justify-content:flex-start","gap:12px","pointer-events:none","padding:20px 16px","padding-bottom:clamp(24px, 6vh, 96px)","box-sizing:border-box","z-index:2"].join(";")),this.uiFrame.appendChild(this.uiContainer),this.updateLayout()}getUIFrame(){return this.uiFrame}getUIContainer(){return this.uiContainer}updateLayout(){let t=this.stage.getBoundingClientRect(),n=Et(t.width,t.height);n===0?this.uiFrame.style.maxWidth="420px":n===1?this.uiFrame.style.maxWidth="520px":this.uiFrame.style.maxWidth="640px"}getAspectClass(){let t=this.stage.getBoundingClientRect();return Et(t.width,t.height)}};async function Dn(e,t={}){let n=()=>{let d=e.style.width||"",g=e.style.height||"",h=320,f=480,E=window.getComputedStyle(e),w=d||E.width,S=g||E.height;if(w&&w!=="auto"&&!w.includes("%")){let T=parseFloat(w);!isNaN(T)&&T>0&&isFinite(T)&&(h=T)}if(S&&S!=="auto"&&!S.includes("%")){let T=parseFloat(S);!isNaN(T)&&T>0&&isFinite(T)&&(f=T)}let H=e.clientWidth,_=e.clientHeight;if((h===320||h<=0||!isFinite(h))&&H&&H>0&&(h=H),(f===480||f<=0||!isFinite(f))&&_&&_>0&&(f=_),h<=0||f<=0||!isFinite(h)||!isFinite(f)){let T=e.getBoundingClientRect();T.width>0&&isFinite(T.width)&&(h=T.width),T.height>0&&isFinite(T.height)&&(f=T.height)}return(h<=0||!isFinite(h))&&(h=e.clientWidth||window.innerWidth||320),(f<=0||!isFinite(f))&&(f=e.clientHeight||window.innerHeight||480),console.log("[THREE-BASE] getSize result:",{width:h,height:f,styleWidth:d,styleHeight:g,effectiveWidth:w,effectiveHeight:S,computedWidth:E.width,computedHeight:E.height,clientWidth:H,clientHeight:_,boundingRect:e.getBoundingClientRect()}),{width:h,height:f}},s=e.style.width&&!e.style.width.includes("%"),a=e.style.height&&!e.style.height.includes("%");e.style.position||(e.style.position="relative"),e.style.display||(e.style.display="block"),e.style.width=e.style.width||"100%",e.style.height=e.style.height||"100%",e.style.minWidth="100%",e.style.minHeight="100%",e.style.maxWidth="100%",e.style.maxHeight="100%",e.style.boxSizing="border-box",e.style.overflow="hidden",e.style.margin="0",e.style.padding="0",e.style.border="none";let i=t.background||"linear-gradient(160deg, #0d1020, #0f1c2f)";e.style.setProperty("background",i,"important"),e.style.setProperty("background-size","cover","important"),e.style.setProperty("background-position","center","important"),e.style.setProperty("background-repeat","no-repeat","important");let o=document.createElement("div");o.style.cssText=`
1
+ import{b as pt}from"../chunk-3J2MAJRK.mjs";import*as I from"three";var Ke=(s=>(s[s.PHONE_TALL=0]="PHONE_TALL",s[s.TABLET=1]="TABLET",s[s.LANDSCAPE=2]="LANDSCAPE",s))(Ke||{});function wt(e,t){let n=e/t;return n<=.62?0:n<=.85?1:2}var nt=class{constructor(t,n){this.root=t,this.stage=n,this.uiFrame=document.createElement("div"),this.uiFrame.style.position="absolute",this.uiFrame.style.top="0",this.uiFrame.style.bottom="0",this.uiFrame.style.left="50%",this.uiFrame.style.transform="translateX(-50%)",this.uiFrame.style.width="100%",this.uiFrame.style.maxWidth="420px",this.uiFrame.style.pointerEvents="none",this.stage.appendChild(this.uiFrame),this.uiContainer=document.createElement("div"),this.uiContainer.setAttribute("style",["position:absolute","inset:0","display:flex","flex-direction:column","justify-content:flex-start","gap:12px","pointer-events:none","padding:20px 16px","padding-bottom:clamp(24px, 6vh, 96px)","box-sizing:border-box","z-index:2"].join(";")),this.uiFrame.appendChild(this.uiContainer),this.updateLayout()}getUIFrame(){return this.uiFrame}getUIContainer(){return this.uiContainer}updateLayout(){let t=this.stage.getBoundingClientRect(),n=wt(t.width,t.height);n===0?this.uiFrame.style.maxWidth="420px":n===1?this.uiFrame.style.maxWidth="520px":this.uiFrame.style.maxWidth="640px"}getAspectClass(){let t=this.stage.getBoundingClientRect();return wt(t.width,t.height)}};async function Pn(e,t={}){let n=()=>{let c=e.getBoundingClientRect(),h=c.width,f=c.height;return(h<=0||!isFinite(h))&&(h=e.clientWidth||window.innerWidth||320),(f<=0||!isFinite(f))&&(f=e.clientHeight||window.innerHeight||480),(h<=0||!isFinite(h))&&(h=320),(f<=0||!isFinite(f))&&(f=480),console.log("[THREE-BASE] getSize result:",{width:h,height:f,boundingRect:{width:c.width,height:c.height},clientSize:{width:e.clientWidth,height:e.clientHeight}}),{width:h,height:f}},s=e.style.width&&!e.style.width.includes("%"),a=e.style.height&&!e.style.height.includes("%");e.style.position||(e.style.position="relative"),e.style.display||(e.style.display="block"),e.style.width=e.style.width||"100%",e.style.height=e.style.height||"100%",e.style.minWidth="100%",e.style.minHeight="100%",e.style.maxWidth="100%",e.style.maxHeight="100%",e.style.boxSizing="border-box",e.style.overflow="hidden",e.style.margin="0",e.style.padding="0",e.style.border="none";let i=t.background||"linear-gradient(160deg, #0d1020, #0f1c2f)";e.style.setProperty("background",i,"important"),e.style.setProperty("background-size","cover","important"),e.style.setProperty("background-position","center","important"),e.style.setProperty("background-repeat","no-repeat","important");let r=document.createElement("div");r.style.cssText=`
2
2
  position: absolute !important;
3
- top: 0 !important;
4
- left: 0 !important;
5
- right: 0 !important;
6
- bottom: 0 !important;
3
+ inset: 0 !important;
7
4
  width: 100% !important;
8
5
  height: 100% !important;
9
6
  min-width: 100% !important;
10
7
  min-height: 100% !important;
11
- display: flex;
12
- align-items: center;
13
- justify-content: center;
8
+ max-width: 100% !important;
9
+ max-height: 100% !important;
10
+ display: block !important;
14
11
  background: ${i} !important;
15
12
  background-size: cover !important;
16
13
  background-position: center !important;
@@ -21,19 +18,17 @@ import{b as lt}from"../chunk-LQX44TET.mjs";import*as I from"three";var qe=(s=>(s
21
18
  margin: 0 !important;
22
19
  padding: 0 !important;
23
20
  border: none !important;
24
- `,e.appendChild(o);let p=document.createElement("div");p.setAttribute("style",["position:absolute","inset:0","width:100%","height:100%","pointer-events:auto"].join(";")),o.appendChild(p);let r=new I.Scene,{width:y,height:c}=n(),u=new I.PerspectiveCamera(55,y/c,.1,100);u.position.set(0,0,3.2),u.lookAt(0,0,0),u.updateMatrixWorld();let l=new I.WebGLRenderer({antialias:!0,alpha:!0,preserveDrawingBuffer:!0});l.setPixelRatio(window.devicePixelRatio||1),l.setSize(y,c),l.setClearColor(0,0),l.domElement.style.position="absolute",l.domElement.style.top="0",l.domElement.style.left="0",l.domElement.style.width="100%",l.domElement.style.height="100%",l.domElement.style.display="block",l.domElement.style.pointerEvents="auto",p.appendChild(l.domElement);let m=d=>{let g,h;if(typeof(d==null?void 0:d.width)=="number"&&d.width>0?g=d.width:g=n().width,typeof(d==null?void 0:d.height)=="number"&&d.height>0?h=d.height:h=n().height,g<=0||h<=0||!isFinite(g)||!isFinite(h)){console.warn("[THREE-BASE] Invalid size in applySize, using getSize fallback",{newWidth:g,newHeight:h,size:d});let f=n();g=f.width,h=f.height}console.log("[THREE-BASE] applySize:",{newWidth:g,newHeight:h,providedSize:d,containerSize:n()}),l.setSize(g,h),l.setPixelRatio(window.devicePixelRatio||1),u.aspect=g/h,u.updateProjectionMatrix()};requestAnimationFrame(()=>m());let b=!1;lt.on("pause",()=>{b=!0,document.querySelectorAll("audio").forEach(g=>g.pause())}),lt.on("resume",()=>{b=!1,document.querySelectorAll("audio").forEach(g=>{g.currentTime>0&&!g.ended&&g.play().catch(()=>{})})});let x=new nt(e,o);return lt.on("resize",({payload:d})=>{m({width:d==null?void 0:d.width,height:d==null?void 0:d.height}),x.updateLayout()}),window.addEventListener("resize",()=>{m(),x.updateLayout()}),{scene:r,camera:u,renderer:l,uiSystem:x,applySize:m}}import*as v from"three";var ct=class{constructor(t){var n,s;this.position=(t==null?void 0:t.position)||{x:0,y:0},this.scale=(n=t==null?void 0:t.scale)!=null?n:1,this.rotation=(s=t==null?void 0:t.rotation)!=null?s:0}update(t){t.position!==void 0&&(this.position={...t.position}),t.scale!==void 0&&(this.scale=t.scale),t.rotation!==void 0&&(this.rotation=t.rotation)}syncToThree(t){let n=t.position.z,s=n===0||!isFinite(n)?.5:n;t.position.set(this.position.x,this.position.y,s),t.scale.set(this.scale,this.scale,this.scale),t.rotation.z=this.rotation}},pt=class{constructor(t){var n,s,a,i;this.z_index=(n=t==null?void 0:t.z_index)!=null?n:0,this.alpha=(s=t==null?void 0:t.alpha)!=null?s:1,this.visible=(a=t==null?void 0:t.visible)!=null?a:!0,this.tint=(i=t==null?void 0:t.tint)!=null?i:null}update(t){t.z_index!==void 0&&(this.z_index=t.z_index),t.alpha!==void 0&&(this.alpha=t.alpha),t.visible!==void 0&&(this.visible=t.visible),t.tint!==void 0&&(this.tint=t.tint)}syncToThree(t){if(t.renderOrder=this.z_index,t.visible=this.visible,t instanceof v.Mesh&&t.material&&(Array.isArray(t.material)?t.material.forEach(n=>{n instanceof v.Material&&(n.opacity=this.alpha,n.transparent=this.alpha<1)}):t.material instanceof v.Material&&(t.material.opacity=this.alpha,t.material.transparent=this.alpha<1)),this.tint!==null&&t instanceof v.Mesh&&t.material){let n=typeof this.tint=="string"?new v.Color(this.tint):new v.Color(this.tint);Array.isArray(t.material)?t.material.forEach(s=>{(s instanceof v.MeshBasicMaterial||s instanceof v.MeshStandardMaterial)&&s.color.copy(n)}):(t.material instanceof v.MeshBasicMaterial||t.material instanceof v.MeshStandardMaterial)&&t.material.color.copy(n)}}},mt=class{constructor(t,n,s,a){this.instanceId=t,this.objectConfig=n,this.threeObject=s,this._config=a,this.transform=new ct(a.transform),this.renderer=new pt(a.render),this.sync()}sync(){this.transform.syncToThree(this.threeObject),this.renderer.syncToThree(this.threeObject)}updateConfig(t){this._config=t,t.transform&&this.transform.update(t.transform),t.render&&this.renderer.update(t.render),this.sync()}getComponent(t){return this._config[t]}getPosition(){return{...this.transform.position}}setPosition(t,n){this.transform.position={x:t,y:n},this.transform.syncToThree(this.threeObject)}getAlpha(){return this.renderer.alpha}setAlpha(t){this.renderer.alpha=t,this.renderer.syncToThree(this.threeObject)}getVisible(){return this.renderer.visible}setVisible(t){this.renderer.visible=t,this.renderer.syncToThree(this.threeObject)}},_t=class{constructor(t){this.objects=new Map;this.config=t}create(t,n){let s=this.config.objects.get(t);if(!s)throw new Error(`Object config not found: ${t}`);let a=new mt(t,s.object_config||t,n,s);return this.objects.set(t,a),a}get(t){return this.objects.get(t)}updateConfig(t){this.config=t;for(let[n,s]of this.objects.entries()){let a=t.objects.get(n);a&&s.updateConfig(a)}}getAll(){return Array.from(this.objects.values())}remove(t){this.objects.delete(t)}clear(){this.objects.clear()}};var dt={"brand.primary":{family:"Arial, sans-serif",weight:"400"},"brand.warning":{family:"Arial Black, Arial, sans-serif",weight:"900"},"brand.heading":{family:"Arial Black, Arial, sans-serif",weight:"800"},"brand.body":{family:"Arial, sans-serif",weight:"400"}};function Y(e){let t=dt[e];return t?t.family:(console.warn(`Font ID "${e}" not found in registry, using fallback`),"Arial, sans-serif")}function N(e){var n;let t=dt[e];return t&&(n=t.weight)!=null?n:"400"}function kn(e,t){dt[e]=t}function zn(){return Object.keys(dt)}import*as U from"three";function Q(e){return{element:e,get alpha(){return parseFloat(e.style.opacity||"1")},set alpha(t){e.style.opacity=t.toString()},get visible(){return e.style.display!=="none"},set visible(t){e.style.display=t?"":"none"},position:{set(t,n){e.style.left=`${t}px`,e.style.top=`${n}px`},get x(){return parseFloat(e.style.left||"0")},get y(){return parseFloat(e.style.top||"0")}},scale:{set(t,n){e.style.transform=`scale(${t})`},get x(){let t=e.style.transform.match(/scale\(([^)]+)\)/);return t?parseFloat(t[1]):1}}}}function Bn(e,t,n,s){var kt,zt,Bt,Pt,Yt,Nt,Gt,Xt,qt,Vt,Zt,Jt,Kt,Qt,jt,Ot,It,Ut,te,ee,ne,ae,se,ie,oe,re,le,ce,pe,me,de,ue,he,ye,fe,ge,be,Te,xe,Ee,_e,we,Se,He,Ce,ve,Re,Fe,Me,Ae,$e,Le,We,De,ke,ze,Be,Pe,Ye,Ne,Ge,Xe;let a=e.objects.get("ui_endgame_1"),i=e.objects.get("ui_endgame_logo_1"),o=e.objects.get("ui_endgame_title_1"),p=e.objects.get("ui_endgame_subtitle_1"),r=e.objects.get("ui_endgame_footer_1"),y=e.objects.get("ui_endgame_cta_1"),c=e.objects.get("ui_endgame_cta_hint_1"),u=e.objects.get("ui_endgame_hand_1"),l=e.engine.runtime||{},m=((kt=a==null?void 0:a.gameplay)==null?void 0:kt.tuning)||{},b=(a==null?void 0:a.render)||{},x=(zt=m.panel_width)!=null?zt:320,d=(Bt=m.panel_height)!=null?Bt:400,g=(Pt=m.panel_padding)!=null?Pt:32,h=(Yt=m.panel_radius)!=null?Yt:24,f=b.background_color||m.panel_bg_color||"#1a0a0a",E=b.background_alpha!==void 0&&b.background_alpha!==null?b.background_alpha:(Nt=m.panel_bg_alpha)!=null?Nt:.98,w=b.border_color||m.panel_border_color||"#ffffff",S=(Gt=m.panel_border_width)!=null?Gt:2,H=(Xt=m.panel_border_alpha)!=null?Xt:.3,_=document.createElement("div");_.style.cssText=`
21
+ overflow: hidden !important;
22
+ `,e.appendChild(r);let m=document.createElement("div");m.setAttribute("style",["position:absolute","inset:0","width:100%","height:100%","min-width:100%","min-height:100%","max-width:100%","max-height:100%","pointer-events:auto","box-sizing:border-box","margin:0","padding:0","overflow:hidden"].join(";")),r.appendChild(m);let l=new I.Scene,{width:y,height:p}=n(),u=new I.PerspectiveCamera(55,y/p,.1,100);u.position.set(0,0,3.2),u.lookAt(0,0,0),u.updateMatrixWorld();let o=new I.WebGLRenderer({antialias:!0,alpha:!0,preserveDrawingBuffer:!0});o.setPixelRatio(window.devicePixelRatio||1),o.setSize(y,p),o.setClearColor(0,0),o.domElement.style.position="absolute",o.domElement.style.top="0",o.domElement.style.left="0",o.domElement.style.right="0",o.domElement.style.bottom="0",o.domElement.style.width="100%",o.domElement.style.height="100%",o.domElement.style.minWidth="100%",o.domElement.style.minHeight="100%",o.domElement.style.maxWidth="100%",o.domElement.style.maxHeight="100%",o.domElement.style.display="block",o.domElement.style.pointerEvents="auto",o.domElement.style.margin="0",o.domElement.style.padding="0",o.domElement.style.boxSizing="border-box",m.appendChild(o.domElement);let d=c=>{let h=e.getBoundingClientRect(),f=h.width,b=h.height;(f<=0||!isFinite(f))&&(f=e.clientWidth||window.innerWidth||320),(b<=0||!isFinite(b))&&(b=e.clientHeight||window.innerHeight||480),typeof(c==null?void 0:c.width)=="number"&&c.width>0&&(Math.abs(c.width-h.width)>1&&console.warn("[THREE-BASE] Provided width differs from container:",{provided:c.width,container:h.width}),f=c.width),typeof(c==null?void 0:c.height)=="number"&&c.height>0&&(Math.abs(c.height-h.height)>1&&console.warn("[THREE-BASE] Provided height differs from container:",{provided:c.height,container:h.height}),b=c.height),(f<=0||b<=0||!isFinite(f)||!isFinite(b))&&(console.warn("[THREE-BASE] Invalid size in applySize, using fallback",{newWidth:f,newHeight:b,size:c,rootRect:h}),f=h.width||e.clientWidth||320,b=h.height||e.clientHeight||480),console.log("[THREE-BASE] applySize:",{newWidth:f,newHeight:b,rootRect:{width:h.width,height:h.height},clientSize:{width:e.clientWidth,height:e.clientHeight},providedSize:c});let x=Math.floor(f),E=Math.floor(b);o.setSize(x,E),o.setPixelRatio(window.devicePixelRatio||1),u.aspect=x/E,u.updateProjectionMatrix()};requestAnimationFrame(()=>{requestAnimationFrame(()=>{d()})});let g=!1;pt.on("pause",()=>{g=!0,document.querySelectorAll("audio").forEach(h=>h.pause())}),pt.on("resume",()=>{g=!1,document.querySelectorAll("audio").forEach(h=>{h.currentTime>0&&!h.ended&&h.play().catch(()=>{})})});let T=new nt(e,r);return pt.on("resize",({payload:c})=>{d({width:c==null?void 0:c.width,height:c==null?void 0:c.height}),T.updateLayout()}),window.addEventListener("resize",()=>{d(),T.updateLayout()}),{scene:l,camera:u,renderer:o,uiSystem:T,applySize:d}}import*as w from"three";var mt=class{constructor(t){var n,s;this.position=(t==null?void 0:t.position)||{x:0,y:0},this.scale=(n=t==null?void 0:t.scale)!=null?n:1,this.rotation=(s=t==null?void 0:t.rotation)!=null?s:0}update(t){t.position!==void 0&&(this.position={...t.position}),t.scale!==void 0&&(this.scale=t.scale),t.rotation!==void 0&&(this.rotation=t.rotation)}syncToThree(t){let n=t.position.z,s=n===0||!isFinite(n)?.5:n;t.position.set(this.position.x,this.position.y,s),t.scale.set(this.scale,this.scale,this.scale),t.rotation.z=this.rotation}},dt=class{constructor(t){var n,s,a,i;this.z_index=(n=t==null?void 0:t.z_index)!=null?n:0,this.alpha=(s=t==null?void 0:t.alpha)!=null?s:1,this.visible=(a=t==null?void 0:t.visible)!=null?a:!0,this.tint=(i=t==null?void 0:t.tint)!=null?i:null}update(t){t.z_index!==void 0&&(this.z_index=t.z_index),t.alpha!==void 0&&(this.alpha=t.alpha),t.visible!==void 0&&(this.visible=t.visible),t.tint!==void 0&&(this.tint=t.tint)}syncToThree(t){if(t.renderOrder=this.z_index,t.visible=this.visible,t instanceof w.Mesh&&t.material&&(Array.isArray(t.material)?t.material.forEach(n=>{n instanceof w.Material&&(n.opacity=this.alpha,n.transparent=this.alpha<1)}):t.material instanceof w.Material&&(t.material.opacity=this.alpha,t.material.transparent=this.alpha<1)),this.tint!==null&&t instanceof w.Mesh&&t.material){let n=typeof this.tint=="string"?new w.Color(this.tint):new w.Color(this.tint);Array.isArray(t.material)?t.material.forEach(s=>{(s instanceof w.MeshBasicMaterial||s instanceof w.MeshStandardMaterial)&&s.color.copy(n)}):(t.material instanceof w.MeshBasicMaterial||t.material instanceof w.MeshStandardMaterial)&&t.material.color.copy(n)}}},ht=class{constructor(t,n,s,a){this.instanceId=t,this.objectConfig=n,this.threeObject=s,this._config=a,this.transform=new mt(a.transform),this.renderer=new dt(a.render),this.sync()}sync(){this.transform.syncToThree(this.threeObject),this.renderer.syncToThree(this.threeObject)}updateConfig(t){this._config=t,t.transform&&this.transform.update(t.transform),t.render&&this.renderer.update(t.render),this.sync()}getComponent(t){return this._config[t]}getPosition(){return{...this.transform.position}}setPosition(t,n){this.transform.position={x:t,y:n},this.transform.syncToThree(this.threeObject)}getAlpha(){return this.renderer.alpha}setAlpha(t){this.renderer.alpha=t,this.renderer.syncToThree(this.threeObject)}getVisible(){return this.renderer.visible}setVisible(t){this.renderer.visible=t,this.renderer.syncToThree(this.threeObject)}},Ht=class{constructor(t){this.objects=new Map;this.config=t}create(t,n){let s=this.config.objects.get(t);if(!s)throw new Error(`Object config not found: ${t}`);let a=new ht(t,s.object_config||t,n,s);return this.objects.set(t,a),a}get(t){return this.objects.get(t)}updateConfig(t){this.config=t;for(let[n,s]of this.objects.entries()){let a=t.objects.get(n);a&&s.updateConfig(a)}}getAll(){return Array.from(this.objects.values())}remove(t){this.objects.delete(t)}clear(){this.objects.clear()}};var ut={"brand.primary":{family:"Arial, sans-serif",weight:"400"},"brand.warning":{family:"Arial Black, Arial, sans-serif",weight:"900"},"brand.heading":{family:"Arial Black, Arial, sans-serif",weight:"800"},"brand.body":{family:"Arial, sans-serif",weight:"400"}};function N(e){let t=ut[e];return t?t.family:(console.warn(`Font ID "${e}" not found in registry, using fallback`),"Arial, sans-serif")}function G(e){var n;let t=ut[e];return t&&(n=t.weight)!=null?n:"400"}function zn(e,t){ut[e]=t}function Yn(){return Object.keys(ut)}import*as U from"three";function Q(e){return{element:e,get alpha(){return parseFloat(e.style.opacity||"1")},set alpha(t){e.style.opacity=t.toString()},get visible(){return e.style.display!=="none"},set visible(t){e.style.display=t?"":"none"},position:{set(t,n){e.style.left=`${t}px`,e.style.top=`${n}px`},get x(){return parseFloat(e.style.left||"0")},get y(){return parseFloat(e.style.top||"0")}},scale:{set(t,n){e.style.transform=`scale(${t})`},get x(){let t=e.style.transform.match(/scale\(([^)]+)\)/);return t?parseFloat(t[1]):1}}}}function Nn(e,t,n,s){var Yt,Nt,Gt,Xt,qt,Vt,Zt,Jt,Kt,Qt,jt,Ot,It,Ut,te,ee,ne,ae,se,ie,oe,re,le,ce,pe,me,de,he,ue,ye,fe,ge,be,Te,xe,Ee,_e,we,He,Se,ve,Ce,Re,Me,Fe,Ae,$e,Le,We,ke,De,Be,Pe,ze,Ye,Ne,Ge,Xe,qe,Ve,Ze,Je;let a=e.objects.get("ui_endgame_1"),i=e.objects.get("ui_endgame_logo_1"),r=e.objects.get("ui_endgame_title_1"),m=e.objects.get("ui_endgame_subtitle_1"),l=e.objects.get("ui_endgame_footer_1"),y=e.objects.get("ui_endgame_cta_1"),p=e.objects.get("ui_endgame_cta_hint_1"),u=e.objects.get("ui_endgame_hand_1"),o=e.engine.runtime||{},d=((Yt=a==null?void 0:a.gameplay)==null?void 0:Yt.tuning)||{},g=(a==null?void 0:a.render)||{},T=s.getBoundingClientRect(),c=T.width>0?T.width*.9:320,h=T.height>0?T.height*.85:400,f=Math.min((Nt=d.panel_width)!=null?Nt:320,c),b=Math.min((Gt=d.panel_height)!=null?Gt:400,h),x=(Xt=d.panel_padding)!=null?Xt:32,E=(qt=d.panel_radius)!=null?qt:24,S=g.background_color||d.panel_bg_color||"#1a0a0a",A=g.background_alpha!==void 0&&g.background_alpha!==null?g.background_alpha:(Vt=d.panel_bg_alpha)!=null?Vt:.98,$=g.border_color||d.panel_border_color||"#ffffff",X=(Zt=d.panel_border_width)!=null?Zt:2,v=(Jt=d.panel_border_alpha)!=null?Jt:.3,_=document.createElement("div");_.style.cssText=`
25
23
  position: absolute;
26
- width: ${x}px;
27
- height: ${d}px;
28
- background: ${f};
29
- opacity: ${E};
30
- border: ${S}px solid ${w};
31
- border-opacity: ${H};
32
- border-radius: ${h}px;
33
- display: flex;
34
- flex-direction: column;
35
- align-items: center;
36
- justify-content: center;
24
+ width: ${f}px;
25
+ height: ${b}px;
26
+ background: ${S};
27
+ opacity: ${A};
28
+ border: ${X}px solid ${$};
29
+ border-opacity: ${v};
30
+ border-radius: ${E}px;
31
+ display: block;
37
32
  transform: translate(-50%, -50%);
38
33
  opacity: 0;
39
34
  visibility: hidden;
@@ -41,74 +36,76 @@ import{b as lt}from"../chunk-LQX44TET.mjs";import*as I from"three";var qe=(s=>(s
41
36
  left: 50%;
42
37
  top: 50%;
43
38
  z-index: 1000;
44
- `,s.appendChild(_);let T=Q(_);T.element=_;let R=((qt=i==null?void 0:i.gameplay)==null?void 0:qt.tuning)||{},k=(i==null?void 0:i.transform)||{},M=(Vt=R.logo_size)!=null?Vt:56,D=(Zt=k.scale)!=null?Zt:1,j=(Kt=(Jt=k.offset)==null?void 0:Jt.y)!=null?Kt:-130,X=(Qt=R.logo_alpha)!=null?Qt:1,G=new U.SpriteMaterial({map:n||void 0,transparent:!0,alphaTest:.1}),C=new U.Sprite(G);C.position.set(0,j,0),C.material.opacity=0;let q=0,at=0;if(n&&(q=((jt=n.image)==null?void 0:jt.width)||100,at=((Ot=n.image)==null?void 0:Ot.height)||100),q>0&&at>0){let O=q/at,Tt,xt;O>1?(Tt=M,xt=M/O):(xt=M,Tt=M*O);let Ln=Tt/q*D,Wn=xt/at*D;C.scale.set(Ln,Wn,1)}else{let O=M/100*D;C.scale.set(O,O,1)}C.targetAlpha=X,C.baseScaleX=C.scale.x,C.baseScaleY=C.scale.y;let A=o==null?void 0:o.ui,z=((It=o==null?void 0:o.gameplay)==null?void 0:It.tuning)||{},Je=(A==null?void 0:A.text)||"MISSION ACCOMPLISHED",wt=(A==null?void 0:A.font)||"brand.heading",Ke=(A==null?void 0:A.fontSize)||24,Qe=(Ut=A==null?void 0:A.letterSpacing)!=null?Ut:1,st=(te=o==null?void 0:o.render)==null?void 0:te.tint,je=typeof st=="string"?st:st?`#${st.toString(16).padStart(6,"0")}`:"#00FF88",Oe=x-g*2-30,Ie=z.font_weight_override?z.font_weight_override:N(wt),V=document.createElement("div");V.textContent=Je,V.style.cssText=`
45
- font-family: ${Y(wt)};
46
- font-size: ${Ke}px;
47
- font-weight: ${Ie};
48
- color: ${je};
39
+ box-sizing: border-box;
40
+ padding: ${x}px;
41
+ `,s.appendChild(_);let B=Q(_);B.element=_;let W=((Kt=i==null?void 0:i.gameplay)==null?void 0:Kt.tuning)||{},q=(i==null?void 0:i.transform)||{},L=(Qt=W.logo_size)!=null?Qt:56,k=(jt=q.scale)!=null?jt:1,j=(It=(Ot=q.offset)==null?void 0:Ot.y)!=null?It:-130,at=(Ut=W.logo_alpha)!=null?Ut:1,Oe=new U.SpriteMaterial({map:n||void 0,transparent:!0,alphaTest:.1}),D=new U.Sprite(Oe);D.position.set(0,j,0),D.material.opacity=0;let st=0,it=0;if(n&&(st=((te=n.image)==null?void 0:te.width)||100,it=((ee=n.image)==null?void 0:ee.height)||100),st>0&&it>0){let O=st/it,Et,_t;O>1?(Et=L,_t=L/O):(_t=L,Et=L*O);let Dn=Et/st*k,Bn=_t/it*k;D.scale.set(Dn,Bn,1)}else{let O=L/100*k;D.scale.set(O,O,1)}D.targetAlpha=at,D.baseScaleX=D.scale.x,D.baseScaleY=D.scale.y;let C=r==null?void 0:r.ui,P=((ne=r==null?void 0:r.gameplay)==null?void 0:ne.tuning)||{},Ie=(C==null?void 0:C.text)||"MISSION ACCOMPLISHED",St=(C==null?void 0:C.font)||"brand.heading",vt=(C==null?void 0:C.fontSize)||24,Ue=(ae=C==null?void 0:C.letterSpacing)!=null?ae:1,ot=(se=r==null?void 0:r.render)==null?void 0:se.tint,tn=typeof ot=="string"?ot:ot?`#${ot.toString(16).padStart(6,"0")}`:"#00FF88",en=f-x*2-30,nn=P.font_weight_override?P.font_weight_override:G(St),V=document.createElement("div");V.textContent=Ie,V.style.cssText=`
42
+ font-family: ${N(St)};
43
+ font-size: ${vt}px;
44
+ font-weight: ${nn};
45
+ color: ${tn};
49
46
  text-align: center;
50
- letter-spacing: ${Qe}px;
51
- -webkit-text-stroke: ${(ee=z.stroke_width)!=null?ee:2}px ${z.stroke_color||"#000000"};
52
- text-shadow: ${(ne=z.shadow_distance)!=null?ne:4}px ${(ae=z.shadow_distance)!=null?ae:4}px ${(se=z.shadow_blur)!=null?se:8}px rgba(0,0,0,${(ie=z.shadow_alpha)!=null?ie:.9});
47
+ letter-spacing: ${Ue}px;
48
+ -webkit-text-stroke: ${(ie=P.stroke_width)!=null?ie:2}px ${P.stroke_color||"#000000"};
49
+ text-shadow: ${(oe=P.shadow_distance)!=null?oe:4}px ${(re=P.shadow_distance)!=null?re:4}px ${(le=P.shadow_blur)!=null?le:8}px rgba(0,0,0,${(ce=P.shadow_alpha)!=null?ce:.9});
53
50
  opacity: 0;
54
51
  position: absolute;
55
52
  transform: translate(-50%, -50%);
56
53
  white-space: nowrap;
57
- max-width: ${Oe}px;
58
- `;let St=(oe=m.title_offset_y)!=null?oe:30,Ue=St+((re=z.animation_start_y_offset)!=null?re:-20);V.style.top=`${Ue}px`,V.style.left="50%";let Ht=Q(V);Ht.element=V,_.appendChild(V);let $=p==null?void 0:p.ui,Ct=((le=p==null?void 0:p.gameplay)==null?void 0:le.tuning)||{},tn=($==null?void 0:$.text)||"RESCUE COMPLETE",vt=($==null?void 0:$.font)||"brand.body",en=($==null?void 0:$.fontSize)||11,nn=(ce=$==null?void 0:$.letterSpacing)!=null?ce:.5,it=(pe=p==null?void 0:p.render)==null?void 0:pe.tint,an=typeof it=="string"?it:it?`#${it.toString(16).padStart(6,"0")}`:"#B0B0B0",Z=document.createElement("div");Z.textContent=tn,Z.style.cssText=`
59
- font-family: ${Y(vt)};
60
- font-size: ${en}px;
61
- font-weight: ${N(vt)};
62
- color: ${an};
54
+ max-width: ${en}px;
55
+ `;let Ct=(pe=d.title_offset_y)!=null?pe:b*.25,an=Ct+((me=P.animation_start_y_offset)!=null?me:-20);V.style.top=`${an}px`,V.style.left="50%";let Rt=Q(V);Rt.element=V,_.appendChild(V);let R=m==null?void 0:m.ui,Mt=((de=m==null?void 0:m.gameplay)==null?void 0:de.tuning)||{},sn=(R==null?void 0:R.text)||"RESCUE COMPLETE",Ft=(R==null?void 0:R.font)||"brand.body",on=(R==null?void 0:R.fontSize)||11,rn=(he=R==null?void 0:R.letterSpacing)!=null?he:.5,rt=(ue=m==null?void 0:m.render)==null?void 0:ue.tint,ln=typeof rt=="string"?rt:rt?`#${rt.toString(16).padStart(6,"0")}`:"#B0B0B0",Z=document.createElement("div");Z.textContent=sn,Z.style.cssText=`
56
+ font-family: ${N(Ft)};
57
+ font-size: ${on}px;
58
+ font-weight: ${G(Ft)};
59
+ color: ${ln};
63
60
  text-align: center;
64
- letter-spacing: ${nn}px;
61
+ letter-spacing: ${rn}px;
65
62
  opacity: 0;
66
63
  position: absolute;
67
64
  transform: translate(-50%, -50%);
68
65
  white-space: nowrap;
69
- `;let sn=St+20+((me=Ct.animation_start_y_offset)!=null?me:-10);Z.style.top=`${sn}px`,Z.style.left="50%";let ht=Q(Z);ht.element=Z,ht.animationStartYOffset=(de=Ct.animation_start_y_offset)!=null?de:-10,_.appendChild(Z);let B=r==null?void 0:r.ui,Rt=((ue=r==null?void 0:r.gameplay)==null?void 0:ue.tuning)||{},on=(B==null?void 0:B.text)||((he=l.ui)==null?void 0:he.cta_hint)||"Continue the adventure!",Ft=(B==null?void 0:B.font)||"brand.body",rn=(B==null?void 0:B.fontSize)||16,ot=(ye=r==null?void 0:r.render)==null?void 0:ye.tint,ln=typeof ot=="string"?ot:ot?`#${ot.toString(16).padStart(6,"0")}`:"#FFFFFF",cn=(fe=Rt.max_width)!=null?fe:x-g*2,pn=(ge=Rt.line_height)!=null?ge:1.4,J=document.createElement("div");J.textContent=on,J.style.cssText=`
70
- font-family: ${Y(Ft)};
71
- font-size: ${rn}px;
72
- font-weight: ${N(Ft)};
73
- color: ${ln};
66
+ `;let cn=Ct+vt*2.5+((ye=Mt.animation_start_y_offset)!=null?ye:-10);Z.style.top=`${cn}px`,Z.style.left="50%";let ft=Q(Z);ft.element=Z,ft.animationStartYOffset=(fe=Mt.animation_start_y_offset)!=null?fe:-10,_.appendChild(Z);let z=l==null?void 0:l.ui,At=((ge=l==null?void 0:l.gameplay)==null?void 0:ge.tuning)||{},pn=(z==null?void 0:z.text)||((be=o.ui)==null?void 0:be.cta_hint)||"Continue the adventure!",$t=(z==null?void 0:z.font)||"brand.body",mn=(z==null?void 0:z.fontSize)||16,lt=(Te=l==null?void 0:l.render)==null?void 0:Te.tint,dn=typeof lt=="string"?lt:lt?`#${lt.toString(16).padStart(6,"0")}`:"#FFFFFF",hn=(xe=At.max_width)!=null?xe:f-x*2,un=(Ee=At.line_height)!=null?Ee:1.4,J=document.createElement("div");J.textContent=pn,J.style.cssText=`
67
+ font-family: ${N($t)};
68
+ font-size: ${mn}px;
69
+ font-weight: ${G($t)};
70
+ color: ${dn};
74
71
  text-align: center;
75
72
  opacity: 0;
76
73
  position: absolute;
77
74
  transform: translate(-50%, -50%);
78
- max-width: ${cn}px;
79
- line-height: ${pn};
75
+ max-width: ${hn}px;
76
+ line-height: ${un};
80
77
  word-wrap: break-word;
81
- `;let mn=(be=m.footer_offset_y)!=null?be:120;J.style.top=`${mn}px`,J.style.left="50%";let yt=Q(J);yt.element=J;let dn=((Te=r==null?void 0:r.render)==null?void 0:Te.alpha)!==void 0&&((xe=r==null?void 0:r.render)==null?void 0:xe.alpha)!==null?r.render.alpha:1;yt.targetAlpha=dn,_.appendChild(J);let P=((Ee=y==null?void 0:y.gameplay)==null?void 0:Ee.tuning)||{},L=y==null?void 0:y.ui,un=(_e=P.button_width)!=null?_e:260,hn=(we=P.button_height)!=null?we:56,yn=(Se=P.button_radius)!=null?Se:16,fn=P.button_bg_color||((He=l.theme)==null?void 0:He.cta_background)||"#ffb43b",gn=(Ce=P.button_bg_alpha)!=null?Ce:1,bn=P.button_border_color||"#ffffff",Tn=(ve=P.button_border_width)!=null?ve:2,Un=(Re=P.button_border_alpha)!=null?Re:.2,ft=(Fe=m.cta_offset_y)!=null?Fe:160,F=document.createElement("button");F.style.cssText=`
82
- width: ${un}px;
83
- height: ${hn}px;
84
- background: ${fn};
85
- opacity: ${gn};
86
- border: ${Tn}px solid ${bn};
87
- border-radius: ${yn}px;
78
+ `;let yn=(_e=d.footer_offset_y)!=null?_e:b*.5;J.style.top=`${yn}px`,J.style.left="50%";let gt=Q(J);gt.element=J;let fn=((we=l==null?void 0:l.render)==null?void 0:we.alpha)!==void 0&&((He=l==null?void 0:l.render)==null?void 0:He.alpha)!==null?l.render.alpha:1;gt.targetAlpha=fn,_.appendChild(J);let Y=((Se=y==null?void 0:y.gameplay)==null?void 0:Se.tuning)||{},M=y==null?void 0:y.ui,gn=(ve=Y.button_width)!=null?ve:260,Lt=(Ce=Y.button_height)!=null?Ce:56,bn=(Re=Y.button_radius)!=null?Re:16,Tn=Y.button_bg_color||((Me=o.theme)==null?void 0:Me.cta_background)||"#ffb43b",xn=(Fe=Y.button_bg_alpha)!=null?Fe:1,En=Y.button_border_color||"#ffffff",_n=(Ae=Y.button_border_width)!=null?Ae:2,na=($e=Y.button_border_alpha)!=null?$e:.2,bt=(Le=d.cta_offset_y)!=null?Le:b*.75,H=document.createElement("button");H.style.cssText=`
79
+ width: ${gn}px;
80
+ height: ${Lt}px;
81
+ background: ${Tn};
82
+ opacity: ${xn};
83
+ border: ${_n}px solid ${En};
84
+ border-radius: ${bn}px;
88
85
  cursor: pointer;
89
86
  opacity: 0;
90
87
  position: absolute;
91
88
  transform: translate(-50%, -50%);
92
89
  box-shadow: inset 0 0 1px rgba(0,0,0,0.15);
93
- `,F.style.top=`${ft}px`,F.style.left="50%";let Mt=Q(F);Mt.element=F,_.appendChild(F);let xn=(L==null?void 0:L.text)||((Me=l.ui)==null?void 0:Me.cta_label_end)||"DOWNLOAD",At=(L==null?void 0:L.font)||"brand.heading",En=(L==null?void 0:L.fontSize)||20,_n=P.button_text_color||((Ae=l.theme)==null?void 0:Ae.cta_text)||"#1a0a0a";F.textContent=xn,F.style.fontFamily=Y(At),F.style.fontSize=`${En}px`,F.style.fontWeight=String(N(At)),F.style.color=_n,F.style.letterSpacing=`${($e=L==null?void 0:L.letterSpacing)!=null?$e:1}px`;let $t=Q(F);$t.element=F;let W=c==null?void 0:c.ui,Lt=((Le=c==null?void 0:c.gameplay)==null?void 0:Le.tuning)||{},wn=(W==null?void 0:W.text)||"Play the full game",Wt=(W==null?void 0:W.font)||"brand.body",Sn=(W==null?void 0:W.fontSize)||11,Hn=(We=W==null?void 0:W.letterSpacing)!=null?We:0,rt=(De=c==null?void 0:c.render)==null?void 0:De.tint,Cn=typeof rt=="string"?rt:rt?`#${rt.toString(16).padStart(6,"0")}`:"#CCCCCC",K=document.createElement("div");K.textContent=wn,K.style.cssText=`
94
- font-family: ${Y(Wt)};
95
- font-size: ${Sn}px;
96
- font-weight: ${N(Wt)};
97
- color: ${Cn};
90
+ `,H.style.top=`${bt}px`,H.style.left="50%";let Wt=Q(H);Wt.element=H,_.appendChild(H);let wn=(M==null?void 0:M.text)||((We=o.ui)==null?void 0:We.cta_label_end)||"DOWNLOAD",kt=(M==null?void 0:M.font)||"brand.heading",Hn=(M==null?void 0:M.fontSize)||20,Sn=Y.button_text_color||((ke=o.theme)==null?void 0:ke.cta_text)||"#1a0a0a";H.textContent=wn,H.style.fontFamily=N(kt),H.style.fontSize=`${Hn}px`,H.style.fontWeight=String(G(kt)),H.style.color=Sn,H.style.letterSpacing=`${(De=M==null?void 0:M.letterSpacing)!=null?De:1}px`;let Dt=Q(H);Dt.element=H;let F=p==null?void 0:p.ui,Bt=((Be=p==null?void 0:p.gameplay)==null?void 0:Be.tuning)||{},vn=(F==null?void 0:F.text)||"Play the full game",Pt=(F==null?void 0:F.font)||"brand.body",Cn=(F==null?void 0:F.fontSize)||11,Rn=(Pe=F==null?void 0:F.letterSpacing)!=null?Pe:0,ct=(ze=p==null?void 0:p.render)==null?void 0:ze.tint,Mn=typeof ct=="string"?ct:ct?`#${ct.toString(16).padStart(6,"0")}`:"#CCCCCC",K=document.createElement("div");K.textContent=vn,K.style.cssText=`
91
+ font-family: ${N(Pt)};
92
+ font-size: ${Cn}px;
93
+ font-weight: ${G(Pt)};
94
+ color: ${Mn};
98
95
  text-align: center;
99
- letter-spacing: ${Hn}px;
96
+ letter-spacing: ${Rn}px;
100
97
  opacity: 0;
101
98
  position: absolute;
102
99
  transform: translate(-50%, -50%);
103
100
  white-space: nowrap;
104
- `;let vn=ft+35+((ke=Lt.animation_start_y_offset)!=null?ke:5);K.style.top=`${vn}px`,K.style.left="50%";let gt=Q(K);gt.element=K,gt.animationStartYOffset=(ze=Lt.animation_start_y_offset)!=null?ze:5,_.appendChild(K);let bt=((Be=u==null?void 0:u.gameplay)==null?void 0:Be.tuning)||{},Rn=(Pe=bt.hand_offset_x)!=null?Pe:50,Fn=(Ye=bt.hand_offset_y)!=null?Ye:50,Mn=(Ge=(Ne=u==null?void 0:u.transform)==null?void 0:Ne.scale)!=null?Ge:.1875,An=(Xe=bt.hand_scale_multiplier)!=null?Xe:2.5,$n=new U.SpriteMaterial({map:t||void 0,transparent:!0,alphaTest:.1}),et=new U.Sprite($n),Dt=Mn*An*100;return et.scale.set(Dt,Dt,1),et.position.set(Rn,ft+Fn,0),et.material.opacity=0,et.visible=!1,{panel:T,logo:C,title:Ht,subtitle:ht,footer:yt,ctaButton:Mt,ctaText:$t,ctaHint:gt,hand:et}}function Pn(e,t,n){var S,H,_,T,R,k,M,D;let s=t.objects.get("ui_endgame_1"),a=((S=s==null?void 0:s.gameplay)==null?void 0:S.tuning)||{},i=(H=a.animation_duration_ms)!=null?H:800,o=(_=a.fade_in_duration_ms)!=null?_:600,p=(T=a.scale_animation_intensity)!=null?T:.1,r=(R=a.logo_animation_delay_ms)!=null?R:100,y=(k=a.title_animation_delay_ms)!=null?k:200,c=(M=a.footer_animation_delay_ms)!=null?M:300,u=(D=a.cta_animation_delay_ms)!=null?D:400,{panel:l,logo:m,title:b,subtitle:x,footer:d,ctaButton:g,ctaText:h,ctaHint:f}=e;l.visible=!0,l.element.style.visibility="visible";let E=Date.now(),w=()=>{let j=Date.now()-E,X=Math.min(j/o,1),G=1-Math.pow(1-X,3);l.alpha=G,l.element.style.opacity=G.toString();let C=1+p*(1-G);l.element.style.transform=`translate(-50%, -50%) scale(${C})`,X<1?requestAnimationFrame(w):(setTimeout(()=>Yn(m,i,t),r),setTimeout(()=>{Nn(b,i),setTimeout(()=>Gn(x,i),50)},y),setTimeout(()=>Xn(d,i),c),setTimeout(()=>{qn(g,h,i),setTimeout(()=>Vn(f,i),50),n&&n()},u))};w()}function Yn(e,t,n){var l,m,b,x,d;let s=n==null?void 0:n.objects.get("ui_endgame_logo_1"),i=(m=(((l=s==null?void 0:s.gameplay)==null?void 0:l.tuning)||{}).animation_start_scale)!=null?m:1.2,o=Date.now(),p=e.material.opacity,r=(b=e.targetAlpha)!=null?b:1,y=(x=e.baseScaleX)!=null?x:e.scale.x,c=(d=e.baseScaleY)!=null?d:e.scale.y,u=()=>{let g=Date.now()-o,h=Math.min(g/t,1),f=1-Math.pow(1-h,2);e.material.opacity=p+(r-p)*f;let E=i+(1-i)*f;e.scale.set(y*E,c*E,1),h<1&&requestAnimationFrame(u)};u()}function Nn(e,t){let n=Date.now(),s=parseFloat(e.element.style.opacity||"0"),a=parseFloat(e.element.style.top||"0"),i=()=>{let o=Date.now()-n,p=Math.min(o/t,1),r=1-Math.pow(1-p,2);e.element.style.opacity=(s+(1-s)*r).toString(),e.element.style.top=`${a-20*(1-r)}px`,p<1&&requestAnimationFrame(i)};i()}function Gn(e,t){var p;let n=Date.now(),s=parseFloat(e.element.style.opacity||"0"),a=parseFloat(e.element.style.top||"0"),i=a-((p=e.animationStartYOffset)!=null?p:-10),o=()=>{let r=Date.now()-n,y=Math.min(r/t,1),c=1-Math.pow(1-y,2);e.element.style.opacity=(s+(1-s)*c).toString(),e.element.style.top=`${a+(i-a)*c}px`,y<1&&requestAnimationFrame(o)};o()}function Xn(e,t){var o;let n=Date.now(),s=parseFloat(e.element.style.opacity||"0"),a=(o=e.targetAlpha)!=null?o:1,i=()=>{let p=Date.now()-n,r=Math.min(p/t,1),y=1-Math.pow(1-r,2);e.element.style.opacity=(s+(a-s)*y).toString(),r<1&&requestAnimationFrame(i)};i()}function qn(e,t,n){let s=Date.now(),a=parseFloat(e.element.style.opacity||"0"),i=()=>{let o=Date.now()-s,p=Math.min(o/n,1),r=1-Math.pow(1-p,2);e.element.style.opacity=(a+(1-a)*r).toString(),t.element.style.opacity=(a+(1-a)*r).toString(),e.element.style.transform=`translate(-50%, -50%) scale(${1+.1*(1-r)})`,p<1&&requestAnimationFrame(i)};i()}function Vn(e,t){var p;let n=Date.now(),s=parseFloat(e.element.style.opacity||"0"),a=parseFloat(e.element.style.top||"0"),i=a-((p=e.animationStartYOffset)!=null?p:5),o=()=>{let r=Date.now()-n,y=Math.min(r/t,1),c=1-Math.pow(1-y,2);e.element.style.opacity=(s+(1-s)*c).toString(),e.element.style.top=`${a+(i-a)*c}px`,y<1&&requestAnimationFrame(o)};o()}function Zn(e,t,n,s){var c,u,l,m;let a=n.objects.get("ui_endgame_hand_1"),i=((c=a==null?void 0:a.gameplay)==null?void 0:c.tuning)||{},o=(u=i.click_animation_duration_ms)!=null?u:600,p=(l=i.click_delay_ms)!=null?l:2e3,r=(m=i.click_repeat_delay_ms)!=null?m:3e3,y=()=>{var H,_;e.visible=!0,e.material.opacity=1;let b=e.position.x,x=e.position.y,d=(H=i.hand_offset_x)!=null?H:50,g=(_=i.hand_offset_y)!=null?_:50,h=t.element.getBoundingClientRect(),f=d,E=g,w=Date.now(),S=()=>{var G,C,q;let T=Date.now()-w,R=Math.min(T/o,1),k=R<.5?2*R*R:1-Math.pow(-2*R+2,2)/2;e.position.set(b+(f-b)*k,x+(E-x)*k,0);let M=(C=(G=a==null?void 0:a.transform)==null?void 0:G.scale)!=null?C:.1875,D=(q=i.hand_scale_multiplier)!=null?q:2.5,j=M*D*100,X=j+j*.2*Math.sin(R*Math.PI);e.scale.set(X,X,1),R<1?requestAnimationFrame(S):(t.element.style.transform="translate(-50%, -50%) scale(0.95)",setTimeout(()=>{t.element.style.transform="translate(-50%, -50%) scale(1)",s()},100),setTimeout(()=>{e.material.opacity=0,setTimeout(()=>{e.position.set(b,x,0),y()},r)},500))};S()};setTimeout(y,p)}import*as ut from"three";function Jn(e,t,n){var u,l,m,b;let s=t.objects.get("hand_tutorial_1"),a=((u=s==null?void 0:s.gameplay)==null?void 0:u.tuning)||{},i=(s==null?void 0:s.render)||{},o=(s==null?void 0:s.transform)||{},p=new ut.SpriteMaterial({map:e||void 0,transparent:!0,alphaTest:.1}),r=new ut.Sprite(p);r.position.set(n.x,n.y,0),r.material.opacity=0;let y=(l=a.hand_scale_multiplier)!=null?l:2.5,c=(m=o.scale)!=null?m:.1875;return r.scale.set(c*y*100,c*y*100,1),r.renderOrder=(b=i.z_index)!=null?b:99999,r}function Kn(e){var b,x,d,g,h,f,E,w,S;let t=e.objects.get("ui_tutorial_1"),n=t==null?void 0:t.ui,s=(t==null?void 0:t.render)||{},a=((b=e.engine.runtime)==null?void 0:b.ui_styles)||{},i=((x=e.engine.runtime)==null?void 0:x.ui)||{},o=(n==null?void 0:n.text)||i.tutorial_label||i.label_text||"CLEAN!",p=(n==null?void 0:n.font)||"brand.warning",r=(n==null?void 0:n.fontSize)||a.label_font_size||52,y=(g=n==null?void 0:n.letterSpacing)!=null?g:(d=a.label_letter_spacing)!=null?d:-1,c=(n==null?void 0:n.align)||"center",u=s.tint,l=typeof u=="string"?u:u?`#${u.toString(16).padStart(6,"0")}`:a.label_fill||"#FFF1C1",m=document.createElement("div");return m.textContent=o,m.style.cssText=`
105
- font-family: ${Y(p)};
106
- font-size: ${r}px;
107
- font-weight: ${N(p)};
108
- color: ${l};
109
- text-align: ${c};
101
+ `;let Fn=bt+Lt/2+15+((Ye=Bt.animation_start_y_offset)!=null?Ye:5);K.style.top=`${Fn}px`,K.style.left="50%";let Tt=Q(K);Tt.element=K,Tt.animationStartYOffset=(Ne=Bt.animation_start_y_offset)!=null?Ne:5,_.appendChild(K);let xt=((Ge=u==null?void 0:u.gameplay)==null?void 0:Ge.tuning)||{},An=(Xe=xt.hand_offset_x)!=null?Xe:50,$n=(qe=xt.hand_offset_y)!=null?qe:50,Ln=(Ze=(Ve=u==null?void 0:u.transform)==null?void 0:Ve.scale)!=null?Ze:.1875,Wn=(Je=xt.hand_scale_multiplier)!=null?Je:2.5,kn=new U.SpriteMaterial({map:t||void 0,transparent:!0,alphaTest:.1}),et=new U.Sprite(kn),zt=Ln*Wn*100;return et.scale.set(zt,zt,1),et.position.set(An,bt+$n,0),et.material.opacity=0,et.visible=!1,{panel:B,logo:D,title:Rt,subtitle:ft,footer:gt,ctaButton:Wt,ctaText:Dt,ctaHint:Tt,hand:et}}function Gn(e,t,n){var S,A,$,X,v,_,B,W;let s=t.objects.get("ui_endgame_1"),a=((S=s==null?void 0:s.gameplay)==null?void 0:S.tuning)||{},i=(A=a.animation_duration_ms)!=null?A:800,r=($=a.fade_in_duration_ms)!=null?$:600,m=(X=a.scale_animation_intensity)!=null?X:.1,l=(v=a.logo_animation_delay_ms)!=null?v:100,y=(_=a.title_animation_delay_ms)!=null?_:200,p=(B=a.footer_animation_delay_ms)!=null?B:300,u=(W=a.cta_animation_delay_ms)!=null?W:400,{panel:o,logo:d,title:g,subtitle:T,footer:c,ctaButton:h,ctaText:f,ctaHint:b}=e;o.visible=!0,o.element.style.visibility="visible";let x=Date.now(),E=()=>{let q=Date.now()-x,L=Math.min(q/r,1),k=1-Math.pow(1-L,3);o.alpha=k,o.element.style.opacity=k.toString();let j=1+m*(1-k);o.element.style.transform=`translate(-50%, -50%) scale(${j})`,L<1?requestAnimationFrame(E):(setTimeout(()=>Xn(d,i,t),l),setTimeout(()=>{qn(g,i),setTimeout(()=>Vn(T,i),50)},y),setTimeout(()=>Zn(c,i),p),setTimeout(()=>{Jn(h,f,i),setTimeout(()=>Kn(b,i),50),n&&n()},u))};E()}function Xn(e,t,n){var o,d,g,T,c;let s=n==null?void 0:n.objects.get("ui_endgame_logo_1"),i=(d=(((o=s==null?void 0:s.gameplay)==null?void 0:o.tuning)||{}).animation_start_scale)!=null?d:1.2,r=Date.now(),m=e.material.opacity,l=(g=e.targetAlpha)!=null?g:1,y=(T=e.baseScaleX)!=null?T:e.scale.x,p=(c=e.baseScaleY)!=null?c:e.scale.y,u=()=>{let h=Date.now()-r,f=Math.min(h/t,1),b=1-Math.pow(1-f,2);e.material.opacity=m+(l-m)*b;let x=i+(1-i)*b;e.scale.set(y*x,p*x,1),f<1&&requestAnimationFrame(u)};u()}function qn(e,t){let n=Date.now(),s=parseFloat(e.element.style.opacity||"0"),a=parseFloat(e.element.style.top||"0"),i=()=>{let r=Date.now()-n,m=Math.min(r/t,1),l=1-Math.pow(1-m,2);e.element.style.opacity=(s+(1-s)*l).toString(),e.element.style.top=`${a-20*(1-l)}px`,m<1&&requestAnimationFrame(i)};i()}function Vn(e,t){var m;let n=Date.now(),s=parseFloat(e.element.style.opacity||"0"),a=parseFloat(e.element.style.top||"0"),i=a-((m=e.animationStartYOffset)!=null?m:-10),r=()=>{let l=Date.now()-n,y=Math.min(l/t,1),p=1-Math.pow(1-y,2);e.element.style.opacity=(s+(1-s)*p).toString(),e.element.style.top=`${a+(i-a)*p}px`,y<1&&requestAnimationFrame(r)};r()}function Zn(e,t){var r;let n=Date.now(),s=parseFloat(e.element.style.opacity||"0"),a=(r=e.targetAlpha)!=null?r:1,i=()=>{let m=Date.now()-n,l=Math.min(m/t,1),y=1-Math.pow(1-l,2);e.element.style.opacity=(s+(a-s)*y).toString(),l<1&&requestAnimationFrame(i)};i()}function Jn(e,t,n){let s=Date.now(),a=parseFloat(e.element.style.opacity||"0"),i=()=>{let r=Date.now()-s,m=Math.min(r/n,1),l=1-Math.pow(1-m,2);e.element.style.opacity=(a+(1-a)*l).toString(),t.element.style.opacity=(a+(1-a)*l).toString(),e.element.style.transform=`translate(-50%, -50%) scale(${1+.1*(1-l)})`,m<1&&requestAnimationFrame(i)};i()}function Kn(e,t){var m;let n=Date.now(),s=parseFloat(e.element.style.opacity||"0"),a=parseFloat(e.element.style.top||"0"),i=a-((m=e.animationStartYOffset)!=null?m:5),r=()=>{let l=Date.now()-n,y=Math.min(l/t,1),p=1-Math.pow(1-y,2);e.element.style.opacity=(s+(1-s)*p).toString(),e.element.style.top=`${a+(i-a)*p}px`,y<1&&requestAnimationFrame(r)};r()}function Qn(e,t,n,s){var p,u,o,d;let a=n.objects.get("ui_endgame_hand_1"),i=((p=a==null?void 0:a.gameplay)==null?void 0:p.tuning)||{},r=(u=i.click_animation_duration_ms)!=null?u:600,m=(o=i.click_delay_ms)!=null?o:2e3,l=(d=i.click_repeat_delay_ms)!=null?d:3e3,y=()=>{var A,$;e.visible=!0,e.material.opacity=1;let g=e.position.x,T=e.position.y,c=(A=i.hand_offset_x)!=null?A:50,h=($=i.hand_offset_y)!=null?$:50,f=t.element.getBoundingClientRect(),b=c,x=h,E=Date.now(),S=()=>{var k,j,at;let X=Date.now()-E,v=Math.min(X/r,1),_=v<.5?2*v*v:1-Math.pow(-2*v+2,2)/2;e.position.set(g+(b-g)*_,T+(x-T)*_,0);let B=(j=(k=a==null?void 0:a.transform)==null?void 0:k.scale)!=null?j:.1875,W=(at=i.hand_scale_multiplier)!=null?at:2.5,q=B*W*100,L=q+q*.2*Math.sin(v*Math.PI);e.scale.set(L,L,1),v<1?requestAnimationFrame(S):(t.element.style.transform="translate(-50%, -50%) scale(0.95)",setTimeout(()=>{t.element.style.transform="translate(-50%, -50%) scale(1)",s()},100),setTimeout(()=>{e.material.opacity=0,setTimeout(()=>{e.position.set(g,T,0),y()},l)},500))};S()};setTimeout(y,m)}import*as yt from"three";function jn(e,t,n){var u,o,d,g;let s=t.objects.get("hand_tutorial_1"),a=((u=s==null?void 0:s.gameplay)==null?void 0:u.tuning)||{},i=(s==null?void 0:s.render)||{},r=(s==null?void 0:s.transform)||{},m=new yt.SpriteMaterial({map:e||void 0,transparent:!0,alphaTest:.1}),l=new yt.Sprite(m);l.position.set(n.x,n.y,0),l.material.opacity=0;let y=(o=a.hand_scale_multiplier)!=null?o:2.5,p=(d=r.scale)!=null?d:.1875;return l.scale.set(p*y*100,p*y*100,1),l.renderOrder=(g=i.z_index)!=null?g:99999,l}function On(e){var g,T,c,h,f,b,x,E,S;let t=e.objects.get("ui_tutorial_1"),n=t==null?void 0:t.ui,s=(t==null?void 0:t.render)||{},a=((g=e.engine.runtime)==null?void 0:g.ui_styles)||{},i=((T=e.engine.runtime)==null?void 0:T.ui)||{},r=(n==null?void 0:n.text)||i.tutorial_label||i.label_text||"CLEAN!",m=(n==null?void 0:n.font)||"brand.warning",l=(n==null?void 0:n.fontSize)||a.label_font_size||52,y=(h=n==null?void 0:n.letterSpacing)!=null?h:(c=a.label_letter_spacing)!=null?c:-1,p=(n==null?void 0:n.align)||"center",u=s.tint,o=typeof u=="string"?u:u?`#${u.toString(16).padStart(6,"0")}`:a.label_fill||"#FFF1C1",d=document.createElement("div");return d.textContent=r,d.style.cssText=`
102
+ font-family: ${N(m)};
103
+ font-size: ${l}px;
104
+ font-weight: ${G(m)};
105
+ color: ${o};
106
+ text-align: ${p};
110
107
  letter-spacing: ${y}px;
111
- text-shadow: ${(h=a.label_shadow_distance)!=null?h:2}px ${(f=a.label_shadow_distance)!=null?f:2}px ${(E=a.label_shadow_blur)!=null?E:4}px rgba(0,0,0,${(w=a.label_shadow_alpha)!=null?w:.8});
108
+ text-shadow: ${(f=a.label_shadow_distance)!=null?f:2}px ${(b=a.label_shadow_distance)!=null?b:2}px ${(x=a.label_shadow_blur)!=null?x:4}px rgba(0,0,0,${(E=a.label_shadow_alpha)!=null?E:.8});
112
109
  -webkit-text-stroke: ${a.label_stroke||"#8B0000"} 2px;
113
110
  opacity: ${(S=s.alpha)!=null?S:0};
114
111
  visibility: ${s.visible!==!1?"visible":"hidden"};
@@ -116,4 +113,4 @@ import{b as lt}from"../chunk-LQX44TET.mjs";import*as I from"three";var qe=(s=>(s
116
113
  position: absolute;
117
114
  transform: translate(-50%, -50%);
118
115
  white-space: nowrap;
119
- `,m}function Qn(e,t,n,s,a){var r,y,c,u,l,m,b;let i=a.objects.get("hand_tutorial_1"),o=((r=i==null?void 0:i.gameplay)==null?void 0:r.tuning)||{},p=(i==null?void 0:i.transform)||{};if(!s){let x=(y=o.animation_duration)!=null?y:1.5,d=n%x/x,g=d<.5?2*d*d:-1+(4-2*d)*d,h=(c=o.x_offset)!=null?c:0,f=(u=o.y_offset)!=null?u:0,E=(l=o.animation_range)!=null?l:40,w=E*.7,S=E,H=t.x+h+w,_=t.y+f+S,T=H+w,R=_+S;e.position.set(H+(T-H)*g,_+(R-_)*g,0);let k=(m=p.scale)!=null?m:.1875,M=(b=o.hand_scale_multiplier)!=null?b:2.5,D=k*M*100;e.scale.set(D,D,1)}}import*as tt from"three";var Ve=new tt.TextureLoader;async function Ze(e,t,n=16777215,s=!1){try{let i=(globalThis.INLINE_ASSETS||{})[e];return await Ve.loadAsync(i||e)}catch{console.warn(`Asset missing: ${e}. Using placeholder.`);let i=document.createElement("canvas");i.width=64,i.height=64;let o=i.getContext("2d");return o&&(o.fillStyle=`#${n.toString(16).padStart(6,"0")}`,s?o.fillRect(0,0,30,60):(o.beginPath(),o.arc(32,32,30,0,Math.PI*2),o.fill(),o.fillRect(27,32,10,40))),new tt.CanvasTexture(i)}}async function jn(e,t,n){var b,x,d,g;let a=(globalThis.INLINE_ASSETS||{})[e]||e,i;try{i=await Ve.loadAsync(a),console.log("[character] loaded sheet",{path:e,sourceUsed:a})}catch(h){let w=((n.gameplay.character_sheet||{}).fallback_color||"#ff00ff").replace("#","");i=await Ze(e,t,parseInt(w,16),!0),console.warn("[character] fallback loadAsset used",{path:e,err:h})}if(!i)return[];let o=n.gameplay.character_sheet||{},p=(b=o.cols)!=null?b:3,r=(x=o.rows)!=null?x:2,y=((d=i.image)==null?void 0:d.width)||0,c=((g=i.image)==null?void 0:g.height)||0,u=y/p,l=c/r;if(!Number.isFinite(u)||!Number.isFinite(l)||u<=0||l<=0)return[i];let m=[];for(let h=0;h<r;h++)for(let f=0;f<p;f++){let E=document.createElement("canvas");E.width=u,E.height=l;let w=E.getContext("2d");w&&i.image&&w.drawImage(i.image,f*u,h*l,u,l,0,0,u,l),m.push(new tt.CanvasTexture(E))}return m.length>2&&m.push(...m.slice(1,-1).reverse()),console.log("[character] frames prepared",{count:m.length}),m}function On(e,t){var u,l,m,b;let n=t.gameplay.brush||{},s=t.theme.brush_color||"#ffffff",a=(u=n.radius)!=null?u:20,i=(l=n.inner_radius)!=null?l:15,o=(m=n.alpha)!=null?m:.8,p=(b=n.inner_alpha)!=null?b:.3,r=n.inner_color||"#ffffff",y=document.createElement("canvas");y.width=a*2,y.height=a*2;let c=y.getContext("2d");return c&&(c.clearRect(0,0,y.width,y.height),c.beginPath(),c.arc(a,a,a,0,Math.PI*2),c.fillStyle=s,c.globalAlpha=o,c.fill(),c.beginPath(),c.arc(a,a,i,0,Math.PI*2),c.fillStyle=r,c.globalAlpha=p,c.fill()),new tt.CanvasTexture(y)}export{qe as AspectClass,mt as GameObject,_t as GameObjectManager,pt as Renderer,nt as ResponsiveUISystem,ct as Transform,Zn as animateHandClick,Pn as animatePanelEntrance,On as createBrushTexture,Bn as createEndGamePanel,Jn as createHandTutorial,Dn as createThreeBase,Kn as createTutorialLabel,Et as getAspectClass,zn as getRegisteredFontIds,Ze as loadAsset,jn as loadCharacterFrames,kn as registerFont,Y as resolveFont,N as resolveFontWeight,Qn as updateHandAnimation};
116
+ `,d}function In(e,t,n,s,a){var l,y,p,u,o,d,g;let i=a.objects.get("hand_tutorial_1"),r=((l=i==null?void 0:i.gameplay)==null?void 0:l.tuning)||{},m=(i==null?void 0:i.transform)||{};if(!s){let T=(y=r.animation_duration)!=null?y:1.5,c=n%T/T,h=c<.5?2*c*c:-1+(4-2*c)*c,f=(p=r.x_offset)!=null?p:0,b=(u=r.y_offset)!=null?u:0,x=(o=r.animation_range)!=null?o:40,E=x*.7,S=x,A=t.x+f+E,$=t.y+b+S,X=A+E,v=$+S;e.position.set(A+(X-A)*h,$+(v-$)*h,0);let _=(d=m.scale)!=null?d:.1875,B=(g=r.hand_scale_multiplier)!=null?g:2.5,W=_*B*100;e.scale.set(W,W,1)}}import*as tt from"three";var Qe=new tt.TextureLoader;async function je(e,t,n=16777215,s=!1){try{let i=(globalThis.INLINE_ASSETS||{})[e];return await Qe.loadAsync(i||e)}catch{console.warn(`Asset missing: ${e}. Using placeholder.`);let i=document.createElement("canvas");i.width=64,i.height=64;let r=i.getContext("2d");return r&&(r.fillStyle=`#${n.toString(16).padStart(6,"0")}`,s?r.fillRect(0,0,30,60):(r.beginPath(),r.arc(32,32,30,0,Math.PI*2),r.fill(),r.fillRect(27,32,10,40))),new tt.CanvasTexture(i)}}async function Un(e,t,n){var g,T,c,h;let a=(globalThis.INLINE_ASSETS||{})[e]||e,i;try{i=await Qe.loadAsync(a),console.log("[character] loaded sheet",{path:e,sourceUsed:a})}catch(f){let E=((n.gameplay.character_sheet||{}).fallback_color||"#ff00ff").replace("#","");i=await je(e,t,parseInt(E,16),!0),console.warn("[character] fallback loadAsset used",{path:e,err:f})}if(!i)return[];let r=n.gameplay.character_sheet||{},m=(g=r.cols)!=null?g:3,l=(T=r.rows)!=null?T:2,y=((c=i.image)==null?void 0:c.width)||0,p=((h=i.image)==null?void 0:h.height)||0,u=y/m,o=p/l;if(!Number.isFinite(u)||!Number.isFinite(o)||u<=0||o<=0)return[i];let d=[];for(let f=0;f<l;f++)for(let b=0;b<m;b++){let x=document.createElement("canvas");x.width=u,x.height=o;let E=x.getContext("2d");E&&i.image&&E.drawImage(i.image,b*u,f*o,u,o,0,0,u,o),d.push(new tt.CanvasTexture(x))}return d.length>2&&d.push(...d.slice(1,-1).reverse()),console.log("[character] frames prepared",{count:d.length}),d}function ta(e,t){var u,o,d,g;let n=t.gameplay.brush||{},s=t.theme.brush_color||"#ffffff",a=(u=n.radius)!=null?u:20,i=(o=n.inner_radius)!=null?o:15,r=(d=n.alpha)!=null?d:.8,m=(g=n.inner_alpha)!=null?g:.3,l=n.inner_color||"#ffffff",y=document.createElement("canvas");y.width=a*2,y.height=a*2;let p=y.getContext("2d");return p&&(p.clearRect(0,0,y.width,y.height),p.beginPath(),p.arc(a,a,a,0,Math.PI*2),p.fillStyle=s,p.globalAlpha=r,p.fill(),p.beginPath(),p.arc(a,a,i,0,Math.PI*2),p.fillStyle=l,p.globalAlpha=m,p.fill()),new tt.CanvasTexture(y)}export{Ke as AspectClass,ht as GameObject,Ht as GameObjectManager,dt as Renderer,nt as ResponsiveUISystem,mt as Transform,Qn as animateHandClick,Gn as animatePanelEntrance,ta as createBrushTexture,Nn as createEndGamePanel,jn as createHandTutorial,Pn as createThreeBase,On as createTutorialLabel,wt as getAspectClass,Yn as getRegisteredFontIds,je as loadAsset,Un as loadCharacterFrames,zn as registerFont,N as resolveFont,G as resolveFontWeight,In as updateHandAnimation};
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "handler-playable-sdk",
3
- "version": "0.1.10",
3
+ "version": "0.1.11",
4
4
  "description": "Handler Playable SDK v0.1 with contract-aligned surface (root sandbox, canonical event envelope).",
5
5
  "main": "dist/index.js",
6
6
  "module": "dist/index.mjs",