@@ -172,3 +172,42 @@ document.querySelectorAll('.cta-bot').forEach(a => { a.href='https://t.me/Metrid
172172 } ;
173173 }
174174} ) ( ) ;
175+
176+
177+ // === Metridex Screens carousel ===
178+ ( function ( ) {
179+ const lb = document . getElementById ( 'mdxLightbox' ) ;
180+ const lbImg = lb ? lb . querySelector ( 'img' ) : null ;
181+ const lbClose = lb ? lb . querySelector ( '.mdx-close' ) : null ;
182+ function openLB ( src ) { if ( ! lb || ! lbImg ) return ; lbImg . src = src ; lb . classList . add ( 'open' ) ; lb . removeAttribute ( 'hidden' ) ; }
183+ function closeLB ( ) { if ( ! lb ) return ; lb . classList . remove ( 'open' ) ; lb . setAttribute ( 'hidden' , '' ) ; }
184+ lb && ( lb . addEventListener ( 'click' , closeLB ) , lbClose && lbClose . addEventListener ( 'click' , closeLB ) ) ;
185+ document . addEventListener ( 'keydown' , ( e ) => { if ( e . key === 'Escape' ) closeLB ( ) ; } ) ;
186+
187+ document . querySelectorAll ( '.mdx-frame' ) . forEach ( frame => {
188+ const list = ( frame . getAttribute ( 'data-images' ) || '' ) . split ( ',' ) . map ( s => s . trim ( ) ) . filter ( Boolean ) ;
189+ const stage = frame . querySelector ( '.mdx-stage' ) ;
190+ const img = new Image ( ) ;
191+ let i = 0 ;
192+ function render ( ) { img . src = list [ i ] ; counter . textContent = ( i + 1 ) + ' / ' + list . length ; }
193+ img . alt = frame . getAttribute ( 'data-alt' ) || 'Metridex screenshot' ;
194+ img . addEventListener ( 'click' , ( ) => openLB ( img . src ) ) ;
195+ stage . appendChild ( img ) ;
196+
197+ const prev = frame . querySelector ( '.mdx-prev' ) ;
198+ const next = frame . querySelector ( '.mdx-next' ) ;
199+ const counter = frame . querySelector ( '.mdx-counter' ) ;
200+
201+ function step ( d ) { i = ( i + d + list . length ) % list . length ; render ( ) ; }
202+ prev && prev . addEventListener ( 'click' , ( ) => step ( - 1 ) ) ;
203+ next && next . addEventListener ( 'click' , ( ) => step ( 1 ) ) ;
204+
205+ // Touch swipe
206+ let sx = null ;
207+ stage . addEventListener ( 'touchstart' , e => sx = e . touches [ 0 ] . clientX , { passive :true } ) ;
208+ stage . addEventListener ( 'touchend' , e => { if ( sx == null ) return ; const dx = e . changedTouches [ 0 ] . clientX - sx ; if ( Math . abs ( dx ) > 40 ) step ( dx < 0 ?1 :- 1 ) ; sx = null ; } , { passive :true } ) ;
209+
210+ if ( list . length ) { render ( ) ; }
211+ } ) ;
212+ } ) ( ) ;
213+ // === /Carousel ===
0 commit comments