handler-playable-sdk 1.0.18 → 1.0.21

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 (41) hide show
  1. package/dist/{chunk-PJT377H6.js → chunk-KHEZYZMO.js} +132 -132
  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 +69 -69
  34. package/dist/index.d.cts +7 -0
  35. package/dist/index.d.ts +7 -0
  36. package/dist/index.js +1 -1
  37. package/dist/pixi/index.cjs +8 -8
  38. package/dist/pixi/index.js +1 -1
  39. package/dist/three/index.cjs +11 -11
  40. package/dist/three/index.js +1 -1
  41. package/package.json +1 -1
@@ -1 +1 @@
1
- (function(_0x3b7d84,_0x5ce83a){var a0_0x512624={_0x5e7b48:'d7qP',_0x2487ad:0x364,_0x8aefc7:0x356,_0x251927:0x43,_0x22eb61:0x4b,_0x34a45e:0x4d,_0x26207e:0x56,_0x86ba43:'fWi1',_0x3921e9:0x368,_0x36b6d0:0x373,_0x16e52a:0x36c,_0x55a28e:0x60,_0x2d7003:0x62,_0x2cb940:0x6d,_0x1503f3:0x6a,_0x2e8ad:'(k!H',_0x22b35f:0x35d,_0x4890b9:0x373,_0x51bf04:'(OUe',_0xeca4f6:0x364,_0x301db0:0x375,_0x5ebff7:0x375,_0x54f494:0x356,_0x42e784:0x35e,_0x20655f:0x363,_0x4e53c1:'Rl@$',_0x3a1ce1:0x1,_0x5749c4:0xf,_0x25718f:0x14,_0x3137e7:0x6},a0_0x3443e5={_0x142f41:0x221},a0_0x15cfd2={_0x3bb4d3:0x19e};function _0x4378d4(_0x422e54,_0x76337a,_0x27a463,_0x517da3,_0x1afe33){return a0_0x2863(_0x1afe33- -0x13b,_0x422e54);}var _0x4f0b93=_0x3b7d84();function _0x4b53bf(_0xa1223c,_0x4f88e9,_0x525ec6,_0x2e4d88,_0x14d329){return a0_0x2863(_0x4f88e9- -a0_0x15cfd2._0x3bb4d3,_0x14d329);}function _0x1271cd(_0x476ad5,_0x520851,_0x166e94,_0xdf08e7,_0x9cd824){return a0_0x2863(_0xdf08e7-a0_0x3443e5._0x142f41,_0x520851);}while(!![]){try{var _0x10df97=-parseInt(_0x1271cd(0x364,a0_0x512624._0x5e7b48,0x35c,a0_0x512624._0x2487ad,a0_0x512624._0x8aefc7))/(0x1907+0x1*0x15d4+-0x2eda)+parseInt(_0x4b53bf(-a0_0x512624._0x251927,-a0_0x512624._0x22eb61,-a0_0x512624._0x34a45e,-a0_0x512624._0x26207e,a0_0x512624._0x86ba43))/(0x1*-0x23d5+0x7c*0x11+0x25*0xbf)+parseInt(_0x1271cd(0x365,'v4p%',a0_0x512624._0x3921e9,a0_0x512624._0x36b6d0,a0_0x512624._0x16e52a))/(0xc31*0x2+0x1*-0x955+-0xf0a)*(parseInt(_0x4b53bf(-a0_0x512624._0x55a28e,-a0_0x512624._0x2d7003,-a0_0x512624._0x2cb940,-a0_0x512624._0x1503f3,a0_0x512624._0x2e8ad))/(-0x7*-0x33b+-0x14b*0xd+0x1*-0x5ca))+-parseInt(_0x1271cd(0x366,a0_0x512624._0x5e7b48,a0_0x512624._0x22b35f,0x35e,0x36b))/(-0x1*0xaf1+0x85c+0x29a)+parseInt(_0x1271cd(a0_0x512624._0x4890b9,a0_0x512624._0x51bf04,a0_0x512624._0xeca4f6,0x36a,0x364))/(-0x12*-0x126+0x2*0x5cf+-0x76*0x46)*(-parseInt(_0x1271cd(a0_0x512624._0x301db0,a0_0x512624._0x5e7b48,0x368,a0_0x512624._0x3921e9,a0_0x512624._0x5ebff7))/(-0x1ddc+-0x2459+0x12*0x3ae))+parseInt(_0x1271cd(a0_0x512624._0x54f494,a0_0x512624._0x86ba43,a0_0x512624._0x42e784,a0_0x512624._0x20655f,a0_0x512624._0x20655f))/(0x1*-0xed5+0x1*-0x13f3+0x22d0)+parseInt(_0x4378d4(a0_0x512624._0x4e53c1,-a0_0x512624._0x3a1ce1,a0_0x512624._0x5749c4,a0_0x512624._0x25718f,a0_0x512624._0x3137e7))/(0xf58+0xa01*0x1+0x51*-0x50);if(_0x10df97===_0x5ce83a)break;else _0x4f0b93['push'](_0x4f0b93['shift']());}catch(_0x43735a){_0x4f0b93['push'](_0x4f0b93['shift']());}}}(a0_0x31fd,-0xf5c9+0xa*0xac79+-0x2307a));function a0_0x31fd(){var _0x503c5d=['WOv2W6JdL2u2W60EnHNcNSoLyq','zCoieeO5W7JdHSkhW4qLtmo1','WQDMW5Wjkq','W5yEvMDqWPVcUxJdTG','W7z1iwJcLG1YWRJcSSk7WPXfW5O','zCoogHT/WQZdQ8kOW7S','W5COWRhcKca','mdHGW4RdPLbTECoJWRqO','W43dGxtcMtG','WORcNCo7usG','W43cGSoonSofgmoVW4CwW6RcPSk/WOu','gCodW7zJomk1xtvJW7C1','W63cHCkquL4pWOinWO7cKfXe','WPO0qN3dRLZcOxVcHGFcSq','W5ddKMxcGIBcLHldRq7dQs5I','WPldNwvzWR4','WPe5qxddOgFcOexcUJxcOW','WOb/W6FdK2m0WPWfgq/cTmoU','WQSFrZhcNq','W4axzW','mtJdKW4n','WPzhphrw','WQJdUSksBCo5','pYLOA8o6W7KpfG','ymokfu85W73cTmkIW6eLB8o2WOG','W5hdRc3cTmoF','WPFdKX8','uxnBDmoT','W4NcOmoKWP0PWPe8WR1/WORcTelcRa'];a0_0x31fd=function(){return _0x503c5d;};return a0_0x31fd();}var a0_0x23bc70=(function(){var a0_0x4efbfd={_0x42e604:'2(w0',_0x5dc09c:0x51c,_0x14adfe:0x523,_0x2da3a4:0x50e},_0x4e9093=!![];return function(_0x260ec1,_0x2a4734){var _0x570ade=_0x4e9093?function(){function _0x2c347c(_0x561b03,_0x33bef3,_0x3a3167,_0x27eea3,_0x19e4b6){return a0_0x2863(_0x33bef3-0x3cb,_0x561b03);}if(_0x2a4734){var _0x3127b1=_0x2a4734[_0x2c347c(a0_0x4efbfd._0x42e604,a0_0x4efbfd._0x5dc09c,0x529,a0_0x4efbfd._0x14adfe,a0_0x4efbfd._0x2da3a4)](_0x260ec1,arguments);return _0x2a4734=null,_0x3127b1;}}:function(){};return _0x4e9093=![],_0x570ade;};}()),a0_0x289f83=a0_0x23bc70(this,function(){var a0_0x3cd0b5={_0x40a7ae:0x20e,_0x2a6997:0x216,_0x3af4ef:0x203,_0xfb7a4f:0x201,_0x147a0a:0x218,_0x55aeb1:0x214,_0xbdbacc:'Bznt',_0x19d9d1:0x192,_0x2ec8b0:0x191,_0x3d0fc4:0x18b,_0x5506ce:0x198,_0x4d968f:'pCp1',_0x2657e7:0x17d,_0xa0b752:0x187,_0x216fb6:0x186,_0x274954:0x194,_0x10bbd8:'LA^W',_0x591a94:0x218,_0xe42ebd:'[WDt',_0x5d4ff4:0x205,_0x58bcf:0x20d,_0x4a43b2:'%2Jf',_0x4c6d1e:0x20f,_0x155a12:0x21f,_0x5aeabb:'Sj&E',_0x486d37:0x21d,_0x104f39:0x190,_0x1927e0:0x197,_0x41dabb:0x18d,_0x295c81:0x188,_0x2dd8d8:'gh15',_0x5e5571:0x170,_0x34a740:0x173,_0x3a8fd1:0x17c,_0x1cb7b2:'fWi1',_0x53b131:0x19a,_0x2b8747:0x18c,_0x1f077a:0x18f,_0x5bfb82:0x185,_0x2f0ebf:0x18c,_0x408d5b:'(k!H'},a0_0x4c0bc2={_0x5cc366:0x2c5},a0_0x1de283={_0x4a332d:0xd2},a0_0x1c345f={_0x37bdfd:0xca},_0x1c10ce={};function _0xda34d0(_0x4eb8d9,_0xc7aff1,_0x480a1e,_0x3d4326,_0x2e3125){return a0_0x2863(_0xc7aff1-a0_0x1c345f._0x37bdfd,_0x480a1e);}_0x1c10ce[_0x4539c6(0x222,'F@^C',0x21d,a0_0x3cd0b5._0x40a7ae,a0_0x3cd0b5._0x2a6997)]=_0xda34d0(a0_0x3cd0b5._0x3af4ef,0x208,'(Uie',0x1fd,a0_0x3cd0b5._0xfb7a4f)+_0xda34d0(a0_0x3cd0b5._0x147a0a,a0_0x3cd0b5._0x55aeb1,a0_0x3cd0b5._0xbdbacc,a0_0x3cd0b5._0x55aeb1,a0_0x3cd0b5._0x147a0a)+'+$';function _0x4539c6(_0x1a0bcd,_0x504fc7,_0x1d5ae8,_0x3a34b4,_0x4b1cc2){return a0_0x2863(_0x4b1cc2-a0_0x1de283._0x4a332d,_0x504fc7);}var _0x5f5a06=_0x1c10ce;function _0x1ded8f(_0x34dedd,_0x4e2f91,_0x30c7f0,_0x34c870,_0x313f22){return a0_0x2863(_0x30c7f0- -a0_0x4c0bc2._0x5cc366,_0x313f22);}return a0_0x289f83[_0x1ded8f(-a0_0x3cd0b5._0x19d9d1,-a0_0x3cd0b5._0x2ec8b0,-a0_0x3cd0b5._0x3d0fc4,-a0_0x3cd0b5._0x5506ce,a0_0x3cd0b5._0x4d968f)+_0x1ded8f(-a0_0x3cd0b5._0x2657e7,-a0_0x3cd0b5._0xa0b752,-a0_0x3cd0b5._0x216fb6,-a0_0x3cd0b5._0x274954,a0_0x3cd0b5._0x10bbd8)]()[_0x4539c6(a0_0x3cd0b5._0x591a94,a0_0x3cd0b5._0xe42ebd,0x217,a0_0x3cd0b5._0x5d4ff4,a0_0x3cd0b5._0x58bcf)+'h'](_0x5f5a06[_0xda34d0(a0_0x3cd0b5._0x58bcf,0x201,a0_0x3cd0b5._0x4a43b2,a0_0x3cd0b5._0x4c6d1e,0x203)])[_0x4539c6(a0_0x3cd0b5._0x155a12,a0_0x3cd0b5._0x5aeabb,0x21e,0x219,a0_0x3cd0b5._0x486d37)+_0x1ded8f(-a0_0x3cd0b5._0x104f39,-a0_0x3cd0b5._0x1927e0,-a0_0x3cd0b5._0x41dabb,-a0_0x3cd0b5._0x295c81,a0_0x3cd0b5._0x2dd8d8)]()[_0x1ded8f(-a0_0x3cd0b5._0x5e5571,-a0_0x3cd0b5._0x34a740,-0x17d,-a0_0x3cd0b5._0x3a8fd1,a0_0x3cd0b5._0x1cb7b2)+'ructo'+'r'](a0_0x289f83)[_0x1ded8f(-a0_0x3cd0b5._0x53b131,-0x197,-a0_0x3cd0b5._0x2b8747,-0x196,'m7Z4')+'h'](_0x5f5a06[_0x1ded8f(-0x184,-a0_0x3cd0b5._0x1f077a,-a0_0x3cd0b5._0x5bfb82,-a0_0x3cd0b5._0x2f0ebf,a0_0x3cd0b5._0x408d5b)]);});a0_0x289f83();import{A as a0_0x6c93d7,B as a0_0x5ad107,C as a0_0x5991ef,D as a0_0x276efa,b as a0_0x5b015c,c as a0_0x1d55e9,d as a0_0x46a34f,e as a0_0x38f122,f as a0_0x57c66e,g as a0_0x52960a,h as a0_0xf0a91d,i as a0_0x3ac0e6,j as a0_0x726746,k as a0_0x23ebfc,l as a0_0x33d95c,m as a0_0x5f59cb,n as a0_0x4484bb,o as a0_0x52ba7e,p as a0_0x5172f4,q as a0_0x1b9926,r as a0_0xe2f507,s as a0_0x5c8500,t as a0_0x5994cb,u as a0_0x5de9be,v as a0_0x1311f0,w as a0_0x5ed963,x as a0_0x4d99b0,y as a0_0x181329,z as a0_0x412a6e}from'../chunk-PJT377H6.js';function a0_0x2863(_0x22558f,_0x39e3d9){_0x22558f=_0x22558f-(-0x1*0x1727+0x1e0c+-0x1*0x5ae);var _0x44f783=a0_0x31fd();var _0x1d8eba=_0x44f783[_0x22558f];if(a0_0x2863['oGYFpv']===undefined){var _0xa9096c=function(_0x23c314){var _0x4f3695='abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789+/=';var _0x3d44b6='',_0x385f15='',_0x163b54=_0x3d44b6+_0xa9096c;for(var _0xb3f093=0x1282+-0x57+-0x122b,_0x352efe,_0x27d6bb,_0x129955=-0x732+-0x1*-0x1957+-0x1*0x1225;_0x27d6bb=_0x23c314['charAt'](_0x129955++);~_0x27d6bb&&(_0x352efe=_0xb3f093%(0x575+-0x2193*-0x1+0x16*-0x1c6)?_0x352efe*(0x3*-0x164+-0x4*-0x4c3+-0xea0)+_0x27d6bb:_0x27d6bb,_0xb3f093++%(-0x1*-0x11ab+0x7e*-0x3a+0xae5))?_0x3d44b6+=_0x163b54['charCodeAt'](_0x129955+(0x1b40+0x1*-0x1be+-0x4*0x65e))-(0x4*-0x6b3+-0x101c+0xef*0x2e)!==0x238e+-0xf5a+-0x1434?String['fromCharCode'](0xbff*-0x1+0x1e4a+-0xf6*0x12&_0x352efe>>(-(-0x1ee1+0x14c3*0x1+0xa20)*_0xb3f093&-0x35*-0x89+0x4*-0x282+-0x124f)):_0xb3f093:-0xaaa+0x1*0x117b+0x1*-0x6d1){_0x27d6bb=_0x4f3695['indexOf'](_0x27d6bb);}for(var _0x587575=-0x52*-0x6b+-0x23dc+0x196,_0x3e329c=_0x3d44b6['length'];_0x587575<_0x3e329c;_0x587575++){_0x385f15+='%'+('00'+_0x3d44b6['charCodeAt'](_0x587575)['toString'](-0x22ac+-0x2a2*-0x4+0x1834))['slice'](-(-0xb5a*0x2+-0x12b*0x1+0x17e1));}return decodeURIComponent(_0x385f15);};var _0x5892db=function(_0x1d964a,_0x175727){var _0x371786=[],_0x3eafdb=0x2356+-0x23*-0xfb+-0x45a7,_0x53dc8a,_0x39851a='';_0x1d964a=_0xa9096c(_0x1d964a);var _0x26ebe0;for(_0x26ebe0=-0x287*-0x3+-0x106c*-0x2+-0x286d;_0x26ebe0<0x123*0x3+-0xd*-0x301+-0x2976;_0x26ebe0++){_0x371786[_0x26ebe0]=_0x26ebe0;}for(_0x26ebe0=-0x24bb*-0x1+0x12f*0x1d+-0x470e;_0x26ebe0<0xe52+-0x1*0x203f+0x12ed;_0x26ebe0++){_0x3eafdb=(_0x3eafdb+_0x371786[_0x26ebe0]+_0x175727['charCodeAt'](_0x26ebe0%_0x175727['length']))%(0x194c+0x1*-0x7e4+-0x1068),_0x53dc8a=_0x371786[_0x26ebe0],_0x371786[_0x26ebe0]=_0x371786[_0x3eafdb],_0x371786[_0x3eafdb]=_0x53dc8a;}_0x26ebe0=0x270d+0x1b56*-0x1+-0xbb7,_0x3eafdb=-0x1fb0+0xc31+0x2c9*0x7;for(var _0x426a61=-0x91*0x17+0x1bcc+-0x1*0xec5;_0x426a61<_0x1d964a['length'];_0x426a61++){_0x26ebe0=(_0x26ebe0+(-0x1d57+0x4*-0x5b+0xf62*0x2))%(-0xfb1+-0x1a71*0x1+-0x2*-0x1591),_0x3eafdb=(_0x3eafdb+_0x371786[_0x26ebe0])%(-0x5*-0x78b+0x2647+-0x4afe),_0x53dc8a=_0x371786[_0x26ebe0],_0x371786[_0x26ebe0]=_0x371786[_0x3eafdb],_0x371786[_0x3eafdb]=_0x53dc8a,_0x39851a+=String['fromCharCode'](_0x1d964a['charCodeAt'](_0x426a61)^_0x371786[(_0x371786[_0x26ebe0]+_0x371786[_0x3eafdb])%(0x1*0x831+0xdf8+0x1529*-0x1)]);}return _0x39851a;};a0_0x2863['kcrYfQ']=_0x5892db,a0_0x2863['QcQJtZ']={},a0_0x2863['oGYFpv']=!![];}var _0xdcc947=_0x44f783[0xa9+-0x119e+-0x5a7*-0x3],_0x48eb00=_0x22558f+_0xdcc947,_0x3dde9d=a0_0x2863['QcQJtZ'][_0x48eb00];if(!_0x3dde9d){if(a0_0x2863['czfbXO']===undefined){var _0x3be64c=function(_0x124255){this['lrVUHq']=_0x124255,this['veabmc']=[0xad1+-0x1c9a+0x11ca,-0x1*-0x244b+0x2375+-0x38*0x148,-0x111*-0xd+0xce4+-0x1ac1],this['oSwwaq']=function(){return'newState';},this['qBVxzK']='\x5cw+\x20*\x5c(\x5c)\x20*{\x5cw+\x20*',this['RdDVrV']='[\x27|\x22].+[\x27|\x22];?\x20*}';};_0x3be64c['prototype']['tDmHKI']=function(){var _0x30526a=new RegExp(this['qBVxzK']+this['RdDVrV']),_0x57186b=_0x30526a['test'](this['oSwwaq']['toString']())?--this['veabmc'][-0x273*0x9+0x1*0x1907+-0x2fb]:--this['veabmc'][0x1*-0x23d5+0x7c*0x11+0x2d*0x9d];return this['KCQWKY'](_0x57186b);},_0x3be64c['prototype']['KCQWKY']=function(_0x5f49ab){if(!Boolean(~_0x5f49ab))return _0x5f49ab;return this['TqoOuN'](this['lrVUHq']);},_0x3be64c['prototype']['TqoOuN']=function(_0x48445f){for(var _0x294f17=0xc31*0x2+0x1*-0x955+-0xf0d,_0x5c7482=this['veabmc']['length'];_0x294f17<_0x5c7482;_0x294f17++){this['veabmc']['push'](Math['round'](Math['random']())),_0x5c7482=this['veabmc']['length'];}return _0x48445f(this['veabmc'][-0x7*-0x33b+-0x14b*0xd+0x1*-0x5ce]);},new _0x3be64c(a0_0x2863)['tDmHKI'](),a0_0x2863['czfbXO']=!![];}_0x1d8eba=a0_0x2863['kcrYfQ'](_0x1d8eba,_0x39e3d9),a0_0x2863['QcQJtZ'][_0x48eb00]=_0x1d8eba;}else _0x1d8eba=_0x3dde9d;return _0x1d8eba;}import{a as a0_0x854653,b as a0_0x1d0ffb,c as a0_0x2fecec,d as a0_0x2d0e16,e as a0_0x251388}from'../chunk-I5OOVR5U.js';import'../chunk-PW2FGMCO.js';import'../chunk-HVKF2KYL.js';import'../chunk-E6WJCS24.js';import'../chunk-JXBG6UFL.js';export{a0_0x854653 as AssetCache,a0_0x2fecec as AssetLoader,a0_0x5de9be as AssetSystem,a0_0x2d0e16 as AssetTextures,a0_0x5c8500 as Assets,a0_0x52ba7e as BaseSystem,a0_0x4484bb as GameEngine,a0_0x38f122 as GameObject,a0_0x57c66e as GameObjectManager,a0_0x5f59cb as ObjectFactory,a0_0x46a34f as Renderer,a0_0x5172f4 as RuntimeObjectRegistry,a0_0x1d55e9 as Transform,a0_0x5ad107 as applyScreenAnchor,a0_0x1b9926 as basePixi,a0_0x5ed963 as clearResponsiveElements,a0_0x5b015c as createPixiBase,a0_0x726746 as getRegisteredFontIds,a0_0x1311f0 as globalResponsiveMultipliers,a0_0x251388 as initAssetTextures,a0_0x5994cb as initAssets,a0_0x5991ef as layout,a0_0x33d95c as playLottieOverlay,a0_0x3ac0e6 as registerFont,a0_0x1d0ffb as registerType,a0_0x181329 as resolveAnchorVec2,a0_0x52960a as resolveFont,a0_0xf0a91d as resolveFontWeight,a0_0x412a6e as resolveScreenAnchorPoint,a0_0x6c93d7 as resolveScreenRatioPoint,a0_0x276efa as runInitSequence,a0_0x23ebfc as setLottieInstance,a0_0xe2f507 as spawnSceneFromConfig,a0_0x4d99b0 as updateScreenState};
1
+ (function(_0x3bce9a,_0xad3904){var a0_0x5827e8={_0x368528:0x33a,_0x13e0f9:0x332,_0x344851:'r*g)',_0x4c1793:0x129,_0x15d551:0x12d,_0x1bf8aa:0x130,_0x1e328b:0x124,_0x24f410:0x20c,_0x2bdc5d:'9H*D',_0x3fc2ad:0x203,_0x175ef3:0x328,_0x16ac4f:'Sf62',_0x30bf8b:0x31c,_0x3198de:0x325,_0x5eb0fb:0x320,_0x12472b:0x32d,_0x7a6a2d:'xpKN',_0x42599e:0x334,_0x36b29e:0x12d,_0x2f3229:0x11a,_0x460cba:0x231,_0x15a5db:0x225,_0x1cb1d1:'qSxa',_0x146c06:0x121,_0x1cb166:0x112,_0x4e6e97:0x116,_0x1e80b1:0x116,_0x46eeb3:0x33c,_0x438296:'XLRV',_0x36c2d0:0x32a,_0x4f5a58:0x322,_0x1ca303:0x12d,_0x5c9b65:0x132,_0x366349:0x201,_0x54fb09:0x210,_0x5b972b:'9d6T',_0x90584c:0x212,_0xf8187a:0x21b},a0_0xd8cf1c={_0x36141f:0x2a0},a0_0x5b1303={_0x167bd1:0x18d};function _0x4a3f9f(_0x5da208,_0x4520d8,_0x331d3d,_0x1c86cd,_0x5187c8){return a0_0x45d2(_0x4520d8-a0_0x5b1303._0x167bd1,_0x331d3d);}function _0x24cca3(_0x25ec53,_0x5db273,_0x643a9b,_0x3a4a84,_0x4bb055){return a0_0x45d2(_0x5db273- -0x1b4,_0x25ec53);}function _0x563cee(_0x38481e,_0xeb6ce3,_0x3b5baf,_0x4f736b,_0x353fd2){return a0_0x45d2(_0xeb6ce3-a0_0xd8cf1c._0x36141f,_0x3b5baf);}var _0xc61f64=_0x3bce9a();while(!![]){try{var _0xd5ccb8=-parseInt(_0x563cee(a0_0x5827e8._0x368528,a0_0x5827e8._0x368528,'XLRV',0x332,a0_0x5827e8._0x13e0f9))/(0xad*-0x2d+-0x1a6d+0x38d7)+-parseInt(_0x24cca3(a0_0x5827e8._0x344851,-a0_0x5827e8._0x4c1793,-a0_0x5827e8._0x15d551,-a0_0x5827e8._0x1bf8aa,-a0_0x5827e8._0x1e328b))/(-0x133c+-0x52d+0x37d*0x7)*(parseInt(_0x4a3f9f(0x20e,a0_0x5827e8._0x24f410,a0_0x5827e8._0x2bdc5d,0x20a,a0_0x5827e8._0x3fc2ad))/(0x554*0x5+-0x6*0x2cf+-0x9c7*0x1))+parseInt(_0x563cee(0x323,a0_0x5827e8._0x175ef3,a0_0x5827e8._0x16ac4f,a0_0x5827e8._0x30bf8b,a0_0x5827e8._0x3198de))/(-0x2160+0x1a94+0x6d0)*(parseInt(_0x563cee(a0_0x5827e8._0x5eb0fb,a0_0x5827e8._0x12472b,a0_0x5827e8._0x7a6a2d,0x324,a0_0x5827e8._0x42599e))/(-0x2*0x95+0x4d4+-0x3*0x137))+-parseInt(_0x24cca3('JD4R',-0x128,-a0_0x5827e8._0x36b29e,-a0_0x5827e8._0x2f3229,-0x136))/(0x7fb+0x1df2*-0x1+0x15fd)+parseInt(_0x4a3f9f(a0_0x5827e8._0x460cba,a0_0x5827e8._0x15a5db,a0_0x5827e8._0x1cb1d1,0x222,0x22b))/(0x151*-0x5+-0x1f21+0x1*0x25bd)*(parseInt(_0x24cca3('IHFW',-a0_0x5827e8._0x146c06,-a0_0x5827e8._0x1cb166,-a0_0x5827e8._0x4e6e97,-a0_0x5827e8._0x1e80b1))/(0xcbc+0x10fe+0xed9*-0x2))+-parseInt(_0x563cee(a0_0x5827e8._0x46eeb3,0x331,a0_0x5827e8._0x438296,a0_0x5827e8._0x36c2d0,a0_0x5827e8._0x4f5a58))/(0x2411+-0x5c2+-0x307*0xa)*(parseInt(_0x24cca3('wtPI',-0x12d,-0x123,-a0_0x5827e8._0x1ca303,-a0_0x5827e8._0x5c9b65))/(0x1cb5+0x44+-0x1cef))+parseInt(_0x4a3f9f(a0_0x5827e8._0x366349,a0_0x5827e8._0x54fb09,a0_0x5827e8._0x5b972b,a0_0x5827e8._0x90584c,a0_0x5827e8._0xf8187a))/(-0x1586*-0x1+0x1*0x127d+-0x27f8*0x1);if(_0xd5ccb8===_0xad3904)break;else _0xc61f64['push'](_0xc61f64['shift']());}catch(_0xb6f3ba){_0xc61f64['push'](_0xc61f64['shift']());}}}(a0_0x3894,0x2*0x3ec78+0x956fb+-0xa4039));function a0_0x45d2(_0x3bf5c6,_0x5793ac){_0x3bf5c6=_0x3bf5c6-(0xf0+-0x1511*-0x1+0x1*-0x1583);var _0x498568=a0_0x3894();var _0x187a1d=_0x498568[_0x3bf5c6];if(a0_0x45d2['KEEsBf']===undefined){var _0x5cce97=function(_0x26d80b){var _0xca2e64='abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789+/=';var _0x2e4426='',_0x35946d='',_0x5eb172=_0x2e4426+_0x5cce97;for(var _0x1df1d9=-0x18a8+0x3fb*0x1+0x14ad,_0x11e381,_0x3e1dbf,_0x220cb0=0x211+0x17d0+0x19e1*-0x1;_0x3e1dbf=_0x26d80b['charAt'](_0x220cb0++);~_0x3e1dbf&&(_0x11e381=_0x1df1d9%(-0x29*0x9b+0xef7+0x9e0)?_0x11e381*(0x1*-0x347+-0x2526+0x10b*0x27)+_0x3e1dbf:_0x3e1dbf,_0x1df1d9++%(0xd9d*-0x2+-0xae4*0x2+-0x5*-0x9ce))?_0x2e4426+=_0x5eb172['charCodeAt'](_0x220cb0+(0x8fa+-0x76*0x41+0x17*0xea))-(0x1*0x8c6+-0x125a+-0x99e*-0x1)!==0x19f5+-0x497*0x2+-0x10c7?String['fromCharCode'](-0x1e1*0x11+0x2686*0x1+-0x596&_0x11e381>>(-(-0x97a+-0x1f46+-0x25*-0x11a)*_0x1df1d9&-0x1*0x2174+-0x200*0xa+0x4a*0xb9)):_0x1df1d9:-0x3cc*-0x1+-0x215b+0x1d8f){_0x3e1dbf=_0xca2e64['indexOf'](_0x3e1dbf);}for(var _0x396e44=0x1b*-0x48+-0x1f18+0x26b0,_0xb23f53=_0x2e4426['length'];_0x396e44<_0xb23f53;_0x396e44++){_0x35946d+='%'+('00'+_0x2e4426['charCodeAt'](_0x396e44)['toString'](0xcf3+-0x1239+0x2ab*0x2))['slice'](-(0x84*-0x13+-0xf09+-0x18d7*-0x1));}return decodeURIComponent(_0x35946d);};var _0x69ea0a=function(_0xc8ba50,_0x46645a){var _0x573372=[],_0x1e874f=-0x31d*-0xb+0x19f6+-0x3c35,_0x27a74a,_0x9b1785='';_0xc8ba50=_0x5cce97(_0xc8ba50);var _0x5cdfdf;for(_0x5cdfdf=0x25fd+-0x720+-0x1edd*0x1;_0x5cdfdf<0xfd8+-0xddf*-0x1+-0x1cb7*0x1;_0x5cdfdf++){_0x573372[_0x5cdfdf]=_0x5cdfdf;}for(_0x5cdfdf=0x24f6+-0x17d*-0x17+-0x4731;_0x5cdfdf<-0x40*-0x3a+0x1fb8+-0x8*0x5a7;_0x5cdfdf++){_0x1e874f=(_0x1e874f+_0x573372[_0x5cdfdf]+_0x46645a['charCodeAt'](_0x5cdfdf%_0x46645a['length']))%(0x12fd+0x13*0xc7+-0x20c2),_0x27a74a=_0x573372[_0x5cdfdf],_0x573372[_0x5cdfdf]=_0x573372[_0x1e874f],_0x573372[_0x1e874f]=_0x27a74a;}_0x5cdfdf=-0xe1e+-0x849+-0x1*-0x1667,_0x1e874f=0x1286+-0x1*0x973+0x65*-0x17;for(var _0x4f6b20=0x1*-0x21bb+0x107d+0x113e;_0x4f6b20<_0xc8ba50['length'];_0x4f6b20++){_0x5cdfdf=(_0x5cdfdf+(-0x9a8+0xbe*0x20+0xe17*-0x1))%(0x40c*-0x4+0x3*-0x14f+0x73*0x2f),_0x1e874f=(_0x1e874f+_0x573372[_0x5cdfdf])%(0x7*-0x1ab+-0x65*-0x52+-0x13ad),_0x27a74a=_0x573372[_0x5cdfdf],_0x573372[_0x5cdfdf]=_0x573372[_0x1e874f],_0x573372[_0x1e874f]=_0x27a74a,_0x9b1785+=String['fromCharCode'](_0xc8ba50['charCodeAt'](_0x4f6b20)^_0x573372[(_0x573372[_0x5cdfdf]+_0x573372[_0x1e874f])%(0x8ef+0xf11*-0x2+0x1633)]);}return _0x9b1785;};a0_0x45d2['EHEyui']=_0x69ea0a,a0_0x45d2['cbVebR']={},a0_0x45d2['KEEsBf']=!![];}var _0x5dd1bd=_0x498568[-0x43c+-0x1d*-0x10d+-0x3*0x8bf],_0x6f4721=_0x3bf5c6+_0x5dd1bd,_0x502073=a0_0x45d2['cbVebR'][_0x6f4721];if(!_0x502073){if(a0_0x45d2['Wrdskb']===undefined){var _0x27ad6b=function(_0x4d6cc3){this['VRRzXL']=_0x4d6cc3,this['tqXEie']=[0x1*0x4c3+-0x64*0xa+-0xda,-0x1b7d+-0xe75+0x2ff*0xe,0x1ae7+0x24a*-0x2+0x1*-0x1653],this['bzqrjZ']=function(){return'newState';},this['yCSzNV']='\x5cw+\x20*\x5c(\x5c)\x20*{\x5cw+\x20*',this['gZKIHf']='[\x27|\x22].+[\x27|\x22];?\x20*}';};_0x27ad6b['prototype']['rUacdH']=function(){var _0x361b1b=new RegExp(this['yCSzNV']+this['gZKIHf']),_0x3f3aae=_0x361b1b['test'](this['bzqrjZ']['toString']())?--this['tqXEie'][0x511*-0x2+-0x1382+0x1*0x1da5]:--this['tqXEie'][-0x107*-0x4+-0x1a82+0x1666];return this['wrAXGR'](_0x3f3aae);},_0x27ad6b['prototype']['wrAXGR']=function(_0x446e17){if(!Boolean(~_0x446e17))return _0x446e17;return this['XtlvCH'](this['VRRzXL']);},_0x27ad6b['prototype']['XtlvCH']=function(_0x18a180){for(var _0x10d130=0x22b+0x140d+-0x1638,_0x314659=this['tqXEie']['length'];_0x10d130<_0x314659;_0x10d130++){this['tqXEie']['push'](Math['round'](Math['random']())),_0x314659=this['tqXEie']['length'];}return _0x18a180(this['tqXEie'][-0x52d+0x10d9*-0x1+-0x2*-0xb03]);},new _0x27ad6b(a0_0x45d2)['rUacdH'](),a0_0x45d2['Wrdskb']=!![];}_0x187a1d=a0_0x45d2['EHEyui'](_0x187a1d,_0x5793ac),a0_0x45d2['cbVebR'][_0x6f4721]=_0x187a1d;}else _0x187a1d=_0x502073;return _0x187a1d;}var a0_0x518ca2=(function(){var a0_0x32ea56={_0x1fd6a4:0x265,_0x19bf91:0x26a,_0x20508c:'sao#'},_0x46dda0=!![];return function(_0x41b797,_0x125c9d){var a0_0x34a48a={_0x11e10f:0x1cc},_0x3fb0a3=_0x46dda0?function(){function _0x4d479e(_0x56f95a,_0xb8db88,_0x3077e9,_0x41e95b,_0x3a8f57){return a0_0x45d2(_0x3077e9-a0_0x34a48a._0x11e10f,_0x3a8f57);}if(_0x125c9d){var _0x43f069=_0x125c9d[_0x4d479e(0x25e,0x264,a0_0x32ea56._0x1fd6a4,a0_0x32ea56._0x19bf91,a0_0x32ea56._0x20508c)](_0x41b797,arguments);return _0x125c9d=null,_0x43f069;}}:function(){};return _0x46dda0=![],_0x3fb0a3;};}()),a0_0x412f91=a0_0x518ca2(this,function(){var a0_0x24cec1={_0x11f23e:0x5b,_0x32d76c:0x58,_0x27f791:0x49,_0x3dc4cc:0x51,_0x4ed5b7:'$Z^O',_0x1afc50:0x85,_0x18578e:0x86,_0x3ed647:'wEwn',_0x36545e:0x80,_0x34cd2b:0x2bb,_0x462f32:0x2a6,_0x24f8e8:0x2b1,_0x39fb75:'73WR',_0x584dc2:0x85,_0x19074a:'gQJ*',_0x3852e8:0x7a,_0x13f136:0x2c2,_0x12059b:0x2b6,_0x475b12:'XznV',_0x32cad5:0x69,_0x16b67e:0x65,_0x1cf28f:'VFo$',_0x97eb3e:0x6b,_0x29ae0d:'qSxa',_0x163ed7:0x84,_0x15bdc9:0x85,_0x1a98a2:0x8f},a0_0x4c161f={_0x1adc34:0x9},a0_0x3f65de={_0x2b1b9b:0x29},a0_0x2cfa7a={_0x19f0d1:0x346};function _0x1024c5(_0x3caaef,_0x1f385f,_0x47c8fb,_0x444415,_0x39582a){return a0_0x45d2(_0x444415- -a0_0x2cfa7a._0x19f0d1,_0x39582a);}function _0x32490c(_0x1bb913,_0x347c74,_0x5bfd18,_0xc96bd3,_0x26d3a6){return a0_0x45d2(_0x347c74- -a0_0x3f65de._0x2b1b9b,_0x26d3a6);}var _0x15f3e1={};_0x15f3e1['xwESt']='(((.+'+_0x32490c(a0_0x24cec1._0x11f23e,a0_0x24cec1._0x32d76c,a0_0x24cec1._0x27f791,a0_0x24cec1._0x3dc4cc,a0_0x24cec1._0x4ed5b7)+'+$';var _0x1e7544=_0x15f3e1;function _0x5bfaab(_0x4d2094,_0x3f9958,_0x26858d,_0x576003,_0x20bda6){return a0_0x45d2(_0x576003- -a0_0x4c161f._0x1adc34,_0x26858d);}return a0_0x412f91[_0x5bfaab(a0_0x24cec1._0x1afc50,a0_0x24cec1._0x18578e,a0_0x24cec1._0x3ed647,a0_0x24cec1._0x36545e,a0_0x24cec1._0x36545e)+_0x1024c5(-0x2a3,-a0_0x24cec1._0x34cd2b,-a0_0x24cec1._0x462f32,-a0_0x24cec1._0x24f8e8,a0_0x24cec1._0x39fb75)]()[_0x5bfaab(0x85,a0_0x24cec1._0x584dc2,a0_0x24cec1._0x19074a,0x77,a0_0x24cec1._0x3852e8)+'h'](_0x1e7544['xwESt'])['toStr'+'ing']()[_0x1024c5(-a0_0x24cec1._0x13f136,-0x2b9,-a0_0x24cec1._0x34cd2b,-a0_0x24cec1._0x12059b,a0_0x24cec1._0x475b12)+_0x32490c(0x6a,a0_0x24cec1._0x32cad5,0x71,a0_0x24cec1._0x16b67e,a0_0x24cec1._0x1cf28f)+'r'](a0_0x412f91)[_0x32490c(0x5c,a0_0x24cec1._0x97eb3e,a0_0x24cec1._0x16b67e,0x66,a0_0x24cec1._0x29ae0d)+'h'](_0x1e7544[_0x5bfaab(0x86,a0_0x24cec1._0x163ed7,'sao#',a0_0x24cec1._0x15bdc9,a0_0x24cec1._0x1a98a2)]);});a0_0x412f91();import{A as a0_0x5acd98,B as a0_0x1025f6,C as a0_0x597c51,D as a0_0x4f5f4b,b as a0_0x3df9a5,c as a0_0x173418,d as a0_0x27979e,e as a0_0x2d846a,f as a0_0x5e0d7a,g as a0_0x26fd92,h as a0_0x1f1b1b,i as a0_0x24d4b8,j as a0_0x402254,k as a0_0xa2885f,l as a0_0x43073c,m as a0_0x409e7c,n as a0_0x240ebd,o as a0_0x444abd,p as a0_0x36ea3e,q as a0_0x476661,r as a0_0x119b6c,s as a0_0x5cccc1,t as a0_0x5977ad,u as a0_0x1ab203,v as a0_0x3c6dd7,w as a0_0xec526f,x as a0_0x91efba,y as a0_0x4162cb,z as a0_0x5666ba}from'../chunk-KHEZYZMO.js';import{a as a0_0x57d7ab,b as a0_0x14f2dd,c as a0_0xe95e53,d as a0_0x3c26f1,e as a0_0x1ad3bc}from'../chunk-I5OOVR5U.js';import'../chunk-PW2FGMCO.js';import'../chunk-HVKF2KYL.js';import'../chunk-E6WJCS24.js';function a0_0x3894(){var _0x2d541b=['W5OlW4SJW7DcE8ok','W4fJWQFcQSoaWPqJW7xdU8k8W6xcJq','Ft/cVvzngw3dG1r7sCkybq','W6hdJeOvWQhcVCkOWRyrWRfycG','W5VdT23dSCkQW4xdUWtcLx5EWPG','wCkTuSoFWR0','WP1eWPzqW4XyrrpcQdZcO8ou','ztjCWQ3dQLNdUW','WR3cHfVcGMVdGH8TWQPiWPy','WOpcMq8/W5/dMGyn','f2hdIJSR','rmoVpSkJmJpcMuW','WPXNWQtdPuS','mgLEgCojW4ZcNCoW','mSoEW5BcJeq','DdVdS8k3wSoZWOjHA8oikcCv','DCkaW4TJfq','WRVdISkG','m8owW7RdRtZdSSkBmbfWWR4','fSkxq8kFWPSoWRFcHK7dNrO8','mCkDW65vj8knfG','dMBdVWqM','mgW8v8kiWRJcUSoVBCoRtmoy','iWeEEeG9p8oPW7hdU8oTCG','WQfWWQf0CGPnbmoxW4JdUCk6WQldNG','gsCXWOa0u8oZWPpdTfKTW4i','E8kWWO0KW6e','mH4hALi','mmkZW7ubWQrhWOa','WORdISo3WPtdNmkOWQCJW6uPlCklWRDq'];a0_0x3894=function(){return _0x2d541b;};return a0_0x3894();}import'../chunk-JXBG6UFL.js';export{a0_0x57d7ab as AssetCache,a0_0xe95e53 as AssetLoader,a0_0x1ab203 as AssetSystem,a0_0x3c26f1 as AssetTextures,a0_0x5cccc1 as Assets,a0_0x444abd as BaseSystem,a0_0x240ebd as GameEngine,a0_0x2d846a as GameObject,a0_0x5e0d7a as GameObjectManager,a0_0x409e7c as ObjectFactory,a0_0x27979e as Renderer,a0_0x36ea3e as RuntimeObjectRegistry,a0_0x173418 as Transform,a0_0x1025f6 as applyScreenAnchor,a0_0x476661 as basePixi,a0_0xec526f as clearResponsiveElements,a0_0x3df9a5 as createPixiBase,a0_0x402254 as getRegisteredFontIds,a0_0x3c6dd7 as globalResponsiveMultipliers,a0_0x1ad3bc as initAssetTextures,a0_0x5977ad as initAssets,a0_0x597c51 as layout,a0_0x43073c as playLottieOverlay,a0_0x24d4b8 as registerFont,a0_0x14f2dd as registerType,a0_0x4162cb as resolveAnchorVec2,a0_0x26fd92 as resolveFont,a0_0x1f1b1b as resolveFontWeight,a0_0x5666ba as resolveScreenAnchorPoint,a0_0x5acd98 as resolveScreenRatioPoint,a0_0x4f5f4b as runInitSequence,a0_0xa2885f as setLottieInstance,a0_0x119b6c as spawnSceneFromConfig,a0_0x91efba 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:()=>dt,GameObjectManager:()=>Dt,Renderer:()=>ct,ResponsiveUISystem:()=>qe,Transform:()=>lt,animateHandClick:()=>Es,animatePanelEntrance:()=>Ss,createBrushTexture:()=>_s,createEndGamePanel:()=>xs,createHandTutorial:()=>Cs,createThreeBase:()=>bs,createTutorialLabel:()=>As,getAspectClass:()=>Ht,getRegisteredFontIds:()=>ws,loadAsset:()=>Nn,loadCharacterFrames:()=>Ms,registerFont:()=>vs,resolveFont:()=>te,resolveFontWeight:()=>ne,updateHandAnimation:()=>Ts});module.exports=Er(el);var W=ge(require("three"),1);var he={};function vt(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 wt(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){vt(t,e,!0)}var _=null,V=[],Ie=null;function ga(t){_=t,V=[],Ie!==null&&(clearTimeout(Ie),Ie=null)}function ha(){var t,e,n;return{endpoint:(_==null?void 0:_.endpoint)||"",transport:(_==null?void 0:_.transport)||"beacon",batchSize:(t=_==null?void 0:_.batchSize)!=null?t:10,flushIntervalMs:(e=_==null?void 0:_.flushIntervalMs)!=null?e:300,maxQueue:(n=_==null?void 0:_.maxQueue)!=null?n:200,debug:!!(_!=null&&_.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 Cr(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 Ar(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 Tr(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=Tr(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=Cr(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:Ar(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.18",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,kr=G++,Sa=G++,Ea=G++,Ca=G++,Aa=G++,Ta=G++,La=G++,ka=G++,Ma=G++,_a=G++,Pa=G++,Ia=G++,T=kr;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===Ma}function Da(){return T===_a}function en(){return T===Pa}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=Ma)}catch{}else if(e==="snapchat")try{window.ScPlayableAd&&(T=_a)}catch{}else e==="vungle"?T=Pa:(t==="nucleo"||e==="nucleo")&&(T=Ia)}var xt=ge(require("lottie-web"),1),Fa=xt.default;typeof window!="undefined"&&(window.lottie=xt.default,window.__baseLottie=xt.default);var Mr=require("pixi.js");var nn=require("pixi.js");var _r=null;function an(t){_r=t}Et();St();var Xe=require("pixi.js");Et();var zr=typeof __BUILD_MODE__!="undefined"?__BUILD_MODE__:"undefined",ln=zr;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 $r(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=$r(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 Nr=ge(require("pixi.js"),1);typeof window!="undefined"&&(window.__basePixi=Nr);Ze();var At=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)}},Br=new dn,Gr=new Proxy(Br,{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 qa=require("pixi.js"),Z={width:400,height:600,designWidth:400,scaleFactor:1},et={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*Z.scaleFactor;n(t,Z.width,Z.height,i,a,!0,!1)})}function pn(t,e){console.log(`[SCREEN] updateScreenState called: ${t}x${e}`),Z.width=t,Z.height=e,Z.scaleFactor=Math.min(t/Z.designWidth,1.15),et.scale=Z.scaleFactor,et.position=1,console.log(`[SCREEN] Global multipliers - scale: ${et.scale.toFixed(3)}`),Wr()}var ze={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=ze[t];i&&i[e]!==void 0&&(i[e]=n,console.log(`Updated ${t}.${e} = ${n}`))}function Kr(){return ze}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 Tt(t,e){return typeof t=="number"&&Number.isFinite(t)?t:e}function tt(t,e={x:.5,y:.5}){var n;if(Array.isArray(t))return{x:Tt(t[0],e.x),y:Tt(t[1],e.y)};if(t&&typeof t=="object"){let i=t;return{x:Tt(i.x,e.x),y:Tt(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=tt(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=tt(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=Va,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 Mt(t,e,n=0){return t*e+n}function _t(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,M,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=Mt(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=_t(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=(M=i.offset)==null?void 0:M.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 Va(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*Z.scaleFactor:a;de(t,d),r&&!un.find(p=>p.element===t)&&Vr(t,Va,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,Mt(e,i),U(n)),de(t,a)}function no(t,e,n,i=.1,a=1){ce(t,_t(e,i),U(n)),de(t,a)}function io(t,e,n,i=.05,a=.05,s=1){ce(t,Mt(e,a),kt(n,i)),de(t,s)}function ao(t,e,n,i=.05,a=.05,s=1){ce(t,_t(e,a),kt(n,i)),de(t,s)}function so(t,e,n,i=.05,a=.05,s=1){ce(t,Mt(e,a),Lt(n,i)),de(t,s)}function ro(t,e,n,i=.05,a=.05,s=1){ce(t,_t(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(ze))}function Qe(t){Object.keys(t).forEach(e=>{let n=e;ze[n]&&t[n]&&Object.assign(ze[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||tt,t.resolveScreenAnchorPoint=t.resolveScreenAnchorPoint||gn,t.resolveScreenRatioPoint=t.resolveScreenRatioPoint||hn}yn();function P(t,e){let n=(a,s)=>s===0?a:n(s,a%s),i=n(t,e);return`${t/i}:${e/i}`}var Vc=[{id:"iphone-15-pro-max",label:"iPhone 15 Pro Max",width:430,height:932,category:"iphone",ratio:P(430,932)},{id:"iphone-15-pro",label:"iPhone 15 Pro",width:393,height:852,category:"iphone",ratio:P(393,852)},{id:"iphone-15",label:"iPhone 15",width:393,height:852,category:"iphone",ratio:P(393,852)},{id:"iphone-14",label:"iPhone 14",width:390,height:844,category:"iphone",ratio:P(390,844)},{id:"iphone-se",label:"iPhone SE",width:375,height:667,category:"iphone",ratio:P(375,667)},{id:"iphone-12-mini",label:"iPhone 12 Mini",width:360,height:780,category:"iphone",ratio:P(360,780)}],Wc=[{id:"pixel-8-pro",label:"Pixel 8 Pro",width:448,height:998,category:"android",ratio:P(448,998)},{id:"pixel-8",label:"Pixel 8",width:412,height:915,category:"android",ratio:P(412,915)},{id:"samsung-s24-ultra",label:"Samsung S24 Ultra",width:412,height:915,category:"android",ratio:P(412,915)},{id:"samsung-s24",label:"Samsung S24",width:360,height:780,category:"android",ratio:P(360,780)},{id:"samsung-a54",label:"Samsung A54",width:412,height:915,category:"android",ratio:P(412,915)},{id:"oneplus-12",label:"OnePlus 12",width:412,height:915,category:"android",ratio:P(412,915)}],Yc=[{id:"ipad-pro-12",label:'iPad Pro 12.9"',width:1024,height:1366,category:"tablet",ratio:P(1024,1366)},{id:"ipad-pro-11",label:'iPad Pro 11"',width:834,height:1194,category:"tablet",ratio:P(834,1194)},{id:"ipad-air",label:"iPad Air",width:820,height:1180,category:"tablet",ratio:P(820,1180)},{id:"ipad-mini",label:"iPad Mini",width:768,height:1024,category:"tablet",ratio:P(768,1024)},{id:"samsung-tab-s9",label:"Samsung Tab S9",width:800,height:1280,category:"tablet",ratio:P(800,1280)}],Xa=[{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:P(390,844),mraidScale:.7},{id:"ipad-mini",label:"iPad Mini",width:768,height:1024,category:"playable",ratio:P(768,1024),mraidScale:.7}];var Kc=[...Xa];var yo=Xa[0];Q();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 Pt(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 Qa=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 Qa.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 es=require("@google/genai");async function It(t,e,n=[],i={}){try{console.info("[GEMINI-REAL-SDK] Initializing GoogleGenAI...");let a=new es.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();St();Q();var ns=require("pixi.js");var Eo=require("pixi.js");Q();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:()=>dt,GameObjectManager:()=>Dt,Renderer:()=>ct,ResponsiveUISystem:()=>qe,Transform:()=>lt,animateHandClick:()=>Es,animatePanelEntrance:()=>Ss,createBrushTexture:()=>Ms,createEndGamePanel:()=>xs,createHandTutorial:()=>Cs,createThreeBase:()=>bs,createTutorialLabel:()=>As,getAspectClass:()=>Ht,getRegisteredFontIds:()=>ws,loadAsset:()=>Nn,loadCharacterFrames:()=>_s,registerFont:()=>vs,resolveFont:()=>te,resolveFontWeight:()=>ne,updateHandAnimation:()=>Ts});module.exports=Er(el);var W=ge(require("three"),1);var he={};function vt(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 wt(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){vt(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 Cr(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 Ar(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 Tr(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=Tr(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=Cr(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:Ar(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.21",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,kr=G++,Sa=G++,Ea=G++,Ca=G++,Aa=G++,Ta=G++,La=G++,ka=G++,_a=G++,Ma=G++,Pa=G++,Ia=G++,T=kr;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===_a}function Da(){return T===Ma}function en(){return T===Pa}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=_a)}catch{}else if(e==="snapchat")try{window.ScPlayableAd&&(T=Ma)}catch{}else e==="vungle"?T=Pa:(t==="nucleo"||e==="nucleo")&&(T=Ia)}var xt=ge(require("lottie-web"),1),Fa=xt.default;typeof window!="undefined"&&(window.lottie=xt.default,window.__baseLottie=xt.default);var _r=require("pixi.js");var nn=require("pixi.js");var Mr=null;function an(t){Mr=t}Et();St();var Xe=require("pixi.js");Et();var zr=typeof __BUILD_MODE__!="undefined"?__BUILD_MODE__:"undefined",ln=zr;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 $r(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=$r(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 Nr=ge(require("pixi.js"),1);typeof window!="undefined"&&(window.__basePixi=Nr);Ze();var At=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)}},Br=new dn,Gr=new Proxy(Br,{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 qa=require("pixi.js"),Z={width:400,height:600,designWidth:400,scaleFactor:1},et={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*Z.scaleFactor;n(t,Z.width,Z.height,i,a,!0,!1)})}function pn(t,e){console.log(`[SCREEN] updateScreenState called: ${t}x${e}`),Z.width=t,Z.height=e,Z.scaleFactor=Math.min(t/Z.designWidth,1.15),et.scale=Z.scaleFactor,et.position=1,console.log(`[SCREEN] Global multipliers - scale: ${et.scale.toFixed(3)}`),Wr()}var ze={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=ze[t];i&&i[e]!==void 0&&(i[e]=n,console.log(`Updated ${t}.${e} = ${n}`))}function Kr(){return ze}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 Tt(t,e){return typeof t=="number"&&Number.isFinite(t)?t:e}function tt(t,e={x:.5,y:.5}){var n;if(Array.isArray(t))return{x:Tt(t[0],e.x),y:Tt(t[1],e.y)};if(t&&typeof t=="object"){let i=t;return{x:Tt(i.x,e.x),y:Tt(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=tt(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=tt(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=Va,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 _t(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,_,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=_t(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=(_=i.offset)==null?void 0:_.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 Va(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*Z.scaleFactor:a;de(t,d),r&&!un.find(p=>p.element===t)&&Vr(t,Va,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,_t(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,_t(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,_t(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(ze))}function Qe(t){Object.keys(t).forEach(e=>{let n=e;ze[n]&&t[n]&&Object.assign(ze[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||tt,t.resolveScreenAnchorPoint=t.resolveScreenAnchorPoint||gn,t.resolveScreenRatioPoint=t.resolveScreenRatioPoint||hn}yn();function P(t,e){let n=(a,s)=>s===0?a:n(s,a%s),i=n(t,e);return`${t/i}:${e/i}`}var Vc=[{id:"iphone-15-pro-max",label:"iPhone 15 Pro Max",width:430,height:932,category:"iphone",ratio:P(430,932)},{id:"iphone-15-pro",label:"iPhone 15 Pro",width:393,height:852,category:"iphone",ratio:P(393,852)},{id:"iphone-15",label:"iPhone 15",width:393,height:852,category:"iphone",ratio:P(393,852)},{id:"iphone-14",label:"iPhone 14",width:390,height:844,category:"iphone",ratio:P(390,844)},{id:"iphone-se",label:"iPhone SE",width:375,height:667,category:"iphone",ratio:P(375,667)},{id:"iphone-12-mini",label:"iPhone 12 Mini",width:360,height:780,category:"iphone",ratio:P(360,780)}],Wc=[{id:"pixel-8-pro",label:"Pixel 8 Pro",width:448,height:998,category:"android",ratio:P(448,998)},{id:"pixel-8",label:"Pixel 8",width:412,height:915,category:"android",ratio:P(412,915)},{id:"samsung-s24-ultra",label:"Samsung S24 Ultra",width:412,height:915,category:"android",ratio:P(412,915)},{id:"samsung-s24",label:"Samsung S24",width:360,height:780,category:"android",ratio:P(360,780)},{id:"samsung-a54",label:"Samsung A54",width:412,height:915,category:"android",ratio:P(412,915)},{id:"oneplus-12",label:"OnePlus 12",width:412,height:915,category:"android",ratio:P(412,915)}],Yc=[{id:"ipad-pro-12",label:'iPad Pro 12.9"',width:1024,height:1366,category:"tablet",ratio:P(1024,1366)},{id:"ipad-pro-11",label:'iPad Pro 11"',width:834,height:1194,category:"tablet",ratio:P(834,1194)},{id:"ipad-air",label:"iPad Air",width:820,height:1180,category:"tablet",ratio:P(820,1180)},{id:"ipad-mini",label:"iPad Mini",width:768,height:1024,category:"tablet",ratio:P(768,1024)},{id:"samsung-tab-s9",label:"Samsung Tab S9",width:800,height:1280,category:"tablet",ratio:P(800,1280)}],Xa=[{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:P(390,844),mraidScale:.7},{id:"ipad-mini",label:"iPad Mini",width:768,height:1024,category:"playable",ratio:P(768,1024),mraidScale:.7}];var Kc=[...Xa];var yo=Xa[0];Q();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 Pt(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 Qa=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 Qa.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 es=require("@google/genai");async function It(t,e,n=[],i={}){try{console.info("[GEMINI-REAL-SDK] Initializing GoogleGenAI...");let a=new es.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();St();Q();var ns=require("pixi.js");var Eo=require("pixi.js");Q();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:
@@ -226,7 +226,7 @@ Style guidelines: ${i.summary}`;this.promptInput.value=a,this.currentPrompt=a}}c
226
226
  <button class="asset-crop-apply primary" data-action="apply">Apply Crop</button>
227
227
  </div>
228
228
  </div>
229
- `,this.modal=e,this.attachEventListeners(),this.initializeCanvas()}initializeCanvas(){this.modal&&(this.canvas=this.modal.querySelector(".asset-crop-canvas"),this.canvas&&(this.ctx=this.canvas.getContext("2d"),this.canvas.width=400,this.canvas.height=300))}loadImage(){this.options&&(this.image=new Image,this.image.crossOrigin="anonymous",this.image.onload=()=>{this.initializeCrop(),this.render()},this.image.src=this.options.imageSrc)}initializeCrop(){var i;if(!this.image||!this.canvas)return;let e=this.image.width/this.image.height,n=this.canvas.width/this.canvas.height;e>n?(this.cropHeight=this.image.height,this.cropWidth=this.cropHeight*n,this.cropX=(this.image.width-this.cropWidth)/2,this.cropY=0):(this.cropWidth=this.image.width,this.cropHeight=this.cropWidth/n,this.cropX=0,this.cropY=(this.image.height-this.cropHeight)/2),(i=this.options)!=null&&i.aspectRatio&&this.applyAspectRatio(this.options.aspectRatio),this.fitToCanvas()}applyAspectRatio(e){if(!this.image)return;let n=this.image.width/this.image.height,i=this.cropX+this.cropWidth/2,a=this.cropY+this.cropHeight/2;e>n?(this.cropWidth=Math.min(this.image.width,this.cropHeight*e),this.cropHeight=this.cropWidth/e):(this.cropHeight=Math.min(this.image.height,this.cropWidth/e),this.cropWidth=this.cropHeight*e),this.cropX=Math.max(0,Math.min(this.image.width-this.cropWidth,i-this.cropWidth/2)),this.cropY=Math.max(0,Math.min(this.image.height-this.cropHeight,a-this.cropHeight/2))}fitToCanvas(){if(!this.image||!this.canvas)return;let e=this.canvas.width/this.cropWidth,n=this.canvas.height/this.cropHeight;this.scale=Math.min(e,n)*.9,this.panX=(this.canvas.width-this.cropWidth*this.scale)/2,this.panY=(this.canvas.height-this.cropHeight*this.scale)/2}render(){!this.ctx||!this.image||!this.canvas||(this.ctx.clearRect(0,0,this.canvas.width,this.canvas.height),this.ctx.save(),this.ctx.translate(this.panX,this.panY),this.ctx.scale(this.scale,this.scale),this.ctx.drawImage(this.image,-this.cropX,-this.cropY,this.image.width,this.image.height),this.ctx.restore(),this.drawCropOverlay(),this.updatePreview())}drawCropOverlay(){if(!this.ctx||!this.canvas)return;let e=this.panX,n=this.panY,i=this.cropWidth*this.scale,a=this.cropHeight*this.scale;this.ctx.fillStyle="rgba(0, 0, 0, 0.5)",this.ctx.fillRect(0,0,this.canvas.width,this.canvas.height),this.ctx.clearRect(e,n,i,a),this.ctx.strokeStyle="#ffffff",this.ctx.lineWidth=2,this.ctx.strokeRect(e,n,i,a),this.ctx.fillStyle="#ffffff";let s=8;[[e,n],[e+i-s,n],[e,n+a-s],[e+i-s,n+a-s]].forEach(([o,l])=>{var d;(d=this.ctx)==null||d.fillRect(o,l,s,s)})}updatePreview(){if(!this.modal||!this.image)return;let e=this.modal.querySelector(".asset-crop-preview-canvas");if(!e)return;let n=e.getContext("2d");if(!n)return;let i=150;e.width=i,e.height=i;let a=i/this.cropWidth,s=i/this.cropHeight,r=Math.min(a,s),o=this.cropWidth*r,l=this.cropHeight*r,d=(i-o)/2,p=(i-l)/2;n.drawImage(this.image,this.cropX,this.cropY,this.cropWidth,this.cropHeight,d,p,o,l)}attachEventListeners(){if(!this.modal||!this.canvas)return;this.canvas.addEventListener("mousedown",this.handleMouseDown.bind(this)),this.canvas.addEventListener("mousemove",this.handleMouseMove.bind(this)),this.canvas.addEventListener("mouseup",this.handleMouseUp.bind(this)),this.canvas.addEventListener("wheel",this.handleWheel.bind(this)),this.canvas.addEventListener("touchstart",this.handleTouchStart.bind(this)),this.canvas.addEventListener("touchmove",this.handleTouchMove.bind(this)),this.canvas.addEventListener("touchend",this.handleTouchEnd.bind(this));let e=this.modal.querySelector(".asset-crop-zoom-slider");e==null||e.addEventListener("input",i=>{let a=parseFloat(i.target.value);this.setZoom(a)});let n=this.modal.querySelector(".asset-crop-aspect-select");n==null||n.addEventListener("change",i=>{let a=i.target.value;this.setAspectRatio(a)}),this.modal.addEventListener("click",i=>{switch(i.target.dataset.action){case"reset":this.reset();break;case"apply":this.applyCrop();break;case"cancel":case"close":this.close();break}}),this.modal.addEventListener("click",i=>{i.target===this.modal&&this.close()})}handleMouseDown(e){this.isDragging=!0,this.dragStartX=e.clientX,this.dragStartY=e.clientY,this.lastPanX=this.panX,this.lastPanY=this.panY,this.canvas.style.cursor="grabbing"}handleMouseMove(e){if(!this.isDragging)return;let n=e.clientX-this.dragStartX,i=e.clientY-this.dragStartY;this.panX=this.lastPanX+n,this.panY=this.lastPanY+i,this.constrainPan(),this.render()}handleMouseUp(){this.isDragging=!1,this.canvas.style.cursor="grab"}handleWheel(e){e.preventDefault();let n=e.deltaY>0?.9:1.1;this.setZoom(this.scale*n)}handleTouchStart(e){e.touches.length===1&&(this.isDragging=!0,this.dragStartX=e.touches[0].clientX,this.dragStartY=e.touches[0].clientY,this.lastPanX=this.panX,this.lastPanY=this.panY)}handleTouchMove(e){if(!this.isDragging||e.touches.length!==1)return;e.preventDefault();let n=e.touches[0].clientX-this.dragStartX,i=e.touches[0].clientY-this.dragStartY;this.panX=this.lastPanX+n,this.panY=this.lastPanY+i,this.constrainPan(),this.render()}handleTouchEnd(){this.isDragging=!1}setZoom(e){this.scale=Math.max(.1,Math.min(3,e)),this.updateZoomUI(),this.constrainPan(),this.render()}setAspectRatio(e){let n;switch(e){case"1:1":n=1;break;case"4:3":n=4/3;break;case"16:9":n=16/9;break;case"3:2":n=3/2;break;default:n=void 0}n&&this.applyAspectRatio(n),this.fitToCanvas(),this.render()}updateZoomUI(){if(!this.modal)return;let e=this.modal.querySelector(".asset-crop-zoom-value"),n=this.modal.querySelector(".asset-crop-zoom-slider");e&&(e.textContent=`${this.scale.toFixed(1)}x`),n&&(n.value=this.scale.toString())}constrainPan(){if(!this.canvas)return;let e=this.cropWidth*this.scale,n=this.cropHeight*this.scale;this.panX=Math.max(this.canvas.width-e,Math.min(0,this.panX)),this.panY=Math.max(this.canvas.height-n,Math.min(0,this.panY))}reset(){this.initializeCrop(),this.render()}applyCrop(){var a;if(!this.image||!((a=this.options)!=null&&a.onCrop))return;let e=document.createElement("canvas"),n=e.getContext("2d");if(!n)return;e.width=this.cropWidth,e.height=this.cropHeight,n.drawImage(this.image,this.cropX,this.cropY,this.cropWidth,this.cropHeight,0,0,this.cropWidth,this.cropHeight);let i=e.toDataURL("image/png");this.options.onCrop(i),this.close()}close(){this.modal&&this.modal.parentNode&&this.modal.parentNode.removeChild(this.modal);let e=this.options;this.modal=null,this.canvas=null,this.ctx=null,this.image=null,this.options=null,e!=null&&e.onCancel&&e.onCancel()}};window.openAssetCrop=function(t){new Ln().open(t)};Q();var ke=require("pixi.js");Q();Q();Q();var ss=ge(require("lottie-web"),1);an(Fa);typeof window!="undefined"&&!window.lottie&&(window.lottie=ss.default);yn();Q();var kn=xa.version,Ho=new Set(["init","boot","view","ready","start","pause","resume","complete","error","engagement","first_interaction","retry","cta_show","cta_click","cta_dismiss","clickout","conversion","session_time","level_time","load_time","level_start","level_complete","level_fail","checkpoint","reward","tutorial_start","tutorial_complete","tutorial_skip","ab_assign","fps","memory","asset_load_start","asset_load_complete"]);wa();var us={mechanic_id:"TODO_mechanic_id",variant_id:"TODO_variant_id",deployment_id:"TODO_deployment_id",export_id:"TODO_export_id",profile_id:"TODO_profile_id",instance_id:"default"},gs=Math.random().toString(36).slice(2),Ne=null,He={...us},hs="web_embed",In={},it,Mn=!1,nt=!1,st=!1,ms=!1,zn=1,Ot=0,$t=!1,pe=!1,De="",Fe=Math.floor(window.innerWidth),Be=Math.floor(window.innerHeight),jn=Fe>Be,ue=!1,at=!1,rs=!1,os=!1,_n=!1,Rt=null,Me=null,On=!1,Rn=!1,jt=new Map;function fs(){if(!Me)return null;let t=Date.now()-Me;return!Number.isFinite(t)||t<0?null:t}function Pn(t){if(On)return;let e=fs();e!==null&&(On=!0,x("session_time",{duration_ms:e,reason:t}))}function ls(){if(Ne)return Ne;let t=document.createElement("div");return t.id="handler-root",t.setAttribute("data-handler-root","true"),document.body.appendChild(t),Ne=t,t}function zt(t){switch(t){case"interaction":return"engagement";case"finish":return"complete";case"install":return"cta_click";default:return t}}function ys(t,e){return{event_name:t,ts:Date.now(),session_id:gs,deployment_id:He.deployment_id,variant_id:He.variant_id,export_profile_id:He.profile_id,instance_id:He.instance_id||"default",env:hs==="mraid"?"mraid":"web",attribution:it,payload:e}}function x(t,e){let n=zt(t),i=ys(n,e);Qt(i,!!In.analytics),wt(n,i),n!==t&&wt(t,i)}function rt(){Rt&&(Rt(Fe,Be),Rt=null)}function Ge(t){zn=t,x("volume",t)}function Ue(t){t&&(ms=!0),!st&&(st=!0,x("pause"),Ge(0))}function ot(t){!t&&ms||st&&(st=!1,x("resume"),Ge(zn))}function ye(t,e){Fe=Math.floor(t||window.innerWidth),Be=Math.floor(e||window.innerHeight),jn=Fe>Be,x("resize",{width:Fe,height:Be})}function Do(){if(ja())try{let t=mraid.getMaxSize();ye(t.width,t.height);let e=()=>{mraid.isViewable()&&mraid.getState()!=="hidden"?ot():Ue()};if(mraid.addEventListener("viewableChange",e),mraid.addEventListener("stateChange",e),mraid.addEventListener("sizeChange",()=>{let n=mraid.getMaxSize();ye(n.width,n.height)}),mraid.getAudioVolume){let n=mraid.getAudioVolume();Ge(n?1:0)}if(mraid.addEventListener("audioVolumeChange",n=>{n!==null&&Ge(n>0?1:0)}),mraid.addEventListener("error",(n,i)=>{console.warn("mraid error:",n,"action:",i)}),$t=!0,mraid.isViewable()&&mraid.getState()!=="hidden")ue=!0,x("boot"),x("view"),x("ready"),pe=!0,rt();else{let n=()=>{ue=!0,x("boot"),x("view"),x("ready"),pe=!0,rt()};mraid.addEventListener("ready",n)}}catch(t){console.warn("MRAID hook skipped",t)}}function No(){if(Oa())try{let t=dapi.getScreenSize();ye(t.width,t.height),dapi.addEventListener("viewableChange",n=>{n.isViewable?ot():Ue()}),dapi.addEventListener("adResized",n=>{let i=dapi.getScreenSize();ye(n.width||i.width,n.height||i.height)});let e=dapi.getAudioVolume();if(Ge(e?1:0),dapi.addEventListener("audioVolumeChange",n=>Ge(n?1:0)),$t=!0,dapi.isViewable())ue=!0,x("boot"),x("view"),x("ready"),pe=!0,rt();else{let n=()=>{ue=!0,x("boot"),x("view"),x("ready"),pe=!0,rt()};dapi.addEventListener("ready",n)}}catch(t){console.warn("DAPI hook skipped",t)}}function cs(){let t=()=>{ue||document.visibilityState==="visible"&&(document.readyState==="complete"||document.readyState==="interactive")&&(ue=!0,x("boot"),x("view"),x("ready"),pe=!0,rt(),at&&(at=!1,ee.start()))};window.addEventListener("resize",()=>ye()),document.addEventListener("visibilitychange",()=>{document.visibilityState==="visible"?(ot(),t()):Ue()}),document.readyState==="complete"||document.readyState==="interactive"?t():window.addEventListener("load",t),$t=!0}function Fo(){let t=e=>{typeof TouchEvent!="undefined"&&e instanceof TouchEvent&&(rs=!0),!(rs&&e instanceof MouseEvent)&&(Ot+=1,Rn||(Rn=!0,x("first_interaction",{count:Ot})),x("interaction",Ot))};document.addEventListener("mousedown",t),document.addEventListener("touchstart",t)}function ds(t){var i,a,s,r,o,l,d,p,c,g,u,y;let e=typeof AD_PROTOCOL!="undefined"?AD_PROTOCOL:"none";if((typeof AD_NETWORK!="undefined"?AD_NETWORK:"web_embed")==="google")try{(i=window.ExitApi)==null||i.exit();return}catch{}if(e==="mraid"&&typeof mraid!="undefined")mraid.open(t||"");else if(e==="dapi"&&typeof dapi!="undefined")dapi.openStoreUrl();else if(Oe())(s=(a=window.TJ_API)==null?void 0:a.click)==null||s.call(a);else if(Ra())(o=(r=window.FbPlayableAd)==null?void 0:r.onCTAClick)==null||o.call(r);else if(Da())(d=(l=window.ScPlayableAd)==null?void 0:l.onCTAClick)==null||d.call(l);else if(Ha())try{(c=(p=window.smxTracking)==null?void 0:p.redirect)==null||c.call(p)}catch(h){console.warn("Smadex redirect failed",h)}else if(za()){let h=window.ExitApi;h&&typeof h.exit=="function"?h.exit(t||De||""):t&&window.open(t)}else je()?(g=window.install)==null||g.call(window):$a()?(u=window.openAppStore)==null||u.call(window):en()?(y=parent==null?void 0:parent.postMessage)==null||y.call(parent,"download","*"):t&&window.open(t)}function Bo(){let t=typeof AD_NETWORK!="undefined"?AD_NETWORK:"web_embed",e=n=>{if(!n)return;let i=new Image;i.src=n};if(t==="bigabid"){let n=window.BIGABID_BIDTIMEMACROS;if(!n)return;B("view",()=>e(n.mraid_viewable)),B("start",()=>e(n.game_viewable)),B("engagement",()=>e(n.engagement));let i=()=>e(n.complete);B("complete",i),vt("engagement",a=>{var s;((s=a==null?void 0:a.payload)==null?void 0:s.count)>3&&i()}),B("cta_click",()=>e(n.click))}else if(t==="inmobi"){let n=window.INMOBI_DSPMACROS;if(!n)return;B("view",()=>e(n.Ad_Load_Start)),B("start",()=>e(n.Ad_Viewable)),B("engagement",()=>e(n.First_Engagement)),B("complete",()=>e(n.Gameplay_Complete)),B("cta_click",()=>e(n.DSP_Click)),B("start",()=>{[5,10,15,20,25,30].forEach(i=>setTimeout(()=>e(n[`Spent_${i}_Seconds`]),i*1e3))})}}function Go(){if(!Oe())return;let t=window.TJ_API;t&&t.setPlayableAPI&&t.setPlayableAPI({skipAd:()=>{try{ee.finish()}catch(e){console.warn("Tapjoy skip failed",e)}}})}function ps(){var e,n,i;let t=window.TJ_API;(e=t==null?void 0:t.objectiveComplete)==null||e.call(t),(n=t==null?void 0:t.playableFinished)==null||n.call(t),(i=t==null?void 0:t.gameplayFinished)==null||i.call(t)}function Uo(){je()&&(window.mintGameStart=()=>{ot(!0),ye()},window.mintGameClose=()=>{Ue(!0)})}function qo(){if(!tn())return;let t=window.NUC;!t||!t.trigger||(ee.on("cta_click",()=>{var e,n;return(n=(e=t.trigger).convert)==null?void 0:n.call(e,De)}),ee.on("complete",()=>{var e,n;return(n=(e=t.trigger).tryAgain)==null?void 0:n.call(e)}))}var ee={init(t={},e){var n;if(hs=t.profile||"web_embed",In=t.consent||{},He={...us,...t.ids||{}},Ne=t.rootEl||Ne,it=void 0,ga((n=t.telemetry)!=null&&n.endpoint?t.telemetry:null),Me=null,On=!1,Rn=!1,jt.clear(),De=t.destinationUrl||(/android/i.test(navigator.userAgent)?"https://play.google.com/store":"https://www.apple.com/app-store/"),e&&(Rt=e),x("init"),document.body.oncontextmenu=()=>!1,ls(),Wo(Ne),Na(),Do(),No(),!$t){if(document.readyState==="complete")cs();else if(!os){os=!0;let i=()=>{cs(),window.removeEventListener("load",i),document.removeEventListener("DOMContentLoaded",i)};window.addEventListener("load",i),document.addEventListener("DOMContentLoaded",i)}}Fo(),Bo(),Go(),Uo(),qo(),console.log(`%c @handler/playable-sdk %c v${kn} `,"background: var(--ui-console-info); color: var(--ui-white); font-size: 14px; padding: 4px 8px; border-top-left-radius: 4px; border-bottom-left-radius: 4px;","background: var(--ui-console-bg); color: var(--ui-console-text); font-size: 14px; padding: 4px 8px; border-top-right-radius: 4px; border-bottom-right-radius: 4px;"),ue&&!pe&&(x("boot"),x("view"),x("ready"),at&&(at=!1,ee.start()),pe=!0),pe=ue},getRoot(){return ls()},get version(){return kn},get maxWidth(){return Fe},get maxHeight(){return Be},get isLandscape(){return jn},get isReady(){return pe},get isStarted(){return Mn},get isPaused(){return st},get isFinished(){return nt},get volume(){return zn},get interactions(){return Ot},on(t,e){vt(zt(t),e)},off(t,e){Zt(zt(t),e)},start(){var t,e;if(!Mn){if(!ue){at=!0;return}if(Mn=!0,Me||(Me=Date.now()),x("start"),ye(),je())Ue(),(t=window.gameReady)==null||t.call(window);else if(Oe()){let n=window.TJ_API;(e=n==null?void 0:n.setPlayableBuild)==null||e.call(n,{orientation:jn?"landscape":"portrait",buildID:kn})}}},finish(){var t,e;nt||(nt=!0,x("complete"),Pn("complete"),je()?(t=window.gameEnd)==null||t.call(window):en()?(e=parent==null?void 0:parent.postMessage)==null||e.call(parent,"complete","*"):Oe()&&ps())},install(t){if(!nt){nt=!0,Oe()?(ps(),setTimeout(()=>ee.install(t),300)):(x("complete"),setTimeout(()=>ee.install(t),0));return}_n||(_n=!0,setTimeout(()=>_n=!1,500),x("cta_click"),x("conversion"),Pn("cta"),ds(t||De))},emit(t,e){let n=zt(t);if(!Ho.has(n)&&n!=="resize"&&n!=="volume"&&!n.startsWith("custom."))throw new Error(`Event ${t} must be canonical or namespaced as custom.<mechanic_id>.<event>`);let i=ys(n,e);Qt(i,!!In.analytics),wt(n,i)},gameStart(){ee.start()},gameEnd(){ee.finish()},ctaClick(t,e){x("cta_click",{url:t||De,manual:!0}),(e==null?void 0:e.open)!==!1&&ds(t||De)},ctaShow(t){x("cta_show",t)},ctaDismiss(t){x("cta_dismiss",t)},getGameTimeMs(){return fs()},endSession(t="manual"){Pn(t)},setAttribution(t){it=t},abTest(t,e){if(!t)throw new Error("abTest requires experimentId");if(!Array.isArray(e)||e.length<2)throw new Error("abTest requires at least 2 variants");let n=Math.abs(Vo(`${gs}:${t}`))%e.length,i=e[n];return it={...it||{},experiment_id:t},He.variant_id=i,x("ab_assign",{experiment_id:t,variant_id:i}),i},levelStart(t,e){Me||(Me=Date.now()),x("level_start",{level_id:t,...e})},levelComplete(t,e){x("level_complete",{level_id:t,...e})},levelFail(t,e){x("level_fail",{level_id:t,...e})},checkpoint(t,e){x("checkpoint",{checkpoint_id:t,...e})},reward(t,e){x("reward",{reward_id:t,...e})},tutorialStart(t,e){x("tutorial_start",{step_id:t,...e})},tutorialComplete(t,e){x("tutorial_complete",{step_id:t,...e})},tutorialSkip(t,e){x("tutorial_skip",{step_id:t,...e})},timerStart(t){t&&jt.set(t,Date.now())},timerEnd(t,e="custom",n){if(!t)return;let i=jt.get(t);if(!i)return;jt.delete(t);let a=Date.now()-i;if(!(!Number.isFinite(a)||a<0)){if(e==="custom"){x("engagement",{action:"timer",key:t,duration_ms:a,...n});return}x(e,{key:t,duration_ms:a,...n})}},fps(t,e){x("fps",{value:t,...e})},memory(t,e){x("memory",{bytes:t,...e})},assetLoadStart(t,e){x("asset_load_start",{asset_id:t,...e})},assetLoadComplete(t,e){x("asset_load_complete",{asset_id:t,...e})},reportError(t,e,n){x("error",{code:t,message:e,...n})},retry(){var t,e,n;if(je())(t=window.gameRetry)==null||t.call(window);else if(tn()){let i=window.NUC;(n=(e=i==null?void 0:i.trigger)==null?void 0:e.tryAgain)==null||n.call(e)}x("engagement",{action:"retry"})},pause(){Ue(!0)},resume(){ot(!0)},resize(t,e){ye(t,e)}},Re=ee;function Vo(t){let e=2166136261;for(let n=0;n<t.length;n++)e^=t.charCodeAt(n),e=Math.imul(e,16777619);return e|0}function Wo(t){let e=document.createElement("script");e.type="text/javascript",e.textContent=`
229
+ `,this.modal=e,this.attachEventListeners(),this.initializeCanvas()}initializeCanvas(){this.modal&&(this.canvas=this.modal.querySelector(".asset-crop-canvas"),this.canvas&&(this.ctx=this.canvas.getContext("2d"),this.canvas.width=400,this.canvas.height=300))}loadImage(){this.options&&(this.image=new Image,this.image.crossOrigin="anonymous",this.image.onload=()=>{this.initializeCrop(),this.render()},this.image.src=this.options.imageSrc)}initializeCrop(){var i;if(!this.image||!this.canvas)return;let e=this.image.width/this.image.height,n=this.canvas.width/this.canvas.height;e>n?(this.cropHeight=this.image.height,this.cropWidth=this.cropHeight*n,this.cropX=(this.image.width-this.cropWidth)/2,this.cropY=0):(this.cropWidth=this.image.width,this.cropHeight=this.cropWidth/n,this.cropX=0,this.cropY=(this.image.height-this.cropHeight)/2),(i=this.options)!=null&&i.aspectRatio&&this.applyAspectRatio(this.options.aspectRatio),this.fitToCanvas()}applyAspectRatio(e){if(!this.image)return;let n=this.image.width/this.image.height,i=this.cropX+this.cropWidth/2,a=this.cropY+this.cropHeight/2;e>n?(this.cropWidth=Math.min(this.image.width,this.cropHeight*e),this.cropHeight=this.cropWidth/e):(this.cropHeight=Math.min(this.image.height,this.cropWidth/e),this.cropWidth=this.cropHeight*e),this.cropX=Math.max(0,Math.min(this.image.width-this.cropWidth,i-this.cropWidth/2)),this.cropY=Math.max(0,Math.min(this.image.height-this.cropHeight,a-this.cropHeight/2))}fitToCanvas(){if(!this.image||!this.canvas)return;let e=this.canvas.width/this.cropWidth,n=this.canvas.height/this.cropHeight;this.scale=Math.min(e,n)*.9,this.panX=(this.canvas.width-this.cropWidth*this.scale)/2,this.panY=(this.canvas.height-this.cropHeight*this.scale)/2}render(){!this.ctx||!this.image||!this.canvas||(this.ctx.clearRect(0,0,this.canvas.width,this.canvas.height),this.ctx.save(),this.ctx.translate(this.panX,this.panY),this.ctx.scale(this.scale,this.scale),this.ctx.drawImage(this.image,-this.cropX,-this.cropY,this.image.width,this.image.height),this.ctx.restore(),this.drawCropOverlay(),this.updatePreview())}drawCropOverlay(){if(!this.ctx||!this.canvas)return;let e=this.panX,n=this.panY,i=this.cropWidth*this.scale,a=this.cropHeight*this.scale;this.ctx.fillStyle="rgba(0, 0, 0, 0.5)",this.ctx.fillRect(0,0,this.canvas.width,this.canvas.height),this.ctx.clearRect(e,n,i,a),this.ctx.strokeStyle="#ffffff",this.ctx.lineWidth=2,this.ctx.strokeRect(e,n,i,a),this.ctx.fillStyle="#ffffff";let s=8;[[e,n],[e+i-s,n],[e,n+a-s],[e+i-s,n+a-s]].forEach(([o,l])=>{var d;(d=this.ctx)==null||d.fillRect(o,l,s,s)})}updatePreview(){if(!this.modal||!this.image)return;let e=this.modal.querySelector(".asset-crop-preview-canvas");if(!e)return;let n=e.getContext("2d");if(!n)return;let i=150;e.width=i,e.height=i;let a=i/this.cropWidth,s=i/this.cropHeight,r=Math.min(a,s),o=this.cropWidth*r,l=this.cropHeight*r,d=(i-o)/2,p=(i-l)/2;n.drawImage(this.image,this.cropX,this.cropY,this.cropWidth,this.cropHeight,d,p,o,l)}attachEventListeners(){if(!this.modal||!this.canvas)return;this.canvas.addEventListener("mousedown",this.handleMouseDown.bind(this)),this.canvas.addEventListener("mousemove",this.handleMouseMove.bind(this)),this.canvas.addEventListener("mouseup",this.handleMouseUp.bind(this)),this.canvas.addEventListener("wheel",this.handleWheel.bind(this)),this.canvas.addEventListener("touchstart",this.handleTouchStart.bind(this)),this.canvas.addEventListener("touchmove",this.handleTouchMove.bind(this)),this.canvas.addEventListener("touchend",this.handleTouchEnd.bind(this));let e=this.modal.querySelector(".asset-crop-zoom-slider");e==null||e.addEventListener("input",i=>{let a=parseFloat(i.target.value);this.setZoom(a)});let n=this.modal.querySelector(".asset-crop-aspect-select");n==null||n.addEventListener("change",i=>{let a=i.target.value;this.setAspectRatio(a)}),this.modal.addEventListener("click",i=>{switch(i.target.dataset.action){case"reset":this.reset();break;case"apply":this.applyCrop();break;case"cancel":case"close":this.close();break}}),this.modal.addEventListener("click",i=>{i.target===this.modal&&this.close()})}handleMouseDown(e){this.isDragging=!0,this.dragStartX=e.clientX,this.dragStartY=e.clientY,this.lastPanX=this.panX,this.lastPanY=this.panY,this.canvas.style.cursor="grabbing"}handleMouseMove(e){if(!this.isDragging)return;let n=e.clientX-this.dragStartX,i=e.clientY-this.dragStartY;this.panX=this.lastPanX+n,this.panY=this.lastPanY+i,this.constrainPan(),this.render()}handleMouseUp(){this.isDragging=!1,this.canvas.style.cursor="grab"}handleWheel(e){e.preventDefault();let n=e.deltaY>0?.9:1.1;this.setZoom(this.scale*n)}handleTouchStart(e){e.touches.length===1&&(this.isDragging=!0,this.dragStartX=e.touches[0].clientX,this.dragStartY=e.touches[0].clientY,this.lastPanX=this.panX,this.lastPanY=this.panY)}handleTouchMove(e){if(!this.isDragging||e.touches.length!==1)return;e.preventDefault();let n=e.touches[0].clientX-this.dragStartX,i=e.touches[0].clientY-this.dragStartY;this.panX=this.lastPanX+n,this.panY=this.lastPanY+i,this.constrainPan(),this.render()}handleTouchEnd(){this.isDragging=!1}setZoom(e){this.scale=Math.max(.1,Math.min(3,e)),this.updateZoomUI(),this.constrainPan(),this.render()}setAspectRatio(e){let n;switch(e){case"1:1":n=1;break;case"4:3":n=4/3;break;case"16:9":n=16/9;break;case"3:2":n=3/2;break;default:n=void 0}n&&this.applyAspectRatio(n),this.fitToCanvas(),this.render()}updateZoomUI(){if(!this.modal)return;let e=this.modal.querySelector(".asset-crop-zoom-value"),n=this.modal.querySelector(".asset-crop-zoom-slider");e&&(e.textContent=`${this.scale.toFixed(1)}x`),n&&(n.value=this.scale.toString())}constrainPan(){if(!this.canvas)return;let e=this.cropWidth*this.scale,n=this.cropHeight*this.scale;this.panX=Math.max(this.canvas.width-e,Math.min(0,this.panX)),this.panY=Math.max(this.canvas.height-n,Math.min(0,this.panY))}reset(){this.initializeCrop(),this.render()}applyCrop(){var a;if(!this.image||!((a=this.options)!=null&&a.onCrop))return;let e=document.createElement("canvas"),n=e.getContext("2d");if(!n)return;e.width=this.cropWidth,e.height=this.cropHeight,n.drawImage(this.image,this.cropX,this.cropY,this.cropWidth,this.cropHeight,0,0,this.cropWidth,this.cropHeight);let i=e.toDataURL("image/png");this.options.onCrop(i),this.close()}close(){this.modal&&this.modal.parentNode&&this.modal.parentNode.removeChild(this.modal);let e=this.options;this.modal=null,this.canvas=null,this.ctx=null,this.image=null,this.options=null,e!=null&&e.onCancel&&e.onCancel()}};window.openAssetCrop=function(t){new Ln().open(t)};Q();var ke=require("pixi.js");Q();Q();Q();var ss=ge(require("lottie-web"),1);an(Fa);typeof window!="undefined"&&!window.lottie&&(window.lottie=ss.default);yn();Q();var kn=xa.version,Ho=new Set(["init","boot","view","ready","start","pause","resume","complete","error","engagement","first_interaction","retry","cta_show","cta_click","cta_dismiss","clickout","conversion","session_time","level_time","load_time","level_start","level_complete","level_fail","checkpoint","reward","tutorial_start","tutorial_complete","tutorial_skip","ab_assign","fps","memory","asset_load_start","asset_load_complete"]);wa();var us={mechanic_id:"TODO_mechanic_id",variant_id:"TODO_variant_id",deployment_id:"TODO_deployment_id",export_id:"TODO_export_id",profile_id:"TODO_profile_id",instance_id:"default"},gs=Math.random().toString(36).slice(2),Ne=null,He={...us},hs="web_embed",In={},it,_n=!1,nt=!1,st=!1,ms=!1,zn=1,Ot=0,$t=!1,pe=!1,De="",Fe=Math.floor(window.innerWidth),Be=Math.floor(window.innerHeight),jn=Fe>Be,ue=!1,at=!1,rs=!1,os=!1,Mn=!1,Rt=null,_e=null,On=!1,Rn=!1,jt=new Map;function fs(){if(!_e)return null;let t=Date.now()-_e;return!Number.isFinite(t)||t<0?null:t}function Pn(t){if(On)return;let e=fs();e!==null&&(On=!0,x("session_time",{duration_ms:e,reason:t}))}function ls(){if(Ne)return Ne;let t=document.createElement("div");return t.id="handler-root",t.setAttribute("data-handler-root","true"),document.body.appendChild(t),Ne=t,t}function zt(t){switch(t){case"interaction":return"engagement";case"finish":return"complete";case"install":return"cta_click";default:return t}}function ys(t,e){return{event_name:t,ts:Date.now(),session_id:gs,deployment_id:He.deployment_id,variant_id:He.variant_id,export_profile_id:He.profile_id,instance_id:He.instance_id||"default",env:hs==="mraid"?"mraid":"web",attribution:it,payload:e}}function x(t,e){let n=zt(t),i=ys(n,e);Qt(i,!!In.analytics),wt(n,i),n!==t&&wt(t,i)}function rt(){Rt&&(Rt(Fe,Be),Rt=null)}function Ge(t){zn=t,x("volume",t)}function Ue(t){t&&(ms=!0),!st&&(st=!0,x("pause"),Ge(0))}function ot(t){!t&&ms||st&&(st=!1,x("resume"),Ge(zn))}function ye(t,e){Fe=Math.floor(t||window.innerWidth),Be=Math.floor(e||window.innerHeight),jn=Fe>Be,x("resize",{width:Fe,height:Be})}function Do(){if(ja())try{let t=mraid.getMaxSize();ye(t.width,t.height);let e=()=>{mraid.isViewable()&&mraid.getState()!=="hidden"?ot():Ue()};if(mraid.addEventListener("viewableChange",e),mraid.addEventListener("stateChange",e),mraid.addEventListener("sizeChange",()=>{let n=mraid.getMaxSize();ye(n.width,n.height)}),mraid.getAudioVolume){let n=mraid.getAudioVolume();Ge(n?1:0)}if(mraid.addEventListener("audioVolumeChange",n=>{n!==null&&Ge(n>0?1:0)}),mraid.addEventListener("error",(n,i)=>{console.warn("mraid error:",n,"action:",i)}),$t=!0,mraid.isViewable()&&mraid.getState()!=="hidden")ue=!0,x("boot"),x("view"),x("ready"),pe=!0,rt();else{let n=()=>{ue=!0,x("boot"),x("view"),x("ready"),pe=!0,rt()};mraid.addEventListener("ready",n)}}catch(t){console.warn("MRAID hook skipped",t)}}function No(){if(Oa())try{let t=dapi.getScreenSize();ye(t.width,t.height),dapi.addEventListener("viewableChange",n=>{n.isViewable?ot():Ue()}),dapi.addEventListener("adResized",n=>{let i=dapi.getScreenSize();ye(n.width||i.width,n.height||i.height)});let e=dapi.getAudioVolume();if(Ge(e?1:0),dapi.addEventListener("audioVolumeChange",n=>Ge(n?1:0)),$t=!0,dapi.isViewable())ue=!0,x("boot"),x("view"),x("ready"),pe=!0,rt();else{let n=()=>{ue=!0,x("boot"),x("view"),x("ready"),pe=!0,rt()};dapi.addEventListener("ready",n)}}catch(t){console.warn("DAPI hook skipped",t)}}function cs(){let t=()=>{ue||document.visibilityState==="visible"&&(document.readyState==="complete"||document.readyState==="interactive")&&(ue=!0,x("boot"),x("view"),x("ready"),pe=!0,rt(),at&&(at=!1,ee.start()))};window.addEventListener("resize",()=>ye()),document.addEventListener("visibilitychange",()=>{document.visibilityState==="visible"?(ot(),t()):Ue()}),document.readyState==="complete"||document.readyState==="interactive"?t():window.addEventListener("load",t),$t=!0}function Fo(){let t=e=>{typeof TouchEvent!="undefined"&&e instanceof TouchEvent&&(rs=!0),!(rs&&e instanceof MouseEvent)&&(Ot+=1,Rn||(Rn=!0,x("first_interaction",{count:Ot})),x("interaction",Ot))};document.addEventListener("mousedown",t),document.addEventListener("touchstart",t)}function ds(t){var i,a,s,r,o,l,d,p,c,g,u,y;let e=typeof AD_PROTOCOL!="undefined"?AD_PROTOCOL:"none";if((typeof AD_NETWORK!="undefined"?AD_NETWORK:"web_embed")==="google")try{(i=window.ExitApi)==null||i.exit();return}catch{}if(e==="mraid"&&typeof mraid!="undefined")mraid.open(t||"");else if(e==="dapi"&&typeof dapi!="undefined")dapi.openStoreUrl();else if(Oe())(s=(a=window.TJ_API)==null?void 0:a.click)==null||s.call(a);else if(Ra())(o=(r=window.FbPlayableAd)==null?void 0:r.onCTAClick)==null||o.call(r);else if(Da())(d=(l=window.ScPlayableAd)==null?void 0:l.onCTAClick)==null||d.call(l);else if(Ha())try{(c=(p=window.smxTracking)==null?void 0:p.redirect)==null||c.call(p)}catch(h){console.warn("Smadex redirect failed",h)}else if(za()){let h=window.ExitApi;h&&typeof h.exit=="function"?h.exit(t||De||""):t&&window.open(t)}else je()?(g=window.install)==null||g.call(window):$a()?(u=window.openAppStore)==null||u.call(window):en()?(y=parent==null?void 0:parent.postMessage)==null||y.call(parent,"download","*"):t&&window.open(t)}function Bo(){let t=typeof AD_NETWORK!="undefined"?AD_NETWORK:"web_embed",e=n=>{if(!n)return;let i=new Image;i.src=n};if(t==="bigabid"){let n=window.BIGABID_BIDTIMEMACROS;if(!n)return;B("view",()=>e(n.mraid_viewable)),B("start",()=>e(n.game_viewable)),B("engagement",()=>e(n.engagement));let i=()=>e(n.complete);B("complete",i),vt("engagement",a=>{var s;((s=a==null?void 0:a.payload)==null?void 0:s.count)>3&&i()}),B("cta_click",()=>e(n.click))}else if(t==="inmobi"){let n=window.INMOBI_DSPMACROS;if(!n)return;B("view",()=>e(n.Ad_Load_Start)),B("start",()=>e(n.Ad_Viewable)),B("engagement",()=>e(n.First_Engagement)),B("complete",()=>e(n.Gameplay_Complete)),B("cta_click",()=>e(n.DSP_Click)),B("start",()=>{[5,10,15,20,25,30].forEach(i=>setTimeout(()=>e(n[`Spent_${i}_Seconds`]),i*1e3))})}}function Go(){if(!Oe())return;let t=window.TJ_API;t&&t.setPlayableAPI&&t.setPlayableAPI({skipAd:()=>{try{ee.finish()}catch(e){console.warn("Tapjoy skip failed",e)}}})}function ps(){var e,n,i;let t=window.TJ_API;(e=t==null?void 0:t.objectiveComplete)==null||e.call(t),(n=t==null?void 0:t.playableFinished)==null||n.call(t),(i=t==null?void 0:t.gameplayFinished)==null||i.call(t)}function Uo(){je()&&(window.mintGameStart=()=>{ot(!0),ye()},window.mintGameClose=()=>{Ue(!0)})}function qo(){if(!tn())return;let t=window.NUC;!t||!t.trigger||(ee.on("cta_click",()=>{var e,n;return(n=(e=t.trigger).convert)==null?void 0:n.call(e,De)}),ee.on("complete",()=>{var e,n;return(n=(e=t.trigger).tryAgain)==null?void 0:n.call(e)}))}var ee={init(t={},e){var n;if(hs=t.profile||"web_embed",In=t.consent||{},He={...us,...t.ids||{}},Ne=t.rootEl||Ne,it=void 0,ga((n=t.telemetry)!=null&&n.endpoint?t.telemetry:null),_e=null,On=!1,Rn=!1,jt.clear(),De=t.destinationUrl||(/android/i.test(navigator.userAgent)?"https://play.google.com/store":"https://www.apple.com/app-store/"),e&&(Rt=e),x("init"),document.body.oncontextmenu=()=>!1,ls(),Wo(Ne),Na(),Do(),No(),!$t){if(document.readyState==="complete")cs();else if(!os){os=!0;let i=()=>{cs(),window.removeEventListener("load",i),document.removeEventListener("DOMContentLoaded",i)};window.addEventListener("load",i),document.addEventListener("DOMContentLoaded",i)}}Fo(),Bo(),Go(),Uo(),qo(),console.log(`%c @handler/playable-sdk %c v${kn} `,"background: var(--ui-console-info); color: var(--ui-white); font-size: 14px; padding: 4px 8px; border-top-left-radius: 4px; border-bottom-left-radius: 4px;","background: var(--ui-console-bg); color: var(--ui-console-text); font-size: 14px; padding: 4px 8px; border-top-right-radius: 4px; border-bottom-right-radius: 4px;"),ue&&!pe&&(x("boot"),x("view"),x("ready"),at&&(at=!1,ee.start()),pe=!0),pe=ue},getRoot(){return ls()},get version(){return kn},get maxWidth(){return Fe},get maxHeight(){return Be},get isLandscape(){return jn},get isReady(){return pe},get isStarted(){return _n},get isPaused(){return st},get isFinished(){return nt},get volume(){return zn},get interactions(){return Ot},on(t,e){vt(zt(t),e)},off(t,e){Zt(zt(t),e)},start(){var t,e;if(!_n){if(!ue){at=!0;return}if(_n=!0,_e||(_e=Date.now()),x("start"),ye(),je())Ue(),(t=window.gameReady)==null||t.call(window);else if(Oe()){let n=window.TJ_API;(e=n==null?void 0:n.setPlayableBuild)==null||e.call(n,{orientation:jn?"landscape":"portrait",buildID:kn})}}},finish(){var t,e;nt||(nt=!0,x("complete"),Pn("complete"),je()?(t=window.gameEnd)==null||t.call(window):en()?(e=parent==null?void 0:parent.postMessage)==null||e.call(parent,"complete","*"):Oe()&&ps())},install(t){if(!nt){nt=!0,Oe()?(ps(),setTimeout(()=>ee.install(t),300)):(x("complete"),setTimeout(()=>ee.install(t),0));return}Mn||(Mn=!0,setTimeout(()=>Mn=!1,500),x("cta_click"),x("conversion"),Pn("cta"),ds(t||De))},emit(t,e){let n=zt(t);if(!Ho.has(n)&&n!=="resize"&&n!=="volume"&&!n.startsWith("custom."))throw new Error(`Event ${t} must be canonical or namespaced as custom.<mechanic_id>.<event>`);let i=ys(n,e);Qt(i,!!In.analytics),wt(n,i)},gameStart(){ee.start()},gameEnd(){ee.finish()},ctaClick(t,e){x("cta_click",{url:t||De,manual:!0}),(e==null?void 0:e.open)!==!1&&ds(t||De)},ctaShow(t){x("cta_show",t)},ctaDismiss(t){x("cta_dismiss",t)},getGameTimeMs(){return fs()},endSession(t="manual"){Pn(t)},setAttribution(t){it=t},abTest(t,e){if(!t)throw new Error("abTest requires experimentId");if(!Array.isArray(e)||e.length<2)throw new Error("abTest requires at least 2 variants");let n=Math.abs(Vo(`${gs}:${t}`))%e.length,i=e[n];return it={...it||{},experiment_id:t},He.variant_id=i,x("ab_assign",{experiment_id:t,variant_id:i}),i},levelStart(t,e){_e||(_e=Date.now()),x("level_start",{level_id:t,...e})},levelComplete(t,e){x("level_complete",{level_id:t,...e})},levelFail(t,e){x("level_fail",{level_id:t,...e})},checkpoint(t,e){x("checkpoint",{checkpoint_id:t,...e})},reward(t,e){x("reward",{reward_id:t,...e})},tutorialStart(t,e){x("tutorial_start",{step_id:t,...e})},tutorialComplete(t,e){x("tutorial_complete",{step_id:t,...e})},tutorialSkip(t,e){x("tutorial_skip",{step_id:t,...e})},timerStart(t){t&&jt.set(t,Date.now())},timerEnd(t,e="custom",n){if(!t)return;let i=jt.get(t);if(!i)return;jt.delete(t);let a=Date.now()-i;if(!(!Number.isFinite(a)||a<0)){if(e==="custom"){x("engagement",{action:"timer",key:t,duration_ms:a,...n});return}x(e,{key:t,duration_ms:a,...n})}},fps(t,e){x("fps",{value:t,...e})},memory(t,e){x("memory",{bytes:t,...e})},assetLoadStart(t,e){x("asset_load_start",{asset_id:t,...e})},assetLoadComplete(t,e){x("asset_load_complete",{asset_id:t,...e})},reportError(t,e,n){x("error",{code:t,message:e,...n})},retry(){var t,e,n;if(je())(t=window.gameRetry)==null||t.call(window);else if(tn()){let i=window.NUC;(n=(e=i==null?void 0:i.trigger)==null?void 0:e.tryAgain)==null||n.call(e)}x("engagement",{action:"retry"})},pause(){Ue(!0)},resume(){ot(!0)},resize(t,e){ye(t,e)}},Re=ee;function Vo(t){let e=2166136261;for(let n=0;n<t.length;n++)e^=t.charCodeAt(n),e=Math.imul(e,16777619);return e|0}function Wo(t){let e=document.createElement("script");e.type="text/javascript",e.textContent=`
230
230
  (function(){
231
231
  var events = ['touchstart','touchend','mousedown','keydown'];
232
232
  function unlock(){
@@ -265,13 +265,13 @@ Style guidelines: ${i.summary}`;this.promptInput.value=a,this.currentPrompt=a}}c
265
265
  overflow: hidden !important;
266
266
  `,t.appendChild(r);let o=document.createElement("div");o.setAttribute("style",["position:absolute","inset:0","width:100%","height:100%","min-width:100%","min-height:100%","max-width:100%","max-height:100%","pointer-events:auto","box-sizing:border-box","margin:0","padding:0","overflow:hidden"].join(";")),r.appendChild(o);let l=new W.Scene,{width:d,height:p}=n(),c=new W.AmbientLight(16777215,.6);l.add(c);let g=new W.DirectionalLight(16777215,.8);g.position.set(5,5,5),g.castShadow=!1,l.add(g);let u=new W.DirectionalLight(16777215,.3);u.position.set(-5,0,5),l.add(u);let y=new W.PerspectiveCamera(55,d/p,.1,100);y.position.set(0,0,3.2),y.lookAt(0,0,0),y.updateMatrixWorld();let h=new W.WebGLRenderer({antialias:!0,alpha:!0,preserveDrawingBuffer:!0});h.setPixelRatio(window.devicePixelRatio||1),h.setSize(d,p),h.setClearColor(0,0),h.domElement.style.position="absolute",h.domElement.style.top="0",h.domElement.style.left="0",h.domElement.style.right="0",h.domElement.style.bottom="0",h.domElement.style.width="100%",h.domElement.style.height="100%",h.domElement.style.minWidth="100%",h.domElement.style.minHeight="100%",h.domElement.style.maxWidth="100%",h.domElement.style.maxHeight="100%",h.domElement.style.display="block",h.domElement.style.pointerEvents="auto",h.domElement.style.margin="0",h.domElement.style.padding="0",h.domElement.style.boxSizing="border-box",o.appendChild(h.domElement);let w=m=>{var k;let f=t.getBoundingClientRect(),S=window.getComputedStyle(t);console.log("[THREE-BASE] applySize called:",{providedSize:m,rootRect:{width:f.width,height:f.height},clientSize:{width:t.clientWidth,height:t.clientHeight},styleSize:{width:t.style.width,height:t.style.height},computedStyle:{width:S.width,height:S.height,transform:S.transform,scale:S.scale},rendererCurrentSize:{width:h.domElement.width,height:h.domElement.height},rendererStyleSize:{width:h.domElement.style.width,height:h.domElement.style.height},stackTrace:(k=new Error().stack)==null?void 0:k.split(`
267
267
  `).slice(1,4).join(`
268
- `)});let E=f.width,C=f.height;if((E<=0||!isFinite(E))&&(console.warn("[THREE-BASE] Invalid boundingRect.width, using clientWidth fallback",{boundingRectWidth:f.width,clientWidth:t.clientWidth}),E=t.clientWidth||window.innerWidth||320),(C<=0||!isFinite(C))&&(console.warn("[THREE-BASE] Invalid boundingRect.height, using clientHeight fallback",{boundingRectHeight:f.height,clientHeight:t.clientHeight}),C=t.clientHeight||window.innerHeight||480),typeof(m==null?void 0:m.width)=="number"&&m.width>0){let R=Math.abs(m.width-f.width),j=f.width*.1;R>j?console.warn("[THREE-BASE] Provided width ignored (too different from container):",{provided:m.width,container:f.width,difference:R,tolerance:j,willUse:"container size (boundingRect)"}):(E=m.width,console.log("[THREE-BASE] Using provided width (within tolerance):",{provided:m.width,container:f.width}))}if(typeof(m==null?void 0:m.height)=="number"&&m.height>0){let R=Math.abs(m.height-f.height),j=f.height*.1;R>j?console.warn("[THREE-BASE] Provided height ignored (too different from container):",{provided:m.height,container:f.height,difference:R,tolerance:j,willUse:"container size (boundingRect)"}):(C=m.height,console.log("[THREE-BASE] Using provided height (within tolerance):",{provided:m.height,container:f.height}))}(E<=0||C<=0||!isFinite(E)||!isFinite(C))&&(console.warn("[THREE-BASE] Invalid size in applySize, using fallback",{newWidth:E,newHeight:C,size:m,rootRect:f}),E=f.width||t.clientWidth||320,C=f.height||t.clientHeight||480);let M=Math.floor(E),I=Math.floor(C);console.log("[THREE-BASE] applySize setting renderer size:",{finalWidth:M,finalHeight:I,aspectRatio:M/I,beforeRendererSize:{width:h.domElement.width,height:h.domElement.height},beforeRendererStyle:{width:h.domElement.style.width,height:h.domElement.style.height}}),h.setSize(M,I),h.setPixelRatio(window.devicePixelRatio||1),y.aspect=M/I,y.updateProjectionMatrix();let L=t.getBoundingClientRect();console.log("[THREE-BASE] applySize after setting:",{rendererSize:{width:h.domElement.width,height:h.domElement.height},rendererStyle:{width:h.domElement.style.width,height:h.domElement.style.height},containerRect:{width:L.width,height:L.height},cameraAspect:y.aspect,matches:{width:Math.abs(h.domElement.width-L.width)<1,height:Math.abs(h.domElement.height-L.height)<1},sizeDifference:{width:h.domElement.width-L.width,height:h.domElement.height-L.height}})};requestAnimationFrame(()=>{requestAnimationFrame(()=>{w()})});let v=!1;Re.on("pause",()=>{v=!0,document.querySelectorAll("audio").forEach(f=>f.pause())}),Re.on("resume",()=>{v=!1,document.querySelectorAll("audio").forEach(f=>{f.currentTime>0&&!f.ended&&f.play().catch(()=>{})})});let b=new qe(t,r);return Re.on("resize",({payload:m})=>{console.log("[THREE-BASE] Handler resize event received:",{payload:m,timestamp:Date.now(),rootRect:t.getBoundingClientRect()}),w({width:m==null?void 0:m.width,height:m==null?void 0:m.height}),b.updateLayout()}),window.addEventListener("resize",()=>{console.log("[THREE-BASE] Window resize event received:",{timestamp:Date.now(),windowSize:{width:window.innerWidth,height:window.innerHeight},rootRect:t.getBoundingClientRect()}),w(),b.updateLayout()}),{scene:l,camera:y,renderer:h,uiSystem:b,applySize:w}}var z=ge(require("three"),1),lt=class{constructor(e){var n,i;this.position=(e==null?void 0:e.position)||{x:0,y:0},this.scale=(n=e==null?void 0:e.scale)!=null?n:1,this.rotation=(i=e==null?void 0:e.rotation)!=null?i:0}update(e){e.position!==void 0&&(this.position={...e.position}),e.scale!==void 0&&(this.scale=e.scale),e.rotation!==void 0&&(this.rotation=e.rotation)}syncToThree(e){let n=e.position.z,i=n===0||!isFinite(n)?.5:n;e.position.set(this.position.x,this.position.y,i),e.scale.set(this.scale,this.scale,this.scale),e.rotation.z=this.rotation}},ct=class{constructor(e){var n,i,a,s;this.z_index=(n=e==null?void 0:e.z_index)!=null?n:0,this.alpha=(i=e==null?void 0:e.alpha)!=null?i:1,this.visible=(a=e==null?void 0:e.visible)!=null?a:!0,this.tint=(s=e==null?void 0:e.tint)!=null?s:null}update(e){e.z_index!==void 0&&(this.z_index=e.z_index),e.alpha!==void 0&&(this.alpha=e.alpha),e.visible!==void 0&&(this.visible=e.visible),e.tint!==void 0&&(this.tint=e.tint)}syncToThree(e){if(e.renderOrder=this.z_index,e.visible=this.visible,e instanceof z.Mesh&&e.material&&(Array.isArray(e.material)?e.material.forEach(n=>{n instanceof z.Material&&(n.opacity=this.alpha,n.transparent=this.alpha<1)}):e.material instanceof z.Material&&(e.material.opacity=this.alpha,e.material.transparent=this.alpha<1)),this.tint!==null&&e instanceof z.Mesh&&e.material){let n=typeof this.tint=="string"?new z.Color(this.tint):new z.Color(this.tint);Array.isArray(e.material)?e.material.forEach(i=>{(i instanceof z.MeshBasicMaterial||i instanceof z.MeshStandardMaterial)&&i.color.copy(n)}):(e.material instanceof z.MeshBasicMaterial||e.material instanceof z.MeshStandardMaterial)&&e.material.color.copy(n)}}},dt=class{constructor(e,n,i,a){this.instanceId=e,this.objectConfig=n,this.threeObject=i,this._config=a,this.transform=new lt(a.transform),this.renderer=new ct(a.render),this.sync()}sync(){this.transform.syncToThree(this.threeObject),this.renderer.syncToThree(this.threeObject)}updateConfig(e){this._config=e,e.transform&&this.transform.update(e.transform),e.render&&this.renderer.update(e.render),this.sync()}getComponent(e){return this._config[e]}getPosition(){return{...this.transform.position}}setPosition(e,n){this.transform.position={x:e,y:n},this.transform.syncToThree(this.threeObject)}getAlpha(){return this.renderer.alpha}setAlpha(e){this.renderer.alpha=e,this.renderer.syncToThree(this.threeObject)}getVisible(){return this.renderer.visible}setVisible(e){this.renderer.visible=e,this.renderer.syncToThree(this.threeObject)}},Dt=class{constructor(e){this.objects=new Map;this.config=e}create(e,n){let i=this.config.objects.get(e);if(!i)throw new Error(`Object config not found: ${e}`);let a=new dt(e,i.object_config||e,n,i);return this.objects.set(e,a),a}get(e){return this.objects.get(e)}updateConfig(e){this.config=e;for(let[n,i]of this.objects.entries()){let a=e.objects.get(n);a&&i.updateConfig(a)}}getAll(){return Array.from(this.objects.values())}remove(e){this.objects.delete(e)}clear(){this.objects.clear()}};var Nt={"brand.primary":{family:"Arial, sans-serif",weight:"400"},"brand.warning":{family:"Arial Black, Arial, sans-serif",weight:"900"},"brand.heading":{family:"Arial Black, Arial, sans-serif",weight:"800"},"brand.body":{family:"Arial, sans-serif",weight:"400"}};function te(t){let e=Nt[t];return e?e.family:(console.warn(`Font ID "${t}" not found in registry, using fallback`),"Arial, sans-serif")}function ne(t){var n;let e=Nt[t];return e&&(n=e.weight)!=null?n:"400"}function vs(t,e){Nt[t]=e}function ws(){return Object.keys(Nt)}var Ve=ge(require("three"),1);function _e(t){return{element:t,get alpha(){return parseFloat(t.style.opacity||"1")},set alpha(e){t.style.opacity=e.toString()},get visible(){return t.style.display!=="none"},set visible(e){t.style.display=e?"":"none"},position:{set(e,n){t.style.left=`${e}px`,t.style.top=`${n}px`},get x(){return parseFloat(t.style.left||"0")},get y(){return parseFloat(t.style.top||"0")}},scale:{set(e,n){t.style.transform=`scale(${e})`},get x(){let e=t.style.transform.match(/scale\(([^)]+)\)/);return e?parseFloat(e[1]):1}}}}function xs(t,e,n,i){var ni,ii,ai,si,ri,oi,li,ci,di,pi,ui,gi,hi,mi,fi,yi,bi,vi,wi,xi,Si,Ei,Ci,Ai,Ti,Li,ki,Mi,_i,Pi,Ii,ji,Oi,Ri,zi,$i,Hi,Di,Ni,Fi,Bi,Gi,Ui,qi,Vi,Wi,Yi,Ki,Xi,Ji,Zi,Qi,ea,ta,na,ia,aa,sa,ra,oa,la;let a=t.objects.get("ui_endgame_1"),s=t.objects.get("ui_endgame_logo_1"),r=t.objects.get("ui_endgame_title_1"),o=t.objects.get("ui_endgame_subtitle_1"),l=t.objects.get("ui_endgame_footer_1"),d=t.objects.get("ui_endgame_cta_1"),p=t.objects.get("ui_endgame_cta_hint_1"),c=t.objects.get("ui_endgame_hand_1"),g=t.engine.runtime||{},u=((ni=a==null?void 0:a.gameplay)==null?void 0:ni.tuning)||{},y=(a==null?void 0:a.render)||{},h=i.getBoundingClientRect(),w=h.width>0?h.width*.9:320,v=h.height>0?h.height*.85:400,b=Math.min((ii=u.panel_width)!=null?ii:320,w),m=Math.min((ai=u.panel_height)!=null?ai:400,v),f=(si=u.panel_padding)!=null?si:32,S=(ri=u.panel_radius)!=null?ri:24,E=y.background_color||u.panel_bg_color||"#1a0a0a",C=y.background_alpha!==void 0&&y.background_alpha!==null?y.background_alpha:(oi=u.panel_bg_alpha)!=null?oi:.98,M=y.border_color||u.panel_border_color||"#ffffff",I=(li=u.panel_border_width)!=null?li:2,L=(ci=u.panel_border_alpha)!=null?ci:.3,k=document.createElement("div");k.style.cssText=`
268
+ `)});let E=f.width,C=f.height;if((E<=0||!isFinite(E))&&(console.warn("[THREE-BASE] Invalid boundingRect.width, using clientWidth fallback",{boundingRectWidth:f.width,clientWidth:t.clientWidth}),E=t.clientWidth||window.innerWidth||320),(C<=0||!isFinite(C))&&(console.warn("[THREE-BASE] Invalid boundingRect.height, using clientHeight fallback",{boundingRectHeight:f.height,clientHeight:t.clientHeight}),C=t.clientHeight||window.innerHeight||480),typeof(m==null?void 0:m.width)=="number"&&m.width>0){let R=Math.abs(m.width-f.width),j=f.width*.1;R>j?console.warn("[THREE-BASE] Provided width ignored (too different from container):",{provided:m.width,container:f.width,difference:R,tolerance:j,willUse:"container size (boundingRect)"}):(E=m.width,console.log("[THREE-BASE] Using provided width (within tolerance):",{provided:m.width,container:f.width}))}if(typeof(m==null?void 0:m.height)=="number"&&m.height>0){let R=Math.abs(m.height-f.height),j=f.height*.1;R>j?console.warn("[THREE-BASE] Provided height ignored (too different from container):",{provided:m.height,container:f.height,difference:R,tolerance:j,willUse:"container size (boundingRect)"}):(C=m.height,console.log("[THREE-BASE] Using provided height (within tolerance):",{provided:m.height,container:f.height}))}(E<=0||C<=0||!isFinite(E)||!isFinite(C))&&(console.warn("[THREE-BASE] Invalid size in applySize, using fallback",{newWidth:E,newHeight:C,size:m,rootRect:f}),E=f.width||t.clientWidth||320,C=f.height||t.clientHeight||480);let _=Math.floor(E),I=Math.floor(C);console.log("[THREE-BASE] applySize setting renderer size:",{finalWidth:_,finalHeight:I,aspectRatio:_/I,beforeRendererSize:{width:h.domElement.width,height:h.domElement.height},beforeRendererStyle:{width:h.domElement.style.width,height:h.domElement.style.height}}),h.setSize(_,I),h.setPixelRatio(window.devicePixelRatio||1),y.aspect=_/I,y.updateProjectionMatrix();let L=t.getBoundingClientRect();console.log("[THREE-BASE] applySize after setting:",{rendererSize:{width:h.domElement.width,height:h.domElement.height},rendererStyle:{width:h.domElement.style.width,height:h.domElement.style.height},containerRect:{width:L.width,height:L.height},cameraAspect:y.aspect,matches:{width:Math.abs(h.domElement.width-L.width)<1,height:Math.abs(h.domElement.height-L.height)<1},sizeDifference:{width:h.domElement.width-L.width,height:h.domElement.height-L.height}})};requestAnimationFrame(()=>{requestAnimationFrame(()=>{w()})});let v=!1;Re.on("pause",()=>{v=!0,document.querySelectorAll("audio").forEach(f=>f.pause())}),Re.on("resume",()=>{v=!1,document.querySelectorAll("audio").forEach(f=>{f.currentTime>0&&!f.ended&&f.play().catch(()=>{})})});let b=new qe(t,r);return Re.on("resize",({payload:m})=>{console.log("[THREE-BASE] Handler resize event received:",{payload:m,timestamp:Date.now(),rootRect:t.getBoundingClientRect()}),w({width:m==null?void 0:m.width,height:m==null?void 0:m.height}),b.updateLayout()}),window.addEventListener("resize",()=>{console.log("[THREE-BASE] Window resize event received:",{timestamp:Date.now(),windowSize:{width:window.innerWidth,height:window.innerHeight},rootRect:t.getBoundingClientRect()}),w(),b.updateLayout()}),{scene:l,camera:y,renderer:h,uiSystem:b,applySize:w}}var z=ge(require("three"),1),lt=class{constructor(e){var n,i;this.position=(e==null?void 0:e.position)||{x:0,y:0},this.scale=(n=e==null?void 0:e.scale)!=null?n:1,this.rotation=(i=e==null?void 0:e.rotation)!=null?i:0}update(e){e.position!==void 0&&(this.position={...e.position}),e.scale!==void 0&&(this.scale=e.scale),e.rotation!==void 0&&(this.rotation=e.rotation)}syncToThree(e){let n=e.position.z,i=n===0||!isFinite(n)?.5:n;e.position.set(this.position.x,this.position.y,i),e.scale.set(this.scale,this.scale,this.scale),e.rotation.z=this.rotation}},ct=class{constructor(e){var n,i,a,s;this.z_index=(n=e==null?void 0:e.z_index)!=null?n:0,this.alpha=(i=e==null?void 0:e.alpha)!=null?i:1,this.visible=(a=e==null?void 0:e.visible)!=null?a:!0,this.tint=(s=e==null?void 0:e.tint)!=null?s:null}update(e){e.z_index!==void 0&&(this.z_index=e.z_index),e.alpha!==void 0&&(this.alpha=e.alpha),e.visible!==void 0&&(this.visible=e.visible),e.tint!==void 0&&(this.tint=e.tint)}syncToThree(e){if(e.renderOrder=this.z_index,e.visible=this.visible,e instanceof z.Mesh&&e.material&&(Array.isArray(e.material)?e.material.forEach(n=>{n instanceof z.Material&&(n.opacity=this.alpha,n.transparent=this.alpha<1)}):e.material instanceof z.Material&&(e.material.opacity=this.alpha,e.material.transparent=this.alpha<1)),this.tint!==null&&e instanceof z.Mesh&&e.material){let n=typeof this.tint=="string"?new z.Color(this.tint):new z.Color(this.tint);Array.isArray(e.material)?e.material.forEach(i=>{(i instanceof z.MeshBasicMaterial||i instanceof z.MeshStandardMaterial)&&i.color.copy(n)}):(e.material instanceof z.MeshBasicMaterial||e.material instanceof z.MeshStandardMaterial)&&e.material.color.copy(n)}}},dt=class{constructor(e,n,i,a){this.instanceId=e,this.objectConfig=n,this.threeObject=i,this._config=a,this.transform=new lt(a.transform),this.renderer=new ct(a.render),this.sync()}sync(){this.transform.syncToThree(this.threeObject),this.renderer.syncToThree(this.threeObject)}updateConfig(e){this._config=e,e.transform&&this.transform.update(e.transform),e.render&&this.renderer.update(e.render),this.sync()}getComponent(e){return this._config[e]}getPosition(){return{...this.transform.position}}setPosition(e,n){this.transform.position={x:e,y:n},this.transform.syncToThree(this.threeObject)}getAlpha(){return this.renderer.alpha}setAlpha(e){this.renderer.alpha=e,this.renderer.syncToThree(this.threeObject)}getVisible(){return this.renderer.visible}setVisible(e){this.renderer.visible=e,this.renderer.syncToThree(this.threeObject)}},Dt=class{constructor(e){this.objects=new Map;this.config=e}create(e,n){let i=this.config.objects.get(e);if(!i)throw new Error(`Object config not found: ${e}`);let a=new dt(e,i.object_config||e,n,i);return this.objects.set(e,a),a}get(e){return this.objects.get(e)}updateConfig(e){this.config=e;for(let[n,i]of this.objects.entries()){let a=e.objects.get(n);a&&i.updateConfig(a)}}getAll(){return Array.from(this.objects.values())}remove(e){this.objects.delete(e)}clear(){this.objects.clear()}};var Nt={"brand.primary":{family:"Arial, sans-serif",weight:"400"},"brand.warning":{family:"Arial Black, Arial, sans-serif",weight:"900"},"brand.heading":{family:"Arial Black, Arial, sans-serif",weight:"800"},"brand.body":{family:"Arial, sans-serif",weight:"400"}};function te(t){let e=Nt[t];return e?e.family:(console.warn(`Font ID "${t}" not found in registry, using fallback`),"Arial, sans-serif")}function ne(t){var n;let e=Nt[t];return e&&(n=e.weight)!=null?n:"400"}function vs(t,e){Nt[t]=e}function ws(){return Object.keys(Nt)}var Ve=ge(require("three"),1);function Me(t){return{element:t,get alpha(){return parseFloat(t.style.opacity||"1")},set alpha(e){t.style.opacity=e.toString()},get visible(){return t.style.display!=="none"},set visible(e){t.style.display=e?"":"none"},position:{set(e,n){t.style.left=`${e}px`,t.style.top=`${n}px`},get x(){return parseFloat(t.style.left||"0")},get y(){return parseFloat(t.style.top||"0")}},scale:{set(e,n){t.style.transform=`scale(${e})`},get x(){let e=t.style.transform.match(/scale\(([^)]+)\)/);return e?parseFloat(e[1]):1}}}}function xs(t,e,n,i){var ni,ii,ai,si,ri,oi,li,ci,di,pi,ui,gi,hi,mi,fi,yi,bi,vi,wi,xi,Si,Ei,Ci,Ai,Ti,Li,ki,_i,Mi,Pi,Ii,ji,Oi,Ri,zi,$i,Hi,Di,Ni,Fi,Bi,Gi,Ui,qi,Vi,Wi,Yi,Ki,Xi,Ji,Zi,Qi,ea,ta,na,ia,aa,sa,ra,oa,la;let a=t.objects.get("ui_endgame_1"),s=t.objects.get("ui_endgame_logo_1"),r=t.objects.get("ui_endgame_title_1"),o=t.objects.get("ui_endgame_subtitle_1"),l=t.objects.get("ui_endgame_footer_1"),d=t.objects.get("ui_endgame_cta_1"),p=t.objects.get("ui_endgame_cta_hint_1"),c=t.objects.get("ui_endgame_hand_1"),g=t.engine.runtime||{},u=((ni=a==null?void 0:a.gameplay)==null?void 0:ni.tuning)||{},y=(a==null?void 0:a.render)||{},h=i.getBoundingClientRect(),w=h.width>0?h.width*.9:320,v=h.height>0?h.height*.85:400,b=Math.min((ii=u.panel_width)!=null?ii:320,w),m=Math.min((ai=u.panel_height)!=null?ai:400,v),f=(si=u.panel_padding)!=null?si:32,S=(ri=u.panel_radius)!=null?ri:24,E=y.background_color||u.panel_bg_color||"#1a0a0a",C=y.background_alpha!==void 0&&y.background_alpha!==null?y.background_alpha:(oi=u.panel_bg_alpha)!=null?oi:.98,_=y.border_color||u.panel_border_color||"#ffffff",I=(li=u.panel_border_width)!=null?li:2,L=(ci=u.panel_border_alpha)!=null?ci:.3,k=document.createElement("div");k.style.cssText=`
269
269
  position: absolute;
270
270
  width: ${b}px;
271
271
  height: ${m}px;
272
272
  background: ${E};
273
273
  opacity: ${C};
274
- border: ${I}px solid ${M};
274
+ border: ${I}px solid ${_};
275
275
  border-opacity: ${L};
276
276
  border-radius: ${S}px;
277
277
  display: block;
@@ -284,7 +284,7 @@ Style guidelines: ${i.summary}`;this.promptInput.value=a,this.currentPrompt=a}}c
284
284
  z-index: 1000;
285
285
  box-sizing: border-box;
286
286
  padding: ${f}px;
287
- `,i.appendChild(k);let R=_e(k);R.element=k;let j=((di=s==null?void 0:s.gameplay)==null?void 0:di.tuning)||{},be=(s==null?void 0:s.transform)||{},q=(pi=j.logo_size)!=null?pi:56,Y=(ui=be.scale)!=null?ui:1,Pe=(hi=(gi=be.offset)==null?void 0:gi.y)!=null?hi:-130,pt=(mi=j.logo_alpha)!=null?mi:1,Ps=new Ve.SpriteMaterial({map:n||void 0,transparent:!0,alphaTest:.1}),K=new Ve.Sprite(Ps);K.position.set(0,Pe,0),K.material.opacity=0;let ut=0,gt=0;if(n){let $=n.image;ut=($==null?void 0:$.width)||100,gt=($==null?void 0:$.height)||100}if(ut>0&&gt>0){let $=ut/gt,Xt,Jt;$>1?(Xt=q,Jt=q/$):(Jt=q,Xt=q*$);let fr=Xt/ut*Y,yr=Jt/gt*Y;K.scale.set(fr,yr,1)}else{let $=q/100*Y;K.scale.set($,$,1)}K.targetAlpha=pt,K.baseScaleX=K.scale.x,K.baseScaleY=K.scale.y;let H=r==null?void 0:r.ui,ie=((fi=r==null?void 0:r.gameplay)==null?void 0:fi.tuning)||{},Is=(H==null?void 0:H.text)||"MISSION ACCOMPLISHED",Fn=(H==null?void 0:H.font)||"brand.heading",Bt=(H==null?void 0:H.fontSize)||24,js=(yi=H==null?void 0:H.letterSpacing)!=null?yi:1,ht=(bi=r==null?void 0:r.render)==null?void 0:bi.tint,Os=typeof ht=="string"?ht:ht?`#${ht.toString(16).padStart(6,"0")}`:"#00FF88",Rs=b-f*2-30,zs=ie.font_weight_override?ie.font_weight_override:ne(Fn),ve=document.createElement("div");ve.textContent=Is,ve.style.cssText=`
287
+ `,i.appendChild(k);let R=Me(k);R.element=k;let j=((di=s==null?void 0:s.gameplay)==null?void 0:di.tuning)||{},be=(s==null?void 0:s.transform)||{},q=(pi=j.logo_size)!=null?pi:56,Y=(ui=be.scale)!=null?ui:1,Pe=(hi=(gi=be.offset)==null?void 0:gi.y)!=null?hi:-130,pt=(mi=j.logo_alpha)!=null?mi:1,Ps=new Ve.SpriteMaterial({map:n||void 0,transparent:!0,alphaTest:.1}),K=new Ve.Sprite(Ps);K.position.set(0,Pe,0),K.material.opacity=0;let ut=0,gt=0;if(n){let $=n.image;ut=($==null?void 0:$.width)||100,gt=($==null?void 0:$.height)||100}if(ut>0&&gt>0){let $=ut/gt,Xt,Jt;$>1?(Xt=q,Jt=q/$):(Jt=q,Xt=q*$);let fr=Xt/ut*Y,yr=Jt/gt*Y;K.scale.set(fr,yr,1)}else{let $=q/100*Y;K.scale.set($,$,1)}K.targetAlpha=pt,K.baseScaleX=K.scale.x,K.baseScaleY=K.scale.y;let H=r==null?void 0:r.ui,ie=((fi=r==null?void 0:r.gameplay)==null?void 0:fi.tuning)||{},Is=(H==null?void 0:H.text)||"MISSION ACCOMPLISHED",Fn=(H==null?void 0:H.font)||"brand.heading",Bt=(H==null?void 0:H.fontSize)||24,js=(yi=H==null?void 0:H.letterSpacing)!=null?yi:1,ht=(bi=r==null?void 0:r.render)==null?void 0:bi.tint,Os=typeof ht=="string"?ht:ht?`#${ht.toString(16).padStart(6,"0")}`:"#00FF88",Rs=b-f*2-30,zs=ie.font_weight_override?ie.font_weight_override:ne(Fn),ve=document.createElement("div");ve.textContent=Is,ve.style.cssText=`
288
288
  font-family: ${te(Fn)};
289
289
  font-size: ${Bt}px;
290
290
  font-weight: ${zs};
@@ -298,7 +298,7 @@ Style guidelines: ${i.summary}`;this.promptInput.value=a,this.currentPrompt=a}}c
298
298
  transform: translate(-50%, -50%);
299
299
  white-space: nowrap;
300
300
  max-width: ${Rs}px;
301
- `;let Bn=f+30,$s=((Ci=u.title_offset_y)!=null?Ci:Bn+Bt/2)+((Ai=ie.animation_start_y_offset)!=null?Ai:-20);ve.style.top=`${$s}px`,ve.style.left="50%";let Gn=_e(ve);Gn.element=ve,k.appendChild(ve);let D=o==null?void 0:o.ui,Un=((Ti=o==null?void 0:o.gameplay)==null?void 0:Ti.tuning)||{},Hs=(D==null?void 0:D.text)||"RESCUE COMPLETE",qn=(D==null?void 0:D.font)||"brand.body",Gt=(D==null?void 0:D.fontSize)||11,Ds=(Li=D==null?void 0:D.letterSpacing)!=null?Li:.5,mt=(ki=o==null?void 0:o.render)==null?void 0:ki.tint,Ns=typeof mt=="string"?mt:mt?`#${mt.toString(16).padStart(6,"0")}`:"#B0B0B0",we=document.createElement("div");we.textContent=Hs,we.style.cssText=`
301
+ `;let Bn=f+30,$s=((Ci=u.title_offset_y)!=null?Ci:Bn+Bt/2)+((Ai=ie.animation_start_y_offset)!=null?Ai:-20);ve.style.top=`${$s}px`,ve.style.left="50%";let Gn=Me(ve);Gn.element=ve,k.appendChild(ve);let D=o==null?void 0:o.ui,Un=((Ti=o==null?void 0:o.gameplay)==null?void 0:Ti.tuning)||{},Hs=(D==null?void 0:D.text)||"RESCUE COMPLETE",qn=(D==null?void 0:D.font)||"brand.body",Gt=(D==null?void 0:D.fontSize)||11,Ds=(Li=D==null?void 0:D.letterSpacing)!=null?Li:.5,mt=(ki=o==null?void 0:o.render)==null?void 0:ki.tint,Ns=typeof mt=="string"?mt:mt?`#${mt.toString(16).padStart(6,"0")}`:"#B0B0B0",we=document.createElement("div");we.textContent=Hs,we.style.cssText=`
302
302
  font-family: ${te(qn)};
303
303
  font-size: ${Gt}px;
304
304
  font-weight: ${ne(qn)};
@@ -309,7 +309,7 @@ Style guidelines: ${i.summary}`;this.promptInput.value=a,this.currentPrompt=a}}c
309
309
  position: absolute;
310
310
  transform: translate(-50%, -50%);
311
311
  white-space: nowrap;
312
- `;let Vn=Bn+Bt+15,Fs=((Mi=u.subtitle_offset_y)!=null?Mi:Vn+Gt/2)+((_i=Un.animation_start_y_offset)!=null?_i:-10);we.style.top=`${Fs}px`,we.style.left="50%";let Ut=_e(we);Ut.element=we,Ut.animationStartYOffset=(Pi=Un.animation_start_y_offset)!=null?Pi:-10,k.appendChild(we);let ae=l==null?void 0:l.ui,Wn=((Ii=l==null?void 0:l.gameplay)==null?void 0:Ii.tuning)||{},Bs=(ae==null?void 0:ae.text)||((ji=g.ui)==null?void 0:ji.cta_hint)||"Continue the adventure!",Yn=(ae==null?void 0:ae.font)||"brand.body",Kn=(ae==null?void 0:ae.fontSize)||16,ft=(Oi=l==null?void 0:l.render)==null?void 0:Oi.tint,Gs=typeof ft=="string"?ft:ft?`#${ft.toString(16).padStart(6,"0")}`:"#FFFFFF",Us=(Ri=Wn.max_width)!=null?Ri:b-f*2,qs=(zi=Wn.line_height)!=null?zi:1.4,xe=document.createElement("div");xe.textContent=Bs,xe.style.cssText=`
312
+ `;let Vn=Bn+Bt+15,Fs=((_i=u.subtitle_offset_y)!=null?_i:Vn+Gt/2)+((Mi=Un.animation_start_y_offset)!=null?Mi:-10);we.style.top=`${Fs}px`,we.style.left="50%";let Ut=Me(we);Ut.element=we,Ut.animationStartYOffset=(Pi=Un.animation_start_y_offset)!=null?Pi:-10,k.appendChild(we);let ae=l==null?void 0:l.ui,Wn=((Ii=l==null?void 0:l.gameplay)==null?void 0:Ii.tuning)||{},Bs=(ae==null?void 0:ae.text)||((ji=g.ui)==null?void 0:ji.cta_hint)||"Continue the adventure!",Yn=(ae==null?void 0:ae.font)||"brand.body",Kn=(ae==null?void 0:ae.fontSize)||16,ft=(Oi=l==null?void 0:l.render)==null?void 0:Oi.tint,Gs=typeof ft=="string"?ft:ft?`#${ft.toString(16).padStart(6,"0")}`:"#FFFFFF",Us=(Ri=Wn.max_width)!=null?Ri:b-f*2,qs=(zi=Wn.line_height)!=null?zi:1.4,xe=document.createElement("div");xe.textContent=Bs,xe.style.cssText=`
313
313
  font-family: ${te(Yn)};
314
314
  font-size: ${Kn}px;
315
315
  font-weight: ${ne(Yn)};
@@ -321,7 +321,7 @@ Style guidelines: ${i.summary}`;this.promptInput.value=a,this.currentPrompt=a}}c
321
321
  max-width: ${Us}px;
322
322
  line-height: ${qs};
323
323
  word-wrap: break-word;
324
- `;let Vs=Vn+Gt+30,Ws=($i=u.footer_offset_y)!=null?$i:Vs+Kn/2;xe.style.top=`${Ws}px`,xe.style.left="50%";let qt=_e(xe);qt.element=xe;let Ys=((Hi=l==null?void 0:l.render)==null?void 0:Hi.alpha)!==void 0&&((Di=l==null?void 0:l.render)==null?void 0:Di.alpha)!==null?l.render.alpha:1;qt.targetAlpha=Ys,k.appendChild(xe);let se=((Ni=d==null?void 0:d.gameplay)==null?void 0:Ni.tuning)||{},N=d==null?void 0:d.ui,Ks=(Fi=se.button_width)!=null?Fi:260,Xn=(Bi=se.button_height)!=null?Bi:56,Xs=(Gi=se.button_radius)!=null?Gi:16,Js=se.button_bg_color||((Ui=g.theme)==null?void 0:Ui.cta_background)||"#ffb43b",Zs=(qi=se.button_bg_alpha)!=null?qi:1,Qs=se.button_border_color||"#ffffff",er=(Vi=se.button_border_width)!=null?Vi:2,il=(Wi=se.button_border_alpha)!=null?Wi:.2,Vt=(Yi=u.cta_offset_y)!=null?Yi:m*.7,O=document.createElement("button");O.style.cssText=`
324
+ `;let Vs=Vn+Gt+30,Ws=($i=u.footer_offset_y)!=null?$i:Vs+Kn/2;xe.style.top=`${Ws}px`,xe.style.left="50%";let qt=Me(xe);qt.element=xe;let Ys=((Hi=l==null?void 0:l.render)==null?void 0:Hi.alpha)!==void 0&&((Di=l==null?void 0:l.render)==null?void 0:Di.alpha)!==null?l.render.alpha:1;qt.targetAlpha=Ys,k.appendChild(xe);let se=((Ni=d==null?void 0:d.gameplay)==null?void 0:Ni.tuning)||{},N=d==null?void 0:d.ui,Ks=(Fi=se.button_width)!=null?Fi:260,Xn=(Bi=se.button_height)!=null?Bi:56,Xs=(Gi=se.button_radius)!=null?Gi:16,Js=se.button_bg_color||((Ui=g.theme)==null?void 0:Ui.cta_background)||"#ffb43b",Zs=(qi=se.button_bg_alpha)!=null?qi:1,Qs=se.button_border_color||"#ffffff",er=(Vi=se.button_border_width)!=null?Vi:2,il=(Wi=se.button_border_alpha)!=null?Wi:.2,Vt=(Yi=u.cta_offset_y)!=null?Yi:m*.7,O=document.createElement("button");O.style.cssText=`
325
325
  width: ${Ks}px;
326
326
  height: ${Xn}px;
327
327
  background: ${Js};
@@ -333,7 +333,7 @@ Style guidelines: ${i.summary}`;this.promptInput.value=a,this.currentPrompt=a}}c
333
333
  position: absolute;
334
334
  transform: translate(-50%, -50%);
335
335
  box-shadow: inset 0 0 1px rgba(0,0,0,0.15);
336
- `,O.style.top=`${Vt}px`,O.style.left="50%";let Wt=_e(O);Wt.element=O,Wt.addEventListener=O.addEventListener.bind(O),k.appendChild(O);let tr=(N==null?void 0:N.text)||((Ki=g.ui)==null?void 0:Ki.cta_label_end)||"DOWNLOAD",Jn=(N==null?void 0:N.font)||"brand.heading",nr=(N==null?void 0:N.fontSize)||20,ir=se.button_text_color||((Xi=g.theme)==null?void 0:Xi.cta_text)||"#1a0a0a";O.textContent=tr,O.style.fontFamily=te(Jn),O.style.fontSize=`${nr}px`,O.style.fontWeight=String(ne(Jn)),O.style.color=ir,O.style.letterSpacing=`${(Ji=N==null?void 0:N.letterSpacing)!=null?Ji:1}px`;let Zn=_e(O);Zn.element=O;let F=p==null?void 0:p.ui,Qn=((Zi=p==null?void 0:p.gameplay)==null?void 0:Zi.tuning)||{},ar=(F==null?void 0:F.text)||"Play the full game",ei=(F==null?void 0:F.font)||"brand.body",sr=(F==null?void 0:F.fontSize)||11,rr=(Qi=F==null?void 0:F.letterSpacing)!=null?Qi:0,yt=(ea=p==null?void 0:p.render)==null?void 0:ea.tint,or=typeof yt=="string"?yt:yt?`#${yt.toString(16).padStart(6,"0")}`:"#CCCCCC",Se=document.createElement("div");Se.textContent=ar,Se.style.cssText=`
336
+ `,O.style.top=`${Vt}px`,O.style.left="50%";let Wt=Me(O);Wt.element=O,Wt.addEventListener=O.addEventListener.bind(O),k.appendChild(O);let tr=(N==null?void 0:N.text)||((Ki=g.ui)==null?void 0:Ki.cta_label_end)||"DOWNLOAD",Jn=(N==null?void 0:N.font)||"brand.heading",nr=(N==null?void 0:N.fontSize)||20,ir=se.button_text_color||((Xi=g.theme)==null?void 0:Xi.cta_text)||"#1a0a0a";O.textContent=tr,O.style.fontFamily=te(Jn),O.style.fontSize=`${nr}px`,O.style.fontWeight=String(ne(Jn)),O.style.color=ir,O.style.letterSpacing=`${(Ji=N==null?void 0:N.letterSpacing)!=null?Ji:1}px`;let Zn=Me(O);Zn.element=O;let F=p==null?void 0:p.ui,Qn=((Zi=p==null?void 0:p.gameplay)==null?void 0:Zi.tuning)||{},ar=(F==null?void 0:F.text)||"Play the full game",ei=(F==null?void 0:F.font)||"brand.body",sr=(F==null?void 0:F.fontSize)||11,rr=(Qi=F==null?void 0:F.letterSpacing)!=null?Qi:0,yt=(ea=p==null?void 0:p.render)==null?void 0:ea.tint,or=typeof yt=="string"?yt:yt?`#${yt.toString(16).padStart(6,"0")}`:"#CCCCCC",Se=document.createElement("div");Se.textContent=ar,Se.style.cssText=`
337
337
  font-family: ${te(ei)};
338
338
  font-size: ${sr}px;
339
339
  font-weight: ${ne(ei)};
@@ -344,7 +344,7 @@ Style guidelines: ${i.summary}`;this.promptInput.value=a,this.currentPrompt=a}}c
344
344
  position: absolute;
345
345
  transform: translate(-50%, -50%);
346
346
  white-space: nowrap;
347
- `;let lr=Vt+Xn/2+20,cr=m-f-10,dr=Math.min(lr+((ta=Qn.animation_start_y_offset)!=null?ta:5),cr);Se.style.top=`${dr}px`,Se.style.left="50%";let Yt=_e(Se);Yt.element=Se,Yt.animationStartYOffset=(na=Qn.animation_start_y_offset)!=null?na:5,k.appendChild(Se);let Kt=((ia=c==null?void 0:c.gameplay)==null?void 0:ia.tuning)||{},pr=(aa=Kt.hand_offset_x)!=null?aa:50,ur=(sa=Kt.hand_offset_y)!=null?sa:50,gr=(oa=(ra=c==null?void 0:c.transform)==null?void 0:ra.scale)!=null?oa:.1875,hr=(la=Kt.hand_scale_multiplier)!=null?la:2.5,mr=new Ve.SpriteMaterial({map:e||void 0,transparent:!0,alphaTest:.1}),Ye=new Ve.Sprite(mr),ti=gr*hr*100;return Ye.scale.set(ti,ti,1),Ye.position.set(pr,Vt+ur,0),Ye.material.opacity=0,Ye.visible=!1,{panel:R,logo:K,title:Gn,subtitle:Ut,footer:qt,ctaButton:Wt,ctaText:Zn,ctaHint:Yt,hand:Ye}}function Ss(t,e,n){var E,C,M,I,L,k,R,j;let i=e.objects.get("ui_endgame_1"),a=((E=i==null?void 0:i.gameplay)==null?void 0:E.tuning)||{},s=(C=a.animation_duration_ms)!=null?C:800,r=(M=a.fade_in_duration_ms)!=null?M:600,o=(I=a.scale_animation_intensity)!=null?I:.1,l=(L=a.logo_animation_delay_ms)!=null?L:100,d=(k=a.title_animation_delay_ms)!=null?k:200,p=(R=a.footer_animation_delay_ms)!=null?R:300,c=(j=a.cta_animation_delay_ms)!=null?j:400,{panel:g,logo:u,title:y,subtitle:h,footer:w,ctaButton:v,ctaText:b,ctaHint:m}=t;g.visible=!0,g.element.style.visibility="visible";let f=Date.now(),S=()=>{let be=Date.now()-f,q=Math.min(be/r,1),Y=1-Math.pow(1-q,3);g.alpha=Y,g.element.style.opacity=Y.toString();let Pe=1+o*(1-Y);g.element.style.transform=`translate(-50%, -50%) scale(${Pe})`,q<1?requestAnimationFrame(S):(setTimeout(()=>Yo(u,s,e),l),setTimeout(()=>{Ko(y,s),setTimeout(()=>Xo(h,s),50)},d),setTimeout(()=>Jo(w,s),p),setTimeout(()=>{Zo(v,b,s),setTimeout(()=>Qo(m,s),50),n&&n()},c))};S()}function Yo(t,e,n){var g,u,y,h,w;let i=n==null?void 0:n.objects.get("ui_endgame_logo_1"),s=(u=(((g=i==null?void 0:i.gameplay)==null?void 0:g.tuning)||{}).animation_start_scale)!=null?u:1.2,r=Date.now(),o=t.material.opacity,l=(y=t.targetAlpha)!=null?y:1,d=(h=t.baseScaleX)!=null?h:t.scale.x,p=(w=t.baseScaleY)!=null?w:t.scale.y,c=()=>{let v=Date.now()-r,b=Math.min(v/e,1),m=1-Math.pow(1-b,2);t.material.opacity=o+(l-o)*m;let f=s+(1-s)*m;t.scale.set(d*f,p*f,1),b<1&&requestAnimationFrame(c)};c()}function Ko(t,e){let n=Date.now(),i=parseFloat(t.element.style.opacity||"0"),a=parseFloat(t.element.style.top||"0"),s=()=>{let r=Date.now()-n,o=Math.min(r/e,1),l=1-Math.pow(1-o,2);t.element.style.opacity=(i+(1-i)*l).toString(),t.element.style.top=`${a-20*(1-l)}px`,o<1&&requestAnimationFrame(s)};s()}function Xo(t,e){var o;let n=Date.now(),i=parseFloat(t.element.style.opacity||"0"),a=parseFloat(t.element.style.top||"0"),s=a-((o=t.animationStartYOffset)!=null?o:-10),r=()=>{let l=Date.now()-n,d=Math.min(l/e,1),p=1-Math.pow(1-d,2);t.element.style.opacity=(i+(1-i)*p).toString(),t.element.style.top=`${a+(s-a)*p}px`,d<1&&requestAnimationFrame(r)};r()}function Jo(t,e){var r;let n=Date.now(),i=parseFloat(t.element.style.opacity||"0"),a=(r=t.targetAlpha)!=null?r:1,s=()=>{let o=Date.now()-n,l=Math.min(o/e,1),d=1-Math.pow(1-l,2);t.element.style.opacity=(i+(a-i)*d).toString(),l<1&&requestAnimationFrame(s)};s()}function Zo(t,e,n){let i=Date.now(),a=parseFloat(t.element.style.opacity||"0"),s=()=>{let r=Date.now()-i,o=Math.min(r/n,1),l=1-Math.pow(1-o,2);t.element.style.opacity=(a+(1-a)*l).toString(),e.element.style.opacity=(a+(1-a)*l).toString(),t.element.style.transform=`translate(-50%, -50%) scale(${1+.1*(1-l)})`,o<1&&requestAnimationFrame(s)};s()}function Qo(t,e){var o;let n=Date.now(),i=parseFloat(t.element.style.opacity||"0"),a=parseFloat(t.element.style.top||"0"),s=a-((o=t.animationStartYOffset)!=null?o:5),r=()=>{let l=Date.now()-n,d=Math.min(l/e,1),p=1-Math.pow(1-d,2);t.element.style.opacity=(i+(1-i)*p).toString(),t.element.style.top=`${a+(s-a)*p}px`,d<1&&requestAnimationFrame(r)};r()}function Es(t,e,n,i){var p,c,g,u;let a=n.objects.get("ui_endgame_hand_1"),s=((p=a==null?void 0:a.gameplay)==null?void 0:p.tuning)||{},r=(c=s.click_animation_duration_ms)!=null?c:600,o=(g=s.click_delay_ms)!=null?g:2e3,l=(u=s.click_repeat_delay_ms)!=null?u:3e3,d=()=>{var C,M;t.visible=!0,t.material.opacity=1;let y=t.position.x,h=t.position.y,w=(C=s.hand_offset_x)!=null?C:50,v=(M=s.hand_offset_y)!=null?M:50,b=e.element.getBoundingClientRect(),m=w,f=v,S=Date.now(),E=()=>{var Y,Pe,pt;let I=Date.now()-S,L=Math.min(I/r,1),k=L<.5?2*L*L:1-Math.pow(-2*L+2,2)/2;t.position.set(y+(m-y)*k,h+(f-h)*k,0);let R=(Pe=(Y=a==null?void 0:a.transform)==null?void 0:Y.scale)!=null?Pe:.1875,j=(pt=s.hand_scale_multiplier)!=null?pt:2.5,be=R*j*100,q=be+be*.2*Math.sin(L*Math.PI);t.scale.set(q,q,1),L<1?requestAnimationFrame(E):(e.element.style.transform="translate(-50%, -50%) scale(0.95)",setTimeout(()=>{e.element.style.transform="translate(-50%, -50%) scale(1)",i()},100),setTimeout(()=>{t.material.opacity=0,setTimeout(()=>{t.position.set(y,h,0),d()},l)},500))};E()};setTimeout(d,o)}var Ft=ge(require("three"),1);function Cs(t,e,n){var u,y,h,w,v,b,m;let i=e.objects.get("hand_tutorial_1"),a=((u=i==null?void 0:i.gameplay)==null?void 0:u.tuning)||{},s=(i==null?void 0:i.render)||{},r=(i==null?void 0:i.transform)||{},o=new Ft.SpriteMaterial({map:t||void 0,transparent:!0,alphaTest:.1}),l=new Ft.Sprite(o),d=r.position||{},p=(y=d==null?void 0:d.z)!=null?y:0;l.position.set(n.x+((h=d==null?void 0:d.x)!=null?h:0),n.y+((w=d==null?void 0:d.y)!=null?w:0),p),l.material.opacity=s.alpha!==void 0&&s.alpha!==null?s.alpha:0,l.visible=s.visible!==void 0&&s.visible!==null?s.visible:!1;let c=(v=a.hand_scale_multiplier)!=null?v:2.5,g=(b=r.scale)!=null?b:.1875;return l.scale.set(g*c*100,g*c*100,1),l.renderOrder=(m=s.z_index)!=null?m:99999,l}function As(t){var y,h,w,v,b,m,f,S,E;let e=t.objects.get("ui_tutorial_1"),n=e==null?void 0:e.ui,i=(e==null?void 0:e.render)||{},a=((y=t.engine.runtime)==null?void 0:y.ui_styles)||{},s=((h=t.engine.runtime)==null?void 0:h.ui)||{},r=(n==null?void 0:n.text)||s.tutorial_label||s.label_text||"CLEAN!",o=(n==null?void 0:n.font)||"brand.warning",l=(n==null?void 0:n.fontSize)||a.label_font_size||52,d=(v=n==null?void 0:n.letterSpacing)!=null?v:(w=a.label_letter_spacing)!=null?w:-1,p=(n==null?void 0:n.align)||"center",c=i.tint,g=typeof c=="string"?c:c?`#${c.toString(16).padStart(6,"0")}`:a.label_fill||"#FFF1C1",u=document.createElement("div");return u.textContent=r,u.style.cssText=`
347
+ `;let lr=Vt+Xn/2+20,cr=m-f-10,dr=Math.min(lr+((ta=Qn.animation_start_y_offset)!=null?ta:5),cr);Se.style.top=`${dr}px`,Se.style.left="50%";let Yt=Me(Se);Yt.element=Se,Yt.animationStartYOffset=(na=Qn.animation_start_y_offset)!=null?na:5,k.appendChild(Se);let Kt=((ia=c==null?void 0:c.gameplay)==null?void 0:ia.tuning)||{},pr=(aa=Kt.hand_offset_x)!=null?aa:50,ur=(sa=Kt.hand_offset_y)!=null?sa:50,gr=(oa=(ra=c==null?void 0:c.transform)==null?void 0:ra.scale)!=null?oa:.1875,hr=(la=Kt.hand_scale_multiplier)!=null?la:2.5,mr=new Ve.SpriteMaterial({map:e||void 0,transparent:!0,alphaTest:.1}),Ye=new Ve.Sprite(mr),ti=gr*hr*100;return Ye.scale.set(ti,ti,1),Ye.position.set(pr,Vt+ur,0),Ye.material.opacity=0,Ye.visible=!1,{panel:R,logo:K,title:Gn,subtitle:Ut,footer:qt,ctaButton:Wt,ctaText:Zn,ctaHint:Yt,hand:Ye}}function Ss(t,e,n){var E,C,_,I,L,k,R,j;let i=e.objects.get("ui_endgame_1"),a=((E=i==null?void 0:i.gameplay)==null?void 0:E.tuning)||{},s=(C=a.animation_duration_ms)!=null?C:800,r=(_=a.fade_in_duration_ms)!=null?_:600,o=(I=a.scale_animation_intensity)!=null?I:.1,l=(L=a.logo_animation_delay_ms)!=null?L:100,d=(k=a.title_animation_delay_ms)!=null?k:200,p=(R=a.footer_animation_delay_ms)!=null?R:300,c=(j=a.cta_animation_delay_ms)!=null?j:400,{panel:g,logo:u,title:y,subtitle:h,footer:w,ctaButton:v,ctaText:b,ctaHint:m}=t;g.visible=!0,g.element.style.visibility="visible";let f=Date.now(),S=()=>{let be=Date.now()-f,q=Math.min(be/r,1),Y=1-Math.pow(1-q,3);g.alpha=Y,g.element.style.opacity=Y.toString();let Pe=1+o*(1-Y);g.element.style.transform=`translate(-50%, -50%) scale(${Pe})`,q<1?requestAnimationFrame(S):(setTimeout(()=>Yo(u,s,e),l),setTimeout(()=>{Ko(y,s),setTimeout(()=>Xo(h,s),50)},d),setTimeout(()=>Jo(w,s),p),setTimeout(()=>{Zo(v,b,s),setTimeout(()=>Qo(m,s),50),n&&n()},c))};S()}function Yo(t,e,n){var g,u,y,h,w;let i=n==null?void 0:n.objects.get("ui_endgame_logo_1"),s=(u=(((g=i==null?void 0:i.gameplay)==null?void 0:g.tuning)||{}).animation_start_scale)!=null?u:1.2,r=Date.now(),o=t.material.opacity,l=(y=t.targetAlpha)!=null?y:1,d=(h=t.baseScaleX)!=null?h:t.scale.x,p=(w=t.baseScaleY)!=null?w:t.scale.y,c=()=>{let v=Date.now()-r,b=Math.min(v/e,1),m=1-Math.pow(1-b,2);t.material.opacity=o+(l-o)*m;let f=s+(1-s)*m;t.scale.set(d*f,p*f,1),b<1&&requestAnimationFrame(c)};c()}function Ko(t,e){let n=Date.now(),i=parseFloat(t.element.style.opacity||"0"),a=parseFloat(t.element.style.top||"0"),s=()=>{let r=Date.now()-n,o=Math.min(r/e,1),l=1-Math.pow(1-o,2);t.element.style.opacity=(i+(1-i)*l).toString(),t.element.style.top=`${a-20*(1-l)}px`,o<1&&requestAnimationFrame(s)};s()}function Xo(t,e){var o;let n=Date.now(),i=parseFloat(t.element.style.opacity||"0"),a=parseFloat(t.element.style.top||"0"),s=a-((o=t.animationStartYOffset)!=null?o:-10),r=()=>{let l=Date.now()-n,d=Math.min(l/e,1),p=1-Math.pow(1-d,2);t.element.style.opacity=(i+(1-i)*p).toString(),t.element.style.top=`${a+(s-a)*p}px`,d<1&&requestAnimationFrame(r)};r()}function Jo(t,e){var r;let n=Date.now(),i=parseFloat(t.element.style.opacity||"0"),a=(r=t.targetAlpha)!=null?r:1,s=()=>{let o=Date.now()-n,l=Math.min(o/e,1),d=1-Math.pow(1-l,2);t.element.style.opacity=(i+(a-i)*d).toString(),l<1&&requestAnimationFrame(s)};s()}function Zo(t,e,n){let i=Date.now(),a=parseFloat(t.element.style.opacity||"0"),s=()=>{let r=Date.now()-i,o=Math.min(r/n,1),l=1-Math.pow(1-o,2);t.element.style.opacity=(a+(1-a)*l).toString(),e.element.style.opacity=(a+(1-a)*l).toString(),t.element.style.transform=`translate(-50%, -50%) scale(${1+.1*(1-l)})`,o<1&&requestAnimationFrame(s)};s()}function Qo(t,e){var o;let n=Date.now(),i=parseFloat(t.element.style.opacity||"0"),a=parseFloat(t.element.style.top||"0"),s=a-((o=t.animationStartYOffset)!=null?o:5),r=()=>{let l=Date.now()-n,d=Math.min(l/e,1),p=1-Math.pow(1-d,2);t.element.style.opacity=(i+(1-i)*p).toString(),t.element.style.top=`${a+(s-a)*p}px`,d<1&&requestAnimationFrame(r)};r()}function Es(t,e,n,i){var p,c,g,u;let a=n.objects.get("ui_endgame_hand_1"),s=((p=a==null?void 0:a.gameplay)==null?void 0:p.tuning)||{},r=(c=s.click_animation_duration_ms)!=null?c:600,o=(g=s.click_delay_ms)!=null?g:2e3,l=(u=s.click_repeat_delay_ms)!=null?u:3e3,d=()=>{var C,_;t.visible=!0,t.material.opacity=1;let y=t.position.x,h=t.position.y,w=(C=s.hand_offset_x)!=null?C:50,v=(_=s.hand_offset_y)!=null?_:50,b=e.element.getBoundingClientRect(),m=w,f=v,S=Date.now(),E=()=>{var Y,Pe,pt;let I=Date.now()-S,L=Math.min(I/r,1),k=L<.5?2*L*L:1-Math.pow(-2*L+2,2)/2;t.position.set(y+(m-y)*k,h+(f-h)*k,0);let R=(Pe=(Y=a==null?void 0:a.transform)==null?void 0:Y.scale)!=null?Pe:.1875,j=(pt=s.hand_scale_multiplier)!=null?pt:2.5,be=R*j*100,q=be+be*.2*Math.sin(L*Math.PI);t.scale.set(q,q,1),L<1?requestAnimationFrame(E):(e.element.style.transform="translate(-50%, -50%) scale(0.95)",setTimeout(()=>{e.element.style.transform="translate(-50%, -50%) scale(1)",i()},100),setTimeout(()=>{t.material.opacity=0,setTimeout(()=>{t.position.set(y,h,0),d()},l)},500))};E()};setTimeout(d,o)}var Ft=ge(require("three"),1);function Cs(t,e,n){var u,y,h,w,v,b,m;let i=e.objects.get("hand_tutorial_1"),a=((u=i==null?void 0:i.gameplay)==null?void 0:u.tuning)||{},s=(i==null?void 0:i.render)||{},r=(i==null?void 0:i.transform)||{},o=new Ft.SpriteMaterial({map:t||void 0,transparent:!0,alphaTest:.1}),l=new Ft.Sprite(o),d=r.position||{},p=(y=d==null?void 0:d.z)!=null?y:0;l.position.set(n.x+((h=d==null?void 0:d.x)!=null?h:0),n.y+((w=d==null?void 0:d.y)!=null?w:0),p),l.material.opacity=s.alpha!==void 0&&s.alpha!==null?s.alpha:0,l.visible=s.visible!==void 0&&s.visible!==null?s.visible:!1;let c=(v=a.hand_scale_multiplier)!=null?v:2.5,g=(b=r.scale)!=null?b:.1875;return l.scale.set(g*c*100,g*c*100,1),l.renderOrder=(m=s.z_index)!=null?m:99999,l}function As(t){var y,h,w,v,b,m,f,S,E;let e=t.objects.get("ui_tutorial_1"),n=e==null?void 0:e.ui,i=(e==null?void 0:e.render)||{},a=((y=t.engine.runtime)==null?void 0:y.ui_styles)||{},s=((h=t.engine.runtime)==null?void 0:h.ui)||{},r=(n==null?void 0:n.text)||s.tutorial_label||s.label_text||"CLEAN!",o=(n==null?void 0:n.font)||"brand.warning",l=(n==null?void 0:n.fontSize)||a.label_font_size||52,d=(v=n==null?void 0:n.letterSpacing)!=null?v:(w=a.label_letter_spacing)!=null?w:-1,p=(n==null?void 0:n.align)||"center",c=i.tint,g=typeof c=="string"?c:c?`#${c.toString(16).padStart(6,"0")}`:a.label_fill||"#FFF1C1",u=document.createElement("div");return u.textContent=r,u.style.cssText=`
348
348
  font-family: ${te(o)};
349
349
  font-size: ${l}px;
350
350
  font-weight: ${ne(o)};
@@ -359,4 +359,4 @@ Style guidelines: ${i.summary}`;this.promptInput.value=a,this.currentPrompt=a}}c
359
359
  position: absolute;
360
360
  transform: translate(-50%, -50%);
361
361
  white-space: nowrap;
362
- `,u}function Ts(t,e,n,i,a){var l,d,p,c,g,u,y;let s=a.objects.get("hand_tutorial_1"),r=((l=s==null?void 0:s.gameplay)==null?void 0:l.tuning)||{},o=(s==null?void 0:s.transform)||{};if(!i){let h=(d=r.animation_duration)!=null?d:1.5,w=n%h/h,v=w<.5?2*w*w:-1+(4-2*w)*w,b=(p=r.x_offset)!=null?p:0,m=(c=r.y_offset)!=null?c:0,f=(g=r.animation_range)!=null?g:40,S=f*.7,E=f,C=e.x+b+S,M=e.y+m+E,I=C+S,L=M+E;t.position.set(C+(I-C)*v,M+(L-M)*v,0);let k=(u=o.scale)!=null?u:.1875,R=(y=r.hand_scale_multiplier)!=null?y:2.5,j=k*R*100;t.scale.set(j,j,1)}}var We=ge(require("three"),1),Ls=new We.TextureLoader,Hn=null,Dn=null;async function ks(){if(Hn)return Hn;if(!Dn){let n=(()=>{if(typeof window!="undefined")try{return new URL("inline-assets.js",window.location.href).href}catch{return"./inline-assets.js"}return"./inline-assets.js"})();Dn=fetch(n).then(i=>{if(!i.ok)throw new Error(`HTTP ${i.status}`);return i.text()}).then(i=>{let a=i.match(/export\s+const\s+INLINE_ASSETS\s*=\s*({[\s\S]*?});?\s*$/m);if(a)return new Function("return "+a[1])();throw new Error("INLINE_ASSETS export not found")}).then(i=>i?i.INLINE_ASSETS?i.INLINE_ASSETS:(console.warn("[assets] Module does not have INLINE_ASSETS export. Module keys:",Object.keys(i)),{}):(console.warn("[assets] Module import returned undefined"),{})).catch(i=>(console.warn("[assets] Failed to load inline-assets.js:",i),{}))}let t=await Dn;return Hn=t||{},t||{}}async function Nn(t,e,n=16777215,i=!1){try{let s=(await ks())[t];return await Ls.loadAsync(s||t)}catch{console.warn(`Asset missing: ${t}. Using placeholder.`);let s=document.createElement("canvas");s.width=64,s.height=64;let r=s.getContext("2d");return r&&(r.fillStyle=`#${n.toString(16).padStart(6,"0")}`,i?r.fillRect(0,0,30,60):(r.beginPath(),r.arc(32,32,30,0,Math.PI*2),r.fill(),r.fillRect(27,32,10,40))),new We.CanvasTexture(s)}}async function Ms(t,e,n){var h,w;let a=(await ks())[t]||t,s;try{s=await Ls.loadAsync(a),console.log("[character] loaded sheet",{path:t,sourceUsed:a})}catch(v){let f=((n.gameplay.character_sheet||{}).fallback_color||"#ff00ff").replace("#","");s=await Nn(t,e,parseInt(f,16),!0),console.warn("[character] fallback loadAsset used",{path:t,err:v})}if(!s)return[];let r=n.gameplay.character_sheet||{},o=(h=r.cols)!=null?h:3,l=(w=r.rows)!=null?w:2,d=s.image,p=(d==null?void 0:d.width)||0,c=(d==null?void 0:d.height)||0,g=p/o,u=c/l;if(!Number.isFinite(g)||!Number.isFinite(u)||g<=0||u<=0)return[s];let y=[];for(let v=0;v<l;v++)for(let b=0;b<o;b++){let m=document.createElement("canvas");m.width=g,m.height=u;let f=m.getContext("2d");f&&d&&f.drawImage(d,b*g,v*u,g,u,0,0,g,u),y.push(new We.CanvasTexture(m))}return y.length>2&&y.push(...y.slice(1,-1).reverse()),console.log("[character] frames prepared",{count:y.length}),y}function _s(t,e){var c,g,u,y;let n=e.gameplay.brush||{},i=e.theme.brush_color||"#ffffff",a=(c=n.radius)!=null?c:20,s=(g=n.inner_radius)!=null?g:15,r=(u=n.alpha)!=null?u:.8,o=(y=n.inner_alpha)!=null?y:.3,l=n.inner_color||"#ffffff",d=document.createElement("canvas");d.width=a*2,d.height=a*2;let p=d.getContext("2d");return p&&(p.clearRect(0,0,d.width,d.height),p.beginPath(),p.arc(a,a,a,0,Math.PI*2),p.fillStyle=i,p.globalAlpha=r,p.fill(),p.beginPath(),p.arc(a,a,s,0,Math.PI*2),p.fillStyle=l,p.globalAlpha=o,p.fill()),new We.CanvasTexture(d)}0&&(module.exports={AspectClass,GameObject,GameObjectManager,Renderer,ResponsiveUISystem,Transform,animateHandClick,animatePanelEntrance,createBrushTexture,createEndGamePanel,createHandTutorial,createThreeBase,createTutorialLabel,getAspectClass,getRegisteredFontIds,loadAsset,loadCharacterFrames,registerFont,resolveFont,resolveFontWeight,updateHandAnimation});
362
+ `,u}function Ts(t,e,n,i,a){var l,d,p,c,g,u,y;let s=a.objects.get("hand_tutorial_1"),r=((l=s==null?void 0:s.gameplay)==null?void 0:l.tuning)||{},o=(s==null?void 0:s.transform)||{};if(!i){let h=(d=r.animation_duration)!=null?d:1.5,w=n%h/h,v=w<.5?2*w*w:-1+(4-2*w)*w,b=(p=r.x_offset)!=null?p:0,m=(c=r.y_offset)!=null?c:0,f=(g=r.animation_range)!=null?g:40,S=f*.7,E=f,C=e.x+b+S,_=e.y+m+E,I=C+S,L=_+E;t.position.set(C+(I-C)*v,_+(L-_)*v,0);let k=(u=o.scale)!=null?u:.1875,R=(y=r.hand_scale_multiplier)!=null?y:2.5,j=k*R*100;t.scale.set(j,j,1)}}var We=ge(require("three"),1),Ls=new We.TextureLoader,Hn=null,Dn=null;async function ks(){if(Hn)return Hn;if(!Dn){let n=(()=>{if(typeof window!="undefined")try{return new URL("inline-assets.js",window.location.href).href}catch{return"./inline-assets.js"}return"./inline-assets.js"})();Dn=fetch(n).then(i=>{if(!i.ok)throw new Error(`HTTP ${i.status}`);return i.text()}).then(i=>{let a=i.match(/export\s+const\s+INLINE_ASSETS\s*=\s*({[\s\S]*?});?\s*$/m);if(a)return new Function("return "+a[1])();throw new Error("INLINE_ASSETS export not found")}).then(i=>i?i.INLINE_ASSETS?i.INLINE_ASSETS:(console.warn("[assets] Module does not have INLINE_ASSETS export. Module keys:",Object.keys(i)),{}):(console.warn("[assets] Module import returned undefined"),{})).catch(i=>(console.warn("[assets] Failed to load inline-assets.js:",i),{}))}let t=await Dn;return Hn=t||{},t||{}}async function Nn(t,e,n=16777215,i=!1){try{let s=(await ks())[t];return await Ls.loadAsync(s||t)}catch{console.warn(`Asset missing: ${t}. Using placeholder.`);let s=document.createElement("canvas");s.width=64,s.height=64;let r=s.getContext("2d");return r&&(r.fillStyle=`#${n.toString(16).padStart(6,"0")}`,i?r.fillRect(0,0,30,60):(r.beginPath(),r.arc(32,32,30,0,Math.PI*2),r.fill(),r.fillRect(27,32,10,40))),new We.CanvasTexture(s)}}async function _s(t,e,n){var h,w;let a=(await ks())[t]||t,s;try{s=await Ls.loadAsync(a),console.log("[character] loaded sheet",{path:t,sourceUsed:a})}catch(v){let f=((n.gameplay.character_sheet||{}).fallback_color||"#ff00ff").replace("#","");s=await Nn(t,e,parseInt(f,16),!0),console.warn("[character] fallback loadAsset used",{path:t,err:v})}if(!s)return[];let r=n.gameplay.character_sheet||{},o=(h=r.cols)!=null?h:3,l=(w=r.rows)!=null?w:2,d=s.image,p=(d==null?void 0:d.width)||0,c=(d==null?void 0:d.height)||0,g=p/o,u=c/l;if(!Number.isFinite(g)||!Number.isFinite(u)||g<=0||u<=0)return[s];let y=[];for(let v=0;v<l;v++)for(let b=0;b<o;b++){let m=document.createElement("canvas");m.width=g,m.height=u;let f=m.getContext("2d");f&&d&&f.drawImage(d,b*g,v*u,g,u,0,0,g,u),y.push(new We.CanvasTexture(m))}return y.length>2&&y.push(...y.slice(1,-1).reverse()),console.log("[character] frames prepared",{count:y.length}),y}function Ms(t,e){var c,g,u,y;let n=e.gameplay.brush||{},i=e.theme.brush_color||"#ffffff",a=(c=n.radius)!=null?c:20,s=(g=n.inner_radius)!=null?g:15,r=(u=n.alpha)!=null?u:.8,o=(y=n.inner_alpha)!=null?y:.3,l=n.inner_color||"#ffffff",d=document.createElement("canvas");d.width=a*2,d.height=a*2;let p=d.getContext("2d");return p&&(p.clearRect(0,0,d.width,d.height),p.beginPath(),p.arc(a,a,a,0,Math.PI*2),p.fillStyle=i,p.globalAlpha=r,p.fill(),p.beginPath(),p.arc(a,a,s,0,Math.PI*2),p.fillStyle=l,p.globalAlpha=o,p.fill()),new We.CanvasTexture(d)}0&&(module.exports={AspectClass,GameObject,GameObjectManager,Renderer,ResponsiveUISystem,Transform,animateHandClick,animatePanelEntrance,createBrushTexture,createEndGamePanel,createHandTutorial,createThreeBase,createTutorialLabel,getAspectClass,getRegisteredFontIds,loadAsset,loadCharacterFrames,registerFont,resolveFont,resolveFontWeight,updateHandAnimation});