182182// }
183183// };
184184
185- // // Drifting starfield background
185+ // Kept as a global utility — scene2_globe.js calls Scene1.getISO3FromNumericId()
186+ const Scene1 = {
187+ getISO3FromNumericId ( numericId ) {
188+ const idToISO = {
189+ '156' : 'CHN' , '840' : 'USA' , '356' : 'IND' , '360' : 'IDN' , '608' : 'PHL' ,
190+ '392' : 'JPN' , '050' : 'BGD' , '586' : 'PAK' , '076' : 'BRA' , '484' : 'MEX' ,
191+ '036' : 'AUS' , '276' : 'DEU' , '250' : 'FRA' , '826' : 'GBR' , '724' : 'ESP' ,
192+ '380' : 'ITA' , '792' : 'TUR' , '364' : 'IRN' , '231' : 'ETH' , '404' : 'KEN' ,
193+ '566' : 'NGA' , '710' : 'ZAF' , '704' : 'VNM' , '764' : 'THA' , '004' : 'AFG' ,
194+ '524' : 'NPL' , '104' : 'MMR' , '332' : 'HTI' , '643' : 'RUS' , '124' : 'CAN' ,
195+ '032' : 'ARG' , '152' : 'CHL' , '170' : 'COL' , '604' : 'PER' , '012' : 'DZA' ,
196+ '818' : 'EGY' , '504' : 'MAR' , '508' : 'MOZ' , '800' : 'UGA' , '024' : 'AGO' ,
197+ '120' : 'CMR' , '180' : 'COD' , '729' : 'SDN' , '440' : 'LTU' , '112' : 'BLR' ,
198+ '426' : 'LSO' , '834' : 'TZA' , '894' : 'ZMB' , '716' : 'ZWE' , '178' : 'COG' ,
199+ '266' : 'GAB' , '288' : 'GHA' , '384' : 'CIV' , '466' : 'MLI' , '478' : 'MRT' ,
200+ '562' : 'NER' , '686' : 'SEN' , '694' : 'SLE' , '728' : 'SSD'
201+ } ;
202+ return idToISO [ numericId ] ;
203+ }
204+ } ;
205+
206+ // Drifting starfield background
186207( function initTimeTravel ( ) {
187208 const canvas = document . getElementById ( 'timeTravel' ) ;
188209 if ( ! canvas ) return ;
273294 window . addEventListener ( 'resize' , resize ) ;
274295 init ( ) ;
275296 requestAnimationFrame ( frame ) ;
297+ } ) ( ) ;
298+
299+ // Ticket click → Scene 2
300+ // (script is at end of <body> so DOM is ready — no DOMContentLoaded needed)
301+ ( function attachTicketHandler ( ) {
302+ const ticket = document . getElementById ( 'ticket' ) ;
303+ const frame = document . getElementById ( 'scene-ticket' ) ;
304+ if ( ! ticket || ! frame ) return ;
305+
306+ function enterMuseum ( ) {
307+ ticket . style . transition = 'transform 0.7s cubic-bezier(0.4, 0, 0.2, 1), opacity 0.7s ease' ;
308+ ticket . style . transform = 'scale(8)' ;
309+ ticket . style . opacity = '0' ;
310+
311+ setTimeout ( ( ) => {
312+ App . showScene ( 'scene-globe' ) ;
313+
314+ setTimeout ( ( ) => {
315+ ticket . style . transition = 'none' ;
316+ ticket . style . transform = '' ;
317+ ticket . style . opacity = '1' ;
318+ setTimeout ( ( ) => { ticket . style . transition = '' ; } , 50 ) ;
319+ } , 100 ) ;
320+ } , 700 ) ;
321+ }
322+
323+ ticket . addEventListener ( 'click' , enterMuseum ) ;
324+ ticket . addEventListener ( 'keydown' , e => { if ( e . key === 'Enter' || e . key === ' ' ) enterMuseum ( ) ; } ) ;
276325} ) ( ) ;
0 commit comments