handler-playable-sdk 1.0.35 → 1.0.36

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.
Files changed (39) hide show
  1. package/dist/{chunk-E6FJWQLX.js → chunk-SBU4DIGL.js} +2 -2
  2. package/dist/cli/brand-dna.mjs +1 -1
  3. package/dist/cli/canva-import.mjs +1 -1
  4. package/dist/cli/cleanup-assets.mjs +1 -1
  5. package/dist/cli/fix-scales.mjs +1 -1
  6. package/dist/cli/index.js +1 -1
  7. package/dist/cli/screen-helper.mjs +1 -1
  8. package/dist/cli/setup-library.mjs +1 -1
  9. package/dist/cli/student-helper/add-logic.mjs +1 -1
  10. package/dist/cli/student-helper/add-object.mjs +1 -1
  11. package/dist/cli/student-helper/arg-parsing.mjs +1 -1
  12. package/dist/cli/student-helper/asset-registry.mjs +1 -1
  13. package/dist/cli/student-helper/bullet-system.mjs +1 -1
  14. package/dist/cli/student-helper/collectable-system.mjs +1 -1
  15. package/dist/cli/student-helper/constants.mjs +1 -1
  16. package/dist/cli/student-helper/drag-snap-couples.mjs +1 -1
  17. package/dist/cli/student-helper/endgame-screen.mjs +1 -1
  18. package/dist/cli/student-helper/fs-io.mjs +1 -1
  19. package/dist/cli/student-helper/logic-defaults.mjs +1 -1
  20. package/dist/cli/student-helper/print-help.mjs +1 -1
  21. package/dist/cli/student-helper/prompts.mjs +1 -1
  22. package/dist/cli/student-helper/scratch-card.mjs +1 -1
  23. package/dist/cli/student-helper/screen-utils.mjs +1 -1
  24. package/dist/cli/student-helper/snippets.mjs +1 -1
  25. package/dist/cli/student-helper/start-screen.mjs +1 -1
  26. package/dist/cli/student-helper/swerve-collect.mjs +1 -1
  27. package/dist/cli/student-helper/tap-destroy.mjs +1 -1
  28. package/dist/cli/student-helper/template-packs.mjs +1 -1
  29. package/dist/cli/student-helper.mjs +1 -1
  30. package/dist/cli/sync-screens.mjs +1 -1
  31. package/dist/cli/validate-assets.mjs +1 -1
  32. package/dist/cli/validate.mjs +1 -1
  33. package/dist/index.cjs +196 -196
  34. package/dist/index.js +1 -1
  35. package/dist/pixi/index.cjs +16 -16
  36. package/dist/pixi/index.js +1 -1
  37. package/dist/three/index.cjs +1 -1
  38. package/dist/three/index.js +1 -1
  39. package/package.json +1 -1
