<turbo-stream action="update" target="mall-map-wrapper"><template><div data-controller="photo" id="mall-photos" itemscope="" itemtype="https://schema.org/ImageGallery"><div class="carousel slide carousel-fade" data-bs-interval="false" data-bs-ride="false" data-bs-touch="true" data-bs-wrap="true" id="main-slide"><div class="carousel-inner"><div class="carousel-item active"><img class="d-block w-100 photo-enlargeable cursor-pointer" alt="Vivo Imperial Park - Gallery Photo 1" title="Vivo Imperial Park - Gallery Photo 1" itemprop="image" width="1200" height="800" srcset="https://getoccupi.com/cdn-cgi/image/width=600,quality=85,format=auto/https://static.getoccupi.com/uploads/mall_photo/photo/22245/Suria-KLCC-landscape-fisheye-photoshoot-TianChad.com-9675.jpg 600w, https://getoccupi.com/cdn-cgi/image/width=900,quality=85,format=auto/https://static.getoccupi.com/uploads/mall_photo/photo/22245/Suria-KLCC-landscape-fisheye-photoshoot-TianChad.com-9675.jpg 900w, https://getoccupi.com/cdn-cgi/image/width=1200,quality=85,format=auto/https://static.getoccupi.com/uploads/mall_photo/photo/22245/Suria-KLCC-landscape-fisheye-photoshoot-TianChad.com-9675.jpg 1200w" sizes="(max-width: 768px) 100vw, 66vw" fetchpriority="high" loading="eager" decoding="auto" data-action="click-&gt;photo#enlargePhoto" data-photo-url="https://static.getoccupi.com/uploads/mall_photo/photo/22245/Suria-KLCC-landscape-fisheye-photoshoot-TianChad.com-9675.jpg" src="https://getoccupi.com/cdn-cgi/image/width=900,quality=85,format=auto/https://static.getoccupi.com/uploads/mall_photo/photo/22245/Suria-KLCC-landscape-fisheye-photoshoot-TianChad.com-9675.jpg" /></div><div class="carousel-item"><img class="d-block w-100 photo-enlargeable cursor-pointer" alt="Vivo Imperial Park - Gallery Photo 2" title="Vivo Imperial Park - Gallery Photo 2" itemprop="image" width="1200" height="800" srcset="https://getoccupi.com/cdn-cgi/image/width=600,quality=85,format=auto/https://static.getoccupi.com/uploads/mall_photo/photo/22246/TCSelfie-KLCC-OOTD-DanielWellington-Cheap-Monday-TianChad.com-0454.jpg 600w, https://getoccupi.com/cdn-cgi/image/width=900,quality=85,format=auto/https://static.getoccupi.com/uploads/mall_photo/photo/22246/TCSelfie-KLCC-OOTD-DanielWellington-Cheap-Monday-TianChad.com-0454.jpg 900w, https://getoccupi.com/cdn-cgi/image/width=1200,quality=85,format=auto/https://static.getoccupi.com/uploads/mall_photo/photo/22246/TCSelfie-KLCC-OOTD-DanielWellington-Cheap-Monday-TianChad.com-0454.jpg 1200w" sizes="(max-width: 768px) 100vw, 66vw" fetchpriority="auto" loading="lazy" decoding="async" data-action="click-&gt;photo#enlargePhoto" data-photo-url="https://static.getoccupi.com/uploads/mall_photo/photo/22246/TCSelfie-KLCC-OOTD-DanielWellington-Cheap-Monday-TianChad.com-0454.jpg" src="https://getoccupi.com/cdn-cgi/image/width=900,quality=85,format=auto/https://static.getoccupi.com/uploads/mall_photo/photo/22246/TCSelfie-KLCC-OOTD-DanielWellington-Cheap-Monday-TianChad.com-0454.jpg" /></div><div class="carousel-item"><img class="d-block w-100 photo-enlargeable cursor-pointer" alt="Vivo Imperial Park - Gallery Photo 3" title="Vivo Imperial Park - Gallery Photo 3" itemprop="image" width="1200" height="800" srcset="https://getoccupi.com/cdn-cgi/image/width=600,quality=85,format=auto/https://static.getoccupi.com/uploads/mall_photo/photo/22247/Malaysia-Grand-Bazaar-Lalaport-BBCC-mygrandbazaar-free-parking-local-products-artisan-handicrafts-tianchad-102342.JPG 600w, https://getoccupi.com/cdn-cgi/image/width=900,quality=85,format=auto/https://static.getoccupi.com/uploads/mall_photo/photo/22247/Malaysia-Grand-Bazaar-Lalaport-BBCC-mygrandbazaar-free-parking-local-products-artisan-handicrafts-tianchad-102342.JPG 900w, https://getoccupi.com/cdn-cgi/image/width=1200,quality=85,format=auto/https://static.getoccupi.com/uploads/mall_photo/photo/22247/Malaysia-Grand-Bazaar-Lalaport-BBCC-mygrandbazaar-free-parking-local-products-artisan-handicrafts-tianchad-102342.JPG 1200w" sizes="(max-width: 768px) 100vw, 66vw" fetchpriority="auto" loading="lazy" decoding="async" data-action="click-&gt;photo#enlargePhoto" data-photo-url="https://static.getoccupi.com/uploads/mall_photo/photo/22247/Malaysia-Grand-Bazaar-Lalaport-BBCC-mygrandbazaar-free-parking-local-products-artisan-handicrafts-tianchad-102342.JPG" src="https://getoccupi.com/cdn-cgi/image/width=900,quality=85,format=auto/https://static.getoccupi.com/uploads/mall_photo/photo/22247/Malaysia-Grand-Bazaar-Lalaport-BBCC-mygrandbazaar-free-parking-local-products-artisan-handicrafts-tianchad-102342.JPG" /></div><div class="carousel-item"><img class="d-block w-100 photo-enlargeable cursor-pointer" alt="Vivo Imperial Park - Gallery Photo 4" title="Vivo Imperial Park - Gallery Photo 4" itemprop="image" width="1200" height="800" srcset="https://getoccupi.com/cdn-cgi/image/width=600,quality=85,format=auto/https://static.getoccupi.com/uploads/mall_photo/photo/22248/caption.jpg 600w, https://getoccupi.com/cdn-cgi/image/width=900,quality=85,format=auto/https://static.getoccupi.com/uploads/mall_photo/photo/22248/caption.jpg 900w, https://getoccupi.com/cdn-cgi/image/width=1200,quality=85,format=auto/https://static.getoccupi.com/uploads/mall_photo/photo/22248/caption.jpg 1200w" sizes="(max-width: 768px) 100vw, 66vw" fetchpriority="auto" loading="lazy" decoding="async" data-action="click-&gt;photo#enlargePhoto" data-photo-url="https://static.getoccupi.com/uploads/mall_photo/photo/22248/caption.jpg" src="https://getoccupi.com/cdn-cgi/image/width=900,quality=85,format=auto/https://static.getoccupi.com/uploads/mall_photo/photo/22248/caption.jpg" /></div><div class="carousel-item"><img class="d-block w-100 photo-enlargeable cursor-pointer" alt="Vivo Imperial Park - Gallery Photo 5" title="Vivo Imperial Park - Gallery Photo 5" itemprop="image" width="1200" height="800" srcset="https://getoccupi.com/cdn-cgi/image/width=600,quality=85,format=auto/https://static.getoccupi.com/uploads/mall_photo/photo/20829/1000s.jpg 600w, https://getoccupi.com/cdn-cgi/image/width=900,quality=85,format=auto/https://static.getoccupi.com/uploads/mall_photo/photo/20829/1000s.jpg 900w, https://getoccupi.com/cdn-cgi/image/width=1200,quality=85,format=auto/https://static.getoccupi.com/uploads/mall_photo/photo/20829/1000s.jpg 1200w" sizes="(max-width: 768px) 100vw, 66vw" fetchpriority="auto" loading="lazy" decoding="async" data-action="click-&gt;photo#enlargePhoto" data-photo-url="https://static.getoccupi.com/uploads/mall_photo/photo/20829/1000s.jpg" src="https://getoccupi.com/cdn-cgi/image/width=900,quality=85,format=auto/https://static.getoccupi.com/uploads/mall_photo/photo/20829/1000s.jpg" /></div><div class="carousel-item"><img class="d-block w-100 photo-enlargeable cursor-pointer" alt="Vivo Imperial Park - Gallery Photo 6" title="Vivo Imperial Park - Gallery Photo 6" itemprop="image" width="1200" height="800" srcset="https://getoccupi.com/cdn-cgi/image/width=600,quality=85,format=auto/https://static.getoccupi.com/uploads/mall_photo/photo/20830/District-21-IOI-City-Mall-Theme-Park-Price-Malaysia-TianChad.com-11_attractions.jpg 600w, https://getoccupi.com/cdn-cgi/image/width=900,quality=85,format=auto/https://static.getoccupi.com/uploads/mall_photo/photo/20830/District-21-IOI-City-Mall-Theme-Park-Price-Malaysia-TianChad.com-11_attractions.jpg 900w, https://getoccupi.com/cdn-cgi/image/width=1200,quality=85,format=auto/https://static.getoccupi.com/uploads/mall_photo/photo/20830/District-21-IOI-City-Mall-Theme-Park-Price-Malaysia-TianChad.com-11_attractions.jpg 1200w" sizes="(max-width: 768px) 100vw, 66vw" fetchpriority="auto" loading="lazy" decoding="async" data-action="click-&gt;photo#enlargePhoto" data-photo-url="https://static.getoccupi.com/uploads/mall_photo/photo/20830/District-21-IOI-City-Mall-Theme-Park-Price-Malaysia-TianChad.com-11_attractions.jpg" src="https://getoccupi.com/cdn-cgi/image/width=900,quality=85,format=auto/https://static.getoccupi.com/uploads/mall_photo/photo/20830/District-21-IOI-City-Mall-Theme-Park-Price-Malaysia-TianChad.com-11_attractions.jpg" /></div><div class="carousel-item"><img class="d-block w-100 photo-enlargeable cursor-pointer" alt="Vivo Imperial Park - Gallery Photo 7" title="Vivo Imperial Park - Gallery Photo 7" itemprop="image" width="1200" height="800" srcset="https://getoccupi.com/cdn-cgi/image/width=600,quality=85,format=auto/https://static.getoccupi.com/uploads/mall_photo/photo/20831/f91b099c79384ab0818734df4b8df080_LARGE___855d0f6b73680317e364b4b7cbc37ca0.jpeg 600w, https://getoccupi.com/cdn-cgi/image/width=900,quality=85,format=auto/https://static.getoccupi.com/uploads/mall_photo/photo/20831/f91b099c79384ab0818734df4b8df080_LARGE___855d0f6b73680317e364b4b7cbc37ca0.jpeg 900w, https://getoccupi.com/cdn-cgi/image/width=1200,quality=85,format=auto/https://static.getoccupi.com/uploads/mall_photo/photo/20831/f91b099c79384ab0818734df4b8df080_LARGE___855d0f6b73680317e364b4b7cbc37ca0.jpeg 1200w" sizes="(max-width: 768px) 100vw, 66vw" fetchpriority="auto" loading="lazy" decoding="async" data-action="click-&gt;photo#enlargePhoto" data-photo-url="https://static.getoccupi.com/uploads/mall_photo/photo/20831/f91b099c79384ab0818734df4b8df080_LARGE___855d0f6b73680317e364b4b7cbc37ca0.jpeg" src="https://getoccupi.com/cdn-cgi/image/width=900,quality=85,format=auto/https://static.getoccupi.com/uploads/mall_photo/photo/20831/f91b099c79384ab0818734df4b8df080_LARGE___855d0f6b73680317e364b4b7cbc37ca0.jpeg" /></div></div><button aria-label="Previous photo" class="carousel-control-prev" data-action="click-&gt;photo#prevSlide" type="button"><span aria-hidden="true" class="carousel-control-prev-icon"></span></button><button aria-label="Next photo" class="carousel-control-next" data-action="click-&gt;photo#nextSlide" type="button"><span aria-hidden="true" class="carousel-control-next-icon"></span></button></div><div aria-label="Photo thumbnails" class="d-flex overflow-auto gap-1 py-1" id="thumbnail-strip" role="tablist"><div aria-label="View photo 1" aria-selected="true" class="thumbnail-item border-0 p-0 flex-shrink-0 active" data-action="click-&gt;photo#goToSlide" data-slide-index="0" role="tab"><img id="mall_photo_22245" alt="Vivo Imperial Park - Thumbnail 1" title="Vivo Imperial Park - Thumbnail 1" loading="lazy" itemprop="image" class="object-fit-cover rounded" width="104" height="58" src="https://getoccupi.com/cdn-cgi/image/width=150,quality=85,format=auto/https://static.getoccupi.com/uploads/mall_photo/photo/22245/Suria-KLCC-landscape-fisheye-photoshoot-TianChad.com-9675.jpg" /><div class="manage-controls"><a aria-label="Delete photo 1" data-turbo-method="delete" href="/malls/vivo-imperial-park/mall_photos/22245"><i aria-hidden="true" class="ri-close-line"></i></a></div></div><div aria-label="View photo 2" aria-selected="false" class="thumbnail-item border-0 p-0 flex-shrink-0" data-action="click-&gt;photo#goToSlide" data-slide-index="1" role="tab"><img id="mall_photo_22246" alt="Vivo Imperial Park - Thumbnail 2" title="Vivo Imperial Park - Thumbnail 2" loading="lazy" itemprop="image" class="object-fit-cover rounded" width="104" height="58" src="https://getoccupi.com/cdn-cgi/image/width=150,quality=85,format=auto/https://static.getoccupi.com/uploads/mall_photo/photo/22246/TCSelfie-KLCC-OOTD-DanielWellington-Cheap-Monday-TianChad.com-0454.jpg" /><div class="manage-controls"><a aria-label="Delete photo 2" data-turbo-method="delete" href="/malls/vivo-imperial-park/mall_photos/22246"><i aria-hidden="true" class="ri-close-line"></i></a></div></div><div aria-label="View photo 3" aria-selected="false" class="thumbnail-item border-0 p-0 flex-shrink-0" data-action="click-&gt;photo#goToSlide" data-slide-index="2" role="tab"><img id="mall_photo_22247" alt="Vivo Imperial Park - Thumbnail 3" title="Vivo Imperial Park - Thumbnail 3" loading="lazy" itemprop="image" class="object-fit-cover rounded" width="104" height="58" src="https://getoccupi.com/cdn-cgi/image/width=150,quality=85,format=auto/https://static.getoccupi.com/uploads/mall_photo/photo/22247/Malaysia-Grand-Bazaar-Lalaport-BBCC-mygrandbazaar-free-parking-local-products-artisan-handicrafts-tianchad-102342.JPG" /><div class="manage-controls"><a aria-label="Delete photo 3" data-turbo-method="delete" href="/malls/vivo-imperial-park/mall_photos/22247"><i aria-hidden="true" class="ri-close-line"></i></a></div></div><div aria-label="View photo 4" aria-selected="false" class="thumbnail-item border-0 p-0 flex-shrink-0" data-action="click-&gt;photo#goToSlide" data-slide-index="3" role="tab"><img id="mall_photo_22248" alt="Vivo Imperial Park - Thumbnail 4" title="Vivo Imperial Park - Thumbnail 4" loading="lazy" itemprop="image" class="object-fit-cover rounded" width="104" height="58" src="https://getoccupi.com/cdn-cgi/image/width=150,quality=85,format=auto/https://static.getoccupi.com/uploads/mall_photo/photo/22248/caption.jpg" /><div class="manage-controls"><a aria-label="Delete photo 4" data-turbo-method="delete" href="/malls/vivo-imperial-park/mall_photos/22248"><i aria-hidden="true" class="ri-close-line"></i></a></div></div><div aria-label="View photo 5" aria-selected="false" class="thumbnail-item border-0 p-0 flex-shrink-0" data-action="click-&gt;photo#goToSlide" data-slide-index="4" role="tab"><img id="mall_photo_20829" alt="Vivo Imperial Park - Thumbnail 5" title="Vivo Imperial Park - Thumbnail 5" loading="lazy" itemprop="image" class="object-fit-cover rounded" width="104" height="58" src="https://getoccupi.com/cdn-cgi/image/width=150,quality=85,format=auto/https://static.getoccupi.com/uploads/mall_photo/photo/20829/1000s.jpg" /><div class="manage-controls"><a aria-label="Delete photo 5" data-turbo-method="delete" href="/malls/vivo-imperial-park/mall_photos/20829"><i aria-hidden="true" class="ri-close-line"></i></a></div></div><div aria-label="View photo 6" aria-selected="false" class="thumbnail-item border-0 p-0 flex-shrink-0" data-action="click-&gt;photo#goToSlide" data-slide-index="5" role="tab"><img id="mall_photo_20830" alt="Vivo Imperial Park - Thumbnail 6" title="Vivo Imperial Park - Thumbnail 6" loading="lazy" itemprop="image" class="object-fit-cover rounded" width="104" height="58" src="https://getoccupi.com/cdn-cgi/image/width=150,quality=85,format=auto/https://static.getoccupi.com/uploads/mall_photo/photo/20830/District-21-IOI-City-Mall-Theme-Park-Price-Malaysia-TianChad.com-11_attractions.jpg" /><div class="manage-controls"><a aria-label="Delete photo 6" data-turbo-method="delete" href="/malls/vivo-imperial-park/mall_photos/20830"><i aria-hidden="true" class="ri-close-line"></i></a></div></div><div aria-label="View photo 7" aria-selected="false" class="thumbnail-item border-0 p-0 flex-shrink-0" data-action="click-&gt;photo#goToSlide" data-slide-index="6" role="tab"><img id="mall_photo_20831" alt="Vivo Imperial Park - Thumbnail 7" title="Vivo Imperial Park - Thumbnail 7" loading="lazy" itemprop="image" class="object-fit-cover rounded" width="104" height="58" src="https://getoccupi.com/cdn-cgi/image/width=150,quality=85,format=auto/https://static.getoccupi.com/uploads/mall_photo/photo/20831/f91b099c79384ab0818734df4b8df080_LARGE___855d0f6b73680317e364b4b7cbc37ca0.jpeg" /><div class="manage-controls"><a aria-label="Delete photo 7" data-turbo-method="delete" href="/malls/vivo-imperial-park/mall_photos/20831"><i aria-hidden="true" class="ri-close-line"></i></a></div></div></div></div><div aria-hidden="true" aria-labelledby="mallPhotoEnlargeModalLabel" class="modal fade" id="mallPhotoEnlargeModal" tabindex="-1"><div class="modal-dialog modal-fullscreen"><div class="modal-content bg-transparent border-0 vh-100"><h1 class="visually-hidden" id="mallPhotoEnlargeModalLabel">Vivo Imperial Park Photo Gallery</h1><button aria-label="Close" class="btn btn-dark btn-lg position-absolute rounded-circle d-flex align-items-center justify-content-center mall-photo-modal-close" data-bs-dismiss="modal" type="button"><i class="ri-close-line fs-4"></i></button><div class="modal-body p-0 h-100 d-flex align-items-center justify-content-center"><div class="carousel slide carousel-fade" data-bs-interval="false" data-bs-ride="false" data-bs-touch="true" data-bs-wrap="true" id="mallPhotoCarousel"><div class="carousel-indicators"><button aria-current="true" aria-label="Slide 1" class="active" data-bs-slide-to="0" data-bs-target="#mallPhotoCarousel" type="button"></button><button aria-current="" aria-label="Slide 2" data-bs-slide-to="1" data-bs-target="#mallPhotoCarousel" type="button"></button><button aria-current="" aria-label="Slide 3" data-bs-slide-to="2" data-bs-target="#mallPhotoCarousel" type="button"></button><button aria-current="" aria-label="Slide 4" data-bs-slide-to="3" data-bs-target="#mallPhotoCarousel" type="button"></button><button aria-current="" aria-label="Slide 5" data-bs-slide-to="4" data-bs-target="#mallPhotoCarousel" type="button"></button><button aria-current="" aria-label="Slide 6" data-bs-slide-to="5" data-bs-target="#mallPhotoCarousel" type="button"></button><button aria-current="" aria-label="Slide 7" data-bs-slide-to="6" data-bs-target="#mallPhotoCarousel" type="button"></button></div><div class="carousel-inner vh-100"><div class="carousel-item active"><div class="vh-100 d-flex align-items-center justify-content-center"><img alt="Vivo Imperial Park - Gallery Photo 1" class="d-block w-100 mh-100 vh-100 object-fit-contain cursor-pointer" data-action="click-&gt;photo#enlargePhoto" decoding="async" height="800" loading="lazy" src="https://getoccupi.com/cdn-cgi/image/width=1200,quality=85,format=auto/https://static.getoccupi.com/uploads/mall_photo/photo/22245/Suria-KLCC-landscape-fisheye-photoshoot-TianChad.com-9675.jpg" width="1200" /></div></div><div class="carousel-item"><div class="vh-100 d-flex align-items-center justify-content-center"><img alt="Vivo Imperial Park - Gallery Photo 2" class="d-block w-100 mh-100 vh-100 object-fit-contain cursor-pointer" data-action="click-&gt;photo#enlargePhoto" decoding="async" height="800" loading="lazy" src="https://getoccupi.com/cdn-cgi/image/width=1200,quality=85,format=auto/https://static.getoccupi.com/uploads/mall_photo/photo/22246/TCSelfie-KLCC-OOTD-DanielWellington-Cheap-Monday-TianChad.com-0454.jpg" width="1200" /></div></div><div class="carousel-item"><div class="vh-100 d-flex align-items-center justify-content-center"><img alt="Vivo Imperial Park - Gallery Photo 3" class="d-block w-100 mh-100 vh-100 object-fit-contain cursor-pointer" data-action="click-&gt;photo#enlargePhoto" decoding="async" height="800" loading="lazy" src="https://getoccupi.com/cdn-cgi/image/width=1200,quality=85,format=auto/https://static.getoccupi.com/uploads/mall_photo/photo/22247/Malaysia-Grand-Bazaar-Lalaport-BBCC-mygrandbazaar-free-parking-local-products-artisan-handicrafts-tianchad-102342.JPG" width="1200" /></div></div><div class="carousel-item"><div class="vh-100 d-flex align-items-center justify-content-center"><img alt="Vivo Imperial Park - Gallery Photo 4" class="d-block w-100 mh-100 vh-100 object-fit-contain cursor-pointer" data-action="click-&gt;photo#enlargePhoto" decoding="async" height="800" loading="lazy" src="https://getoccupi.com/cdn-cgi/image/width=1200,quality=85,format=auto/https://static.getoccupi.com/uploads/mall_photo/photo/22248/caption.jpg" width="1200" /></div></div><div class="carousel-item"><div class="vh-100 d-flex align-items-center justify-content-center"><img alt="Vivo Imperial Park - Gallery Photo 5" class="d-block w-100 mh-100 vh-100 object-fit-contain cursor-pointer" data-action="click-&gt;photo#enlargePhoto" decoding="async" height="800" loading="lazy" src="https://getoccupi.com/cdn-cgi/image/width=1200,quality=85,format=auto/https://static.getoccupi.com/uploads/mall_photo/photo/20829/1000s.jpg" width="1200" /></div></div><div class="carousel-item"><div class="vh-100 d-flex align-items-center justify-content-center"><img alt="Vivo Imperial Park - Gallery Photo 6" class="d-block w-100 mh-100 vh-100 object-fit-contain cursor-pointer" data-action="click-&gt;photo#enlargePhoto" decoding="async" height="800" loading="lazy" src="https://getoccupi.com/cdn-cgi/image/width=1200,quality=85,format=auto/https://static.getoccupi.com/uploads/mall_photo/photo/20830/District-21-IOI-City-Mall-Theme-Park-Price-Malaysia-TianChad.com-11_attractions.jpg" width="1200" /></div></div><div class="carousel-item"><div class="vh-100 d-flex align-items-center justify-content-center"><img alt="Vivo Imperial Park - Gallery Photo 7" class="d-block w-100 mh-100 vh-100 object-fit-contain cursor-pointer" data-action="click-&gt;photo#enlargePhoto" decoding="async" height="800" loading="lazy" src="https://getoccupi.com/cdn-cgi/image/width=1200,quality=85,format=auto/https://static.getoccupi.com/uploads/mall_photo/photo/20831/f91b099c79384ab0818734df4b8df080_LARGE___855d0f6b73680317e364b4b7cbc37ca0.jpeg" width="1200" /></div></div></div></div><button class="carousel-control-prev" data-bs-slide="prev" data-bs-target="#mallPhotoCarousel" type="button"><span aria-hidden="true" class="carousel-control-prev-icon"></span><span class="visually-hidden">Previous</span></button><button class="carousel-control-next" data-bs-slide="next" data-bs-target="#mallPhotoCarousel" type="button"><span aria-hidden="true" class="carousel-control-next-icon"></span><span class="visually-hidden">Next</span></button></div></div></div></div><div id="mall-photo-scripts"><script>deletePhoto = function(elementID) {
  var img = document.getElementById(elementID)
  if (!img) return
  var thumb = img.closest('.thumbnail-item')
  if (!thumb) return
  var strip = document.getElementById('thumbnail-strip')
  if (!strip) return
  var thumbs = Array.from(strip.querySelectorAll('.thumbnail-item'))
  var idx = thumbs.indexOf(thumb)

  // Remove carousel item
  var items = document.querySelectorAll('#main-slide .carousel-item')
  if (items[idx]) {
    var wasActive = items[idx].classList.contains('active')
    items[idx].remove()
    if (wasActive) {
      var remaining = document.querySelectorAll('#main-slide .carousel-item')
      if (remaining.length > 0) remaining[0].classList.add('active')
    }
  }

  // Remove thumbnail
  thumb.remove()

  // Re-index thumbnail data-slide-index attributes
  document.querySelectorAll('#thumbnail-strip .thumbnail-item').forEach(function(t, i) {
    t.setAttribute('data-slide-index', i)
  })

  // Also remove from enlargement modal carousel
  var modalItems = document.querySelectorAll('#mallPhotoCarousel .carousel-item')
  if (modalItems[idx]) {
    var wasModalActive = modalItems[idx].classList.contains('active')
    modalItems[idx].remove()
    if (wasModalActive) {
      var remainingModal = document.querySelectorAll('#mallPhotoCarousel .carousel-item')
      if (remainingModal.length > 0) remainingModal[0].classList.add('active')
    }
  }

  // Re-index modal indicators
  var indicators = document.querySelectorAll('#mallPhotoCarousel .carousel-indicators button')
  if (indicators) {
    indicators.forEach(function(btn, i) {
      btn.setAttribute('data-bs-slide-to', i)
      btn.setAttribute('aria-label', 'Slide ' + (i + 1))
    })
  }
}</script></div></template></turbo-stream>