@@ -1421,6 +1421,10 @@ function initSpotlightCarousel(mainElement) {
14211421 if ( ! mainElement ) return ;
14221422
14231423 const cards = getSpotlightCards ( mainElement ) ;
1424+ const existingTrack = mainElement . querySelector ( '.spotlight-track' ) ;
1425+ const storedScrollLeft = Number ( mainElement . dataset . spotlightScrollLeft || ( existingTrack && existingTrack . dataset . spotlightScrollLeft ) || 0 ) ;
1426+ const storedIndex = Number ( mainElement . dataset . spotlightIndex || 0 ) ;
1427+ const hasStoredScroll = mainElement . dataset . spotlightHasScroll === 'true' ;
14241428 if ( ! isSpotlightMode ( ) || cards . length === 0 ) {
14251429 mainElement . classList . remove ( 'spotlight-carousel' ) ;
14261430 cards . forEach ( card => card . classList . remove ( 'spotlight-active' , 'spotlight-dim' ) ) ;
@@ -1447,6 +1451,9 @@ function initSpotlightCarousel(mainElement) {
14471451 if ( scrollTicking ) return ;
14481452 scrollTicking = true ;
14491453 requestAnimationFrame ( ( ) => {
1454+ track . dataset . spotlightScrollLeft = String ( track . scrollLeft ) ;
1455+ mainElement . dataset . spotlightScrollLeft = String ( track . scrollLeft ) ;
1456+ mainElement . dataset . spotlightHasScroll = 'true' ;
14501457 updateSpotlightState ( mainElement ) ;
14511458 updateScrollProgress ( mainElement ) ;
14521459 updateSpotlightNavVisibility ( mainElement ) ;
@@ -1478,10 +1485,27 @@ function initSpotlightCarousel(mainElement) {
14781485 mainElement . appendChild ( nextButton ) ;
14791486 }
14801487
1481- const firstCard = cards [ 0 ] ;
1482- if ( firstCard ) {
1483- const targetLeft = layout === 'left' ? 0 : firstCard . offsetLeft - ( track . clientWidth - firstCard . clientWidth ) / 2 ;
1484- track . scrollLeft = Math . max ( 0 , targetLeft ) ;
1488+ if ( cards . length ) {
1489+ let targetLeft = null ;
1490+ if ( hasStoredScroll ) {
1491+ if ( layout === 'left' ) {
1492+ targetLeft = storedScrollLeft ;
1493+ } else if ( Number . isFinite ( storedIndex ) && cards [ storedIndex ] ) {
1494+ targetLeft = cards [ storedIndex ] . offsetLeft - ( track . clientWidth - cards [ storedIndex ] . clientWidth ) / 2 ;
1495+ } else {
1496+ targetLeft = storedScrollLeft ;
1497+ }
1498+ } else {
1499+ const firstCard = cards [ 0 ] ;
1500+ targetLeft = layout === 'left' ? 0 : firstCard . offsetLeft - ( track . clientWidth - firstCard . clientWidth ) / 2 ;
1501+ }
1502+ if ( targetLeft !== null ) {
1503+ const maxScroll = Math . max ( 0 , track . scrollWidth - track . clientWidth ) ;
1504+ const clamped = Math . min ( maxScroll , Math . max ( 0 , targetLeft ) ) ;
1505+ track . scrollLeft = clamped ;
1506+ track . dataset . spotlightScrollLeft = String ( track . scrollLeft ) ;
1507+ mainElement . dataset . spotlightScrollLeft = String ( track . scrollLeft ) ;
1508+ }
14851509 }
14861510
14871511 updateSpotlightState ( mainElement ) ;
0 commit comments