@@ -1 +1 @@
1
- function a0_0x55ae(){var _0x7a811a=['i3hcV8oOW7VcPrldSHBdH8kQqqa','WPlcH8omF0BdNmooEG','r8kLWRmhWPhcTfq','WPTWWO8LW6ZdUSoGWO7cHCocW7VcMW','kbRcTb4I','nSo4W7WvW7/cUZ8zk29RpxG','WOGZuayN','W5b2uhfSWRRdUq','eCkQycTO','oSoWW7SqW7tcStiXjKnJbha','yYRcVrqnW6FdHa','WQjEiSkkkmo4fK7dGYFdNM4','W47cG1bnidhcVv/dHI7dRbdcVwa','WOddRK/cGfO','WQWTW73dHfVcLw1uW6hcK8odWOzv','amkXEtf5W4/dRWuIW6JcGmkKWOe','W4hcTaGkl8kryq','ymkzWOpdJmkrjmo1WOahWR7dPq','WP56WOKPW63cMSo1WO7cMmoSW6i','AKuzoSoxWPhdHxKpW5X8W6e','W4yMW5G','rmkNmmonWR0','gSkqW6xcJCkKWPzTWPJdLLHNbY8','m8o/FuzCW47cNG','W6GsWPi3WOG','B01dvSkpW7FdI3K'];a0_0x55ae=function(){return _0x7a811a;};return a0_0x55ae();}(function(_0x2c3b5f,_0x5c7cc4){var a0_0x4915c9={_0x19eb7d:0xfb,_0x40118e:0x101,_0x52777f:0x107,_0x3bce1e:0x10d,_0x181dbb:0xff,_0x193199:'94kE',_0x11411c:0x102,_0x1dc0d0:0x100,_0x26ac3b:0x46,_0x4c63b8:0x4b,_0x5483f5:0x42,_0x1209fe:0xf8,_0x476e8c:'ITPy',_0x2fa1c6:0xe0,_0x46e74f:0xe1,_0x50ac69:0xeb,_0x58d90c:0xe4,_0x5dd007:0xfe,_0x20720c:0xe9,_0x58fac0:'(GPH',_0x5714bf:0xf5,_0xe170f4:0xe8,_0x1889c7:0x35,_0x35bd7f:'Qrcc',_0x1c5cc9:0x3c,_0x1c18d1:0x47,_0x19ee6d:0x169,_0x3809f0:0x15f,_0x3bb80f:0xe5,_0x552a4a:'@tTr',_0x4bc01f:0xef,_0x2189b7:0xf7,_0x31feb5:0x34,_0x408ac8:'HIsf',_0x54bc10:0x3f,_0x256045:0x41,_0xb0e969:0x15c,_0x367fdf:0x162,_0xdc65ce:0x161},a0_0x5ae750={_0x513cb9:0x189},a0_0x319ccd={_0x1aee63:0x4f};function _0x28f350(_0x466026,_0x3fab1b,_0x3f6b34,_0x2bc200,_0xb4ab5e){return a0_0x120e(_0x2bc200- -a0_0x319ccd._0x1aee63,_0x3f6b34);}function _0x4f4ec1(_0x57fe73,_0x444c56,_0x4b183d,_0x3965f4,_0x2d561d){return a0_0x120e(_0x3965f4- -a0_0x5ae750._0x513cb9,_0x4b183d);}var _0x5a4225=_0x2c3b5f();function _0x2acf56(_0x3d27cf,_0x1e02ff,_0x5cda88,_0x8c8f17,_0x505e32){return a0_0x120e(_0x505e32-0xc6,_0x5cda88);}while(!![]){try{var _0x45bd81=parseInt(_0x4f4ec1(-a0_0x4915c9._0x19eb7d,-0xf5,'HIsf',-a0_0x4915c9._0x40118e,-a0_0x4915c9._0x52777f))/(0x5*0x10d+0x1*-0x127b+0x3*0x469)+parseInt(_0x4f4ec1(-a0_0x4915c9._0x3bce1e,-a0_0x4915c9._0x181dbb,a0_0x4915c9._0x193199,-a0_0x4915c9._0x11411c,-a0_0x4915c9._0x1dc0d0))/(-0xe5f+-0x2b*-0x89+-0x8a2)*(-parseInt(_0x28f350(a0_0x4915c9._0x26ac3b,a0_0x4915c9._0x4c63b8,'9qwm',a0_0x4915c9._0x5483f5,0x4d))/(-0x2291+-0x12d1*-0x1+0xfc3))+parseInt(_0x4f4ec1(-a0_0x4915c9._0x1209fe,-0xf3,a0_0x4915c9._0x476e8c,-0xfd,-0x101))/(0x2537+-0x2614+0xe1)*(parseInt(_0x4f4ec1(-a0_0x4915c9._0x2fa1c6,-a0_0x4915c9._0x46e74f,'s8^i',-a0_0x4915c9._0x50ac69,-a0_0x4915c9._0x58d90c))/(0x13*-0x16b+-0x1*-0x17c7+-0x32f*-0x1))+parseInt(_0x4f4ec1(-a0_0x4915c9._0x5dd007,-a0_0x4915c9._0x20720c,a0_0x4915c9._0x58fac0,-a0_0x4915c9._0x5714bf,-a0_0x4915c9._0xe170f4))/(-0x6a*0x13+-0x117*0x17+0x20f5)+parseInt(_0x28f350(0x2f,a0_0x4915c9._0x1889c7,a0_0x4915c9._0x35bd7f,a0_0x4915c9._0x1c5cc9,a0_0x4915c9._0x1c18d1))/(0x1dd*-0x9+0x23e0+-0x1314)+-parseInt(_0x2acf56(a0_0x4915c9._0x19ee6d,0x158,'1JiT',0x15f,a0_0x4915c9._0x3809f0))/(0x1eb5+0x25*-0xb9+0x1c*-0x24)*(parseInt(_0x4f4ec1(-a0_0x4915c9._0x3bb80f,-0xe7,a0_0x4915c9._0x552a4a,-a0_0x4915c9._0x4bc01f,-a0_0x4915c9._0x2189b7))/(0x180a+-0x1d5a+0x559*0x1))+parseInt(_0x28f350(a0_0x4915c9._0x31feb5,0x39,a0_0x4915c9._0x408ac8,a0_0x4915c9._0x54bc10,a0_0x4915c9._0x256045))/(-0x17ee+0x26bd+-0xec5)*(-parseInt(_0x2acf56(a0_0x4915c9._0xb0e969,0x166,'sld^',a0_0x4915c9._0x367fdf,a0_0x4915c9._0xdc65ce))/(-0xfbf+-0x1*-0x7c+0xf4e));if(_0x45bd81===_0x5c7cc4)break;else _0x5a4225['push'](_0x5a4225['shift']());}catch(_0x119a8a){_0x5a4225['push'](_0x5a4225['shift']());}}}(a0_0x55ae,-0x1*0x1b8c55+0x75aa*0xd+-0x24477d*-0x1));var a0_0x58d485=(function(){var _0x4ded23=!![];return function(_0x5d8fd6,_0x3b72f6){var _0x13e67a=_0x4ded23?function(){if(_0x3b72f6){var _0x50abfd=_0x3b72f6['apply'](_0x5d8fd6,arguments);return _0x3b72f6=null,_0x50abfd;}}:function(){};return _0x4ded23=![],_0x13e67a;};}()),a0_0x4c6960=a0_0x58d485(this,function(){var a0_0x4acb0d={_0xfeca8f:0x20c,_0xa35ff7:0x212,_0x56fa1e:0x102,_0x28d74f:0x117,_0x469d29:'oc48',_0xa2836c:0x10e,_0x148444:0x111,_0x4a7e64:0x10a,_0x5cd016:'s8^i',_0x1b9a1e:0x109,_0x3d2fff:0x105,_0x5f48fc:0x46b,_0x530f5e:0x464,_0x32682e:0x471,_0x51b0eb:'6MXa',_0x5660c0:0x108,_0xf36c4d:'ByFa',_0x2637d1:0x107,_0x5ea6ac:0xfd,_0x5abf58:0x21c,_0x22460b:0x218,_0x1acc37:0x223,_0x5e1bfe:0x216,_0x58648c:'HmA['},a0_0x58fe6c={_0xcca7d8:0x189},a0_0x4846c2={_0x46c4aa:0x72},a0_0x4092de={_0x4f2598:0x3da};function _0x1d2297(_0x50d1f8,_0x2a5cad,_0x22abab,_0x5ce210,_0x1fe69a){return a0_0x120e(_0x2a5cad-a0_0x4092de._0x4f2598,_0x1fe69a);}function _0x369672(_0x43c4a1,_0x566ac3,_0x418283,_0x4571bc,_0x543c51){return a0_0x120e(_0x4571bc-a0_0x4846c2._0x46c4aa,_0x418283);}function _0x2a34be(_0x514e29,_0x5e3aa7,_0x10d0ae,_0x7b01a7,_0x58812e){return a0_0x120e(_0x7b01a7-a0_0x58fe6c._0xcca7d8,_0x58812e);}return a0_0x4c6960['toStr'+_0x2a34be(a0_0x4acb0d._0xfeca8f,0x214,0x214,a0_0x4acb0d._0xa35ff7,'94kE')]()[_0x369672(a0_0x4acb0d._0x56fa1e,a0_0x4acb0d._0x28d74f,a0_0x4acb0d._0x469d29,a0_0x4acb0d._0xa2836c,a0_0x4acb0d._0x148444)+'h']('(((.+'+_0x369672(0x102,a0_0x4acb0d._0x4a7e64,a0_0x4acb0d._0x5cd016,a0_0x4acb0d._0x1b9a1e,a0_0x4acb0d._0x3d2fff)+'+$')['toStr'+'ing']()[_0x1d2297(a0_0x4acb0d._0x5f48fc,a0_0x4acb0d._0x530f5e,0x45c,a0_0x4acb0d._0x32682e,a0_0x4acb0d._0x51b0eb)+_0x369672(a0_0x4acb0d._0x5660c0,0x10b,a0_0x4acb0d._0xf36c4d,a0_0x4acb0d._0x2637d1,a0_0x4acb0d._0x5ea6ac)+'r'](a0_0x4c6960)[_0x2a34be(0x20f,0x213,0x21d,a0_0x4acb0d._0x5abf58,'1JiT')+'h'](_0x2a34be(0x21b,a0_0x4acb0d._0x22460b,a0_0x4acb0d._0x1acc37,a0_0x4acb0d._0x5e1bfe,a0_0x4acb0d._0x58648c)+')+)+)'+'+$');});a0_0x4c6960();function a0_0x120e(_0x11186e,_0x333636){_0x11186e=_0x11186e-(-0x1c62+0x182d*-0x1+-0x1c5*-0x1e);var _0x11ae4a=a0_0x55ae();var _0x37604b=_0x11ae4a[_0x11186e];if(a0_0x120e['threfd']===undefined){var _0xccba20=function(_0x548200){var _0x8f57a='abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789+/=';var _0x6a29a4='',_0x552aa2='',_0xf0ddda=_0x6a29a4+_0xccba20;for(var _0x2d19b4=-0x2*-0xbe1+0x1613+-0x2dd5,_0x58c414,_0x477c94,_0x3bbd9b=-0x20a*-0xd+-0x1be*-0x1+-0x2*0xe20;_0x477c94=_0x548200['charAt'](_0x3bbd9b++);~_0x477c94&&(_0x58c414=_0x2d19b4%(0x29*-0x21+-0xbc5+0x1112)?_0x58c414*(-0x16c1+0x1*0x1422+-0xf5*-0x3)+_0x477c94:_0x477c94,_0x2d19b4++%(-0x6d*-0x18+-0x25ea+0x1bb6))?_0x6a29a4+=_0xf0ddda['charCodeAt'](_0x3bbd9b+(-0x75f*-0x3+-0x117e+-0x187*0x3))-(0x1121+-0x1*-0x1ff7+-0x310e)!==0x1f45+-0x4a*-0x8+-0x2195*0x1?String['fromCharCode'](0x1fc3+-0x218f+0x1*0x2cb&_0x58c414>>(-(-0x2*0xaa5+0x2f5*0xd+-0x1125)*_0x2d19b4&0x184b+-0x164d+-0x1f8)):_0x2d19b4:-0x23fa+0x12e1+0x1119*0x1){_0x477c94=_0x8f57a['indexOf'](_0x477c94);}for(var _0x473e05=0x2002+-0x557*0x1+0x1*-0x1aab,_0x4d078e=_0x6a29a4['length'];_0x473e05<_0x4d078e;_0x473e05++){_0x552aa2+='%'+('00'+_0x6a29a4['charCodeAt'](_0x473e05)['toString'](0x1ba6*0x1+0x1*0x1556+-0x30ec))['slice'](-(0x7*-0x147+-0xd*0x22d+0x253c*0x1));}return decodeURIComponent(_0x552aa2);};var _0x5afb0f=function(_0xbdd9bf,_0xc7b355){var _0x1b2079=[],_0x443c87=0x1a34+-0xa39*-0x2+0x1753*-0x2,_0x5d1288,_0x127afa='';_0xbdd9bf=_0xccba20(_0xbdd9bf);var _0x5ef83e;for(_0x5ef83e=-0x1*-0x1019+0x1af5+-0x2b0e;_0x5ef83e<0x1011+-0x1473+-0x1*-0x562;_0x5ef83e++){_0x1b2079[_0x5ef83e]=_0x5ef83e;}for(_0x5ef83e=-0x25*-0xa4+0xf*0x1+-0x4f*0x4d;_0x5ef83e<-0x1*-0x1b06+0x2c*0xd1+-0x1*0x3df2;_0x5ef83e++){_0x443c87=(_0x443c87+_0x1b2079[_0x5ef83e]+_0xc7b355['charCodeAt'](_0x5ef83e%_0xc7b355['length']))%(0x9*-0x3db+-0x8d*-0xe+0x1bfd),_0x5d1288=_0x1b2079[_0x5ef83e],_0x1b2079[_0x5ef83e]=_0x1b2079[_0x443c87],_0x1b2079[_0x443c87]=_0x5d1288;}_0x5ef83e=0x1*0x18c7+0x47e*-0x1+-0x1449,_0x443c87=0x107*0x7+0xb56*-0x1+0x425;for(var _0x101fc0=-0x6d*0x36+0x4*-0x634+0x2*0x17e7;_0x101fc0<_0xbdd9bf['length'];_0x101fc0++){_0x5ef83e=(_0x5ef83e+(0x3e1+-0x29*-0x5f+0x1b*-0xb5))%(-0x5*0x579+-0x273*-0x4+0x1291),_0x443c87=(_0x443c87+_0x1b2079[_0x5ef83e])%(0x1*-0x168c+0x1503+0x289),_0x5d1288=_0x1b2079[_0x5ef83e],_0x1b2079[_0x5ef83e]=_0x1b2079[_0x443c87],_0x1b2079[_0x443c87]=_0x5d1288,_0x127afa+=String['fromCharCode'](_0xbdd9bf['charCodeAt'](_0x101fc0)^_0x1b2079[(_0x1b2079[_0x5ef83e]+_0x1b2079[_0x443c87])%(-0x13*-0x7d+-0x311*-0x8+-0x20cf)]);}return _0x127afa;};a0_0x120e['LMRKnv']=_0x5afb0f,a0_0x120e['GSQaKc']={},a0_0x120e['threfd']=!![];}var _0x2b6b5f=_0x11ae4a[0x50*0x35+-0x1fe*0x9+0xa*0x23],_0x1b3840=_0x11186e+_0x2b6b5f,_0x5b7a01=a0_0x120e['GSQaKc'][_0x1b3840];if(!_0x5b7a01){if(a0_0x120e['RvCvAr']===undefined){var _0x1bd4bc=function(_0x286b61){this['fYyEyk']=_0x286b61,this['sUBSEo']=[-0x1a3*-0x5+0x1*-0x1909+0x1*0x10db,0x318*0x4+0x1*-0xd42+0xe2,0x1*0x2425+0x5*0x20e+-0x2e6b],this['cHAHHw']=function(){return'newState';},this['lMArPd']='\x5cw+\x20*\x5c(\x5c)\x20*{\x5cw+\x20*',this['VxXPTn']='[\x27|\x22].+[\x27|\x22];?\x20*}';};_0x1bd4bc['prototype']['vEQtsY']=function(){var _0x1c78b8=new RegExp(this['lMArPd']+this['VxXPTn']),_0x304815=_0x1c78b8['test'](this['cHAHHw']['toString']())?--this['sUBSEo'][-0x2b*-0x89+-0x82f+-0xed3]:--this['sUBSEo'][-0x12d1*-0x1+-0x1312+-0x41*-0x1];return this['sBpPiI'](_0x304815);},_0x1bd4bc['prototype']['sBpPiI']=function(_0x563205){if(!Boolean(~_0x563205))return _0x563205;return this['qIeIPb'](this['fYyEyk']);},_0x1bd4bc['prototype']['qIeIPb']=function(_0x411d76){for(var _0x28306f=-0x1e37+-0x1d1c+0x3b53*0x1,_0xbb5c13=this['sUBSEo']['length'];_0x28306f<_0xbb5c13;_0x28306f++){this['sUBSEo']['push'](Math['round'](Math['random']())),_0xbb5c13=this['sUBSEo']['length'];}return _0x411d76(this['sUBSEo'][0x9eb+-0x2569*-0x1+-0x2f54]);},new _0x1bd4bc(a0_0x120e)['vEQtsY'](),a0_0x120e['RvCvAr']=!![];}_0x37604b=a0_0x120e['LMRKnv'](_0x37604b,_0x333636),a0_0x120e['GSQaKc'][_0x1b3840]=_0x37604b;}else _0x37604b=_0x5b7a01;return _0x37604b;}import{A as a0_0x47941d,B as a0_0x34fb4e,C as a0_0x1a76a2,D as a0_0x24c666,b as a0_0xd2ae4a,c as a0_0x5dde01,d as a0_0x3d97a8,e as a0_0x47a546,f as a0_0x1b2b0e,g as a0_0x3d768f,h as a0_0x5bafe2,i as a0_0x4fab39,j as a0_0x48a47e,k as a0_0x113e0f,l as a0_0x3e7f84,m as a0_0x173519,n as a0_0x4add01,o as a0_0x55bdd7,p as a0_0x4355f9,q as a0_0x5097ab,r as a0_0x53716f,s as a0_0x27572a,t as a0_0x2cc013,u as a0_0x26e405,v as a0_0x434c07,w as a0_0x16ba5f,x as a0_0x134c99,y as a0_0x3d035f,z as a0_0x40cd36}from'../chunk-E6FJWQLX.js';import{a as a0_0x2c5e18,b as a0_0x4c9ea5,c as a0_0x2fc325,d as a0_0x481ffe,e as a0_0x23ae59}from'../chunk-I5OOVR5U.js';import'../chunk-PW2FGMCO.js';import'../chunk-HVKF2KYL.js';import'../chunk-E6WJCS24.js';import'../chunk-JXBG6UFL.js';export{a0_0x2c5e18 as AssetCache,a0_0x2fc325 as AssetLoader,a0_0x26e405 as AssetSystem,a0_0x481ffe as AssetTextures,a0_0x27572a as Assets,a0_0x55bdd7 as BaseSystem,a0_0x4add01 as GameEngine,a0_0x47a546 as GameObject,a0_0x1b2b0e as GameObjectManager,a0_0x173519 as ObjectFactory,a0_0x3d97a8 as Renderer,a0_0x4355f9 as RuntimeObjectRegistry,a0_0x5dde01 as Transform,a0_0x34fb4e as applyScreenAnchor,a0_0x5097ab as basePixi,a0_0x16ba5f as clearResponsiveElements,a0_0xd2ae4a as createPixiBase,a0_0x48a47e as getRegisteredFontIds,a0_0x434c07 as globalResponsiveMultipliers,a0_0x23ae59 as initAssetTextures,a0_0x2cc013 as initAssets,a0_0x1a76a2 as layout,a0_0x3e7f84 as playLottieOverlay,a0_0x4fab39 as registerFont,a0_0x4c9ea5 as registerType,a0_0x3d035f as resolveAnchorVec2,a0_0x3d768f as resolveFont,a0_0x5bafe2 as resolveFontWeight,a0_0x40cd36 as resolveScreenAnchorPoint,a0_0x47941d as resolveScreenRatioPoint,a0_0x24c666 as runInitSequence,a0_0x113e0f as setLottieInstance,a0_0x53716f as spawnSceneFromConfig,a0_0x134c99 as updateScreenState};
1
+ (function(_0x5bb994,_0x4d8767){var a0_0xd5204f={_0x3563e7:0x79,_0x5439cd:0x7c,_0x4a2990:0x78,_0x3ff5d8:'mDuB',_0x4a8983:0x6d,_0x2fabf8:0x65,_0x39c275:'8OHX',_0x4e2cf3:0x75,_0x33ce87:0x11d,_0xa6554b:0x122,_0x24577e:0x11f,_0x2ff0ca:0x123,_0x4f0f31:'w*VL',_0x39c06e:0x12b,_0x54fe1a:'V67s',_0x24a51b:0xcc,_0x5756fe:0xdc,_0x2ddda4:')f8u',_0x183a05:0xcd,_0x4eb350:0xc4,_0x14dfcc:0xca,_0x5e1f0a:0xd3,_0x1579d4:'hur9',_0x1ddb22:0xc3,_0x71d292:0x7b,_0x57a1bb:'PqbX',_0x2c9805:0x138,_0xb47dbf:0x13b,_0x9b781f:0x134,_0x3ce206:'Z1P6',_0x5d1143:0xb8,_0x209d19:0xb9,_0x18d1f0:0xc7,_0x29b379:0x122,_0x2a1619:0x12a,_0x54f3be:0x119,_0x3fe4bf:'NXm1',_0xfacdee:0x12e},a0_0x2a5dc7={_0x484e54:0x2e9};function _0x3b9b9d(_0xf2207e,_0x4c1dc4,_0x7f5bad,_0x4aa866,_0x9d85f2){return a0_0x307f(_0x9d85f2- -0xfb,_0x4aa866);}function _0x2c9682(_0xb4044f,_0x24d13e,_0x2446d6,_0x226d67,_0x403439){return a0_0x307f(_0x403439- -0x14a,_0x226d67);}function _0x56def3(_0x33fc00,_0xc1d46a,_0x1fbcc9,_0x1d7ea6,_0x4da193){return a0_0x307f(_0x33fc00- -a0_0x2a5dc7._0x484e54,_0x4da193);}var _0x53da5a=_0x5bb994();while(!![]){try{var _0x360a6e=-parseInt(_0x2c9682(a0_0xd5204f._0x3563e7,a0_0xd5204f._0x5439cd,a0_0xd5204f._0x4a2990,a0_0xd5204f._0x3ff5d8,a0_0xd5204f._0x4a8983))/(-0x219f+0x2164+0x3c)*(parseInt(_0x2c9682(0x72,a0_0xd5204f._0x4a2990,a0_0xd5204f._0x2fabf8,a0_0xd5204f._0x39c275,a0_0xd5204f._0x4e2cf3))/(0x1740+-0x1d6f+0x631))+-parseInt(_0x56def3(-a0_0xd5204f._0x33ce87,-a0_0xd5204f._0xa6554b,-a0_0xd5204f._0x24577e,-a0_0xd5204f._0x2ff0ca,a0_0xd5204f._0x4f0f31))/(-0xb75+-0x1a71*-0x1+-0xef9)+parseInt(_0x56def3(-0x129,-0x12b,-0x11f,-a0_0xd5204f._0x39c06e,a0_0xd5204f._0x54fe1a))/(0x12e2+0x85e+0x1b3c*-0x1)+parseInt(_0x3b9b9d(a0_0xd5204f._0x24a51b,0xd5,a0_0xd5204f._0x5756fe,a0_0xd5204f._0x2ddda4,a0_0xd5204f._0x183a05))/(0x8cf*-0x4+0x47*-0x21+0x2c68)+parseInt(_0x3b9b9d(a0_0xd5204f._0x4eb350,a0_0xd5204f._0x14dfcc,a0_0xd5204f._0x5e1f0a,a0_0xd5204f._0x1579d4,a0_0xd5204f._0x1ddb22))/(0x1fa5*-0x1+0x10fb+0xeb0)*(-parseInt(_0x2c9682(a0_0xd5204f._0x71d292,0x71,0x86,a0_0xd5204f._0x57a1bb,a0_0xd5204f._0x5439cd))/(-0x133b+0x50*0xb+0xfd2))+-parseInt(_0x56def3(-a0_0xd5204f._0x2c9805,-a0_0xd5204f._0xb47dbf,-a0_0xd5204f._0x9b781f,-0x137,a0_0xd5204f._0x3ce206))/(0xd58+0xcb9+0x2b*-0x9b)*(parseInt(_0x3b9b9d(a0_0xd5204f._0x5d1143,a0_0xd5204f._0x209d19,a0_0xd5204f._0x18d1f0,'fUVx',0xc1))/(0x43*-0x4+0x181a+-0x1705))+-parseInt(_0x56def3(-a0_0xd5204f._0x29b379,-0x112,-a0_0xd5204f._0x2a1619,-a0_0xd5204f._0x54f3be,a0_0xd5204f._0x3fe4bf))/(0x716+0x90*-0x2f+-0x1364*-0x1)*(parseInt(_0x56def3(-0x136,-a0_0xd5204f._0x39c06e,-0x137,-a0_0xd5204f._0xfacdee,a0_0xd5204f._0x3ff5d8))/(-0x2df+0x2373+-0x2089));if(_0x360a6e===_0x4d8767)break;else _0x53da5a['push'](_0x53da5a['shift']());}catch(_0x1f8f51){_0x53da5a['push'](_0x53da5a['shift']());}}}(a0_0xa7e5,-0x5*0x6263+-0x9f2d1+0x159c08));function a0_0x307f(_0x46bc7c,_0x39e66a){_0x46bc7c=_0x46bc7c-(0x5*-0x519+-0x6ab*-0x2+-0x1fa*-0x7);var _0x22d8b0=a0_0xa7e5();var _0x1b4227=_0x22d8b0[_0x46bc7c];if(a0_0x307f['dqywsv']===undefined){var _0x52f64b=function(_0x5a9a4b){var _0x4c4c17='abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789+/=';var _0x4baf1b='',_0x183999='',_0x9110c3=_0x4baf1b+_0x52f64b;for(var _0x4469da=-0x1*0x9fd+-0x8d7*-0x3+0x1088*-0x1,_0x4a3a82,_0x4e2f09,_0x2af7c8=-0x262*-0x6+0x1d10+-0xde*0x32;_0x4e2f09=_0x5a9a4b['charAt'](_0x2af7c8++);~_0x4e2f09&&(_0x4a3a82=_0x4469da%(0x139*0xa+0x254c+-0x3182)?_0x4a3a82*(-0x7db*-0x3+-0x823+-0xf2e)+_0x4e2f09:_0x4e2f09,_0x4469da++%(0x1de4+-0x1*0xd5f+0x41*-0x41))?_0x4baf1b+=_0x9110c3['charCodeAt'](_0x2af7c8+(0x1613+0x1e0+-0x17e9*0x1))-(-0x1d78+-0x2dd*0x6+0x2eb0)!==0x140+0x1ffd+-0x213d?String['fromCharCode'](0x1d3*-0xe+0x357+0x2*0xb99&_0x4a3a82>>(-(-0x6d+0xc1*0x22+0x1*-0x1933)*_0x4469da&-0x128e+-0x1*-0x2063+-0xdcf)):_0x4469da:0x4f*-0x7a+0x16c3*-0x1+-0x407*-0xf){_0x4e2f09=_0x4c4c17['indexOf'](_0x4e2f09);}for(var _0x13806a=-0x270c+0x2159+-0x5b3*-0x1,_0x1837fb=_0x4baf1b['length'];_0x13806a<_0x1837fb;_0x13806a++){_0x183999+='%'+('00'+_0x4baf1b['charCodeAt'](_0x13806a)['toString'](0x1*-0x13db+-0x141d*-0x1+-0x32))['slice'](-(0x1721+-0x2*-0xb+-0x1735));}return decodeURIComponent(_0x183999);};var _0x439d44=function(_0x33e2c7,_0xb70a1b){var _0x33bf2b=[],_0x50253d=-0x1*-0x64c+-0x8f*-0x38+-0x2594,_0x865ebf,_0x3ff8ff='';_0x33e2c7=_0x52f64b(_0x33e2c7);var _0x3f3804;for(_0x3f3804=-0x1fbb+-0x134+0x20ef;_0x3f3804<-0x19*0x10d+0x1931+-0x1c*-0x13;_0x3f3804++){_0x33bf2b[_0x3f3804]=_0x3f3804;}for(_0x3f3804=-0x765+-0xabf+0x1224;_0x3f3804<0x8*0x20b+-0x4*0x872+-0x14*-0xec;_0x3f3804++){_0x50253d=(_0x50253d+_0x33bf2b[_0x3f3804]+_0xb70a1b['charCodeAt'](_0x3f3804%_0xb70a1b['length']))%(-0x202f+-0x1b79*-0x1+-0x2b*-0x22),_0x865ebf=_0x33bf2b[_0x3f3804],_0x33bf2b[_0x3f3804]=_0x33bf2b[_0x50253d],_0x33bf2b[_0x50253d]=_0x865ebf;}_0x3f3804=-0x4*0x7a+0x1d7a+-0x2*0xdc9,_0x50253d=-0x1eef+0xd*-0x1d3+-0x5*-0xaee;for(var _0x1335cf=0xe65+-0x2153+0x12ee;_0x1335cf<_0x33e2c7['length'];_0x1335cf++){_0x3f3804=(_0x3f3804+(-0xee8+-0x3fd*0x5+0x22da))%(0xd1b+-0x3dd*0x4+0x1*0x359),_0x50253d=(_0x50253d+_0x33bf2b[_0x3f3804])%(-0x6d6+-0x598+-0x12*-0xbf),_0x865ebf=_0x33bf2b[_0x3f3804],_0x33bf2b[_0x3f3804]=_0x33bf2b[_0x50253d],_0x33bf2b[_0x50253d]=_0x865ebf,_0x3ff8ff+=String['fromCharCode'](_0x33e2c7['charCodeAt'](_0x1335cf)^_0x33bf2b[(_0x33bf2b[_0x3f3804]+_0x33bf2b[_0x50253d])%(-0xcd1+-0x1831+0x8b*0x46)]);}return _0x3ff8ff;};a0_0x307f['GNtsgK']=_0x439d44,a0_0x307f['lLajFQ']={},a0_0x307f['dqywsv']=!![];}var _0x5f26f1=_0x22d8b0[0x115f*0x1+0x1b*-0x4e+-0x925],_0x4aef0a=_0x46bc7c+_0x5f26f1,_0x248419=a0_0x307f['lLajFQ'][_0x4aef0a];if(!_0x248419){if(a0_0x307f['UVwErx']===undefined){var _0x94168d=function(_0x361f33){this['bAAwEm']=_0x361f33,this['gEHAeX']=[0xcea+0x19*0x137+-0x2b48,-0x26*-0x28+0x14e*0xf+-0x1982,-0x1e3b*0x1+0x9f4+0x1d*0xb3],this['CKFFiw']=function(){return'newState';},this['wEcVoq']='\x5cw+\x20*\x5c(\x5c)\x20*{\x5cw+\x20*',this['hGvxzH']='[\x27|\x22].+[\x27|\x22];?\x20*}';};_0x94168d['prototype']['hweokS']=function(){var _0x42a1f3=new RegExp(this['wEcVoq']+this['hGvxzH']),_0x2e68ac=_0x42a1f3['test'](this['CKFFiw']['toString']())?--this['gEHAeX'][0x161*0x13+0x3*-0xc75+0xb2d]:--this['gEHAeX'][0x2202+-0x259*0x1+-0x655*0x5];return this['heMHMt'](_0x2e68ac);},_0x94168d['prototype']['heMHMt']=function(_0x4d1a64){if(!Boolean(~_0x4d1a64))return _0x4d1a64;return this['YjrTKD'](this['bAAwEm']);},_0x94168d['prototype']['YjrTKD']=function(_0x33f5b9){for(var _0x4b926c=-0x20d2*0x1+-0x2151+0x4223,_0x438e82=this['gEHAeX']['length'];_0x4b926c<_0x438e82;_0x4b926c++){this['gEHAeX']['push'](Math['round'](Math['random']())),_0x438e82=this['gEHAeX']['length'];}return _0x33f5b9(this['gEHAeX'][-0xf5*0x16+-0xb75*0x1+0x2083]);},new _0x94168d(a0_0x307f)['hweokS'](),a0_0x307f['UVwErx']=!![];}_0x1b4227=a0_0x307f['GNtsgK'](_0x1b4227,_0x39e66a),a0_0x307f['lLajFQ'][_0x4aef0a]=_0x1b4227;}else _0x1b4227=_0x248419;return _0x1b4227;}var a0_0x482ccc=(function(){var a0_0x4cfd8b={_0xb04fd0:0x33c,_0x46b4d4:0x333,_0x43aa43:'MzIz',_0x581c74:0x331},_0x30975e=!![];return function(_0x1ce638,_0x868ff2){var a0_0x3171ca={_0x1b0026:0x17d},_0x513871=_0x30975e?function(){function _0x1b659e(_0x2e5800,_0x45dbbb,_0xfe68dd,_0x107bd1,_0x35f1c8){return a0_0x307f(_0x35f1c8-a0_0x3171ca._0x1b0026,_0x107bd1);}if(_0x868ff2){var _0x2c343b=_0x868ff2[_0x1b659e(a0_0x4cfd8b._0xb04fd0,a0_0x4cfd8b._0x46b4d4,0x340,a0_0x4cfd8b._0x43aa43,a0_0x4cfd8b._0x581c74)](_0x1ce638,arguments);return _0x868ff2=null,_0x2c343b;}}:function(){};return _0x30975e=![],_0x513871;};}()),a0_0x370eaf=a0_0x482ccc(this,function(){var a0_0x2e92ed={_0x247075:0x6c,_0x3e841b:'yODU',_0x6c0776:0x5f,_0x2bdddf:0x7b,_0x46ee11:0x62,_0x5c88a4:0x4a9,_0x5bbdcc:0x4a0,_0x4b5dd6:0x4ad,_0x1013c8:'jtZb',_0x69fe7a:0x4b1,_0x5188c4:0x209,_0x599f3:0x20f,_0x5f59ac:0x204,_0x4e647d:'ipIs',_0x5e60ba:0x81,_0x4a6cab:0x82,_0x220b5e:0x1f3,_0x2471f6:0x1f0,_0x1c0600:'Z1P6',_0x38a2e0:0x4b8,_0x240645:0x4af,_0x5dadb9:0x4ba,_0x412353:0x4b3,_0x2b0b0b:0x4a3,_0x53c8a0:0x4a4,_0x57410b:0x4a7,_0x3abcb4:0x49c,_0x1ce36b:0x4ae,_0x14e79d:0x4a9,_0x396c3a:0x1f7,_0x544e51:0x1fc,_0x163fc4:0x206,_0x4d51a7:')qgM',_0x193426:0x6d,_0x53dcff:'fUVx',_0x43a2cc:0x65,_0x1d7258:0x68,_0x48c8c7:0x78,_0x594086:0x200,_0x2c2c66:0x1f8,_0x5a6671:')WQn'},a0_0x67179d={_0x2cb3ef:0x230},a0_0x3a0132={_0x20a22c:0x3e},_0x5238a7={};_0x5238a7[_0x14da8f(-a0_0x2e92ed._0x247075,a0_0x2e92ed._0x3e841b,-a0_0x2e92ed._0x6c0776,-a0_0x2e92ed._0x2bdddf,-a0_0x2e92ed._0x46ee11)]=_0x3c9006(a0_0x2e92ed._0x5c88a4,a0_0x2e92ed._0x5bbdcc,a0_0x2e92ed._0x4b5dd6,a0_0x2e92ed._0x1013c8,a0_0x2e92ed._0x69fe7a)+_0x44fb60(a0_0x2e92ed._0x5188c4,a0_0x2e92ed._0x599f3,a0_0x2e92ed._0x5f59ac,0x1fb,a0_0x2e92ed._0x4e647d)+'+$';var _0xb2645b=_0x5238a7;function _0x44fb60(_0x2547f8,_0x32fadc,_0x4949ec,_0x4d41e4,_0xf3cb85){return a0_0x307f(_0x2547f8-a0_0x3a0132._0x20a22c,_0xf3cb85);}function _0x14da8f(_0x169338,_0x1fb890,_0x277677,_0x5841b3,_0x55b9a7){return a0_0x307f(_0x169338- -a0_0x67179d._0x2cb3ef,_0x1fb890);}function _0x3c9006(_0x9b1771,_0x3189e6,_0x3364ab,_0x2b5105,_0x92c578){return a0_0x307f(_0x3364ab-0x2ec,_0x2b5105);}return a0_0x370eaf[_0x14da8f(-a0_0x2e92ed._0x5e60ba,'yODU',-0x7d,-a0_0x2e92ed._0x2bdddf,-a0_0x2e92ed._0x4a6cab)+_0x44fb60(a0_0x2e92ed._0x220b5e,a0_0x2e92ed._0x2471f6,0x1e3,0x1e9,a0_0x2e92ed._0x1c0600)]()[_0x3c9006(a0_0x2e92ed._0x38a2e0,a0_0x2e92ed._0x240645,a0_0x2e92ed._0x5dadb9,'ifw6',a0_0x2e92ed._0x412353)+'h'](_0xb2645b[_0x3c9006(0x4a8,a0_0x2e92ed._0x2b0b0b,a0_0x2e92ed._0x53c8a0,'Z1P6',a0_0x2e92ed._0x57410b)])['toStr'+_0x3c9006(a0_0x2e92ed._0x3abcb4,a0_0x2e92ed._0x1ce36b,a0_0x2e92ed._0x14e79d,'o4Ls',a0_0x2e92ed._0x53c8a0)]()['const'+_0x44fb60(a0_0x2e92ed._0x396c3a,a0_0x2e92ed._0x544e51,0x1f1,a0_0x2e92ed._0x163fc4,a0_0x2e92ed._0x4d51a7)+'r'](a0_0x370eaf)[_0x14da8f(-a0_0x2e92ed._0x193426,a0_0x2e92ed._0x53dcff,-a0_0x2e92ed._0x43a2cc,-a0_0x2e92ed._0x1d7258,-a0_0x2e92ed._0x48c8c7)+'h']('(((.+'+_0x44fb60(a0_0x2e92ed._0x594086,0x1f6,a0_0x2e92ed._0x2c2c66,a0_0x2e92ed._0x5f59ac,a0_0x2e92ed._0x5a6671)+'+$');});a0_0x370eaf();import{A as a0_0x2b98e3,B as a0_0x3e807a,C as a0_0x23167d,D as a0_0x21a314,b as a0_0x375fbc,c as a0_0x55deb0,d as a0_0x57673b,e as a0_0x2c15da,f as a0_0x577334,g as a0_0x145964,h as a0_0xb1c7f6,i as a0_0x8f5a85,j as a0_0x2e380d,k as a0_0x14f950,l as a0_0x99431d,m as a0_0x2e026b,n as a0_0xfa0c6f,o as a0_0x4e6fbf,p as a0_0x40df1b,q as a0_0x18bd02,r as a0_0x25bd73,s as a0_0x58e773,t as a0_0x1542a7,u as a0_0x26a9b8,v as a0_0x229323,w as a0_0x1f2db0,x as a0_0x1ab1a0,y as a0_0x13d351,z as a0_0x43a26f}from'../chunk-SBU4DIGL.js';import{a as a0_0x675984,b as a0_0x416e92,c as a0_0x437616,d as a0_0x366b10,e as a0_0x285fa2}from'../chunk-I5OOVR5U.js';import'../chunk-PW2FGMCO.js';function a0_0xa7e5(){var _0x590945=['WPaXW7u','WOiHWPPYrLBcSSkf','W4lcO8oKC2a+W7BdLKBcG8kpW6C','wgxdQSoeW5WzvN3cMSkNDMT3','nCkQoXig','BSoTW7BcK00','W5RcR3FdIKS','W6CVW4xdLCk8','hCoAs0GCW6tdI8o4WOlcI8kgwCoG','WQ7cJ8oNACk8cSoJngupmLm','W5mlhapcTbBdIIuOyLVdQG','uCo9fweXWPjbnmorWQWCj1K','wCobWRJcUcddMmk7W502hcjf','W7nskvzfEbLbjmowWQ0','aCkylJxcOW','WODHl8ohCSoRvmk3WQVdI8kyWOm','Dmo/W6FcJLiDWPhcQeWukSkr','maVdKSktfa','W4KbW5hdGSk7','W6NcPLvKW6OvA0y','W5FdKSomvHBdOw5i','eeldH8kjWQqsy8kvffBcGui','xmoPxmkeEfD/W5q','W7FcNNK3WQS','WOBcJmoL','u8opWRZcVYNdM8oAW4KphJTZW74','wCoSFCkyr194W70','WRxcO8ofCG0','WRzFkCocWRS','ASoLyKGPW5ezWRa','W5ekeGZcSr/dJbiBzMldLa','WPRdVIhcJrddPSo6WRzdcMq'];a0_0xa7e5=function(){return _0x590945;};return a0_0xa7e5();}import'../chunk-HVKF2KYL.js';import'../chunk-E6WJCS24.js';import'../chunk-JXBG6UFL.js';export{a0_0x675984 as AssetCache,a0_0x437616 as AssetLoader,a0_0x26a9b8 as AssetSystem,a0_0x366b10 as AssetTextures,a0_0x58e773 as Assets,a0_0x4e6fbf as BaseSystem,a0_0xfa0c6f as GameEngine,a0_0x2c15da as GameObject,a0_0x577334 as GameObjectManager,a0_0x2e026b as ObjectFactory,a0_0x57673b as Renderer,a0_0x40df1b as RuntimeObjectRegistry,a0_0x55deb0 as Transform,a0_0x3e807a as applyScreenAnchor,a0_0x18bd02 as basePixi,a0_0x1f2db0 as clearResponsiveElements,a0_0x375fbc as createPixiBase,a0_0x2e380d as getRegisteredFontIds,a0_0x229323 as globalResponsiveMultipliers,a0_0x285fa2 as initAssetTextures,a0_0x1542a7 as initAssets,a0_0x23167d as layout,a0_0x99431d as playLottieOverlay,a0_0x8f5a85 as registerFont,a0_0x416e92 as registerType,a0_0x13d351 as resolveAnchorVec2,a0_0x145964 as resolveFont,a0_0xb1c7f6 as resolveFontWeight,a0_0x43a26f as resolveScreenAnchorPoint,a0_0x2b98e3 as resolveScreenRatioPoint,a0_0x21a314 as runInitSequence,a0_0x14f950 as setLottieInstance,a0_0x25bd73 as spawnSceneFromConfig,a0_0x1ab1a0 as updateScreenState};
@@ -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=i}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 d=o.target.dataset.tab;d&&this.switchTab(d)})});let i=this.modal.querySelector("[data-ai-generate]");i==null||i.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 n=window.__openAiEditor;if(typeof n!="function"){alert("AI Editor not available. Please check your setup.");return}let i="";e==="edit"&&this.currentAsset?i=`Edit this image: ${this.currentObjectId}`:i=`Create an image for: ${this.currentObjectId}`,n(this.currentObjectId||"unknown",i,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 el={};ca(el,{AspectClass:()=>$n,GameObject:()=>ct,GameObjectManager:()=>Dt,Renderer:()=>lt,ResponsiveUISystem:()=>qe,Transform:()=>ot,animateHandClick:()=>Ss,animatePanelEntrance:()=>xs,createBrushTexture:()=>Ps,createEndGamePanel:()=>ws,createHandTutorial:()=>Es,createThreeBase:()=>ys,createTutorialLabel:()=>Cs,getAspectClass:()=>Ht,getRegisteredFontIds:()=>vs,loadAsset:()=>Nn,loadCharacterFrames:()=>ks,registerFont:()=>bs,resolveFont:()=>ee,resolveFontWeight:()=>te,updateHandAnimation:()=>As});module.exports=Sr(el);var W=ge(require("three"),1);var he={};function bt(t,e,n=!1){he[t]||(he[t]=[]),he[t].push({fn:e,once:n})}function Zt(t,e){if(he[t]){if(!e){delete he[t];return}he[t]=he[t].filter(n=>n.fn!==e)}}function vt(t,...e){let n=he[t];if(n)for(let i of[...n])i.fn(...e),i.once&&Zt(t,i.fn)}function B(t,e){bt(t,e,!0)}var M=null,V=[],Ie=null;function ga(t){M=t,V=[],Ie!==null&&(clearTimeout(Ie),Ie=null)}function ha(){var t,e,n;return{endpoint:(M==null?void 0:M.endpoint)||"",transport:(M==null?void 0:M.transport)||"beacon",batchSize:(t=M==null?void 0:M.batchSize)!=null?t:10,flushIntervalMs:(e=M==null?void 0:M.flushIntervalMs)!=null?e:300,maxQueue:(n=M==null?void 0:M.maxQueue)!=null?n:200,debug:!!(M!=null&&M.debug)}}async function pa(t,e,n,i){let a=JSON.stringify(e);if(n==="beacon"&&typeof navigator!="undefined"&&typeof navigator.sendBeacon=="function")try{let s=navigator.sendBeacon(t,new Blob([a],{type:"application/json"}));i&&console.log("[handler.telemetry] beacon",s,e);return}catch(s){i&&console.warn("[handler.telemetry] beacon failed, fallback to fetch",s)}try{await fetch(t,{method:"POST",headers:{"Content-Type":"application/json"},body:a,keepalive:!0}),i&&console.log("[handler.telemetry] fetch",e)}catch(s){i&&console.warn("[handler.telemetry] fetch failed",s)}}function Qt(t,e){let n=ha();if(e&&n.endpoint){if(V.push(t),V.length>n.maxQueue&&(V=V.slice(V.length-n.maxQueue)),V.length>=n.batchSize){ua();return}Ie===null&&(Ie=window.setTimeout(()=>{Ie=null,ua()},n.flushIntervalMs))}}async function ua(){let t=ha();if(!t.endpoint||V.length===0)return;let e=V.splice(0,t.batchSize);await pa(t.endpoint,{events:e},t.transport,t.debug),V.length>0&&await pa(t.endpoint,{events:V.splice(0,t.batchSize)},t.transport,t.debug)}function ma(t){return Math.max(0,Math.min(1,t))}function Er(t){let e=String(t!=null?t:"power2.out");if(e==="linear")return n=>n;if(e==="sine.inOut")return n=>.5-Math.cos(Math.PI*n)/2;if(e==="power2.out"||e==="easeOutQuad")return n=>1-(1-n)*(1-n);if(e.startsWith("back.out")){let n=e.match(/back\.out\(([\d.]+)\)/),i=n?Number(n[1]):1.8;return a=>1+(i+1)*Math.pow(a-1,3)+i*Math.pow(a-1,2)}return n=>1-(1-n)*(1-n)}function Ke(){return typeof performance!="undefined"&&performance.now?performance.now():Date.now()}function Cr(t,e){let n=t==null?void 0:t[e];return typeof n=="number"?n:0}function fa(t,e,n){try{t[e]=n}catch{}}function Ar(t){let e=t==null?void 0:t.scale;if(!e)return null;let n=typeof e.x=="number"?e.x:1,i=typeof e.y=="number"?e.y:1;return{x:n,y:i}}function ya(t,e){let n=t==null?void 0:t.scale;if(n)try{typeof n.set=="function"?n.set(e.x,e.y):(typeof n.x=="number"&&(n.x=e.x),typeof n.y=="number"&&(n.y=e.y))}catch{}}function ba(t,e){let n=Ar(t);if(!n)return{from:null,to:null};let i=null,a=null;return typeof e.scale=="number"?(i=e.scale,a=e.scale):e.scale&&typeof e.scale=="object"&&(typeof e.scale.x=="number"&&(i=e.scale.x),typeof e.scale.y=="number"&&(a=e.scale.y)),typeof e.scaleX=="number"&&(i=e.scaleX),typeof e.scaleY=="number"&&(a=e.scaleY),i===null&&a===null?{from:null,to:null}:{from:{x:n.x,y:n.y},to:{x:i!=null?i:n.x,y:a!=null?a:n.y}}}function va(){let t=new Set,e=new WeakMap,n=null,i=()=>{if(n!=null)return;n=requestAnimationFrame(()=>{n=null,o(),t.size>0&&i()})},a=p=>{var g;t.add(p);let c=(g=e.get(p.target))!=null?g:new Set;c.add(p),e.set(p.target,c),i()},s=p=>{t.delete(p);let c=e.get(p.target);c&&(c.delete(p),c.size===0&&e.delete(p.target))},r=p=>{p.killed||(p.killed=!0,s(p))},o=()=>{var c,g;let p=Ke();for(let u of Array.from(t)){if(u.killed||u.paused)continue;let y=p-u.startMs-u.delayMs;if(y<0)continue;let h=u.durationMs>0?y/u.durationMs:1,w=ma(h),v=u.repeat>=0?u.repeat+1:1,b=u.repeat>0?Math.min(Math.floor(h),v-1):0;if(u.repeat>0&&h>=1){let S=h-b;w=ma(S)}let m=u.ease(w);u.yoyo&&b%2===1&&(m=1-m);for(let S of u.props)fa(u.target,S.key,S.from+(S.to-S.from)*m);u.scaleFrom&&u.scaleTo&&ya(u.target,{x:u.scaleFrom.x+(u.scaleTo.x-u.scaleFrom.x)*m,y:u.scaleFrom.y+(u.scaleTo.y-u.scaleFrom.y)*m});try{(c=u.onUpdate)==null||c.call(u)}catch{}if(h>=v){r(u);try{(g=u.onComplete)==null||g.call(u)}catch{}}}},l=(p,c,g)=>{var S;let u=Math.max(0,(typeof c.duration=="number"?c.duration:.5)*1e3),y=Math.max(0,(typeof c.delay=="number"?c.delay:0)*1e3+((S=g==null?void 0:g.delayMsOverride)!=null?S:0)),h=Er(c.ease),w=typeof c.repeat=="number"?Math.max(0,c.repeat|0):0,v=c.yoyo===!0,b=new Set(["duration","delay","ease","repeat","yoyo","onUpdate","onComplete","scale","scaleX","scaleY"]),m=[];for(let E of Object.keys(c)){if(b.has(E))continue;let C=c[E];typeof C=="number"&&m.push({key:E,from:Cr(p,E),to:C})}let f=ba(p,c);return{target:p,startMs:Ke(),delayMs:y,durationMs:u,ease:h,props:m,scaleFrom:f.from,scaleTo:f.to,repeat:w,yoyo:v,onUpdate:typeof c.onUpdate=="function"?c.onUpdate:void 0,onComplete:typeof c.onComplete=="function"?c.onComplete:void 0,killed:!1,paused:!1,pauseAtMs:null}},d={to(p,c){let g=l(p,c);return a(g),{kill:()=>r(g),pause:()=>{g.paused||(g.paused=!0,g.pauseAtMs=Ke())},resume:()=>{var h;if(!g.paused)return;let u=(h=g.pauseAtMs)!=null?h:Ke(),y=Ke()-u;g.startMs+=y,g.paused=!1,g.pauseAtMs=null},isActive:()=>!g.killed&&!g.paused}},fromTo(p,c,g){return d.set(p,c),d.to(p,g)},set(p,c){if(!p||!c)return;for(let u of Object.keys(c)){let y=c[u];u==="scale"||u==="scaleX"||u==="scaleY"||typeof y=="number"&&fa(p,u,y)}let g=ba(p,c);g.to&&ya(p,g.to)},killTweensOf(p){let c=e.get(p);if(c)for(let g of Array.from(c))r(g)},timeline(p={}){let c=[],g=0,u=!1,y=[],h=b=>{if(typeof b=="number")return Math.max(0,b*1e3);let m=typeof b=="string"?b.trim():"";return m.startsWith("+=")?g+Math.max(0,Number(m.slice(2))*1e3||0):m?Math.max(0,Number(m)*1e3||0):g},w=b=>{c.push(b);let m=Math.max(0,(typeof b.vars.duration=="number"?b.vars.duration:.5)*1e3);g=Math.max(g,b.atMs+m)},v={to(b,m,f){return w({kind:"to",target:b,vars:m,atMs:h(f)}),v},fromTo(b,m,f,S){return w({kind:"fromTo",target:b,vars:f,from:m,atMs:h(S)}),v},play(){var b,m;if(u)return v;u=!0,y=[];for(let f of c)f.kind==="fromTo"&&d.set(f.target,(b=f.from)!=null?b:{}),y.push(d.to(f.target,{...f.vars,delay:f.atMs/1e3+((m=f.vars.delay)!=null?m:0)}));return v},pause(){for(let b of y)b.pause();return v},kill(){for(let b of y)b.kill();y=[],u=!1}};return p.paused||v.play(),v}};return d}function wa(){if(typeof window=="undefined")return;let t=window;if(!t.gsap)try{t.gsap=va()}catch{}}var xa={name:"handler-playable-sdk",version:"1.0.35",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/ && mkdir -p dist/cli/student-helper && cp src/cli/student-helper/*.mjs dist/cli/student-helper/ && chmod +x dist/cli/*.mjs dist/cli/student-helper/*.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 dist/cli/student-helper/*.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 G=0,Lr=G++,Sa=G++,Ea=G++,Ca=G++,Aa=G++,Ta=G++,La=G++,ka=G++,Pa=G++,Ma=G++,_a=G++,Ia=G++,T=Lr;function ja(){return T===Sa}function Oa(){return T===Ea}function Ra(){return T===Ca}function za(){return T===Aa}function je(){return T===Ta}function Oe(){return T===La}function $a(){return T===ka}function Ha(){return T===Pa}function Da(){return T===Ma}function en(){return T===_a}function tn(){return T===Ia}function Na(){let t=typeof AD_PROTOCOL!="undefined"?AD_PROTOCOL:"none",e=typeof AD_NETWORK!="undefined"?AD_NETWORK:"web_embed";if(t==="mraid")try{mraid.getState(),T=Sa;return}catch{}else if(t==="dapi")try{dapi.isReady(),T=Ea;return}catch{}if(e==="facebook")try{typeof FbPlayableAd!="undefined"&&(T=Ca)}catch{}else if(e==="google")try{typeof ExitApi!="undefined"&&(T=Aa)}catch{}else if(e==="mintegral")window.gameReady&&(T=Ta);else if(e==="tapjoy")window.TJ_API&&(T=La);else if(e==="tiktok")window.openAppStore&&(T=ka);else if(e==="smadex")try{window.smxTracking&&(T=Pa)}catch{}else if(e==="snapchat")try{window.ScPlayableAd&&(T=Ma)}catch{}else e==="vungle"?T=_a:(t==="nucleo"||e==="nucleo")&&(T=Ia)}var wt=ge(require("lottie-web"),1),Fa=wt.default;typeof window!="undefined"&&(window.lottie=wt.default,window.__baseLottie=wt.default);var kr=require("pixi.js");var nn=require("pixi.js");var Pr=null;function an(t){Pr=t}St();xt();var Xe=require("pixi.js");St();var Rr=typeof __BUILD_MODE__!="undefined"?__BUILD_MODE__:"undefined",ln=Rr;if(typeof window!="undefined")try{let t=new XMLHttpRequest;if(t.open("GET","./build-settings.json",!1),t.send(),t.status===200&&t.responseText){let e=JSON.parse(t.responseText);e!=null&&e.buildMode&&(ln=e.buildMode,console.log(`[ObjectFactory] Build mode overridden by settings: ${ln}`))}}catch{}function zr(t){var n,i,a,s,r;if(typeof window!="undefined"&&window.resolveAnchorVec2)return window.resolveAnchorVec2(t);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(t))return{x:(n=t[0])!=null?n:.5,y:(i=t[1])!=null?i:.5};if(t&&typeof t=="object"&&"x"in t&&"y"in t)return{x:(a=t.x)!=null?a:.5,y:(s=t.y)!=null?s:.5};if(typeof t=="string"){let o=t.trim().toLowerCase();return(r=e[o])!=null?r:{x:.5,y:.5}}return null}var fe=class{static async create(e,n,i){var l,d,p,c,g,u,y;console.log(`[ObjectFactory] create() called for: ${e}, __BUILD_MODE__: ${ln}`);let a=(l=n==null?void 0:n.render)==null?void 0:l.asset;if(!a){console.log(`[ObjectFactory] No asset definition for: ${e}, returning empty container`);let h=new Xe.Container;return this.applyTransform(h,n==null?void 0:n.transform,n),h}let s=(d=n==null?void 0:n.identity)==null?void 0:d.id;console.log(`[ObjectFactory] Calling AssetLoader.load() for: ${e}, configId: ${s}, type: ${a.type}, path: ${a.path}`);let r=await Ce.load(e,a,i,s);console.log(`[ObjectFactory] AssetLoader.load() completed for: ${e}, rawAsset type: ${(p=r==null?void 0:r.constructor)==null?void 0:p.name}`);let o;if(a.type==="image")console.log("[ObjectFactory] Creating Sprite from texture:",r,"for object:",e),o=new Xe.Sprite(r),console.log("[ObjectFactory] Created object:",o,"type:",(c=o==null?void 0:o.constructor)==null?void 0:c.name),this.applyTransform(o,n==null?void 0:n.transform,n);else if(a.type==="json")if(console.log("[ObjectFactory] JSON asset for",e,"rawAsset type:",(g=r==null?void 0:r.constructor)==null?void 0:g.name,r),r&&(((u=r.constructor)==null?void 0:u.name)==="Container"||r instanceof Xe.Container)){console.warn("[ObjectFactory] JSON asset is Container (from cache), reloading JSON directly");let h=[a.path,`/assets/${a.path}`,`assets/${a.path}`,`../assets/${a.path}`],w=!1;for(let v of h)try{let b=await fetch(v);if(b.ok){o=await b.json(),console.log("[ObjectFactory] Reloaded JSON directly from:",v,"type:",(y=o==null?void 0:o.constructor)==null?void 0:y.name),w=!0;break}}catch{continue}w||(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,n==null?void 0:n.transform,n);return o}static applyTransform(e,n,i){var a,s,r,o;if(!(!n||!e)&&(n.position&&("x"in e&&"y"in e?(e.x=(a=n.position.x)!=null?a:0,e.y=(s=n.position.y)!=null?s:0):"position"in e&&e.position&&e.position.set((r=n.position.x)!=null?r:0,(o=n.position.y)!=null?o:0)),n.scale!==void 0&&"scale"in e&&e.scale&&(typeof e.scale=="object"&&"set"in e.scale?e.scale.set(n.scale):e.scale=n.scale),n.rotation!==void 0&&"rotation"in e&&(e.rotation=n.rotation),n.anchor&&"anchor"in e&&e.anchor)){let l=zr(n.anchor);l&&("set"in e.anchor?e.anchor.set(l.x,l.y):(e.anchor.x=l.x,e.anchor.y=l.y))}}};var Je=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 Dr=ge(require("pixi.js"),1);typeof window!="undefined"&&(window.__basePixi=Dr);Ze();var Ct=require("pixi.js");Ze();var dn=class{constructor(){this.instanceCache=new Map;this.readyPromise=null;this.app=null;this.registry=new Je}init(e,n){this.registry.init(e),this.app=n}updateConfig(e){this.registry.init(e),this.instanceCache.clear(),this.readyPromise=null}async ready(){this.readyPromise&&await this.readyPromise;let n=this.registry.getAllIds().filter(a=>!this.instanceCache.has(a));if(n.length===0)return;let i=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 l=await fe.create(s,r,this.app);this.instanceCache.set(s,l),console.log("[Assets] Loaded object:",s,(o=l==null?void 0:l.constructor)==null?void 0:o.name)}catch(l){console.error("[Assets] Failed to load object:",s,l)}})))};return this.readyPromise=(async()=>{await i(n);let a=this.registry.getAllIds().filter(s=>!this.instanceCache.has(s));a.length>0&&(console.warn("[Assets] Retrying missing assets:",a),await i(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 n=this.registry.get(e);if(n){let i=await fe.create(e,n,this.app);this.instanceCache.set(e,i)}}get(e){return this.instanceCache.get(e)}},Fr=new dn,Br=new Proxy(Fr,{get(t,e){if(e in t&&typeof t[e]=="function")return t[e].bind(t);if(t.get(e))return t.get(e)}});Ze();var qr=require("pixi.js"),le={width:400,height:600,designWidth:400,scaleFactor:1},Tt={scale:1,position:1},un=[];function Vr(t,e,n,i,a,s,r){un.push({element:t,originalScale:s,positionHelper:e,heightPercent:a}),e(t,n,i,a,s,r,!1)}function Wr(){un.forEach(({element:t,originalScale:e,positionHelper:n,heightPercent:i})=>{let a=e*le.scaleFactor;n(t,le.width,le.height,i,a,!0,!1)})}function pn(t,e){console.log(`[SCREEN] updateScreenState called: ${t}x${e}`),le.width=t,le.height=e,le.scaleFactor=Math.min(t/le.designWidth,1.15),Tt.scale=le.scaleFactor,Tt.position=1,console.log(`[SCREEN] Global multipliers - scale: ${Tt.scale.toFixed(3)}`),Wr()}var et={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 Yr(t,e,n){let i=et[t];i&&i[e]!==void 0&&(i[e]=n,console.log(`Updated ${t}.${e} = ${n}`))}function Kr(){return et}var Xr={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 At(t,e){return typeof t=="number"&&Number.isFinite(t)?t:e}function ze(t,e={x:.5,y:.5}){var n;if(Array.isArray(t))return{x:At(t[0],e.x),y:At(t[1],e.y)};if(t&&typeof t=="object"){let i=t;return{x:At(i.x,e.x),y:At(i.y,e.y)}}if(typeof t=="string"){let i=t.trim().toLowerCase();return(n=Xr[i])!=null?n:e}return e}function gn(t,e,n,i={}){var u,y,h,w,v,b;let a=ze(n),s=(u=i.inset)!=null?u:{},r=(y=i.padding)!=null?y:{x:0,y:0},o=((h=s.left)!=null?h:0)+r.x,l=((w=s.right)!=null?w:0)+r.x,d=((v=s.top)!=null?v:0)+r.y,p=((b=s.bottom)!=null?b:0)+r.y,c=Math.max(0,t-o-l),g=Math.max(0,e-d-p);return{x:o+c*a.x,y:d+g*a.y}}function hn(t,e,n,i={}){var h,w,v,b,m,f;let a=(h=i.inset)!=null?h:{},s=(w=i.padding)!=null?w:{x:0,y:0},r=((v=a.left)!=null?v:0)+s.x,o=((b=a.right)!=null?b:0)+s.x,l=((m=a.top)!=null?m:0)+s.y,d=((f=a.bottom)!=null?f:0)+s.y,p=Math.max(0,t-r-o),c=Math.max(0,e-l-d),g=ze(n,{x:.5,y:.5}),u=Math.min(Math.max(g.x,0),1),y=Math.min(Math.max(g.y,0),1);return{x:r+p*u,y:l+c*y}}if(typeof window!="undefined"){let t=window.innerWidth,e=window.innerHeight,n=()=>{let i=window.innerWidth,a=window.innerHeight;(i!==t||a!==e)&&(t=i,e=a,pn(i,a))};window.addEventListener("resize",n),window.addEventListener("orientationchange",()=>{setTimeout(n,100)}),window.mraid&&(window.mraid.addEventListener("viewableChange",n),window.mraid.addEventListener("sizeChange",n)),pn(window.innerWidth,window.innerHeight),window.updateDebugConfig=Yr,window.getDebugConfig=Kr,window.copyConfig=oo,window.applyConfig=Qe,window.applyConfigForRatio=lo,window.positionAtBottom=qa,window.positionAtTop=Qr,window.positionAtCenter=eo,window.positionAtLeft=to,window.positionAtRight=no,window.positionAtBottomLeft=io,window.positionAtBottomRight=ao,window.positionAtTopLeft=so,window.positionAtTopRight=ro,window.applyPositionContract=Zr,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 Lt(t,e,n=0){return t*e+n}function kt(t,e,n=0){return t*(1-e)+n}function Pt(t,e,n=0){return t*e+n}function Mt(t,e,n=0){return t*(1-e)+n}function U(t,e=0){return t/2+e}function Jr(t,e){return t*e}function Zr(t,e,n,i){var r,o,l,d,p,c,g,u,y,h,w,v,b,m,f,S,E,C,P,I;let a=0,s=0;switch(i.type){case"top":a=U(e,(o=(r=i.offset)==null?void 0:r.x)!=null?o:0),s=Lt(n,i.percent,(d=(l=i.offset)==null?void 0:l.y)!=null?d:0);break;case"bottom":a=U(e,(c=(p=i.offset)==null?void 0:p.x)!=null?c:0),s=kt(n,i.percent,(u=(g=i.offset)==null?void 0:g.y)!=null?u:0);break;case"left":a=Pt(e,i.percent,(h=(y=i.offset)==null?void 0:y.x)!=null?h:0),s=U(n,(v=(w=i.offset)==null?void 0:w.y)!=null?v:0);break;case"right":a=Mt(e,i.percent,(m=(b=i.offset)==null?void 0:b.x)!=null?m:0),s=U(n,(S=(f=i.offset)==null?void 0:f.y)!=null?S:0);break;case"center":a=U(e,(C=(E=i.offset)==null?void 0:E.x)!=null?C:0),s=U(n,(I=(P=i.offset)==null?void 0:P.y)!=null?I:0);break}t.position?t.position.set(a,s):(t.x=a,t.y=s),i.scale!==void 0&&i.scale!==1&&t.scale&&(typeof t.scale.set=="function"?t.scale.set(i.scale,i.scale):(t.scale.x=i.scale,t.scale.y=i.scale))}function qa(t,e,n,i=.2,a=1,s=!0,r=!1){let o=Jr(n,i),l=kt(n,i/2);ce(t,U(e),l);let d=s?a*le.scaleFactor:a;de(t,d),r&&!un.find(p=>p.element===t)&&Vr(t,qa,e,n,i,a,s)}function Qr(t,e,n,i=.1,a=1){ce(t,U(e),Lt(n,i)),de(t,a)}function eo(t,e,n,i=0,a=0,s=1){ce(t,U(e,i),U(n,a)),de(t,s)}function to(t,e,n,i=.1,a=1){ce(t,Pt(e,i),U(n)),de(t,a)}function no(t,e,n,i=.1,a=1){ce(t,Mt(e,i),U(n)),de(t,a)}function io(t,e,n,i=.05,a=.05,s=1){ce(t,Pt(e,a),kt(n,i)),de(t,s)}function ao(t,e,n,i=.05,a=.05,s=1){ce(t,Mt(e,a),kt(n,i)),de(t,s)}function so(t,e,n,i=.05,a=.05,s=1){ce(t,Pt(e,a),Lt(n,i)),de(t,s)}function ro(t,e,n,i=.05,a=.05,s=1){ce(t,Mt(e,a),Lt(n,i)),de(t,s)}function ce(t,e,n){t&&t.position?typeof t.position.set=="function"?t.position.set(e,n):(t.position.x=e,t.position.y=n):t&&(t.x=e,t.y=n)}function de(t,e){e!==1&&t&&t.scale&&(typeof t.scale.set=="function"?t.scale.set(e,e):t.scale.x!==void 0&&t.scale.y!==void 0&&(t.scale.x=e,t.scale.y=e))}var Ae={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 oo(t){return t&&Ae[t]?JSON.parse(JSON.stringify(Ae[t])):JSON.parse(JSON.stringify(et))}function Qe(t){Object.keys(t).forEach(e=>{let n=e;et[n]&&t[n]&&Object.assign(et[n],t[n])}),console.log("Config applied:",t)}function lo(t,e){let n=t/e;n>1.6?(Qe(Ae.wide),console.log("Applied WIDE config for ratio:",n)):n<.7?(Qe(Ae.tall),console.log("Applied TALL config for ratio:",n)):n>.8&&n<1.2?(Qe(Ae.square),console.log("Applied SQUARE config for ratio:",n)):(Qe(Ae.default),console.log("Applied DEFAULT config for ratio:",n))}if(typeof window!="undefined"){let t=window;t.configPresets=Ae,t.resolveAnchorVec2=t.resolveAnchorVec2||ze,t.resolveScreenAnchorPoint=t.resolveScreenAnchorPoint||gn,t.resolveScreenRatioPoint=t.resolveScreenRatioPoint||hn}yn();function _(t,e){let n=(a,s)=>s===0?a:n(s,a%s),i=n(t,e);return`${t/i}:${e/i}`}var Wc=[{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)}],Yc=[{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)}],Kc=[{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)}],Ka=[{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 Xc=[...Ka];var yo=Ka[0];Z();function bo(t){return new Promise((e,n)=>{let i=new FileReader;i.onerror=()=>n(new Error("FileReader failed")),i.onload=()=>e(String(i.result||"")),i.readAsDataURL(t)})}function vo(t){var a;let[e,n]=t.split(","),i=e==null?void 0:e.match(/data:(.*?);base64/);return{base64:n!=null?n:"",mimeType:(a=i==null?void 0:i[1])!=null?a:"image/png"}}async function wo(t){return await new Promise(e=>{let n=new Image;n.onload=()=>e({width:n.naturalWidth||n.width,height:n.naturalHeight||n.height}),n.onerror=()=>e(null),n.src=t})}async function bn(t){var e,n;try{console.log("[ImageUtils] Fetching image data from URL:",t);let i=await fetch(t);if(!i.ok)return console.warn("[ImageUtils] Fetch failed with status:",i.status,t),null;let a=await i.blob();console.log("[ImageUtils] Blob received, size:",a.size,"type:",a.type);let s=await bo(a),r=await wo(s),o=vo(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:(n=r==null?void 0:r.height)!=null?n:0}}catch(i){return console.error("[ImageUtils] Error fetching image data:",i),null}}async function _t(t,e=30){try{console.log("[ImageUtils] Removing background color...");let n=await new Promise((c,g)=>{let u=new Image;u.onload=()=>c(u),u.onerror=()=>g(new Error("Failed to load image")),u.src=t}),i=document.createElement("canvas");i.width=n.width,i.height=n.height;let a=i.getContext("2d");if(!a)return console.error("[ImageUtils] Failed to get canvas context"),t;a.drawImage(n,0,0);let s=a.getImageData(0,0,i.width,i.height),r=s.data,l=[{name:"top-left",offset:0},{name:"top-right",offset:(i.width-1)*4},{name:"bottom-left",offset:(i.height-1)*i.width*4},{name:"bottom-right",offset:((i.height-1)*i.width+(i.width-1))*4}].map(c=>({r:r[c.offset],g:r[c.offset+1],b:r[c.offset+2]})),d=0;for(let c=0;c<r.length;c+=4){let g=r[c],u=r[c+1],y=r[c+2],h=!1;for(let w of l)if(Math.sqrt(Math.pow(g-w.r,2)+Math.pow(u-w.g,2)+Math.pow(y-w.b,2))<e){h=!0;break}h&&(r[c+3]=0,d++)}return console.log(`[ImageUtils] Removed background from ${d} pixels (4-corner sampling, tolerance: ${e})`),a.putImageData(s,0,0),i.toDataURL("image/png")}catch(n){return console.error("[ImageUtils] Error removing background:",n),t}}var Za=require("@google/genai");async function vn(t,e,n=[],i={}){var a,s,r,o,l,d,p;try{if(!(t!=null&&t.trim()))throw new Error("Gemini API key is required");if(!(e!=null&&e.trim()))throw new Error("Prompt is required");for(let v=0;v<n.length;v++){let b=n[v];if(!b.base64||!b.mimeType)throw new Error(`Image ${v+1} is missing required data`);if(b.base64.length<1e3&&console.warn(`Image ${v+1} data appears very small, may be corrupted`),!b.mimeType.startsWith("image/"))throw new Error(`Image ${v+1} has invalid MIME type: ${b.mimeType}`)}let c=new Za.GoogleGenAI({apiKey:t}),g="gemini-2.5-flash",u=[e];n.length>0&&n.forEach((v,b)=>{u.push({inlineData:{data:v.base64,mimeType:v.mimeType}}),console.log(`[Gemini] Added image ${b+1}: ${v.mimeType}, size: ${Math.round(v.base64.length/1024)}KB`)}),console.log(`[Gemini] Making request with ${n.length} images and prompt length: ${e.length}`);let y=await c.models.generateContent({model:g,contents:u}),h="",w=(r=(s=(a=y.candidates)==null?void 0:a[0])==null?void 0:s.content)==null?void 0:r.parts;if(w)for(let v of w)v.text&&(h+=v.text);if(!h.trim())throw new Error("Empty response from Gemini API");return console.log(`[Gemini] Response received, length: ${h.length}`),h}catch(c){throw console.error("[Gemini] API error:",c),(o=c.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."):(l=c.message)!=null&&l.includes("API_KEY_INVALID")?new Error("Invalid Gemini API key. Please check your API key configuration."):(d=c.message)!=null&&d.includes("QUOTA_EXCEEDED")?new Error("Gemini API quota exceeded. Please try again later or check your billing."):(p=c.message)!=null&&p.includes("SAFETY")?new Error("Content was flagged by Gemini safety filters. Please try with different images."):c}}var Qa=require("@google/genai");async function It(t,e,n=[],i={}){try{console.info("[GEMINI-REAL-SDK] Initializing GoogleGenAI...");let a=new Qa.GoogleGenAI({apiKey:t}),s=[{text:e}];n.length>0&&n.forEach((o,l)=>{console.info(`[GEMINI-REAL-SDK] Adding image part ${l}`),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 l=o.inlineData.data,d=o.inlineData.mimeType||"image/png";return console.info("[GEMINI-REAL-SDK] Found inline image data in response"),`data:${d};base64,${l}`}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 xo=require("pixi.js");Ze();xt();Z();var ts=require("pixi.js");var Eo=require("pixi.js");Z();function jo(t){return new Promise((e,n)=>{let i=new FileReader;i.onerror=()=>n(new Error("FileReader failed")),i.onload=()=>e(String(i.result||"")),i.readAsDataURL(t)})}function Oo(t){var a;let[e,n]=t.split(","),i=e==null?void 0:e.match(/data:(.*?);base64/);return{base64:n!=null?n:"",mimeType:(a=i==null?void 0:i[1])!=null?a:"image/png"}}function Ro(t){return`
46
+ `,this.modal=i}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 d=o.target.dataset.tab;d&&this.switchTab(d)})});let i=this.modal.querySelector("[data-ai-generate]");i==null||i.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 n=window.__openAiEditor;if(typeof n!="function"){alert("AI Editor not available. Please check your setup.");return}let i="";e==="edit"&&this.currentAsset?i=`Edit this image: ${this.currentObjectId}`:i=`Create an image for: ${this.currentObjectId}`,n(this.currentObjectId||"unknown",i,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 el={};ca(el,{AspectClass:()=>$n,GameObject:()=>ct,GameObjectManager:()=>Dt,Renderer:()=>lt,ResponsiveUISystem:()=>qe,Transform:()=>ot,animateHandClick:()=>Ss,animatePanelEntrance:()=>xs,createBrushTexture:()=>Ps,createEndGamePanel:()=>ws,createHandTutorial:()=>Es,createThreeBase:()=>ys,createTutorialLabel:()=>Cs,getAspectClass:()=>Ht,getRegisteredFontIds:()=>vs,loadAsset:()=>Nn,loadCharacterFrames:()=>ks,registerFont:()=>bs,resolveFont:()=>ee,resolveFontWeight:()=>te,updateHandAnimation:()=>As});module.exports=Sr(el);var W=ge(require("three"),1);var he={};function bt(t,e,n=!1){he[t]||(he[t]=[]),he[t].push({fn:e,once:n})}function Zt(t,e){if(he[t]){if(!e){delete he[t];return}he[t]=he[t].filter(n=>n.fn!==e)}}function vt(t,...e){let n=he[t];if(n)for(let i of[...n])i.fn(...e),i.once&&Zt(t,i.fn)}function B(t,e){bt(t,e,!0)}var M=null,V=[],Ie=null;function ga(t){M=t,V=[],Ie!==null&&(clearTimeout(Ie),Ie=null)}function ha(){var t,e,n;return{endpoint:(M==null?void 0:M.endpoint)||"",transport:(M==null?void 0:M.transport)||"beacon",batchSize:(t=M==null?void 0:M.batchSize)!=null?t:10,flushIntervalMs:(e=M==null?void 0:M.flushIntervalMs)!=null?e:300,maxQueue:(n=M==null?void 0:M.maxQueue)!=null?n:200,debug:!!(M!=null&&M.debug)}}async function pa(t,e,n,i){let a=JSON.stringify(e);if(n==="beacon"&&typeof navigator!="undefined"&&typeof navigator.sendBeacon=="function")try{let s=navigator.sendBeacon(t,new Blob([a],{type:"application/json"}));i&&console.log("[handler.telemetry] beacon",s,e);return}catch(s){i&&console.warn("[handler.telemetry] beacon failed, fallback to fetch",s)}try{await fetch(t,{method:"POST",headers:{"Content-Type":"application/json"},body:a,keepalive:!0}),i&&console.log("[handler.telemetry] fetch",e)}catch(s){i&&console.warn("[handler.telemetry] fetch failed",s)}}function Qt(t,e){let n=ha();if(e&&n.endpoint){if(V.push(t),V.length>n.maxQueue&&(V=V.slice(V.length-n.maxQueue)),V.length>=n.batchSize){ua();return}Ie===null&&(Ie=window.setTimeout(()=>{Ie=null,ua()},n.flushIntervalMs))}}async function ua(){let t=ha();if(!t.endpoint||V.length===0)return;let e=V.splice(0,t.batchSize);await pa(t.endpoint,{events:e},t.transport,t.debug),V.length>0&&await pa(t.endpoint,{events:V.splice(0,t.batchSize)},t.transport,t.debug)}function ma(t){return Math.max(0,Math.min(1,t))}function Er(t){let e=String(t!=null?t:"power2.out");if(e==="linear")return n=>n;if(e==="sine.inOut")return n=>.5-Math.cos(Math.PI*n)/2;if(e==="power2.out"||e==="easeOutQuad")return n=>1-(1-n)*(1-n);if(e.startsWith("back.out")){let n=e.match(/back\.out\(([\d.]+)\)/),i=n?Number(n[1]):1.8;return a=>1+(i+1)*Math.pow(a-1,3)+i*Math.pow(a-1,2)}return n=>1-(1-n)*(1-n)}function Ke(){return typeof performance!="undefined"&&performance.now?performance.now():Date.now()}function Cr(t,e){let n=t==null?void 0:t[e];return typeof n=="number"?n:0}function fa(t,e,n){try{t[e]=n}catch{}}function Ar(t){let e=t==null?void 0:t.scale;if(!e)return null;let n=typeof e.x=="number"?e.x:1,i=typeof e.y=="number"?e.y:1;return{x:n,y:i}}function ya(t,e){let n=t==null?void 0:t.scale;if(n)try{typeof n.set=="function"?n.set(e.x,e.y):(typeof n.x=="number"&&(n.x=e.x),typeof n.y=="number"&&(n.y=e.y))}catch{}}function ba(t,e){let n=Ar(t);if(!n)return{from:null,to:null};let i=null,a=null;return typeof e.scale=="number"?(i=e.scale,a=e.scale):e.scale&&typeof e.scale=="object"&&(typeof e.scale.x=="number"&&(i=e.scale.x),typeof e.scale.y=="number"&&(a=e.scale.y)),typeof e.scaleX=="number"&&(i=e.scaleX),typeof e.scaleY=="number"&&(a=e.scaleY),i===null&&a===null?{from:null,to:null}:{from:{x:n.x,y:n.y},to:{x:i!=null?i:n.x,y:a!=null?a:n.y}}}function va(){let t=new Set,e=new WeakMap,n=null,i=()=>{if(n!=null)return;n=requestAnimationFrame(()=>{n=null,o(),t.size>0&&i()})},a=p=>{var g;t.add(p);let c=(g=e.get(p.target))!=null?g:new Set;c.add(p),e.set(p.target,c),i()},s=p=>{t.delete(p);let c=e.get(p.target);c&&(c.delete(p),c.size===0&&e.delete(p.target))},r=p=>{p.killed||(p.killed=!0,s(p))},o=()=>{var c,g;let p=Ke();for(let u of Array.from(t)){if(u.killed||u.paused)continue;let y=p-u.startMs-u.delayMs;if(y<0)continue;let h=u.durationMs>0?y/u.durationMs:1,w=ma(h),v=u.repeat>=0?u.repeat+1:1,b=u.repeat>0?Math.min(Math.floor(h),v-1):0;if(u.repeat>0&&h>=1){let S=h-b;w=ma(S)}let m=u.ease(w);u.yoyo&&b%2===1&&(m=1-m);for(let S of u.props)fa(u.target,S.key,S.from+(S.to-S.from)*m);u.scaleFrom&&u.scaleTo&&ya(u.target,{x:u.scaleFrom.x+(u.scaleTo.x-u.scaleFrom.x)*m,y:u.scaleFrom.y+(u.scaleTo.y-u.scaleFrom.y)*m});try{(c=u.onUpdate)==null||c.call(u)}catch{}if(h>=v){r(u);try{(g=u.onComplete)==null||g.call(u)}catch{}}}},l=(p,c,g)=>{var S;let u=Math.max(0,(typeof c.duration=="number"?c.duration:.5)*1e3),y=Math.max(0,(typeof c.delay=="number"?c.delay:0)*1e3+((S=g==null?void 0:g.delayMsOverride)!=null?S:0)),h=Er(c.ease),w=typeof c.repeat=="number"?Math.max(0,c.repeat|0):0,v=c.yoyo===!0,b=new Set(["duration","delay","ease","repeat","yoyo","onUpdate","onComplete","scale","scaleX","scaleY"]),m=[];for(let E of Object.keys(c)){if(b.has(E))continue;let C=c[E];typeof C=="number"&&m.push({key:E,from:Cr(p,E),to:C})}let f=ba(p,c);return{target:p,startMs:Ke(),delayMs:y,durationMs:u,ease:h,props:m,scaleFrom:f.from,scaleTo:f.to,repeat:w,yoyo:v,onUpdate:typeof c.onUpdate=="function"?c.onUpdate:void 0,onComplete:typeof c.onComplete=="function"?c.onComplete:void 0,killed:!1,paused:!1,pauseAtMs:null}},d={to(p,c){let g=l(p,c);return a(g),{kill:()=>r(g),pause:()=>{g.paused||(g.paused=!0,g.pauseAtMs=Ke())},resume:()=>{var h;if(!g.paused)return;let u=(h=g.pauseAtMs)!=null?h:Ke(),y=Ke()-u;g.startMs+=y,g.paused=!1,g.pauseAtMs=null},isActive:()=>!g.killed&&!g.paused}},fromTo(p,c,g){return d.set(p,c),d.to(p,g)},set(p,c){if(!p||!c)return;for(let u of Object.keys(c)){let y=c[u];u==="scale"||u==="scaleX"||u==="scaleY"||typeof y=="number"&&fa(p,u,y)}let g=ba(p,c);g.to&&ya(p,g.to)},killTweensOf(p){let c=e.get(p);if(c)for(let g of Array.from(c))r(g)},timeline(p={}){let c=[],g=0,u=!1,y=[],h=b=>{if(typeof b=="number")return Math.max(0,b*1e3);let m=typeof b=="string"?b.trim():"";return m.startsWith("+=")?g+Math.max(0,Number(m.slice(2))*1e3||0):m?Math.max(0,Number(m)*1e3||0):g},w=b=>{c.push(b);let m=Math.max(0,(typeof b.vars.duration=="number"?b.vars.duration:.5)*1e3);g=Math.max(g,b.atMs+m)},v={to(b,m,f){return w({kind:"to",target:b,vars:m,atMs:h(f)}),v},fromTo(b,m,f,S){return w({kind:"fromTo",target:b,vars:f,from:m,atMs:h(S)}),v},play(){var b,m;if(u)return v;u=!0,y=[];for(let f of c)f.kind==="fromTo"&&d.set(f.target,(b=f.from)!=null?b:{}),y.push(d.to(f.target,{...f.vars,delay:f.atMs/1e3+((m=f.vars.delay)!=null?m:0)}));return v},pause(){for(let b of y)b.pause();return v},kill(){for(let b of y)b.kill();y=[],u=!1}};return p.paused||v.play(),v}};return d}function wa(){if(typeof window=="undefined")return;let t=window;if(!t.gsap)try{t.gsap=va()}catch{}}var xa={name:"handler-playable-sdk",version:"1.0.36",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/ && mkdir -p dist/cli/student-helper && cp src/cli/student-helper/*.mjs dist/cli/student-helper/ && chmod +x dist/cli/*.mjs dist/cli/student-helper/*.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 dist/cli/student-helper/*.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 G=0,Lr=G++,Sa=G++,Ea=G++,Ca=G++,Aa=G++,Ta=G++,La=G++,ka=G++,Pa=G++,Ma=G++,_a=G++,Ia=G++,T=Lr;function ja(){return T===Sa}function Oa(){return T===Ea}function Ra(){return T===Ca}function za(){return T===Aa}function je(){return T===Ta}function Oe(){return T===La}function $a(){return T===ka}function Ha(){return T===Pa}function Da(){return T===Ma}function en(){return T===_a}function tn(){return T===Ia}function Na(){let t=typeof AD_PROTOCOL!="undefined"?AD_PROTOCOL:"none",e=typeof AD_NETWORK!="undefined"?AD_NETWORK:"web_embed";if(t==="mraid")try{mraid.getState(),T=Sa;return}catch{}else if(t==="dapi")try{dapi.isReady(),T=Ea;return}catch{}if(e==="facebook")try{typeof FbPlayableAd!="undefined"&&(T=Ca)}catch{}else if(e==="google")try{typeof ExitApi!="undefined"&&(T=Aa)}catch{}else if(e==="mintegral")window.gameReady&&(T=Ta);else if(e==="tapjoy")window.TJ_API&&(T=La);else if(e==="tiktok")window.openAppStore&&(T=ka);else if(e==="smadex")try{window.smxTracking&&(T=Pa)}catch{}else if(e==="snapchat")try{window.ScPlayableAd&&(T=Ma)}catch{}else e==="vungle"?T=_a:(t==="nucleo"||e==="nucleo")&&(T=Ia)}var wt=ge(require("lottie-web"),1),Fa=wt.default;typeof window!="undefined"&&(window.lottie=wt.default,window.__baseLottie=wt.default);var kr=require("pixi.js");var nn=require("pixi.js");var Pr=null;function an(t){Pr=t}St();xt();var Xe=require("pixi.js");St();var Rr=typeof __BUILD_MODE__!="undefined"?__BUILD_MODE__:"undefined",ln=Rr;if(typeof window!="undefined")try{let t=new XMLHttpRequest;if(t.open("GET","./build-settings.json",!1),t.send(),t.status===200&&t.responseText){let e=JSON.parse(t.responseText);e!=null&&e.buildMode&&(ln=e.buildMode,console.log(`[ObjectFactory] Build mode overridden by settings: ${ln}`))}}catch{}function zr(t){var n,i,a,s,r;if(typeof window!="undefined"&&window.resolveAnchorVec2)return window.resolveAnchorVec2(t);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(t))return{x:(n=t[0])!=null?n:.5,y:(i=t[1])!=null?i:.5};if(t&&typeof t=="object"&&"x"in t&&"y"in t)return{x:(a=t.x)!=null?a:.5,y:(s=t.y)!=null?s:.5};if(typeof t=="string"){let o=t.trim().toLowerCase();return(r=e[o])!=null?r:{x:.5,y:.5}}return null}var fe=class{static async create(e,n,i){var l,d,p,c,g,u,y;console.log(`[ObjectFactory] create() called for: ${e}, __BUILD_MODE__: ${ln}`);let a=(l=n==null?void 0:n.render)==null?void 0:l.asset;if(!a){console.log(`[ObjectFactory] No asset definition for: ${e}, returning empty container`);let h=new Xe.Container;return this.applyTransform(h,n==null?void 0:n.transform,n),h}let s=(d=n==null?void 0:n.identity)==null?void 0:d.id;console.log(`[ObjectFactory] Calling AssetLoader.load() for: ${e}, configId: ${s}, type: ${a.type}, path: ${a.path}`);let r=await Ce.load(e,a,i,s);console.log(`[ObjectFactory] AssetLoader.load() completed for: ${e}, rawAsset type: ${(p=r==null?void 0:r.constructor)==null?void 0:p.name}`);let o;if(a.type==="image")console.log("[ObjectFactory] Creating Sprite from texture:",r,"for object:",e),o=new Xe.Sprite(r),console.log("[ObjectFactory] Created object:",o,"type:",(c=o==null?void 0:o.constructor)==null?void 0:c.name),this.applyTransform(o,n==null?void 0:n.transform,n);else if(a.type==="json")if(console.log("[ObjectFactory] JSON asset for",e,"rawAsset type:",(g=r==null?void 0:r.constructor)==null?void 0:g.name,r),r&&(((u=r.constructor)==null?void 0:u.name)==="Container"||r instanceof Xe.Container)){console.warn("[ObjectFactory] JSON asset is Container (from cache), reloading JSON directly");let h=[a.path,`/assets/${a.path}`,`assets/${a.path}`,`../assets/${a.path}`],w=!1;for(let v of h)try{let b=await fetch(v);if(b.ok){o=await b.json(),console.log("[ObjectFactory] Reloaded JSON directly from:",v,"type:",(y=o==null?void 0:o.constructor)==null?void 0:y.name),w=!0;break}}catch{continue}w||(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,n==null?void 0:n.transform,n);return o}static applyTransform(e,n,i){var a,s,r,o;if(!(!n||!e)&&(n.position&&("x"in e&&"y"in e?(e.x=(a=n.position.x)!=null?a:0,e.y=(s=n.position.y)!=null?s:0):"position"in e&&e.position&&e.position.set((r=n.position.x)!=null?r:0,(o=n.position.y)!=null?o:0)),n.scale!==void 0&&"scale"in e&&e.scale&&(typeof e.scale=="object"&&"set"in e.scale?e.scale.set(n.scale):e.scale=n.scale),n.rotation!==void 0&&"rotation"in e&&(e.rotation=n.rotation),n.anchor&&"anchor"in e&&e.anchor)){let l=zr(n.anchor);l&&("set"in e.anchor?e.anchor.set(l.x,l.y):(e.anchor.x=l.x,e.anchor.y=l.y))}}};var Je=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 Dr=ge(require("pixi.js"),1);typeof window!="undefined"&&(window.__basePixi=Dr);Ze();var Ct=require("pixi.js");Ze();var dn=class{constructor(){this.instanceCache=new Map;this.readyPromise=null;this.app=null;this.registry=new Je}init(e,n){this.registry.init(e),this.app=n}updateConfig(e){this.registry.init(e),this.instanceCache.clear(),this.readyPromise=null}async ready(){this.readyPromise&&await this.readyPromise;let n=this.registry.getAllIds().filter(a=>!this.instanceCache.has(a));if(n.length===0)return;let i=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 l=await fe.create(s,r,this.app);this.instanceCache.set(s,l),console.log("[Assets] Loaded object:",s,(o=l==null?void 0:l.constructor)==null?void 0:o.name)}catch(l){console.error("[Assets] Failed to load object:",s,l)}})))};return this.readyPromise=(async()=>{await i(n);let a=this.registry.getAllIds().filter(s=>!this.instanceCache.has(s));a.length>0&&(console.warn("[Assets] Retrying missing assets:",a),await i(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 n=this.registry.get(e);if(n){let i=await fe.create(e,n,this.app);this.instanceCache.set(e,i)}}get(e){return this.instanceCache.get(e)}},Fr=new dn,Br=new Proxy(Fr,{get(t,e){if(e in t&&typeof t[e]=="function")return t[e].bind(t);if(t.get(e))return t.get(e)}});Ze();var qr=require("pixi.js"),le={width:400,height:600,designWidth:400,scaleFactor:1},Tt={scale:1,position:1},un=[];function Vr(t,e,n,i,a,s,r){un.push({element:t,originalScale:s,positionHelper:e,heightPercent:a}),e(t,n,i,a,s,r,!1)}function Wr(){un.forEach(({element:t,originalScale:e,positionHelper:n,heightPercent:i})=>{let a=e*le.scaleFactor;n(t,le.width,le.height,i,a,!0,!1)})}function pn(t,e){console.log(`[SCREEN] updateScreenState called: ${t}x${e}`),le.width=t,le.height=e,le.scaleFactor=Math.min(t/le.designWidth,1.15),Tt.scale=le.scaleFactor,Tt.position=1,console.log(`[SCREEN] Global multipliers - scale: ${Tt.scale.toFixed(3)}`),Wr()}var et={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 Yr(t,e,n){let i=et[t];i&&i[e]!==void 0&&(i[e]=n,console.log(`Updated ${t}.${e} = ${n}`))}function Kr(){return et}var Xr={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 At(t,e){return typeof t=="number"&&Number.isFinite(t)?t:e}function ze(t,e={x:.5,y:.5}){var n;if(Array.isArray(t))return{x:At(t[0],e.x),y:At(t[1],e.y)};if(t&&typeof t=="object"){let i=t;return{x:At(i.x,e.x),y:At(i.y,e.y)}}if(typeof t=="string"){let i=t.trim().toLowerCase();return(n=Xr[i])!=null?n:e}return e}function gn(t,e,n,i={}){var u,y,h,w,v,b;let a=ze(n),s=(u=i.inset)!=null?u:{},r=(y=i.padding)!=null?y:{x:0,y:0},o=((h=s.left)!=null?h:0)+r.x,l=((w=s.right)!=null?w:0)+r.x,d=((v=s.top)!=null?v:0)+r.y,p=((b=s.bottom)!=null?b:0)+r.y,c=Math.max(0,t-o-l),g=Math.max(0,e-d-p);return{x:o+c*a.x,y:d+g*a.y}}function hn(t,e,n,i={}){var h,w,v,b,m,f;let a=(h=i.inset)!=null?h:{},s=(w=i.padding)!=null?w:{x:0,y:0},r=((v=a.left)!=null?v:0)+s.x,o=((b=a.right)!=null?b:0)+s.x,l=((m=a.top)!=null?m:0)+s.y,d=((f=a.bottom)!=null?f:0)+s.y,p=Math.max(0,t-r-o),c=Math.max(0,e-l-d),g=ze(n,{x:.5,y:.5}),u=Math.min(Math.max(g.x,0),1),y=Math.min(Math.max(g.y,0),1);return{x:r+p*u,y:l+c*y}}if(typeof window!="undefined"){let t=window.innerWidth,e=window.innerHeight,n=()=>{let i=window.innerWidth,a=window.innerHeight;(i!==t||a!==e)&&(t=i,e=a,pn(i,a))};window.addEventListener("resize",n),window.addEventListener("orientationchange",()=>{setTimeout(n,100)}),window.mraid&&(window.mraid.addEventListener("viewableChange",n),window.mraid.addEventListener("sizeChange",n)),pn(window.innerWidth,window.innerHeight),window.updateDebugConfig=Yr,window.getDebugConfig=Kr,window.copyConfig=oo,window.applyConfig=Qe,window.applyConfigForRatio=lo,window.positionAtBottom=qa,window.positionAtTop=Qr,window.positionAtCenter=eo,window.positionAtLeft=to,window.positionAtRight=no,window.positionAtBottomLeft=io,window.positionAtBottomRight=ao,window.positionAtTopLeft=so,window.positionAtTopRight=ro,window.applyPositionContract=Zr,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 Lt(t,e,n=0){return t*e+n}function kt(t,e,n=0){return t*(1-e)+n}function Pt(t,e,n=0){return t*e+n}function Mt(t,e,n=0){return t*(1-e)+n}function U(t,e=0){return t/2+e}function Jr(t,e){return t*e}function Zr(t,e,n,i){var r,o,l,d,p,c,g,u,y,h,w,v,b,m,f,S,E,C,P,I;let a=0,s=0;switch(i.type){case"top":a=U(e,(o=(r=i.offset)==null?void 0:r.x)!=null?o:0),s=Lt(n,i.percent,(d=(l=i.offset)==null?void 0:l.y)!=null?d:0);break;case"bottom":a=U(e,(c=(p=i.offset)==null?void 0:p.x)!=null?c:0),s=kt(n,i.percent,(u=(g=i.offset)==null?void 0:g.y)!=null?u:0);break;case"left":a=Pt(e,i.percent,(h=(y=i.offset)==null?void 0:y.x)!=null?h:0),s=U(n,(v=(w=i.offset)==null?void 0:w.y)!=null?v:0);break;case"right":a=Mt(e,i.percent,(m=(b=i.offset)==null?void 0:b.x)!=null?m:0),s=U(n,(S=(f=i.offset)==null?void 0:f.y)!=null?S:0);break;case"center":a=U(e,(C=(E=i.offset)==null?void 0:E.x)!=null?C:0),s=U(n,(I=(P=i.offset)==null?void 0:P.y)!=null?I:0);break}t.position?t.position.set(a,s):(t.x=a,t.y=s),i.scale!==void 0&&i.scale!==1&&t.scale&&(typeof t.scale.set=="function"?t.scale.set(i.scale,i.scale):(t.scale.x=i.scale,t.scale.y=i.scale))}function qa(t,e,n,i=.2,a=1,s=!0,r=!1){let o=Jr(n,i),l=kt(n,i/2);ce(t,U(e),l);let d=s?a*le.scaleFactor:a;de(t,d),r&&!un.find(p=>p.element===t)&&Vr(t,qa,e,n,i,a,s)}function Qr(t,e,n,i=.1,a=1){ce(t,U(e),Lt(n,i)),de(t,a)}function eo(t,e,n,i=0,a=0,s=1){ce(t,U(e,i),U(n,a)),de(t,s)}function to(t,e,n,i=.1,a=1){ce(t,Pt(e,i),U(n)),de(t,a)}function no(t,e,n,i=.1,a=1){ce(t,Mt(e,i),U(n)),de(t,a)}function io(t,e,n,i=.05,a=.05,s=1){ce(t,Pt(e,a),kt(n,i)),de(t,s)}function ao(t,e,n,i=.05,a=.05,s=1){ce(t,Mt(e,a),kt(n,i)),de(t,s)}function so(t,e,n,i=.05,a=.05,s=1){ce(t,Pt(e,a),Lt(n,i)),de(t,s)}function ro(t,e,n,i=.05,a=.05,s=1){ce(t,Mt(e,a),Lt(n,i)),de(t,s)}function ce(t,e,n){t&&t.position?typeof t.position.set=="function"?t.position.set(e,n):(t.position.x=e,t.position.y=n):t&&(t.x=e,t.y=n)}function de(t,e){e!==1&&t&&t.scale&&(typeof t.scale.set=="function"?t.scale.set(e,e):t.scale.x!==void 0&&t.scale.y!==void 0&&(t.scale.x=e,t.scale.y=e))}var Ae={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 oo(t){return t&&Ae[t]?JSON.parse(JSON.stringify(Ae[t])):JSON.parse(JSON.stringify(et))}function Qe(t){Object.keys(t).forEach(e=>{let n=e;et[n]&&t[n]&&Object.assign(et[n],t[n])}),console.log("Config applied:",t)}function lo(t,e){let n=t/e;n>1.6?(Qe(Ae.wide),console.log("Applied WIDE config for ratio:",n)):n<.7?(Qe(Ae.tall),console.log("Applied TALL config for ratio:",n)):n>.8&&n<1.2?(Qe(Ae.square),console.log("Applied SQUARE config for ratio:",n)):(Qe(Ae.default),console.log("Applied DEFAULT config for ratio:",n))}if(typeof window!="undefined"){let t=window;t.configPresets=Ae,t.resolveAnchorVec2=t.resolveAnchorVec2||ze,t.resolveScreenAnchorPoint=t.resolveScreenAnchorPoint||gn,t.resolveScreenRatioPoint=t.resolveScreenRatioPoint||hn}yn();function _(t,e){let n=(a,s)=>s===0?a:n(s,a%s),i=n(t,e);return`${t/i}:${e/i}`}var Wc=[{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)}],Yc=[{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)}],Kc=[{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)}],Ka=[{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 Xc=[...Ka];var yo=Ka[0];Z();function bo(t){return new Promise((e,n)=>{let i=new FileReader;i.onerror=()=>n(new Error("FileReader failed")),i.onload=()=>e(String(i.result||"")),i.readAsDataURL(t)})}function vo(t){var a;let[e,n]=t.split(","),i=e==null?void 0:e.match(/data:(.*?);base64/);return{base64:n!=null?n:"",mimeType:(a=i==null?void 0:i[1])!=null?a:"image/png"}}async function wo(t){return await new Promise(e=>{let n=new Image;n.onload=()=>e({width:n.naturalWidth||n.width,height:n.naturalHeight||n.height}),n.onerror=()=>e(null),n.src=t})}async function bn(t){var e,n;try{console.log("[ImageUtils] Fetching image data from URL:",t);let i=await fetch(t);if(!i.ok)return console.warn("[ImageUtils] Fetch failed with status:",i.status,t),null;let a=await i.blob();console.log("[ImageUtils] Blob received, size:",a.size,"type:",a.type);let s=await bo(a),r=await wo(s),o=vo(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:(n=r==null?void 0:r.height)!=null?n:0}}catch(i){return console.error("[ImageUtils] Error fetching image data:",i),null}}async function _t(t,e=30){try{console.log("[ImageUtils] Removing background color...");let n=await new Promise((c,g)=>{let u=new Image;u.onload=()=>c(u),u.onerror=()=>g(new Error("Failed to load image")),u.src=t}),i=document.createElement("canvas");i.width=n.width,i.height=n.height;let a=i.getContext("2d");if(!a)return console.error("[ImageUtils] Failed to get canvas context"),t;a.drawImage(n,0,0);let s=a.getImageData(0,0,i.width,i.height),r=s.data,l=[{name:"top-left",offset:0},{name:"top-right",offset:(i.width-1)*4},{name:"bottom-left",offset:(i.height-1)*i.width*4},{name:"bottom-right",offset:((i.height-1)*i.width+(i.width-1))*4}].map(c=>({r:r[c.offset],g:r[c.offset+1],b:r[c.offset+2]})),d=0;for(let c=0;c<r.length;c+=4){let g=r[c],u=r[c+1],y=r[c+2],h=!1;for(let w of l)if(Math.sqrt(Math.pow(g-w.r,2)+Math.pow(u-w.g,2)+Math.pow(y-w.b,2))<e){h=!0;break}h&&(r[c+3]=0,d++)}return console.log(`[ImageUtils] Removed background from ${d} pixels (4-corner sampling, tolerance: ${e})`),a.putImageData(s,0,0),i.toDataURL("image/png")}catch(n){return console.error("[ImageUtils] Error removing background:",n),t}}var Za=require("@google/genai");async function vn(t,e,n=[],i={}){var a,s,r,o,l,d,p;try{if(!(t!=null&&t.trim()))throw new Error("Gemini API key is required");if(!(e!=null&&e.trim()))throw new Error("Prompt is required");for(let v=0;v<n.length;v++){let b=n[v];if(!b.base64||!b.mimeType)throw new Error(`Image ${v+1} is missing required data`);if(b.base64.length<1e3&&console.warn(`Image ${v+1} data appears very small, may be corrupted`),!b.mimeType.startsWith("image/"))throw new Error(`Image ${v+1} has invalid MIME type: ${b.mimeType}`)}let c=new Za.GoogleGenAI({apiKey:t}),g="gemini-2.5-flash",u=[e];n.length>0&&n.forEach((v,b)=>{u.push({inlineData:{data:v.base64,mimeType:v.mimeType}}),console.log(`[Gemini] Added image ${b+1}: ${v.mimeType}, size: ${Math.round(v.base64.length/1024)}KB`)}),console.log(`[Gemini] Making request with ${n.length} images and prompt length: ${e.length}`);let y=await c.models.generateContent({model:g,contents:u}),h="",w=(r=(s=(a=y.candidates)==null?void 0:a[0])==null?void 0:s.content)==null?void 0:r.parts;if(w)for(let v of w)v.text&&(h+=v.text);if(!h.trim())throw new Error("Empty response from Gemini API");return console.log(`[Gemini] Response received, length: ${h.length}`),h}catch(c){throw console.error("[Gemini] API error:",c),(o=c.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."):(l=c.message)!=null&&l.includes("API_KEY_INVALID")?new Error("Invalid Gemini API key. Please check your API key configuration."):(d=c.message)!=null&&d.includes("QUOTA_EXCEEDED")?new Error("Gemini API quota exceeded. Please try again later or check your billing."):(p=c.message)!=null&&p.includes("SAFETY")?new Error("Content was flagged by Gemini safety filters. Please try with different images."):c}}var Qa=require("@google/genai");async function It(t,e,n=[],i={}){try{console.info("[GEMINI-REAL-SDK] Initializing GoogleGenAI...");let a=new Qa.GoogleGenAI({apiKey:t}),s=[{text:e}];n.length>0&&n.forEach((o,l)=>{console.info(`[GEMINI-REAL-SDK] Adding image part ${l}`),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 l=o.inlineData.data,d=o.inlineData.mimeType||"image/png";return console.info("[GEMINI-REAL-SDK] Found inline image data in response"),`data:${d};base64,${l}`}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 xo=require("pixi.js");Ze();xt();Z();var ts=require("pixi.js");var Eo=require("pixi.js");Z();function jo(t){return new Promise((e,n)=>{let i=new FileReader;i.onerror=()=>n(new Error("FileReader failed")),i.onload=()=>e(String(i.result||"")),i.readAsDataURL(t)})}function Oo(t){var a;let[e,n]=t.split(","),i=e==null?void 0:e.match(/data:(.*?);base64/);return{base64:n!=null?n:"",mimeType:(a=i==null?void 0:i[1])!=null?a:"image/png"}}function Ro(t){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: