handler-playable-sdk 0.3.72 → 0.3.76

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.css CHANGED
@@ -566,6 +566,10 @@
566
566
  transition: all var(--ui-duration-normal) var(--ui-ease);
567
567
  }
568
568
 
569
+ .scene-tools-corner-panel.dragging {
570
+ transition: none !important;
571
+ }
572
+
569
573
  .scene-tools-header {
570
574
  display: flex;
571
575
  align-items: center;
@@ -2830,6 +2834,7 @@
2830
2834
 
2831
2835
  .preview-shell.layout-fixed .workbench-header,
2832
2836
  .preview-shell.layout-fixed .console-header,
2837
+ .preview-shell.layout-fixed .library-panel .scene-panel-header,
2833
2838
  .preview-shell.layout-fixed .workbench-tab[data-tab="library"],
2834
2839
  .preview-shell.layout-fixed .workbench-tab-panel[data-tab-panel="library"],
2835
2840
  .preview-shell.layout-fixed .console-panel.docked-hidden,
@@ -2851,8 +2856,9 @@
2851
2856
  z-index: 100;
2852
2857
  }
2853
2858
 
2854
- .bottom-dock.hidden {
2855
- display: none;
2859
+ /* Hide library header inside dock */
2860
+ #dock-library-content .scene-panel-header {
2861
+ display: none !important;
2856
2862
  }
2857
2863
 
2858
2864
  .bottom-dock-tabs {
@@ -2890,19 +2896,29 @@
2890
2896
  flex: 1;
2891
2897
  overflow: hidden;
2892
2898
  position: relative;
2899
+ display: flex;
2900
+ gap: 0;
2893
2901
  }
2894
2902
 
2895
2903
  .bottom-dock-panel {
2896
- display: none;
2904
+ display: flex;
2905
+ flex-direction: column;
2897
2906
  height: 100%;
2907
+ flex: 1;
2908
+ border-right: 1px solid var(--ui-border);
2909
+ }
2910
+
2911
+ .bottom-dock-panel:last-child {
2912
+ border-right: none;
2898
2913
  }
2899
2914
 
2900
2915
  .bottom-dock-panel.active {
2901
- display: block;
2916
+ display: flex;
2902
2917
  }
2903
2918
 
2904
2919
  #dock-console-content {
2905
2920
  background: var(--ui-bg-1);
2921
+ flex: 1;
2906
2922
  }
2907
2923
 
2908
2924
  #dock-console-content .console-messages {
@@ -2911,6 +2927,18 @@
2911
2927
  padding: 12px;
2912
2928
  }
2913
2929
 
2930
+ #dock-library-content {
2931
+ flex: 1.5;
2932
+ /* Give library more space */
2933
+ }
2934
+
2935
+ #dock-library-content .library-panel {
2936
+ width: 100% !important;
2937
+ height: 100% !important;
2938
+ border-radius: 0;
2939
+ border: none;
2940
+ }
2941
+
2914
2942
  .bottom-dock-resize-handle {
2915
2943
  position: absolute;
2916
2944
  top: 0;
@@ -2978,17 +3006,32 @@
2978
3006
  .workbench-content {
2979
3007
  flex: 1;
2980
3008
  overflow-y: auto;
3009
+ overflow-x: hidden;
2981
3010
  padding: var(--space-md);
3011
+ min-width: 0;
3012
+ /* Allow shrinking below content size */
2982
3013
  }
2983
3014
 
2984
3015
  .workbench-tab-panel {
2985
3016
  display: none;
3017
+ width: 100%;
3018
+ min-width: 0;
3019
+ max-width: 100%;
3020
+ box-sizing: border-box;
2986
3021
  }
2987
3022
 
2988
3023
  .workbench-tab-panel.active {
2989
3024
  display: block;
2990
3025
  }
2991
3026
 
3027
+ /* Force all direct children inside tab panels to respect width */
3028
+ .workbench-tab-panel>* {
3029
+ width: 100% !important;
3030
+ min-width: 0 !important;
3031
+ max-width: 100% !important;
3032
+ box-sizing: border-box;
3033
+ }
3034
+
2992
3035
  .workbench-resize-handle {
2993
3036
  position: absolute;
2994
3037
  bottom: 0;
@@ -3529,6 +3572,8 @@
3529
3572
  .workbench-content .scene-panel {
3530
3573
  position: static;
3531
3574
  width: 100% !important;
3575
+ min-width: 0 !important;
3576
+ max-width: 100% !important;
3532
3577
  max-height: none !important;
3533
3578
 
3534
3579
  /* Preserve “card” styling so embedded panels don't look unstyled */
@@ -3539,6 +3584,21 @@
3539
3584
  overflow: hidden;
3540
3585
  }
3541
3586
 
3587
+ /* Specific overrides for panels that have hardcoded widths */
3588
+ .workbench-content .inspector-panel,
3589
+ .workbench-content .library-panel,
3590
+ .workbench-content .ai-tools-panel {
3591
+ width: 100% !important;
3592
+ min-width: 0 !important;
3593
+ max-width: 100% !important;
3594
+ }
3595
+
3596
+ .workbench-content .inspector-header,
3597
+ .workbench-content .ai-tabs {
3598
+ margin-left: 0;
3599
+ margin-right: 0;
3600
+ }
3601
+
3542
3602
  .workbench-content .scene-panel-header {
3543
3603
  display: none;
3544
3604
 
@@ -5085,6 +5145,10 @@
5085
5145
  opacity var(--ui-duration-fast) var(--ui-ease);
5086
5146
  }
5087
5147
 
5148
+ .nudge-panel.dragging {
5149
+ transition: none !important;
5150
+ }
5151
+
5088
5152
  .nudge-panel.hidden {
5089
5153
  opacity: 0;
5090
5154
  pointer-events: none;
package/dist/index.d.cts CHANGED
@@ -610,6 +610,7 @@ declare class DebugPanel implements DebugPanelContext {
610
610
  nudgePanel: NudgePanel;
611
611
  inspectorPanel: InspectorPanel;
612
612
  libraryPanel: LibraryPanel;
613
+ libraryPanelDocked: LibraryPanel;
613
614
  brandVisionPanel: BrandVisionPanel;
614
615
  customizeSettingsPanel: CustomizeSettingsPanel;
615
616
  configPersistencePanel: ConfigPersistencePanel;
package/dist/index.d.ts CHANGED
@@ -610,6 +610,7 @@ declare class DebugPanel implements DebugPanelContext {
610
610
  nudgePanel: NudgePanel;
611
611
  inspectorPanel: InspectorPanel;
612
612
  libraryPanel: LibraryPanel;
613
+ libraryPanelDocked: LibraryPanel;
613
614
  brandVisionPanel: BrandVisionPanel;
614
615
  customizeSettingsPanel: CustomizeSettingsPanel;
615
616
  configPersistencePanel: ConfigPersistencePanel;
package/dist/index.js CHANGED
@@ -1 +1 @@
1
- import{E as F,F as G,G as H,H as I,I as J,J as K,K as L,L as M,M as N,N as O,O as P,P as Q,Q as R,R as S,S as T,T as U,U as V,a}from"./chunk-RSBYFD7B.js";import"./chunk-I5OOVR5U.js";import{a as q,b as r,c as s,d as t,e as u,f as v,g as w,h as x,i as y,j as z,k as A,l as B,m as C,n as D,o as E}from"./chunk-LV4HGC5G.js";import{a as b,b as c,c as d,d as e,e as f,f as g,g as h,h as i,i as j,j as k,k as l,l as m,m as n,n as o,o as p}from"./chunk-ZLL42OOV.js";import"./chunk-E6WJCS24.js";import"./chunk-JXBG6UFL.js";export{Q as COLORS,B as ConfigWatcher,K as DebugPanel,A as DefaultReloadStrategy,U as Handler,T as PlayableLoadingScreen,L as PreviewShell,R as STROKE_WIDTH,S as THEME,d as applyConfigOverride,e as applyConfigOverrides,n as applyConfigsToDisk,x as applyDefaults,a as baseLottie,P as bootstrap,f as clearConfigOverrides,g as clearConfigOverridesForObject,j as configOverrideManager,M as createPreviewShell,k as deepClone,V as default,H as defaultPreset,G as deviceGroups,F as devicePresets,C as diffConfigs,l as exportConfigsAsJSON,i as getConfigOverrides,m as getConfigStateSummary,b as getOverrideMode,I as getPresetById,J as getPresetsByCategory,s as loadAllObjectConfigs,q as loadComponentSchemas,t as loadEngineConfig,u as loadGamePromptConfig,y as loadObjectCentricConfig,r as loadObjectConfig,v as loadSceneConfig,D as rehydrateObject,h as removeConfigOverride,o as resetToApplied,p as resetToOriginal,O as setBootstrapDependencies,c as setOverrideMode,E as setupHotReload,N as setupLiveEditBridge,z as toLegacyFormat,w as validateObjectConfig};
1
+ import{E as F,F as G,G as H,H as I,I as J,J as K,K as L,L as M,M as N,N as O,O as P,P as Q,Q as R,R as S,S as T,T as U,U as V,a}from"./chunk-GNO7ZYE4.js";import"./chunk-I5OOVR5U.js";import{a as q,b as r,c as s,d as t,e as u,f as v,g as w,h as x,i as y,j as z,k as A,l as B,m as C,n as D,o as E}from"./chunk-LV4HGC5G.js";import{a as b,b as c,c as d,d as e,e as f,f as g,g as h,h as i,i as j,j as k,k as l,l as m,m as n,n as o,o as p}from"./chunk-ZLL42OOV.js";import"./chunk-E6WJCS24.js";import"./chunk-JXBG6UFL.js";export{Q as COLORS,B as ConfigWatcher,K as DebugPanel,A as DefaultReloadStrategy,U as Handler,T as PlayableLoadingScreen,L as PreviewShell,R as STROKE_WIDTH,S as THEME,d as applyConfigOverride,e as applyConfigOverrides,n as applyConfigsToDisk,x as applyDefaults,a as baseLottie,P as bootstrap,f as clearConfigOverrides,g as clearConfigOverridesForObject,j as configOverrideManager,M as createPreviewShell,k as deepClone,V as default,H as defaultPreset,G as deviceGroups,F as devicePresets,C as diffConfigs,l as exportConfigsAsJSON,i as getConfigOverrides,m as getConfigStateSummary,b as getOverrideMode,I as getPresetById,J as getPresetsByCategory,s as loadAllObjectConfigs,q as loadComponentSchemas,t as loadEngineConfig,u as loadGamePromptConfig,y as loadObjectCentricConfig,r as loadObjectConfig,v as loadSceneConfig,D as rehydrateObject,h as removeConfigOverride,o as resetToApplied,p as resetToOriginal,O as setBootstrapDependencies,c as setOverrideMode,E as setupHotReload,N as setupLiveEditBridge,z as toLegacyFormat,w as validateObjectConfig};
@@ -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(o=>{o.addEventListener("click",()=>this.close())}),this.modal.querySelectorAll("[data-tab]").forEach(o=>{o.addEventListener("click",s=>{let c=s.target.dataset.tab;c&&this.switchTab(c)})});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 r=this.modal.querySelector("[data-modal-apply]");r==null||r.addEventListener("click",()=>{this.apply()}),this.modal.addEventListener("click",o=>{o.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 Hr={};Vi(Hr,{AssetCache:()=>Q,AssetLoader:()=>he,AssetSystem:()=>It,AssetTextures:()=>fe,Assets:()=>pa,BaseSystem:()=>He,GameEngine:()=>Ot,GameObject:()=>st,GameObjectManager:()=>$e,ObjectFactory:()=>me,Renderer:()=>ot,RuntimeObjectRegistry:()=>Ne,Transform:()=>rt,applyScreenAnchor:()=>Dt,basePixi:()=>sa,clearResponsiveElements:()=>ga,createPixiBase:()=>Mt,getRegisteredFontIds:()=>na,globalResponsiveMultipliers:()=>ct,initAssetTextures:()=>At,initAssets:()=>ua,layout:()=>fa,playLottieOverlay:()=>ra,registerFont:()=>ia,registerType:()=>wt,resolveAnchorVec2:()=>Ce,resolveFont:()=>ea,resolveFontWeight:()=>ta,resolveScreenAnchorPoint:()=>Be,resolveScreenRatioPoint:()=>Fe,runInitSequence:()=>ma,setLottieInstance:()=>St,spawnSceneFromConfig:()=>ca,updateScreenState:()=>Rt});module.exports=Ea(Hr);var Qn=require("pixi.js");var pe={};function mt(i,e,t=!1){pe[i]||(pe[i]=[]),pe[i].push({fn:e,once:t})}function Gt(i,e){if(pe[i]){if(!e){delete pe[i];return}pe[i]=pe[i].filter(t=>t.fn!==e)}}function bt(i,...e){let t=pe[i];if(t)for(let n of[...t])n.fn(...e),n.once&&Gt(i,n.fn)}function q(i,e){mt(i,e,!0)}var D=null,Y=[],Te=null;function Xi(i){D=i,Y=[],Te!==null&&(clearTimeout(Te),Te=null)}function Ji(){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 Yi(i,e,t,n){let a=JSON.stringify(e);if(t==="beacon"&&typeof navigator!="undefined"&&typeof navigator.sendBeacon=="function")try{let r=navigator.sendBeacon(i,new Blob([a],{type:"application/json"}));n&&console.log("[handler.telemetry] beacon",r,e);return}catch(r){n&&console.warn("[handler.telemetry] beacon failed, fallback to fetch",r)}try{await fetch(i,{method:"POST",headers:{"Content-Type":"application/json"},body:a,keepalive:!0}),n&&console.log("[handler.telemetry] fetch",e)}catch(r){n&&console.warn("[handler.telemetry] fetch failed",r)}}function qt(i,e){let t=Ji();if(e&&t.endpoint){if(Y.push(i),Y.length>t.maxQueue&&(Y=Y.slice(Y.length-t.maxQueue)),Y.length>=t.batchSize){Ki();return}Te===null&&(Te=window.setTimeout(()=>{Te=null,Ki()},t.flushIntervalMs))}}async function Ki(){let i=Ji();if(!i.endpoint||Y.length===0)return;let e=Y.splice(0,i.batchSize);await Yi(i.endpoint,{events:e},i.transport,i.debug),Y.length>0&&await Yi(i.endpoint,{events:Y.splice(0,i.batchSize)},i.transport,i.debug)}function Zi(i){return Math.max(0,Math.min(1,i))}function Aa(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 Ke(){return typeof performance!="undefined"&&performance.now?performance.now():Date.now()}function Sa(i,e){let t=i==null?void 0:i[e];return typeof t=="number"?t:0}function Qi(i,e,t){try{i[e]=t}catch{}}function Ca(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 en(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 tn(i,e){let t=Ca(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 nn(){let i=new Set,e=new WeakMap,t=null,n=()=>{if(t!=null)return;t=requestAnimationFrame(()=>{t=null,s(),i.size>0&&n()})},a=u=>{var p;i.add(u);let l=(p=e.get(u.target))!=null?p:new Set;l.add(u),e.set(u.target,l),n()},r=u=>{i.delete(u);let l=e.get(u.target);l&&(l.delete(u),l.size===0&&e.delete(u.target))},o=u=>{u.killed||(u.killed=!0,r(u))},s=()=>{var l,p;let u=Ke();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,A=Zi(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;A=Zi(y)}let x=g.ease(A);g.yoyo&&h%2===1&&(x=1-x);for(let y of g.props)Qi(g.target,y.key,y.from+(y.to-y.from)*x);g.scaleFrom&&g.scaleTo&&en(g.target,{x:g.scaleFrom.x+(g.scaleTo.x-g.scaleFrom.x)*x,y:g.scaleFrom.y+(g.scaleTo.y-g.scaleFrom.y)*x});try{(l=g.onUpdate)==null||l.call(g)}catch{}if(f>=b){o(g);try{(p=g.onComplete)==null||p.call(g)}catch{}}}},d=(u,l,p)=>{var y;let g=Math.max(0,(typeof l.duration=="number"?l.duration:.5)*1e3),m=Math.max(0,(typeof l.delay=="number"?l.delay:0)*1e3+((y=p==null?void 0:p.delayMsOverride)!=null?y:0)),f=Aa(l.ease),A=typeof l.repeat=="number"?Math.max(0,l.repeat|0):0,b=l.yoyo===!0,h=new Set(["duration","delay","ease","repeat","yoyo","onUpdate","onComplete","scale","scaleX","scaleY"]),x=[];for(let I of Object.keys(l)){if(h.has(I))continue;let R=l[I];typeof R=="number"&&x.push({key:I,from:Sa(u,I),to:R})}let w=tn(u,l);return{target:u,startMs:Ke(),delayMs:m,durationMs:g,ease:f,props:x,scaleFrom:w.from,scaleTo:w.to,repeat:A,yoyo:b,onUpdate:typeof l.onUpdate=="function"?l.onUpdate:void 0,onComplete:typeof l.onComplete=="function"?l.onComplete:void 0,killed:!1,paused:!1,pauseAtMs:null}},c={to(u,l){let p=d(u,l);return a(p),{kill:()=>o(p),pause:()=>{p.paused||(p.paused=!0,p.pauseAtMs=Ke())},resume:()=>{var f;if(!p.paused)return;let g=(f=p.pauseAtMs)!=null?f:Ke(),m=Ke()-g;p.startMs+=m,p.paused=!1,p.pauseAtMs=null},isActive:()=>!p.killed&&!p.paused}},fromTo(u,l,p){return c.set(u,l),c.to(u,p)},set(u,l){if(!u||!l)return;for(let g of Object.keys(l)){let m=l[g];g==="scale"||g==="scaleX"||g==="scaleY"||typeof m=="number"&&Qi(u,g,m)}let p=tn(u,l);p.to&&en(u,p.to)},killTweensOf(u){let l=e.get(u);if(l)for(let p of Array.from(l))o(p)},timeline(u={}){let l=[],p=0,g=!1,m=[],f=h=>{if(typeof h=="number")return Math.max(0,h*1e3);let x=typeof h=="string"?h.trim():"";return x.startsWith("+=")?p+Math.max(0,Number(x.slice(2))*1e3||0):x?Math.max(0,Number(x)*1e3||0):p},A=h=>{l.push(h);let x=Math.max(0,(typeof h.vars.duration=="number"?h.vars.duration:.5)*1e3);p=Math.max(p,h.atMs+x)},b={to(h,x,w){return A({kind:"to",target:h,vars:x,atMs:f(w)}),b},fromTo(h,x,w,y){return A({kind:"fromTo",target:h,vars:w,from:x,atMs:f(y)}),b},play(){var h,x;if(g)return b;g=!0,m=[];for(let w of l)w.kind==="fromTo"&&c.set(w.target,(h=w.from)!=null?h:{}),m.push(c.to(w.target,{...w.vars,delay:w.atMs/1e3+((x=w.vars.delay)!=null?x: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 c}function an(){if(typeof window=="undefined")return;let i=window;if(!i.gsap)try{i.gsap=nn()}catch{}}var rn={name:"handler-playable-sdk",version:"0.3.72",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 && 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 && 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 V=0,La=V++,on=V++,sn=V++,ln=V++,cn=V++,dn=V++,pn=V++,un=V++,gn=V++,hn=V++,fn=V++,mn=V++,P=La;function bn(){return P===on}function yn(){return P===sn}function vn(){return P===ln}function xn(){return P===cn}function Le(){return P===dn}function ke(){return P===pn}function wn(){return P===un}function En(){return P===gn}function An(){return P===hn}function Vt(){return P===fn}function Wt(){return P===mn}function Sn(){let i=typeof AD_PROTOCOL!="undefined"?AD_PROTOCOL:"none",e=typeof AD_NETWORK!="undefined"?AD_NETWORK:"web_embed";if(i==="mraid")try{mraid.getState(),P=on;return}catch{}else if(i==="dapi")try{dapi.isReady(),P=sn;return}catch{}if(e==="facebook")try{typeof FbPlayableAd!="undefined"&&(P=ln)}catch{}else if(e==="google")try{typeof ExitApi!="undefined"&&(P=cn)}catch{}else if(e==="mintegral")window.gameReady&&(P=dn);else if(e==="tapjoy")window.TJ_API&&(P=pn);else if(e==="tiktok")window.openAppStore&&(P=un);else if(e==="smadex")try{window.smxTracking&&(P=gn)}catch{}else if(e==="snapchat")try{window.ScPlayableAd&&(P=hn)}catch{}else e==="vungle"?P=fn:(i==="nucleo"||e==="nucleo")&&(P=mn)}var yt=ft(require("lottie-web"),1),Cn=yt.default;typeof window!="undefined"&&(window.lottie=yt.default,window.__baseLottie=yt.default);Xt();function $(i,e){let t=(a,r)=>r===0?a:t(r,a%r),n=t(i,e);return`${i/n}:${e/n}`}var vo=[{id:"iphone-15-pro-max",label:"iPhone 15 Pro Max",width:430,height:932,category:"iphone",ratio:$(430,932)},{id:"iphone-15-pro",label:"iPhone 15 Pro",width:393,height:852,category:"iphone",ratio:$(393,852)},{id:"iphone-15",label:"iPhone 15",width:393,height:852,category:"iphone",ratio:$(393,852)},{id:"iphone-14",label:"iPhone 14",width:390,height:844,category:"iphone",ratio:$(390,844)},{id:"iphone-se",label:"iPhone SE",width:375,height:667,category:"iphone",ratio:$(375,667)},{id:"iphone-12-mini",label:"iPhone 12 Mini",width:360,height:780,category:"iphone",ratio:$(360,780)}],xo=[{id:"pixel-8-pro",label:"Pixel 8 Pro",width:448,height:998,category:"android",ratio:$(448,998)},{id:"pixel-8",label:"Pixel 8",width:412,height:915,category:"android",ratio:$(412,915)},{id:"samsung-s24-ultra",label:"Samsung S24 Ultra",width:412,height:915,category:"android",ratio:$(412,915)},{id:"samsung-s24",label:"Samsung S24",width:360,height:780,category:"android",ratio:$(360,780)},{id:"samsung-a54",label:"Samsung A54",width:412,height:915,category:"android",ratio:$(412,915)},{id:"oneplus-12",label:"OnePlus 12",width:412,height:915,category:"android",ratio:$(412,915)}],wo=[{id:"ipad-pro-12",label:'iPad Pro 12.9"',width:1024,height:1366,category:"tablet",ratio:$(1024,1366)},{id:"ipad-pro-11",label:'iPad Pro 11"',width:834,height:1194,category:"tablet",ratio:$(834,1194)},{id:"ipad-air",label:"iPad Air",width:820,height:1180,category:"tablet",ratio:$(820,1180)},{id:"ipad-mini",label:"iPad Mini",width:768,height:1024,category:"tablet",ratio:$(768,1024)},{id:"samsung-tab-s9",label:"Samsung Tab S9",width:800,height:1280,category:"tablet",ratio:$(800,1280)}],_n=[{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:$(390,844),mraidScale:.7},{id:"ipad-mini",label:"iPad Mini",width:768,height:1024,category:"playable",ratio:$(768,1024),mraidScale:.7}];var Eo=[..._n];var Ra=_n[0];ue();var Ba=ft(require("jszip"),1);function za(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 Ha(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 Na(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 Jt(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 r=await za(a),o=await Na(r),s=Ha(r);return console.log("[ImageUtils] Success resolution:",o==null?void 0:o.width,"x",o==null?void 0:o.height,"mime:",s.mimeType),{base64:s.base64,mimeType:s.mimeType,dataUrl:r,width:(e=o==null?void 0:o.width)!=null?e:0,height:(t=o==null?void 0:o.height)!=null?t:0}}catch(n){return console.error("[ImageUtils] Error fetching image data:",n),null}}async function vt(i,e=30){try{console.log("[ImageUtils] Removing background color...");let t=await new Promise((l,p)=>{let g=new Image;g.onload=()=>l(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 r=a.getImageData(0,0,n.width,n.height),o=r.data,d=[{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(l=>({r:o[l.offset],g:o[l.offset+1],b:o[l.offset+2]})),c=0;for(let l=0;l<o.length;l+=4){let p=o[l],g=o[l+1],m=o[l+2],f=!1;for(let A of d)if(Math.sqrt(Math.pow(p-A.r,2)+Math.pow(g-A.g,2)+Math.pow(m-A.b,2))<e){f=!0;break}f&&(o[l+3]=0,c++)}return console.log(`[ImageUtils] Removed background from ${c} pixels (4-corner sampling, tolerance: ${e})`),a.putImageData(r,0,0),n.toDataURL("image/png")}catch(t){return console.error("[ImageUtils] Error removing background:",t),i}}var Mn=require("@google/genai");async function Zt(i,e,t=[],n={}){var a,r,o,s,d,c,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 l=new Mn.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 l.models.generateContent({model:p,contents:g}),f="",A=(o=(r=(a=m.candidates)==null?void 0:a[0])==null?void 0:r.content)==null?void 0:o.parts;if(A)for(let b of A)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(l){throw console.error("[Gemini] API error:",l),(s=l.message)!=null&&s.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."):(d=l.message)!=null&&d.includes("API_KEY_INVALID")?new Error("Invalid Gemini API key. Please check your API key configuration."):(c=l.message)!=null&&c.includes("QUOTA_EXCEEDED")?new Error("Gemini API quota exceeded. Please try again later or check your billing."):(u=l.message)!=null&&u.includes("SAFETY")?new Error("Content was flagged by Gemini safety filters. Please try with different images."):l}}var Pn=require("@google/genai");async function xt(i,e,t=[],n={}){try{console.info("[GEMINI-REAL-SDK] Initializing GoogleGenAI...");let a=new Pn.GoogleGenAI({apiKey:i}),r=[{text:e}];t.length>0&&t.forEach((s,d)=>{console.info(`[GEMINI-REAL-SDK] Adding image part ${d}`),r.push({inlineData:{mimeType:s.mimeType,data:s.base64}})}),console.info("[GEMINI-REAL-SDK] Calling generateContent with model: gemini-2.5-flash-image");let o=await a.models.generateContent({model:"gemini-2.5-flash-image",contents:r});if(console.info("[GEMINI-REAL-SDK] Received response from model"),!o.candidates||!o.candidates[0]||!o.candidates[0].content||!o.candidates[0].content.parts)throw new Error("Gemini 2.5 Flash Image returned invalid response structure.");for(let s of o.candidates[0].content.parts)if(s.text)console.log(s.text);else if(s.inlineData){let d=s.inlineData.data,c=s.inlineData.mimeType||"image/png";return console.info("[GEMINI-REAL-SDK] Found inline image data in response"),`data:${c};base64,${d}`}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 Wa=require("pixi.js");Xe();ue();var $n=require("pixi.js");var Ya=require("pixi.js");ue();function tr(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 ir(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 nr(i){return`
46
+ `,this.modal=n}attachModalListeners(){if(!this.modal)return;this.modal.querySelectorAll("[data-modal-close]").forEach(o=>{o.addEventListener("click",()=>this.close())}),this.modal.querySelectorAll("[data-tab]").forEach(o=>{o.addEventListener("click",s=>{let c=s.target.dataset.tab;c&&this.switchTab(c)})});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 r=this.modal.querySelector("[data-modal-apply]");r==null||r.addEventListener("click",()=>{this.apply()}),this.modal.addEventListener("click",o=>{o.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 Hr={};Vi(Hr,{AssetCache:()=>Q,AssetLoader:()=>he,AssetSystem:()=>It,AssetTextures:()=>fe,Assets:()=>pa,BaseSystem:()=>He,GameEngine:()=>Ot,GameObject:()=>st,GameObjectManager:()=>$e,ObjectFactory:()=>me,Renderer:()=>ot,RuntimeObjectRegistry:()=>Ne,Transform:()=>rt,applyScreenAnchor:()=>Dt,basePixi:()=>sa,clearResponsiveElements:()=>ga,createPixiBase:()=>Mt,getRegisteredFontIds:()=>na,globalResponsiveMultipliers:()=>ct,initAssetTextures:()=>At,initAssets:()=>ua,layout:()=>fa,playLottieOverlay:()=>ra,registerFont:()=>ia,registerType:()=>wt,resolveAnchorVec2:()=>Ce,resolveFont:()=>ea,resolveFontWeight:()=>ta,resolveScreenAnchorPoint:()=>Be,resolveScreenRatioPoint:()=>Fe,runInitSequence:()=>ma,setLottieInstance:()=>St,spawnSceneFromConfig:()=>ca,updateScreenState:()=>Rt});module.exports=Ea(Hr);var Qn=require("pixi.js");var pe={};function mt(i,e,t=!1){pe[i]||(pe[i]=[]),pe[i].push({fn:e,once:t})}function Gt(i,e){if(pe[i]){if(!e){delete pe[i];return}pe[i]=pe[i].filter(t=>t.fn!==e)}}function bt(i,...e){let t=pe[i];if(t)for(let n of[...t])n.fn(...e),n.once&&Gt(i,n.fn)}function q(i,e){mt(i,e,!0)}var D=null,Y=[],Te=null;function Xi(i){D=i,Y=[],Te!==null&&(clearTimeout(Te),Te=null)}function Ji(){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 Yi(i,e,t,n){let a=JSON.stringify(e);if(t==="beacon"&&typeof navigator!="undefined"&&typeof navigator.sendBeacon=="function")try{let r=navigator.sendBeacon(i,new Blob([a],{type:"application/json"}));n&&console.log("[handler.telemetry] beacon",r,e);return}catch(r){n&&console.warn("[handler.telemetry] beacon failed, fallback to fetch",r)}try{await fetch(i,{method:"POST",headers:{"Content-Type":"application/json"},body:a,keepalive:!0}),n&&console.log("[handler.telemetry] fetch",e)}catch(r){n&&console.warn("[handler.telemetry] fetch failed",r)}}function qt(i,e){let t=Ji();if(e&&t.endpoint){if(Y.push(i),Y.length>t.maxQueue&&(Y=Y.slice(Y.length-t.maxQueue)),Y.length>=t.batchSize){Ki();return}Te===null&&(Te=window.setTimeout(()=>{Te=null,Ki()},t.flushIntervalMs))}}async function Ki(){let i=Ji();if(!i.endpoint||Y.length===0)return;let e=Y.splice(0,i.batchSize);await Yi(i.endpoint,{events:e},i.transport,i.debug),Y.length>0&&await Yi(i.endpoint,{events:Y.splice(0,i.batchSize)},i.transport,i.debug)}function Zi(i){return Math.max(0,Math.min(1,i))}function Aa(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 Ke(){return typeof performance!="undefined"&&performance.now?performance.now():Date.now()}function Sa(i,e){let t=i==null?void 0:i[e];return typeof t=="number"?t:0}function Qi(i,e,t){try{i[e]=t}catch{}}function Ca(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 en(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 tn(i,e){let t=Ca(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 nn(){let i=new Set,e=new WeakMap,t=null,n=()=>{if(t!=null)return;t=requestAnimationFrame(()=>{t=null,s(),i.size>0&&n()})},a=u=>{var p;i.add(u);let l=(p=e.get(u.target))!=null?p:new Set;l.add(u),e.set(u.target,l),n()},r=u=>{i.delete(u);let l=e.get(u.target);l&&(l.delete(u),l.size===0&&e.delete(u.target))},o=u=>{u.killed||(u.killed=!0,r(u))},s=()=>{var l,p;let u=Ke();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,A=Zi(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;A=Zi(y)}let x=g.ease(A);g.yoyo&&h%2===1&&(x=1-x);for(let y of g.props)Qi(g.target,y.key,y.from+(y.to-y.from)*x);g.scaleFrom&&g.scaleTo&&en(g.target,{x:g.scaleFrom.x+(g.scaleTo.x-g.scaleFrom.x)*x,y:g.scaleFrom.y+(g.scaleTo.y-g.scaleFrom.y)*x});try{(l=g.onUpdate)==null||l.call(g)}catch{}if(f>=b){o(g);try{(p=g.onComplete)==null||p.call(g)}catch{}}}},d=(u,l,p)=>{var y;let g=Math.max(0,(typeof l.duration=="number"?l.duration:.5)*1e3),m=Math.max(0,(typeof l.delay=="number"?l.delay:0)*1e3+((y=p==null?void 0:p.delayMsOverride)!=null?y:0)),f=Aa(l.ease),A=typeof l.repeat=="number"?Math.max(0,l.repeat|0):0,b=l.yoyo===!0,h=new Set(["duration","delay","ease","repeat","yoyo","onUpdate","onComplete","scale","scaleX","scaleY"]),x=[];for(let I of Object.keys(l)){if(h.has(I))continue;let R=l[I];typeof R=="number"&&x.push({key:I,from:Sa(u,I),to:R})}let w=tn(u,l);return{target:u,startMs:Ke(),delayMs:m,durationMs:g,ease:f,props:x,scaleFrom:w.from,scaleTo:w.to,repeat:A,yoyo:b,onUpdate:typeof l.onUpdate=="function"?l.onUpdate:void 0,onComplete:typeof l.onComplete=="function"?l.onComplete:void 0,killed:!1,paused:!1,pauseAtMs:null}},c={to(u,l){let p=d(u,l);return a(p),{kill:()=>o(p),pause:()=>{p.paused||(p.paused=!0,p.pauseAtMs=Ke())},resume:()=>{var f;if(!p.paused)return;let g=(f=p.pauseAtMs)!=null?f:Ke(),m=Ke()-g;p.startMs+=m,p.paused=!1,p.pauseAtMs=null},isActive:()=>!p.killed&&!p.paused}},fromTo(u,l,p){return c.set(u,l),c.to(u,p)},set(u,l){if(!u||!l)return;for(let g of Object.keys(l)){let m=l[g];g==="scale"||g==="scaleX"||g==="scaleY"||typeof m=="number"&&Qi(u,g,m)}let p=tn(u,l);p.to&&en(u,p.to)},killTweensOf(u){let l=e.get(u);if(l)for(let p of Array.from(l))o(p)},timeline(u={}){let l=[],p=0,g=!1,m=[],f=h=>{if(typeof h=="number")return Math.max(0,h*1e3);let x=typeof h=="string"?h.trim():"";return x.startsWith("+=")?p+Math.max(0,Number(x.slice(2))*1e3||0):x?Math.max(0,Number(x)*1e3||0):p},A=h=>{l.push(h);let x=Math.max(0,(typeof h.vars.duration=="number"?h.vars.duration:.5)*1e3);p=Math.max(p,h.atMs+x)},b={to(h,x,w){return A({kind:"to",target:h,vars:x,atMs:f(w)}),b},fromTo(h,x,w,y){return A({kind:"fromTo",target:h,vars:w,from:x,atMs:f(y)}),b},play(){var h,x;if(g)return b;g=!0,m=[];for(let w of l)w.kind==="fromTo"&&c.set(w.target,(h=w.from)!=null?h:{}),m.push(c.to(w.target,{...w.vars,delay:w.atMs/1e3+((x=w.vars.delay)!=null?x: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 c}function an(){if(typeof window=="undefined")return;let i=window;if(!i.gsap)try{i.gsap=nn()}catch{}}var rn={name:"handler-playable-sdk",version:"0.3.76",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 && 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 && 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 V=0,La=V++,on=V++,sn=V++,ln=V++,cn=V++,dn=V++,pn=V++,un=V++,gn=V++,hn=V++,fn=V++,mn=V++,P=La;function bn(){return P===on}function yn(){return P===sn}function vn(){return P===ln}function xn(){return P===cn}function Le(){return P===dn}function ke(){return P===pn}function wn(){return P===un}function En(){return P===gn}function An(){return P===hn}function Vt(){return P===fn}function Wt(){return P===mn}function Sn(){let i=typeof AD_PROTOCOL!="undefined"?AD_PROTOCOL:"none",e=typeof AD_NETWORK!="undefined"?AD_NETWORK:"web_embed";if(i==="mraid")try{mraid.getState(),P=on;return}catch{}else if(i==="dapi")try{dapi.isReady(),P=sn;return}catch{}if(e==="facebook")try{typeof FbPlayableAd!="undefined"&&(P=ln)}catch{}else if(e==="google")try{typeof ExitApi!="undefined"&&(P=cn)}catch{}else if(e==="mintegral")window.gameReady&&(P=dn);else if(e==="tapjoy")window.TJ_API&&(P=pn);else if(e==="tiktok")window.openAppStore&&(P=un);else if(e==="smadex")try{window.smxTracking&&(P=gn)}catch{}else if(e==="snapchat")try{window.ScPlayableAd&&(P=hn)}catch{}else e==="vungle"?P=fn:(i==="nucleo"||e==="nucleo")&&(P=mn)}var yt=ft(require("lottie-web"),1),Cn=yt.default;typeof window!="undefined"&&(window.lottie=yt.default,window.__baseLottie=yt.default);Xt();function $(i,e){let t=(a,r)=>r===0?a:t(r,a%r),n=t(i,e);return`${i/n}:${e/n}`}var vo=[{id:"iphone-15-pro-max",label:"iPhone 15 Pro Max",width:430,height:932,category:"iphone",ratio:$(430,932)},{id:"iphone-15-pro",label:"iPhone 15 Pro",width:393,height:852,category:"iphone",ratio:$(393,852)},{id:"iphone-15",label:"iPhone 15",width:393,height:852,category:"iphone",ratio:$(393,852)},{id:"iphone-14",label:"iPhone 14",width:390,height:844,category:"iphone",ratio:$(390,844)},{id:"iphone-se",label:"iPhone SE",width:375,height:667,category:"iphone",ratio:$(375,667)},{id:"iphone-12-mini",label:"iPhone 12 Mini",width:360,height:780,category:"iphone",ratio:$(360,780)}],xo=[{id:"pixel-8-pro",label:"Pixel 8 Pro",width:448,height:998,category:"android",ratio:$(448,998)},{id:"pixel-8",label:"Pixel 8",width:412,height:915,category:"android",ratio:$(412,915)},{id:"samsung-s24-ultra",label:"Samsung S24 Ultra",width:412,height:915,category:"android",ratio:$(412,915)},{id:"samsung-s24",label:"Samsung S24",width:360,height:780,category:"android",ratio:$(360,780)},{id:"samsung-a54",label:"Samsung A54",width:412,height:915,category:"android",ratio:$(412,915)},{id:"oneplus-12",label:"OnePlus 12",width:412,height:915,category:"android",ratio:$(412,915)}],wo=[{id:"ipad-pro-12",label:'iPad Pro 12.9"',width:1024,height:1366,category:"tablet",ratio:$(1024,1366)},{id:"ipad-pro-11",label:'iPad Pro 11"',width:834,height:1194,category:"tablet",ratio:$(834,1194)},{id:"ipad-air",label:"iPad Air",width:820,height:1180,category:"tablet",ratio:$(820,1180)},{id:"ipad-mini",label:"iPad Mini",width:768,height:1024,category:"tablet",ratio:$(768,1024)},{id:"samsung-tab-s9",label:"Samsung Tab S9",width:800,height:1280,category:"tablet",ratio:$(800,1280)}],_n=[{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:$(390,844),mraidScale:.7},{id:"ipad-mini",label:"iPad Mini",width:768,height:1024,category:"playable",ratio:$(768,1024),mraidScale:.7}];var Eo=[..._n];var Ra=_n[0];ue();var Ba=ft(require("jszip"),1);function za(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 Ha(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 Na(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 Jt(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 r=await za(a),o=await Na(r),s=Ha(r);return console.log("[ImageUtils] Success resolution:",o==null?void 0:o.width,"x",o==null?void 0:o.height,"mime:",s.mimeType),{base64:s.base64,mimeType:s.mimeType,dataUrl:r,width:(e=o==null?void 0:o.width)!=null?e:0,height:(t=o==null?void 0:o.height)!=null?t:0}}catch(n){return console.error("[ImageUtils] Error fetching image data:",n),null}}async function vt(i,e=30){try{console.log("[ImageUtils] Removing background color...");let t=await new Promise((l,p)=>{let g=new Image;g.onload=()=>l(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 r=a.getImageData(0,0,n.width,n.height),o=r.data,d=[{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(l=>({r:o[l.offset],g:o[l.offset+1],b:o[l.offset+2]})),c=0;for(let l=0;l<o.length;l+=4){let p=o[l],g=o[l+1],m=o[l+2],f=!1;for(let A of d)if(Math.sqrt(Math.pow(p-A.r,2)+Math.pow(g-A.g,2)+Math.pow(m-A.b,2))<e){f=!0;break}f&&(o[l+3]=0,c++)}return console.log(`[ImageUtils] Removed background from ${c} pixels (4-corner sampling, tolerance: ${e})`),a.putImageData(r,0,0),n.toDataURL("image/png")}catch(t){return console.error("[ImageUtils] Error removing background:",t),i}}var Mn=require("@google/genai");async function Zt(i,e,t=[],n={}){var a,r,o,s,d,c,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 l=new Mn.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 l.models.generateContent({model:p,contents:g}),f="",A=(o=(r=(a=m.candidates)==null?void 0:a[0])==null?void 0:r.content)==null?void 0:o.parts;if(A)for(let b of A)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(l){throw console.error("[Gemini] API error:",l),(s=l.message)!=null&&s.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."):(d=l.message)!=null&&d.includes("API_KEY_INVALID")?new Error("Invalid Gemini API key. Please check your API key configuration."):(c=l.message)!=null&&c.includes("QUOTA_EXCEEDED")?new Error("Gemini API quota exceeded. Please try again later or check your billing."):(u=l.message)!=null&&u.includes("SAFETY")?new Error("Content was flagged by Gemini safety filters. Please try with different images."):l}}var Pn=require("@google/genai");async function xt(i,e,t=[],n={}){try{console.info("[GEMINI-REAL-SDK] Initializing GoogleGenAI...");let a=new Pn.GoogleGenAI({apiKey:i}),r=[{text:e}];t.length>0&&t.forEach((s,d)=>{console.info(`[GEMINI-REAL-SDK] Adding image part ${d}`),r.push({inlineData:{mimeType:s.mimeType,data:s.base64}})}),console.info("[GEMINI-REAL-SDK] Calling generateContent with model: gemini-2.5-flash-image");let o=await a.models.generateContent({model:"gemini-2.5-flash-image",contents:r});if(console.info("[GEMINI-REAL-SDK] Received response from model"),!o.candidates||!o.candidates[0]||!o.candidates[0].content||!o.candidates[0].content.parts)throw new Error("Gemini 2.5 Flash Image returned invalid response structure.");for(let s of o.candidates[0].content.parts)if(s.text)console.log(s.text);else if(s.inlineData){let d=s.inlineData.data,c=s.inlineData.mimeType||"image/png";return console.info("[GEMINI-REAL-SDK] Found inline image data in response"),`data:${c};base64,${d}`}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 Wa=require("pixi.js");Xe();ue();var $n=require("pixi.js");var Ya=require("pixi.js");ue();function tr(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 ir(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 nr(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:
@@ -566,6 +566,10 @@
566
566
  transition: all var(--ui-duration-normal) var(--ui-ease);
567
567
  }
568
568
 
569
+ .scene-tools-corner-panel.dragging {
570
+ transition: none !important;
571
+ }
572
+
569
573
  .scene-tools-header {
570
574
  display: flex;
571
575
  align-items: center;
@@ -2830,6 +2834,7 @@
2830
2834
 
2831
2835
  .preview-shell.layout-fixed .workbench-header,
2832
2836
  .preview-shell.layout-fixed .console-header,
2837
+ .preview-shell.layout-fixed .library-panel .scene-panel-header,
2833
2838
  .preview-shell.layout-fixed .workbench-tab[data-tab="library"],
2834
2839
  .preview-shell.layout-fixed .workbench-tab-panel[data-tab-panel="library"],
2835
2840
  .preview-shell.layout-fixed .console-panel.docked-hidden,
@@ -2851,8 +2856,9 @@
2851
2856
  z-index: 100;
2852
2857
  }
2853
2858
 
2854
- .bottom-dock.hidden {
2855
- display: none;
2859
+ /* Hide library header inside dock */
2860
+ #dock-library-content .scene-panel-header {
2861
+ display: none !important;
2856
2862
  }
2857
2863
 
2858
2864
  .bottom-dock-tabs {
@@ -2890,19 +2896,29 @@
2890
2896
  flex: 1;
2891
2897
  overflow: hidden;
2892
2898
  position: relative;
2899
+ display: flex;
2900
+ gap: 0;
2893
2901
  }
2894
2902
 
2895
2903
  .bottom-dock-panel {
2896
- display: none;
2904
+ display: flex;
2905
+ flex-direction: column;
2897
2906
  height: 100%;
2907
+ flex: 1;
2908
+ border-right: 1px solid var(--ui-border);
2909
+ }
2910
+
2911
+ .bottom-dock-panel:last-child {
2912
+ border-right: none;
2898
2913
  }
2899
2914
 
2900
2915
  .bottom-dock-panel.active {
2901
- display: block;
2916
+ display: flex;
2902
2917
  }
2903
2918
 
2904
2919
  #dock-console-content {
2905
2920
  background: var(--ui-bg-1);
2921
+ flex: 1;
2906
2922
  }
2907
2923
 
2908
2924
  #dock-console-content .console-messages {
@@ -2911,6 +2927,18 @@
2911
2927
  padding: 12px;
2912
2928
  }
2913
2929
 
2930
+ #dock-library-content {
2931
+ flex: 1.5;
2932
+ /* Give library more space */
2933
+ }
2934
+
2935
+ #dock-library-content .library-panel {
2936
+ width: 100% !important;
2937
+ height: 100% !important;
2938
+ border-radius: 0;
2939
+ border: none;
2940
+ }
2941
+
2914
2942
  .bottom-dock-resize-handle {
2915
2943
  position: absolute;
2916
2944
  top: 0;
@@ -2978,17 +3006,32 @@
2978
3006
  .workbench-content {
2979
3007
  flex: 1;
2980
3008
  overflow-y: auto;
3009
+ overflow-x: hidden;
2981
3010
  padding: var(--space-md);
3011
+ min-width: 0;
3012
+ /* Allow shrinking below content size */
2982
3013
  }
2983
3014
 
2984
3015
  .workbench-tab-panel {
2985
3016
  display: none;
3017
+ width: 100%;
3018
+ min-width: 0;
3019
+ max-width: 100%;
3020
+ box-sizing: border-box;
2986
3021
  }
2987
3022
 
2988
3023
  .workbench-tab-panel.active {
2989
3024
  display: block;
2990
3025
  }
2991
3026
 
3027
+ /* Force all direct children inside tab panels to respect width */
3028
+ .workbench-tab-panel>* {
3029
+ width: 100% !important;
3030
+ min-width: 0 !important;
3031
+ max-width: 100% !important;
3032
+ box-sizing: border-box;
3033
+ }
3034
+
2992
3035
  .workbench-resize-handle {
2993
3036
  position: absolute;
2994
3037
  bottom: 0;
@@ -3529,6 +3572,8 @@
3529
3572
  .workbench-content .scene-panel {
3530
3573
  position: static;
3531
3574
  width: 100% !important;
3575
+ min-width: 0 !important;
3576
+ max-width: 100% !important;
3532
3577
  max-height: none !important;
3533
3578
 
3534
3579
  /* Preserve “card” styling so embedded panels don't look unstyled */
@@ -3539,6 +3584,21 @@
3539
3584
  overflow: hidden;
3540
3585
  }
3541
3586
 
3587
+ /* Specific overrides for panels that have hardcoded widths */
3588
+ .workbench-content .inspector-panel,
3589
+ .workbench-content .library-panel,
3590
+ .workbench-content .ai-tools-panel {
3591
+ width: 100% !important;
3592
+ min-width: 0 !important;
3593
+ max-width: 100% !important;
3594
+ }
3595
+
3596
+ .workbench-content .inspector-header,
3597
+ .workbench-content .ai-tabs {
3598
+ margin-left: 0;
3599
+ margin-right: 0;
3600
+ }
3601
+
3542
3602
  .workbench-content .scene-panel-header {
3543
3603
  display: none;
3544
3604
 
@@ -5085,6 +5145,10 @@
5085
5145
  opacity var(--ui-duration-fast) var(--ui-ease);
5086
5146
  }
5087
5147
 
5148
+ .nudge-panel.dragging {
5149
+ transition: none !important;
5150
+ }
5151
+
5088
5152
  .nudge-panel.hidden {
5089
5153
  opacity: 0;
5090
5154
  pointer-events: none;
@@ -1 +1 @@
1
- (function(_0x197573,_0x5a48b2){var a0_0x51553b={_0x2713f2:0x4b3,_0x13e1f4:'^^d[',_0x314913:0x123,_0x3b2be7:'mV#q',_0x3a385b:0x114,_0x15fd37:0x12a,_0x25ffc8:'NUhY',_0x114c91:0x134,_0x552ceb:0x13d,_0x370eeb:'WPGV',_0xaadf39:0x142,_0x55b312:0x12d,_0x49dac4:0x131,_0x31cb63:0x129,_0xb5c969:'KIwb',_0x19e7a0:0x123,_0x3cb851:0x133,_0x12dc83:0x493,_0x4a5367:0x48c,_0x17a0a4:'FH&n',_0x256a54:0x496,_0x1a4a97:0x121,_0x2bea10:'B[Eo',_0x6c3599:0x12f,_0x5c2c69:0x12f,_0x1b6372:0x12a,_0x4deecb:'(4TE',_0x50a84f:0x124,_0x4b0841:0x22,_0x46f17a:0x13,_0x135a07:0x20,_0x3be3cb:0x1d},a0_0x4cd2e6={_0x40338c:0x335},a0_0x44a9e2={_0x2d8ca4:0x297},a0_0x18bb54={_0x5e4d2a:0x192};function _0x253dc0(_0x5961de,_0x44e9ef,_0x1cb290,_0x387073,_0x256843){return a0_0x13c2(_0x256843- -a0_0x18bb54._0x5e4d2a,_0x1cb290);}function _0x507dc7(_0xad982c,_0x1d4af8,_0x1ff364,_0x50adc3,_0x290fab){return a0_0x13c2(_0xad982c- -a0_0x44a9e2._0x2d8ca4,_0x1d4af8);}var _0x826d25=_0x197573();function _0x1f6084(_0xb0cdfd,_0x281c84,_0x24adc3,_0x380503,_0x33b965){return a0_0x13c2(_0xb0cdfd-a0_0x4cd2e6._0x40338c,_0x380503);}while(!![]){try{var _0x5443b6=-parseInt(_0x1f6084(a0_0x51553b._0x2713f2,0x4a9,0x4b8,a0_0x51553b._0x13e1f4,0x4a5))/(-0xbae+-0x53*-0x1+0xb5c)+parseInt(_0x507dc7(-a0_0x51553b._0x314913,a0_0x51553b._0x3b2be7,-0x11f,-a0_0x51553b._0x3a385b,-a0_0x51553b._0x15fd37))/(-0x25d7+-0x1535+-0x1*-0x3b0e)*(parseInt(_0x507dc7(-0x12e,a0_0x51553b._0x25ffc8,-a0_0x51553b._0x114c91,-0x134,-a0_0x51553b._0x552ceb))/(0x45e+-0x87d*0x2+0x3*0x435))+parseInt(_0x507dc7(-0x133,a0_0x51553b._0x370eeb,-a0_0x51553b._0xaadf39,-a0_0x51553b._0x55b312,-a0_0x51553b._0x49dac4))/(-0x16ba+-0xb04+-0x21c2*-0x1)+-parseInt(_0x507dc7(-a0_0x51553b._0x31cb63,a0_0x51553b._0xb5c969,-a0_0x51553b._0x19e7a0,-a0_0x51553b._0x3cb851,-0x132))/(0x160d+0x233d+-0x3945)+parseInt(_0x1f6084(0x49b,a0_0x51553b._0x12dc83,a0_0x51553b._0x4a5367,a0_0x51553b._0x17a0a4,a0_0x51553b._0x256a54))/(-0x1746+0x3d+0x170f)+-parseInt(_0x507dc7(-a0_0x51553b._0x1a4a97,a0_0x51553b._0x2bea10,-a0_0x51553b._0x6c3599,-a0_0x51553b._0x5c2c69,-0x11a))/(-0x666*0x1+-0xeaa*0x1+0x1517)*(-parseInt(_0x507dc7(-a0_0x51553b._0x1b6372,a0_0x51553b._0x4deecb,-0x11e,-a0_0x51553b._0x50a84f,-0x123))/(0x10c9*-0x1+-0xaf3+0x1bc4))+-parseInt(_0x253dc0(-0x12,-a0_0x51553b._0x4b0841,'EIdp',-a0_0x51553b._0x46f17a,-a0_0x51553b._0x135a07))/(0x6c4+0x1271*0x1+0x9*-0x2cc)*(parseInt(_0x253dc0(-a0_0x51553b._0x3be3cb,-0x29,'u7nc',-0x1c,-0x23))/(-0x1594+-0x2293+0x3831));if(_0x5443b6===_0x5a48b2)break;else _0x826d25['push'](_0x826d25['shift']());}catch(_0x4772ca){_0x826d25['push'](_0x826d25['shift']());}}}(a0_0x5a90,-0xae5b5+0x1010c+-0x56*-0x342e));var a0_0x555422=(function(){var _0x5c8014=!![];return function(_0xaec415,_0x749c46){var _0x102b6d=_0x5c8014?function(){if(_0x749c46){var _0xb5997d=_0x749c46['apply'](_0xaec415,arguments);return _0x749c46=null,_0xb5997d;}}:function(){};return _0x5c8014=![],_0x102b6d;};}()),a0_0x8e7450=a0_0x555422(this,function(){var a0_0x3ededb={_0x117ac3:0x168,_0x4235a5:0x169,_0x21ce87:0x16c,_0x3abb81:'B[Eo',_0x235164:0x163,_0x1e6e70:0x1d4,_0x26c443:0x1d0,_0xd3bd4f:'yawL',_0x2f3252:0x1d3,_0x1ee5d4:0x1de,_0x495915:'[Eit',_0x2130f8:0x22f,_0x427acb:0x231,_0x4d62c2:0x232,_0x45db43:0x1e3,_0x3cea05:'WPGV',_0xc9f18a:0x1ee,_0x21bee4:0x21c,_0x24b436:0x21f,_0x100337:0x21d,_0x34f08b:0x225,_0x1b4465:0x17d,_0x1d1d85:0x177,_0x5c744a:'%BxL',_0x276c28:0x215,_0x305ad8:0x227,_0x84835d:0x229,_0x285d19:'dR)C',_0x559616:0x22c,_0x5e2731:0x222,_0x36c6ce:0x22a,_0x325332:0x169,_0x2e99da:0x187,_0x2bbbcb:'NRdG',_0x17aa37:0x170,_0x309c78:0x241,_0x29a77d:0x233,_0x5daabd:0x241,_0x3f5c43:0x22a,_0x9f05d8:0x232,_0x44b1c4:0x229},a0_0x393496={_0x2f5e07:0x2e3},a0_0x528620={_0x1690eb:0x39b},_0x5dea8a={};_0x5dea8a[_0xd95f8c(-a0_0x3ededb._0x117ac3,-a0_0x3ededb._0x4235a5,-a0_0x3ededb._0x21ce87,a0_0x3ededb._0x3abb81,-a0_0x3ededb._0x235164)]=_0x274f74(a0_0x3ededb._0x1e6e70,a0_0x3ededb._0x26c443,a0_0x3ededb._0xd3bd4f,a0_0x3ededb._0x2f3252,a0_0x3ededb._0x1ee5d4)+')+)+)'+'+$';function _0x3cd939(_0x51880,_0x462018,_0x25deec,_0x4a7570,_0x3b276c){return a0_0x13c2(_0x25deec- -a0_0x528620._0x1690eb,_0x51880);}function _0xd95f8c(_0xfa4e72,_0x3dbbc0,_0xb31b13,_0x3a1c3f,_0x149956){return a0_0x13c2(_0xfa4e72- -a0_0x393496._0x2f5e07,_0x3a1c3f);}function _0x274f74(_0x562ab7,_0x3e0a4c,_0x400a84,_0x51c70e,_0x568461){return a0_0x13c2(_0x3e0a4c-0x6e,_0x400a84);}var _0x44fa74=_0x5dea8a;return a0_0x8e7450[_0x3cd939(a0_0x3ededb._0x495915,-a0_0x3ededb._0x2130f8,-a0_0x3ededb._0x427acb,-a0_0x3ededb._0x4d62c2,-a0_0x3ededb._0x4d62c2)+_0x274f74(0x1e5,a0_0x3ededb._0x45db43,a0_0x3ededb._0x3cea05,0x1d9,a0_0x3ededb._0xc9f18a)]()[_0x3cd939('%BxL',-a0_0x3ededb._0x21bee4,-a0_0x3ededb._0x24b436,-a0_0x3ededb._0x100337,-a0_0x3ededb._0x34f08b)+'h'](_0x44fa74[_0xd95f8c(-0x17e,-a0_0x3ededb._0x1b4465,-0x175,'LG9i',-a0_0x3ededb._0x1d1d85)])[_0x3cd939(a0_0x3ededb._0x5c744a,-a0_0x3ededb._0x276c28,-0x224,-a0_0x3ededb._0x305ad8,-a0_0x3ededb._0x84835d)+'ing']()[_0x3cd939(a0_0x3ededb._0x285d19,-a0_0x3ededb._0x559616,-a0_0x3ededb._0x5e2731,-a0_0x3ededb._0x36c6ce,-0x224)+_0xd95f8c(-0x178,-a0_0x3ededb._0x325332,-a0_0x3ededb._0x2e99da,a0_0x3ededb._0x2bbbcb,-a0_0x3ededb._0x17aa37)+'r'](a0_0x8e7450)[_0x3cd939('7!F%',-a0_0x3ededb._0x309c78,-0x238,-a0_0x3ededb._0x29a77d,-a0_0x3ededb._0x5daabd)+'h'](_0x44fa74[_0x3cd939('dR)C',-a0_0x3ededb._0x100337,-a0_0x3ededb._0x3f5c43,-a0_0x3ededb._0x9f05d8,-a0_0x3ededb._0x44b1c4)]);});a0_0x8e7450();import{A as a0_0x23d1f4,B as a0_0x3ba159,C as a0_0x36f290,D as a0_0x58454f,b as a0_0x5841c0,c as a0_0x20bf49,d as a0_0x2a10a8,e as a0_0x57403c,f as a0_0x2d76ce,g as a0_0x2b5c36,h as a0_0x3797ae,i as a0_0x1fec11,j as a0_0x58f043,k as a0_0x271d9b,l as a0_0x9a685,m as a0_0x3519c9,n as a0_0x3c1b76,o as a0_0x30704c,p as a0_0x5d6a5c,q as a0_0x109f5c,r as a0_0x81eec8,s as a0_0x58b331,t as a0_0x1ad07b,u as a0_0x43b745,v as a0_0x255e36,w as a0_0x2205fa,x as a0_0x27a61c,y as a0_0x2b42be,z as a0_0x62160}from'../chunk-RSBYFD7B.js';import{a as a0_0xb09f8e,b as a0_0x38cd90,c as a0_0x3a2152,d as a0_0x3ff201,e as a0_0x4595d1}from'../chunk-I5OOVR5U.js';function a0_0x5a90(){var _0x2a8513=['W7hdMmkPW7SmFMHIkXddQKfc','WRRdRdG6hM14aWNcH8oPaW','FmoaqCktWQNdIurEW5SMW4FcRW','Evn5W7hdOwfLW5SWW6hcSL3cKG','w8kAWRH/W416WPhdKW','zItcU0BcPG','fGisWOlcG8kaW49M','hLqiWRFcPCkaW7i','WOpdJZdcIWhdV8okxComWQpcJde','f8o+W58','D1K9WPrPW5D3uW','fCkWWPHrzW','uSoQW74timoeE3a+WO3cPSod','BbhcG0xcMq','W6hdL8k6W59SWPhdVxPkWO1vW7K','ldSLWQLJ','eSk6WQPxDG','oKNdNGBdMCobW43cMSo3WP56W5a','v8kaWP7cSCkJW4ZcH8oGW4VdOCkeyW','W7pcT8ovF3DhWRddP0KvlW8','uCoNomo9WOS','bSoqW64kWRS','s8kNWOSIzMVdRWxdRbTSWQS','jdpdOJxcUW','WRK1WOz2nmoAbGeQWRhdJX/dNW','WOldU8o6WPHskghcIW','Ef3cHhFdHXBdSWL7yNxdJ8kR','qmk4W57dI8kltSk6','WQCscfOs','W5JcTmk1WRCC'];a0_0x5a90=function(){return _0x2a8513;};return a0_0x5a90();}import'../chunk-LV4HGC5G.js';import'../chunk-ZLL42OOV.js';function a0_0x13c2(_0x1216f9,_0x191d43){_0x1216f9=_0x1216f9-(0x6d9+-0x10f6+0xb7e*0x1);var _0x51ade0=a0_0x5a90();var _0x3ac162=_0x51ade0[_0x1216f9];if(a0_0x13c2['dNiSYv']===undefined){var _0x4a9a08=function(_0x13488e){var _0x2ffa73='abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789+/=';var _0x205928='',_0xc75d0f='',_0x1adf1c=_0x205928+_0x4a9a08;for(var _0x27e128=-0x16e2+-0x2f5*-0x5+0x819,_0x1dca9c,_0x3b7ec0,_0x3ecf8=0xadb+-0x85*0x2e+0xd0b;_0x3b7ec0=_0x13488e['charAt'](_0x3ecf8++);~_0x3b7ec0&&(_0x1dca9c=_0x27e128%(0x1453+-0x39*0x3d+-0x6ba)?_0x1dca9c*(-0xbbf*0x3+-0x654+0x29d1*0x1)+_0x3b7ec0:_0x3b7ec0,_0x27e128++%(-0x2185+-0x106b+-0x31f4*-0x1))?_0x205928+=_0x1adf1c['charCodeAt'](_0x3ecf8+(-0x1701+-0x7ee+0xa53*0x3))-(0xd*-0x2f6+0x1188+0x1500)!==0x1654+0x106c+-0x2*0x1360?String['fromCharCode'](0x3*0x22e+0x3d*-0x6b+-0x4*-0x4fd&_0x1dca9c>>(-(-0x2526+-0x129a+-0x1*-0x37c2)*_0x27e128&-0x21*-0xf4+0xd*-0x18e+-0x2ce*0x4)):_0x27e128:-0x22db+0x1*0x1169+-0x1*-0x1172){_0x3b7ec0=_0x2ffa73['indexOf'](_0x3b7ec0);}for(var _0x51b6b6=-0x2705+0x15fc+0x1109,_0x1d40b8=_0x205928['length'];_0x51b6b6<_0x1d40b8;_0x51b6b6++){_0xc75d0f+='%'+('00'+_0x205928['charCodeAt'](_0x51b6b6)['toString'](-0x1*0x1b05+-0x2635*-0x1+-0xb20))['slice'](-(0x1921+0x2*-0xefd+0x4db*0x1));}return decodeURIComponent(_0xc75d0f);};var _0x1d2205=function(_0x591f2c,_0x1b336e){var _0x225377=[],_0x3b66d4=-0x1*0xc3e+-0x49b+-0x13*-0xe3,_0x5a8778,_0x363f27='';_0x591f2c=_0x4a9a08(_0x591f2c);var _0x16695d;for(_0x16695d=0x21cc+0x1d*-0x3e+-0x1ac6;_0x16695d<0x2577+-0x12*0x16a+-0x1*0xb03;_0x16695d++){_0x225377[_0x16695d]=_0x16695d;}for(_0x16695d=-0xb32+-0x696+0x11c8;_0x16695d<0x8*0xef+-0x1b6*-0x5+-0xf06;_0x16695d++){_0x3b66d4=(_0x3b66d4+_0x225377[_0x16695d]+_0x1b336e['charCodeAt'](_0x16695d%_0x1b336e['length']))%(0xb*-0x259+-0x1dc6+0x3899),_0x5a8778=_0x225377[_0x16695d],_0x225377[_0x16695d]=_0x225377[_0x3b66d4],_0x225377[_0x3b66d4]=_0x5a8778;}_0x16695d=0x1b1e+0x3*0x1dd+-0x20b5,_0x3b66d4=0x1d03+0x2018+-0x3d1b;for(var _0x37f255=-0x2*-0x495+-0xea0+0x576;_0x37f255<_0x591f2c['length'];_0x37f255++){_0x16695d=(_0x16695d+(-0x1*0x13a+-0xc*0x7a+0x6f3))%(0x1976+0x1e2c+-0x36a2),_0x3b66d4=(_0x3b66d4+_0x225377[_0x16695d])%(-0x6b*0x56+-0x2133+-0x4625*-0x1),_0x5a8778=_0x225377[_0x16695d],_0x225377[_0x16695d]=_0x225377[_0x3b66d4],_0x225377[_0x3b66d4]=_0x5a8778,_0x363f27+=String['fromCharCode'](_0x591f2c['charCodeAt'](_0x37f255)^_0x225377[(_0x225377[_0x16695d]+_0x225377[_0x3b66d4])%(-0x22a3+0xb*0x50+0x1*0x2033)]);}return _0x363f27;};a0_0x13c2['ISgsCK']=_0x1d2205,a0_0x13c2['zIVrij']={},a0_0x13c2['dNiSYv']=!![];}var _0x5ab300=_0x51ade0[0x2116+0x9*0x10c+0x1*-0x2a82],_0x156fdb=_0x1216f9+_0x5ab300,_0xa74a83=a0_0x13c2['zIVrij'][_0x156fdb];if(!_0xa74a83){if(a0_0x13c2['UUANZU']===undefined){var _0x4632a9=function(_0x55afd2){this['NsFPYV']=_0x55afd2,this['eNvIiZ']=[0x1*-0xcd5+0x13eb+-0x715,0x35f*-0x5+-0x2f*0xa9+0x2fe2,0x1*-0x57e+-0x69*-0x4f+0x53*-0x53],this['CXUSfK']=function(){return'newState';},this['iqcNpG']='\x5cw+\x20*\x5c(\x5c)\x20*{\x5cw+\x20*',this['sydcPp']='[\x27|\x22].+[\x27|\x22];?\x20*}';};_0x4632a9['prototype']['Gdziel']=function(){var _0x4e775c=new RegExp(this['iqcNpG']+this['sydcPp']),_0x5a81dc=_0x4e775c['test'](this['CXUSfK']['toString']())?--this['eNvIiZ'][0xa6a+-0x7*-0x443+-0x6b5*0x6]:--this['eNvIiZ'][0x25e1+-0x1fc8+-0x619];return this['MPaqFs'](_0x5a81dc);},_0x4632a9['prototype']['MPaqFs']=function(_0x3ebc5e){if(!Boolean(~_0x3ebc5e))return _0x3ebc5e;return this['GhCaxV'](this['NsFPYV']);},_0x4632a9['prototype']['GhCaxV']=function(_0x3ebe5a){for(var _0x155a68=-0x5*0x473+-0x3a*0x95+0x3801,_0x57ddd9=this['eNvIiZ']['length'];_0x155a68<_0x57ddd9;_0x155a68++){this['eNvIiZ']['push'](Math['round'](Math['random']())),_0x57ddd9=this['eNvIiZ']['length'];}return _0x3ebe5a(this['eNvIiZ'][0x2*0x1be+-0x1d72+0x19f6]);},new _0x4632a9(a0_0x13c2)['Gdziel'](),a0_0x13c2['UUANZU']=!![];}_0x3ac162=a0_0x13c2['ISgsCK'](_0x3ac162,_0x191d43),a0_0x13c2['zIVrij'][_0x156fdb]=_0x3ac162;}else _0x3ac162=_0xa74a83;return _0x3ac162;}import'../chunk-E6WJCS24.js';import'../chunk-JXBG6UFL.js';export{a0_0xb09f8e as AssetCache,a0_0x3a2152 as AssetLoader,a0_0x43b745 as AssetSystem,a0_0x3ff201 as AssetTextures,a0_0x58b331 as Assets,a0_0x30704c as BaseSystem,a0_0x3c1b76 as GameEngine,a0_0x57403c as GameObject,a0_0x2d76ce as GameObjectManager,a0_0x3519c9 as ObjectFactory,a0_0x2a10a8 as Renderer,a0_0x5d6a5c as RuntimeObjectRegistry,a0_0x20bf49 as Transform,a0_0x3ba159 as applyScreenAnchor,a0_0x109f5c as basePixi,a0_0x2205fa as clearResponsiveElements,a0_0x5841c0 as createPixiBase,a0_0x58f043 as getRegisteredFontIds,a0_0x255e36 as globalResponsiveMultipliers,a0_0x4595d1 as initAssetTextures,a0_0x1ad07b as initAssets,a0_0x36f290 as layout,a0_0x9a685 as playLottieOverlay,a0_0x1fec11 as registerFont,a0_0x38cd90 as registerType,a0_0x2b42be as resolveAnchorVec2,a0_0x2b5c36 as resolveFont,a0_0x3797ae as resolveFontWeight,a0_0x62160 as resolveScreenAnchorPoint,a0_0x23d1f4 as resolveScreenRatioPoint,a0_0x58454f as runInitSequence,a0_0x271d9b as setLottieInstance,a0_0x81eec8 as spawnSceneFromConfig,a0_0x27a61c as updateScreenState};
1
+ function a0_0x44e6(){var _0x2e4709=['egRdIhJcSW','WRxdISovW6XQeYFcNZW','WRrcW70Ne8o6WQ3cR8kCiSk8gq','EmkaoG9UW4JdKedcQW','a1ddOxRcIvyhBW','ihePqmoEWOGGmWNcUmotBW','mSk4hdZdMIGwW5lcJvldOMG','xCodqSksWPlcNx/dGsC8WRRdIN0','B8kWW7pcHv0sySkk','xCkorbLmBSolaCoR','W7eicmoSn8oZWP1hWOtdTrCRW7i','WPVdI8kaW4xcKG','qqFdRhNcKG','jmkzxCoyW5ezAmkiWOddGtv8','nCkdqSoaW4G','dCosAfVcSXddKdK','iuRcMwm9','W40boCokWOuhp8ob','B8k0W4VcU04JuSkM','W4xcS1hdH8owW4tdQKxcSZj/lq','WRrxBmkODG','Cs3cHt/dUa','dCoubtJdR2pdQbZdHh4ztW','gMPXEbe','CSk0W4uyWP3dTSkAWPTfW4KsnZi','WQbZk8kpfq','WQLwwa','FcrxWOxcICkyW4pcICoE','WR5lg8oJW74/j8k3WQqZsmkhvq','a8kIW6uKWOVcNSombG','W60eWR98wa','n8kIe8keWOXrlSketbCFW7NcPa','jutdNJTG','WRhcMKRcUmoTcSkWlNXkBmkHWQu'];a0_0x44e6=function(){return _0x2e4709;};return a0_0x44e6();}(function(_0x54b3a9,_0x2f15cf){var a0_0x2d2507={_0xa6e9f0:0x17e,_0x149313:0x16d,_0x162dc4:0x174,_0x3facb6:0x16f,_0x464eb9:0x484,_0x396a9e:0x491,_0x238fa4:0x483,_0x35ee82:0x490,_0x2b22dc:0x499,_0x25b84e:0x48c,_0x29951a:0x48b,_0x43fcae:0x48f,_0x2a677a:0x49f,_0x5f1195:0x488,_0x4ceca0:0x48f,_0x1433fa:0x486,_0x15b485:0x17b,_0x543273:0x179,_0x5e10f0:0x17e,_0x424c55:'qf$y',_0x5d412a:0x185,_0x29b128:0x481,_0x174419:0x47b,_0x2dfdbf:0x482,_0x577c04:0x473,_0x4f9e28:0x47c,_0x2878ce:0x478,_0x36375e:0x475,_0x511ec5:'VWw9',_0x341b14:0x49a,_0x4ee0f8:0x49c,_0x3e75c9:0x483,_0x49f6f5:'e95A',_0x476b9a:0x24d,_0x1835be:0x253,_0x16a77b:'a^VO',_0x4ac5d9:0x238,_0x500255:0x245},a0_0x1ebc07={_0x2413b4:0x373},a0_0x1579a7={_0x2ad394:0x59},a0_0x13e612={_0xf626b7:0x125};function _0x3dbc85(_0x17d290,_0x34dfee,_0x5680b6,_0x11cb77,_0x2ffc2b){return a0_0x3e1a(_0x2ffc2b-a0_0x13e612._0xf626b7,_0x5680b6);}function _0x4b1008(_0x455eca,_0x210c22,_0x296e7e,_0x31e84d,_0x1b591e){return a0_0x3e1a(_0x296e7e-a0_0x1579a7._0x2ad394,_0x1b591e);}var _0x3e89e0=_0x54b3a9();function _0x4c2375(_0x4c6314,_0x44f1c8,_0xc3bb30,_0x5914c0,_0x2497dc){return a0_0x3e1a(_0x44f1c8-a0_0x1ebc07._0x2413b4,_0x2497dc);}while(!![]){try{var _0x5cd2c3=parseInt(_0x4b1008(a0_0x2d2507._0xa6e9f0,a0_0x2d2507._0x149313,a0_0x2d2507._0x162dc4,a0_0x2d2507._0x3facb6,'owZo'))/(0x1*0x385+0x3be*-0x1+0x1d*0x2)*(parseInt(_0x4c2375(0x47c,a0_0x2d2507._0x464eb9,0x48a,a0_0x2d2507._0x396a9e,'Cp4H'))/(0x1*0x8c6+-0x6b2+-0x212*0x1))+parseInt(_0x4c2375(a0_0x2d2507._0x238fa4,a0_0x2d2507._0x35ee82,a0_0x2d2507._0x2b22dc,a0_0x2d2507._0x25b84e,'KCbM'))/(0x1f39+-0x456+-0x56*0x50)+-parseInt(_0x4c2375(a0_0x2d2507._0x29951a,a0_0x2d2507._0x43fcae,0x49c,a0_0x2d2507._0x2a677a,'KO5V'))/(0x414+0x1df*-0x14+-0x2*-0x10ae)*(parseInt(_0x4c2375(0x487,a0_0x2d2507._0x5f1195,a0_0x2d2507._0x4ceca0,a0_0x2d2507._0x1433fa,'Yi7V'))/(0x32b+-0x240b+0x191*0x15))+parseInt(_0x4b1008(a0_0x2d2507._0x15b485,a0_0x2d2507._0x543273,0x178,a0_0x2d2507._0x5e10f0,a0_0x2d2507._0x424c55))/(-0x1*0x187b+-0x549+-0x52*-0x5d)+parseInt(_0x4b1008(0x18a,0x16b,0x17b,a0_0x2d2507._0x5d412a,'(f)W'))/(-0x1*0x1f0+0x1*-0x16b7+-0xc57*-0x2)+-parseInt(_0x4c2375(a0_0x2d2507._0x29b128,a0_0x2d2507._0x174419,a0_0x2d2507._0x29951a,a0_0x2d2507._0x2dfdbf,'a^VO'))/(0x602*-0x5+-0x16d9+-0x1f*-0x1b5)*(-parseInt(_0x4c2375(a0_0x2d2507._0x577c04,a0_0x2d2507._0x4f9e28,a0_0x2d2507._0x2878ce,a0_0x2d2507._0x36375e,a0_0x2d2507._0x511ec5))/(0x26bf+-0x26*0x9d+-0xf68))+parseInt(_0x4c2375(a0_0x2d2507._0x341b14,0x491,a0_0x2d2507._0x4ee0f8,a0_0x2d2507._0x3e75c9,a0_0x2d2507._0x49f6f5))/(-0x1492+-0x2058+-0x1*-0x34f4)*(-parseInt(_0x3dbc85(a0_0x2d2507._0x476b9a,a0_0x2d2507._0x1835be,a0_0x2d2507._0x16a77b,a0_0x2d2507._0x4ac5d9,a0_0x2d2507._0x500255))/(-0xc*-0x290+0x70+-0x1f25));if(_0x5cd2c3===_0x2f15cf)break;else _0x3e89e0['push'](_0x3e89e0['shift']());}catch(_0x144a81){_0x3e89e0['push'](_0x3e89e0['shift']());}}}(a0_0x44e6,0x96ec*-0x15+-0x45833*-0x3+0x192d*0x55));var a0_0xf7f982=(function(){var _0x2f5bdb=!![];return function(_0x11ee7a,_0x1b5a9e){var a0_0x58d6c4={_0xeff376:0x233,_0x3e79d9:0x223,_0x17bffc:0x220,_0x5a2a4c:'O#j7',_0x28b36d:0x22a},a0_0x186b85={_0x4bd690:0x337},_0xa7bf27=_0x2f5bdb?function(){function _0x278b35(_0x446eb4,_0xe69cac,_0x34ec8c,_0x2ecd47,_0x51eeab){return a0_0x3e1a(_0xe69cac- -a0_0x186b85._0x4bd690,_0x2ecd47);}if(_0x1b5a9e){var _0xa35028=_0x1b5a9e[_0x278b35(-a0_0x58d6c4._0xeff376,-a0_0x58d6c4._0x3e79d9,-a0_0x58d6c4._0x17bffc,a0_0x58d6c4._0x5a2a4c,-a0_0x58d6c4._0x28b36d)](_0x11ee7a,arguments);return _0x1b5a9e=null,_0xa35028;}}:function(){};return _0x2f5bdb=![],_0xa7bf27;};}()),a0_0xe784c9=a0_0xf7f982(this,function(){var a0_0x4c74a8={_0x3346bd:0x235,_0x45d4c2:0x229,_0x42e906:0x222,_0x19081b:'nb[E',_0x3f00ac:0x227,_0x2aa102:0x32f,_0x5c96a6:'FjSa',_0x416cd2:0x32b,_0x4d118f:0x31f,_0x5c49e3:0x317,_0xd3ebce:0x31f,_0x221826:0x216,_0x25b9bb:0x20e,_0x6af902:0x236,_0x5c022b:0x22d,_0x52f381:0x22c,_0xc4c853:0x22e,_0xcb6315:0x263,_0x237c80:0x252,_0x5ec90d:0x25a,_0x1c72ec:'(f)W',_0x41d1e9:0x22a,_0x4127a4:0x228,_0x1f4681:0x223,_0x51d648:0x33c,_0x3b7bba:'(uHX',_0x13a309:0x33b,_0x1055e8:0x341,_0x26af09:0x326,_0x21a229:0x332,_0x347acf:0x318,_0x35b97c:0x32a,_0x372f83:0x251,_0x26b364:0x255,_0x2feb33:0x256,_0x2f539c:'S&kz',_0x514841:0x331,_0x2d821f:'Aa5g',_0x4cf42f:0x332,_0x2424df:0x328},a0_0x5592f9={_0x374a07:0x151},a0_0x2cdba5={_0x39833e:0x338},_0x422c36={};function _0xdc3f8c(_0x579047,_0x13c153,_0x4a0be,_0x271f1b,_0x33146e){return a0_0x3e1a(_0x13c153- -a0_0x2cdba5._0x39833e,_0x271f1b);}_0x422c36[_0xdc3f8c(-a0_0x4c74a8._0x3346bd,-a0_0x4c74a8._0x45d4c2,-a0_0x4c74a8._0x42e906,a0_0x4c74a8._0x19081b,-a0_0x4c74a8._0x3f00ac)]='(((.+'+_0x5730ab(a0_0x4c74a8._0x2aa102,a0_0x4c74a8._0x5c96a6,0x32e,a0_0x4c74a8._0x416cd2,0x340)+'+$';function _0x5730ab(_0x320c0b,_0x3c95c7,_0x2619b9,_0x227497,_0x571dda){return a0_0x3e1a(_0x320c0b-0x219,_0x3c95c7);}function _0x233c9a(_0x1f9f38,_0x1ccd4c,_0xdf9cd8,_0x1b22e4,_0x38dc04){return a0_0x3e1a(_0x1ccd4c-a0_0x5592f9._0x374a07,_0x38dc04);}var _0x51c762=_0x422c36;return a0_0xe784c9[_0x5730ab(a0_0x4c74a8._0x4d118f,'h%xE',0x323,a0_0x4c74a8._0x5c49e3,a0_0x4c74a8._0xd3ebce)+'ing']()[_0xdc3f8c(-0x204,-0x214,-a0_0x4c74a8._0x221826,'KO5V',-a0_0x4c74a8._0x25b9bb)+'h'](_0x51c762[_0xdc3f8c(-a0_0x4c74a8._0x6af902,-a0_0x4c74a8._0x5c022b,-a0_0x4c74a8._0x52f381,'Aa5g',-a0_0x4c74a8._0xc4c853)])[_0x233c9a(a0_0x4c74a8._0xcb6315,0x25b,a0_0x4c74a8._0x237c80,a0_0x4c74a8._0x5ec90d,a0_0x4c74a8._0x1c72ec)+_0xdc3f8c(-a0_0x4c74a8._0x41d1e9,-a0_0x4c74a8._0x4127a4,-a0_0x4c74a8._0x1f4681,'(f)W',-a0_0x4c74a8._0xc4c853)]()[_0x5730ab(a0_0x4c74a8._0x51d648,a0_0x4c74a8._0x3b7bba,a0_0x4c74a8._0x13a309,0x347,a0_0x4c74a8._0x1055e8)+'ructo'+'r'](a0_0xe784c9)[_0x5730ab(a0_0x4c74a8._0x26af09,'r[[*',a0_0x4c74a8._0x21a229,a0_0x4c74a8._0x347acf,a0_0x4c74a8._0x35b97c)+'h'](_0x233c9a(a0_0x4c74a8._0x372f83,a0_0x4c74a8._0x26b364,a0_0x4c74a8._0x2feb33,0x252,a0_0x4c74a8._0x2f539c)+_0x5730ab(a0_0x4c74a8._0x514841,a0_0x4c74a8._0x2d821f,a0_0x4c74a8._0x4cf42f,0x33b,a0_0x4c74a8._0x2424df)+'+$');});a0_0xe784c9();import{A as a0_0x4918bb,B as a0_0x480fd4,C as a0_0x24aca7,D as a0_0x5502e4,b as a0_0x2ad237,c as a0_0x4f4d22,d as a0_0x56f289,e as a0_0x2f1093,f as a0_0x259da7,g as a0_0xb6c11d,h as a0_0x5effc2,i as a0_0x524686,j as a0_0x20c425,k as a0_0x32aca4,l as a0_0x36c694,m as a0_0x2dc47f,n as a0_0x551c3a,o as a0_0x412eca,p as a0_0x481713,q as a0_0x5b0f2b,r as a0_0x45254c,s as a0_0x5aa893,t as a0_0x2565dc,u as a0_0x167307,v as a0_0x18a372,w as a0_0x29b0ea,x as a0_0x19fc25,y as a0_0x4f5231,z as a0_0x50ae36}from'../chunk-GNO7ZYE4.js';function a0_0x3e1a(_0x1ebcc0,_0x24f88b){_0x1ebcc0=_0x1ebcc0-(-0x322*-0x4+0x20a9+0x2b*-0x107);var _0x5f4da3=a0_0x44e6();var _0x164cb1=_0x5f4da3[_0x1ebcc0];if(a0_0x3e1a['UaQdXH']===undefined){var _0x34aa2f=function(_0x55cbc0){var _0x2d3155='abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789+/=';var _0x338e8a='',_0x3b2173='',_0x2e9814=_0x338e8a+_0x34aa2f;for(var _0x24ff0a=0x1*0x185a+0x75*-0x28+-0x612,_0x44299b,_0x4c0f0f,_0x11cf00=-0x34a*0x5+-0x163*0x4+0x15fe;_0x4c0f0f=_0x55cbc0['charAt'](_0x11cf00++);~_0x4c0f0f&&(_0x44299b=_0x24ff0a%(0x27f*-0xe+0x18e6+-0x8*-0x142)?_0x44299b*(0x1a1e+0x1*0x975+-0x2353)+_0x4c0f0f:_0x4c0f0f,_0x24ff0a++%(0x12+-0x4f6+0x4e8))?_0x338e8a+=_0x2e9814['charCodeAt'](_0x11cf00+(-0x3*0x2e8+0x1*-0x21f4+0x2ab6))-(0x8*-0x5a+0x226b+-0x1f91)!==-0x26eb+0xe5*0x1d+0xcfa?String['fromCharCode'](0x1f52+-0x5*-0x147+-0x24b6&_0x44299b>>(-(-0x21cf+0xe5*0x2b+0xaa*-0x7)*_0x24ff0a&0x2e3*0x3+0xbf4*0x3+0xed5*-0x3)):_0x24ff0a:0x1482+-0x4ce+-0xfb4){_0x4c0f0f=_0x2d3155['indexOf'](_0x4c0f0f);}for(var _0x293c8d=-0x3*0xceb+-0xb04+-0x89*-0x5d,_0x50e861=_0x338e8a['length'];_0x293c8d<_0x50e861;_0x293c8d++){_0x3b2173+='%'+('00'+_0x338e8a['charCodeAt'](_0x293c8d)['toString'](-0x219e+0x1eb*-0xb+0x17b*0x25))['slice'](-(-0x906+0x7a5*0x4+-0x158c));}return decodeURIComponent(_0x3b2173);};var _0x4b1b9d=function(_0x2e12c4,_0x3fa183){var _0x5432f5=[],_0x18b933=-0x841+-0x1*0x1db7+0x9*0x438,_0x2d5365,_0x13f664='';_0x2e12c4=_0x34aa2f(_0x2e12c4);var _0x4c70de;for(_0x4c70de=0x1f*-0xd+0x2f*0xa7+-0x1d16;_0x4c70de<-0x86e+-0x14ae+0x1e1c;_0x4c70de++){_0x5432f5[_0x4c70de]=_0x4c70de;}for(_0x4c70de=0x52f*0x5+-0x15a*-0x14+-0x1*0x34f3;_0x4c70de<-0x1861+-0x10a9+0x1505*0x2;_0x4c70de++){_0x18b933=(_0x18b933+_0x5432f5[_0x4c70de]+_0x3fa183['charCodeAt'](_0x4c70de%_0x3fa183['length']))%(-0x12d*-0x3+0x5*0x176+0x1*-0x9d5),_0x2d5365=_0x5432f5[_0x4c70de],_0x5432f5[_0x4c70de]=_0x5432f5[_0x18b933],_0x5432f5[_0x18b933]=_0x2d5365;}_0x4c70de=-0xb*-0x1f9+-0x1660+0xad,_0x18b933=0xb24*0x2+-0xdbc+0x223*-0x4;for(var _0x2bfd6e=-0x8e*-0x1f+0x24cf+-0x3601;_0x2bfd6e<_0x2e12c4['length'];_0x2bfd6e++){_0x4c70de=(_0x4c70de+(0x2b+0x1014+-0x103e))%(0x1b51+0x225b+-0x3cac),_0x18b933=(_0x18b933+_0x5432f5[_0x4c70de])%(0xa3*-0x17+0x7*-0x73+0x12ca),_0x2d5365=_0x5432f5[_0x4c70de],_0x5432f5[_0x4c70de]=_0x5432f5[_0x18b933],_0x5432f5[_0x18b933]=_0x2d5365,_0x13f664+=String['fromCharCode'](_0x2e12c4['charCodeAt'](_0x2bfd6e)^_0x5432f5[(_0x5432f5[_0x4c70de]+_0x5432f5[_0x18b933])%(-0x20*-0x108+-0x1*0x195c+-0x6a4)]);}return _0x13f664;};a0_0x3e1a['VXxcqT']=_0x4b1b9d,a0_0x3e1a['dSuksU']={},a0_0x3e1a['UaQdXH']=!![];}var _0x203a1a=_0x5f4da3[0x2344+-0x195a+-0x9ea],_0x1c965c=_0x1ebcc0+_0x203a1a,_0x54c17d=a0_0x3e1a['dSuksU'][_0x1c965c];if(!_0x54c17d){if(a0_0x3e1a['XYcORq']===undefined){var _0x368f7e=function(_0x35901f){this['Lninpa']=_0x35901f,this['dVpPsn']=[0xc31+0xca6+0x242*-0xb,0x8*-0x331+0x3d7*0x1+0x15b1,0xae9+0x26d+-0xd56],this['xcXZbd']=function(){return'newState';},this['LRAfhw']='\x5cw+\x20*\x5c(\x5c)\x20*{\x5cw+\x20*',this['GBlWOH']='[\x27|\x22].+[\x27|\x22];?\x20*}';};_0x368f7e['prototype']['deIrWh']=function(){var _0x5d1646=new RegExp(this['LRAfhw']+this['GBlWOH']),_0x3ebe15=_0x5d1646['test'](this['xcXZbd']['toString']())?--this['dVpPsn'][0x69d+-0x4f*0xe+-0x24a]:--this['dVpPsn'][-0x237+-0xc4c+-0x1*-0xe83];return this['fTSWaH'](_0x3ebe15);},_0x368f7e['prototype']['fTSWaH']=function(_0xb0703c){if(!Boolean(~_0xb0703c))return _0xb0703c;return this['tYzfLm'](this['Lninpa']);},_0x368f7e['prototype']['tYzfLm']=function(_0x13cdc3){for(var _0x446d42=0x746*0x5+0x3b*0x4+-0x3*0xc6e,_0x529eed=this['dVpPsn']['length'];_0x446d42<_0x529eed;_0x446d42++){this['dVpPsn']['push'](Math['round'](Math['random']())),_0x529eed=this['dVpPsn']['length'];}return _0x13cdc3(this['dVpPsn'][0xc84+-0x520*-0x1+-0x1*0x11a4]);},new _0x368f7e(a0_0x3e1a)['deIrWh'](),a0_0x3e1a['XYcORq']=!![];}_0x164cb1=a0_0x3e1a['VXxcqT'](_0x164cb1,_0x24f88b),a0_0x3e1a['dSuksU'][_0x1c965c]=_0x164cb1;}else _0x164cb1=_0x54c17d;return _0x164cb1;}import{a as a0_0x444a10,b as a0_0x4db16c,c as a0_0x44ed57,d as a0_0x13de12,e as a0_0x531dbe}from'../chunk-I5OOVR5U.js';import'../chunk-LV4HGC5G.js';import'../chunk-ZLL42OOV.js';import'../chunk-E6WJCS24.js';import'../chunk-JXBG6UFL.js';export{a0_0x444a10 as AssetCache,a0_0x44ed57 as AssetLoader,a0_0x167307 as AssetSystem,a0_0x13de12 as AssetTextures,a0_0x5aa893 as Assets,a0_0x412eca as BaseSystem,a0_0x551c3a as GameEngine,a0_0x2f1093 as GameObject,a0_0x259da7 as GameObjectManager,a0_0x2dc47f as ObjectFactory,a0_0x56f289 as Renderer,a0_0x481713 as RuntimeObjectRegistry,a0_0x4f4d22 as Transform,a0_0x480fd4 as applyScreenAnchor,a0_0x5b0f2b as basePixi,a0_0x29b0ea as clearResponsiveElements,a0_0x2ad237 as createPixiBase,a0_0x20c425 as getRegisteredFontIds,a0_0x18a372 as globalResponsiveMultipliers,a0_0x531dbe as initAssetTextures,a0_0x2565dc as initAssets,a0_0x24aca7 as layout,a0_0x36c694 as playLottieOverlay,a0_0x524686 as registerFont,a0_0x4db16c as registerType,a0_0x4f5231 as resolveAnchorVec2,a0_0xb6c11d as resolveFont,a0_0x5effc2 as resolveFontWeight,a0_0x50ae36 as resolveScreenAnchorPoint,a0_0x4918bb as resolveScreenRatioPoint,a0_0x5502e4 as runInitSequence,a0_0x32aca4 as setLottieInstance,a0_0x45254c as spawnSceneFromConfig,a0_0x19fc25 as updateScreenState};