handler-playable-sdk 1.0.10 → 1.0.12

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,4 +1,4 @@
1
- "use strict";var Ha=Object.create;var jt=Object.defineProperty;var Na=Object.getOwnPropertyDescriptor;var Fa=Object.getOwnPropertyNames;var Ba=Object.getPrototypeOf,Ga=Object.prototype.hasOwnProperty;var he=(i,e)=>()=>(i&&(e=i(i=0)),e);var dn=(i,e)=>{for(var t in e)jt(i,t,{get:e[t],enumerable:!0})},pn=(i,e,t,n)=>{if(e&&typeof e=="object"||typeof e=="function")for(let a of Fa(e))!Ga.call(i,a)&&a!==t&&jt(i,a,{get:()=>e[a],enumerable:!(n=Na(e,a))||n.enumerable});return i};var li=(i,e,t)=>(t=i!=null?Ha(Ba(i)):{},pn(e||!i||!i.__esModule?jt(t,"default",{value:i,enumerable:!0}):t,i)),Ua=i=>pn(jt({},"__esModule",{value:!0}),i);var Xa,re=he(()=>{"use strict";Xa="handler_preview_override_mode";if(typeof window!="undefined"){let i=window.localStorage.getItem(Xa);window.__enableConfigOverrides=i===null?!0:i==="true"}});var Gn,ze,xr,gi=he(()=>{"use strict";re();Gn=null,ze="dev";if(typeof window!="undefined"){let i=window.__BUILD_SETTINGS__;if(i!=null&&i.buildMode)Gn=i,ze=i.buildMode,console.log("[CONFIG] Loaded inline build settings:",i,"buildMode:",ze);else try{let e=new XMLHttpRequest;if(e.open("GET","./build-settings.json",!1),e.send(),e.status===200&&e.responseText){let t=JSON.parse(e.responseText);Gn=t,ze=t.buildMode||"dev",console.log("[CONFIG] Loaded build settings:",t,"buildMode:",ze)}else console.log("[CONFIG] No build-settings.json found, using default buildMode:",ze)}catch(e){console.log("[CONFIG] Failed to load build-settings.json:",e instanceof Error?e.message:String(e))}}console.log("[CONFIG] Final buildMode:",ze);xr=ze==="dev"||typeof window!="undefined"&&window.location.search.includes("hot-reload")});var hi=he(()=>{"use strict"});var qn=he(()=>{"use strict";hi();gi()});var fi=he(()=>{"use strict";gi();hi();qn()});var oe,yi=he(()=>{"use strict";oe=class{static get(e){var t;return(t=this.store.get(e))==null?void 0:t.data}static set(e,t){this.store.set(e,{data:t})}static has(e){return this.store.has(e)}static clear(){this.store.clear()}};oe.store=new Map});function os(){var i,e;try{let t=typeof window!="undefined"&&(document.querySelector('script[src*="inline-assets.js"]')||((e=(i=document.querySelector("script"))==null?void 0:i.textContent)==null?void 0:e.includes("inline-assets.js"))||window.INLINE_ASSETS),n=typeof window!="undefined"&&document.querySelector('link[href*="assets/"], script[src*="assets/"]');return!!(t&&!n)}catch{return!1}}async function ls(){try{if(typeof window!="undefined"){let i=await fetch("./build-settings.json");if(i.ok){let e=await i.json();return console.log("[AssetLoader] Loaded build settings:",e),e}}}catch{}return null}function cs(){try{if(typeof window!="undefined"){let i=new XMLHttpRequest;if(i.open("GET","./build-settings.json",!1),i.send(),i.status===200&&i.responseText){let e=JSON.parse(i.responseText);return console.log("[AssetLoader] Loaded build settings (sync):",e),e}}}catch{}return null}async function ds(){if(console.log(`[AssetLoader] getInlineAssets() called - Effective mode: ${M}`),Object.keys(fe).length>0)return console.log("[AssetLoader] Returning cached inline assets:",Object.keys(fe)),fe;if(typeof window!="undefined"&&window.INLINE_ASSETS)return console.log("[AssetLoader] Using pre-loaded INLINE_ASSETS from window:",Object.keys(window.INLINE_ASSETS)),fe={...window.INLINE_ASSETS},fe;if(!(M==="publish"&&le!==!1))return console.log("[AssetLoader] Inline assets disabled for this build mode."),fe;if(!vi){let e=typeof window!="undefined"?new URL("inline-assets.js",window.location.href).href:"./inline-assets.js";console.log("[AssetLoader] Loading inline assets from:",e),vi=(async()=>{try{try{let s=await import(e+"?t="+Date.now());if(s.INLINE_ASSETS)return console.log("[AssetLoader] Loaded INLINE_ASSETS via ES module:",Object.keys(s.INLINE_ASSETS)),s.INLINE_ASSETS}catch(s){console.warn("[AssetLoader] ES module import failed, trying text parse:",s)}let t=await fetch(e);if(!t.ok)throw new Error(`HTTP ${t.status}: ${t.statusText}`);let n=await t.text();console.log("[AssetLoader] Received JS code, length:",n.length);let a=n.match(/export\s+const\s+INLINE_ASSETS\s*=\s*({[\s\S]*?});?\s*$/m);if(a)try{let s=a[1];console.log("[AssetLoader] Found INLINE_ASSETS export, parsing...");let r=new Function("return "+s)();return console.log("[AssetLoader] Parsed inline assets:",Object.keys(r)),r}catch(s){return console.warn("[AssetLoader] Failed to parse inline assets:",s),{}}else return console.warn("[AssetLoader] INLINE_ASSETS export not found in response"),console.log("[AssetLoader] JS code preview:",n.substring(0,500)),{}}catch(t){return console.warn("[AssetLoader] Failed to load inline assets:",t),{}}})()}return fe=await vi,console.log("[AssetLoader] Final inline assets cache:",Object.keys(fe)),fe}function wi(i){return i===null||typeof i!="object"||(Object.freeze(i),Object.values(i).forEach(e=>wi(e))),i}function ps(i=64,e=64,t=16711680){let n=document.createElement("canvas");n.width=i,n.height=e;let a=n.getContext("2d");return a.fillStyle=`#${t.toString(16).padStart(6,"0")}`,a.fillRect(0,0,i,e),a.strokeStyle="#000",a.strokeRect(0,0,i,e),a.fillStyle="#fff",a.font="10px sans-serif",a.textAlign="center",a.fillText("MISSING",i/2,e/2),me.Texture.from(n)}function Dt(i,e){ea.set(i,e)}var me,Zn,Qn,$e,M,le,ke,fe,vi,ea,Pe,Ht=he(()=>{"use strict";me=require("pixi.js");yi();Zn=typeof __BUILD_MODE__!="undefined"?__BUILD_MODE__:"undefined",Qn=os(),$e=typeof window!="undefined"?window.__BUILD_SETTINGS__:null,M=Qn?"publish":Zn,le=$e==null?void 0:$e.assetsInlined;$e!=null&&$e.buildMode&&(M=$e.buildMode,console.log(`[AssetLoader] Build mode overridden by inline settings: ${M}`));ke=cs();ke!=null&&ke.buildMode&&(M=ke.buildMode,console.log(`[AssetLoader] Build mode overridden by sync settings: ${M}`));(ke==null?void 0:ke.assetsInlined)!==void 0&&(le=ke.assetsInlined);ls().then(i=>{i!=null&&i.buildMode&&i.buildMode!==M&&(M=i.buildMode,console.log(`[AssetLoader] Build mode overridden by settings: ${M}`)),(i==null?void 0:i.assetsInlined)!==void 0&&(le=i.assetsInlined)}).catch(()=>{});console.log(`[AssetLoader] MODULE LOADED - Compile: ${Zn}, Runtime: ${Qn?"publish":"dev"}, Effective: ${M}`);fe={},vi=null;ea=new Map;Pe=class{static async load(e,t,n,a){let s=`${e}:${t.path}`,r=oe.get(s);if(r!==void 0)return r;console.log(`[AssetLoader] Loading asset: ${e}, type: ${t.type}, Effective mode: ${M}`),console.log(`[AssetLoader] Window defined: ${typeof window!="undefined"}, INLINE_ASSETS exists: ${!!(typeof window!="undefined"&&window.INLINE_ASSETS)}, keys: ${typeof window!="undefined"&&window.INLINE_ASSETS?Object.keys(window.INLINE_ASSETS).length:"N/A"}`);let o=await ds(),c=o[e];if(!c&&a&&(c=o[a],c&&console.log(`[AssetLoader] Found inline data for ${e} using configId: ${a}`)),!c&&t.path){let d=t.path.split("/");if(d.length>=2){let p=d[d.length-1].split(".")[0];o[p]&&(c=o[p],console.log(`[AssetLoader] Found inline data for ${e} using assetName: ${p}`))}}if(console.log("[AssetLoader] Inline data for",e,":",c?"FOUND":"NOT FOUND"),M==="publish"&&le!==!1&&(console.log("[AssetLoader] \u26A0\uFE0F PUBLISH MODE DETECTED - inline assets are MANDATORY"),!c))throw new Error(`[AssetLoader] PUBLISH MODE: Inline asset required but NOT FOUND for object: ${e}, path: ${t.path}`);let u=ea.get(t.type);if(u)try{let d=await u(t.path,c,e,n);return oe.set(s,d),d}catch(d){return this.handleFailure(e,t.type,d)}try{let d;switch(t.type){case"image":d=await this.loadImage(t.path,c);break;case"json":d=await this.loadJSON(t.path,c),d=wi(d);break;default:throw new Error(`Unknown asset type: ${t.type}`)}return oe.set(s,d),d}catch(d){return this.handleFailure(e,t.type,d)}}static async loadImage(e,t){let n=M==="publish",a=n&&le!==!1;if(console.log(`[AssetLoader] loadImage - Effective mode: ${M}, isPublishMode: ${n}, inlineData: ${t?"EXISTS":"MISSING"}`),a){if(console.log("[AssetLoader] PUBLISH MODE ACTIVATED - inline assets are MANDATORY"),!t)throw new Error(`[AssetLoader] Publish mode: inline asset required but not found for object. Path: ${e}`);if(typeof t!="string"||!t.startsWith("data:"))throw new Error(`[AssetLoader] Publish mode: inline asset must be data URI string, got: ${typeof t}`);try{return await me.Assets.load(t)}catch(s){throw console.error("[AssetLoader] Failed to load texture from data URI:",s),s}}if(t&&typeof t=="string"&&t.startsWith("data:"))try{return await me.Assets.load(t)}catch(s){return console.error("[AssetLoader] Failed to load texture from data URI, falling back to path:",s),await me.Assets.load(e)}return await me.Assets.load(e)}static async loadJSON(e,t){let n=M==="publish",a=n&&le!==!1;if(console.log(`[AssetLoader] loadJSON - Effective mode: ${M}, isPublishMode: ${n}, inlineData: ${t?"EXISTS":"MISSING"}`),a){if(console.log("[AssetLoader] PUBLISH MODE ACTIVATED - inline assets are MANDATORY"),!t)throw new Error(`[AssetLoader] Publish mode: inline asset required but not found for path: ${e}`);if(typeof t=="object"&&t!==null)return t;if(typeof t=="string"&&t.startsWith("data:")){let r=atob(t.split(",")[1]);return JSON.parse(r)}return JSON.parse(t)}if(t){if(typeof t=="object"&&t!==null)return t;if(typeof t=="string"&&t.startsWith("data:")){let r=atob(t.split(",")[1]);return JSON.parse(r)}return JSON.parse(t)}let s=await fetch(e);if(!s.ok)throw new Error(`JSON fetch failed: ${e}`);return s.json()}static handleFailure(e,t,n){if(M==="dev"){let s=t==="image"?ps():wi({__placeholder:!0,type:t});return oe.set(e+":"+((n==null?void 0:n.path)||"missing"),s),s}throw n}};Dt("image",async(i,e)=>{let t=M==="publish",n=t&&le!==!1,a=M==="brand",s=t&&le===!1;if(console.log(`[AssetLoader] registerType('image') - Effective mode: ${M}, isPublishMode: ${t}, isBrandMode: ${a}, inlineData: ${e?"EXISTS":"MISSING"}`),n){if(console.log("[AssetLoader] PUBLISH MODE ACTIVATED - inline assets are MANDATORY"),!e)throw new Error(`[AssetLoader] Publish mode: inline asset required but not found for path: ${i}`);if(typeof e!="string"||!e.startsWith("data:"))throw new Error(`[AssetLoader] Publish mode: inline asset must be data URI string, got: ${typeof e}`);return me.Assets.load(e)}let r=i;return(a||s)&&i&&!i.startsWith("assets/")&&(typeof window!="undefined"&&!document.querySelector('link[href*="assets/"], script[src*="assets/"]')&&!document.querySelector('link[href*="configs/"], script[src*="configs/"]')?(r=i,console.log(`[AssetLoader] BRAND MODE: flattened build, using path "${i}" as-is`)):(r=`assets/${i}`,console.log(`[AssetLoader] BRAND MODE: transformed path "${i}" -> "${r}"`))),me.Assets.load(e||r)});Dt("json",async(i,e)=>{let t=M==="publish",n=t&&le!==!1,a=M==="brand",s=t&&le===!1;if(console.log(`[AssetLoader] registerType('json') - Effective mode: ${M}, isPublishMode: ${t}, isBrandMode: ${a}, inlineData: ${e?"EXISTS":"MISSING"}`),n){if(console.log("[AssetLoader] PUBLISH MODE ACTIVATED - inline assets are MANDATORY"),!e)throw new Error(`[AssetLoader] Publish mode: inline asset required but not found for path: ${i}`);return typeof e=="object"&&e!==null?e:typeof e=="string"&&e.startsWith("data:")?JSON.parse(atob(e.split(",")[1])):JSON.parse(e)}let r=i;if((a||s)&&i&&!i.startsWith("assets/")&&(typeof window!="undefined"&&!document.querySelector('link[href*="assets/"], script[src*="assets/"]')&&!document.querySelector('link[href*="configs/"], script[src*="configs/"]')?(r=i,console.log(`[AssetLoader] BRAND MODE: flattened build, using path "${i}" as-is`)):(r=`assets/${i}`,console.log(`[AssetLoader] BRAND MODE: transformed path "${i}" -> "${r}"`))),e)return typeof e=="object"&&e!==null?e:typeof e=="string"&&e.startsWith("data:")?JSON.parse(atob(e.split(",")[1])):JSON.parse(e);let o=await fetch(r);if(!o.ok)throw new Error(`JSON fetch failed: ${i}`);return o.json()})});function Nt(i,e){ta.init(i,e),typeof window!="undefined"&&(window.__AssetTextures=Ie)}var xi,ta,Ie,yt=he(()=>{"use strict";Ht();xi=class{constructor(){this.textures=new Map;this.readyPromise=null;this.priorityReadyPromise=null;this.priorityReadyResolve=null;this.config=null;this.app=null;this.attempted=new Set;this.waiters=new Set}init(e,t){if(this.config===e&&this.app===t&&this.priorityReadyPromise){console.log("[AssetTextures] init called with same config/app; keeping existing state");return}this.textures.clear(),this.readyPromise=null,this.priorityReadyPromise=null,this.priorityReadyResolve=null,this.attempted.clear(),this.waiters.clear(),this.priorityReadyPromise=new Promise(n=>{this.priorityReadyResolve=n}),this.config=e,this.app=t,console.log("[AssetTextures] Initialized with config, cleared previous textures")}async ready(){if(this.readyPromise){await this.readyPromise;return}if(!this.config)throw new Error("[AssetTextures] Must call init() before ready() - config is null");if(!this.app)throw new Error("[AssetTextures] Must call init() before ready() - app is null");let e=this.config,t=this.app;return this.readyPromise=(async()=>{var r;console.log("[AssetTextures] Loading all assets...");let n=new Set(["background_loading_1"]),a=[],s=[];for(let[o,c]of e.objects.entries()){let l=(r=c.render)==null?void 0:r.asset;if(!l)continue;let u=async()=>{var d;try{let p=(d=c.identity)==null?void 0:d.id;console.log(`[AssetTextures] Loading ${l.type}: ${o} (${p})`);let g=await Pe.load(o,l,t,p);this.textures.set(o,g),console.log(`[AssetTextures] \u2713 Loaded: ${o}`)}catch(p){console.error(`[AssetTextures] \u2717 Failed to load: ${o}`,p)}finally{this.attempted.add(o);try{for(let p of Array.from(this.waiters))p()}catch{}}};n.has(o)?a.push(u()):s.push(u())}a.length>0&&(console.log("[AssetTextures] Phase 1: Loading priority assets (loading screen)..."),await Promise.all(a),console.log("[AssetTextures] Phase 1: Priority assets ready")),this.priorityReadyResolve&&this.priorityReadyResolve(),console.log("[AssetTextures] Phase 2: Loading remaining assets..."),await Promise.all(s),console.log("[AssetTextures] All textures loaded:",Array.from(this.textures.keys()))})(),this.readyPromise}async priorityReady(){return this.priorityReadyPromise?this.priorityReadyPromise:Promise.resolve()}async waitFor(e,t={}){if(!this.config)throw new Error("[AssetTextures] Must call init() before waitFor() - config is null");if(!this.app)throw new Error("[AssetTextures] Must call init() before waitFor() - app is null");let a=Array.from(new Set((e||[]).filter(o=>typeof o=="string"&&o))).filter(o=>{var c,l,u,d;try{let p=(u=(l=(c=this.config)==null?void 0:c.objects)==null?void 0:l.get)==null?void 0:u.call(l,o);return!!((d=p==null?void 0:p.render)!=null&&d.asset)}catch{return!1}});if(a.length===0)return;this.ready().catch(()=>{});let s=()=>a.every(o=>this.textures.has(o)||this.attempted.has(o));if(s())return;let r=typeof t.timeoutMs=="number"?t.timeoutMs:15e3;await new Promise(o=>{let c=!1,l=()=>{c||s()&&(c=!0,this.waiters.delete(l),o())};this.waiters.add(l),l(),r>0&&setTimeout(()=>{c||(c=!0,this.waiters.delete(l),console.warn("[AssetTextures] waitFor timed out; continuing",{ids:a}),o())},r)})}get(e){return this.textures.get(e)}set(e,t){this.textures.set(e,t),console.log(`[AssetTextures] Updated texture: ${e}`)}clear(){this.textures.clear(),this.readyPromise=null,console.log("[AssetTextures] Cleared all textures")}getAllIds(){return Array.from(this.textures.keys())}},ta=new xi,Ie=new Proxy(ta,{get(i,e){return e in i&&typeof i[e]=="function"?i[e].bind(i):i.get(e)},set(i,e,t){return i.set(e,t),!0}})});var aa={};dn(aa,{AssetEditorModal:()=>Li});var Li,Ti=he(()=>{"use strict";Li=class{constructor(){this.modal=null;this.currentObjectId=null;this.currentPath=null;this.currentAsset="";this.onApplyCallback=null}show(e,t,n,a){this.currentObjectId=e,this.currentPath=t,this.currentAsset=n,this.onApplyCallback=a,this.createModal(e,n),document.body.appendChild(this.modal),this.attachModalListeners()}createModal(e,t){let n=document.createElement("div");n.className="asset-editor-modal",n.innerHTML=`
1
+ "use strict";var $a=Object.create;var jt=Object.defineProperty;var Da=Object.getOwnPropertyDescriptor;var Ha=Object.getOwnPropertyNames;var Na=Object.getPrototypeOf,Fa=Object.prototype.hasOwnProperty;var he=(i,e)=>()=>(i&&(e=i(i=0)),e);var cn=(i,e)=>{for(var t in e)jt(i,t,{get:e[t],enumerable:!0})},dn=(i,e,t,n)=>{if(e&&typeof e=="object"||typeof e=="function")for(let a of Ha(e))!Fa.call(i,a)&&a!==t&&jt(i,a,{get:()=>e[a],enumerable:!(n=Da(e,a))||n.enumerable});return i};var li=(i,e,t)=>(t=i!=null?$a(Na(i)):{},dn(e||!i||!i.__esModule?jt(t,"default",{value:i,enumerable:!0}):t,i)),Ba=i=>dn(jt({},"__esModule",{value:!0}),i);var Ya,re=he(()=>{"use strict";Ya="handler_preview_override_mode";if(typeof window!="undefined"){let i=window.localStorage.getItem(Ya);window.__enableConfigOverrides=i===null?!0:i==="true"}});var Bn,ze,vr,gi=he(()=>{"use strict";re();Bn=null,ze="dev";if(typeof window!="undefined"){let i=window.__BUILD_SETTINGS__;if(i!=null&&i.buildMode)Bn=i,ze=i.buildMode,console.log("[CONFIG] Loaded inline build settings:",i,"buildMode:",ze);else try{let e=new XMLHttpRequest;if(e.open("GET","./build-settings.json",!1),e.send(),e.status===200&&e.responseText){let t=JSON.parse(e.responseText);Bn=t,ze=t.buildMode||"dev",console.log("[CONFIG] Loaded build settings:",t,"buildMode:",ze)}else console.log("[CONFIG] No build-settings.json found, using default buildMode:",ze)}catch(e){console.log("[CONFIG] Failed to load build-settings.json:",e instanceof Error?e.message:String(e))}}console.log("[CONFIG] Final buildMode:",ze);vr=ze==="dev"||typeof window!="undefined"&&window.location.search.includes("hot-reload")});var hi=he(()=>{"use strict"});var Un=he(()=>{"use strict";hi();gi()});var fi=he(()=>{"use strict";gi();hi();Un()});var oe,yi=he(()=>{"use strict";oe=class{static get(e){var t;return(t=this.store.get(e))==null?void 0:t.data}static set(e,t){this.store.set(e,{data:t})}static has(e){return this.store.has(e)}static clear(){this.store.clear()}};oe.store=new Map});function ss(){var i,e;try{let t=typeof window!="undefined"&&(document.querySelector('script[src*="inline-assets.js"]')||((e=(i=document.querySelector("script"))==null?void 0:i.textContent)==null?void 0:e.includes("inline-assets.js"))||window.INLINE_ASSETS),n=typeof window!="undefined"&&document.querySelector('link[href*="assets/"], script[src*="assets/"]');return!!(t&&!n)}catch{return!1}}async function rs(){try{if(typeof window!="undefined"){let i=await fetch("./build-settings.json");if(i.ok){let e=await i.json();return console.log("[AssetLoader] Loaded build settings:",e),e}}}catch{}return null}function os(){try{if(typeof window!="undefined"){let i=new XMLHttpRequest;if(i.open("GET","./build-settings.json",!1),i.send(),i.status===200&&i.responseText){let e=JSON.parse(i.responseText);return console.log("[AssetLoader] Loaded build settings (sync):",e),e}}}catch{}return null}async function ls(){if(console.log(`[AssetLoader] getInlineAssets() called - Effective mode: ${M}`),Object.keys(fe).length>0)return console.log("[AssetLoader] Returning cached inline assets:",Object.keys(fe)),fe;if(typeof window!="undefined"&&window.INLINE_ASSETS)return console.log("[AssetLoader] Using pre-loaded INLINE_ASSETS from window:",Object.keys(window.INLINE_ASSETS)),fe={...window.INLINE_ASSETS},fe;if(!(M==="publish"&&le!==!1))return console.log("[AssetLoader] Inline assets disabled for this build mode."),fe;if(!vi){let e=typeof window!="undefined"?new URL("inline-assets.js",window.location.href).href:"./inline-assets.js";console.log("[AssetLoader] Loading inline assets from:",e),vi=(async()=>{try{try{let s=await import(e+"?t="+Date.now());if(s.INLINE_ASSETS)return console.log("[AssetLoader] Loaded INLINE_ASSETS via ES module:",Object.keys(s.INLINE_ASSETS)),s.INLINE_ASSETS}catch(s){console.warn("[AssetLoader] ES module import failed, trying text parse:",s)}let t=await fetch(e);if(!t.ok)throw new Error(`HTTP ${t.status}: ${t.statusText}`);let n=await t.text();console.log("[AssetLoader] Received JS code, length:",n.length);let a=n.match(/export\s+const\s+INLINE_ASSETS\s*=\s*({[\s\S]*?});?\s*$/m);if(a)try{let s=a[1];console.log("[AssetLoader] Found INLINE_ASSETS export, parsing...");let r=new Function("return "+s)();return console.log("[AssetLoader] Parsed inline assets:",Object.keys(r)),r}catch(s){return console.warn("[AssetLoader] Failed to parse inline assets:",s),{}}else return console.warn("[AssetLoader] INLINE_ASSETS export not found in response"),console.log("[AssetLoader] JS code preview:",n.substring(0,500)),{}}catch(t){return console.warn("[AssetLoader] Failed to load inline assets:",t),{}}})()}return fe=await vi,console.log("[AssetLoader] Final inline assets cache:",Object.keys(fe)),fe}function wi(i){return i===null||typeof i!="object"||(Object.freeze(i),Object.values(i).forEach(e=>wi(e))),i}function cs(i=64,e=64,t=16711680){let n=document.createElement("canvas");n.width=i,n.height=e;let a=n.getContext("2d");return a.fillStyle=`#${t.toString(16).padStart(6,"0")}`,a.fillRect(0,0,i,e),a.strokeStyle="#000",a.strokeRect(0,0,i,e),a.fillStyle="#fff",a.font="10px sans-serif",a.textAlign="center",a.fillText("MISSING",i/2,e/2),me.Texture.from(n)}function Dt(i,e){Qn.set(i,e)}var me,Jn,Zn,$e,M,le,ke,fe,vi,Qn,Pe,Ht=he(()=>{"use strict";me=require("pixi.js");yi();Jn=typeof __BUILD_MODE__!="undefined"?__BUILD_MODE__:"undefined",Zn=ss(),$e=typeof window!="undefined"?window.__BUILD_SETTINGS__:null,M=Zn?"publish":Jn,le=$e==null?void 0:$e.assetsInlined;$e!=null&&$e.buildMode&&(M=$e.buildMode,console.log(`[AssetLoader] Build mode overridden by inline settings: ${M}`));ke=os();ke!=null&&ke.buildMode&&(M=ke.buildMode,console.log(`[AssetLoader] Build mode overridden by sync settings: ${M}`));(ke==null?void 0:ke.assetsInlined)!==void 0&&(le=ke.assetsInlined);rs().then(i=>{i!=null&&i.buildMode&&i.buildMode!==M&&(M=i.buildMode,console.log(`[AssetLoader] Build mode overridden by settings: ${M}`)),(i==null?void 0:i.assetsInlined)!==void 0&&(le=i.assetsInlined)}).catch(()=>{});console.log(`[AssetLoader] MODULE LOADED - Compile: ${Jn}, Runtime: ${Zn?"publish":"dev"}, Effective: ${M}`);fe={},vi=null;Qn=new Map;Pe=class{static async load(e,t,n,a){let s=`${e}:${t.path}`,r=oe.get(s);if(r!==void 0)return r;console.log(`[AssetLoader] Loading asset: ${e}, type: ${t.type}, Effective mode: ${M}`),console.log(`[AssetLoader] Window defined: ${typeof window!="undefined"}, INLINE_ASSETS exists: ${!!(typeof window!="undefined"&&window.INLINE_ASSETS)}, keys: ${typeof window!="undefined"&&window.INLINE_ASSETS?Object.keys(window.INLINE_ASSETS).length:"N/A"}`);let o=await ls(),c=o[e];if(!c&&a&&(c=o[a],c&&console.log(`[AssetLoader] Found inline data for ${e} using configId: ${a}`)),!c&&t.path){let d=t.path.split("/");if(d.length>=2){let p=d[d.length-1].split(".")[0];o[p]&&(c=o[p],console.log(`[AssetLoader] Found inline data for ${e} using assetName: ${p}`))}}if(console.log("[AssetLoader] Inline data for",e,":",c?"FOUND":"NOT FOUND"),M==="publish"&&le!==!1&&(console.log("[AssetLoader] \u26A0\uFE0F PUBLISH MODE DETECTED - inline assets are MANDATORY"),!c))throw new Error(`[AssetLoader] PUBLISH MODE: Inline asset required but NOT FOUND for object: ${e}, path: ${t.path}`);let u=Qn.get(t.type);if(u)try{let d=await u(t.path,c,e,n);return oe.set(s,d),d}catch(d){return this.handleFailure(e,t.type,d)}try{let d;switch(t.type){case"image":d=await this.loadImage(t.path,c);break;case"json":d=await this.loadJSON(t.path,c),d=wi(d);break;default:throw new Error(`Unknown asset type: ${t.type}`)}return oe.set(s,d),d}catch(d){return this.handleFailure(e,t.type,d)}}static async loadImage(e,t){let n=M==="publish",a=n&&le!==!1;if(console.log(`[AssetLoader] loadImage - Effective mode: ${M}, isPublishMode: ${n}, inlineData: ${t?"EXISTS":"MISSING"}`),a){if(console.log("[AssetLoader] PUBLISH MODE ACTIVATED - inline assets are MANDATORY"),!t)throw new Error(`[AssetLoader] Publish mode: inline asset required but not found for object. Path: ${e}`);if(typeof t!="string"||!t.startsWith("data:"))throw new Error(`[AssetLoader] Publish mode: inline asset must be data URI string, got: ${typeof t}`);try{return await me.Assets.load(t)}catch(s){throw console.error("[AssetLoader] Failed to load texture from data URI:",s),s}}if(t&&typeof t=="string"&&t.startsWith("data:"))try{return await me.Assets.load(t)}catch(s){return console.error("[AssetLoader] Failed to load texture from data URI, falling back to path:",s),await me.Assets.load(e)}return await me.Assets.load(e)}static async loadJSON(e,t){let n=M==="publish",a=n&&le!==!1;if(console.log(`[AssetLoader] loadJSON - Effective mode: ${M}, isPublishMode: ${n}, inlineData: ${t?"EXISTS":"MISSING"}`),a){if(console.log("[AssetLoader] PUBLISH MODE ACTIVATED - inline assets are MANDATORY"),!t)throw new Error(`[AssetLoader] Publish mode: inline asset required but not found for path: ${e}`);if(typeof t=="object"&&t!==null)return t;if(typeof t=="string"&&t.startsWith("data:")){let r=atob(t.split(",")[1]);return JSON.parse(r)}return JSON.parse(t)}if(t){if(typeof t=="object"&&t!==null)return t;if(typeof t=="string"&&t.startsWith("data:")){let r=atob(t.split(",")[1]);return JSON.parse(r)}return JSON.parse(t)}let s=await fetch(e);if(!s.ok)throw new Error(`JSON fetch failed: ${e}`);return s.json()}static handleFailure(e,t,n){if(M==="dev"){let s=t==="image"?cs():wi({__placeholder:!0,type:t});return oe.set(e+":"+((n==null?void 0:n.path)||"missing"),s),s}throw n}};Dt("image",async(i,e)=>{let t=M==="publish",n=t&&le!==!1,a=M==="brand",s=t&&le===!1;if(console.log(`[AssetLoader] registerType('image') - Effective mode: ${M}, isPublishMode: ${t}, isBrandMode: ${a}, inlineData: ${e?"EXISTS":"MISSING"}`),n){if(console.log("[AssetLoader] PUBLISH MODE ACTIVATED - inline assets are MANDATORY"),!e)throw new Error(`[AssetLoader] Publish mode: inline asset required but not found for path: ${i}`);if(typeof e!="string"||!e.startsWith("data:"))throw new Error(`[AssetLoader] Publish mode: inline asset must be data URI string, got: ${typeof e}`);return me.Assets.load(e)}let r=i;return(a||s)&&i&&!i.startsWith("assets/")&&(typeof window!="undefined"&&!document.querySelector('link[href*="assets/"], script[src*="assets/"]')&&!document.querySelector('link[href*="configs/"], script[src*="configs/"]')?(r=i,console.log(`[AssetLoader] BRAND MODE: flattened build, using path "${i}" as-is`)):(r=`assets/${i}`,console.log(`[AssetLoader] BRAND MODE: transformed path "${i}" -> "${r}"`))),me.Assets.load(e||r)});Dt("json",async(i,e)=>{let t=M==="publish",n=t&&le!==!1,a=M==="brand",s=t&&le===!1;if(console.log(`[AssetLoader] registerType('json') - Effective mode: ${M}, isPublishMode: ${t}, isBrandMode: ${a}, inlineData: ${e?"EXISTS":"MISSING"}`),n){if(console.log("[AssetLoader] PUBLISH MODE ACTIVATED - inline assets are MANDATORY"),!e)throw new Error(`[AssetLoader] Publish mode: inline asset required but not found for path: ${i}`);return typeof e=="object"&&e!==null?e:typeof e=="string"&&e.startsWith("data:")?JSON.parse(atob(e.split(",")[1])):JSON.parse(e)}let r=i;if((a||s)&&i&&!i.startsWith("assets/")&&(typeof window!="undefined"&&!document.querySelector('link[href*="assets/"], script[src*="assets/"]')&&!document.querySelector('link[href*="configs/"], script[src*="configs/"]')?(r=i,console.log(`[AssetLoader] BRAND MODE: flattened build, using path "${i}" as-is`)):(r=`assets/${i}`,console.log(`[AssetLoader] BRAND MODE: transformed path "${i}" -> "${r}"`))),e)return typeof e=="object"&&e!==null?e:typeof e=="string"&&e.startsWith("data:")?JSON.parse(atob(e.split(",")[1])):JSON.parse(e);let o=await fetch(r);if(!o.ok)throw new Error(`JSON fetch failed: ${i}`);return o.json()})});function Nt(i,e){ea.init(i,e),typeof window!="undefined"&&(window.__AssetTextures=Ie)}var xi,ea,Ie,yt=he(()=>{"use strict";Ht();xi=class{constructor(){this.textures=new Map;this.readyPromise=null;this.priorityReadyPromise=null;this.priorityReadyResolve=null;this.config=null;this.app=null;this.attempted=new Set;this.waiters=new Set}init(e,t){if(this.config===e&&this.app===t&&this.priorityReadyPromise){console.log("[AssetTextures] init called with same config/app; keeping existing state");return}this.textures.clear(),this.readyPromise=null,this.priorityReadyPromise=null,this.priorityReadyResolve=null,this.attempted.clear(),this.waiters.clear(),this.priorityReadyPromise=new Promise(n=>{this.priorityReadyResolve=n}),this.config=e,this.app=t,console.log("[AssetTextures] Initialized with config, cleared previous textures")}async ready(){if(this.readyPromise){await this.readyPromise;return}if(!this.config)throw new Error("[AssetTextures] Must call init() before ready() - config is null");if(!this.app)throw new Error("[AssetTextures] Must call init() before ready() - app is null");let e=this.config,t=this.app;return this.readyPromise=(async()=>{var r;console.log("[AssetTextures] Loading all assets...");let n=new Set(["background_loading_1"]),a=[],s=[];for(let[o,c]of e.objects.entries()){let l=(r=c.render)==null?void 0:r.asset;if(!l)continue;let u=async()=>{var d;try{let p=(d=c.identity)==null?void 0:d.id;console.log(`[AssetTextures] Loading ${l.type}: ${o} (${p})`);let g=await Pe.load(o,l,t,p);this.textures.set(o,g),console.log(`[AssetTextures] \u2713 Loaded: ${o}`)}catch(p){console.error(`[AssetTextures] \u2717 Failed to load: ${o}`,p)}finally{this.attempted.add(o);try{for(let p of Array.from(this.waiters))p()}catch{}}};n.has(o)?a.push(u()):s.push(u())}a.length>0&&(console.log("[AssetTextures] Phase 1: Loading priority assets (loading screen)..."),await Promise.all(a),console.log("[AssetTextures] Phase 1: Priority assets ready")),this.priorityReadyResolve&&this.priorityReadyResolve(),console.log("[AssetTextures] Phase 2: Loading remaining assets..."),await Promise.all(s),console.log("[AssetTextures] All textures loaded:",Array.from(this.textures.keys()))})(),this.readyPromise}async priorityReady(){return this.priorityReadyPromise?this.priorityReadyPromise:Promise.resolve()}async waitFor(e,t={}){if(!this.config)throw new Error("[AssetTextures] Must call init() before waitFor() - config is null");if(!this.app)throw new Error("[AssetTextures] Must call init() before waitFor() - app is null");let a=Array.from(new Set((e||[]).filter(o=>typeof o=="string"&&o))).filter(o=>{var c,l,u,d;try{let p=(u=(l=(c=this.config)==null?void 0:c.objects)==null?void 0:l.get)==null?void 0:u.call(l,o);return!!((d=p==null?void 0:p.render)!=null&&d.asset)}catch{return!1}});if(a.length===0)return;this.ready().catch(()=>{});let s=()=>a.every(o=>this.textures.has(o)||this.attempted.has(o));if(s())return;let r=typeof t.timeoutMs=="number"?t.timeoutMs:15e3;await new Promise(o=>{let c=!1,l=()=>{c||s()&&(c=!0,this.waiters.delete(l),o())};this.waiters.add(l),l(),r>0&&setTimeout(()=>{c||(c=!0,this.waiters.delete(l),console.warn("[AssetTextures] waitFor timed out; continuing",{ids:a}),o())},r)})}get(e){return this.textures.get(e)}set(e,t){this.textures.set(e,t),console.log(`[AssetTextures] Updated texture: ${e}`)}clear(){this.textures.clear(),this.readyPromise=null,console.log("[AssetTextures] Cleared all textures")}getAllIds(){return Array.from(this.textures.keys())}},ea=new xi,Ie=new Proxy(ea,{get(i,e){return e in i&&typeof i[e]=="function"?i[e].bind(i):i.get(e)},set(i,e,t){return i.set(e,t),!0}})});var na={};cn(na,{AssetEditorModal:()=>Li});var Li,Ti=he(()=>{"use strict";Li=class{constructor(){this.modal=null;this.currentObjectId=null;this.currentPath=null;this.currentAsset="";this.onApplyCallback=null}show(e,t,n,a){this.currentObjectId=e,this.currentPath=t,this.currentAsset=n,this.onApplyCallback=a,this.createModal(e,n),document.body.appendChild(this.modal),this.attachModalListeners()}createModal(e,t){let n=document.createElement("div");n.className="asset-editor-modal",n.innerHTML=`
2
2
  <div class="asset-editor-card">
3
3
  <div class="asset-editor-header">
4
4
  <div>
@@ -43,7 +43,7 @@
43
43
  <button class="debug-btn primary" data-modal-apply>Apply</button>
44
44
  </div>
45
45
  </div>
46
- `,this.modal=n}attachModalListeners(){if(!this.modal)return;this.modal.querySelectorAll("[data-modal-close]").forEach(r=>{r.addEventListener("click",()=>this.close())}),this.modal.querySelectorAll("[data-tab]").forEach(r=>{r.addEventListener("click",o=>{let l=o.target.dataset.tab;l&&this.switchTab(l)})});let n=this.modal.querySelector("[data-ai-generate]");n==null||n.addEventListener("click",()=>{this.openAiEditor("generate")});let a=this.modal.querySelector("[data-ai-edit]");a==null||a.addEventListener("click",()=>{this.openAiEditor("edit")});let s=this.modal.querySelector("[data-modal-apply]");s==null||s.addEventListener("click",()=>{this.apply()}),this.modal.addEventListener("click",r=>{r.target===this.modal&&this.close()})}switchTab(e){if(!this.modal)return;this.modal.querySelectorAll("[data-tab]").forEach(a=>{a.classList.toggle("active",a.getAttribute("data-tab")===e)}),this.modal.querySelectorAll("[data-tab-panel]").forEach(a=>{a.classList.toggle("active",a.getAttribute("data-tab-panel")===e)})}openAiEditor(e){let t=window.__openAiEditor;if(typeof t!="function"){alert("AI Editor not available. Please check your setup.");return}let n="";e==="edit"&&this.currentAsset?n=`Edit this image: ${this.currentObjectId}`:n=`Create an image for: ${this.currentObjectId}`,t(this.currentObjectId||"unknown",n,this.currentAsset,{path:this.currentPath,onApply:a=>{this.onApplyCallback&&this.onApplyCallback(a),this.close()}})}apply(){this.onApplyCallback&&this.onApplyCallback("library/placeholder.png"),this.close()}close(){this.modal&&this.modal.parentNode&&this.modal.parentNode.removeChild(this.modal),this.modal=null,this.currentObjectId=null,this.currentPath=null,this.onApplyCallback=null}}});var lr={};dn(lr,{AssetCache:()=>oe,AssetLoader:()=>Pe,AssetSystem:()=>si,AssetTextures:()=>Ie,Assets:()=>Ra,BaseSystem:()=>st,GameEngine:()=>ai,GameObject:()=>It,GameObjectManager:()=>nt,ObjectFactory:()=>be,Renderer:()=>Pt,RuntimeObjectRegistry:()=>rt,Transform:()=>kt,applyScreenAnchor:()=>Gt,basePixi:()=>Ma,clearResponsiveElements:()=>oa,createPixiBase:()=>ii,getRegisteredFontIds:()=>Ta,globalResponsiveMultipliers:()=>Ke,initAssetTextures:()=>Nt,initAssets:()=>za,layout:()=>ca,playLottieOverlay:()=>Pa,registerFont:()=>La,registerType:()=>Dt,resolveAnchorVec2:()=>Me,resolveFont:()=>Ca,resolveFontWeight:()=>Aa,resolveScreenAnchorPoint:()=>Ne,resolveScreenRatioPoint:()=>Fe,runInitSequence:()=>$a,setLottieInstance:()=>Xt,spawnSceneFromConfig:()=>_a,updateScreenState:()=>Bt});module.exports=Ua(lr);var Ea=require("pixi.js");var Te={};function _t(i,e,t=!1){Te[i]||(Te[i]=[]),Te[i].push({fn:e,once:t})}function ci(i,e){if(Te[i]){if(!e){delete Te[i];return}Te[i]=Te[i].filter(t=>t.fn!==e)}}function Ot(i,...e){let t=Te[i];if(t)for(let n of[...t])n.fn(...e),n.once&&ci(i,n.fn)}function Z(i,e){_t(i,e,!0)}var D=null,ie=[],qe=null;function hn(i){D=i,ie=[],qe!==null&&(clearTimeout(qe),qe=null)}function fn(){var i,e,t;return{endpoint:(D==null?void 0:D.endpoint)||"",transport:(D==null?void 0:D.transport)||"beacon",batchSize:(i=D==null?void 0:D.batchSize)!=null?i:10,flushIntervalMs:(e=D==null?void 0:D.flushIntervalMs)!=null?e:300,maxQueue:(t=D==null?void 0:D.maxQueue)!=null?t:200,debug:!!(D!=null&&D.debug)}}async function un(i,e,t,n){let a=JSON.stringify(e);if(t==="beacon"&&typeof navigator!="undefined"&&typeof navigator.sendBeacon=="function")try{let s=navigator.sendBeacon(i,new Blob([a],{type:"application/json"}));n&&console.log("[handler.telemetry] beacon",s,e);return}catch(s){n&&console.warn("[handler.telemetry] beacon failed, fallback to fetch",s)}try{await fetch(i,{method:"POST",headers:{"Content-Type":"application/json"},body:a,keepalive:!0}),n&&console.log("[handler.telemetry] fetch",e)}catch(s){n&&console.warn("[handler.telemetry] fetch failed",s)}}function di(i,e){let t=fn();if(e&&t.endpoint){if(ie.push(i),ie.length>t.maxQueue&&(ie=ie.slice(ie.length-t.maxQueue)),ie.length>=t.batchSize){gn();return}qe===null&&(qe=window.setTimeout(()=>{qe=null,gn()},t.flushIntervalMs))}}async function gn(){let i=fn();if(!i.endpoint||ie.length===0)return;let e=ie.splice(0,i.batchSize);await un(i.endpoint,{events:e},i.transport,i.debug),ie.length>0&&await un(i.endpoint,{events:ie.splice(0,i.batchSize)},i.transport,i.debug)}function mn(i){return Math.max(0,Math.min(1,i))}function qa(i){let e=String(i!=null?i:"power2.out");if(e==="linear")return t=>t;if(e==="sine.inOut")return t=>.5-Math.cos(Math.PI*t)/2;if(e==="power2.out"||e==="easeOutQuad")return t=>1-(1-t)*(1-t);if(e.startsWith("back.out")){let t=e.match(/back\.out\(([\d.]+)\)/),n=t?Number(t[1]):1.8;return a=>1+(n+1)*Math.pow(a-1,3)+n*Math.pow(a-1,2)}return t=>1-(1-t)*(1-t)}function bt(){return typeof performance!="undefined"&&performance.now?performance.now():Date.now()}function Va(i,e){let t=i==null?void 0:i[e];return typeof t=="number"?t:0}function bn(i,e,t){try{i[e]=t}catch{}}function Wa(i){let e=i==null?void 0:i.scale;if(!e)return null;let t=typeof e.x=="number"?e.x:1,n=typeof e.y=="number"?e.y:1;return{x:t,y:n}}function yn(i,e){let t=i==null?void 0:i.scale;if(t)try{typeof t.set=="function"?t.set(e.x,e.y):(typeof t.x=="number"&&(t.x=e.x),typeof t.y=="number"&&(t.y=e.y))}catch{}}function vn(i,e){let t=Wa(i);if(!t)return{from:null,to:null};let n=null,a=null;return typeof e.scale=="number"?(n=e.scale,a=e.scale):e.scale&&typeof e.scale=="object"&&(typeof e.scale.x=="number"&&(n=e.scale.x),typeof e.scale.y=="number"&&(a=e.scale.y)),typeof e.scaleX=="number"&&(n=e.scaleX),typeof e.scaleY=="number"&&(a=e.scaleY),n===null&&a===null?{from:null,to:null}:{from:{x:t.x,y:t.y},to:{x:n!=null?n:t.x,y:a!=null?a:t.y}}}function wn(){let i=new Set,e=new WeakMap,t=null,n=()=>{if(t!=null)return;t=requestAnimationFrame(()=>{t=null,o(),i.size>0&&n()})},a=u=>{var p;i.add(u);let d=(p=e.get(u.target))!=null?p:new Set;d.add(u),e.set(u.target,d),n()},s=u=>{i.delete(u);let d=e.get(u.target);d&&(d.delete(u),d.size===0&&e.delete(u.target))},r=u=>{u.killed||(u.killed=!0,s(u))},o=()=>{var d,p;let u=bt();for(let g of Array.from(i)){if(g.killed||g.paused)continue;let m=u-g.startMs-g.delayMs;if(m<0)continue;let f=g.durationMs>0?m/g.durationMs:1,C=mn(f),b=g.repeat>=0?g.repeat+1:1,h=g.repeat>0?Math.min(Math.floor(f),b-1):0;if(g.repeat>0&&f>=1){let y=f-h;C=mn(y)}let v=g.ease(C);g.yoyo&&h%2===1&&(v=1-v);for(let y of g.props)bn(g.target,y.key,y.from+(y.to-y.from)*v);g.scaleFrom&&g.scaleTo&&yn(g.target,{x:g.scaleFrom.x+(g.scaleTo.x-g.scaleFrom.x)*v,y:g.scaleFrom.y+(g.scaleTo.y-g.scaleFrom.y)*v});try{(d=g.onUpdate)==null||d.call(g)}catch{}if(f>=b){r(g);try{(p=g.onComplete)==null||p.call(g)}catch{}}}},c=(u,d,p)=>{var y;let g=Math.max(0,(typeof d.duration=="number"?d.duration:.5)*1e3),m=Math.max(0,(typeof d.delay=="number"?d.delay:0)*1e3+((y=p==null?void 0:p.delayMsOverride)!=null?y:0)),f=qa(d.ease),C=typeof d.repeat=="number"?Math.max(0,d.repeat|0):0,b=d.yoyo===!0,h=new Set(["duration","delay","ease","repeat","yoyo","onUpdate","onComplete","scale","scaleX","scaleY"]),v=[];for(let I of Object.keys(d)){if(h.has(I))continue;let _=d[I];typeof _=="number"&&v.push({key:I,from:Va(u,I),to:_})}let w=vn(u,d);return{target:u,startMs:bt(),delayMs:m,durationMs:g,ease:f,props:v,scaleFrom:w.from,scaleTo:w.to,repeat:C,yoyo:b,onUpdate:typeof d.onUpdate=="function"?d.onUpdate:void 0,onComplete:typeof d.onComplete=="function"?d.onComplete:void 0,killed:!1,paused:!1,pauseAtMs:null}},l={to(u,d){let p=c(u,d);return a(p),{kill:()=>r(p),pause:()=>{p.paused||(p.paused=!0,p.pauseAtMs=bt())},resume:()=>{var f;if(!p.paused)return;let g=(f=p.pauseAtMs)!=null?f:bt(),m=bt()-g;p.startMs+=m,p.paused=!1,p.pauseAtMs=null},isActive:()=>!p.killed&&!p.paused}},fromTo(u,d,p){return l.set(u,d),l.to(u,p)},set(u,d){if(!u||!d)return;for(let g of Object.keys(d)){let m=d[g];g==="scale"||g==="scaleX"||g==="scaleY"||typeof m=="number"&&bn(u,g,m)}let p=vn(u,d);p.to&&yn(u,p.to)},killTweensOf(u){let d=e.get(u);if(d)for(let p of Array.from(d))r(p)},timeline(u={}){let d=[],p=0,g=!1,m=[],f=h=>{if(typeof h=="number")return Math.max(0,h*1e3);let v=typeof h=="string"?h.trim():"";return v.startsWith("+=")?p+Math.max(0,Number(v.slice(2))*1e3||0):v?Math.max(0,Number(v)*1e3||0):p},C=h=>{d.push(h);let v=Math.max(0,(typeof h.vars.duration=="number"?h.vars.duration:.5)*1e3);p=Math.max(p,h.atMs+v)},b={to(h,v,w){return C({kind:"to",target:h,vars:v,atMs:f(w)}),b},fromTo(h,v,w,y){return C({kind:"fromTo",target:h,vars:w,from:v,atMs:f(y)}),b},play(){var h,v;if(g)return b;g=!0,m=[];for(let w of d)w.kind==="fromTo"&&l.set(w.target,(h=w.from)!=null?h:{}),m.push(l.to(w.target,{...w.vars,delay:w.atMs/1e3+((v=w.vars.delay)!=null?v:0)}));return b},pause(){for(let h of m)h.pause();return b},kill(){for(let h of m)h.kill();m=[],g=!1}};return u.paused||b.play(),b}};return l}function xn(){if(typeof window=="undefined")return;let i=window;if(!i.gsap)try{i.gsap=wn()}catch{}}var Sn={name:"handler-playable-sdk",version:"1.0.10",type:"module",description:"Handler Playable SDK v0.1 with contract-aligned surface (root sandbox, canonical event envelope).",main:"dist/index.cjs",module:"dist/index.js",types:"dist/index.d.ts",exports:{".":{types:"./dist/index.d.ts",import:"./dist/index.js",require:"./dist/index.cjs"},"./pixi":{types:"./dist/pixi/index.d.ts",import:"./dist/pixi/index.js",require:"./dist/pixi/index.cjs"},"./pixi/index.css":{import:"./dist/pixi/index.css",require:"./dist/pixi/index.css"},"./three":{types:"./dist/three/index.d.ts",import:"./dist/three/index.js",require:"./dist/three/index.cjs"},"./cli":{types:"./dist/cli/index.d.ts",import:"./dist/cli/index.js",require:"./dist/cli/index.cjs"}},bin:{"handler-student-helper":"./bin/student-helper.mjs","handler-validate":"./bin/validate.mjs","handler-sync-screens":"./bin/sync-screens.mjs","handler-brand-dna":"./bin/brand-dna.mjs","handler-setup-library":"./bin/setup-library.mjs","handler-screen-helper":"./bin/screen-helper.mjs"},scripts:{prebuild:"python3 src/preview/build-css.py",build:"tsup src/index.ts src/pixi/index.ts src/three/index.ts src/cli/index.ts --format cjs,esm --dts --clean --minify --external lottie-web --external jszip && npm run create-mjs-symlinks && npm run postbuild-cli && npm run obfuscate && npm run postbuild",postbuild:"python3 src/preview/copy-css-to-dist.py","postbuild-cli":"cp src/cli/*.mjs dist/cli/ && chmod +x dist/cli/*.mjs && chmod +x bin/*.mjs","create-mjs-symlinks":"cd dist && ln -sf index.js index.mjs && cd pixi && ln -sf index.js index.mjs && cd ../three && ln -sf index.js index.mjs","build:dev":"tsup src/index.ts src/pixi/index.ts src/three/index.ts src/cli/index.ts --format cjs,esm --dts --clean --external lottie-web --external jszip && npm run create-mjs-symlinks && npm run postbuild-cli",obfuscate:"javascript-obfuscator dist/pixi/index.js --output dist/pixi/index.js --config obfuscator.config.json && javascript-obfuscator dist/three/index.js --output dist/three/index.js --config obfuscator.config.json && javascript-obfuscator dist/cli/index.js --output dist/cli/index.js --config obfuscator.config.json && npm run obfuscate-cli","obfuscate-cli":'for file in dist/cli/*.mjs; do javascript-obfuscator "$file" --output "$file" --config obfuscator.config.json; done',lint:"eslint 'src/**/*.{ts,tsx}'",typecheck:"tsc --noEmit",prepublishOnly:"npm run build","publish:update":"node scripts/publish-and-update.cjs patch","publish:update:minor":"node scripts/publish-and-update.cjs minor","publish:update:major":"node scripts/publish-and-update.cjs major"},author:"Handler",license:"MIT",publishConfig:{access:"public"},repository:{type:"git",url:"https://github.com/HandlerAIGames/handler-playable-sdk.git"},files:["dist","bin","LICENSE","README.md"],peerDependencies:{"lottie-web":"^5.0.0","pixi.js":"^8.0.0",three:"^0.182.0"},peerDependenciesMeta:{"pixi.js":{optional:!0},three:{optional:!0},"lottie-web":{optional:!0}},devDependencies:{"@types/three":"^0.182.0",eslint:"^9.39.2","javascript-obfuscator":"^5.1.0","pixi.js":"8.8.1",three:"^0.182.0","ts-node":"^10.9.2",tsup:"^8.4.0",typescript:"^5.7.2","typescript-eslint":"^8.53.0"},dependencies:{"@google/genai":"^1.35.0","@google/generative-ai":"^0.24.1",jszip:"^3.10.1",sharp:"^0.34.5"}};var Q=0,Ka=Q++,En=Q++,Cn=Q++,An=Q++,Ln=Q++,Tn=Q++,kn=Q++,Pn=Q++,In=Q++,Mn=Q++,jn=Q++,_n=Q++,O=Ka;function On(){return O===En}function Rn(){return O===Cn}function zn(){return O===An}function $n(){return O===Ln}function Ve(){return O===Tn}function We(){return O===kn}function Dn(){return O===Pn}function Hn(){return O===In}function Nn(){return O===Mn}function pi(){return O===jn}function ui(){return O===_n}function Fn(){let i=typeof AD_PROTOCOL!="undefined"?AD_PROTOCOL:"none",e=typeof AD_NETWORK!="undefined"?AD_NETWORK:"web_embed";if(i==="mraid")try{mraid.getState(),O=En;return}catch{}else if(i==="dapi")try{dapi.isReady(),O=Cn;return}catch{}if(e==="facebook")try{typeof FbPlayableAd!="undefined"&&(O=An)}catch{}else if(e==="google")try{typeof ExitApi!="undefined"&&(O=Ln)}catch{}else if(e==="mintegral")window.gameReady&&(O=Tn);else if(e==="tapjoy")window.TJ_API&&(O=kn);else if(e==="tiktok")window.openAppStore&&(O=Pn);else if(e==="smadex")try{window.smxTracking&&(O=In)}catch{}else if(e==="snapchat")try{window.ScPlayableAd&&(O=Mn)}catch{}else e==="vungle"?O=jn:(i==="nucleo"||e==="nucleo")&&(O=_n)}var Rt=li(require("lottie-web"),1),Bn=Rt.default;typeof window!="undefined"&&(window.lottie=Rt.default,window.__baseLottie=Rt.default);fi();function H(i,e){let t=(a,s)=>s===0?a:t(s,a%s),n=t(i,e);return`${i/n}:${e/n}`}var Fr=[{id:"iphone-15-pro-max",label:"iPhone 15 Pro Max",width:430,height:932,category:"iphone",ratio:H(430,932)},{id:"iphone-15-pro",label:"iPhone 15 Pro",width:393,height:852,category:"iphone",ratio:H(393,852)},{id:"iphone-15",label:"iPhone 15",width:393,height:852,category:"iphone",ratio:H(393,852)},{id:"iphone-14",label:"iPhone 14",width:390,height:844,category:"iphone",ratio:H(390,844)},{id:"iphone-se",label:"iPhone SE",width:375,height:667,category:"iphone",ratio:H(375,667)},{id:"iphone-12-mini",label:"iPhone 12 Mini",width:360,height:780,category:"iphone",ratio:H(360,780)}],Br=[{id:"pixel-8-pro",label:"Pixel 8 Pro",width:448,height:998,category:"android",ratio:H(448,998)},{id:"pixel-8",label:"Pixel 8",width:412,height:915,category:"android",ratio:H(412,915)},{id:"samsung-s24-ultra",label:"Samsung S24 Ultra",width:412,height:915,category:"android",ratio:H(412,915)},{id:"samsung-s24",label:"Samsung S24",width:360,height:780,category:"android",ratio:H(360,780)},{id:"samsung-a54",label:"Samsung A54",width:412,height:915,category:"android",ratio:H(412,915)},{id:"oneplus-12",label:"OnePlus 12",width:412,height:915,category:"android",ratio:H(412,915)}],Gr=[{id:"ipad-pro-12",label:'iPad Pro 12.9"',width:1024,height:1366,category:"tablet",ratio:H(1024,1366)},{id:"ipad-pro-11",label:'iPad Pro 11"',width:834,height:1194,category:"tablet",ratio:H(834,1194)},{id:"ipad-air",label:"iPad Air",width:820,height:1180,category:"tablet",ratio:H(820,1180)},{id:"ipad-mini",label:"iPad Mini",width:768,height:1024,category:"tablet",ratio:H(768,1024)},{id:"samsung-tab-s9",label:"Samsung Tab S9",width:800,height:1280,category:"tablet",ratio:H(800,1280)}],Vn=[{id:"playable-portrait",label:"Playable Portrait",width:320,height:480,category:"playable",ratio:"2:3",mraidScale:1},{id:"mraid-320x480",label:"MRAID 320\xD7480",width:320,height:480,category:"playable",ratio:"2:3",mraidScale:1},{id:"iphone-14",label:"iPhone 14",width:390,height:844,category:"playable",ratio:H(390,844),mraidScale:.7},{id:"ipad-mini",label:"iPad Mini",width:768,height:1024,category:"playable",ratio:H(768,1024),mraidScale:.7}];var Ur=[...Vn];var ns=Vn[0];re();function as(i){return new Promise((e,t)=>{let n=new FileReader;n.onerror=()=>t(new Error("FileReader failed")),n.onload=()=>e(String(n.result||"")),n.readAsDataURL(i)})}function ss(i){var a;let[e,t]=i.split(","),n=e==null?void 0:e.match(/data:(.*?);base64/);return{base64:t!=null?t:"",mimeType:(a=n==null?void 0:n[1])!=null?a:"image/png"}}async function rs(i){return await new Promise(e=>{let t=new Image;t.onload=()=>e({width:t.naturalWidth||t.width,height:t.naturalHeight||t.height}),t.onerror=()=>e(null),t.src=i})}async function mi(i){var e,t;try{console.log("[ImageUtils] Fetching image data from URL:",i);let n=await fetch(i);if(!n.ok)return console.warn("[ImageUtils] Fetch failed with status:",n.status,i),null;let a=await n.blob();console.log("[ImageUtils] Blob received, size:",a.size,"type:",a.type);let s=await as(a),r=await rs(s),o=ss(s);return console.log("[ImageUtils] Success resolution:",r==null?void 0:r.width,"x",r==null?void 0:r.height,"mime:",o.mimeType),{base64:o.base64,mimeType:o.mimeType,dataUrl:s,width:(e=r==null?void 0:r.width)!=null?e:0,height:(t=r==null?void 0:r.height)!=null?t:0}}catch(n){return console.error("[ImageUtils] Error fetching image data:",n),null}}async function zt(i,e=30){try{console.log("[ImageUtils] Removing background color...");let t=await new Promise((d,p)=>{let g=new Image;g.onload=()=>d(g),g.onerror=()=>p(new Error("Failed to load image")),g.src=i}),n=document.createElement("canvas");n.width=t.width,n.height=t.height;let a=n.getContext("2d");if(!a)return console.error("[ImageUtils] Failed to get canvas context"),i;a.drawImage(t,0,0);let s=a.getImageData(0,0,n.width,n.height),r=s.data,c=[{name:"top-left",offset:0},{name:"top-right",offset:(n.width-1)*4},{name:"bottom-left",offset:(n.height-1)*n.width*4},{name:"bottom-right",offset:((n.height-1)*n.width+(n.width-1))*4}].map(d=>({r:r[d.offset],g:r[d.offset+1],b:r[d.offset+2]})),l=0;for(let d=0;d<r.length;d+=4){let p=r[d],g=r[d+1],m=r[d+2],f=!1;for(let C of c)if(Math.sqrt(Math.pow(p-C.r,2)+Math.pow(g-C.g,2)+Math.pow(m-C.b,2))<e){f=!0;break}f&&(r[d+3]=0,l++)}return console.log(`[ImageUtils] Removed background from ${l} pixels (4-corner sampling, tolerance: ${e})`),a.putImageData(s,0,0),n.toDataURL("image/png")}catch(t){return console.error("[ImageUtils] Error removing background:",t),i}}var Kn=require("@google/genai");async function bi(i,e,t=[],n={}){var a,s,r,o,c,l,u;try{if(!(i!=null&&i.trim()))throw new Error("Gemini API key is required");if(!(e!=null&&e.trim()))throw new Error("Prompt is required");for(let b=0;b<t.length;b++){let h=t[b];if(!h.base64||!h.mimeType)throw new Error(`Image ${b+1} is missing required data`);if(h.base64.length<1e3&&console.warn(`Image ${b+1} data appears very small, may be corrupted`),!h.mimeType.startsWith("image/"))throw new Error(`Image ${b+1} has invalid MIME type: ${h.mimeType}`)}let d=new Kn.GoogleGenAI({apiKey:i}),p="gemini-2.5-flash",g=[e];t.length>0&&t.forEach((b,h)=>{g.push({inlineData:{data:b.base64,mimeType:b.mimeType}}),console.log(`[Gemini] Added image ${h+1}: ${b.mimeType}, size: ${Math.round(b.base64.length/1024)}KB`)}),console.log(`[Gemini] Making request with ${t.length} images and prompt length: ${e.length}`);let m=await d.models.generateContent({model:p,contents:g}),f="",C=(r=(s=(a=m.candidates)==null?void 0:a[0])==null?void 0:s.content)==null?void 0:r.parts;if(C)for(let b of C)b.text&&(f+=b.text);if(!f.trim())throw new Error("Empty response from Gemini API");return console.log(`[Gemini] Response received, length: ${f.length}`),f}catch(d){throw console.error("[Gemini] API error:",d),(o=d.message)!=null&&o.includes("Unable to process input image")?new Error("Unable to process the uploaded image. Please ensure it's a valid PNG, JPG, or JPEG file under 10MB and not corrupted."):(c=d.message)!=null&&c.includes("API_KEY_INVALID")?new Error("Invalid Gemini API key. Please check your API key configuration."):(l=d.message)!=null&&l.includes("QUOTA_EXCEEDED")?new Error("Gemini API quota exceeded. Please try again later or check your billing."):(u=d.message)!=null&&u.includes("SAFETY")?new Error("Content was flagged by Gemini safety filters. Please try with different images."):d}}var Xn=require("@google/genai");async function $t(i,e,t=[],n={}){try{console.info("[GEMINI-REAL-SDK] Initializing GoogleGenAI...");let a=new Xn.GoogleGenAI({apiKey:i}),s=[{text:e}];t.length>0&&t.forEach((o,c)=>{console.info(`[GEMINI-REAL-SDK] Adding image part ${c}`),s.push({inlineData:{mimeType:o.mimeType,data:o.base64}})}),console.info("[GEMINI-REAL-SDK] Calling generateContent with model: gemini-2.5-flash-image");let r=await a.models.generateContent({model:"gemini-2.5-flash-image",contents:s});if(console.info("[GEMINI-REAL-SDK] Received response from model"),!r.candidates||!r.candidates[0]||!r.candidates[0].content||!r.candidates[0].content.parts)throw new Error("Gemini 2.5 Flash Image returned invalid response structure.");for(let o of r.candidates[0].content.parts)if(o.text)console.log(o.text);else if(o.inlineData){let c=o.inlineData.data,l=o.inlineData.mimeType||"image/png";return console.info("[GEMINI-REAL-SDK] Found inline image data in response"),`data:${l};base64,${c}`}throw new Error("Gemini 2.5 Flash Image returned no image data.")}catch(a){throw console.error("[GEMINI-REAL-SDK] Error in generateImageWithGemini25Flash:",JSON.stringify(a,Object.getOwnPropertyNames(a),2)),a}}var us=require("pixi.js");yt();re();var ia=require("pixi.js");var hs=require("pixi.js");re();function Cs(i){return new Promise((e,t)=>{let n=new FileReader;n.onerror=()=>t(new Error("FileReader failed")),n.onload=()=>e(String(n.result||"")),n.readAsDataURL(i)})}function As(i){var a;let[e,t]=i.split(","),n=e==null?void 0:e.match(/data:(.*?);base64/);return{base64:t!=null?t:"",mimeType:(a=n==null?void 0:n[1])!=null?a:"image/png"}}function Ls(i){return`
46
+ `,this.modal=n}attachModalListeners(){if(!this.modal)return;this.modal.querySelectorAll("[data-modal-close]").forEach(r=>{r.addEventListener("click",()=>this.close())}),this.modal.querySelectorAll("[data-tab]").forEach(r=>{r.addEventListener("click",o=>{let l=o.target.dataset.tab;l&&this.switchTab(l)})});let n=this.modal.querySelector("[data-ai-generate]");n==null||n.addEventListener("click",()=>{this.openAiEditor("generate")});let a=this.modal.querySelector("[data-ai-edit]");a==null||a.addEventListener("click",()=>{this.openAiEditor("edit")});let s=this.modal.querySelector("[data-modal-apply]");s==null||s.addEventListener("click",()=>{this.apply()}),this.modal.addEventListener("click",r=>{r.target===this.modal&&this.close()})}switchTab(e){if(!this.modal)return;this.modal.querySelectorAll("[data-tab]").forEach(a=>{a.classList.toggle("active",a.getAttribute("data-tab")===e)}),this.modal.querySelectorAll("[data-tab-panel]").forEach(a=>{a.classList.toggle("active",a.getAttribute("data-tab-panel")===e)})}openAiEditor(e){let t=window.__openAiEditor;if(typeof t!="function"){alert("AI Editor not available. Please check your setup.");return}let n="";e==="edit"&&this.currentAsset?n=`Edit this image: ${this.currentObjectId}`:n=`Create an image for: ${this.currentObjectId}`,t(this.currentObjectId||"unknown",n,this.currentAsset,{path:this.currentPath,onApply:a=>{this.onApplyCallback&&this.onApplyCallback(a),this.close()}})}apply(){this.onApplyCallback&&this.onApplyCallback("library/placeholder.png"),this.close()}close(){this.modal&&this.modal.parentNode&&this.modal.parentNode.removeChild(this.modal),this.modal=null,this.currentObjectId=null,this.currentPath=null,this.onApplyCallback=null}}});var rr={};cn(rr,{AssetCache:()=>oe,AssetLoader:()=>Pe,AssetSystem:()=>si,AssetTextures:()=>Ie,Assets:()=>_a,BaseSystem:()=>st,GameEngine:()=>ai,GameObject:()=>It,GameObjectManager:()=>nt,ObjectFactory:()=>be,Renderer:()=>Pt,RuntimeObjectRegistry:()=>rt,Transform:()=>kt,applyScreenAnchor:()=>Gt,basePixi:()=>Pa,clearResponsiveElements:()=>sa,createPixiBase:()=>ii,getRegisteredFontIds:()=>Aa,globalResponsiveMultipliers:()=>Ke,initAssetTextures:()=>Nt,initAssets:()=>Oa,layout:()=>oa,playLottieOverlay:()=>Ta,registerFont:()=>Ca,registerType:()=>Dt,resolveAnchorVec2:()=>Me,resolveFont:()=>Sa,resolveFontWeight:()=>Ea,resolveScreenAnchorPoint:()=>Ne,resolveScreenRatioPoint:()=>Fe,runInitSequence:()=>Ra,setLottieInstance:()=>Xt,spawnSceneFromConfig:()=>Ma,updateScreenState:()=>Bt});module.exports=Ba(rr);var xa=require("pixi.js");var Te={};function _t(i,e,t=!1){Te[i]||(Te[i]=[]),Te[i].push({fn:e,once:t})}function ci(i,e){if(Te[i]){if(!e){delete Te[i];return}Te[i]=Te[i].filter(t=>t.fn!==e)}}function Ot(i,...e){let t=Te[i];if(t)for(let n of[...t])n.fn(...e),n.once&&ci(i,n.fn)}function Z(i,e){_t(i,e,!0)}var D=null,te=[],qe=null;function gn(i){D=i,te=[],qe!==null&&(clearTimeout(qe),qe=null)}function hn(){var i,e,t;return{endpoint:(D==null?void 0:D.endpoint)||"",transport:(D==null?void 0:D.transport)||"beacon",batchSize:(i=D==null?void 0:D.batchSize)!=null?i:10,flushIntervalMs:(e=D==null?void 0:D.flushIntervalMs)!=null?e:300,maxQueue:(t=D==null?void 0:D.maxQueue)!=null?t:200,debug:!!(D!=null&&D.debug)}}async function pn(i,e,t,n){let a=JSON.stringify(e);if(t==="beacon"&&typeof navigator!="undefined"&&typeof navigator.sendBeacon=="function")try{let s=navigator.sendBeacon(i,new Blob([a],{type:"application/json"}));n&&console.log("[handler.telemetry] beacon",s,e);return}catch(s){n&&console.warn("[handler.telemetry] beacon failed, fallback to fetch",s)}try{await fetch(i,{method:"POST",headers:{"Content-Type":"application/json"},body:a,keepalive:!0}),n&&console.log("[handler.telemetry] fetch",e)}catch(s){n&&console.warn("[handler.telemetry] fetch failed",s)}}function di(i,e){let t=hn();if(e&&t.endpoint){if(te.push(i),te.length>t.maxQueue&&(te=te.slice(te.length-t.maxQueue)),te.length>=t.batchSize){un();return}qe===null&&(qe=window.setTimeout(()=>{qe=null,un()},t.flushIntervalMs))}}async function un(){let i=hn();if(!i.endpoint||te.length===0)return;let e=te.splice(0,i.batchSize);await pn(i.endpoint,{events:e},i.transport,i.debug),te.length>0&&await pn(i.endpoint,{events:te.splice(0,i.batchSize)},i.transport,i.debug)}function fn(i){return Math.max(0,Math.min(1,i))}function Ga(i){let e=String(i!=null?i:"power2.out");if(e==="linear")return t=>t;if(e==="sine.inOut")return t=>.5-Math.cos(Math.PI*t)/2;if(e==="power2.out"||e==="easeOutQuad")return t=>1-(1-t)*(1-t);if(e.startsWith("back.out")){let t=e.match(/back\.out\(([\d.]+)\)/),n=t?Number(t[1]):1.8;return a=>1+(n+1)*Math.pow(a-1,3)+n*Math.pow(a-1,2)}return t=>1-(1-t)*(1-t)}function bt(){return typeof performance!="undefined"&&performance.now?performance.now():Date.now()}function Ua(i,e){let t=i==null?void 0:i[e];return typeof t=="number"?t:0}function mn(i,e,t){try{i[e]=t}catch{}}function qa(i){let e=i==null?void 0:i.scale;if(!e)return null;let t=typeof e.x=="number"?e.x:1,n=typeof e.y=="number"?e.y:1;return{x:t,y:n}}function bn(i,e){let t=i==null?void 0:i.scale;if(t)try{typeof t.set=="function"?t.set(e.x,e.y):(typeof t.x=="number"&&(t.x=e.x),typeof t.y=="number"&&(t.y=e.y))}catch{}}function yn(i,e){let t=qa(i);if(!t)return{from:null,to:null};let n=null,a=null;return typeof e.scale=="number"?(n=e.scale,a=e.scale):e.scale&&typeof e.scale=="object"&&(typeof e.scale.x=="number"&&(n=e.scale.x),typeof e.scale.y=="number"&&(a=e.scale.y)),typeof e.scaleX=="number"&&(n=e.scaleX),typeof e.scaleY=="number"&&(a=e.scaleY),n===null&&a===null?{from:null,to:null}:{from:{x:t.x,y:t.y},to:{x:n!=null?n:t.x,y:a!=null?a:t.y}}}function vn(){let i=new Set,e=new WeakMap,t=null,n=()=>{if(t!=null)return;t=requestAnimationFrame(()=>{t=null,o(),i.size>0&&n()})},a=u=>{var p;i.add(u);let d=(p=e.get(u.target))!=null?p:new Set;d.add(u),e.set(u.target,d),n()},s=u=>{i.delete(u);let d=e.get(u.target);d&&(d.delete(u),d.size===0&&e.delete(u.target))},r=u=>{u.killed||(u.killed=!0,s(u))},o=()=>{var d,p;let u=bt();for(let g of Array.from(i)){if(g.killed||g.paused)continue;let m=u-g.startMs-g.delayMs;if(m<0)continue;let f=g.durationMs>0?m/g.durationMs:1,C=fn(f),b=g.repeat>=0?g.repeat+1:1,h=g.repeat>0?Math.min(Math.floor(f),b-1):0;if(g.repeat>0&&f>=1){let y=f-h;C=fn(y)}let v=g.ease(C);g.yoyo&&h%2===1&&(v=1-v);for(let y of g.props)mn(g.target,y.key,y.from+(y.to-y.from)*v);g.scaleFrom&&g.scaleTo&&bn(g.target,{x:g.scaleFrom.x+(g.scaleTo.x-g.scaleFrom.x)*v,y:g.scaleFrom.y+(g.scaleTo.y-g.scaleFrom.y)*v});try{(d=g.onUpdate)==null||d.call(g)}catch{}if(f>=b){r(g);try{(p=g.onComplete)==null||p.call(g)}catch{}}}},c=(u,d,p)=>{var y;let g=Math.max(0,(typeof d.duration=="number"?d.duration:.5)*1e3),m=Math.max(0,(typeof d.delay=="number"?d.delay:0)*1e3+((y=p==null?void 0:p.delayMsOverride)!=null?y:0)),f=Ga(d.ease),C=typeof d.repeat=="number"?Math.max(0,d.repeat|0):0,b=d.yoyo===!0,h=new Set(["duration","delay","ease","repeat","yoyo","onUpdate","onComplete","scale","scaleX","scaleY"]),v=[];for(let I of Object.keys(d)){if(h.has(I))continue;let _=d[I];typeof _=="number"&&v.push({key:I,from:Ua(u,I),to:_})}let w=yn(u,d);return{target:u,startMs:bt(),delayMs:m,durationMs:g,ease:f,props:v,scaleFrom:w.from,scaleTo:w.to,repeat:C,yoyo:b,onUpdate:typeof d.onUpdate=="function"?d.onUpdate:void 0,onComplete:typeof d.onComplete=="function"?d.onComplete:void 0,killed:!1,paused:!1,pauseAtMs:null}},l={to(u,d){let p=c(u,d);return a(p),{kill:()=>r(p),pause:()=>{p.paused||(p.paused=!0,p.pauseAtMs=bt())},resume:()=>{var f;if(!p.paused)return;let g=(f=p.pauseAtMs)!=null?f:bt(),m=bt()-g;p.startMs+=m,p.paused=!1,p.pauseAtMs=null},isActive:()=>!p.killed&&!p.paused}},fromTo(u,d,p){return l.set(u,d),l.to(u,p)},set(u,d){if(!u||!d)return;for(let g of Object.keys(d)){let m=d[g];g==="scale"||g==="scaleX"||g==="scaleY"||typeof m=="number"&&mn(u,g,m)}let p=yn(u,d);p.to&&bn(u,p.to)},killTweensOf(u){let d=e.get(u);if(d)for(let p of Array.from(d))r(p)},timeline(u={}){let d=[],p=0,g=!1,m=[],f=h=>{if(typeof h=="number")return Math.max(0,h*1e3);let v=typeof h=="string"?h.trim():"";return v.startsWith("+=")?p+Math.max(0,Number(v.slice(2))*1e3||0):v?Math.max(0,Number(v)*1e3||0):p},C=h=>{d.push(h);let v=Math.max(0,(typeof h.vars.duration=="number"?h.vars.duration:.5)*1e3);p=Math.max(p,h.atMs+v)},b={to(h,v,w){return C({kind:"to",target:h,vars:v,atMs:f(w)}),b},fromTo(h,v,w,y){return C({kind:"fromTo",target:h,vars:w,from:v,atMs:f(y)}),b},play(){var h,v;if(g)return b;g=!0,m=[];for(let w of d)w.kind==="fromTo"&&l.set(w.target,(h=w.from)!=null?h:{}),m.push(l.to(w.target,{...w.vars,delay:w.atMs/1e3+((v=w.vars.delay)!=null?v:0)}));return b},pause(){for(let h of m)h.pause();return b},kill(){for(let h of m)h.kill();m=[],g=!1}};return u.paused||b.play(),b}};return l}function wn(){if(typeof window=="undefined")return;let i=window;if(!i.gsap)try{i.gsap=vn()}catch{}}var xn={name:"handler-playable-sdk",version:"1.0.12",type:"module",description:"Handler Playable SDK v0.1 with contract-aligned surface (root sandbox, canonical event envelope).",main:"dist/index.cjs",module:"dist/index.js",types:"dist/index.d.ts",exports:{".":{types:"./dist/index.d.ts",import:"./dist/index.js",require:"./dist/index.cjs"},"./pixi":{types:"./dist/pixi/index.d.ts",import:"./dist/pixi/index.js",require:"./dist/pixi/index.cjs"},"./pixi/index.css":{import:"./dist/pixi/index.css",require:"./dist/pixi/index.css"},"./three":{types:"./dist/three/index.d.ts",import:"./dist/three/index.js",require:"./dist/three/index.cjs"},"./cli":{types:"./dist/cli/index.d.ts",import:"./dist/cli/index.js",require:"./dist/cli/index.cjs"}},bin:{"handler-student-helper":"./bin/student-helper.mjs","handler-validate":"./bin/validate.mjs","handler-sync-screens":"./bin/sync-screens.mjs","handler-brand-dna":"./bin/brand-dna.mjs","handler-setup-library":"./bin/setup-library.mjs","handler-screen-helper":"./bin/screen-helper.mjs"},scripts:{prebuild:"python3 src/preview/build-css.py",build:"tsup src/index.ts src/pixi/index.ts src/three/index.ts src/cli/index.ts --format cjs,esm --dts --clean --minify --external lottie-web --external jszip && npm run create-mjs-symlinks && npm run postbuild-cli && npm run obfuscate && npm run postbuild",postbuild:"python3 src/preview/copy-css-to-dist.py","postbuild-cli":"cp src/cli/*.mjs dist/cli/ && chmod +x dist/cli/*.mjs && chmod +x bin/*.mjs","create-mjs-symlinks":"cd dist && ln -sf index.js index.mjs && cd pixi && ln -sf index.js index.mjs && cd ../three && ln -sf index.js index.mjs","build:dev":"tsup src/index.ts src/pixi/index.ts src/three/index.ts src/cli/index.ts --format cjs,esm --dts --clean --external lottie-web --external jszip && npm run create-mjs-symlinks && npm run postbuild-cli",obfuscate:"javascript-obfuscator dist/pixi/index.js --output dist/pixi/index.js --config obfuscator.config.json && javascript-obfuscator dist/three/index.js --output dist/three/index.js --config obfuscator.config.json && javascript-obfuscator dist/cli/index.js --output dist/cli/index.js --config obfuscator.config.json && npm run obfuscate-cli","obfuscate-cli":'for file in dist/cli/*.mjs; do javascript-obfuscator "$file" --output "$file" --config obfuscator.config.json; done',lint:"eslint 'src/**/*.{ts,tsx}'",typecheck:"tsc --noEmit",prepublishOnly:"npm run build","publish:update":"node scripts/publish-and-update.cjs patch","publish:update:minor":"node scripts/publish-and-update.cjs minor","publish:update:major":"node scripts/publish-and-update.cjs major"},author:"Handler",license:"MIT",publishConfig:{access:"public"},repository:{type:"git",url:"https://github.com/HandlerAIGames/handler-playable-sdk.git"},files:["dist","bin","LICENSE","README.md"],peerDependencies:{"lottie-web":"^5.0.0","pixi.js":"^8.0.0",three:"^0.182.0"},peerDependenciesMeta:{"pixi.js":{optional:!0},three:{optional:!0},"lottie-web":{optional:!0}},devDependencies:{"@types/three":"^0.182.0",eslint:"^9.39.2","javascript-obfuscator":"^5.1.0","pixi.js":"8.8.1",three:"^0.182.0","ts-node":"^10.9.2",tsup:"^8.4.0",typescript:"^5.7.2","typescript-eslint":"^8.53.0"},dependencies:{"@google/genai":"^1.35.0","@google/generative-ai":"^0.24.1",jszip:"^3.10.1",sharp:"^0.34.5"}};var Q=0,Wa=Q++,Sn=Q++,En=Q++,Cn=Q++,An=Q++,Ln=Q++,Tn=Q++,kn=Q++,Pn=Q++,In=Q++,Mn=Q++,jn=Q++,O=Wa;function _n(){return O===Sn}function On(){return O===En}function Rn(){return O===Cn}function zn(){return O===An}function Ve(){return O===Ln}function We(){return O===Tn}function $n(){return O===kn}function Dn(){return O===Pn}function Hn(){return O===In}function pi(){return O===Mn}function ui(){return O===jn}function Nn(){let i=typeof AD_PROTOCOL!="undefined"?AD_PROTOCOL:"none",e=typeof AD_NETWORK!="undefined"?AD_NETWORK:"web_embed";if(i==="mraid")try{mraid.getState(),O=Sn;return}catch{}else if(i==="dapi")try{dapi.isReady(),O=En;return}catch{}if(e==="facebook")try{typeof FbPlayableAd!="undefined"&&(O=Cn)}catch{}else if(e==="google")try{typeof ExitApi!="undefined"&&(O=An)}catch{}else if(e==="mintegral")window.gameReady&&(O=Ln);else if(e==="tapjoy")window.TJ_API&&(O=Tn);else if(e==="tiktok")window.openAppStore&&(O=kn);else if(e==="smadex")try{window.smxTracking&&(O=Pn)}catch{}else if(e==="snapchat")try{window.ScPlayableAd&&(O=In)}catch{}else e==="vungle"?O=Mn:(i==="nucleo"||e==="nucleo")&&(O=jn)}var Rt=li(require("lottie-web"),1),Fn=Rt.default;typeof window!="undefined"&&(window.lottie=Rt.default,window.__baseLottie=Rt.default);fi();function H(i,e){let t=(a,s)=>s===0?a:t(s,a%s),n=t(i,e);return`${i/n}:${e/n}`}var Hr=[{id:"iphone-15-pro-max",label:"iPhone 15 Pro Max",width:430,height:932,category:"iphone",ratio:H(430,932)},{id:"iphone-15-pro",label:"iPhone 15 Pro",width:393,height:852,category:"iphone",ratio:H(393,852)},{id:"iphone-15",label:"iPhone 15",width:393,height:852,category:"iphone",ratio:H(393,852)},{id:"iphone-14",label:"iPhone 14",width:390,height:844,category:"iphone",ratio:H(390,844)},{id:"iphone-se",label:"iPhone SE",width:375,height:667,category:"iphone",ratio:H(375,667)},{id:"iphone-12-mini",label:"iPhone 12 Mini",width:360,height:780,category:"iphone",ratio:H(360,780)}],Nr=[{id:"pixel-8-pro",label:"Pixel 8 Pro",width:448,height:998,category:"android",ratio:H(448,998)},{id:"pixel-8",label:"Pixel 8",width:412,height:915,category:"android",ratio:H(412,915)},{id:"samsung-s24-ultra",label:"Samsung S24 Ultra",width:412,height:915,category:"android",ratio:H(412,915)},{id:"samsung-s24",label:"Samsung S24",width:360,height:780,category:"android",ratio:H(360,780)},{id:"samsung-a54",label:"Samsung A54",width:412,height:915,category:"android",ratio:H(412,915)},{id:"oneplus-12",label:"OnePlus 12",width:412,height:915,category:"android",ratio:H(412,915)}],Fr=[{id:"ipad-pro-12",label:'iPad Pro 12.9"',width:1024,height:1366,category:"tablet",ratio:H(1024,1366)},{id:"ipad-pro-11",label:'iPad Pro 11"',width:834,height:1194,category:"tablet",ratio:H(834,1194)},{id:"ipad-air",label:"iPad Air",width:820,height:1180,category:"tablet",ratio:H(820,1180)},{id:"ipad-mini",label:"iPad Mini",width:768,height:1024,category:"tablet",ratio:H(768,1024)},{id:"samsung-tab-s9",label:"Samsung Tab S9",width:800,height:1280,category:"tablet",ratio:H(800,1280)}],qn=[{id:"playable-portrait",label:"Playable Portrait",width:320,height:480,category:"playable",ratio:"2:3",mraidScale:1},{id:"mraid-320x480",label:"MRAID 320\xD7480",width:320,height:480,category:"playable",ratio:"2:3",mraidScale:1},{id:"iphone-14",label:"iPhone 14",width:390,height:844,category:"playable",ratio:H(390,844),mraidScale:.7},{id:"ipad-mini",label:"iPad Mini",width:768,height:1024,category:"playable",ratio:H(768,1024),mraidScale:.7}];var Br=[...qn];var ts=qn[0];re();function is(i){return new Promise((e,t)=>{let n=new FileReader;n.onerror=()=>t(new Error("FileReader failed")),n.onload=()=>e(String(n.result||"")),n.readAsDataURL(i)})}function ns(i){var a;let[e,t]=i.split(","),n=e==null?void 0:e.match(/data:(.*?);base64/);return{base64:t!=null?t:"",mimeType:(a=n==null?void 0:n[1])!=null?a:"image/png"}}async function as(i){return await new Promise(e=>{let t=new Image;t.onload=()=>e({width:t.naturalWidth||t.width,height:t.naturalHeight||t.height}),t.onerror=()=>e(null),t.src=i})}async function mi(i){var e,t;try{console.log("[ImageUtils] Fetching image data from URL:",i);let n=await fetch(i);if(!n.ok)return console.warn("[ImageUtils] Fetch failed with status:",n.status,i),null;let a=await n.blob();console.log("[ImageUtils] Blob received, size:",a.size,"type:",a.type);let s=await is(a),r=await as(s),o=ns(s);return console.log("[ImageUtils] Success resolution:",r==null?void 0:r.width,"x",r==null?void 0:r.height,"mime:",o.mimeType),{base64:o.base64,mimeType:o.mimeType,dataUrl:s,width:(e=r==null?void 0:r.width)!=null?e:0,height:(t=r==null?void 0:r.height)!=null?t:0}}catch(n){return console.error("[ImageUtils] Error fetching image data:",n),null}}async function zt(i,e=30){try{console.log("[ImageUtils] Removing background color...");let t=await new Promise((d,p)=>{let g=new Image;g.onload=()=>d(g),g.onerror=()=>p(new Error("Failed to load image")),g.src=i}),n=document.createElement("canvas");n.width=t.width,n.height=t.height;let a=n.getContext("2d");if(!a)return console.error("[ImageUtils] Failed to get canvas context"),i;a.drawImage(t,0,0);let s=a.getImageData(0,0,n.width,n.height),r=s.data,c=[{name:"top-left",offset:0},{name:"top-right",offset:(n.width-1)*4},{name:"bottom-left",offset:(n.height-1)*n.width*4},{name:"bottom-right",offset:((n.height-1)*n.width+(n.width-1))*4}].map(d=>({r:r[d.offset],g:r[d.offset+1],b:r[d.offset+2]})),l=0;for(let d=0;d<r.length;d+=4){let p=r[d],g=r[d+1],m=r[d+2],f=!1;for(let C of c)if(Math.sqrt(Math.pow(p-C.r,2)+Math.pow(g-C.g,2)+Math.pow(m-C.b,2))<e){f=!0;break}f&&(r[d+3]=0,l++)}return console.log(`[ImageUtils] Removed background from ${l} pixels (4-corner sampling, tolerance: ${e})`),a.putImageData(s,0,0),n.toDataURL("image/png")}catch(t){return console.error("[ImageUtils] Error removing background:",t),i}}var Yn=require("@google/genai");async function bi(i,e,t=[],n={}){var a,s,r,o,c,l,u;try{if(!(i!=null&&i.trim()))throw new Error("Gemini API key is required");if(!(e!=null&&e.trim()))throw new Error("Prompt is required");for(let b=0;b<t.length;b++){let h=t[b];if(!h.base64||!h.mimeType)throw new Error(`Image ${b+1} is missing required data`);if(h.base64.length<1e3&&console.warn(`Image ${b+1} data appears very small, may be corrupted`),!h.mimeType.startsWith("image/"))throw new Error(`Image ${b+1} has invalid MIME type: ${h.mimeType}`)}let d=new Yn.GoogleGenAI({apiKey:i}),p="gemini-2.5-flash",g=[e];t.length>0&&t.forEach((b,h)=>{g.push({inlineData:{data:b.base64,mimeType:b.mimeType}}),console.log(`[Gemini] Added image ${h+1}: ${b.mimeType}, size: ${Math.round(b.base64.length/1024)}KB`)}),console.log(`[Gemini] Making request with ${t.length} images and prompt length: ${e.length}`);let m=await d.models.generateContent({model:p,contents:g}),f="",C=(r=(s=(a=m.candidates)==null?void 0:a[0])==null?void 0:s.content)==null?void 0:r.parts;if(C)for(let b of C)b.text&&(f+=b.text);if(!f.trim())throw new Error("Empty response from Gemini API");return console.log(`[Gemini] Response received, length: ${f.length}`),f}catch(d){throw console.error("[Gemini] API error:",d),(o=d.message)!=null&&o.includes("Unable to process input image")?new Error("Unable to process the uploaded image. Please ensure it's a valid PNG, JPG, or JPEG file under 10MB and not corrupted."):(c=d.message)!=null&&c.includes("API_KEY_INVALID")?new Error("Invalid Gemini API key. Please check your API key configuration."):(l=d.message)!=null&&l.includes("QUOTA_EXCEEDED")?new Error("Gemini API quota exceeded. Please try again later or check your billing."):(u=d.message)!=null&&u.includes("SAFETY")?new Error("Content was flagged by Gemini safety filters. Please try with different images."):d}}var Kn=require("@google/genai");async function $t(i,e,t=[],n={}){try{console.info("[GEMINI-REAL-SDK] Initializing GoogleGenAI...");let a=new Kn.GoogleGenAI({apiKey:i}),s=[{text:e}];t.length>0&&t.forEach((o,c)=>{console.info(`[GEMINI-REAL-SDK] Adding image part ${c}`),s.push({inlineData:{mimeType:o.mimeType,data:o.base64}})}),console.info("[GEMINI-REAL-SDK] Calling generateContent with model: gemini-2.5-flash-image");let r=await a.models.generateContent({model:"gemini-2.5-flash-image",contents:s});if(console.info("[GEMINI-REAL-SDK] Received response from model"),!r.candidates||!r.candidates[0]||!r.candidates[0].content||!r.candidates[0].content.parts)throw new Error("Gemini 2.5 Flash Image returned invalid response structure.");for(let o of r.candidates[0].content.parts)if(o.text)console.log(o.text);else if(o.inlineData){let c=o.inlineData.data,l=o.inlineData.mimeType||"image/png";return console.info("[GEMINI-REAL-SDK] Found inline image data in response"),`data:${l};base64,${c}`}throw new Error("Gemini 2.5 Flash Image returned no image data.")}catch(a){throw console.error("[GEMINI-REAL-SDK] Error in generateImageWithGemini25Flash:",JSON.stringify(a,Object.getOwnPropertyNames(a),2)),a}}var ds=require("pixi.js");yt();re();var ta=require("pixi.js");var us=require("pixi.js");re();function Ss(i){return new Promise((e,t)=>{let n=new FileReader;n.onerror=()=>t(new Error("FileReader failed")),n.onload=()=>e(String(n.result||"")),n.readAsDataURL(i)})}function Es(i){var a;let[e,t]=i.split(","),n=e==null?void 0:e.match(/data:(.*?);base64/);return{base64:t!=null?t:"",mimeType:(a=n==null?void 0:n[1])!=null?a:"image/png"}}function Cs(i){return`
47
47
  Analyze these screenshots of a brand or game and extract its "Brand DNA".
48
48
 
49
49
  Provide a concise summary (2-3 sentences) covering:
@@ -60,9 +60,9 @@ Palette: [#RRGGBB, #RRGGBB, ...]
60
60
  ${i?`
61
61
  ADDITIONAL RULES/NOTES:
62
62
  ${i}`:""}
63
- `.trim()}function na(){let i=[],e="",t=null;return{async addSources(n){let a=[];for(let s of n){let r=await Cs(s),o=As(r),c={id:`${Date.now()}-${Math.random().toString(16).slice(2)}`,name:s.name,base64:o.base64,mimeType:o.mimeType,dataUrl:r};i.push(c),a.push(c)}return a},getSources(){return i.slice()},async analyze(n,a,s){if(i.length===0)throw new Error("No screenshots to analyze.");let r=Ls(a),o=i.map(p=>({base64:p.base64,mimeType:p.mimeType})),c=await bi(n,r,o,{model:s}),l=e,u=[],d=c.split(`
63
+ `.trim()}function ia(){let i=[],e="",t=null;return{async addSources(n){let a=[];for(let s of n){let r=await Ss(s),o=Es(r),c={id:`${Date.now()}-${Math.random().toString(16).slice(2)}`,name:s.name,base64:o.base64,mimeType:o.mimeType,dataUrl:r};i.push(c),a.push(c)}return a},getSources(){return i.slice()},async analyze(n,a,s){if(i.length===0)throw new Error("No screenshots to analyze.");let r=Cs(a),o=i.map(p=>({base64:p.base64,mimeType:p.mimeType})),c=await bi(n,r,o,{model:s}),l=e,u=[],d=c.split(`
64
64
  `);for(let p of d)if(p.toLowerCase().startsWith("summary:"))l=p.slice(8).trim();else if(p.toLowerCase().includes("palette:")){let g=p.match(/#[0-9A-Fa-f]{6}/g);g&&g.forEach(m=>{u.includes(m.toUpperCase())||u.push(m.toUpperCase())})}return(!l||l===e)&&(l=c.split(`
65
- Palette:`)[0].replace(/^Summary:\s*/i,"").trim()),t={summary:l,palette:u.slice(0,10)},t},setSummary(n){e=n,t&&(t={...t,summary:n})},getResult(){return t}}}var De="handler_api_key_";var Ye=class{static setKey(e,t,n){try{let a={key:this.encryptKey(t),created:Date.now(),lastUsed:Date.now(),label:n||e},s=`${De}${e}`;localStorage.setItem(s,JSON.stringify(a))}catch(a){console.error("[ApiKeyStorage] Failed to store API key:",a)}}static getKey(e){try{let t=`${De}${e}`,n=localStorage.getItem(t);if(!n)return null;let a=JSON.parse(n);return a.lastUsed=Date.now(),localStorage.setItem(t,JSON.stringify(a)),this.decryptKey(a.key)}catch(t){return console.error("[ApiKeyStorage] Failed to retrieve API key:",t),null}}static hasKey(e){let t=`${De}${e}`;return localStorage.getItem(t)!==null}static removeKey(e){try{let t=`${De}${e}`;localStorage.removeItem(t)}catch(t){console.error("[ApiKeyStorage] Failed to remove API key:",t)}}static getStoredServices(){let e=[];try{for(let t=0;t<localStorage.length;t++){let n=localStorage.key(t);if(n&&n.startsWith(De)){let a=n.substring(De.length),s=localStorage.getItem(n);if(s){let r=JSON.parse(s);e.push({service:a,label:r.label,created:r.created,lastUsed:r.lastUsed})}}}}catch(t){console.error("[ApiKeyStorage] Failed to get stored services:",t)}return e.sort((t,n)=>n.lastUsed-t.lastUsed)}static clearAll(){try{let e=[];for(let t=0;t<localStorage.length;t++){let n=localStorage.key(t);n&&n.startsWith(De)&&e.push(n)}e.forEach(t=>localStorage.removeItem(t))}catch(e){console.error("[ApiKeyStorage] Failed to clear API keys:",e)}}static encryptKey(e){try{let n="handler_preview_salt_2024"+e;return btoa(n)}catch(t){return console.warn("[ApiKeyStorage] Encryption failed, storing as-is:",t),e}}static decryptKey(e){try{let t=atob(e),n="handler_preview_salt_2024";return t.startsWith(n)?t.substring(n.length):t}catch(t){return console.warn("[ApiKeyStorage] Decryption failed, returning as-is:",t),e}}},Si=()=>Ye.getKey("gemini"),Ei=(i,e)=>Ye.setKey("gemini",i,e),Ts=()=>Ye.hasKey("gemini");window.ApiKeyStorage=Ye;window.getGeminiApiKey=Si;window.setGeminiApiKey=Ei;window.hasGeminiApiKey=Ts;var Ai=class{constructor(){this.modal=null;this.options=null;this.analyzer=na();this.currentPrompt="";this.isGenerating=!1;this.generatedImages=[];this.selectedImageIndex=-1;this.promptInput=null;this.generateBtn=null;this.loadingEl=null;this.galleryEl=null;this.previewEl=null}open(e){this.options=e,this.currentPrompt=e.initialPrompt||"",this.generatedImages=[],this.selectedImageIndex=-1,this.isGenerating=!1,this.createModal(),document.body.appendChild(this.modal),setTimeout(()=>{var t,n;(t=this.promptInput)==null||t.focus(),(n=this.promptInput)==null||n.select()},100)}createModal(){var t;let e=document.createElement("div");e.className="ai-modal",e.innerHTML=`
65
+ Palette:`)[0].replace(/^Summary:\s*/i,"").trim()),t={summary:l,palette:u.slice(0,10)},t},setSummary(n){e=n,t&&(t={...t,summary:n})},getResult(){return t}}}var De="handler_api_key_";var Ye=class{static setKey(e,t,n){try{let a={key:this.encryptKey(t),created:Date.now(),lastUsed:Date.now(),label:n||e},s=`${De}${e}`;localStorage.setItem(s,JSON.stringify(a))}catch(a){console.error("[ApiKeyStorage] Failed to store API key:",a)}}static getKey(e){try{let t=`${De}${e}`,n=localStorage.getItem(t);if(!n)return null;let a=JSON.parse(n);return a.lastUsed=Date.now(),localStorage.setItem(t,JSON.stringify(a)),this.decryptKey(a.key)}catch(t){return console.error("[ApiKeyStorage] Failed to retrieve API key:",t),null}}static hasKey(e){let t=`${De}${e}`;return localStorage.getItem(t)!==null}static removeKey(e){try{let t=`${De}${e}`;localStorage.removeItem(t)}catch(t){console.error("[ApiKeyStorage] Failed to remove API key:",t)}}static getStoredServices(){let e=[];try{for(let t=0;t<localStorage.length;t++){let n=localStorage.key(t);if(n&&n.startsWith(De)){let a=n.substring(De.length),s=localStorage.getItem(n);if(s){let r=JSON.parse(s);e.push({service:a,label:r.label,created:r.created,lastUsed:r.lastUsed})}}}}catch(t){console.error("[ApiKeyStorage] Failed to get stored services:",t)}return e.sort((t,n)=>n.lastUsed-t.lastUsed)}static clearAll(){try{let e=[];for(let t=0;t<localStorage.length;t++){let n=localStorage.key(t);n&&n.startsWith(De)&&e.push(n)}e.forEach(t=>localStorage.removeItem(t))}catch(e){console.error("[ApiKeyStorage] Failed to clear API keys:",e)}}static encryptKey(e){try{let n="handler_preview_salt_2024"+e;return btoa(n)}catch(t){return console.warn("[ApiKeyStorage] Encryption failed, storing as-is:",t),e}}static decryptKey(e){try{let t=atob(e),n="handler_preview_salt_2024";return t.startsWith(n)?t.substring(n.length):t}catch(t){return console.warn("[ApiKeyStorage] Decryption failed, returning as-is:",t),e}}},Si=()=>Ye.getKey("gemini"),Ei=(i,e)=>Ye.setKey("gemini",i,e),As=()=>Ye.hasKey("gemini");window.ApiKeyStorage=Ye;window.getGeminiApiKey=Si;window.setGeminiApiKey=Ei;window.hasGeminiApiKey=As;var Ai=class{constructor(){this.modal=null;this.options=null;this.analyzer=ia();this.currentPrompt="";this.isGenerating=!1;this.generatedImages=[];this.selectedImageIndex=-1;this.promptInput=null;this.generateBtn=null;this.loadingEl=null;this.galleryEl=null;this.previewEl=null}open(e){this.options=e,this.currentPrompt=e.initialPrompt||"",this.generatedImages=[],this.selectedImageIndex=-1,this.isGenerating=!1,this.createModal(),document.body.appendChild(this.modal),setTimeout(()=>{var t,n;(t=this.promptInput)==null||t.focus(),(n=this.promptInput)==null||n.select()},100)}createModal(){var t;let e=document.createElement("div");e.className="ai-modal",e.innerHTML=`
66
66
  <div class="ai-modal-card">
67
67
  <div class="ai-modal-header">
68
68
  <div class="ai-modal-actions">
@@ -175,7 +175,7 @@ Style guidelines: ${n.summary}`;this.promptInput.value=a,this.currentPrompt=a}}c
175
175
  <source src="${a}" type="audio/wav">
176
176
  Your browser does not support the audio element.
177
177
  </audio>
178
- `;case"text":return`<pre style="background: rgba(0,0,0,0.2); padding: 16px; border-radius: 8px; max-height: 300px; overflow-y: auto; white-space: pre-wrap;">${e}</pre>`;default:return`<div class="asset-preview-placeholder">Cannot preview ${t} assets</div>`}}resolveAssetUrl(e){return e.startsWith("data:")||e.startsWith("blob:")||e.startsWith("/")?e:`/raw/${e}`}attachEventListeners(){if(!this.modal)return;this.modal.addEventListener("click",n=>{let a=n.target;(a.dataset.action==="close"||a===this.modal)&&this.close()});let e=this.modal.querySelector('[data-action="change"]');e&&e.addEventListener("click",()=>{this.openAssetEditor()});let t=this.modal.querySelector('[data-action="edit"]');t&&t.addEventListener("click",()=>{this.openAiEditor(),this.close()})}openAssetEditor(){this.options&&Promise.resolve().then(()=>(Ti(),aa)).then(({AssetEditorModal:e})=>{new e().show(this.options.objectId||"unknown",this.options.propertyPath||"",this.options.assetPath,n=>{var a;(a=this.options)!=null&&a.onChange&&this.options.onChange(n),this.close()})})}openAiEditor(){if(!this.options||this.options.assetType!=="image")return;let e=window.__openAiEditor;typeof e=="function"&&e(this.options.objectId||"asset","Edit this image asset",this.options.assetPath,{path:this.options.propertyPath,onApply:t=>{var n;(n=this.options)!=null&&n.onChange&&this.options.onChange(t)}})}close(){this.modal&&this.modal.parentNode&&this.modal.parentNode.removeChild(this.modal),this.modal=null,this.options=null}};window.openAssetPreview=function(i){new ki().open(i)};var Pi=class{constructor(){this.modal=null;this.canvas=null;this.ctx=null;this.image=null;this.options=null;this.cropX=0;this.cropY=0;this.cropWidth=100;this.cropHeight=100;this.scale=1;this.panX=0;this.panY=0;this.isDragging=!1;this.dragStartX=0;this.dragStartY=0;this.lastPanX=0;this.lastPanY=0}open(e){this.options=e,this.createModal(),this.loadImage(),document.body.appendChild(this.modal)}createModal(){let e=document.createElement("div");e.className="asset-crop-modal",e.innerHTML=`
178
+ `;case"text":return`<pre style="background: rgba(0,0,0,0.2); padding: 16px; border-radius: 8px; max-height: 300px; overflow-y: auto; white-space: pre-wrap;">${e}</pre>`;default:return`<div class="asset-preview-placeholder">Cannot preview ${t} assets</div>`}}resolveAssetUrl(e){return e.startsWith("data:")||e.startsWith("blob:")||e.startsWith("/")?e:`/raw/${e}`}attachEventListeners(){if(!this.modal)return;this.modal.addEventListener("click",n=>{let a=n.target;(a.dataset.action==="close"||a===this.modal)&&this.close()});let e=this.modal.querySelector('[data-action="change"]');e&&e.addEventListener("click",()=>{this.openAssetEditor()});let t=this.modal.querySelector('[data-action="edit"]');t&&t.addEventListener("click",()=>{this.openAiEditor(),this.close()})}openAssetEditor(){this.options&&Promise.resolve().then(()=>(Ti(),na)).then(({AssetEditorModal:e})=>{new e().show(this.options.objectId||"unknown",this.options.propertyPath||"",this.options.assetPath,n=>{var a;(a=this.options)!=null&&a.onChange&&this.options.onChange(n),this.close()})})}openAiEditor(){if(!this.options||this.options.assetType!=="image")return;let e=window.__openAiEditor;typeof e=="function"&&e(this.options.objectId||"asset","Edit this image asset",this.options.assetPath,{path:this.options.propertyPath,onApply:t=>{var n;(n=this.options)!=null&&n.onChange&&this.options.onChange(t)}})}close(){this.modal&&this.modal.parentNode&&this.modal.parentNode.removeChild(this.modal),this.modal=null,this.options=null}};window.openAssetPreview=function(i){new ki().open(i)};var Pi=class{constructor(){this.modal=null;this.canvas=null;this.ctx=null;this.image=null;this.options=null;this.cropX=0;this.cropY=0;this.cropWidth=100;this.cropHeight=100;this.scale=1;this.panX=0;this.panY=0;this.isDragging=!1;this.dragStartX=0;this.dragStartY=0;this.lastPanX=0;this.lastPanY=0}open(e){this.options=e,this.createModal(),this.loadImage(),document.body.appendChild(this.modal)}createModal(){let e=document.createElement("div");e.className="asset-crop-modal",e.innerHTML=`
179
179
  <div class="asset-crop-card">
180
180
  <div class="asset-crop-header">
181
181
  <div>
@@ -226,7 +226,7 @@ Style guidelines: ${n.summary}`;this.promptInput.value=a,this.currentPrompt=a}}c
226
226
  <button class="asset-crop-apply primary" data-action="apply">Apply Crop</button>
227
227
  </div>
228
228
  </div>
229
- `,this.modal=e,this.attachEventListeners(),this.initializeCanvas()}initializeCanvas(){this.modal&&(this.canvas=this.modal.querySelector(".asset-crop-canvas"),this.canvas&&(this.ctx=this.canvas.getContext("2d"),this.canvas.width=400,this.canvas.height=300))}loadImage(){this.options&&(this.image=new Image,this.image.crossOrigin="anonymous",this.image.onload=()=>{this.initializeCrop(),this.render()},this.image.src=this.options.imageSrc)}initializeCrop(){var n;if(!this.image||!this.canvas)return;let e=this.image.width/this.image.height,t=this.canvas.width/this.canvas.height;e>t?(this.cropHeight=this.image.height,this.cropWidth=this.cropHeight*t,this.cropX=(this.image.width-this.cropWidth)/2,this.cropY=0):(this.cropWidth=this.image.width,this.cropHeight=this.cropWidth/t,this.cropX=0,this.cropY=(this.image.height-this.cropHeight)/2),(n=this.options)!=null&&n.aspectRatio&&this.applyAspectRatio(this.options.aspectRatio),this.fitToCanvas()}applyAspectRatio(e){if(!this.image)return;let t=this.image.width/this.image.height,n=this.cropX+this.cropWidth/2,a=this.cropY+this.cropHeight/2;e>t?(this.cropWidth=Math.min(this.image.width,this.cropHeight*e),this.cropHeight=this.cropWidth/e):(this.cropHeight=Math.min(this.image.height,this.cropWidth/e),this.cropWidth=this.cropHeight*e),this.cropX=Math.max(0,Math.min(this.image.width-this.cropWidth,n-this.cropWidth/2)),this.cropY=Math.max(0,Math.min(this.image.height-this.cropHeight,a-this.cropHeight/2))}fitToCanvas(){if(!this.image||!this.canvas)return;let e=this.canvas.width/this.cropWidth,t=this.canvas.height/this.cropHeight;this.scale=Math.min(e,t)*.9,this.panX=(this.canvas.width-this.cropWidth*this.scale)/2,this.panY=(this.canvas.height-this.cropHeight*this.scale)/2}render(){!this.ctx||!this.image||!this.canvas||(this.ctx.clearRect(0,0,this.canvas.width,this.canvas.height),this.ctx.save(),this.ctx.translate(this.panX,this.panY),this.ctx.scale(this.scale,this.scale),this.ctx.drawImage(this.image,-this.cropX,-this.cropY,this.image.width,this.image.height),this.ctx.restore(),this.drawCropOverlay(),this.updatePreview())}drawCropOverlay(){if(!this.ctx||!this.canvas)return;let e=this.panX,t=this.panY,n=this.cropWidth*this.scale,a=this.cropHeight*this.scale;this.ctx.fillStyle="rgba(0, 0, 0, 0.5)",this.ctx.fillRect(0,0,this.canvas.width,this.canvas.height),this.ctx.clearRect(e,t,n,a),this.ctx.strokeStyle="#ffffff",this.ctx.lineWidth=2,this.ctx.strokeRect(e,t,n,a),this.ctx.fillStyle="#ffffff";let s=8;[[e,t],[e+n-s,t],[e,t+a-s],[e+n-s,t+a-s]].forEach(([o,c])=>{var l;(l=this.ctx)==null||l.fillRect(o,c,s,s)})}updatePreview(){if(!this.modal||!this.image)return;let e=this.modal.querySelector(".asset-crop-preview-canvas");if(!e)return;let t=e.getContext("2d");if(!t)return;let n=150;e.width=n,e.height=n;let a=n/this.cropWidth,s=n/this.cropHeight,r=Math.min(a,s),o=this.cropWidth*r,c=this.cropHeight*r,l=(n-o)/2,u=(n-c)/2;t.drawImage(this.image,this.cropX,this.cropY,this.cropWidth,this.cropHeight,l,u,o,c)}attachEventListeners(){if(!this.modal||!this.canvas)return;this.canvas.addEventListener("mousedown",this.handleMouseDown.bind(this)),this.canvas.addEventListener("mousemove",this.handleMouseMove.bind(this)),this.canvas.addEventListener("mouseup",this.handleMouseUp.bind(this)),this.canvas.addEventListener("wheel",this.handleWheel.bind(this)),this.canvas.addEventListener("touchstart",this.handleTouchStart.bind(this)),this.canvas.addEventListener("touchmove",this.handleTouchMove.bind(this)),this.canvas.addEventListener("touchend",this.handleTouchEnd.bind(this));let e=this.modal.querySelector(".asset-crop-zoom-slider");e==null||e.addEventListener("input",n=>{let a=parseFloat(n.target.value);this.setZoom(a)});let t=this.modal.querySelector(".asset-crop-aspect-select");t==null||t.addEventListener("change",n=>{let a=n.target.value;this.setAspectRatio(a)}),this.modal.addEventListener("click",n=>{switch(n.target.dataset.action){case"reset":this.reset();break;case"apply":this.applyCrop();break;case"cancel":case"close":this.close();break}}),this.modal.addEventListener("click",n=>{n.target===this.modal&&this.close()})}handleMouseDown(e){this.isDragging=!0,this.dragStartX=e.clientX,this.dragStartY=e.clientY,this.lastPanX=this.panX,this.lastPanY=this.panY,this.canvas.style.cursor="grabbing"}handleMouseMove(e){if(!this.isDragging)return;let t=e.clientX-this.dragStartX,n=e.clientY-this.dragStartY;this.panX=this.lastPanX+t,this.panY=this.lastPanY+n,this.constrainPan(),this.render()}handleMouseUp(){this.isDragging=!1,this.canvas.style.cursor="grab"}handleWheel(e){e.preventDefault();let t=e.deltaY>0?.9:1.1;this.setZoom(this.scale*t)}handleTouchStart(e){e.touches.length===1&&(this.isDragging=!0,this.dragStartX=e.touches[0].clientX,this.dragStartY=e.touches[0].clientY,this.lastPanX=this.panX,this.lastPanY=this.panY)}handleTouchMove(e){if(!this.isDragging||e.touches.length!==1)return;e.preventDefault();let t=e.touches[0].clientX-this.dragStartX,n=e.touches[0].clientY-this.dragStartY;this.panX=this.lastPanX+t,this.panY=this.lastPanY+n,this.constrainPan(),this.render()}handleTouchEnd(){this.isDragging=!1}setZoom(e){this.scale=Math.max(.1,Math.min(3,e)),this.updateZoomUI(),this.constrainPan(),this.render()}setAspectRatio(e){let t;switch(e){case"1:1":t=1;break;case"4:3":t=4/3;break;case"16:9":t=16/9;break;case"3:2":t=3/2;break;default:t=void 0}t&&this.applyAspectRatio(t),this.fitToCanvas(),this.render()}updateZoomUI(){if(!this.modal)return;let e=this.modal.querySelector(".asset-crop-zoom-value"),t=this.modal.querySelector(".asset-crop-zoom-slider");e&&(e.textContent=`${this.scale.toFixed(1)}x`),t&&(t.value=this.scale.toString())}constrainPan(){if(!this.canvas)return;let e=this.cropWidth*this.scale,t=this.cropHeight*this.scale;this.panX=Math.max(this.canvas.width-e,Math.min(0,this.panX)),this.panY=Math.max(this.canvas.height-t,Math.min(0,this.panY))}reset(){this.initializeCrop(),this.render()}applyCrop(){var a;if(!this.image||!((a=this.options)!=null&&a.onCrop))return;let e=document.createElement("canvas"),t=e.getContext("2d");if(!t)return;e.width=this.cropWidth,e.height=this.cropHeight,t.drawImage(this.image,this.cropX,this.cropY,this.cropWidth,this.cropHeight,0,0,this.cropWidth,this.cropHeight);let n=e.toDataURL("image/png");this.options.onCrop(n),this.close()}close(){this.modal&&this.modal.parentNode&&this.modal.parentNode.removeChild(this.modal);let e=this.options;this.modal=null,this.canvas=null,this.ctx=null,this.image=null,this.options=null,e!=null&&e.onCancel&&e.onCancel()}};window.openAssetCrop=function(i){new Pi().open(i)};re();var Be=require("pixi.js");var vt=require("pixi.js");Ht();var ks=typeof __BUILD_MODE__!="undefined"?__BUILD_MODE__:"undefined",Ii=ks;if(typeof window!="undefined")try{let i=new XMLHttpRequest;if(i.open("GET","./build-settings.json",!1),i.send(),i.status===200&&i.responseText){let e=JSON.parse(i.responseText);e!=null&&e.buildMode&&(Ii=e.buildMode,console.log(`[ObjectFactory] Build mode overridden by settings: ${Ii}`))}}catch{}function Ps(i){var t,n,a,s,r;if(typeof window!="undefined"&&window.resolveAnchorVec2)return window.resolveAnchorVec2(i);let e={center:{x:.5,y:.5},"top-left":{x:0,y:0},"top-center":{x:.5,y:0},"top-right":{x:1,y:0},"center-left":{x:0,y:.5},"center-right":{x:1,y:.5},"bottom-left":{x:0,y:1},"bottom-center":{x:.5,y:1},"bottom-right":{x:1,y:1},left:{x:0,y:.5},right:{x:1,y:.5},top:{x:.5,y:0},bottom:{x:.5,y:1}};if(Array.isArray(i))return{x:(t=i[0])!=null?t:.5,y:(n=i[1])!=null?n:.5};if(i&&typeof i=="object"&&"x"in i&&"y"in i)return{x:(a=i.x)!=null?a:.5,y:(s=i.y)!=null?s:.5};if(typeof i=="string"){let o=i.trim().toLowerCase();return(r=e[o])!=null?r:{x:.5,y:.5}}return null}var be=class{static async create(e,t,n){var c,l,u,d,p,g,m;console.log(`[ObjectFactory] create() called for: ${e}, __BUILD_MODE__: ${Ii}`);let a=(c=t==null?void 0:t.render)==null?void 0:c.asset;if(!a){console.log(`[ObjectFactory] No asset definition for: ${e}, returning empty container`);let f=new vt.Container;return this.applyTransform(f,t==null?void 0:t.transform,t),f}let s=(l=t==null?void 0:t.identity)==null?void 0:l.id;console.log(`[ObjectFactory] Calling AssetLoader.load() for: ${e}, configId: ${s}, type: ${a.type}, path: ${a.path}`);let r=await Pe.load(e,a,n,s);console.log(`[ObjectFactory] AssetLoader.load() completed for: ${e}, rawAsset type: ${(u=r==null?void 0:r.constructor)==null?void 0:u.name}`);let o;if(a.type==="image")console.log("[ObjectFactory] Creating Sprite from texture:",r,"for object:",e),o=new vt.Sprite(r),console.log("[ObjectFactory] Created object:",o,"type:",(d=o==null?void 0:o.constructor)==null?void 0:d.name),this.applyTransform(o,t==null?void 0:t.transform,t);else if(a.type==="json")if(console.log("[ObjectFactory] JSON asset for",e,"rawAsset type:",(p=r==null?void 0:r.constructor)==null?void 0:p.name,r),r&&(((g=r.constructor)==null?void 0:g.name)==="Container"||r instanceof vt.Container)){console.warn("[ObjectFactory] JSON asset is Container (from cache), reloading JSON directly");let f=[a.path,`/assets/${a.path}`,`assets/${a.path}`,`../assets/${a.path}`],C=!1;for(let b of f)try{let h=await fetch(b);if(h.ok){o=await h.json(),console.log("[ObjectFactory] Reloaded JSON directly from:",b,"type:",(m=o==null?void 0:o.constructor)==null?void 0:m.name),C=!0;break}}catch{continue}C||(console.error("[ObjectFactory] Failed to reload JSON from any path"),o=r)}else o=r;else o=r,o&&typeof o=="object"&&("x"in o||"position"in o)&&this.applyTransform(o,t==null?void 0:t.transform,t);return o}static applyTransform(e,t,n){var a,s,r,o;if(!(!t||!e)&&(t.position&&("x"in e&&"y"in e?(e.x=(a=t.position.x)!=null?a:0,e.y=(s=t.position.y)!=null?s:0):"position"in e&&e.position&&e.position.set((r=t.position.x)!=null?r:0,(o=t.position.y)!=null?o:0)),t.scale!==void 0&&"scale"in e&&e.scale&&(typeof e.scale=="object"&&"set"in e.scale?e.scale.set(t.scale):e.scale=t.scale),t.rotation!==void 0&&"rotation"in e&&(e.rotation=t.rotation),t.anchor&&"anchor"in e&&e.anchor)){let c=Ps(t.anchor);c&&("set"in e.anchor?e.anchor.set(c.x,c.y):(e.anchor.x=c.x,e.anchor.y=c.y))}}};re();var Ut=require("pixi.js"),ce={width:400,height:600,designWidth:400,scaleFactor:1},Ke={scale:1,position:1},qt=[];function Is(i,e,t,n,a,s,r){qt.push({element:i,originalScale:s,positionHelper:e,heightPercent:a}),e(i,t,n,a,s,r,!1)}function Ms(){qt.forEach(({element:i,originalScale:e,positionHelper:t,heightPercent:n})=>{let a=e*ce.scaleFactor;t(i,ce.width,ce.height,n,a,!0,!1)})}function oa(){qt.length=0,console.log("[LAYOUT] Cleared all responsive elements")}function Bt(i,e){console.log(`[SCREEN] updateScreenState called: ${i}x${e}`),ce.width=i,ce.height=e,ce.scaleFactor=Math.min(i/ce.designWidth,1.15),Ke.scale=ce.scaleFactor,Ke.position=1,console.log(`[SCREEN] Global multipliers - scale: ${Ke.scale.toFixed(3)}`),Ms()}var j={layout:{scale_multiplier:1,position_offset:{x:0,y:0},debug_rect_visible:!0,debug_rect_color:16711680,debug_rect_thickness:4,debug_rect_scale_x:1,debug_rect_scale_y:1,screen_scale_x:1,screen_scale_y:1},engine:{scale:1,background_scale:1.05,background_offset_y:0,background_alpha:.98,label_pulse_speed:3,label_pulse_intensity:.03}};function js(i,e,t){let n=j[i];n&&n[e]!==void 0&&(n[e]=t,console.log(`Updated ${i}.${e} = ${t}`))}function _s(){return j}var Os={center:{x:.5,y:.5},"center-center":{x:.5,y:.5},middle:{x:.5,y:.5},"middle-center":{x:.5,y:.5},"top-left":{x:0,y:0},"top-center":{x:.5,y:0},"top-right":{x:1,y:0},"bottom-left":{x:0,y:1},"bottom-center":{x:.5,y:1},"bottom-right":{x:1,y:1},"left-center":{x:0,y:.5},"right-center":{x:1,y:.5},"center-left":{x:0,y:.5},"center-right":{x:1,y:.5},left:{x:0,y:.5},right:{x:1,y:.5},top:{x:.5,y:0},bottom:{x:.5,y:1}};function Ft(i,e){return typeof i=="number"&&Number.isFinite(i)?i:e}function Me(i,e={x:.5,y:.5}){var t;if(Array.isArray(i))return{x:Ft(i[0],e.x),y:Ft(i[1],e.y)};if(i&&typeof i=="object"){let n=i;return{x:Ft(n.x,e.x),y:Ft(n.y,e.y)}}if(typeof i=="string"){let n=i.trim().toLowerCase();return(t=Os[n])!=null?t:e}return e}function Ne(i,e,t,n={}){var g,m,f,C,b,h;let a=Me(t),s=(g=n.inset)!=null?g:{},r=(m=n.padding)!=null?m:{x:0,y:0},o=((f=s.left)!=null?f:0)+r.x,c=((C=s.right)!=null?C:0)+r.x,l=((b=s.top)!=null?b:0)+r.y,u=((h=s.bottom)!=null?h:0)+r.y,d=Math.max(0,i-o-c),p=Math.max(0,e-l-u);return{x:o+d*a.x,y:l+p*a.y}}function Fe(i,e,t,n={}){var f,C,b,h,v,w;let a=(f=n.inset)!=null?f:{},s=(C=n.padding)!=null?C:{x:0,y:0},r=((b=a.left)!=null?b:0)+s.x,o=((h=a.right)!=null?h:0)+s.x,c=((v=a.top)!=null?v:0)+s.y,l=((w=a.bottom)!=null?w:0)+s.y,u=Math.max(0,i-r-o),d=Math.max(0,e-c-l),p=Me(t,{x:.5,y:.5}),g=Math.min(Math.max(p.x,0),1),m=Math.min(Math.max(p.y,0),1);return{x:r+u*g,y:c+d*m}}function Gt(i,e,t,n={}){var u,d,p;if(!i)return;let a=n.positionRatio?Fe(e,t,n.positionRatio,{inset:n.inset,padding:n.screenPadding}):Ne(e,t,n.anchor,{inset:n.inset,padding:n.screenPadding}),s=(u=n.offset)!=null?u:{x:0,y:0},r=a.x+s.x,o=a.y+s.y;i.anchor&&n.renderAnchor&&i.anchor.set(n.renderAnchor.x,n.renderAnchor.y),ne(i,r,o);let c=(d=n.scale)!=null?d:1,l=(p=n.scaleMultiplier)!=null?p:1;(n.scale!==void 0||n.scaleMultiplier!==void 0)&&de(i,c*l)}if(typeof window!="undefined"){let i=window.innerWidth,e=window.innerHeight,t=()=>{let n=window.innerWidth,a=window.innerHeight;(n!==i||a!==e)&&(i=n,e=a,Bt(n,a))};window.addEventListener("resize",t),window.addEventListener("orientationchange",()=>{setTimeout(t,100)}),window.mraid&&(window.mraid.addEventListener("viewableChange",t),window.mraid.addEventListener("sizeChange",t)),Bt(window.innerWidth,window.innerHeight),window.updateDebugConfig=js,window.getDebugConfig=_s,window.copyConfig=qs,window.applyConfig=wt,window.applyConfigForRatio=Vs,window.positionAtBottom=la,window.positionAtTop=$s,window.positionAtCenter=Ds,window.positionAtLeft=Hs,window.positionAtRight=Ns,window.positionAtBottomLeft=Fs,window.positionAtBottomRight=Bs,window.positionAtTopLeft=Gs,window.positionAtTopRight=Us,window.applyPositionContract=zs,console.log("\u{1F3AE} Debug Config Functions Available:"),console.log("\u2022 updateDebugConfig(category, key, value)"),console.log("\u2022 getDebugConfig()"),console.log("\u2022 copyConfig(presetName)"),console.log("\u2022 applyConfig(config)"),console.log("\u2022 applyConfigForRatio(width, height)"),console.log("\u{1F4CD} Positioning Helpers Available (with scale):"),console.log("\u2022 positionAtBottom(element, w, h, percent, scale)"),console.log("\u2022 positionAtTop(element, w, h, percent, scale)"),console.log("\u2022 positionAtCenter(element, w, h, offsetX, offsetY, scale)"),console.log("\u2022 positionAtLeft/Right(element, w, h, percent, scale)"),console.log("\u2022 Corner positions: BottomLeft/Right, TopLeft/Right (all with scale)"),console.log("\u2022 applyPositionContract(element, w, h, contract)"),console.log("Example: positionAtCenter(mySprite, 400, 600, 0, -50, 1.2)")}function Vt(i,e,t=0){return i*e+t}function Wt(i,e,t=0){return i*(1-e)+t}function Yt(i,e,t=0){return i*e+t}function Kt(i,e,t=0){return i*(1-e)+t}function ee(i,e=0){return i/2+e}function Rs(i,e){return i*e}function zs(i,e,t,n){var r,o,c,l,u,d,p,g,m,f,C,b,h,v,w,y,I,_,G,R;let a=0,s=0;switch(n.type){case"top":a=ee(e,(o=(r=n.offset)==null?void 0:r.x)!=null?o:0),s=Vt(t,n.percent,(l=(c=n.offset)==null?void 0:c.y)!=null?l:0);break;case"bottom":a=ee(e,(d=(u=n.offset)==null?void 0:u.x)!=null?d:0),s=Wt(t,n.percent,(g=(p=n.offset)==null?void 0:p.y)!=null?g:0);break;case"left":a=Yt(e,n.percent,(f=(m=n.offset)==null?void 0:m.x)!=null?f:0),s=ee(t,(b=(C=n.offset)==null?void 0:C.y)!=null?b:0);break;case"right":a=Kt(e,n.percent,(v=(h=n.offset)==null?void 0:h.x)!=null?v:0),s=ee(t,(y=(w=n.offset)==null?void 0:w.y)!=null?y:0);break;case"center":a=ee(e,(_=(I=n.offset)==null?void 0:I.x)!=null?_:0),s=ee(t,(R=(G=n.offset)==null?void 0:G.y)!=null?R:0);break}i.position?i.position.set(a,s):(i.x=a,i.y=s),n.scale!==void 0&&n.scale!==1&&i.scale&&(typeof i.scale.set=="function"?i.scale.set(n.scale,n.scale):(i.scale.x=n.scale,i.scale.y=n.scale))}function la(i,e,t,n=.2,a=1,s=!0,r=!1){let o=Rs(t,n),c=Wt(t,n/2);ne(i,ee(e),c);let l=s?a*ce.scaleFactor:a;de(i,l),r&&!qt.find(u=>u.element===i)&&Is(i,la,e,t,n,a,s)}function $s(i,e,t,n=.1,a=1){ne(i,ee(e),Vt(t,n)),de(i,a)}function Ds(i,e,t,n=0,a=0,s=1){ne(i,ee(e,n),ee(t,a)),de(i,s)}function Hs(i,e,t,n=.1,a=1){ne(i,Yt(e,n),ee(t)),de(i,a)}function Ns(i,e,t,n=.1,a=1){ne(i,Kt(e,n),ee(t)),de(i,a)}function Fs(i,e,t,n=.05,a=.05,s=1){ne(i,Yt(e,a),Wt(t,n)),de(i,s)}function Bs(i,e,t,n=.05,a=.05,s=1){ne(i,Kt(e,a),Wt(t,n)),de(i,s)}function Gs(i,e,t,n=.05,a=.05,s=1){ne(i,Yt(e,a),Vt(t,n)),de(i,s)}function Us(i,e,t,n=.05,a=.05,s=1){ne(i,Kt(e,a),Vt(t,n)),de(i,s)}function ne(i,e,t){i&&i.position?typeof i.position.set=="function"?i.position.set(e,t):(i.position.x=e,i.position.y=t):i&&(i.x=e,i.y=t)}function de(i,e){e!==1&&i&&i.scale&&(typeof i.scale.set=="function"?i.scale.set(e,e):i.scale.x!==void 0&&i.scale.y!==void 0&&(i.scale.x=e,i.scale.y=e))}var He={default:{layout:{scale_multiplier:1,position_offset:{x:0,y:0},debug_rect_visible:!0,debug_rect_color:16711680,debug_rect_thickness:4,debug_rect_scale_x:1,debug_rect_scale_y:1,screen_scale_x:1,screen_scale_y:1},engine:{scale:1,background_scale:1.05,background_offset_y:0,background_alpha:.98,label_pulse_speed:3,label_pulse_intensity:.03}},wide:{layout:{scale_multiplier:1,position_offset:{x:0,y:0},debug_rect_visible:!0,debug_rect_color:16711680,debug_rect_thickness:4,debug_rect_scale_x:1,debug_rect_scale_y:1,screen_scale_x:.9,screen_scale_y:1.1},engine:{scale:1,background_scale:1.1,background_offset_y:0,background_alpha:.95,label_pulse_speed:3,label_pulse_intensity:.03}},square:{layout:{scale_multiplier:1,position_offset:{x:0,y:0},debug_rect_visible:!0,debug_rect_color:16711680,debug_rect_thickness:4,debug_rect_scale_x:1,debug_rect_scale_y:1,screen_scale_x:.85,screen_scale_y:.85},engine:{scale:1,background_scale:1,background_offset_y:0,background_alpha:1,label_pulse_speed:3,label_pulse_intensity:.03}},tall:{layout:{scale_multiplier:1,position_offset:{x:0,y:0},debug_rect_visible:!0,debug_rect_color:16711680,debug_rect_thickness:4,debug_rect_scale_x:1,debug_rect_scale_y:1,screen_scale_x:1.1,screen_scale_y:.9},engine:{scale:1,background_scale:.95,background_offset_y:0,background_alpha:1,label_pulse_speed:3,label_pulse_intensity:.03}}};function qs(i){return i&&He[i]?JSON.parse(JSON.stringify(He[i])):JSON.parse(JSON.stringify(j))}function wt(i){Object.keys(i).forEach(e=>{let t=e;j[t]&&i[t]&&Object.assign(j[t],i[t])}),console.log("Config applied:",i)}function Vs(i,e){let t=i/e;t>1.6?(wt(He.wide),console.log("Applied WIDE config for ratio:",t)):t<.7?(wt(He.tall),console.log("Applied TALL config for ratio:",t)):t>.8&&t<1.2?(wt(He.square),console.log("Applied SQUARE config for ratio:",t)):(wt(He.default),console.log("Applied DEFAULT config for ratio:",t))}if(typeof window!="undefined"){let i=window;i.configPresets=He,i.resolveAnchorVec2=i.resolveAnchorVec2||Me,i.resolveScreenAnchorPoint=i.resolveScreenAnchorPoint||Ne,i.resolveScreenRatioPoint=i.resolveScreenRatioPoint||Fe}var Y=null,sa=new Map,ra=null;function ca(i,e,t,n,a,s={}){var xe,Se,Ee,Ce,Ae,Le,V,_e,ot,lt,ct,dt,pt,ut,gt,ht,ft,mt,B,X,U,J,Ue,Oe,Fi,Bi,Gi,Ui,qi,Vi,Wi,Yi,Ki,Xi,Ji,Zi,Qi,en,tn,nn,an,sn,rn,on,ln,cn;let r=(xe=s.enableDebugLogs)!=null?xe:!1;r&&(console.log("\u{1F3AF} [LAYOUT_DEBUGS] ===== STARTING LAYOUT CALCULATION ====="),console.log("\u{1F3AF} [LAYOUT_DEBUGS] Screen dimensions:",{width:n.width,height:n.height}),console.log("\u{1F3AF} [LAYOUT_DEBUGS] Time:",t),console.log("\u{1F3AF} [LAYOUT_DEBUGS] Options:",s));let{mainContainer:o,label:c,background:l,backgroundTexture:u,app:d}=i;if(!d||!d.renderer){r&&console.log("\u{1F3AF} [LAYOUT_DEBUGS] \u274C No app or renderer, skipping layout");return}r&&(console.log("\u{1F3AF} [LAYOUT_DEBUGS] App renderer dimensions:",{width:d.renderer.width,height:d.renderer.height}),console.log("\u{1F3AF} [LAYOUT_DEBUGS] App screen dimensions:",{width:d.screen.width,height:d.screen.height}));let p=n.width,g=n.height;r&&console.log("\u{1F3AF} [LAYOUT_DEBUGS] Base dimensions:",{baseWidth:p,baseHeight:g});let m=p*j.layout.screen_scale_x,f=g*j.layout.screen_scale_y,C=p/2,b=e.engine.runtime||{},h=b.layout||{};r&&(console.log("\u{1F3AF} [LAYOUT_DEBUGS] Debug config:",{screen_scale_x:j.layout.screen_scale_x,screen_scale_y:j.layout.screen_scale_y}),console.log("\u{1F3AF} [LAYOUT_DEBUGS] Calculated dimensions:",{width:m,height:f,midX:C}),console.log("\u{1F3AF} [LAYOUT_DEBUGS] Engine runtime:",b),console.log("\u{1F3AF} [LAYOUT_DEBUGS] Layout config:",h));let v=h.design_width_portrait||400,w=m/v;w=Math.min(w,1.15);let y=w*((Se=j.engine.scale)!=null?Se:1),I=(Ee=s.skipMainContainerTransform)!=null?Ee:!1;!I&&o&&o.scale&&(typeof o.scale.set=="function"?o.scale.set(y):(o.scale.x=y,o.scale.y=y));let _=(Ce=h.main_container_anchor)!=null?Ce:"center",G=(Ae=h.main_container_position_ratio)!=null?Ae:{x:.5,y:.5},R=(Le=h.main_container_offset)!=null?Le:{x:0,y:0},N=h.main_container_position_ratio?Fe(p,g,G):Ne(p,g,_),$=N.x+R.x+j.layout.position_offset.x,L=N.y+R.y+j.layout.position_offset.y;if(!I&&o&&o.position&&(typeof o.position.set=="function"?o.position.set($,L):(o.position.x=$,o.position.y=L)),a&&(o!=null&&o.toLocal))for(let[q,W]of e.objects.entries()){let z=W==null?void 0:W.transform;if(!z||((V=z.position_mode)!=null?V:"static")!=="static")continue;let k=(_e=a.get)==null?void 0:_e.call(a,q),ae=((ot=k==null?void 0:k.getDisplayObject)==null?void 0:ot.call(k))||(k==null?void 0:k.pixiObject)||k;if(!ae||ae.parent!==o)continue;let P=z.position_ratio!=null?Fe(p,g,z.position_ratio):Ne(p,g,(lt=z.anchor)!=null?lt:"center"),se=o.toLocal(new Ut.Point(P.x,P.y)),Mt=(ct=z.position)!=null?ct:{x:0,y:0},te=se.x+Mt.x,Re=se.y+Mt.y;typeof(k==null?void 0:k.setPosition)=="function"?k.setPosition(te,Re):(ne(ae,te,Re),(dt=k==null?void 0:k.transform)!=null&&dt.position&&(k.transform.position.x=te,k.transform.position.y=Re))}let S=typeof window!="undefined"?window.__BUILD_SETTINGS__:null,A=((S==null?void 0:S.buildMode)||(typeof __BUILD_MODE__!="undefined"?__BUILD_MODE__:"dev"))==="dev";if(j.layout.debug_rect_visible&&A){(!Y||Y.parent!==d.stage)&&(Y==null||Y.destroy(),Y=new Ut.Graphics,Y.zIndex=9999,d.stage.addChild(Y)),Y.clear();let q=j.layout.debug_rect_scale_x,W=j.layout.debug_rect_scale_y,z=(p-4)*q,ge=(g-4)*W,k=(p-z)/2,ae=(g-ge)/2;r&&(console.log("\u{1F3AF} [LAYOUT_DEBUGS] ===== DEBUG RECT POSITIONING ====="),console.log("\u{1F3AF} [LAYOUT_DEBUGS] Debug rect calculations:",{baseWidth:p,baseHeight:g,rectW:z,rectH:ge,offsetX:k,offsetY:ae}),console.log("\u{1F3AF} [LAYOUT_DEBUGS] Debug rect final position:",{x:2+k,y:2+ae,width:z,height:ge})),Y.rect(2+k,2+ae,z,ge).stroke({width:j.layout.debug_rect_thickness,color:j.layout.debug_rect_color})}else Y&&(Y.destroy(),Y=null);let T=((pt=i.label)==null?void 0:pt.config)||e.objects.get("label_1")||e.objects.get("ui_tutorial_1");if(c&&c.position&&T){let q=(gt=(ut=T==null?void 0:T.transform)==null?void 0:ut.anchor)!=null?gt:"center",W=(ht=T==null?void 0:T.transform)==null?void 0:ht.position_ratio,z=((ft=T==null?void 0:T.transform)==null?void 0:ft.offset)||{x:0,y:0};Gt(c,p,g,{anchor:q,positionRatio:W,offset:{x:z.x*y,y:z.y*y},renderAnchor:Me(q)})}if(c&&c.alpha>0){let q=1+Math.sin(t*j.engine.label_pulse_speed)*j.engine.label_pulse_intensity,W=(B=(mt=T==null?void 0:T.transform)==null?void 0:mt.scale)!=null?B:1,z=q*y*W;c.scale&&(typeof c.scale.set=="function"?c.scale.set(z):(c.scale.x=z,c.scale.y=z))}r&&console.log("\u{1F3AF} [LAYOUT_DEBUGS] ===== BACKGROUND POSITIONING =====");let F=l?e.objects.get("background_1"):null,ue=!!F&&(l==null?void 0:l.parent)===o;if(l&&!ue){r&&(console.log("\u{1F3AF} [LAYOUT_DEBUGS] Background object exists:",!!l),console.log("\u{1F3AF} [LAYOUT_DEBUGS] Background type:",(X=l.constructor)==null?void 0:X.name)),l.alpha=((J=(U=b.background)==null?void 0:U.alpha)!=null?J:.98)*j.engine.background_alpha,r&&console.log("\u{1F3AF} [LAYOUT_DEBUGS] Background alpha set to:",l.alpha),r&&console.log("\u{1F3AF} [LAYOUT_DEBUGS] Background config:",F);let q=(F==null?void 0:F.transform)||{};r&&console.log("\u{1F3AF} [LAYOUT_DEBUGS] Background transform:",q);let W=q.offset||{x:0,y:0},z=((Oe=(Ue=b.background)==null?void 0:Ue.offset_y)!=null?Oe:0)+j.engine.background_offset_y,ge=(Fi=q.anchor)!=null?Fi:"center",k=q.position_ratio;if(r&&console.log("\u{1F3AF} [LAYOUT_DEBUGS] Background positioning params:",{bgOffset:W,bgRuntimeOffsetY:z,bgScreenAnchor:ge,bgPositionRatio:k,baseWidth:p,baseHeight:g,finalScale:y}),Gt(l,p,g,{anchor:ge,positionRatio:k,offset:{x:W.x*y,y:W.y*y+z},renderAnchor:Me(ge)}),r&&(console.log("\u{1F3AF} [LAYOUT_DEBUGS] Background position after applyScreenAnchor:",{x:l.x,y:l.y,scaleX:(Bi=l.scale)==null?void 0:Bi.x,scaleY:(Gi=l.scale)==null?void 0:Gi.y,anchorX:(Ui=l.anchor)==null?void 0:Ui.x,anchorY:(qi=l.anchor)==null?void 0:qi.y,pivotX:(Vi=l.pivot)==null?void 0:Vi.x,pivotY:(Wi=l.pivot)==null?void 0:Wi.y,width:l.width,height:l.height}),console.log("\u{1F3AF} [LAYOUT_DEBUGS] Background texture dimensions:",{textureWidth:u==null?void 0:u.width,textureHeight:u==null?void 0:u.height})),u){let Re=Math.max(m/u.width,f/u.height),ri=(Ki=(Yi=b.background)==null?void 0:Yi.scale_multiplier)!=null?Ki:1.05,Da=(Xi=q.scale)!=null?Xi:1,oi=Re*ri*j.engine.background_scale*Da;l.scale&&(typeof l.scale.set=="function"?l.scale.set(oi):(l.scale.x=oi,l.scale.y=oi))}else l&&typeof l.clear=="function"&&(l.clear(),l.rect(-m/2,-f/2,m,f).fill({color:1444375}));let ae=`${p}x${g}`,P=(Ji=sa.get(ae))!=null?Ji:ra,se={x:Number((Zi=l.x)!=null?Zi:0),y:Number((Qi=l.y)!=null?Qi:0),scaleX:Number((tn=(en=l.scale)==null?void 0:en.x)!=null?tn:1),scaleY:Number((an=(nn=l.scale)==null?void 0:nn.y)!=null?an:1),rotation:Number.isFinite(l.rotation)?l.rotation:void 0,anchorX:Number.isFinite((sn=l.anchor)==null?void 0:sn.x)?l.anchor.x:void 0,anchorY:Number.isFinite((rn=l.anchor)==null?void 0:rn.y)?l.anchor.y:void 0,pivotX:Number.isFinite((on=l.pivot)==null?void 0:on.x)?l.pivot.x:void 0,pivotY:Number.isFinite((ln=l.pivot)==null?void 0:ln.y)?l.pivot.y:void 0},Mt=Number.isFinite(se.x)&&Number.isFinite(se.y)&&Number.isFinite(se.scaleX)&&Number.isFinite(se.scaleY),te=se;if(P){let Re=Math.hypot(se.x-P.x,se.y-P.y),ri=Math.max(p,g)*.5;(!Mt||Re>ri)&&((cn=l.position)!=null&&cn.set?l.position.set(P.x,P.y):(l.x=P.x,l.y=P.y),l.scale&&(typeof l.scale.set=="function"?l.scale.set(P.scaleX,P.scaleY):(l.scale.x=P.scaleX,l.scale.y=P.scaleY)),Number.isFinite(P.rotation)&&typeof l.rotation=="number"&&(l.rotation=P.rotation),l.anchor&&Number.isFinite(P.anchorX)&&Number.isFinite(P.anchorY)&&l.anchor.set(P.anchorX,P.anchorY),l.pivot&&Number.isFinite(P.pivotX)&&Number.isFinite(P.pivotY)&&l.pivot.set(P.pivotX,P.pivotY),te=P)}Number.isFinite(te.x)&&Number.isFinite(te.y)&&Number.isFinite(te.scaleX)&&Number.isFinite(te.scaleY)&&(sa.set(ae,te),ra=te)}}re();re();var da=li(require("lottie-web"),1);Xt(Bn);typeof window!="undefined"&&!window.lottie&&(window.lottie=da.default);fi();re();var Mi=Sn.version,Ys=new Set(["init","boot","view","ready","start","pause","resume","complete","error","engagement","first_interaction","retry","cta_show","cta_click","cta_dismiss","clickout","conversion","session_time","level_time","load_time","level_start","level_complete","level_fail","checkpoint","reward","tutorial_start","tutorial_complete","tutorial_skip","ab_assign","fps","memory","asset_load_start","asset_load_complete"]);xn();var ba={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"},ya=Math.random().toString(36).slice(2),Ze=null,Xe={...ba},va="web_embed",Ri={},Et,ji=!1,St=!1,At=!1,wa=!1,Hi=1,Zt=0,ti=!1,ye=!1,Je="",Qe=Math.floor(window.innerWidth),et=Math.floor(window.innerHeight),zi=Qe>et,ve=!1,Ct=!1,pa=!1,ua=!1,_i=!1,Qt=null,Ge=null,$i=!1,Di=!1,Jt=new Map;function xa(){if(!Ge)return null;let i=Date.now()-Ge;return!Number.isFinite(i)||i<0?null:i}function Oi(i){if($i)return;let e=xa();e!==null&&($i=!0,x("session_time",{duration_ms:e,reason:i}))}function ga(){if(Ze)return Ze;let i=document.createElement("div");return i.id="handler-root",i.setAttribute("data-handler-root","true"),document.body.appendChild(i),Ze=i,i}function ei(i){switch(i){case"interaction":return"engagement";case"finish":return"complete";case"install":return"cta_click";default:return i}}function Sa(i,e){return{event_name:i,ts:Date.now(),session_id:ya,deployment_id:Xe.deployment_id,variant_id:Xe.variant_id,export_profile_id:Xe.profile_id,instance_id:Xe.instance_id||"default",env:va==="mraid"?"mraid":"web",attribution:Et,payload:e}}function x(i,e){let t=ei(i),n=Sa(t,e);di(n,!!Ri.analytics),Ot(t,n),t!==i&&Ot(i,n)}function Lt(){Qt&&(Qt(Qe,et),Qt=null)}function tt(i){Hi=i,x("volume",i)}function it(i){i&&(wa=!0),!At&&(At=!0,x("pause"),tt(0))}function Tt(i){!i&&wa||At&&(At=!1,x("resume"),tt(Hi))}function je(i,e){Qe=Math.floor(i||window.innerWidth),et=Math.floor(e||window.innerHeight),zi=Qe>et,x("resize",{width:Qe,height:et})}function Ks(){if(On())try{let i=mraid.getMaxSize();je(i.width,i.height);let e=()=>{mraid.isViewable()&&mraid.getState()!=="hidden"?Tt():it()};if(mraid.addEventListener("viewableChange",e),mraid.addEventListener("stateChange",e),mraid.addEventListener("sizeChange",()=>{let t=mraid.getMaxSize();je(t.width,t.height)}),mraid.getAudioVolume){let t=mraid.getAudioVolume();tt(t?1:0)}if(mraid.addEventListener("audioVolumeChange",t=>{t!==null&&tt(t>0?1:0)}),mraid.addEventListener("error",(t,n)=>{console.warn("mraid error:",t,"action:",n)}),ti=!0,mraid.isViewable()&&mraid.getState()!=="hidden")ve=!0,x("boot"),x("view"),x("ready"),ye=!0,Lt();else{let t=()=>{ve=!0,x("boot"),x("view"),x("ready"),ye=!0,Lt()};mraid.addEventListener("ready",t)}}catch(i){console.warn("MRAID hook skipped",i)}}function Xs(){if(Rn())try{let i=dapi.getScreenSize();je(i.width,i.height),dapi.addEventListener("viewableChange",t=>{t.isViewable?Tt():it()}),dapi.addEventListener("adResized",t=>{let n=dapi.getScreenSize();je(t.width||n.width,t.height||n.height)});let e=dapi.getAudioVolume();if(tt(e?1:0),dapi.addEventListener("audioVolumeChange",t=>tt(t?1:0)),ti=!0,dapi.isViewable())ve=!0,x("boot"),x("view"),x("ready"),ye=!0,Lt();else{let t=()=>{ve=!0,x("boot"),x("view"),x("ready"),ye=!0,Lt()};dapi.addEventListener("ready",t)}}catch(i){console.warn("DAPI hook skipped",i)}}function ha(){let i=()=>{ve||document.visibilityState==="visible"&&(document.readyState==="complete"||document.readyState==="interactive")&&(ve=!0,x("boot"),x("view"),x("ready"),ye=!0,Lt(),Ct&&(Ct=!1,pe.start()))};window.addEventListener("resize",()=>je()),document.addEventListener("visibilitychange",()=>{document.visibilityState==="visible"?(Tt(),i()):it()}),document.readyState==="complete"||document.readyState==="interactive"?i():window.addEventListener("load",i),ti=!0}function Js(){let i=e=>{typeof TouchEvent!="undefined"&&e instanceof TouchEvent&&(pa=!0),!(pa&&e instanceof MouseEvent)&&(Zt+=1,Di||(Di=!0,x("first_interaction",{count:Zt})),x("interaction",Zt))};document.addEventListener("mousedown",i),document.addEventListener("touchstart",i)}function fa(i){var n,a,s,r,o,c,l,u,d,p,g,m;let e=typeof AD_PROTOCOL!="undefined"?AD_PROTOCOL:"none";if((typeof AD_NETWORK!="undefined"?AD_NETWORK:"web_embed")==="google")try{(n=window.ExitApi)==null||n.exit();return}catch{}if(e==="mraid"&&typeof mraid!="undefined")mraid.open(i||"");else if(e==="dapi"&&typeof dapi!="undefined")dapi.openStoreUrl();else if(We())(s=(a=window.TJ_API)==null?void 0:a.click)==null||s.call(a);else if(zn())(o=(r=window.FbPlayableAd)==null?void 0:r.onCTAClick)==null||o.call(r);else if(Nn())(l=(c=window.ScPlayableAd)==null?void 0:c.onCTAClick)==null||l.call(c);else if(Hn())try{(d=(u=window.smxTracking)==null?void 0:u.redirect)==null||d.call(u)}catch(f){console.warn("Smadex redirect failed",f)}else if($n()){let f=window.ExitApi;f&&typeof f.exit=="function"?f.exit(i||Je||""):i&&window.open(i)}else Ve()?(p=window.install)==null||p.call(window):Dn()?(g=window.openAppStore)==null||g.call(window):pi()?(m=parent==null?void 0:parent.postMessage)==null||m.call(parent,"download","*"):i&&window.open(i)}function Zs(){let i=typeof AD_NETWORK!="undefined"?AD_NETWORK:"web_embed",e=t=>{if(!t)return;let n=new Image;n.src=t};if(i==="bigabid"){let t=window.BIGABID_BIDTIMEMACROS;if(!t)return;Z("view",()=>e(t.mraid_viewable)),Z("start",()=>e(t.game_viewable)),Z("engagement",()=>e(t.engagement));let n=()=>e(t.complete);Z("complete",n),_t("engagement",a=>{var s;((s=a==null?void 0:a.payload)==null?void 0:s.count)>3&&n()}),Z("cta_click",()=>e(t.click))}else if(i==="inmobi"){let t=window.INMOBI_DSPMACROS;if(!t)return;Z("view",()=>e(t.Ad_Load_Start)),Z("start",()=>e(t.Ad_Viewable)),Z("engagement",()=>e(t.First_Engagement)),Z("complete",()=>e(t.Gameplay_Complete)),Z("cta_click",()=>e(t.DSP_Click)),Z("start",()=>{[5,10,15,20,25,30].forEach(n=>setTimeout(()=>e(t[`Spent_${n}_Seconds`]),n*1e3))})}}function Qs(){if(!We())return;let i=window.TJ_API;i&&i.setPlayableAPI&&i.setPlayableAPI({skipAd:()=>{try{pe.finish()}catch(e){console.warn("Tapjoy skip failed",e)}}})}function ma(){var e,t,n;let i=window.TJ_API;(e=i==null?void 0:i.objectiveComplete)==null||e.call(i),(t=i==null?void 0:i.playableFinished)==null||t.call(i),(n=i==null?void 0:i.gameplayFinished)==null||n.call(i)}function er(){Ve()&&(window.mintGameStart=()=>{Tt(!0),je()},window.mintGameClose=()=>{it(!0)})}function tr(){if(!ui())return;let i=window.NUC;!i||!i.trigger||(pe.on("cta_click",()=>{var e,t;return(t=(e=i.trigger).convert)==null?void 0:t.call(e,Je)}),pe.on("complete",()=>{var e,t;return(t=(e=i.trigger).tryAgain)==null?void 0:t.call(e)}))}var pe={init(i={},e){var t;if(va=i.profile||"web_embed",Ri=i.consent||{},Xe={...ba,...i.ids||{}},Ze=i.rootEl||Ze,Et=void 0,hn((t=i.telemetry)!=null&&t.endpoint?i.telemetry:null),Ge=null,$i=!1,Di=!1,Jt.clear(),Je=i.destinationUrl||(/android/i.test(navigator.userAgent)?"https://play.google.com/store":"https://www.apple.com/app-store/"),e&&(Qt=e),x("init"),document.body.oncontextmenu=()=>!1,ga(),nr(Ze),Fn(),Ks(),Xs(),!ti){if(document.readyState==="complete")ha();else if(!ua){ua=!0;let n=()=>{ha(),window.removeEventListener("load",n),document.removeEventListener("DOMContentLoaded",n)};window.addEventListener("load",n),document.addEventListener("DOMContentLoaded",n)}}Js(),Zs(),Qs(),er(),tr(),console.log(`%c @handler/playable-sdk %c v${Mi} `,"background: var(--ui-console-info); color: var(--ui-white); font-size: 14px; padding: 4px 8px; border-top-left-radius: 4px; border-bottom-left-radius: 4px;","background: var(--ui-console-bg); color: var(--ui-console-text); font-size: 14px; padding: 4px 8px; border-top-right-radius: 4px; border-bottom-right-radius: 4px;"),ve&&!ye&&(x("boot"),x("view"),x("ready"),Ct&&(Ct=!1,pe.start()),ye=!0),ye=ve},getRoot(){return ga()},get version(){return Mi},get maxWidth(){return Qe},get maxHeight(){return et},get isLandscape(){return zi},get isReady(){return ye},get isStarted(){return ji},get isPaused(){return At},get isFinished(){return St},get volume(){return Hi},get interactions(){return Zt},on(i,e){_t(ei(i),e)},off(i,e){ci(ei(i),e)},start(){var i,e;if(!ji){if(!ve){Ct=!0;return}if(ji=!0,Ge||(Ge=Date.now()),x("start"),je(),Ve())it(),(i=window.gameReady)==null||i.call(window);else if(We()){let t=window.TJ_API;(e=t==null?void 0:t.setPlayableBuild)==null||e.call(t,{orientation:zi?"landscape":"portrait",buildID:Mi})}}},finish(){var i,e;St||(St=!0,x("complete"),Oi("complete"),Ve()?(i=window.gameEnd)==null||i.call(window):pi()?(e=parent==null?void 0:parent.postMessage)==null||e.call(parent,"complete","*"):We()&&ma())},install(i){if(!St){St=!0,We()?(ma(),setTimeout(()=>pe.install(i),300)):(x("complete"),setTimeout(()=>pe.install(i),0));return}_i||(_i=!0,setTimeout(()=>_i=!1,500),x("cta_click"),x("conversion"),Oi("cta"),fa(i||Je))},emit(i,e){let t=ei(i);if(!Ys.has(t)&&t!=="resize"&&t!=="volume"&&!t.startsWith("custom."))throw new Error(`Event ${i} must be canonical or namespaced as custom.<mechanic_id>.<event>`);let n=Sa(t,e);di(n,!!Ri.analytics),Ot(t,n)},gameStart(){pe.start()},gameEnd(){pe.finish()},ctaClick(i,e){x("cta_click",{url:i||Je,manual:!0}),(e==null?void 0:e.open)!==!1&&fa(i||Je)},ctaShow(i){x("cta_show",i)},ctaDismiss(i){x("cta_dismiss",i)},getGameTimeMs(){return xa()},endSession(i="manual"){Oi(i)},setAttribution(i){Et=i},abTest(i,e){if(!i)throw new Error("abTest requires experimentId");if(!Array.isArray(e)||e.length<2)throw new Error("abTest requires at least 2 variants");let t=Math.abs(ir(`${ya}:${i}`))%e.length,n=e[t];return Et={...Et||{},experiment_id:i},Xe.variant_id=n,x("ab_assign",{experiment_id:i,variant_id:n}),n},levelStart(i,e){Ge||(Ge=Date.now()),x("level_start",{level_id:i,...e})},levelComplete(i,e){x("level_complete",{level_id:i,...e})},levelFail(i,e){x("level_fail",{level_id:i,...e})},checkpoint(i,e){x("checkpoint",{checkpoint_id:i,...e})},reward(i,e){x("reward",{reward_id:i,...e})},tutorialStart(i,e){x("tutorial_start",{step_id:i,...e})},tutorialComplete(i,e){x("tutorial_complete",{step_id:i,...e})},tutorialSkip(i,e){x("tutorial_skip",{step_id:i,...e})},timerStart(i){i&&Jt.set(i,Date.now())},timerEnd(i,e="custom",t){if(!i)return;let n=Jt.get(i);if(!n)return;Jt.delete(i);let a=Date.now()-n;if(!(!Number.isFinite(a)||a<0)){if(e==="custom"){x("engagement",{action:"timer",key:i,duration_ms:a,...t});return}x(e,{key:i,duration_ms:a,...t})}},fps(i,e){x("fps",{value:i,...e})},memory(i,e){x("memory",{bytes:i,...e})},assetLoadStart(i,e){x("asset_load_start",{asset_id:i,...e})},assetLoadComplete(i,e){x("asset_load_complete",{asset_id:i,...e})},reportError(i,e,t){x("error",{code:i,message:e,...t})},retry(){var i,e,t;if(Ve())(i=window.gameRetry)==null||i.call(window);else if(ui()){let n=window.NUC;(t=(e=n==null?void 0:n.trigger)==null?void 0:e.tryAgain)==null||t.call(e)}x("engagement",{action:"retry"})},pause(){it(!0)},resume(){Tt(!0)},resize(i,e){je(i,e)}},xt=pe;function ir(i){let e=2166136261;for(let t=0;t<i.length;t++)e^=i.charCodeAt(t),e=Math.imul(e,16777619);return e|0}function nr(i){let e=document.createElement("script");e.type="text/javascript",e.textContent=`
229
+ `,this.modal=e,this.attachEventListeners(),this.initializeCanvas()}initializeCanvas(){this.modal&&(this.canvas=this.modal.querySelector(".asset-crop-canvas"),this.canvas&&(this.ctx=this.canvas.getContext("2d"),this.canvas.width=400,this.canvas.height=300))}loadImage(){this.options&&(this.image=new Image,this.image.crossOrigin="anonymous",this.image.onload=()=>{this.initializeCrop(),this.render()},this.image.src=this.options.imageSrc)}initializeCrop(){var n;if(!this.image||!this.canvas)return;let e=this.image.width/this.image.height,t=this.canvas.width/this.canvas.height;e>t?(this.cropHeight=this.image.height,this.cropWidth=this.cropHeight*t,this.cropX=(this.image.width-this.cropWidth)/2,this.cropY=0):(this.cropWidth=this.image.width,this.cropHeight=this.cropWidth/t,this.cropX=0,this.cropY=(this.image.height-this.cropHeight)/2),(n=this.options)!=null&&n.aspectRatio&&this.applyAspectRatio(this.options.aspectRatio),this.fitToCanvas()}applyAspectRatio(e){if(!this.image)return;let t=this.image.width/this.image.height,n=this.cropX+this.cropWidth/2,a=this.cropY+this.cropHeight/2;e>t?(this.cropWidth=Math.min(this.image.width,this.cropHeight*e),this.cropHeight=this.cropWidth/e):(this.cropHeight=Math.min(this.image.height,this.cropWidth/e),this.cropWidth=this.cropHeight*e),this.cropX=Math.max(0,Math.min(this.image.width-this.cropWidth,n-this.cropWidth/2)),this.cropY=Math.max(0,Math.min(this.image.height-this.cropHeight,a-this.cropHeight/2))}fitToCanvas(){if(!this.image||!this.canvas)return;let e=this.canvas.width/this.cropWidth,t=this.canvas.height/this.cropHeight;this.scale=Math.min(e,t)*.9,this.panX=(this.canvas.width-this.cropWidth*this.scale)/2,this.panY=(this.canvas.height-this.cropHeight*this.scale)/2}render(){!this.ctx||!this.image||!this.canvas||(this.ctx.clearRect(0,0,this.canvas.width,this.canvas.height),this.ctx.save(),this.ctx.translate(this.panX,this.panY),this.ctx.scale(this.scale,this.scale),this.ctx.drawImage(this.image,-this.cropX,-this.cropY,this.image.width,this.image.height),this.ctx.restore(),this.drawCropOverlay(),this.updatePreview())}drawCropOverlay(){if(!this.ctx||!this.canvas)return;let e=this.panX,t=this.panY,n=this.cropWidth*this.scale,a=this.cropHeight*this.scale;this.ctx.fillStyle="rgba(0, 0, 0, 0.5)",this.ctx.fillRect(0,0,this.canvas.width,this.canvas.height),this.ctx.clearRect(e,t,n,a),this.ctx.strokeStyle="#ffffff",this.ctx.lineWidth=2,this.ctx.strokeRect(e,t,n,a),this.ctx.fillStyle="#ffffff";let s=8;[[e,t],[e+n-s,t],[e,t+a-s],[e+n-s,t+a-s]].forEach(([o,c])=>{var l;(l=this.ctx)==null||l.fillRect(o,c,s,s)})}updatePreview(){if(!this.modal||!this.image)return;let e=this.modal.querySelector(".asset-crop-preview-canvas");if(!e)return;let t=e.getContext("2d");if(!t)return;let n=150;e.width=n,e.height=n;let a=n/this.cropWidth,s=n/this.cropHeight,r=Math.min(a,s),o=this.cropWidth*r,c=this.cropHeight*r,l=(n-o)/2,u=(n-c)/2;t.drawImage(this.image,this.cropX,this.cropY,this.cropWidth,this.cropHeight,l,u,o,c)}attachEventListeners(){if(!this.modal||!this.canvas)return;this.canvas.addEventListener("mousedown",this.handleMouseDown.bind(this)),this.canvas.addEventListener("mousemove",this.handleMouseMove.bind(this)),this.canvas.addEventListener("mouseup",this.handleMouseUp.bind(this)),this.canvas.addEventListener("wheel",this.handleWheel.bind(this)),this.canvas.addEventListener("touchstart",this.handleTouchStart.bind(this)),this.canvas.addEventListener("touchmove",this.handleTouchMove.bind(this)),this.canvas.addEventListener("touchend",this.handleTouchEnd.bind(this));let e=this.modal.querySelector(".asset-crop-zoom-slider");e==null||e.addEventListener("input",n=>{let a=parseFloat(n.target.value);this.setZoom(a)});let t=this.modal.querySelector(".asset-crop-aspect-select");t==null||t.addEventListener("change",n=>{let a=n.target.value;this.setAspectRatio(a)}),this.modal.addEventListener("click",n=>{switch(n.target.dataset.action){case"reset":this.reset();break;case"apply":this.applyCrop();break;case"cancel":case"close":this.close();break}}),this.modal.addEventListener("click",n=>{n.target===this.modal&&this.close()})}handleMouseDown(e){this.isDragging=!0,this.dragStartX=e.clientX,this.dragStartY=e.clientY,this.lastPanX=this.panX,this.lastPanY=this.panY,this.canvas.style.cursor="grabbing"}handleMouseMove(e){if(!this.isDragging)return;let t=e.clientX-this.dragStartX,n=e.clientY-this.dragStartY;this.panX=this.lastPanX+t,this.panY=this.lastPanY+n,this.constrainPan(),this.render()}handleMouseUp(){this.isDragging=!1,this.canvas.style.cursor="grab"}handleWheel(e){e.preventDefault();let t=e.deltaY>0?.9:1.1;this.setZoom(this.scale*t)}handleTouchStart(e){e.touches.length===1&&(this.isDragging=!0,this.dragStartX=e.touches[0].clientX,this.dragStartY=e.touches[0].clientY,this.lastPanX=this.panX,this.lastPanY=this.panY)}handleTouchMove(e){if(!this.isDragging||e.touches.length!==1)return;e.preventDefault();let t=e.touches[0].clientX-this.dragStartX,n=e.touches[0].clientY-this.dragStartY;this.panX=this.lastPanX+t,this.panY=this.lastPanY+n,this.constrainPan(),this.render()}handleTouchEnd(){this.isDragging=!1}setZoom(e){this.scale=Math.max(.1,Math.min(3,e)),this.updateZoomUI(),this.constrainPan(),this.render()}setAspectRatio(e){let t;switch(e){case"1:1":t=1;break;case"4:3":t=4/3;break;case"16:9":t=16/9;break;case"3:2":t=3/2;break;default:t=void 0}t&&this.applyAspectRatio(t),this.fitToCanvas(),this.render()}updateZoomUI(){if(!this.modal)return;let e=this.modal.querySelector(".asset-crop-zoom-value"),t=this.modal.querySelector(".asset-crop-zoom-slider");e&&(e.textContent=`${this.scale.toFixed(1)}x`),t&&(t.value=this.scale.toString())}constrainPan(){if(!this.canvas)return;let e=this.cropWidth*this.scale,t=this.cropHeight*this.scale;this.panX=Math.max(this.canvas.width-e,Math.min(0,this.panX)),this.panY=Math.max(this.canvas.height-t,Math.min(0,this.panY))}reset(){this.initializeCrop(),this.render()}applyCrop(){var a;if(!this.image||!((a=this.options)!=null&&a.onCrop))return;let e=document.createElement("canvas"),t=e.getContext("2d");if(!t)return;e.width=this.cropWidth,e.height=this.cropHeight,t.drawImage(this.image,this.cropX,this.cropY,this.cropWidth,this.cropHeight,0,0,this.cropWidth,this.cropHeight);let n=e.toDataURL("image/png");this.options.onCrop(n),this.close()}close(){this.modal&&this.modal.parentNode&&this.modal.parentNode.removeChild(this.modal);let e=this.options;this.modal=null,this.canvas=null,this.ctx=null,this.image=null,this.options=null,e!=null&&e.onCancel&&e.onCancel()}};window.openAssetCrop=function(i){new Pi().open(i)};re();var Be=require("pixi.js");var vt=require("pixi.js");Ht();var Ls=typeof __BUILD_MODE__!="undefined"?__BUILD_MODE__:"undefined",Ii=Ls;if(typeof window!="undefined")try{let i=new XMLHttpRequest;if(i.open("GET","./build-settings.json",!1),i.send(),i.status===200&&i.responseText){let e=JSON.parse(i.responseText);e!=null&&e.buildMode&&(Ii=e.buildMode,console.log(`[ObjectFactory] Build mode overridden by settings: ${Ii}`))}}catch{}function Ts(i){var t,n,a,s,r;if(typeof window!="undefined"&&window.resolveAnchorVec2)return window.resolveAnchorVec2(i);let e={center:{x:.5,y:.5},"top-left":{x:0,y:0},"top-center":{x:.5,y:0},"top-right":{x:1,y:0},"center-left":{x:0,y:.5},"center-right":{x:1,y:.5},"bottom-left":{x:0,y:1},"bottom-center":{x:.5,y:1},"bottom-right":{x:1,y:1},left:{x:0,y:.5},right:{x:1,y:.5},top:{x:.5,y:0},bottom:{x:.5,y:1}};if(Array.isArray(i))return{x:(t=i[0])!=null?t:.5,y:(n=i[1])!=null?n:.5};if(i&&typeof i=="object"&&"x"in i&&"y"in i)return{x:(a=i.x)!=null?a:.5,y:(s=i.y)!=null?s:.5};if(typeof i=="string"){let o=i.trim().toLowerCase();return(r=e[o])!=null?r:{x:.5,y:.5}}return null}var be=class{static async create(e,t,n){var c,l,u,d,p,g,m;console.log(`[ObjectFactory] create() called for: ${e}, __BUILD_MODE__: ${Ii}`);let a=(c=t==null?void 0:t.render)==null?void 0:c.asset;if(!a){console.log(`[ObjectFactory] No asset definition for: ${e}, returning empty container`);let f=new vt.Container;return this.applyTransform(f,t==null?void 0:t.transform,t),f}let s=(l=t==null?void 0:t.identity)==null?void 0:l.id;console.log(`[ObjectFactory] Calling AssetLoader.load() for: ${e}, configId: ${s}, type: ${a.type}, path: ${a.path}`);let r=await Pe.load(e,a,n,s);console.log(`[ObjectFactory] AssetLoader.load() completed for: ${e}, rawAsset type: ${(u=r==null?void 0:r.constructor)==null?void 0:u.name}`);let o;if(a.type==="image")console.log("[ObjectFactory] Creating Sprite from texture:",r,"for object:",e),o=new vt.Sprite(r),console.log("[ObjectFactory] Created object:",o,"type:",(d=o==null?void 0:o.constructor)==null?void 0:d.name),this.applyTransform(o,t==null?void 0:t.transform,t);else if(a.type==="json")if(console.log("[ObjectFactory] JSON asset for",e,"rawAsset type:",(p=r==null?void 0:r.constructor)==null?void 0:p.name,r),r&&(((g=r.constructor)==null?void 0:g.name)==="Container"||r instanceof vt.Container)){console.warn("[ObjectFactory] JSON asset is Container (from cache), reloading JSON directly");let f=[a.path,`/assets/${a.path}`,`assets/${a.path}`,`../assets/${a.path}`],C=!1;for(let b of f)try{let h=await fetch(b);if(h.ok){o=await h.json(),console.log("[ObjectFactory] Reloaded JSON directly from:",b,"type:",(m=o==null?void 0:o.constructor)==null?void 0:m.name),C=!0;break}}catch{continue}C||(console.error("[ObjectFactory] Failed to reload JSON from any path"),o=r)}else o=r;else o=r,o&&typeof o=="object"&&("x"in o||"position"in o)&&this.applyTransform(o,t==null?void 0:t.transform,t);return o}static applyTransform(e,t,n){var a,s,r,o;if(!(!t||!e)&&(t.position&&("x"in e&&"y"in e?(e.x=(a=t.position.x)!=null?a:0,e.y=(s=t.position.y)!=null?s:0):"position"in e&&e.position&&e.position.set((r=t.position.x)!=null?r:0,(o=t.position.y)!=null?o:0)),t.scale!==void 0&&"scale"in e&&e.scale&&(typeof e.scale=="object"&&"set"in e.scale?e.scale.set(t.scale):e.scale=t.scale),t.rotation!==void 0&&"rotation"in e&&(e.rotation=t.rotation),t.anchor&&"anchor"in e&&e.anchor)){let c=Ts(t.anchor);c&&("set"in e.anchor?e.anchor.set(c.x,c.y):(e.anchor.x=c.x,e.anchor.y=c.y))}}};re();var Ut=require("pixi.js"),ce={width:400,height:600,designWidth:400,scaleFactor:1},Ke={scale:1,position:1},qt=[];function ks(i,e,t,n,a,s,r){qt.push({element:i,originalScale:s,positionHelper:e,heightPercent:a}),e(i,t,n,a,s,r,!1)}function Ps(){qt.forEach(({element:i,originalScale:e,positionHelper:t,heightPercent:n})=>{let a=e*ce.scaleFactor;t(i,ce.width,ce.height,n,a,!0,!1)})}function sa(){qt.length=0,console.log("[LAYOUT] Cleared all responsive elements")}function Bt(i,e){console.log(`[SCREEN] updateScreenState called: ${i}x${e}`),ce.width=i,ce.height=e,ce.scaleFactor=Math.min(i/ce.designWidth,1.15),Ke.scale=ce.scaleFactor,Ke.position=1,console.log(`[SCREEN] Global multipliers - scale: ${Ke.scale.toFixed(3)}`),Ps()}var j={layout:{scale_multiplier:1,position_offset:{x:0,y:0},debug_rect_visible:!0,debug_rect_color:16711680,debug_rect_thickness:4,debug_rect_scale_x:1,debug_rect_scale_y:1,screen_scale_x:1,screen_scale_y:1},engine:{scale:1,background_scale:1.05,background_offset_y:0,background_alpha:.98,label_pulse_speed:3,label_pulse_intensity:.03}};function Is(i,e,t){let n=j[i];n&&n[e]!==void 0&&(n[e]=t,console.log(`Updated ${i}.${e} = ${t}`))}function Ms(){return j}var js={center:{x:.5,y:.5},"center-center":{x:.5,y:.5},middle:{x:.5,y:.5},"middle-center":{x:.5,y:.5},"top-left":{x:0,y:0},"top-center":{x:.5,y:0},"top-right":{x:1,y:0},"bottom-left":{x:0,y:1},"bottom-center":{x:.5,y:1},"bottom-right":{x:1,y:1},"left-center":{x:0,y:.5},"right-center":{x:1,y:.5},"center-left":{x:0,y:.5},"center-right":{x:1,y:.5},left:{x:0,y:.5},right:{x:1,y:.5},top:{x:.5,y:0},bottom:{x:.5,y:1}};function Ft(i,e){return typeof i=="number"&&Number.isFinite(i)?i:e}function Me(i,e={x:.5,y:.5}){var t;if(Array.isArray(i))return{x:Ft(i[0],e.x),y:Ft(i[1],e.y)};if(i&&typeof i=="object"){let n=i;return{x:Ft(n.x,e.x),y:Ft(n.y,e.y)}}if(typeof i=="string"){let n=i.trim().toLowerCase();return(t=js[n])!=null?t:e}return e}function Ne(i,e,t,n={}){var g,m,f,C,b,h;let a=Me(t),s=(g=n.inset)!=null?g:{},r=(m=n.padding)!=null?m:{x:0,y:0},o=((f=s.left)!=null?f:0)+r.x,c=((C=s.right)!=null?C:0)+r.x,l=((b=s.top)!=null?b:0)+r.y,u=((h=s.bottom)!=null?h:0)+r.y,d=Math.max(0,i-o-c),p=Math.max(0,e-l-u);return{x:o+d*a.x,y:l+p*a.y}}function Fe(i,e,t,n={}){var f,C,b,h,v,w;let a=(f=n.inset)!=null?f:{},s=(C=n.padding)!=null?C:{x:0,y:0},r=((b=a.left)!=null?b:0)+s.x,o=((h=a.right)!=null?h:0)+s.x,c=((v=a.top)!=null?v:0)+s.y,l=((w=a.bottom)!=null?w:0)+s.y,u=Math.max(0,i-r-o),d=Math.max(0,e-c-l),p=Me(t,{x:.5,y:.5}),g=Math.min(Math.max(p.x,0),1),m=Math.min(Math.max(p.y,0),1);return{x:r+u*g,y:c+d*m}}function Gt(i,e,t,n={}){var u,d,p;if(!i)return;let a=n.positionRatio?Fe(e,t,n.positionRatio,{inset:n.inset,padding:n.screenPadding}):Ne(e,t,n.anchor,{inset:n.inset,padding:n.screenPadding}),s=(u=n.offset)!=null?u:{x:0,y:0},r=a.x+s.x,o=a.y+s.y;i.anchor&&n.renderAnchor&&i.anchor.set(n.renderAnchor.x,n.renderAnchor.y),ie(i,r,o);let c=(d=n.scale)!=null?d:1,l=(p=n.scaleMultiplier)!=null?p:1;(n.scale!==void 0||n.scaleMultiplier!==void 0)&&de(i,c*l)}if(typeof window!="undefined"){let i=window.innerWidth,e=window.innerHeight,t=()=>{let n=window.innerWidth,a=window.innerHeight;(n!==i||a!==e)&&(i=n,e=a,Bt(n,a))};window.addEventListener("resize",t),window.addEventListener("orientationchange",()=>{setTimeout(t,100)}),window.mraid&&(window.mraid.addEventListener("viewableChange",t),window.mraid.addEventListener("sizeChange",t)),Bt(window.innerWidth,window.innerHeight),window.updateDebugConfig=Is,window.getDebugConfig=Ms,window.copyConfig=Gs,window.applyConfig=wt,window.applyConfigForRatio=Us,window.positionAtBottom=ra,window.positionAtTop=Rs,window.positionAtCenter=zs,window.positionAtLeft=$s,window.positionAtRight=Ds,window.positionAtBottomLeft=Hs,window.positionAtBottomRight=Ns,window.positionAtTopLeft=Fs,window.positionAtTopRight=Bs,window.applyPositionContract=Os,console.log("\u{1F3AE} Debug Config Functions Available:"),console.log("\u2022 updateDebugConfig(category, key, value)"),console.log("\u2022 getDebugConfig()"),console.log("\u2022 copyConfig(presetName)"),console.log("\u2022 applyConfig(config)"),console.log("\u2022 applyConfigForRatio(width, height)"),console.log("\u{1F4CD} Positioning Helpers Available (with scale):"),console.log("\u2022 positionAtBottom(element, w, h, percent, scale)"),console.log("\u2022 positionAtTop(element, w, h, percent, scale)"),console.log("\u2022 positionAtCenter(element, w, h, offsetX, offsetY, scale)"),console.log("\u2022 positionAtLeft/Right(element, w, h, percent, scale)"),console.log("\u2022 Corner positions: BottomLeft/Right, TopLeft/Right (all with scale)"),console.log("\u2022 applyPositionContract(element, w, h, contract)"),console.log("Example: positionAtCenter(mySprite, 400, 600, 0, -50, 1.2)")}function Vt(i,e,t=0){return i*e+t}function Wt(i,e,t=0){return i*(1-e)+t}function Yt(i,e,t=0){return i*e+t}function Kt(i,e,t=0){return i*(1-e)+t}function ee(i,e=0){return i/2+e}function _s(i,e){return i*e}function Os(i,e,t,n){var r,o,c,l,u,d,p,g,m,f,C,b,h,v,w,y,I,_,G,R;let a=0,s=0;switch(n.type){case"top":a=ee(e,(o=(r=n.offset)==null?void 0:r.x)!=null?o:0),s=Vt(t,n.percent,(l=(c=n.offset)==null?void 0:c.y)!=null?l:0);break;case"bottom":a=ee(e,(d=(u=n.offset)==null?void 0:u.x)!=null?d:0),s=Wt(t,n.percent,(g=(p=n.offset)==null?void 0:p.y)!=null?g:0);break;case"left":a=Yt(e,n.percent,(f=(m=n.offset)==null?void 0:m.x)!=null?f:0),s=ee(t,(b=(C=n.offset)==null?void 0:C.y)!=null?b:0);break;case"right":a=Kt(e,n.percent,(v=(h=n.offset)==null?void 0:h.x)!=null?v:0),s=ee(t,(y=(w=n.offset)==null?void 0:w.y)!=null?y:0);break;case"center":a=ee(e,(_=(I=n.offset)==null?void 0:I.x)!=null?_:0),s=ee(t,(R=(G=n.offset)==null?void 0:G.y)!=null?R:0);break}i.position?i.position.set(a,s):(i.x=a,i.y=s),n.scale!==void 0&&n.scale!==1&&i.scale&&(typeof i.scale.set=="function"?i.scale.set(n.scale,n.scale):(i.scale.x=n.scale,i.scale.y=n.scale))}function ra(i,e,t,n=.2,a=1,s=!0,r=!1){let o=_s(t,n),c=Wt(t,n/2);ie(i,ee(e),c);let l=s?a*ce.scaleFactor:a;de(i,l),r&&!qt.find(u=>u.element===i)&&ks(i,ra,e,t,n,a,s)}function Rs(i,e,t,n=.1,a=1){ie(i,ee(e),Vt(t,n)),de(i,a)}function zs(i,e,t,n=0,a=0,s=1){ie(i,ee(e,n),ee(t,a)),de(i,s)}function $s(i,e,t,n=.1,a=1){ie(i,Yt(e,n),ee(t)),de(i,a)}function Ds(i,e,t,n=.1,a=1){ie(i,Kt(e,n),ee(t)),de(i,a)}function Hs(i,e,t,n=.05,a=.05,s=1){ie(i,Yt(e,a),Wt(t,n)),de(i,s)}function Ns(i,e,t,n=.05,a=.05,s=1){ie(i,Kt(e,a),Wt(t,n)),de(i,s)}function Fs(i,e,t,n=.05,a=.05,s=1){ie(i,Yt(e,a),Vt(t,n)),de(i,s)}function Bs(i,e,t,n=.05,a=.05,s=1){ie(i,Kt(e,a),Vt(t,n)),de(i,s)}function ie(i,e,t){i&&i.position?typeof i.position.set=="function"?i.position.set(e,t):(i.position.x=e,i.position.y=t):i&&(i.x=e,i.y=t)}function de(i,e){e!==1&&i&&i.scale&&(typeof i.scale.set=="function"?i.scale.set(e,e):i.scale.x!==void 0&&i.scale.y!==void 0&&(i.scale.x=e,i.scale.y=e))}var He={default:{layout:{scale_multiplier:1,position_offset:{x:0,y:0},debug_rect_visible:!0,debug_rect_color:16711680,debug_rect_thickness:4,debug_rect_scale_x:1,debug_rect_scale_y:1,screen_scale_x:1,screen_scale_y:1},engine:{scale:1,background_scale:1.05,background_offset_y:0,background_alpha:.98,label_pulse_speed:3,label_pulse_intensity:.03}},wide:{layout:{scale_multiplier:1,position_offset:{x:0,y:0},debug_rect_visible:!0,debug_rect_color:16711680,debug_rect_thickness:4,debug_rect_scale_x:1,debug_rect_scale_y:1,screen_scale_x:.9,screen_scale_y:1.1},engine:{scale:1,background_scale:1.1,background_offset_y:0,background_alpha:.95,label_pulse_speed:3,label_pulse_intensity:.03}},square:{layout:{scale_multiplier:1,position_offset:{x:0,y:0},debug_rect_visible:!0,debug_rect_color:16711680,debug_rect_thickness:4,debug_rect_scale_x:1,debug_rect_scale_y:1,screen_scale_x:.85,screen_scale_y:.85},engine:{scale:1,background_scale:1,background_offset_y:0,background_alpha:1,label_pulse_speed:3,label_pulse_intensity:.03}},tall:{layout:{scale_multiplier:1,position_offset:{x:0,y:0},debug_rect_visible:!0,debug_rect_color:16711680,debug_rect_thickness:4,debug_rect_scale_x:1,debug_rect_scale_y:1,screen_scale_x:1.1,screen_scale_y:.9},engine:{scale:1,background_scale:.95,background_offset_y:0,background_alpha:1,label_pulse_speed:3,label_pulse_intensity:.03}}};function Gs(i){return i&&He[i]?JSON.parse(JSON.stringify(He[i])):JSON.parse(JSON.stringify(j))}function wt(i){Object.keys(i).forEach(e=>{let t=e;j[t]&&i[t]&&Object.assign(j[t],i[t])}),console.log("Config applied:",i)}function Us(i,e){let t=i/e;t>1.6?(wt(He.wide),console.log("Applied WIDE config for ratio:",t)):t<.7?(wt(He.tall),console.log("Applied TALL config for ratio:",t)):t>.8&&t<1.2?(wt(He.square),console.log("Applied SQUARE config for ratio:",t)):(wt(He.default),console.log("Applied DEFAULT config for ratio:",t))}if(typeof window!="undefined"){let i=window;i.configPresets=He,i.resolveAnchorVec2=i.resolveAnchorVec2||Me,i.resolveScreenAnchorPoint=i.resolveScreenAnchorPoint||Ne,i.resolveScreenRatioPoint=i.resolveScreenRatioPoint||Fe}var Y=null,aa=new Map;function oa(i,e,t,n,a,s={}){var xe,Se,Ee,Ce,Ae,Le,V,_e,ot,lt,ct,dt,pt,ut,gt,ht,ft,mt,B,X,U,J,Ue,Oe,Fi,Bi,Gi,Ui,qi,Vi,Wi,Yi,Ki,Xi,Ji,Zi,Qi,en,tn,nn,an,sn,rn,on,ln;let r=(xe=s.enableDebugLogs)!=null?xe:!1;r&&(console.log("\u{1F3AF} [LAYOUT_DEBUGS] ===== STARTING LAYOUT CALCULATION ====="),console.log("\u{1F3AF} [LAYOUT_DEBUGS] Screen dimensions:",{width:n.width,height:n.height}),console.log("\u{1F3AF} [LAYOUT_DEBUGS] Time:",t),console.log("\u{1F3AF} [LAYOUT_DEBUGS] Options:",s));let{mainContainer:o,label:c,background:l,backgroundTexture:u,app:d}=i;if(!d||!d.renderer){r&&console.log("\u{1F3AF} [LAYOUT_DEBUGS] \u274C No app or renderer, skipping layout");return}r&&(console.log("\u{1F3AF} [LAYOUT_DEBUGS] App renderer dimensions:",{width:d.renderer.width,height:d.renderer.height}),console.log("\u{1F3AF} [LAYOUT_DEBUGS] App screen dimensions:",{width:d.screen.width,height:d.screen.height}));let p=n.width,g=n.height;r&&console.log("\u{1F3AF} [LAYOUT_DEBUGS] Base dimensions:",{baseWidth:p,baseHeight:g});let m=p*j.layout.screen_scale_x,f=g*j.layout.screen_scale_y,C=p/2,b=e.engine.runtime||{},h=b.layout||{};r&&(console.log("\u{1F3AF} [LAYOUT_DEBUGS] Debug config:",{screen_scale_x:j.layout.screen_scale_x,screen_scale_y:j.layout.screen_scale_y}),console.log("\u{1F3AF} [LAYOUT_DEBUGS] Calculated dimensions:",{width:m,height:f,midX:C}),console.log("\u{1F3AF} [LAYOUT_DEBUGS] Engine runtime:",b),console.log("\u{1F3AF} [LAYOUT_DEBUGS] Layout config:",h));let v=h.design_width_portrait||400,w=m/v;w=Math.min(w,1.15);let y=w*((Se=j.engine.scale)!=null?Se:1),I=(Ee=s.skipMainContainerTransform)!=null?Ee:!1;!I&&o&&o.scale&&(typeof o.scale.set=="function"?o.scale.set(y):(o.scale.x=y,o.scale.y=y));let _=(Ce=h.main_container_anchor)!=null?Ce:"center",G=(Ae=h.main_container_position_ratio)!=null?Ae:{x:.5,y:.5},R=(Le=h.main_container_offset)!=null?Le:{x:0,y:0},N=h.main_container_position_ratio?Fe(p,g,G):Ne(p,g,_),$=N.x+R.x+j.layout.position_offset.x,L=N.y+R.y+j.layout.position_offset.y;if(!I&&o&&o.position&&(typeof o.position.set=="function"?o.position.set($,L):(o.position.x=$,o.position.y=L)),a&&(o!=null&&o.toLocal))for(let[q,W]of e.objects.entries()){let z=W==null?void 0:W.transform;if(!z||((V=z.position_mode)!=null?V:"static")!=="static")continue;let k=(_e=a.get)==null?void 0:_e.call(a,q),ne=((ot=k==null?void 0:k.getDisplayObject)==null?void 0:ot.call(k))||(k==null?void 0:k.pixiObject)||k;if(!ne||ne.parent!==o)continue;let P=z.position_ratio!=null?Fe(p,g,z.position_ratio):Ne(p,g,(lt=z.anchor)!=null?lt:"center"),ae=o.toLocal(new Ut.Point(P.x,P.y)),Mt=(ct=z.position)!=null?ct:{x:0,y:0},se=ae.x+Mt.x,Re=ae.y+Mt.y;typeof(k==null?void 0:k.setPosition)=="function"?k.setPosition(se,Re):(ie(ne,se,Re),(dt=k==null?void 0:k.transform)!=null&&dt.position&&(k.transform.position.x=se,k.transform.position.y=Re))}let S=typeof window!="undefined"?window.__BUILD_SETTINGS__:null,A=((S==null?void 0:S.buildMode)||(typeof __BUILD_MODE__!="undefined"?__BUILD_MODE__:"dev"))==="dev";if(j.layout.debug_rect_visible&&A){(!Y||Y.parent!==d.stage)&&(Y==null||Y.destroy(),Y=new Ut.Graphics,Y.zIndex=9999,d.stage.addChild(Y)),Y.clear();let q=j.layout.debug_rect_scale_x,W=j.layout.debug_rect_scale_y,z=(p-4)*q,ge=(g-4)*W,k=(p-z)/2,ne=(g-ge)/2;r&&(console.log("\u{1F3AF} [LAYOUT_DEBUGS] ===== DEBUG RECT POSITIONING ====="),console.log("\u{1F3AF} [LAYOUT_DEBUGS] Debug rect calculations:",{baseWidth:p,baseHeight:g,rectW:z,rectH:ge,offsetX:k,offsetY:ne}),console.log("\u{1F3AF} [LAYOUT_DEBUGS] Debug rect final position:",{x:2+k,y:2+ne,width:z,height:ge})),Y.rect(2+k,2+ne,z,ge).stroke({width:j.layout.debug_rect_thickness,color:j.layout.debug_rect_color})}else Y&&(Y.destroy(),Y=null);let T=((pt=i.label)==null?void 0:pt.config)||e.objects.get("label_1")||e.objects.get("ui_tutorial_1");if(c&&c.position&&T){let q=(gt=(ut=T==null?void 0:T.transform)==null?void 0:ut.anchor)!=null?gt:"center",W=(ht=T==null?void 0:T.transform)==null?void 0:ht.position_ratio,z=((ft=T==null?void 0:T.transform)==null?void 0:ft.offset)||{x:0,y:0};Gt(c,p,g,{anchor:q,positionRatio:W,offset:{x:z.x*y,y:z.y*y},renderAnchor:Me(q)})}if(c&&c.alpha>0){let q=1+Math.sin(t*j.engine.label_pulse_speed)*j.engine.label_pulse_intensity,W=(B=(mt=T==null?void 0:T.transform)==null?void 0:mt.scale)!=null?B:1,z=q*y*W;c.scale&&(typeof c.scale.set=="function"?c.scale.set(z):(c.scale.x=z,c.scale.y=z))}r&&console.log("\u{1F3AF} [LAYOUT_DEBUGS] ===== BACKGROUND POSITIONING =====");let F=l?e.objects.get("background_1"):null,ue=!!F&&(l==null?void 0:l.parent)===o;if(l&&!ue){r&&(console.log("\u{1F3AF} [LAYOUT_DEBUGS] Background object exists:",!!l),console.log("\u{1F3AF} [LAYOUT_DEBUGS] Background type:",(X=l.constructor)==null?void 0:X.name)),l.alpha=((J=(U=b.background)==null?void 0:U.alpha)!=null?J:.98)*j.engine.background_alpha,r&&console.log("\u{1F3AF} [LAYOUT_DEBUGS] Background alpha set to:",l.alpha),r&&console.log("\u{1F3AF} [LAYOUT_DEBUGS] Background config:",F);let q=(F==null?void 0:F.transform)||{};r&&console.log("\u{1F3AF} [LAYOUT_DEBUGS] Background transform:",q);let W=q.offset||{x:0,y:0},z=((Oe=(Ue=b.background)==null?void 0:Ue.offset_y)!=null?Oe:0)+j.engine.background_offset_y,ge=(Fi=q.anchor)!=null?Fi:"center",k=q.position_ratio;if(r&&console.log("\u{1F3AF} [LAYOUT_DEBUGS] Background positioning params:",{bgOffset:W,bgRuntimeOffsetY:z,bgScreenAnchor:ge,bgPositionRatio:k,baseWidth:p,baseHeight:g,finalScale:y}),Gt(l,p,g,{anchor:ge,positionRatio:k,offset:{x:W.x*y,y:W.y*y+z},renderAnchor:Me(ge)}),r&&(console.log("\u{1F3AF} [LAYOUT_DEBUGS] Background position after applyScreenAnchor:",{x:l.x,y:l.y,scaleX:(Bi=l.scale)==null?void 0:Bi.x,scaleY:(Gi=l.scale)==null?void 0:Gi.y,anchorX:(Ui=l.anchor)==null?void 0:Ui.x,anchorY:(qi=l.anchor)==null?void 0:qi.y,pivotX:(Vi=l.pivot)==null?void 0:Vi.x,pivotY:(Wi=l.pivot)==null?void 0:Wi.y,width:l.width,height:l.height}),console.log("\u{1F3AF} [LAYOUT_DEBUGS] Background texture dimensions:",{textureWidth:u==null?void 0:u.width,textureHeight:u==null?void 0:u.height})),u){let Re=Math.max(m/u.width,f/u.height),ri=(Ki=(Yi=b.background)==null?void 0:Yi.scale_multiplier)!=null?Ki:1.05,za=(Xi=q.scale)!=null?Xi:1,oi=Re*ri*j.engine.background_scale*za;l.scale&&(typeof l.scale.set=="function"?l.scale.set(oi):(l.scale.x=oi,l.scale.y=oi))}else l&&typeof l.clear=="function"&&(l.clear(),l.rect(-m/2,-f/2,m,f).fill({color:1444375}));let ne=`${p}x${g}`,P=aa.get(ne),ae={x:Number((Ji=l.x)!=null?Ji:0),y:Number((Zi=l.y)!=null?Zi:0),scaleX:Number((en=(Qi=l.scale)==null?void 0:Qi.x)!=null?en:1),scaleY:Number((nn=(tn=l.scale)==null?void 0:tn.y)!=null?nn:1),rotation:Number.isFinite(l.rotation)?l.rotation:void 0,anchorX:Number.isFinite((an=l.anchor)==null?void 0:an.x)?l.anchor.x:void 0,anchorY:Number.isFinite((sn=l.anchor)==null?void 0:sn.y)?l.anchor.y:void 0,pivotX:Number.isFinite((rn=l.pivot)==null?void 0:rn.x)?l.pivot.x:void 0,pivotY:Number.isFinite((on=l.pivot)==null?void 0:on.y)?l.pivot.y:void 0},Mt=Number.isFinite(ae.x)&&Number.isFinite(ae.y)&&Number.isFinite(ae.scaleX)&&Number.isFinite(ae.scaleY),se=ae;if(P){let Re=Math.hypot(ae.x-P.x,ae.y-P.y),ri=Math.max(p,g)*.5;(!Mt||Re>ri)&&((ln=l.position)!=null&&ln.set?l.position.set(P.x,P.y):(l.x=P.x,l.y=P.y),l.scale&&(typeof l.scale.set=="function"?l.scale.set(P.scaleX,P.scaleY):(l.scale.x=P.scaleX,l.scale.y=P.scaleY)),Number.isFinite(P.rotation)&&typeof l.rotation=="number"&&(l.rotation=P.rotation),l.anchor&&Number.isFinite(P.anchorX)&&Number.isFinite(P.anchorY)&&l.anchor.set(P.anchorX,P.anchorY),l.pivot&&Number.isFinite(P.pivotX)&&Number.isFinite(P.pivotY)&&l.pivot.set(P.pivotX,P.pivotY),se=P)}Number.isFinite(se.x)&&Number.isFinite(se.y)&&Number.isFinite(se.scaleX)&&Number.isFinite(se.scaleY)&&aa.set(ne,se)}}re();re();var la=li(require("lottie-web"),1);Xt(Fn);typeof window!="undefined"&&!window.lottie&&(window.lottie=la.default);fi();re();var Mi=xn.version,Vs=new Set(["init","boot","view","ready","start","pause","resume","complete","error","engagement","first_interaction","retry","cta_show","cta_click","cta_dismiss","clickout","conversion","session_time","level_time","load_time","level_start","level_complete","level_fail","checkpoint","reward","tutorial_start","tutorial_complete","tutorial_skip","ab_assign","fps","memory","asset_load_start","asset_load_complete"]);wn();var fa={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"},ma=Math.random().toString(36).slice(2),Ze=null,Xe={...fa},ba="web_embed",Ri={},Et,ji=!1,St=!1,At=!1,ya=!1,Hi=1,Zt=0,ti=!1,ye=!1,Je="",Qe=Math.floor(window.innerWidth),et=Math.floor(window.innerHeight),zi=Qe>et,ve=!1,Ct=!1,ca=!1,da=!1,_i=!1,Qt=null,Ge=null,$i=!1,Di=!1,Jt=new Map;function va(){if(!Ge)return null;let i=Date.now()-Ge;return!Number.isFinite(i)||i<0?null:i}function Oi(i){if($i)return;let e=va();e!==null&&($i=!0,x("session_time",{duration_ms:e,reason:i}))}function pa(){if(Ze)return Ze;let i=document.createElement("div");return i.id="handler-root",i.setAttribute("data-handler-root","true"),document.body.appendChild(i),Ze=i,i}function ei(i){switch(i){case"interaction":return"engagement";case"finish":return"complete";case"install":return"cta_click";default:return i}}function wa(i,e){return{event_name:i,ts:Date.now(),session_id:ma,deployment_id:Xe.deployment_id,variant_id:Xe.variant_id,export_profile_id:Xe.profile_id,instance_id:Xe.instance_id||"default",env:ba==="mraid"?"mraid":"web",attribution:Et,payload:e}}function x(i,e){let t=ei(i),n=wa(t,e);di(n,!!Ri.analytics),Ot(t,n),t!==i&&Ot(i,n)}function Lt(){Qt&&(Qt(Qe,et),Qt=null)}function tt(i){Hi=i,x("volume",i)}function it(i){i&&(ya=!0),!At&&(At=!0,x("pause"),tt(0))}function Tt(i){!i&&ya||At&&(At=!1,x("resume"),tt(Hi))}function je(i,e){Qe=Math.floor(i||window.innerWidth),et=Math.floor(e||window.innerHeight),zi=Qe>et,x("resize",{width:Qe,height:et})}function Ws(){if(_n())try{let i=mraid.getMaxSize();je(i.width,i.height);let e=()=>{mraid.isViewable()&&mraid.getState()!=="hidden"?Tt():it()};if(mraid.addEventListener("viewableChange",e),mraid.addEventListener("stateChange",e),mraid.addEventListener("sizeChange",()=>{let t=mraid.getMaxSize();je(t.width,t.height)}),mraid.getAudioVolume){let t=mraid.getAudioVolume();tt(t?1:0)}if(mraid.addEventListener("audioVolumeChange",t=>{t!==null&&tt(t>0?1:0)}),mraid.addEventListener("error",(t,n)=>{console.warn("mraid error:",t,"action:",n)}),ti=!0,mraid.isViewable()&&mraid.getState()!=="hidden")ve=!0,x("boot"),x("view"),x("ready"),ye=!0,Lt();else{let t=()=>{ve=!0,x("boot"),x("view"),x("ready"),ye=!0,Lt()};mraid.addEventListener("ready",t)}}catch(i){console.warn("MRAID hook skipped",i)}}function Ys(){if(On())try{let i=dapi.getScreenSize();je(i.width,i.height),dapi.addEventListener("viewableChange",t=>{t.isViewable?Tt():it()}),dapi.addEventListener("adResized",t=>{let n=dapi.getScreenSize();je(t.width||n.width,t.height||n.height)});let e=dapi.getAudioVolume();if(tt(e?1:0),dapi.addEventListener("audioVolumeChange",t=>tt(t?1:0)),ti=!0,dapi.isViewable())ve=!0,x("boot"),x("view"),x("ready"),ye=!0,Lt();else{let t=()=>{ve=!0,x("boot"),x("view"),x("ready"),ye=!0,Lt()};dapi.addEventListener("ready",t)}}catch(i){console.warn("DAPI hook skipped",i)}}function ua(){let i=()=>{ve||document.visibilityState==="visible"&&(document.readyState==="complete"||document.readyState==="interactive")&&(ve=!0,x("boot"),x("view"),x("ready"),ye=!0,Lt(),Ct&&(Ct=!1,pe.start()))};window.addEventListener("resize",()=>je()),document.addEventListener("visibilitychange",()=>{document.visibilityState==="visible"?(Tt(),i()):it()}),document.readyState==="complete"||document.readyState==="interactive"?i():window.addEventListener("load",i),ti=!0}function Ks(){let i=e=>{typeof TouchEvent!="undefined"&&e instanceof TouchEvent&&(ca=!0),!(ca&&e instanceof MouseEvent)&&(Zt+=1,Di||(Di=!0,x("first_interaction",{count:Zt})),x("interaction",Zt))};document.addEventListener("mousedown",i),document.addEventListener("touchstart",i)}function ga(i){var n,a,s,r,o,c,l,u,d,p,g,m;let e=typeof AD_PROTOCOL!="undefined"?AD_PROTOCOL:"none";if((typeof AD_NETWORK!="undefined"?AD_NETWORK:"web_embed")==="google")try{(n=window.ExitApi)==null||n.exit();return}catch{}if(e==="mraid"&&typeof mraid!="undefined")mraid.open(i||"");else if(e==="dapi"&&typeof dapi!="undefined")dapi.openStoreUrl();else if(We())(s=(a=window.TJ_API)==null?void 0:a.click)==null||s.call(a);else if(Rn())(o=(r=window.FbPlayableAd)==null?void 0:r.onCTAClick)==null||o.call(r);else if(Hn())(l=(c=window.ScPlayableAd)==null?void 0:c.onCTAClick)==null||l.call(c);else if(Dn())try{(d=(u=window.smxTracking)==null?void 0:u.redirect)==null||d.call(u)}catch(f){console.warn("Smadex redirect failed",f)}else if(zn()){let f=window.ExitApi;f&&typeof f.exit=="function"?f.exit(i||Je||""):i&&window.open(i)}else Ve()?(p=window.install)==null||p.call(window):$n()?(g=window.openAppStore)==null||g.call(window):pi()?(m=parent==null?void 0:parent.postMessage)==null||m.call(parent,"download","*"):i&&window.open(i)}function Xs(){let i=typeof AD_NETWORK!="undefined"?AD_NETWORK:"web_embed",e=t=>{if(!t)return;let n=new Image;n.src=t};if(i==="bigabid"){let t=window.BIGABID_BIDTIMEMACROS;if(!t)return;Z("view",()=>e(t.mraid_viewable)),Z("start",()=>e(t.game_viewable)),Z("engagement",()=>e(t.engagement));let n=()=>e(t.complete);Z("complete",n),_t("engagement",a=>{var s;((s=a==null?void 0:a.payload)==null?void 0:s.count)>3&&n()}),Z("cta_click",()=>e(t.click))}else if(i==="inmobi"){let t=window.INMOBI_DSPMACROS;if(!t)return;Z("view",()=>e(t.Ad_Load_Start)),Z("start",()=>e(t.Ad_Viewable)),Z("engagement",()=>e(t.First_Engagement)),Z("complete",()=>e(t.Gameplay_Complete)),Z("cta_click",()=>e(t.DSP_Click)),Z("start",()=>{[5,10,15,20,25,30].forEach(n=>setTimeout(()=>e(t[`Spent_${n}_Seconds`]),n*1e3))})}}function Js(){if(!We())return;let i=window.TJ_API;i&&i.setPlayableAPI&&i.setPlayableAPI({skipAd:()=>{try{pe.finish()}catch(e){console.warn("Tapjoy skip failed",e)}}})}function ha(){var e,t,n;let i=window.TJ_API;(e=i==null?void 0:i.objectiveComplete)==null||e.call(i),(t=i==null?void 0:i.playableFinished)==null||t.call(i),(n=i==null?void 0:i.gameplayFinished)==null||n.call(i)}function Zs(){Ve()&&(window.mintGameStart=()=>{Tt(!0),je()},window.mintGameClose=()=>{it(!0)})}function Qs(){if(!ui())return;let i=window.NUC;!i||!i.trigger||(pe.on("cta_click",()=>{var e,t;return(t=(e=i.trigger).convert)==null?void 0:t.call(e,Je)}),pe.on("complete",()=>{var e,t;return(t=(e=i.trigger).tryAgain)==null?void 0:t.call(e)}))}var pe={init(i={},e){var t;if(ba=i.profile||"web_embed",Ri=i.consent||{},Xe={...fa,...i.ids||{}},Ze=i.rootEl||Ze,Et=void 0,gn((t=i.telemetry)!=null&&t.endpoint?i.telemetry:null),Ge=null,$i=!1,Di=!1,Jt.clear(),Je=i.destinationUrl||(/android/i.test(navigator.userAgent)?"https://play.google.com/store":"https://www.apple.com/app-store/"),e&&(Qt=e),x("init"),document.body.oncontextmenu=()=>!1,pa(),tr(Ze),Nn(),Ws(),Ys(),!ti){if(document.readyState==="complete")ua();else if(!da){da=!0;let n=()=>{ua(),window.removeEventListener("load",n),document.removeEventListener("DOMContentLoaded",n)};window.addEventListener("load",n),document.addEventListener("DOMContentLoaded",n)}}Ks(),Xs(),Js(),Zs(),Qs(),console.log(`%c @handler/playable-sdk %c v${Mi} `,"background: var(--ui-console-info); color: var(--ui-white); font-size: 14px; padding: 4px 8px; border-top-left-radius: 4px; border-bottom-left-radius: 4px;","background: var(--ui-console-bg); color: var(--ui-console-text); font-size: 14px; padding: 4px 8px; border-top-right-radius: 4px; border-bottom-right-radius: 4px;"),ve&&!ye&&(x("boot"),x("view"),x("ready"),Ct&&(Ct=!1,pe.start()),ye=!0),ye=ve},getRoot(){return pa()},get version(){return Mi},get maxWidth(){return Qe},get maxHeight(){return et},get isLandscape(){return zi},get isReady(){return ye},get isStarted(){return ji},get isPaused(){return At},get isFinished(){return St},get volume(){return Hi},get interactions(){return Zt},on(i,e){_t(ei(i),e)},off(i,e){ci(ei(i),e)},start(){var i,e;if(!ji){if(!ve){Ct=!0;return}if(ji=!0,Ge||(Ge=Date.now()),x("start"),je(),Ve())it(),(i=window.gameReady)==null||i.call(window);else if(We()){let t=window.TJ_API;(e=t==null?void 0:t.setPlayableBuild)==null||e.call(t,{orientation:zi?"landscape":"portrait",buildID:Mi})}}},finish(){var i,e;St||(St=!0,x("complete"),Oi("complete"),Ve()?(i=window.gameEnd)==null||i.call(window):pi()?(e=parent==null?void 0:parent.postMessage)==null||e.call(parent,"complete","*"):We()&&ha())},install(i){if(!St){St=!0,We()?(ha(),setTimeout(()=>pe.install(i),300)):(x("complete"),setTimeout(()=>pe.install(i),0));return}_i||(_i=!0,setTimeout(()=>_i=!1,500),x("cta_click"),x("conversion"),Oi("cta"),ga(i||Je))},emit(i,e){let t=ei(i);if(!Vs.has(t)&&t!=="resize"&&t!=="volume"&&!t.startsWith("custom."))throw new Error(`Event ${i} must be canonical or namespaced as custom.<mechanic_id>.<event>`);let n=wa(t,e);di(n,!!Ri.analytics),Ot(t,n)},gameStart(){pe.start()},gameEnd(){pe.finish()},ctaClick(i,e){x("cta_click",{url:i||Je,manual:!0}),(e==null?void 0:e.open)!==!1&&ga(i||Je)},ctaShow(i){x("cta_show",i)},ctaDismiss(i){x("cta_dismiss",i)},getGameTimeMs(){return va()},endSession(i="manual"){Oi(i)},setAttribution(i){Et=i},abTest(i,e){if(!i)throw new Error("abTest requires experimentId");if(!Array.isArray(e)||e.length<2)throw new Error("abTest requires at least 2 variants");let t=Math.abs(er(`${ma}:${i}`))%e.length,n=e[t];return Et={...Et||{},experiment_id:i},Xe.variant_id=n,x("ab_assign",{experiment_id:i,variant_id:n}),n},levelStart(i,e){Ge||(Ge=Date.now()),x("level_start",{level_id:i,...e})},levelComplete(i,e){x("level_complete",{level_id:i,...e})},levelFail(i,e){x("level_fail",{level_id:i,...e})},checkpoint(i,e){x("checkpoint",{checkpoint_id:i,...e})},reward(i,e){x("reward",{reward_id:i,...e})},tutorialStart(i,e){x("tutorial_start",{step_id:i,...e})},tutorialComplete(i,e){x("tutorial_complete",{step_id:i,...e})},tutorialSkip(i,e){x("tutorial_skip",{step_id:i,...e})},timerStart(i){i&&Jt.set(i,Date.now())},timerEnd(i,e="custom",t){if(!i)return;let n=Jt.get(i);if(!n)return;Jt.delete(i);let a=Date.now()-n;if(!(!Number.isFinite(a)||a<0)){if(e==="custom"){x("engagement",{action:"timer",key:i,duration_ms:a,...t});return}x(e,{key:i,duration_ms:a,...t})}},fps(i,e){x("fps",{value:i,...e})},memory(i,e){x("memory",{bytes:i,...e})},assetLoadStart(i,e){x("asset_load_start",{asset_id:i,...e})},assetLoadComplete(i,e){x("asset_load_complete",{asset_id:i,...e})},reportError(i,e,t){x("error",{code:i,message:e,...t})},retry(){var i,e,t;if(Ve())(i=window.gameRetry)==null||i.call(window);else if(ui()){let n=window.NUC;(t=(e=n==null?void 0:n.trigger)==null?void 0:e.tryAgain)==null||t.call(e)}x("engagement",{action:"retry"})},pause(){it(!0)},resume(){Tt(!0)},resize(i,e){je(i,e)}},xt=pe;function er(i){let e=2166136261;for(let t=0;t<i.length;t++)e^=i.charCodeAt(t),e=Math.imul(e,16777619);return e|0}function tr(i){let e=document.createElement("script");e.type="text/javascript",e.textContent=`
230
230
  (function(){
231
231
  var events = ['touchstart','touchend','mousedown','keydown'];
232
232
  function unlock(){
@@ -242,7 +242,7 @@ Style guidelines: ${n.summary}`;this.promptInput.value=a,this.currentPrompt=a}}c
242
242
  }
243
243
  events.forEach(function(e){ document.addEventListener(e, unlock, false); });
244
244
  })();
245
- `,i.appendChild(e)}async function ii(i,e={}){let t=new Ea.Application;await t.init({resizeTo:i,autoDensity:!0,resolution:window.devicePixelRatio||1,antialias:!0,backgroundAlpha:0});let n=r=>{var d,p,g,m;if(!t.renderer)return;let o=(d=r==null?void 0:r.width)!=null?d:i.clientWidth,c=(p=r==null?void 0:r.height)!=null?p:i.clientHeight,l=o&&o>0?o:(g=window.innerWidth)!=null?g:320,u=c&&c>0?c:(m=window.innerHeight)!=null?m:480;t.renderer.resize(l,u)};i.appendChild(t.canvas),i.style.position="relative",i.style.display="flex",i.style.flexDirection="column",i.style.alignItems="stretch",i.style.width="100%",i.style.height="100dvh",i.style.minHeight="100vh",i.style.maxWidth="100%",i.style.maxHeight="100%",i.style.boxSizing="border-box",i.style.overflow="hidden",e.background&&(i.style.background=e.background),n();let a=document.createElement("div");return a.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(";")),i.appendChild(a),xt.on("pause",()=>{t.ticker.stop(),document.querySelectorAll("audio").forEach(o=>o.pause())}),xt.on("resume",()=>{t.ticker.start(),document.querySelectorAll("audio").forEach(o=>{o.currentTime>0&&!o.ended&&o.play().catch(()=>{})})}),xt.on("resize",({payload:r})=>{n({width:r==null?void 0:r.width,height:r==null?void 0:r.height})}),window.addEventListener("resize",()=>n()),requestAnimationFrame(()=>n()),new ResizeObserver(r=>{let o=r[0];if(o&&o.contentRect.width>0&&o.contentRect.height>0){let c=Math.round(o.contentRect.width),l=Math.round(o.contentRect.height);if(n({width:c,height:l}),typeof window!="undefined"&&window.gameApp&&window.gameObjectManager){let u={width:c,height:l,dpr:Math.max(1,Math.floor(window.devicePixelRatio||1)),presetId:"auto-resize",isLandscape:c>l};window.dispatchEvent(new CustomEvent("handler-preview:screen",{detail:u}))}}}).observe(i),{app:t,stage:t.stage,overlay:a,applySize:n}}var K=require("pixi.js"),kt=class{constructor(e){var a,s;let t=e==null?void 0:e.position,n=e==null?void 0:e.offset;this._basePosition={x:typeof(t==null?void 0:t.x)=="number"?t.x:0,y:typeof(t==null?void 0:t.y)=="number"?t.y:0},this._offset={x:typeof(n==null?void 0:n.x)=="number"?n.x:0,y:typeof(n==null?void 0:n.y)=="number"?n.y:0},this.position={x:this._basePosition.x+this._offset.x,y:this._basePosition.y+this._offset.y},this.scale=(a=e==null?void 0:e.scale)!=null?a:1,this.rotation=(s=e==null?void 0:e.rotation)!=null?s:0}update(e){let t=e.position,n=e.offset;t!==void 0&&(this._basePosition={x:typeof(t==null?void 0:t.x)=="number"?t.x:0,y:typeof(t==null?void 0:t.y)=="number"?t.y:0}),n!==void 0&&(this._offset={x:typeof(n==null?void 0:n.x)=="number"?n.x:0,y:typeof(n==null?void 0:n.y)=="number"?n.y:0}),(t!==void 0||n!==void 0)&&(this.position={x:this._basePosition.x+this._offset.x,y:this._basePosition.y+this._offset.y}),e.scale!==void 0&&(this.scale=e.scale),e.rotation!==void 0&&(this.rotation=e.rotation)}syncToPixi(e){e&&(e.position.set(this.position.x,this.position.y),e.scale.set(this.scale),e.rotation=this.rotation)}},Pt=class{constructor(e){var t,n,a,s;this.z_index=(t=e==null?void 0:e.z_index)!=null?t:0,this.alpha=(n=e==null?void 0:e.alpha)!=null?n:1,this.visible=(a=e==null?void 0:e.visible)!=null?a:!0,this.tint=(s=e==null?void 0:e.tint)!=null?s:null}update(e){e.z_index!==void 0&&(this.z_index=e.z_index),e.alpha!==void 0&&(this.alpha=e.alpha),e.visible!==void 0&&(this.visible=e.visible),e.tint!==void 0&&(this.tint=e.tint)}syncToPixi(e,t){if(!e)return;if(e.zIndex=this.z_index,t!=null&&t.startsWith("ui_endgame_")||(e.alpha=this.alpha),e.visible=this.visible,this.tint!==null&&"tint"in e&&(e.tint=this.tint),t&&"texture"in e)try{let{AssetTextures:a}=require("handler-playable-sdk/pixi");if(a&&a[t]){let s=a[t];s&&(e.texture=s)}}catch{}}},It=class{constructor(e,t,n,a){this._tickerCleanup=null;this.onRebuildRequired=null;this.instanceId=e,this.objectConfig=t,this.pixiObject=n,this._config=a,this.transform=new kt(a.transform),this.renderer=new Pt(a.render),this.sync()}sync(){this.transform.syncToPixi(this.pixiObject),this.renderer.syncToPixi(this.pixiObject,this.instanceId),this.applyAnchor(),this.applyEffectsScale(),this.applyEffects(),this.syncTextProperties(),(!this._initialized||this._shouldReplayIntro)&&(this.applyIntro(),this._initialized=!0,this._shouldReplayIntro=!1),this.applyMotion()}syncTextProperties(){var t;if(!this.pixiObject||!("text"in this.pixiObject))return;let e=(t=this._config)==null?void 0:t.ui;e&&(e.text!==void 0&&this.pixiObject.text!==e.text&&(this.pixiObject.text=e.text),this.pixiObject.style&&(e.fontSize!==void 0&&(this.pixiObject.style.fontSize=e.fontSize),e.color!==void 0&&(this.pixiObject.style.fill=e.color),e.align!==void 0&&(this.pixiObject.style.align=e.align)))}destroy(){this._tickerCleanup&&(this._tickerCleanup(),this._tickerCleanup=null),this._introTicker&&(K.Ticker.shared.remove(this._introTicker),this._introTicker=null),this.pixiObject&&this.pixiObject.parent&&this.pixiObject.parent.removeChild(this.pixiObject)}updateConfig(e){var c,l,u,d,p,g,m,f,C,b,h;let t=(l=(c=this._config)==null?void 0:c.motion)==null?void 0:l.intro,n=(u=e==null?void 0:e.motion)==null?void 0:u.intro;n!=null&&n.enabled&&JSON.stringify(t)!==JSON.stringify(n)&&(this._shouldReplayIntro=!0);let a=(g=(p=(d=this._config)==null?void 0:d.render)==null?void 0:p.asset)==null?void 0:g.type,s=(f=(m=e==null?void 0:e.render)==null?void 0:m.asset)==null?void 0:f.type,r=(b=(C=this._config)==null?void 0:C.ui)==null?void 0:b.renderMode,o=(h=e==null?void 0:e.ui)==null?void 0:h.renderMode;if((a!==s||r!==o)&&(console.log(`[GameObject] Rebuild required for ${this.instanceId}: type changed from ${a}/${r} to ${s}/${o}`),this.onRebuildRequired)){this.onRebuildRequired(this,e);return}this._config=e,e.transform&&this.transform.update(e.transform),e.render&&this.renderer.update(e.render),this.sync()}applyAnchor(){var a,s,r,o;if(!this.pixiObject||!("anchor"in this.pixiObject)||!this.pixiObject.anchor)return;let e=(s=(a=this._config)==null?void 0:a.render)==null?void 0:s.anchor,t=(o=(r=this._config)==null?void 0:r.transform)==null?void 0:o.anchor,n=e&&typeof e=="object"?e:t&&typeof t=="object"?t:null;n&&typeof n.x=="number"&&typeof n.y=="number"&&this.pixiObject.anchor.set(n.x,n.y)}applyEffectsScale(){var s,r,o;if(!((s=this.pixiObject)!=null&&s.scale))return;let e=(r=this._config)==null?void 0:r.effects,t=typeof(e==null?void 0:e.scale_x)=="number"?e.scale_x:1,n=typeof(e==null?void 0:e.scale_y)=="number"?e.scale_y:1;if(t===1&&n===1)return;let a=(o=this.transform.scale)!=null?o:1;typeof this.pixiObject.scale.set=="function"?this.pixiObject.scale.set(a*t,a*n):(this.pixiObject.scale.x=a*t,this.pixiObject.scale.y=a*n)}applyEffects(){var n,a,s,r,o,c,l,u,d;if(!this.pixiObject)return;let e=(n=this._config)==null?void 0:n.effects;if(!e||e.enabled===!1){this.pixiObject.filters=null;return}let t=[];if((a=e.blur)!=null&&a.enabled){let p=new K.BlurFilter;p.blur=(s=e.blur.strength)!=null?s:4,t.push(p)}if((r=e.shadow)!=null&&r.enabled){let p=e.shadow,g=new K.BlurFilter;g.blur=(o=p.blur)!=null?o:4,g.blendMode="multiply",t.push(g),(p.offsetX!==0||p.offsetY!==0)&&console.warn("[Effects] Drop shadow offset requires pixi-filters. Install: npm install pixi-filters")}if((c=e.glow)!=null&&c.enabled){let p=e.glow,g=new K.BlurFilter;if(g.blur=(l=p.blur)!=null?l:8,t.push(g),p.color){let m=new K.ColorMatrixFilter,f=typeof p.color=="string"?parseInt(p.color.replace("#",""),16):p.color;m.tint(f),t.push(m)}}(u=e.stroke)!=null&&u.enabled&&console.warn("[Effects] Stroke/outline effect requires pixi-filters. Install: npm install pixi-filters"),(d=e.distortion)!=null&&d.enabled&&console.warn("[Effects] Distortion effect requires pixi-filters or a displacement map. Install: npm install pixi-filters"),this.pixiObject.filters=t.length>0?t:null}applyIntro(){var u,d,p,g,m,f,C;let e=(u=this._config)==null?void 0:u.motion;if(!e||!((d=e.intro)!=null&&d.enabled)||!this.pixiObject)return;let t=e.intro,n=(t.duration||0)/1e3,a=(t.delay||0)/1e3,s=this.transform.position.y,r=this.transform.scale*(((g=(p=this._config)==null?void 0:p.effects)==null?void 0:g.scale_x)||1),o=this.transform.scale*(((f=(m=this._config)==null?void 0:m.effects)==null?void 0:f.scale_y)||1);if(this.pixiObject.alpha=(C=t.startAlpha)!=null?C:0,t.startScale!==void 0&&this.pixiObject.scale.set(r*t.startScale,o*t.startScale),t.startYOffset!==void 0&&(this.pixiObject.y=s+(t.startYOffset||0)),this._introTicker&&K.Ticker.shared.remove(this._introTicker),n<=0&&a<=0){this.pixiObject.alpha=this.renderer.alpha,this.pixiObject.y=this.transform.position.y,this.pixiObject.scale.set(r,o);return}let c=0,l=b=>{var R,N,$,L,S,E;if(c+=b.deltaTime/60,c<a)return;let h=n>0?Math.min(1,(c-a)/n):1,v=1-Math.pow(1-h,3),w=this.renderer.alpha,y=this.transform.scale*(((N=(R=this._config)==null?void 0:R.effects)==null?void 0:N.scale_x)||1),I=this.transform.scale*(((L=($=this._config)==null?void 0:$.effects)==null?void 0:L.scale_y)||1),_=this.transform.position.y,G=this.transform.position.x;if(this.pixiObject.alpha=((S=t.startAlpha)!=null?S:0)+(w-((E=t.startAlpha)!=null?E:0))*v,t.startScale!==void 0){let A=t.startScale+(1-t.startScale)*v;this.pixiObject.scale.set(y*A,I*A)}t.startYOffset!==void 0&&(this.pixiObject.y=_+t.startYOffset+(_-(_+t.startYOffset))*v),h>=1&&(K.Ticker.shared.remove(l),this._introTicker=null,this.pixiObject.alpha=w,this.pixiObject.x=G,this.pixiObject.y=_,this.pixiObject.scale.set(y,I))};this._introTicker=l,K.Ticker.shared.add(l)}applyMotion(){var d,p,g,m,f,C;let e=(d=this._config)==null?void 0:d.motion,t=e&&e.enabled!==!1,n=JSON.stringify(e);if(this._lastMotionStr===n&&this._tickerCleanup)return;if(this._lastMotionStr=n,!t){this._tickerCleanup&&(this._tickerCleanup(),this._tickerCleanup=null);return}if(this._tickerCleanup&&this._tickerCleanup(),!(((p=e.pulse)==null?void 0:p.enabled)||((g=e.swing)==null?void 0:g.enabled)||((m=e.continuousMove)==null?void 0:m.enabled)||((f=e.continuousRotate)==null?void 0:f.enabled)||((C=e.orbit)==null?void 0:C.enabled)))return;let s=0,r=0,o=0,c=0,l=1/60,u=b=>{var $,L,S,E,A,T,F,ue,xe,Se,Ee,Ce,Ae,Le,V,_e,ot,lt,ct,dt,pt,ut,gt,ht,ft,mt;let h=(($=b.deltaTime)!=null?$:1)*l;s+=b.deltaTime*.05;let v=this.transform.scale,w=v*(((S=(L=this._config)==null?void 0:L.effects)==null?void 0:S.scale_x)||1),y=v*(((A=(E=this._config)==null?void 0:E.effects)==null?void 0:A.scale_y)||1),I=this.transform.position.x,_=this.transform.position.y,G=this.transform.rotation,R=0,N=0;if((T=e.swing)!=null&&T.enabled){let B=(F=e.swing.amplitude)!=null?F:10,X=(ue=e.swing.speed)!=null?ue:1,U=Math.sin(s*X)*B;e.swing.axis==="vertical"?N+=U:e.swing.axis==="both"?(R+=U,N+=U):R+=U}if((xe=e.continuousMove)!=null&&xe.enabled){let B=(Se=e.continuousMove.axis)!=null?Se:"x",X=Math.max(0,(Ee=e.continuousMove.speed)!=null?Ee:50),U=Math.sign((Ce=e.continuousMove.direction)!=null?Ce:1)||1,J=Math.max(0,(Ae=e.continuousMove.lifetime)!=null?Ae:0);r+=h;let Ue=J>0?Math.min(r,J):r,Oe=X*U*Ue;(B==="x"||B==="both")&&(R+=Oe),(B==="y"||B==="both")&&(N+=Oe)}if((Le=e.orbit)!=null&&Le.enabled){let B=Math.max(0,(V=e.orbit.radius)!=null?V:50),X=Math.max(0,(_e=e.orbit.speed)!=null?_e:45),U=Math.sign((ot=e.orbit.direction)!=null?ot:1)||1,J=X*Math.PI/180;c+=J*U*h;let Ue=(lt=e.orbit.pivotOffsetX)!=null?lt:0,Oe=(ct=e.orbit.pivotOffsetY)!=null?ct:0;R+=Ue+B*Math.cos(c),N+=Oe+B*Math.sin(c)}if(this.pixiObject.x=I+R,this.pixiObject.y=_+N,(dt=e.pulse)!=null&&dt.enabled){let B=(pt=e.pulse.intensity)!=null?pt:.1,X=(ut=e.pulse.speed)!=null?ut:1,J=1+Math.sin(s*X)*B;(gt=this.pixiObject.scale)!=null&&gt.set?this.pixiObject.scale.set(w*J,y*J):this.pixiObject.scale&&(this.pixiObject.scale.x=w*J,this.pixiObject.scale.y=y*J)}if((ht=e.continuousRotate)!=null&&ht.enabled){let B=Math.max(0,(ft=e.continuousRotate.speed)!=null?ft:90),X=Math.sign((mt=e.continuousRotate.direction)!=null?mt:1)||1,U=B*Math.PI/180;o+=U*X*h,this.pixiObject.rotation=G+o}};K.Ticker.shared.add(u),this._tickerCleanup=()=>{var b,h,v,w,y;if(K.Ticker.shared.remove(u),this.pixiObject){let I=this.transform.scale*(((h=(b=this._config)==null?void 0:b.effects)==null?void 0:h.scale_x)||1),_=this.transform.scale*(((w=(v=this._config)==null?void 0:v.effects)==null?void 0:w.scale_y)||1);this.pixiObject.x=this.transform.position.x,this.pixiObject.y=this.transform.position.y,this.pixiObject.rotation=this.transform.rotation,(y=this.pixiObject.scale)!=null&&y.set?this.pixiObject.scale.set(I,_):this.pixiObject.scale&&(this.pixiObject.scale.x=I,this.pixiObject.scale.y=_)}}}getComponent(e){return this._config[e]}getPosition(){return{...this.transform.position}}setPosition(e,t){this.transform.position={x:e,y:t},this.transform.syncToPixi(this.pixiObject)}getAlpha(){return this.renderer.alpha}setAlpha(e){this.renderer.alpha=e,this.renderer.syncToPixi(this.pixiObject)}getVisible(){return this.renderer.visible}setVisible(e){this.renderer.visible=e,this.renderer.syncToPixi(this.pixiObject)}},nt=class{constructor(e){this.objects=new Map;this.onObjectRebuildRequired=null;this.config=e}create(e,t){let n=this.config.objects.get(e);if(!n)throw new Error(`Object config not found: ${e}`);let a=new It(e,n.object_config||e,t,n);return this.objects.set(e,a),a.onRebuildRequired=async(s,r)=>{if(this.onObjectRebuildRequired){console.log(`[GameObjectManager] Triggering rebuild for ${e}`);let o=await this.onObjectRebuildRequired(e,r);o&&this.objects.get(e)===o&&console.log(`[GameObjectManager] \u2705 Rebuilt ${e} successfully`)}else console.warn(`[GameObjectManager] Rebuild required for ${e} but no factory provided`),s.updateConfig(r)},a}get(e){return this.objects.get(e)}updateConfig(e){this.config=e;for(let[t,n]of this.objects.entries()){let a=e.objects.get(t);a&&n.updateConfig(a)}}getAll(){return Array.from(this.objects.values())}remove(e){let t=this.objects.get(e);t&&t.destroy(),this.objects.delete(e)}clear(){for(let e of this.objects.values())e.destroy();this.objects.clear()}};var ni={"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 Ca(i){let e=ni[i];return e?e.family:(console.warn(`Font ID "${i}" not found in registry, using fallback`),"Arial, sans-serif")}function Aa(i){var t;let e=ni[i];return e&&(t=e.weight)!=null?t:"400"}function La(i,e){ni[i]=e}function Ta(){return Object.keys(ni)}var at=null;function ar(){return console.log("[LottieOverlay] getLottie called, lottieLib cached?",!!at),console.log("[LottieOverlay] window.lottie exists?",typeof window!="undefined"&&!!window.lottie),at||(typeof window!="undefined"&&window.lottie?(at=window.lottie,console.log("[LottieOverlay] \u2705 Found window.lottie, cached it")):(console.warn("[LottieOverlay] \u274C lottie-web is not available globally. Make sure it is loaded before using Lottie animations."),console.log("[LottieOverlay] window keys:",typeof window!="undefined"?Object.keys(window).filter(i=>i.toLowerCase().includes("lottie")):"no window"),at=null)),at}function sr(i){return!i||i.startsWith("http://")||i.startsWith("https://")||i.startsWith("/")?i:`/${i.replace(/^\.\//,"")}`}function rr(i){try{let e=new XMLHttpRequest;return e.open("GET",sr(i),!1),e.send(null),e.status<200||e.status>=300||!e.responseText?null:JSON.parse(e.responseText)}catch{return null}}function ka(i){return!i||typeof i!="object"||!Array.isArray(i.layers)?null:(Array.isArray(i.assets)||(i.assets=[]),Array.isArray(i.chars)||(i.chars=[]),i)}function Xt(i){at=i}function Pa(i,e,t,n){var I,_,G,R,N,$,L,S,E,A,T,F,ue,xe,Se,Ee,Ce,Ae,Le;let a=t.objects.get(i);if(!a)return console.warn(`[LottieOverlay] Object config not found: ${i}`),null;let s=((I=a.effects)==null?void 0:I.lottie)||{},r=a.transform||{},o=a.render||{};if(s.enabled===!1||o.visible===!1)return null;let c=n==null?void 0:n[i],l=ka(c);if(!l){let V=(G=(_=a.render)==null?void 0:_.asset)==null?void 0:G.path;if(typeof V=="string"&&V.toLowerCase().endsWith(".json")){let _e=rr(V);if(l=ka(_e),l)try{n[i]=l}catch{}}}if(!l){let V=c&&typeof c=="object"?Object.prototype.toString.call(c):typeof c;return console.warn(`[LottieOverlay] Lottie JSON invalid for: ${i}`,{kind:V}),null}let u=ar();if(!u)return console.warn(`[LottieOverlay] lottie-web is not available. Cannot play animation: ${i}`),null;let d=(R=s.width)!=null?R:300,p=(N=s.height)!=null?N:300,g=($=r.scale)!=null?$:1,m=((S=(L=r.position)==null?void 0:L.x)!=null?S:0)+((A=(E=r.offset)==null?void 0:E.x)!=null?A:0),f=((F=(T=r.position)==null?void 0:T.y)!=null?F:0)+((xe=(ue=r.offset)==null?void 0:ue.y)!=null?xe:0),C=(Se=r.rotation)!=null?Se:0,b=(Ee=o.z_index)!=null?Ee:100,h=(Ce=o.alpha)!=null?Ce:1,v=document.createElement("div");v.style.cssText=`
245
+ `,i.appendChild(e)}async function ii(i,e={}){let t=new xa.Application;await t.init({resizeTo:i,autoDensity:!0,resolution:window.devicePixelRatio||1,antialias:!0,backgroundAlpha:0});let n=r=>{var d,p,g,m;if(!t.renderer)return;let o=(d=r==null?void 0:r.width)!=null?d:i.clientWidth,c=(p=r==null?void 0:r.height)!=null?p:i.clientHeight,l=o&&o>0?o:(g=window.innerWidth)!=null?g:320,u=c&&c>0?c:(m=window.innerHeight)!=null?m:480;t.renderer.resize(l,u)};i.appendChild(t.canvas),i.style.position="relative",i.style.display="flex",i.style.flexDirection="column",i.style.alignItems="stretch",i.style.width="100%",i.style.height="100dvh",i.style.minHeight="100vh",i.style.maxWidth="100%",i.style.maxHeight="100%",i.style.boxSizing="border-box",i.style.overflow="hidden",e.background&&(i.style.background=e.background),n();let a=document.createElement("div");return a.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(";")),i.appendChild(a),xt.on("pause",()=>{t.ticker.stop(),document.querySelectorAll("audio").forEach(o=>o.pause())}),xt.on("resume",()=>{t.ticker.start(),document.querySelectorAll("audio").forEach(o=>{o.currentTime>0&&!o.ended&&o.play().catch(()=>{})})}),xt.on("resize",({payload:r})=>{n({width:r==null?void 0:r.width,height:r==null?void 0:r.height})}),window.addEventListener("resize",()=>n()),requestAnimationFrame(()=>n()),new ResizeObserver(r=>{let o=r[0];if(o&&o.contentRect.width>0&&o.contentRect.height>0){let c=Math.round(o.contentRect.width),l=Math.round(o.contentRect.height);if(n({width:c,height:l}),typeof window!="undefined"&&window.gameApp&&window.gameObjectManager){let u={width:c,height:l,dpr:Math.max(1,Math.floor(window.devicePixelRatio||1)),presetId:"auto-resize",isLandscape:c>l};window.dispatchEvent(new CustomEvent("handler-preview:screen",{detail:u}))}}}).observe(i),{app:t,stage:t.stage,overlay:a,applySize:n}}var K=require("pixi.js"),kt=class{constructor(e){var a,s;let t=e==null?void 0:e.position,n=e==null?void 0:e.offset;this._basePosition={x:typeof(t==null?void 0:t.x)=="number"?t.x:0,y:typeof(t==null?void 0:t.y)=="number"?t.y:0},this._offset={x:typeof(n==null?void 0:n.x)=="number"?n.x:0,y:typeof(n==null?void 0:n.y)=="number"?n.y:0},this.position={x:this._basePosition.x+this._offset.x,y:this._basePosition.y+this._offset.y},this.scale=(a=e==null?void 0:e.scale)!=null?a:1,this.rotation=(s=e==null?void 0:e.rotation)!=null?s:0}update(e){let t=e.position,n=e.offset;t!==void 0&&(this._basePosition={x:typeof(t==null?void 0:t.x)=="number"?t.x:0,y:typeof(t==null?void 0:t.y)=="number"?t.y:0}),n!==void 0&&(this._offset={x:typeof(n==null?void 0:n.x)=="number"?n.x:0,y:typeof(n==null?void 0:n.y)=="number"?n.y:0}),(t!==void 0||n!==void 0)&&(this.position={x:this._basePosition.x+this._offset.x,y:this._basePosition.y+this._offset.y}),e.scale!==void 0&&(this.scale=e.scale),e.rotation!==void 0&&(this.rotation=e.rotation)}syncToPixi(e){e&&(e.position.set(this.position.x,this.position.y),e.scale.set(this.scale),e.rotation=this.rotation)}},Pt=class{constructor(e){var t,n,a,s;this.z_index=(t=e==null?void 0:e.z_index)!=null?t:0,this.alpha=(n=e==null?void 0:e.alpha)!=null?n:1,this.visible=(a=e==null?void 0:e.visible)!=null?a:!0,this.tint=(s=e==null?void 0:e.tint)!=null?s:null}update(e){e.z_index!==void 0&&(this.z_index=e.z_index),e.alpha!==void 0&&(this.alpha=e.alpha),e.visible!==void 0&&(this.visible=e.visible),e.tint!==void 0&&(this.tint=e.tint)}syncToPixi(e,t){if(!e)return;if(e.zIndex=this.z_index,t!=null&&t.startsWith("ui_endgame_")||(e.alpha=this.alpha),e.visible=this.visible,this.tint!==null&&"tint"in e&&(e.tint=this.tint),t&&"texture"in e)try{let{AssetTextures:a}=require("handler-playable-sdk/pixi");if(a&&a[t]){let s=a[t];s&&(e.texture=s)}}catch{}}},It=class{constructor(e,t,n,a){this._tickerCleanup=null;this.onRebuildRequired=null;this.instanceId=e,this.objectConfig=t,this.pixiObject=n,this._config=a,this.transform=new kt(a.transform),this.renderer=new Pt(a.render),this.sync()}sync(){this.transform.syncToPixi(this.pixiObject),this.renderer.syncToPixi(this.pixiObject,this.instanceId),this.applyAnchor(),this.applyEffectsScale(),this.applyEffects(),this.syncTextProperties(),(!this._initialized||this._shouldReplayIntro)&&(this.applyIntro(),this._initialized=!0,this._shouldReplayIntro=!1),this.applyMotion()}syncTextProperties(){var t;if(!this.pixiObject||!("text"in this.pixiObject))return;let e=(t=this._config)==null?void 0:t.ui;e&&(e.text!==void 0&&this.pixiObject.text!==e.text&&(this.pixiObject.text=e.text),this.pixiObject.style&&(e.fontSize!==void 0&&(this.pixiObject.style.fontSize=e.fontSize),e.color!==void 0&&(this.pixiObject.style.fill=e.color),e.align!==void 0&&(this.pixiObject.style.align=e.align)))}destroy(){this._tickerCleanup&&(this._tickerCleanup(),this._tickerCleanup=null),this._introTicker&&(K.Ticker.shared.remove(this._introTicker),this._introTicker=null),this.pixiObject&&this.pixiObject.parent&&this.pixiObject.parent.removeChild(this.pixiObject)}updateConfig(e){var c,l,u,d,p,g,m,f,C,b,h;let t=(l=(c=this._config)==null?void 0:c.motion)==null?void 0:l.intro,n=(u=e==null?void 0:e.motion)==null?void 0:u.intro;n!=null&&n.enabled&&JSON.stringify(t)!==JSON.stringify(n)&&(this._shouldReplayIntro=!0);let a=(g=(p=(d=this._config)==null?void 0:d.render)==null?void 0:p.asset)==null?void 0:g.type,s=(f=(m=e==null?void 0:e.render)==null?void 0:m.asset)==null?void 0:f.type,r=(b=(C=this._config)==null?void 0:C.ui)==null?void 0:b.renderMode,o=(h=e==null?void 0:e.ui)==null?void 0:h.renderMode;if((a!==s||r!==o)&&(console.log(`[GameObject] Rebuild required for ${this.instanceId}: type changed from ${a}/${r} to ${s}/${o}`),this.onRebuildRequired)){this.onRebuildRequired(this,e);return}this._config=e,e.transform&&this.transform.update(e.transform),e.render&&this.renderer.update(e.render),this.sync()}applyAnchor(){var a,s,r,o;if(!this.pixiObject||!("anchor"in this.pixiObject)||!this.pixiObject.anchor)return;let e=(s=(a=this._config)==null?void 0:a.render)==null?void 0:s.anchor,t=(o=(r=this._config)==null?void 0:r.transform)==null?void 0:o.anchor,n=e&&typeof e=="object"?e:t&&typeof t=="object"?t:null;n&&typeof n.x=="number"&&typeof n.y=="number"&&this.pixiObject.anchor.set(n.x,n.y)}applyEffectsScale(){var s,r,o;if(!((s=this.pixiObject)!=null&&s.scale))return;let e=(r=this._config)==null?void 0:r.effects,t=typeof(e==null?void 0:e.scale_x)=="number"?e.scale_x:1,n=typeof(e==null?void 0:e.scale_y)=="number"?e.scale_y:1;if(t===1&&n===1)return;let a=(o=this.transform.scale)!=null?o:1;typeof this.pixiObject.scale.set=="function"?this.pixiObject.scale.set(a*t,a*n):(this.pixiObject.scale.x=a*t,this.pixiObject.scale.y=a*n)}applyEffects(){var n,a,s,r,o,c,l,u,d;if(!this.pixiObject)return;let e=(n=this._config)==null?void 0:n.effects;if(!e||e.enabled===!1){this.pixiObject.filters=null;return}let t=[];if((a=e.blur)!=null&&a.enabled){let p=new K.BlurFilter;p.blur=(s=e.blur.strength)!=null?s:4,t.push(p)}if((r=e.shadow)!=null&&r.enabled){let p=e.shadow,g=new K.BlurFilter;g.blur=(o=p.blur)!=null?o:4,g.blendMode="multiply",t.push(g),(p.offsetX!==0||p.offsetY!==0)&&console.warn("[Effects] Drop shadow offset requires pixi-filters. Install: npm install pixi-filters")}if((c=e.glow)!=null&&c.enabled){let p=e.glow,g=new K.BlurFilter;if(g.blur=(l=p.blur)!=null?l:8,t.push(g),p.color){let m=new K.ColorMatrixFilter,f=typeof p.color=="string"?parseInt(p.color.replace("#",""),16):p.color;m.tint(f),t.push(m)}}(u=e.stroke)!=null&&u.enabled&&console.warn("[Effects] Stroke/outline effect requires pixi-filters. Install: npm install pixi-filters"),(d=e.distortion)!=null&&d.enabled&&console.warn("[Effects] Distortion effect requires pixi-filters or a displacement map. Install: npm install pixi-filters"),this.pixiObject.filters=t.length>0?t:null}applyIntro(){var u,d,p,g,m,f,C;let e=(u=this._config)==null?void 0:u.motion;if(!e||!((d=e.intro)!=null&&d.enabled)||!this.pixiObject)return;let t=e.intro,n=(t.duration||0)/1e3,a=(t.delay||0)/1e3,s=this.transform.position.y,r=this.transform.scale*(((g=(p=this._config)==null?void 0:p.effects)==null?void 0:g.scale_x)||1),o=this.transform.scale*(((f=(m=this._config)==null?void 0:m.effects)==null?void 0:f.scale_y)||1);if(this.pixiObject.alpha=(C=t.startAlpha)!=null?C:0,t.startScale!==void 0&&this.pixiObject.scale.set(r*t.startScale,o*t.startScale),t.startYOffset!==void 0&&(this.pixiObject.y=s+(t.startYOffset||0)),this._introTicker&&K.Ticker.shared.remove(this._introTicker),n<=0&&a<=0){this.pixiObject.alpha=this.renderer.alpha,this.pixiObject.y=this.transform.position.y,this.pixiObject.scale.set(r,o);return}let c=0,l=b=>{var R,N,$,L,S,E;if(c+=b.deltaTime/60,c<a)return;let h=n>0?Math.min(1,(c-a)/n):1,v=1-Math.pow(1-h,3),w=this.renderer.alpha,y=this.transform.scale*(((N=(R=this._config)==null?void 0:R.effects)==null?void 0:N.scale_x)||1),I=this.transform.scale*(((L=($=this._config)==null?void 0:$.effects)==null?void 0:L.scale_y)||1),_=this.transform.position.y,G=this.transform.position.x;if(this.pixiObject.alpha=((S=t.startAlpha)!=null?S:0)+(w-((E=t.startAlpha)!=null?E:0))*v,t.startScale!==void 0){let A=t.startScale+(1-t.startScale)*v;this.pixiObject.scale.set(y*A,I*A)}t.startYOffset!==void 0&&(this.pixiObject.y=_+t.startYOffset+(_-(_+t.startYOffset))*v),h>=1&&(K.Ticker.shared.remove(l),this._introTicker=null,this.pixiObject.alpha=w,this.pixiObject.x=G,this.pixiObject.y=_,this.pixiObject.scale.set(y,I))};this._introTicker=l,K.Ticker.shared.add(l)}applyMotion(){var d,p,g,m,f,C;let e=(d=this._config)==null?void 0:d.motion,t=e&&e.enabled!==!1,n=JSON.stringify(e);if(this._lastMotionStr===n&&this._tickerCleanup)return;if(this._lastMotionStr=n,!t){this._tickerCleanup&&(this._tickerCleanup(),this._tickerCleanup=null);return}if(this._tickerCleanup&&this._tickerCleanup(),!(((p=e.pulse)==null?void 0:p.enabled)||((g=e.swing)==null?void 0:g.enabled)||((m=e.continuousMove)==null?void 0:m.enabled)||((f=e.continuousRotate)==null?void 0:f.enabled)||((C=e.orbit)==null?void 0:C.enabled)))return;let s=0,r=0,o=0,c=0,l=1/60,u=b=>{var $,L,S,E,A,T,F,ue,xe,Se,Ee,Ce,Ae,Le,V,_e,ot,lt,ct,dt,pt,ut,gt,ht,ft,mt;let h=(($=b.deltaTime)!=null?$:1)*l;s+=b.deltaTime*.05;let v=this.transform.scale,w=v*(((S=(L=this._config)==null?void 0:L.effects)==null?void 0:S.scale_x)||1),y=v*(((A=(E=this._config)==null?void 0:E.effects)==null?void 0:A.scale_y)||1),I=this.transform.position.x,_=this.transform.position.y,G=this.transform.rotation,R=0,N=0;if((T=e.swing)!=null&&T.enabled){let B=(F=e.swing.amplitude)!=null?F:10,X=(ue=e.swing.speed)!=null?ue:1,U=Math.sin(s*X)*B;e.swing.axis==="vertical"?N+=U:e.swing.axis==="both"?(R+=U,N+=U):R+=U}if((xe=e.continuousMove)!=null&&xe.enabled){let B=(Se=e.continuousMove.axis)!=null?Se:"x",X=Math.max(0,(Ee=e.continuousMove.speed)!=null?Ee:50),U=Math.sign((Ce=e.continuousMove.direction)!=null?Ce:1)||1,J=Math.max(0,(Ae=e.continuousMove.lifetime)!=null?Ae:0);r+=h;let Ue=J>0?Math.min(r,J):r,Oe=X*U*Ue;(B==="x"||B==="both")&&(R+=Oe),(B==="y"||B==="both")&&(N+=Oe)}if((Le=e.orbit)!=null&&Le.enabled){let B=Math.max(0,(V=e.orbit.radius)!=null?V:50),X=Math.max(0,(_e=e.orbit.speed)!=null?_e:45),U=Math.sign((ot=e.orbit.direction)!=null?ot:1)||1,J=X*Math.PI/180;c+=J*U*h;let Ue=(lt=e.orbit.pivotOffsetX)!=null?lt:0,Oe=(ct=e.orbit.pivotOffsetY)!=null?ct:0;R+=Ue+B*Math.cos(c),N+=Oe+B*Math.sin(c)}if(this.pixiObject.x=I+R,this.pixiObject.y=_+N,(dt=e.pulse)!=null&&dt.enabled){let B=(pt=e.pulse.intensity)!=null?pt:.1,X=(ut=e.pulse.speed)!=null?ut:1,J=1+Math.sin(s*X)*B;(gt=this.pixiObject.scale)!=null&&gt.set?this.pixiObject.scale.set(w*J,y*J):this.pixiObject.scale&&(this.pixiObject.scale.x=w*J,this.pixiObject.scale.y=y*J)}if((ht=e.continuousRotate)!=null&&ht.enabled){let B=Math.max(0,(ft=e.continuousRotate.speed)!=null?ft:90),X=Math.sign((mt=e.continuousRotate.direction)!=null?mt:1)||1,U=B*Math.PI/180;o+=U*X*h,this.pixiObject.rotation=G+o}};K.Ticker.shared.add(u),this._tickerCleanup=()=>{var b,h,v,w,y;if(K.Ticker.shared.remove(u),this.pixiObject){let I=this.transform.scale*(((h=(b=this._config)==null?void 0:b.effects)==null?void 0:h.scale_x)||1),_=this.transform.scale*(((w=(v=this._config)==null?void 0:v.effects)==null?void 0:w.scale_y)||1);this.pixiObject.x=this.transform.position.x,this.pixiObject.y=this.transform.position.y,this.pixiObject.rotation=this.transform.rotation,(y=this.pixiObject.scale)!=null&&y.set?this.pixiObject.scale.set(I,_):this.pixiObject.scale&&(this.pixiObject.scale.x=I,this.pixiObject.scale.y=_)}}}getComponent(e){return this._config[e]}getPosition(){return{...this.transform.position}}setPosition(e,t){this.transform.position={x:e,y:t},this.transform.syncToPixi(this.pixiObject)}getAlpha(){return this.renderer.alpha}setAlpha(e){this.renderer.alpha=e,this.renderer.syncToPixi(this.pixiObject)}getVisible(){return this.renderer.visible}setVisible(e){this.renderer.visible=e,this.renderer.syncToPixi(this.pixiObject)}},nt=class{constructor(e){this.objects=new Map;this.onObjectRebuildRequired=null;this.config=e}create(e,t){let n=this.config.objects.get(e);if(!n)throw new Error(`Object config not found: ${e}`);let a=new It(e,n.object_config||e,t,n);return this.objects.set(e,a),a.onRebuildRequired=async(s,r)=>{if(this.onObjectRebuildRequired){console.log(`[GameObjectManager] Triggering rebuild for ${e}`);let o=await this.onObjectRebuildRequired(e,r);o&&this.objects.get(e)===o&&console.log(`[GameObjectManager] \u2705 Rebuilt ${e} successfully`)}else console.warn(`[GameObjectManager] Rebuild required for ${e} but no factory provided`),s.updateConfig(r)},a}get(e){return this.objects.get(e)}updateConfig(e){this.config=e;for(let[t,n]of this.objects.entries()){let a=e.objects.get(t);a&&n.updateConfig(a)}}getAll(){return Array.from(this.objects.values())}remove(e){let t=this.objects.get(e);t&&t.destroy(),this.objects.delete(e)}clear(){for(let e of this.objects.values())e.destroy();this.objects.clear()}};var ni={"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 Sa(i){let e=ni[i];return e?e.family:(console.warn(`Font ID "${i}" not found in registry, using fallback`),"Arial, sans-serif")}function Ea(i){var t;let e=ni[i];return e&&(t=e.weight)!=null?t:"400"}function Ca(i,e){ni[i]=e}function Aa(){return Object.keys(ni)}var at=null;function ir(){return console.log("[LottieOverlay] getLottie called, lottieLib cached?",!!at),console.log("[LottieOverlay] window.lottie exists?",typeof window!="undefined"&&!!window.lottie),at||(typeof window!="undefined"&&window.lottie?(at=window.lottie,console.log("[LottieOverlay] \u2705 Found window.lottie, cached it")):(console.warn("[LottieOverlay] \u274C lottie-web is not available globally. Make sure it is loaded before using Lottie animations."),console.log("[LottieOverlay] window keys:",typeof window!="undefined"?Object.keys(window).filter(i=>i.toLowerCase().includes("lottie")):"no window"),at=null)),at}function nr(i){return!i||i.startsWith("http://")||i.startsWith("https://")||i.startsWith("/")?i:`/${i.replace(/^\.\//,"")}`}function ar(i){try{let e=new XMLHttpRequest;return e.open("GET",nr(i),!1),e.send(null),e.status<200||e.status>=300||!e.responseText?null:JSON.parse(e.responseText)}catch{return null}}function La(i){return!i||typeof i!="object"||!Array.isArray(i.layers)?null:(Array.isArray(i.assets)||(i.assets=[]),Array.isArray(i.chars)||(i.chars=[]),i)}function Xt(i){at=i}function Ta(i,e,t,n){var I,_,G,R,N,$,L,S,E,A,T,F,ue,xe,Se,Ee,Ce,Ae,Le;let a=t.objects.get(i);if(!a)return console.warn(`[LottieOverlay] Object config not found: ${i}`),null;let s=((I=a.effects)==null?void 0:I.lottie)||{},r=a.transform||{},o=a.render||{};if(s.enabled===!1||o.visible===!1)return null;let c=n==null?void 0:n[i],l=La(c);if(!l){let V=(G=(_=a.render)==null?void 0:_.asset)==null?void 0:G.path;if(typeof V=="string"&&V.toLowerCase().endsWith(".json")){let _e=ar(V);if(l=La(_e),l)try{n[i]=l}catch{}}}if(!l){let V=c&&typeof c=="object"?Object.prototype.toString.call(c):typeof c;return console.warn(`[LottieOverlay] Lottie JSON invalid for: ${i}`,{kind:V}),null}let u=ir();if(!u)return console.warn(`[LottieOverlay] lottie-web is not available. Cannot play animation: ${i}`),null;let d=(R=s.width)!=null?R:300,p=(N=s.height)!=null?N:300,g=($=r.scale)!=null?$:1,m=((S=(L=r.position)==null?void 0:L.x)!=null?S:0)+((A=(E=r.offset)==null?void 0:E.x)!=null?A:0),f=((F=(T=r.position)==null?void 0:T.y)!=null?F:0)+((xe=(ue=r.offset)==null?void 0:ue.y)!=null?xe:0),C=(Se=r.rotation)!=null?Se:0,b=(Ee=o.z_index)!=null?Ee:100,h=(Ce=o.alpha)!=null?Ce:1,v=document.createElement("div");v.style.cssText=`
246
246
  position: absolute;
247
247
  top: calc(50% + ${f}px);
248
248
  left: calc(50% + ${m}px);
@@ -252,4 +252,4 @@ Style guidelines: ${n.summary}`;this.promptInput.value=a,this.currentPrompt=a}}c
252
252
  pointer-events: none;
253
253
  z-index: ${b};
254
254
  opacity: ${h};
255
- `,e.appendChild(v);let w;try{w=u.loadAnimation({container:v,renderer:s.renderer||"svg",loop:(Ae=s.loop)!=null?Ae:!1,autoplay:(Le=s.autoplay)!=null?Le:!0,animationData:l})}catch(V){return v.parentNode&&v.parentNode.removeChild(v),console.warn(`[LottieOverlay] Failed to start animation: ${i}`,V),null}s.speed!==void 0&&w.setSpeed(s.speed);let y=()=>{w.destroy(),v.parentNode&&v.parentNode.removeChild(v)};return s.loop||w.addEventListener("complete",y),{animation:w,cleanup:y}}Ht();yi();var ai=class{constructor(e,t,n){this.systems=[];this.totalTime=0;this.context=null;this.root=e,this.config=t,this.destinationUrl=n}async createApp(e){if(this.context)return{app:this.app,gameObjectManager:this.gameObjectManager};let{app:t,stage:n}=await ii(this.root,{background:e.background_color,text:e.text_color,primary:e.cta_background,cta_text:e.cta_text});this.app=t,this.stage=n,this.gameObjectManager=new nt(this.config),this.stage.eventMode="passive",this.stage.interactive=!1,this.stage.interactiveChildren=!0,this.stage.sortableChildren=!0,this.context={app:this.app,stage:this.stage,config:this.config,gameObjectManager:this.gameObjectManager,destinationUrl:this.destinationUrl,root:this.root,engine:this};for(let a of this.systems)a.setContext(this.context);return{app:this.app,gameObjectManager:this.gameObjectManager}}async initSystems(){if(!this.context)throw new Error("[GameEngine] createApp() must be called before initSystems()");for(let e of this.systems)e.init&&await e.init()}async init(e){return await this.createApp(e),await this.initSystems(),{app:this.app,gameObjectManager:this.gameObjectManager}}registerSystems(e){this.systems.push(...e)}async start(){for(let e of this.systems)e.onStart&&await e.onStart();this.app.ticker.add(this.update.bind(this)),window.addEventListener("handler-preview:screen",e=>{let{width:t,height:n}=e.detail;this.resize(t,n)})}update(e){let t=e.deltaTime/60;this.totalTime+=t;for(let n of this.systems)n.update&&n.update(t,this.totalTime)}resize(e,t){for(let n of this.systems)n.onResize&&n.onResize(e,t)}updateConfig(e){this.config=e;for(let t of this.systems)t.context.config=e,t.onConfigUpdate&&t.onConfigUpdate(e)}destroy(){for(let e of this.systems)e.onDestroy&&e.onDestroy();this.app.ticker.remove(this.update.bind(this)),this.app.destroy(!0,{children:!0,texture:!1})}getApp(){return this.app}getGameObjectManager(){return this.gameObjectManager}getTotalTime(){return this.totalTime}getSystem(e){let t=this.systems.find(n=>n instanceof e);if(!t)throw new Error(`System ${e.name} not found!`);return t}};var st=class{setContext(e){this.context=e}};var rt=class{constructor(){this.config=null}init(e){this.config=e}get(e){if(!this.config)throw new Error("RuntimeObjectRegistry not initialized. Call init() first.");return this.config.objects.get(e)}getAllIds(){if(!this.config)throw new Error("RuntimeObjectRegistry not initialized. Call init() first.");return Array.from(this.config.objects.keys())}has(e){return this.config?this.config.objects.has(e):!1}};var Ia=li(require("pixi.js"),1),Ma=Ia;typeof window!="undefined"&&(window.__basePixi=Ia);yt();var we=require("pixi.js");yt();var ja=i=>i*Math.PI/180;function or(i,e){var r,o,c,l,u;let t=e.ui;if(!(t!=null&&t.text))return null;let n="#ffffff";(r=e.render)!=null&&r.tint&&(n=e.render.tint);let a=new we.TextStyle({fontFamily:(o=t.font)!=null?o:"Arial",fontSize:(c=t.fontSize)!=null?c:16,fill:n,align:(l=t.align)!=null?l:"center",letterSpacing:(u=t.letterSpacing)!=null?u:0}),s=new we.Text({text:t.text,style:a});return s.label=i,s}function _a(i){var u,d,p,g,m,f,C,b,h,v;let{stage:e,mainContainer:t,activeConfig:n,gameObjectManager:a,allowList:s,denyList:r}=i,o={},c={},l={};t.sortableChildren=!0;for(let[w,y]of n.objects.entries()){if(r!=null&&r.has(w)||s&&!s.has(w)||(y==null?void 0:y.enabled)===!1)continue;let I=(d=(u=y==null?void 0:y.render)==null?void 0:u.asset)==null?void 0:d.path,_=(g=(p=y==null?void 0:y.render)==null?void 0:p.asset)==null?void 0:g.type,G=!!(I&&_==="image"),R=!!((m=y==null?void 0:y.ui)!=null&&m.text),N=R?(f=y==null?void 0:y.ui)==null?void 0:f.renderMode:void 0,$;if(N==="png"&&G?$="png":N==="text"&&R?$="text":G?$="png":R?$="text":$="skip",$!=="skip"){if($==="text"){let L=or(w,y);if(!L)continue;let S=y.render;L.alpha=typeof(S==null?void 0:S.alpha)=="number"?S.alpha:1,L.visible=(S==null?void 0:S.visible)!==!1,L.zIndex=typeof(S==null?void 0:S.z_index)=="number"?S.z_index:0,S!=null&&S.anchor&&typeof S.anchor.x=="number"&&typeof S.anchor.y=="number"?L.anchor.set(S.anchor.x,S.anchor.y):L.anchor.set(.5,.5);let E=y.transform,A=(E==null?void 0:E.position)||(E==null?void 0:E.offset);A&&L.position.set((C=A.x)!=null?C:0,(b=A.y)!=null?b:0);let T=typeof(E==null?void 0:E.scale)=="number"?E.scale:1;L.scale.set(T,T);let F=typeof(E==null?void 0:E.rotation)=="number"?E.rotation:0;L.rotation=ja(F),L.parent||t.addChild(L);try{a.create(w,L)}catch{}o[w]=L,l[w]=L}else if($==="png"){let L=Ie[w]||(typeof we.Texture!="undefined"?we.Texture.EMPTY:void 0),S=new we.Sprite(L);S.label=w;let E=y.render;S.alpha=typeof(E==null?void 0:E.alpha)=="number"?E.alpha:1,S.visible=(E==null?void 0:E.visible)!==!1,S.zIndex=typeof(E==null?void 0:E.z_index)=="number"?E.z_index:0,E!=null&&E.anchor&&typeof E.anchor.x=="number"&&typeof E.anchor.y=="number"&&S.anchor.set(E.anchor.x,E.anchor.y);let A=y.transform,T=(A==null?void 0:A.position)||(A==null?void 0:A.offset);T&&S.position.set((h=T.x)!=null?h:0,(v=T.y)!=null?v:0);let F=typeof(A==null?void 0:A.scale)=="number"?A.scale:1;S.scale.set(F,F);let ue=typeof(A==null?void 0:A.rotation)=="number"?A.rotation:0;S.rotation=ja(ue),S.parent||t.addChild(S);try{a.create(w,S)}catch{}o[w]=S,c[w]=S}}}return t.parent||e.addChild(t),{objects:o,sprites:c,texts:l}}var Ni=class{constructor(){this.instanceCache=new Map;this.readyPromise=null;this.app=null;this.registry=new rt}init(e,t){this.registry.init(e),this.app=t}updateConfig(e){this.registry.init(e),this.instanceCache.clear(),this.readyPromise=null}async ready(){this.readyPromise&&await this.readyPromise;let t=this.registry.getAllIds().filter(a=>!this.instanceCache.has(a));if(t.length===0)return;let n=async a=>{a.length&&(console.log("[Assets] Loading objects:",a),await Promise.all(a.map(async s=>{var o;let r=this.registry.get(s);if(!r){console.warn("[Assets] No config found for object:",s);return}try{let c=await be.create(s,r,this.app);this.instanceCache.set(s,c),console.log("[Assets] Loaded object:",s,(o=c==null?void 0:c.constructor)==null?void 0:o.name)}catch(c){console.error("[Assets] Failed to load object:",s,c)}})))};return this.readyPromise=(async()=>{await n(t);let a=this.registry.getAllIds().filter(s=>!this.instanceCache.has(s));a.length>0&&(console.warn("[Assets] Retrying missing assets:",a),await n(a)),console.log("[Assets] Ready. Cached objects:",Array.from(this.instanceCache.keys()))})(),this.readyPromise}resetScene(){this.instanceCache.clear(),this.readyPromise=null}async reloadObject(e){let t=this.registry.get(e);if(t){let n=await be.create(e,t,this.app);this.instanceCache.set(e,n)}}get(e){return this.instanceCache.get(e)}},Oa=new Ni,Ra=new Proxy(Oa,{get(i,e){if(e in i&&typeof i[e]=="function")return i[e].bind(i);if(i.get(e))return i.get(e)}});function za(i,e){Oa.init(i,e)}yt();var si=class extends st{async init(){Nt(this.context.config,this.context.app),await Ie.ready(),console.log("[AssetSystem] All assets preloaded and ready")}async onStart(){}onConfigUpdate(){console.log("[AssetSystem] Config updated - systems will refresh textures")}};function $a(i){var o,c,l;let{setState:e,updateLabelAlpha:t,updateHandAlpha:n,config:a,states:s}=i,r=((c=(o=a.engine)==null?void 0:o.runtime)==null?void 0:c.timeline)||{};e(s.showHook),setTimeout(()=>{t(1),n(1),e(s.waitInput),console.log("[GAME] \u23F3 Game ready for user input - tutorial shown")},(l=r.tutorial_delay_ms)!=null?l:1500)}0&&(module.exports={AssetCache,AssetLoader,AssetSystem,AssetTextures,Assets,BaseSystem,GameEngine,GameObject,GameObjectManager,ObjectFactory,Renderer,RuntimeObjectRegistry,Transform,applyScreenAnchor,basePixi,clearResponsiveElements,createPixiBase,getRegisteredFontIds,globalResponsiveMultipliers,initAssetTextures,initAssets,layout,playLottieOverlay,registerFont,registerType,resolveAnchorVec2,resolveFont,resolveFontWeight,resolveScreenAnchorPoint,resolveScreenRatioPoint,runInitSequence,setLottieInstance,spawnSceneFromConfig,updateScreenState});
255
+ `,e.appendChild(v);let w;try{w=u.loadAnimation({container:v,renderer:s.renderer||"svg",loop:(Ae=s.loop)!=null?Ae:!1,autoplay:(Le=s.autoplay)!=null?Le:!0,animationData:l})}catch(V){return v.parentNode&&v.parentNode.removeChild(v),console.warn(`[LottieOverlay] Failed to start animation: ${i}`,V),null}s.speed!==void 0&&w.setSpeed(s.speed);let y=()=>{w.destroy(),v.parentNode&&v.parentNode.removeChild(v)};return s.loop||w.addEventListener("complete",y),{animation:w,cleanup:y}}Ht();yi();var ai=class{constructor(e,t,n){this.systems=[];this.totalTime=0;this.context=null;this.root=e,this.config=t,this.destinationUrl=n}async createApp(e){if(this.context)return{app:this.app,gameObjectManager:this.gameObjectManager};let{app:t,stage:n}=await ii(this.root,{background:e.background_color,text:e.text_color,primary:e.cta_background,cta_text:e.cta_text});this.app=t,this.stage=n,this.gameObjectManager=new nt(this.config),this.stage.eventMode="passive",this.stage.interactive=!1,this.stage.interactiveChildren=!0,this.stage.sortableChildren=!0,this.context={app:this.app,stage:this.stage,config:this.config,gameObjectManager:this.gameObjectManager,destinationUrl:this.destinationUrl,root:this.root,engine:this};for(let a of this.systems)a.setContext(this.context);return{app:this.app,gameObjectManager:this.gameObjectManager}}async initSystems(){if(!this.context)throw new Error("[GameEngine] createApp() must be called before initSystems()");for(let e of this.systems)e.init&&await e.init()}async init(e){return await this.createApp(e),await this.initSystems(),{app:this.app,gameObjectManager:this.gameObjectManager}}registerSystems(e){this.systems.push(...e)}async start(){for(let e of this.systems)e.onStart&&await e.onStart();this.app.ticker.add(this.update.bind(this)),window.addEventListener("handler-preview:screen",e=>{let{width:t,height:n}=e.detail;this.resize(t,n)})}update(e){let t=e.deltaTime/60;this.totalTime+=t;for(let n of this.systems)n.update&&n.update(t,this.totalTime)}resize(e,t){for(let n of this.systems)n.onResize&&n.onResize(e,t)}updateConfig(e){this.config=e;for(let t of this.systems)t.context.config=e,t.onConfigUpdate&&t.onConfigUpdate(e)}destroy(){for(let e of this.systems)e.onDestroy&&e.onDestroy();this.app.ticker.remove(this.update.bind(this)),this.app.destroy(!0,{children:!0,texture:!1})}getApp(){return this.app}getGameObjectManager(){return this.gameObjectManager}getTotalTime(){return this.totalTime}getSystem(e){let t=this.systems.find(n=>n instanceof e);if(!t)throw new Error(`System ${e.name} not found!`);return t}};var st=class{setContext(e){this.context=e}};var rt=class{constructor(){this.config=null}init(e){this.config=e}get(e){if(!this.config)throw new Error("RuntimeObjectRegistry not initialized. Call init() first.");return this.config.objects.get(e)}getAllIds(){if(!this.config)throw new Error("RuntimeObjectRegistry not initialized. Call init() first.");return Array.from(this.config.objects.keys())}has(e){return this.config?this.config.objects.has(e):!1}};var ka=li(require("pixi.js"),1),Pa=ka;typeof window!="undefined"&&(window.__basePixi=ka);yt();var we=require("pixi.js");yt();var Ia=i=>i*Math.PI/180;function sr(i,e){var r,o,c,l,u;let t=e.ui;if(!(t!=null&&t.text))return null;let n="#ffffff";(r=e.render)!=null&&r.tint&&(n=e.render.tint);let a=new we.TextStyle({fontFamily:(o=t.font)!=null?o:"Arial",fontSize:(c=t.fontSize)!=null?c:16,fill:n,align:(l=t.align)!=null?l:"center",letterSpacing:(u=t.letterSpacing)!=null?u:0}),s=new we.Text({text:t.text,style:a});return s.label=i,s}function Ma(i){var u,d,p,g,m,f,C,b,h,v;let{stage:e,mainContainer:t,activeConfig:n,gameObjectManager:a,allowList:s,denyList:r}=i,o={},c={},l={};t.sortableChildren=!0;for(let[w,y]of n.objects.entries()){if(r!=null&&r.has(w)||s&&!s.has(w)||(y==null?void 0:y.enabled)===!1)continue;let I=(d=(u=y==null?void 0:y.render)==null?void 0:u.asset)==null?void 0:d.path,_=(g=(p=y==null?void 0:y.render)==null?void 0:p.asset)==null?void 0:g.type,G=!!(I&&_==="image"),R=!!((m=y==null?void 0:y.ui)!=null&&m.text),N=R?(f=y==null?void 0:y.ui)==null?void 0:f.renderMode:void 0,$;if(N==="png"&&G?$="png":N==="text"&&R?$="text":G?$="png":R?$="text":$="skip",$!=="skip"){if($==="text"){let L=sr(w,y);if(!L)continue;let S=y.render;L.alpha=typeof(S==null?void 0:S.alpha)=="number"?S.alpha:1,L.visible=(S==null?void 0:S.visible)!==!1,L.zIndex=typeof(S==null?void 0:S.z_index)=="number"?S.z_index:0,S!=null&&S.anchor&&typeof S.anchor.x=="number"&&typeof S.anchor.y=="number"?L.anchor.set(S.anchor.x,S.anchor.y):L.anchor.set(.5,.5);let E=y.transform,A=(E==null?void 0:E.position)||(E==null?void 0:E.offset);A&&L.position.set((C=A.x)!=null?C:0,(b=A.y)!=null?b:0);let T=typeof(E==null?void 0:E.scale)=="number"?E.scale:1;L.scale.set(T,T);let F=typeof(E==null?void 0:E.rotation)=="number"?E.rotation:0;L.rotation=Ia(F),L.parent||t.addChild(L);try{a.create(w,L)}catch{}o[w]=L,l[w]=L}else if($==="png"){let L=Ie[w]||(typeof we.Texture!="undefined"?we.Texture.EMPTY:void 0),S=new we.Sprite(L);S.label=w;let E=y.render;S.alpha=typeof(E==null?void 0:E.alpha)=="number"?E.alpha:1,S.visible=(E==null?void 0:E.visible)!==!1,S.zIndex=typeof(E==null?void 0:E.z_index)=="number"?E.z_index:0,E!=null&&E.anchor&&typeof E.anchor.x=="number"&&typeof E.anchor.y=="number"&&S.anchor.set(E.anchor.x,E.anchor.y);let A=y.transform,T=(A==null?void 0:A.position)||(A==null?void 0:A.offset);T&&S.position.set((h=T.x)!=null?h:0,(v=T.y)!=null?v:0);let F=typeof(A==null?void 0:A.scale)=="number"?A.scale:1;S.scale.set(F,F);let ue=typeof(A==null?void 0:A.rotation)=="number"?A.rotation:0;S.rotation=Ia(ue),S.parent||t.addChild(S);try{a.create(w,S)}catch{}o[w]=S,c[w]=S}}}return t.parent||e.addChild(t),{objects:o,sprites:c,texts:l}}var Ni=class{constructor(){this.instanceCache=new Map;this.readyPromise=null;this.app=null;this.registry=new rt}init(e,t){this.registry.init(e),this.app=t}updateConfig(e){this.registry.init(e),this.instanceCache.clear(),this.readyPromise=null}async ready(){this.readyPromise&&await this.readyPromise;let t=this.registry.getAllIds().filter(a=>!this.instanceCache.has(a));if(t.length===0)return;let n=async a=>{a.length&&(console.log("[Assets] Loading objects:",a),await Promise.all(a.map(async s=>{var o;let r=this.registry.get(s);if(!r){console.warn("[Assets] No config found for object:",s);return}try{let c=await be.create(s,r,this.app);this.instanceCache.set(s,c),console.log("[Assets] Loaded object:",s,(o=c==null?void 0:c.constructor)==null?void 0:o.name)}catch(c){console.error("[Assets] Failed to load object:",s,c)}})))};return this.readyPromise=(async()=>{await n(t);let a=this.registry.getAllIds().filter(s=>!this.instanceCache.has(s));a.length>0&&(console.warn("[Assets] Retrying missing assets:",a),await n(a)),console.log("[Assets] Ready. Cached objects:",Array.from(this.instanceCache.keys()))})(),this.readyPromise}resetScene(){this.instanceCache.clear(),this.readyPromise=null}async reloadObject(e){let t=this.registry.get(e);if(t){let n=await be.create(e,t,this.app);this.instanceCache.set(e,n)}}get(e){return this.instanceCache.get(e)}},ja=new Ni,_a=new Proxy(ja,{get(i,e){if(e in i&&typeof i[e]=="function")return i[e].bind(i);if(i.get(e))return i.get(e)}});function Oa(i,e){ja.init(i,e)}yt();var si=class extends st{async init(){Nt(this.context.config,this.context.app),await Ie.ready(),console.log("[AssetSystem] All assets preloaded and ready")}async onStart(){}onConfigUpdate(){console.log("[AssetSystem] Config updated - systems will refresh textures")}};function Ra(i){var o,c,l;let{setState:e,updateLabelAlpha:t,updateHandAlpha:n,config:a,states:s}=i,r=((c=(o=a.engine)==null?void 0:o.runtime)==null?void 0:c.timeline)||{};e(s.showHook),setTimeout(()=>{t(1),n(1),e(s.waitInput),console.log("[GAME] \u23F3 Game ready for user input - tutorial shown")},(l=r.tutorial_delay_ms)!=null?l:1500)}0&&(module.exports={AssetCache,AssetLoader,AssetSystem,AssetTextures,Assets,BaseSystem,GameEngine,GameObject,GameObjectManager,ObjectFactory,Renderer,RuntimeObjectRegistry,Transform,applyScreenAnchor,basePixi,clearResponsiveElements,createPixiBase,getRegisteredFontIds,globalResponsiveMultipliers,initAssetTextures,initAssets,layout,playLottieOverlay,registerFont,registerType,resolveAnchorVec2,resolveFont,resolveFontWeight,resolveScreenAnchorPoint,resolveScreenRatioPoint,runInitSequence,setLottieInstance,spawnSceneFromConfig,updateScreenState});