1 2 <!DOCTYPE html> 3 <html lang="id"> 4 <head> 5 <meta charset="UTF-8"> 6 <title>SLOTVIP ð Versi Apk Terbaru Game Slot Pelayanan VVIP 2026</title> 7 <meta name="description" content="SLOTVIP hadir dengan versi APK terbaru 2026 yang menawarkan akses cepat, pelayanan VVIP, sistem ringan, serta kemudahan slotvip login dan slotvip link alternatif terbaru untuk pengalaman bermain yang lebih nyaman."> 8 <meta name="robots" content="index,follow"> 9 <link rel="canonical" href="https://slotvipbogor.link/"> 10 <link rel="amphtml" href="https://slotviplogin.us.com/"> 11 <link rel="alternate" hreflang="id-id" href="https://slotviplogin.us.com/"/> 12 <link rel="alternate" href="https://slotviplogin.us.com/"/> 13 <link rel="alternate" hreflang="id" href="https://slotviplogin.us.com/"/> 14 <link rel="alternate" hreflang="en" href="https://slotviplogin.us.com/"/> 15 <link rel="alternate" hreflang="x-default" href="https://slotviplogin.us.com/"/> 16 <link rel="preconnect" href="https://www.googletagmanager.com" crossorigin> 17 18 <meta name="google-site-verification" content="aSqt4wb953RqpH3F9vnkJFB8QuNkGA26Xrfpc_Ldj4s" />
vendor: 71 bytes, lines 18-20
18 19 20 <script async src="https://www.googletagmanager.com/gtag/js?id=
20G-0LSM1YJSPZ
vendor: 50 bytes, lines 20-21
20" nonce="se3iyzEHMc9FQEB4wSyd0w=="></script> 21
21<script nonce="se3iyzEHMc9FQEB4wSyd0w==">window.dataLayer=window.dataLayer||[];function gtag(){dataLayer.push(arguments)}gtag("consent","default",{ad_storage:"denied",ad_user_data:"denied",ad_personalization:"denied",analytics_storage:"granted",wait_for_update:500});gtag("js",new Date);gtag("config","G-0LSM1YJSPZ",{send_page_view:!0,linker:{domains:["plazait.co.id","www.plazait.co.id"]}});window.ga4Ecomm={viewItem:function(e){if(!window.gtag)return;try{gtag("event","view_item",{currency:e.currency||"IDR",value:e.value||0,items:[{item_id:e.item_id||"",item_name:e.item_name||"",item_brand:e.item_brand||"",item_category:e.item_category||"",price:e.price||0,quantity:1}]})}catch(t){}},addToCart:function(e){if(!window.gtag)return;try{gtag("event","add_to_cart",{currency:e.currency||"IDR",value:(e.price||0)*(e.quantity||1),items:[{item_id:e.item_id||"",item_name:e.item_name||"",item_brand:e.item_brand||"",item_category:e.item_category||"",price:e.price||0,quantity:e.quantity||1}]})}catch(t){}}};</script>
21 22 <meta property="og:locale" content="id_ID"> 23 <meta property="og:site_name" content="Plaza IT"> 24 <meta property="og:type" content="product"> 25 <meta property="og:title" content="SLOTVIP ð Versi Apk Terbaru Game Slot Pelayanan VVIP 2026"> 26 <meta property="og:description" content="SLOTVIP hadir dengan versi APK terbaru 2026 yang menawarkan akses cepat, pelayanan VVIP, sistem ringan, serta kemudahan slotvip login dan slotvip link alternatif terbaru untuk pengalaman bermain yang lebih nyaman."> 27 <meta property="og:url" content="https://slotvipbogor.link/"> 28 <meta property="og:image" content="https://slotvipbogor.link/images/apk-slotvip.webp"> 29 <meta property="og:image:alt" content="SLOTVIP ð Versi Apk Terbaru Game Slot Pelayanan VVIP 2026"> 30 <meta property="product:price:amount" content="5000"> 31 <meta property="product:price:currency" content="IDR"> 32 <meta property="product:availability" content="out of stock"> 33 <meta name="twitter:card" content="summary_large_image"> 34 <meta name="twitter:title" content="SLOTVIP ð Versi Apk Terbaru Game Slot Pelayanan VVIP 2026"> 35 <meta name="twitter:description" content="SLOTVIP hadir dengan versi APK terbaru 2026 yang menawarkan akses cepat, pelayanan VVIP, sistem ringan, serta kemudahan slotvip login dan slotvip link alternatif terbaru untuk pengalaman bermain yang lebih nyaman."> 36 <meta name="twitter:image" content="https://slotvipbogor.link/images/apk-slotvip.webp"> 37
38<script type="application/ld+json"> 39{ 40 "@context": "https://schema.org", 41 "@type": "WebSite", 42 "@id": "/#website", 43 "url": "https://slotvipbogor.link/", 44 "name": "SLOTVIP", 45 "inLanguage": "id", 46 "potentialAction": { 47 "@type": "SearchAction", 48 "target": "https://slotvipbogor.link/", 49 "query-input": "required name=search_term_string" 50 } 51} 52</script>
52 53
54<script type="application/ld+json"> 55{ 56 "@context": "https://schema.org", 57 "@type": "Organization", 58 "@id": "/#organization", 59 "name": "SLOTVIP", 60 "url": "https://slotvipbogor.link/", 61 "logo": "https://slotvipbogor.link/images/slotvip-logo.png" 62} 63</script>
63 64
65<script type="application/ld+json"> 66{ 67 "@context": "https://schema.org", 68 "@type": "Product", 69 "name": "SLOTVIP ð Versi Apk Terbaru Game Slot Pelayanan VVIP 2026", 70 "sku": "1S83N0880RID", 71 "image": [ 72 "https://slotvipbogor.link/images/apk-slotvip.webp" 73 ], 74 "url": "https://slotvipbogor.link/", 75 "description": "SLOTVIP menyediakan informasi link akses SLOTVIP APK dan GAME Macau. Temukan informasi yang tersusun rapi, akses melalui perangkat desktop maupun mobile, serta layanan pelanggan yang tersedia selama 24 jam.", 76 "category": "SLOTVIP", 77 "brand": { 78 "@type": "Brand", 79 "name": "SLOTVIP" 80 }, 81 "offers": { 82 "@type": "Offer", 83 "url": "https://slotvipbogor.link/", 84 "priceCurrency": "IDR", 85 "price": "5000", 86 "priceValidUntil": "2027-03-01", 87 "availability": "https://schema.org/OutOfStock", 88 "itemCondition": "https://schema.org/NewCondition", 89 "seller": { 90 "@type": "Organization", 91 "name": "SLOTVIP", 92 "url": "https://slotvipbogor.link/" 93 } 94 }, 95 "aggregateRating": { 96 "@type": "AggregateRating", 97 "ratingValue": "5", 98 "reviewCount": "6", 99 "bestRating": "5", 100 "worstRating": "1" 101 }, 102 "review": [ 103 { 104 "@type": "Review", 105 "author": { 106 "@type": "Person", 107 "name": "Ardi" 108 }, 109 "reviewBody": "Saya cukup terkesan dengan performa slotvip apk terbaru. Rasanya seperti membuka pintu yang engselnya baru diberi minyak, semuanya berjalan mulus tanpa bunyi yang mengganggu.", 110 "reviewRating": { 111 "@type": "Rating", 112 "ratingValue": "5", 113 "bestRating": "5", 114 "worstRating": "1" 115 } 116 }, 117 { 118 "@type": "Review", 119 "author": { 120 "@type": "Person", 121 "name": "Dian" 122 }, 123 "reviewBody": "Slotvip login sangat cepat. Bahkan ketika jaringan sedang tidak terlalu ramah, proses masuk tetap terasa ringan.", 124 "reviewRating": { 125 "@type": "Rating", 126 "ratingValue": "5", 127 "bestRating": "5", 128 "worstRating": "1" 129 } 130 }, 131 { 132 "@type": "Review", 133 "author": { 134 "@type": "Person", 135 "name": "Faisal" 136 }, 137 "reviewBody": "Saya beberapa kali menggunakan slotvip link alternatif dan hasilnya selalu stabil. Tidak perlu repot mencari akses ke sana kemari.", 138 "reviewRating": { 139 "@type": "Rating", 140 "ratingValue": "5", 141 "bestRating": "5", 142 "worstRating": "1" 143 } 144 }, 145 { 146 "@type": "Review", 147 "author": { 148 "@type": "Person", 149 "name": "Raka" 150 }, 151 "reviewBody": "Pelayanan yang diberikan terasa berbeda. Responsnya cepat dan tidak bertele-tele.", 152 "reviewRating": { 153 "@type": "Rating", 154 "ratingValue": "5", 155 "bestRating": "5", 156 "worstRating": "1" 157 } 158 }, 159 { 160 "@type": "Review", 161 "author": { 162 "@type": "Person", 163 "name": "Mira" 164 }, 165 "reviewBody": "Tampilan terbaru membuat pengalaman menggunakan slotvip menjadi jauh lebih nyaman dibanding sebelumnya.", 166 "reviewRating": { 167 "@type": "Rating", 168 "ratingValue": "5", 169 "bestRating": "5", 170 "worstRating": "1" 171 } 172 }, 173 { 174 "@type": "Review", 175 "author": { 176 "@type": "Person", 177 "name": "Rian" 178 }, 179 "reviewBody": "Slotvip alternatif sangat membantu ketika akses utama sedang sibuk. Semuanya tetap bisa digunakan tanpa hambatan berarti.", 180 "reviewRating": { 181 "@type": "Rating", 182 "ratingValue": "5", 183 "bestRating": "5", 184 "worstRating": "1" 185 } 186 } 187 ] 188} 189</script>
189 190
191<script type="application/ld+json"> 192{ 193 "@context": "https://schema.org", 194 "@type": "BreadcrumbList", 195 "itemListElement": [ 196 { 197 "@type": "ListItem", 198 "position": 1, 199 "name": "SLOTVIP", 200 "item": "https://slotvipbogor.link/" 201 }, 202 { 203 "@type": "ListItem", 204 "position": 2, 205 "name": "SLOT VIP", 206 "item": "https://slotvipbogor.link/" 207 }, 208 { 209 "@type": "ListItem", 210 "position": 3, 211 "name": "SLOTVIP LINK", 212 "item": "https://slotvipbogor.link/" 213 }, 214 { 215 "@type": "ListItem", 216 "position": 4, 217 "name": "SLOTVIP APK", 218 "item": "https://slotvipbogor.link/" 219 }, 220 { 221 "@type": "ListItem", 222 "position": 5, 223 "name": "SLOTVIP ð Versi Apk Terbaru Game Slot Pelayanan VVIP 2026", 224 "item": "https://slotvipbogor.link/" 225 } 226 ] 227} 228</script>
228 229 230
231<script type="application/ld+json"> 232{ 233 "@context": "https://schema.org", 234 "@type": "FAQPage", 235 "mainEntity": [ 236 { 237 "@type": "Question", 238 "name": "Apa itu SLOTVIP?", 239 "acceptedAnswer": { 240 "@type": "Answer", 241 "text": "SLOTVIP merupakan platform hiburan digital yang menghadirkan berbagai pilihan permainan modern dengan dukungan sistem yang stabil dan layanan pelanggan responsif." 242 } 243 }, 244 { 245 "@type": "Question", 246 "name": "Bagaimana cara mendapatkan slotvip apk terbaru?", 247 "acceptedAnswer": { 248 "@type": "Answer", 249 "text": "Pengguna dapat mengakses slotvip apk terbaru melalui halaman resmi yang selalu diperbarui untuk memastikan keamanan dan kompatibilitas perangkat." 250 } 251 }, 252 { 253 "@type": "Question", 254 "name": "Apakah slotvip login bisa dilakukan melalui semua perangkat?", 255 "acceptedAnswer": { 256 "@type": "Answer", 257 "text": "Ya, slotvip login dapat dilakukan melalui smartphone Android, tablet, maupun perangkat desktop dengan tampilan yang menyesuaikan perangkat pengguna." 258 } 259 }, 260 { 261 "@type": "Question",
262 "name": "Kenapa saya perlu menggunakan slotvip link alternatif?", 263 "acceptedAnswer": { 264 "@type": "Answer", 265 "text": "Slotvip link alternatif membantu pengguna tetap dapat mengakses layanan ketika terjadi pemeliharaan jaringan atau kendala akses pada jalur utama." 266 } 267 }, 268 { 269 "@type": "Question", 270 "name": "Apakah slotvip apk ringan digunakan?", 271 "acceptedAnswer": { 272 "@type": "Answer", 273 "text": "Versi terbaru dirancang lebih ringan sehingga tetap nyaman digunakan meskipun pada perangkat dengan spesifikasi menengah." 274 } 275 }, 276 { 277 "@type": "Question", 278 "name": "Bagaimana jika slotvip login mengalami kendala?", 279 "acceptedAnswer": { 280 "@type": "Answer", 281 "text": "Pengguna dapat menghubungi layanan bantuan yang tersedia selama 24 jam untuk mendapatkan panduan penyelesaian masalah secara cepat." 282 } 283 } 284 ] 285} 286</script>
286 287 288 <!-- User Session Data --> 289 <meta name="csrf-token" content="9ce6e4a17f7cc189893df9e47789b13e98829450d516a0cae5ca7b5f43e5dadc"> 290 <meta name="user-logged-in" content="false"> 291 <meta name="user-id" content="0"> 292 293 <meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=0" /> 294 295 <link rel="shortcut icon" href="https://slotvipbogor.link/images/Favicon-Slotvip-Polos.ico"image/x-icon"> 296 <link rel="stylesheet" href="https://plazaitdotid.pages.dev/assets/css/style.css"> 297 <link rel="stylesheet" href="https://plazaitdotid.pages.dev/assets/css/bottom-nav.css"> 298 <link rel="stylesheet" href="https://plazaitdotid.pages.dev/assets/css/search-suggest.css"> 299 <link rel="stylesheet" href="https://plazaitdotid.pages.dev/assets/css/product-detail.css"> 300 <link rel="stylesheet" href="https://plazaitdotid.pages.dev/assets/css/product-grid.css"> 301 <link rel="stylesheet" href="https://plazaitdotid.pages.dev/assets/css/site-notice.css"> 302 <link rel="stylesheet" href="https://plazaitdotid.pages.dev/assets/css/benchmark.css"> 303 <link rel="stylesheet" href="https://plazaitdotid.pages.dev/assets/css/product-filters.css"> 304 <link rel="stylesheet" href="https://plazaitdotid.pages.dev/assets/css/mega-menu-tiles.css"> 305 <link rel="stylesheet" href="https://plazaitdotid.pages.dev/assets/css/product-compare.css"> 306 <link rel="stylesheet" href="https://plazaitdotid.pages.dev/assets/css/product-card-actions.css"> 307 <link rel="stylesheet" href="https://plazaitdotid.pages.dev/assets/css/modal.css"> 308 309 <link rel="stylesheet" href="https://plazaitdotid.pages.dev/assets/css/reviews-points.css"> 310 311 </head> 312 <body> 313 <header class="topbar"> 314 <div class="container topbar-inner"> 315 <div class="topbar-left"> 316 SLOTVIP ð Versi Apk Terbaru Game Slot Pelayanan VVIP 2026 317 </div> 318 <div class="topbar-right"> 319 <a href="https://slotvipbogor.link/">SLOTVIP</a> 320 <a href="https://slotvipbogor.link/">Slot Online</a> 321 <a href="https://slotvipbogor.link/">Daftar</a> 322 <a href="https://slotvipbogor.link/">Masuk</a> 323 </div> 324 </div> 325 </header> 326 <nav class="navbar"> 327 <nav class="navbar-logo" style="width: 100%;"> 328 <div class="container nav-inner" style="justify-items: center; justify-content: center;"> 329 <a href="/" class="logo-mobile"> 330 <img src="https://slotvipbogor.link/images/slotvip-logo.png" alt="SLOTVIP" height="100"> 331 </a> 332 </div> 333 </nav> 334 <div class="container nav-inner"> 335 <a href="/" class="logo"> 336 <img src="https://slotvipbogor.link/images/slotvip-logo.png" alt="SLOTVIP" height="100"> 337 </a> 338 339 340 <form class="search" method="get" action="#"> 341 <input type="hidden" name="page" value="produk"> 342 343 <!-- Search Icon (Desktop) --> 344 <button type="submit" class="search-icon-btn" id="searchBtn" aria-label="Cari"> 345 <svg width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5" stroke-linecap="round" stroke-linejoin="round"> 346 <circle cx="11" cy="11" r="8"/> 347 <path d="m21 21-4.35-4.35"/> 348 </svg> 349 </button> 350 351 <input type="text" name="q" id="searchInput" placeholder="Cari SLOTVIP" 352 value="" autocomplete="off"> 353 354 <div class="search-suggest" id="searchSuggest" hidden></div> 355 </form> 356 357 <div class="nav-actions"> 358 <!--<button class="icon-btn" id="notifBtn" title="Notifikasi">ð</button>--> 359 <button class="icon-btn cart-indicator" id="cartBtn" title="Keranjang"> 360 ð <span id="cartCount" class="badge" data-role="cart-badge" aria-live="polite">0</span> 361 </button> 362 363 364 <span id="compareCount" class="badge" data-role="compare-badge" aria-live="polite">0</span> 365 </button> 366 367 <!-- Dynamic login/logout button --> 368 <button class="login-btn" id="loginBtn" aria-label="Masuk">
369 <span class="login-text">Masuk</span> 370 <span class="login-ico" aria-hidden="true">ð</span> 371 </button> 372 </div> 373 </div> 374 375 <div class="container" style="display: flex; align-items: center;"> 376 377 378 <div class="mega-cats-wrapper"> 379 <div class="mega-cats container" id="megaCatsScroll" style="padding-left: 5px !important;"> 380 <a class="" href="https://slotvipbogor.link/"> 381 SLOTVIP </a> 382 <a class="" href="https://slotvipbogor.link/"> 383 SLOT VIP </a> 384 <a class="" href="https://slotvipbogor.link/"> 385 SLOTVIP APK </a> 386 <a class="" href="https://slotvipbogor.link/"> 387 GAME MACAU </a> 388 <a class="" href="https://slotvipbogor.link/"> 389 GAME MACAU TERPERCAYA </a> 390 <a class="" href="https://slotvipbogor.link/"> 391 SITUS GAME MACAU </a> 392 <a class="" href="https://slotvipbogor.link/"> 393 SITUS Slot ONLINE </a> 394 </div> 395 <div class="mega-cats-fade" id="megaCatsFade"></div> 396 </div> 397 </div> 398 </nav> 399 400 <!-- Panel Mega Menu - Outside navbar for full-screen --> 401 <div class="mm2-panel" data-mm2="panel" role="dialog" aria-label="Kategori"> 402 <div class="mm2-view is-active" data-mm2="top"></div> 403 <div class="mm2-view" data-mm2="detail"></div> 404 </div> 405 406 <!-- Backdrop - Outside navbar for full-screen --> 407 <div class="mm2-backdrop" data-mm2="backdrop"></div> 408 409 <!-- Mobile Bottom Navigation --> 410 <nav class="bottom-nav"> 411 <div class="bottom-nav-inner"> 412 <!-- Home --> 413 <a href="/" class="bottom-nav-item" id="bottomHomeBtn" data-page="home"> 414 <div class="bottom-nav-item-icon"> 415 <!-- Outlined icon (default) --> 416 <svg class="icon-outlined" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"> 417 <path d="M3 9l9-7 9 7v11a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2z"/> 418 <polyline points="9 22 9 12 15 12 15 22"/> 419 </svg> 420 <!-- Filled icon (active) --> 421 <svg class="icon-filled" viewBox="0 0 24 24" fill="currentColor"> 422 <path d="M11.47 3.84a.75.75 0 011.06 0l8.69 8.69a.75.75 0 010 1.06l-.03.03a.75.75 0 01-1.06 0l-8.16-8.16-8.16 8.16a.75.75 0 01-1.06 0l-.03-.03a.75.75 0 010-1.06l8.69-8.69z"/> 423 <path d="M12 5.5l-7.5 7.5v8.25c0 .414.336.75.75.75h3.75v-6h6v6h3.75a.75.75 0 00.75-.75V13l-7.5-7.5z"/> 424 </svg> 425 </div> 426 <span class="bottom-nav-item-label">Home</span> 427 </a> 428 429 <!-- Kategori --> 430 <button class="bottom-nav-item" id="bottomCategoryBtn" data-mm2="trigger" aria-label="Kategori"> 431 <div class="bottom-nav-item-icon"> 432 <!-- Outlined icon (default) --> 433 <svg class="icon-outlined" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"> 434 <line x1="3" y1="12" x2="21" y2="12"/> 435 <line x1="3" y1="6" x2="21" y2="6"/> 436 <line x1="3" y1="18" x2="21" y2="18"/> 437 </svg> 438 <!-- Filled icon (active) --> 439 <svg class="icon-filled" viewBox="0 0 24 24" fill="currentColor"> 440 <path d="M3 5.25A.75.75 0 013.75 4.5h16.5a.75.75 0 010 1.5H3.75A.75.75 0 013 5.25zM3 12a.75.75 0 01.75-.75h16.5a.75.75 0 010 1.5H3.75A.75.75 0 013 12zm0 6.75a.75.75 0 01.75-.75h16.5a.75.75 0 010 1.5H3.75a.75.75 0 01-.75-.75z"/> 441 </svg> 442 </div> 443 <span class="bottom-nav-item-label">Kategori</span> 444 </button> 445 446 <!-- Keranjang --> 447 <button class="bottom-nav-item" id="bottomCartBtn"> 448 <div class="bottom-nav-item-icon"> 449 <!-- Outlined icon (default) --> 450 <svg class="icon-outlined" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"> 451 <circle cx="9" cy="21" r="1"/> 452 <circle cx="20" cy="21" r="1"/> 453 <path d="M1 1h4l2.68 13.39a2 2 0 0 0 2 1.61h9.72a2 2 0 0 0 2-1.61L23 6H6"/> 454 </svg> 455 <!-- Filled icon (active) -->
456 <svg class="icon-filled" viewBox="0 0 24 24" fill="currentColor"> 457 <path d="M2.25 2.25a.75.75 0 000 1.5h1.386c.17 0 .318.114.362.278l2.558 9.592a3.752 3.752 0 00-2.806 3.63c0 .414.336.75.75.75h15.75a.75.75 0 000-1.5H5.378A2.25 2.25 0 017.5 15h11.218a.75.75 0 00.674-.421 60.358 60.358 0 002.96-7.228.75.75 0 00-.525-.965A60.864 60.864 0 005.68 4.509l-.232-.867A1.875 1.875 0 003.636 2.25H2.25zM3.75 20.25a1.5 1.5 0 113 0 1.5 1.5 0 01-3 0zM16.5 20.25a1.5 1.5 0 113 0 1.5 1.5 0 01-3 0z"/> 458 </svg> 459 <span class="bottom-nav-item-badge" id="bottomCartCount">0</span> 460 </div> 461 <span class="bottom-nav-item-label">Keranjang</span> 462 </button> 463 464 <!-- Compare --> 465 <button class="bottom-nav-item" id="bottomCompareBtn"> 466 <div class="bottom-nav-item-icon"> 467 <!-- Outlined icon (default) --> 468 <svg class="icon-outlined" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"> 469 <polyline points="17 11 21 7 17 3"/> 470 <path d="M21 7H9"/> 471 <polyline points="7 21 3 17 7 13"/> 472 <path d="M15 17H3"/> 473 </svg> 474 <!-- Filled icon (active) --> 475 <svg class="icon-filled" viewBox="0 0 24 24" fill="currentColor"> 476 <path d="M21.75 6.75a.75.75 0 00-.75-.75H9a.75.75 0 000 1.5h10.19L15.22 11.47a.75.75 0 001.06 1.06l4.5-4.5a.75.75 0 00.22-.53.75.75 0 00-.22-.53l-.03-.03zM8.78 12.47L4.28 16.97a.75.75 0 000 1.06l4.5 4.5a.75.75 0 001.06-1.06L6.06 18H15a.75.75 0 000-1.5H4.81l3.97-3.97a.75.75 0 00-1.06-1.06z"/> 477 </svg> 478 <span class="bottom-nav-item-badge" id="bottomCompareCount" style="display:none;">0</span> 479 </div> 480 <span class="bottom-nav-item-label">Compare</span> 481 </button> 482 483 <!-- Chat - Always show, check login in JavaScript --> 484 <button class="bottom-nav-item" id="bottomChatBtn" data-page="chat"> 485 <div class="bottom-nav-item-icon"> 486 <!-- Outlined icon (default) --> 487 <svg class="icon-outlined" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" opacity="0.85"> 488 <path d="M21 15a2 2 0 0 1-2 2H7l-4 4V5a2 2 0 0 1 2-2h14a2 2 0 0 1 2 2z"/> 489 </svg> 490 <!-- Filled icon (active) --> 491 <svg class="icon-filled" viewBox="0 0 24 24" fill="currentColor"> 492 <path d="M20 2H4c-1.1 0-2 .9-2 2v18l4-4h14c1.1 0 2-.9 2-2V4c0-1.1-.9-2-2-2z"/> 493 </svg> 494 <span class="bottom-nav-item-badge" id="bottomChatCount" style="display:none;">0</span> 495 </div> 496 <span class="bottom-nav-item-label">Chat</span> 497 </button> 498 499 <!-- Akun --> 500 <button class="bottom-nav-item" id="bottomLoginBtn"> 501 <div class="bottom-nav-item-icon"> 502 <!-- Outlined icon (default) --> 503 <svg class="icon-outlined" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"> 504 <path d="M20 21v-2a4 4 0 0 0-4-4H8a4 4 0 0 0-4 4v2"/> 505 <circle cx="12" cy="7" r="4"/> 506 </svg> 507 <!-- Filled icon (active) --> 508 <svg class="icon-filled" viewBox="0 0 24 24" fill="currentColor"> 509 <path fill-rule="evenodd" d="M7.5 6a4.5 4.5 0 119 0 4.5 4.5 0 01-9 0zM3.751 20.105a8.25 8.25 0 0116.498 0 .75.75 0 01-.437.695A18.683 18.683 0 0112 22.5c-2.786 0-5.433-.608-7.812-1.7a.75.75 0 01-.437-.695z" clip-rule="evenodd"/> 510 </svg> 511 </div> 512 <span class="bottom-nav-item-label">Login</span> 513 </button> 514 </svg> 515 </div> 516 </button> 517 </div> 518 </nav> 519 <!-- Mobile User Menu Bottom Sheet --> 520 521
521<script nonce="se3iyzEHMc9FQEB4wSyd0w=="> 522 (function(){ 523 const btn = document.getElementById('megaMoreBtn'); 524 const dd = document.getElementById('megaMoreDropdown'); 525 if(!btn || !dd) return; 526 527 function openDD(){ 528 dd.hidden = false; 529 btn.setAttribute('aria-expanded','true'); 530 document.addEventListener('click', outside, {capture:true}); 531 document.addEventListener('keydown', esc); 532 } 533 function closeDD(){ 534 if(dd.hidden) return; 535 dd.hidden = true; 536 btn.setAttribute('aria-expanded','false'); 537 document.removeEventListener('click', outside, {capture:true}); 538 document.removeEventListener('keydown', esc); 539 } 540 function toggle(){ dd.hidden ? openDD() : closeDD(); } 541 function outside(e){ 542 if(!dd.contains(e.target) && e.target !== btn){ 543 closeDD(); 544 } 545 } 546 function esc(e){ 547 if(e.key === 'Escape'){ 548 closeDD(); 549 btn.focus(); 550 } 551 } 552 btn.addEventListener('click', toggle); 553 })(); 554 555 // ========== HORIZONTAL SCROLL FADE INDICATOR ========== 556 (function(){ 557 const megaCats = document.getElementById('megaCatsScroll'); 558 const fade = document.getElementById('megaCatsFade'); 559 if (!megaCats || !fade) return; 560 561 function updateFade() { 562 const scrollLeft = megaCats.scrollLeft; 563 const scrollWidth = megaCats.scrollWidth; 564 const clientWidth = megaCats.clientWidth; 565 const maxScroll = scrollWidth - clientWidth; 566 567 // Hide fade when scrolled to end (within 10px tolerance) 568 if (maxScroll - scrollLeft <= 10) { 569 fade.style.opacity = '0'; 570 } else { 571 fade.style.opacity = '1'; 572 } 573 } 574 575 // Update on scroll 576 megaCats.addEventListener('scroll', updateFade, { passive: true }); 577 578 // Update on resize 579 window.addEventListener('resize', updateFade, { passive: true }); 580 581 // Initial check 582 setTimeout(updateFade, 100); 583 })(); 584 585 document.addEventListener('DOMContentLoaded', function () { 586 var input = document.getElementById('searchInput'); 587 if (!input) return; 588 input.addEventListener('keydown', function (e) { 589 if (e.key === 'Enter') { 590 e.preventDefault(); 591 var form = input.form; 592 if (!form) return; 593 if (typeof form.requestSubmit === 'function') form.requestSubmit(); 594 else form.submit(); 595 } 596 }); 597 }); 598 599 600 (function(){ 601 const cartBtn = document.getElementById('cartBtn'); 602 if (cartBtn) { 603 cartBtn.addEventListener('click', function(e) { 604 e.preventDefault(); 605 606 const checkLogin = () => { 607 return window.isUserLoggedIn ? window.isUserLoggedIn() : false; 608 }; 609 610 if (checkLogin()) { 611 window.location.href = '/keranjang'; 612 } else { 613 showCartLoginModal(); 614 } 615 }); 616 } 617 618 const loginBtn = document.getElementById('loginBtn'); 619 if (loginBtn) { 620 loginBtn.addEventListener('click', function(e) { 621 e.preventDefault(); 622 window.location.href = 'https://slotvipbogor.link/'; 623 }); 624 } 625 626 const userMenuBtn = document.getElementById('userMenuBtn'); 627 const userDropdown = document.getElementById('userDropdown'); 628 629 if (userMenuBtn && userDropdown) { 630 function openDropdown() { 631 userDropdown.hidden = false; 632 userMenuBtn.setAttribute('aria-expanded', 'true'); 633 document.addEventListener('click', closeOnOutside, { capture: true }); 634 document.addEventListener('keydown', closeOnEscape); 635 } 636 637 function closeDropdown() { 638 if (userDropdown.hidden) return; 639 userDropdown.hidden = true; 640 userMenuBtn.setAttribute('aria-expanded', 'false'); 641 document.removeEventListener('click', closeOnOutside, { capture: true }); 642 document.removeEventListener('keydown', closeOnEscape); 643 } 644 645 function closeOnOutside(e) { 646 if (!userDropdown.contains(e.target) && e.target !== userMenuBtn) { 647 closeDropdown(); 648 } 649 } 650 651 function closeOnEscape(e) { 652 if (e.key === 'Escape') { 653 closeDropdown(); 654 userMenuBtn.focus(); 655 } 656 } 657 658 userMenuBtn.addEventListener('click', function(e) { 659 e.preventDefault(); 660 userDropdown.hidden ? openDropdown() : closeDropdown(); 661 }); 662 663 // Close dropdown when clicking profile links 664 userDropdown.querySelectorAll('[data-close-dropdown]').forEach(link => { 665 link.addEventListener('click', function() { 666 closeDropdown(); 667 }); 668 }); 669 } 670 671 // Bottom nav profile button - toggle mobile bottom sheet 672 const bottomProfileBtn = document.getElementById('bottomProfileBtn'); 673 const mobileUserSheet = document.getElementById('mobileUserSheet'); 674 const mobileUserSheetBackdrop = document.getElementById('mobileUserSheetBackdrop'); 675 676 if (bottomProfileBtn && mobileUserSheet) { 677 function openMobileSheet() { 678 mobileUserSheet.hidden = false; 679 document.body.style.overflow = 'hidden'; 680 // Trigger animation 681 requestAnimationFrame(() => { 682 mobileUserSheet.classList.add('active'); 683 }); 684 } 685 686 function closeMobileSheet() { 687 mobileUserSheet.classList.remove('active'); 688 document.body.style.overflow = ''; 689 setTimeout(() => { 690 mobileUserSheet.hidden = true; 691 }, 300); 692 } 693 694 bottomProfileBtn.addEventListener('click', function(e) { 695 e.preventDefault(); 696 openMobileSheet(); 697 }); 698 699 if (mobileUserSheetBackdrop) { 700 mobileUserSheetBackdrop.addEventListener('click', closeMobileSheet); 701 } 702 703 // Close on escape key 704 document.addEventListener('keydown', function(e) { 705 if (e.key === 'Escape' && !mobileUserSheet.hidden) { 706 closeMobileSheet(); 707 } 708 }); 709 710 // Close sheet when clicking profile links 711 mobileUserSheet.querySelectorAll('[data-close-sheet]').forEach(link => { 712 link.addEventListener('click', function() { 713 closeMobileSheet(); 714 }); 715 }); 716 } 717 718 // Handle Google avatar error in bottom-nav (fallback to initials) 719 const bottomNavAvatar = document.querySelector('.bottom-nav-avatar-img'); 720 if (bottomNavAvatar) { 721 bottomNavAvatar.addEventListener('error', function() { 722 const initials = this.getAttribute('data-fallback-initials') || 'U'; 723 const initialsDiv = document.createElement('div'); 724 initialsDiv.className = 'bottom-nav-avatar-initials'; 725 initialsDiv.textContent = initials; 726 this.parentNode.replaceChild(initialsDiv, this); 727 }); 728 } 729 730 // Mobile logout button 731 const mobileLogoutBtn = document.getElementById('mobileLogoutBtn'); 732 if (mobileLogoutBtn) { 733 mobileLogoutBtn.addEventListener('click', async function(e) { 734 e.preventDefault(); 735 736 // Check push notification before logout 737 if (window.ChatNotification && typeof window.ChatNotification.confirmLogoutWithPushNotification === 'function') { 738 const confirmLogout = await window.ChatNotification.confirmLogoutWithPushNotification(); 739 if (!confirmLogout) { 740 return; // User cancelled logout 741 } 742 } 743 744 const getCsrfToken = () => document.querySelector('meta[name="csrf-token"]')?.getAttribute('content') || ''; 745 746 try { 747 const response = await fetch('/auth/logout', { 748 method: 'POST', 749 credentials: 'same-origin', 750 headers: { 751 'Content-Type': 'application/json', 752 'X-CSRF-Token': getCsrfToken() 753 }, 754 body: JSON.stringify({ 755 csrf_token: getCsrfToken() 756 }) 757 }); 758 759 if (response.ok) { 760 if (window.guestCart && typeof window.guestCart.clear === 'function') { 761 window.guestCart.clear(); 762 } 763 window.location.href = '/login?logged_out=1'; 764 } else { 765 console.error('Logout failed'); 766 window.location.href = '/logout'; 767 } 768 } catch (error) { 769 console.error('Logout error:', error); 770 window.location.href = '/logout'; 771 } 772 }); 773 } 774 775 const logoutBtn = document.getElementById('logoutBtn'); 776 if (logoutBtn) { 777 logoutBtn.addEventListener('click', async function(e) { 778 e.preventDefault(); 779 780 // Check push notification before logout 781 if (window.ChatNotification && typeof window.ChatNotification.confirmLogoutWithPushNotification === 'function') { 782 const confirmLogout = await window.ChatNotification.confirmLogoutWithPushNotification(); 783 if (!confirmLogout) { 784 return; // User cancelled logout 785 } 786 } 787 788 const getCsrfToken = () => document.querySelector('meta[name="csrf-token"]')?.getAttribute('content') || ''; 789 790 try { 791 const response = await fetch('/auth/logout', { 792 method: 'POST', 793 credentials: 'same-origin', 794 headers: { 795 'Content-Type': 'application/json', 796 'X-CSRF-Token': getCsrfToken() 797 }, 798 body: JSON.stringify({ 799 csrf_token: getCsrfToken() 800 }) 801 }); 802 803 if (response.ok) { 804 if (window.guestCart && typeof window.guestCart.clear === 'function') { 805 window.guestCart.clear(); 806 } 807 808 window.location.href = '/login?logged_out=1'; 809 } else { 810 console.error('Logout failed'); 811 window.location.href = '/logout'; 812 } 813 } catch (error) { 814 console.error('Logout error:', error); 815 window.location.href = '/logout'; 816 } 817 }); 818 } 819 820 const wishlistBtn = document.getElementById('wishlistBtn'); 821 const notifBtn = document.getElementById('notifBtn'); 822 823 if (wishlistBtn) { 824 wishlistBtn.addEventListener('click', function(e) { 825 e.preventDefault(); 826 alert('Fitur wishlist akan segera tersedia!'); 827 }); 828 } 829 830 if (notifBtn) { 831 notifBtn.addEventListener('click', function(e) { 832 e.preventDefault(); 833 alert('Fitur notifikasi akan segera tersedia!'); 834 }); 835 } 836 })();
837 838 // ========== MOBILE BOTTOM NAVIGATION ========== 839 (function initBottomNav() { 840 // Sync cart badge with bottom nav 841 function syncBottomCartBadge() { 842 const mainBadge = document.getElementById('cartCount'); 843 const bottomBadge = document.getElementById('bottomCartCount'); 844 if (mainBadge && bottomBadge) { 845 const count = mainBadge.textContent; 846 bottomBadge.textContent = count; 847 bottomBadge.style.display = parseInt(count) > 0 ? 'flex' : 'none'; 848 } 849 } 850 851 // Sync compare badge with bottom nav 852 function syncBottomCompareBadge() { 853 const mainBadge = document.getElementById('compareCount'); 854 const bottomBadge = document.getElementById('bottomCompareCount'); 855 if (mainBadge && bottomBadge) { 856 const count = mainBadge.textContent; 857 bottomBadge.textContent = count; 858 bottomBadge.style.display = parseInt(count) > 0 ? 'flex' : 'none'; 859 } 860 } 861 862 // Initial sync 863 syncBottomCartBadge(); 864 syncBottomCompareBadge(); 865 866 // Observe badge changes 867 const observer = new MutationObserver(function() { 868 syncBottomCartBadge(); 869 syncBottomCompareBadge(); 870 }); 871 872 const cartBadge = document.getElementById('cartCount'); 873 const compareBadge = document.getElementById('compareCount'); 874 875 if (cartBadge) observer.observe(cartBadge, { childList: true, characterData: true, subtree: true }); 876 if (compareBadge) observer.observe(compareBadge, { childList: true, characterData: true, subtree: true }); 877 878 // Bottom Cart Button 879 const bottomCartBtn = document.getElementById('bottomCartBtn'); 880 if (bottomCartBtn) { 881 bottomCartBtn.addEventListener('click', function(e) { 882 e.preventDefault(); 883 884 const checkLogin = () => { 885 return window.isUserLoggedIn ? window.isUserLoggedIn() : false; 886 }; 887 888 if (checkLogin()) { 889 window.location.href = '/keranjang'; 890 } else { 891 showCartLoginModal(); 892 } 893 }); 894 } 895 896 // Bottom Compare Button 897 const bottomCompareBtn = document.getElementById('bottomCompareBtn'); 898 if (bottomCompareBtn) { 899 bottomCompareBtn.addEventListener('click', function(e) { 900 e.preventDefault(); 901 902 // Close chat widget if open 903 if (window.plazaChat && window.plazaChat.isWidgetOpen) { 904 window.plazaChat.closeWidget(); 905 } 906 907 const mainCompareBtn = document.getElementById('compareBtn'); 908 if (mainCompareBtn) { 909 mainCompareBtn.click(); 910 } 911 }); 912 } 913 914 // Bottom Category Button - triggers mega menu 915 const bottomCategoryBtn = document.getElementById('bottomCategoryBtn'); 916 if (bottomCategoryBtn) { 917 bottomCategoryBtn.addEventListener('click', function(e) { 918 e.preventDefault(); 919 // Trigger desktop mega menu 920 const desktopTrigger = document.querySelector('.mm2-trigger:not(#bottomCategoryBtn)'); 921 if (desktopTrigger) { 922 desktopTrigger.click(); 923 } 924 }); 925 } 926 927 // Bottom Login Button 928 const bottomLoginBtn = document.getElementById('bottomLoginBtn'); 929 if (bottomLoginBtn) { 930 bottomLoginBtn.addEventListener('click', function(e) { 931 e.preventDefault(); 932 window.location.href = '/login'; 933 }); 934 } 935 936 // Bottom Chat Button 937 const bottomChatBtn = document.getElementById('bottomChatBtn'); 938 if (bottomChatBtn) { 939 bottomChatBtn.addEventListener('click', function(e) { 940 e.preventDefault(); 941 942 // Trigger chat widget (try multiple times if needed) 943 const triggerChat = () => { 944 const chatToggle = document.getElementById('chat-toggle-btn'); 945 if (chatToggle) { 946 chatToggle.click(); 947 return true; 948 } 949 return false; 950 }; 951 952 // Immediate attempt 953 if (!triggerChat()) { 954 // Retry after 100ms if not found 955 setTimeout(() => { 956 if (!triggerChat()) { 957 // Last resort: manually show popup 958 const popup = document.getElementById('chat-popup'); 959 if (popup) { 960 popup.style.display = 'block'; 961 } 962 } 963 }, 100); 964 } 965 }); 966 } 967 968 // Sync chat unread badge 969 function syncBottomChatBadge() { 970 const chatBadge = document.getElementById('chat-unread-badge'); 971 const bottomChatBadge = document.getElementById('bottomChatCount'); 972 if (chatBadge && bottomChatBadge) { 973 const count = chatBadge.textContent; 974 bottomChatBadge.textContent = count; 975 bottomChatBadge.style.display = chatBadge.style.display; 976 } 977 } 978 979 // Observe chat badge changes 980 const chatBadge = document.getElementById('chat-unread-badge'); 981 if (chatBadge) { 982 observer.observe(chatBadge, { attributes: true, childList: true, characterData: true, subtree: true });
983 syncBottomChatBadge(); 984 } 985 986 // Active state management based on current page 987 function updateActiveState() { 988 const currentPath = window.location.pathname; 989 const bottomNavItems = document.querySelectorAll('.bottom-nav-item'); 990 991 bottomNavItems.forEach(item => { 992 item.classList.remove('active'); 993 994 const itemId = item.id; 995 const page = item.getAttribute('data-page'); 996 const href = item.getAttribute('href'); 997 998 // Check by ID for specific pages 999 if (itemId === 'bottomHomeBtn' && currentPath === '/') { 1000 item.classList.add('active'); 1001 } else if (itemId === 'bottomCartBtn' && (currentPath === '/keranjang' || currentPath === '/cart')) { 1002 item.classList.add('active'); 1003 } else if (itemId === 'bottomProfileBtn' && currentPath.startsWith('/profile')) { 1004 item.classList.add('active'); 1005 } else if (itemId === 'bottomCategoryBtn' && currentPath.startsWith('/kategori')) { 1006 item.classList.add('active'); 1007 } else if (itemId === 'bottomCompareBtn' && currentPath === '/compare') { 1008 item.classList.add('active'); 1009 } else if (itemId === 'bottomChatBtn' && currentPath === '/chat') { 1010 item.classList.add('active'); 1011 } 1012 // Fallback: check by data-page attribute 1013 else if (page === 'home' && currentPath === '/') { 1014 item.classList.add('active'); 1015 } else if (page === 'profile' && currentPath.startsWith('/profile')) { 1016 item.classList.add('active'); 1017 } 1018 // Fallback: check by href 1019 else if (href && currentPath === href) { 1020 item.classList.add('active'); 1021 } 1022 }); 1023 } 1024 1025 // Update active state on load 1026 updateActiveState(); 1027 1028 // Bottom nav always visible - auto-hide disabled for better UX 1029 // const bottomNav = document.querySelector('.bottom-nav'); 1030 // if (bottomNav && window.innerWidth <= 640) { 1031 // // Auto-hide feature disabled 1032 // } 1033 })(); 1034 // Cart Login Modal Handler (Global scope) 1035 function showCartLoginModal() { 1036 const modal = document.getElementById('cartLoginModal'); 1037 if (!modal) return; 1038 1039 modal.classList.add('show'); 1040 1041 const confirmBtn = document.getElementById('cartLoginConfirm'); 1042 const registerBtn = document.getElementById('cartRegisterBtn'); 1043 const cancelBtn = document.getElementById('cartLoginCancel'); 1044 1045 const handleLogin = () => { 1046 window.location.href = '/login?return=' + encodeURIComponent('/keranjang'); 1047 }; 1048 1049 const handleRegister = () => { 1050 window.location.href = '/register?return=' + encodeURIComponent('/keranjang'); 1051 }; 1052 1053 const handleCancel = () => { 1054 modal.classList.remove('show'); 1055 confirmBtn.removeEventListener('click', handleLogin); 1056 registerBtn.removeEventListener('click', handleRegister); 1057 cancelBtn.removeEventListener('click', handleCancel); 1058 }; 1059 1060 confirmBtn.removeEventListener('click', handleLogin); 1061 registerBtn.removeEventListener('click', handleRegister); 1062 cancelBtn.removeEventListener('click', handleCancel); 1063 1064 confirmBtn.addEventListener('click', handleLogin); 1065 registerBtn.addEventListener('click', handleRegister); 1066 cancelBtn.addEventListener('click', handleCancel); 1067 1068 modal.addEventListener('click', (e) => { 1069 if (e.target === modal) { 1070 handleCancel(); 1071 } 1072 }); 1073 } 1074 </script>
1074 1075
1075<script src="https://plazaitdotid.pages.dev/assets/js/cart-badge.js" defer nonce="se3iyzEHMc9FQEB4wSyd0w=="></script>
1075 1076 1077 <!-- Product Compare Sidebar --> 1078 <div class="compare-sidebar" id="compareSidebar"> 1079 <div class="compare-header"> 1080 <h4 class="compare-title"> 1081 <svg width="20" height="20" viewBox="0 0 24 24" fill="currentColor"> 1082 <path d="M9.5,3A6.5,6.5 0 0,1 16,9.5C16,11.11 15.41,12.59 14.44,13.73L14.71,14H15.5L20.5,19L19,20.5L14,15.5V14.71L13.73,14.44C12.59,15.41 11.11,16 9.5,16A6.5,6.5 0 0,1 3,9.5A6.5,6.5 0 0,1 9.5,3M9.5,5C7,5 5,7 5,9.5C5,12 7,14 9.5,14C12,14 14,12 14,9.5C14,7 12,5 9.5,5Z"/> 1083 </svg> 1084 Bandingkan Produk 1085 <span class="compare-count" id="compareCountSidebar">(0)</span> 1086 </h4> 1087 <button class="compare-close" id="compareClose" aria-label="Tutup"> 1088 <svg width="18" height="18" viewBox="0 0 24 24" fill="currentColor"> 1089 <path d="M18.3 5.7a1 1 0 0 0-1.4 0L12 10.6 7.1 5.7a1 1 0 1 0-1.4 1.4L10.6 12l-4.9 4.9a1 1 0 0 0 1.4 1.4L12 13.4l4.9 4.9a1 1 0 0 0 1.4-1.4L13.4 12l4.9-4.9a1 1 0 0 0 0-1.4z"/> 1090 </svg> 1091 </button> 1092 </div> 1093 1094 <div class="compare-content"> 1095 <div class="compare-empty" id="compareEmpty"> 1096 <div class="empty-icon"> 1097 <svg width="48" height="48" viewBox="0 0 24 24" fill="currentColor" opacity="0.3"> 1098 <path d="M9.5,3A6.5,6.5 0 0,1 16,9.5C16,11.11 15.41,12.59 14.44,13.73L14.71,14H15.5L20.5,19L19,20.5L14,15.5V14.71L13.73,14.44C12.59,15.41 11.11,16 9.5,16A6.5,6.5 0 0,1 3,9.5A6.5,6.5 0 0,1 9.5,3M9.5,5C7,5 5,7 5,9.5C5,12 7,14 9.5,14C12,14 14,12 14,9.5C14,7 12,5 9.5,5Z"/> 1099 </svg> 1100 </div> 1101 <h5>Belum ada produk dipilih</h5> 1102 <p>Pilih produk yang ingin dibandingkan dengan klik tombol "Bandingkan Produk" di halaman produk.</p> 1103 </div> 1104 1105 <div class="compare-list" id="compareList"> 1106 <!-- Products will be populated here --> 1107 </div> 1108 </div> 1109 1110 <div class="compare-actions" id="compareActions"> 1111 <button class="btn btn-outline-danger btn-sm" id="compareClearAll"> 1112 <svg width="16" height="16" viewBox="0 0 24 24" fill="currentColor"> 1113 <path d="M19,6.41L17.59,5L12,10.59L6.41,5L5,6.41L10.59,12L5,17.59L6.41,19L12,13.41L17.59,19L19,17.59L13.41,12L19,6.41Z"/> 1114 </svg> 1115 Hapus Semua 1116 </button> 1117 <button class="btn btn-primary btn-sm" id="compareAnalyze" disabled> 1118 <svg width="16" height="16" viewBox="0 0 24 24" fill="currentColor"> 1119 <path d="M12,2A10,10 0 0,0 2,12A10,10 0 0,0 12,22A10,10 0 0,0 22,12A10,10 0 0,0 12,2M12,4A8,8 0 0,1 20,12A8,8 0 0,1 12,20A8,8 0 0,1 4,12A8,8 0 0,1 12,4M11,16.5L18,9.5L16.59,8.09L11,13.67L7.91,10.59L6.5,12L11,16.5Z"/> 1120 </svg> 1121 Analisis AI 1122 </button> 1123 </div> 1124 1125 <!-- AI Disclaimer in Sidebar --> 1126 <div class="compare-disclaimer"> 1127 <div class="ai-disclaimer"> 1128 <div class="disclaimer-text"> 1129 <strong>ð¡ Catatan:</strong> Dengan berbagai pilihan yang tersedia, pengguna memiliki kebebasan untuk menentukan jenis permainan yang paling sesuai dengan preferensi masing-masing. 1130 </div> 1131 </div> 1132 </div> 1133 </div><link rel="stylesheet" href="https://plazaitdotid.pages.dev/assets/css/pd-lightbox.css"> 1134 <style>.paylater-promo{display:inline-flex;align-items:center;gap:8px;background:linear-gradient(135deg,#ffffff 0,#ffffff 100%);border:1px solid #000000;border-radius:8px;padding:8px 12px;font-size:13px;line-height:1.4;margin:8px 0}.paylater-promo-sm{padding:6px 10px;font-size:11px;gap:6px}.paylater-promo-md{padding:8px 12px;font-size:13px;gap:8px}.paylater-promo-lg{padding:10px 16px;font-size:14px;gap:10px}.paylater-icon{font-size:1.2em;flex-shrink:0}.paylater-text{display:flex;flex-direction:column;gap:2px}.paylater-text strong{color:#000000;font-weight:600}.paylater-text small{color:#000000;font-size:.85em;opacity:.9}.paylater-desktop-only{display:none}.paylater-mobile-only{display:flex}@media (min-width:641px){.paylater-desktop-only{display:flex}.paylater-mobile-only{display:none}}@media (max-width:640px){.paylater-promo{font-size:12px;padding:7px 10px}.paylater-promo-lg{font-size:13px;padding:8px 12px}}@media print{.paylater-promo{display:none!important}}.paylater-compact{display:inline-block;font-size:11px;font-weight:600;color:#ffd700;background:#d1fae5;padding:3px 8px;border-radius:4px;margin:6px 0 4px;line-height:1.3}@media (max-width:640px){.paylater-compact{font-size:10px;padding:2px 6px;margin:5px 0 3px}}@media print{.paylater-compact{display:none!important}}</style><style nonce="se3iyzEHMc9FQEB4wSyd0w==">.pd-voucher-minimal{margin:10px 0;display:flex;flex-direction:column;gap:6px}.pdv-min-item{display:flex;align-items:center;gap:8px;padding:0;height:32px;transition:all .2s ease}.pdv-min-hidden{display:none}.pdv-min-disabled{opacity:.5}.pdv-badge-btn{display:inline-flex;align-items:center;gap:8px;background:linear-gradient(135deg,#f80000 0,#f80000 100%);border:none;border-radius:8px;padding:3px;
1134cursor:pointer;transition:all .2s ease;width:auto}.pdv-badge-btn:hover:not(:disabled){transform:translateY(-1px);box-shadow:0 4px 12px rgba(102,126,234,.3)}.pdv-badge-btn:disabled{opacity:.6;cursor:not-allowed}.pdv-badge-icon{color:#fff;flex-shrink:0}.pdv-badge-text{font-size:14px;font-weight:700;color:#fff;white-space:nowrap}.pdv-badge-code{font-family:'Courier New',monospace;font-size:13px;font-weight:700;color:#fff;background:rgba(255,255,255,.2);padding:4px 8px;border-radius:4px;border:none;white-space:nowrap}.pdv-min-copy,.pdv-min-more{padding:4px 12px;font-size:12px;font-weight:600;border-radius:5px;border:1px solid #e2e8f0;background:#fff;color:#f80000;cursor:pointer;transition:all .2s ease;white-space:nowrap}.pdv-min-copy:hover:not(:disabled),.pdv-min-more:hover{background:#f80000;color:#fff;border-color:#f80000}.pdv-min-copy:disabled{opacity:.4;cursor:not-allowed}.pdv-min-copy.copied{background:#c52222;color:#fff;border-color:#c52222}.pdv-min-more{margin-left:auto}.modal-close{position:absolute;top:20px;right:20px;background:none;border:none;cursor:pointer;color:#64748b;padding:4px;transition:color .2s ease}.modal-close:hover{color:#1e293b}.modal-body{margin-bottom:8px}.voucher-modal-content{text-align:center}.voucher-modal-badge{display:inline-flex;flex-direction:row;align-items:center;gap:6px;background:linear-gradient(135deg,#f80000 0,#f80000 100%);border-radius:10px;padding:8px 16px;margin-bottom:12px}.vmb-value{font-size:18px;font-weight:700;color:#fff;line-height:1}.vmb-label{font-size:18px;font-weight:700;color:#fff;text-transform:uppercase;letter-spacing:.5px}.voucher-modal-code{font-family:'Courier New',monospace;font-size:14px;font-weight:700;color:#f80000;background:rgba(102,126,234,.1);padding:6px 12px;border-radius:6px;border:2px dashed rgba(102,126,234,.3);display:inline-block;margin-bottom:10px}.voucher-modal-name{font-size:14px;font-weight:600;color:#1e293b;margin-bottom:16px}.voucher-modal-details{text-align:left;background:#f8fafc;border-radius:8px;padding:12px;margin-bottom:16px}.vmd-item{display:flex;align-items:flex-start;gap:8px;padding:6px 0;font-size:13px;color:#64748b;border-bottom:1px solid #e2e8f0}.vmd-item:last-child{border-bottom:none}.vmd-item svg{color:#f80000;flex-shrink:0;margin-top:2px}.vmd-item strong{color:#1e293b}.modal-actions{padding:20px}.modal-btn-primary{background:linear-gradient(135deg,#f80000 0,#f80000 100%);color:#fff}.modal-btn-primary:hover{opacity:.9;transform:translateY(-1px)}@media (max-width:640px){.pdv-min-item{gap:6px}.pdv-badge-btn{padding:3px;gap:6px}.pdv-badge-text{font-size:13px}.pdv-badge-code{font-size:12px;padding:3px 6px}.pdv-min-copy,.pdv-min-more{padding:3px 10px;font-size:11px}.modal-dialog{max-width:95%;margin:20px}.vmb-value{font-size:16px}.vmb-label{font-size:16px}.voucher-modal-code{font-size:13px;padding:5px 10px}}</style><style nonce="se3iyzEHMc9FQEB4wSyd0w==">.promo-endyear-mini-banner{display:flex;align-items:center;gap:12px;padding:12px 16px;background:rgba(255,255,255,.8);backdrop-filter:blur(10px);-webkit-backdrop-filter:blur(10px);border:2px solid rgba(242,140,26,.2);border-radius:12px;margin:16px 0;box-shadow:0 4px 16px rgba(0,0,0,.08);transition:all .3s ease}.promo-endyear-mini-banner:hover{transform:translateY(-2px);box-shadow:0 6px 20px rgba(0,0,0,.12);border-color:rgba(242,140,26,.4)}.pey-icon{font-size:32px;line-height:1;flex-shrink:0}.pey-content{flex:1;min-width:0}.pey-content strong{display:block;font-size:14px;font-weight:700;color:#F28C1A;margin-bottom:2px}.pey-content span{display:block;font-size:13px;color:#64748b;line-height:1.4}.pey-link{flex-shrink:0;padding:8px 16px;background:linear-gradient(135deg,#F28C1A,#FFB84D);color:#fff;text-decoration:none;font-size:13px;font-weight:700;border-radius:8px;white-space:nowrap;transition:all .2s ease;box-shadow:0 2px 8px rgba(242,140,26,.25)}.pey-link:hover{transform:translateX(2px);box-shadow:0 4px 12px rgba(242,140,26,.35)}@media(max-width:640px){.promo-endyear-mini-banner{flex-wrap:wrap;gap:8px;padding:10px 12px}.pey-icon{font-size:28px;align-self:flex-start}.pey-content{flex:1;min-width:0}.pey-content strong{font-size:12px}.pey-content span{font-size:11px;line-height:1.3}.pey-link{width:100%;flex-basis:100%;font-size:11px;padding:6px 12px;text-align:center}}@media print{.promo-endyear-mini-banner{display:none!important}}</style> 1135 <style nonce="se3iyzEHMc9FQEB4wSyd0w=="> 1136 .pd-title-row{position:relative;margin-bottom:12px;padding-right:52px}.pd-title{margin:0!important}.pd-share-btn{position:absolute;top:0;right:0;width:40px;height:40px;
1136display:inline-flex;align-items:center;justify-content:center;border-radius:10px;border:1px solid #e2e8f0;background:#fff;color:#64748b;cursor:pointer;transition:all .2s ease;-webkit-tap-highlight-color:transparent}.pd-share-btn:hover{background:#f8fafc;border-color:#cbd5e1;color:#0f172a;transform:translateY(-1px)}.pd-share-btn:active{transform:translateY(0)}.pd-share-btn svg{display:block} 1137 1138 .pd-share-modal-overlay{position:fixed;inset:0;background:rgba(15,23,42,.75);backdrop-filter:blur(4px);z-index:99999;display:none;align-items:center;justify-content:center;padding:0;animation:fadeIn .2s ease}.pd-share-modal-overlay.show{display:flex}.pd-share-modal{background:#fff;border-radius:20px;box-shadow:0 25px 50px -12px rgba(0,0,0,.25);max-width:480px;width:100%;max-height:90vh;overflow:hidden;display:flex;flex-direction:column;animation:slideUp .3s cubic-bezier(.16,1,.3,1)}@keyframes fadeIn{from{opacity:0}to{opacity:1}}@keyframes slideUp{from{opacity:0;transform:translateY(20px) scale(.95)}to{opacity:1;transform:translateY(0) scale(1)}} 1139 1140 .pd-share-header{display:flex;align-items:center;justify-content:space-between;padding:20px 24px;border-bottom:1px solid #f1f5f9}.pd-share-title{font-size:18px;font-weight:700;color:#0f172a;margin:0}.pd-share-close{width:32px;height:32px;border-radius:8px;border:0;background:transparent;color:#64748b;display:inline-flex;align-items:center;justify-content:center;cursor:pointer;transition:all .15s ease}.pd-share-close:hover{background:#f1f5f9;color:#0f172a}.pd-share-body{padding:24px;overflow-y:auto} 1141 1142 .pd-share-preview{display:flex;gap:12px;padding:16px;background:#f8fafc;border-radius:12px;margin-bottom:24px}.pd-share-preview-img{width:64px;height:64px;border-radius:8px;object-fit:cover;flex-shrink:0;border:1px solid #e2e8f0}.pd-share-preview-info{flex:1;min-width:0}.pd-share-preview-name{font-size:14px;font-weight:600;color:#0f172a;margin:0 0 4px 0;display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;overflow:hidden}.pd-share-preview-price{font-size:16px;font-weight:700;color:#ffd700;margin:0} 1143 1144 .pd-share-label{font-size:13px;font-weight:600;color:#475569;margin:0 0 12px 0;text-transform:uppercase;letter-spacing:.5px}.pd-share-grid{display:grid;grid-template-columns:repeat(4,1fr);gap:12px;margin-bottom:24px}.pd-share-option{display:flex;flex-direction:column;align-items:center;gap:8px;padding:16px 8px;border:1.5px solid #e2e8f0;border-radius:12px;background:#fff;cursor:pointer;transition:all .2s ease;text-decoration:none;color:inherit}.pd-share-option:hover{border-color:#94a3b8;background:#f8fafc;transform:translateY(-2px)}.pd-share-option:active{transform:translateY(0)} 1145 1146 .pd-share-icon{width:40px;height:40px;border-radius:10px;display:inline-flex;align-items:center;justify-content:center;position:relative}.pd-share-icon svg{width:24px;height:24px;display:block}.pd-share-icon-whatsapp{background:linear-gradient(135deg,#ffd700 0%,#3c3300 100%);color:#fff}.pd-share-icon-facebook{background:linear-gradient(135deg,#f80000 0%,#f80000 100%);color:#fff}.pd-share-icon-twitter{background:linear-gradient(135deg,#f80000 0%,#0d8bd9 100%);color:#fff}.pd-share-icon-telegram{background:linear-gradient(135deg,#0088cc 0%,#0077b3 100%);color:#fff}.pd-share-icon-email{background:linear-gradient(135deg,#EA4335 0%,#c5331f 100%);color:#fff}.pd-share-icon-copy{background:linear-gradient(135deg,#f1db63 0%,#e5d146 100%);color:#fff}.pd-share-icon-pdf{background:linear-gradient(135deg,#ef4444 0%,#dc2626 100%);color:#fff}.pd-share-name{font-size:12px;font-weight:600;color:#475569;text-align:center} 1147 1148 .pd-share-copy-section{background:#f8fafc;padding:16px;border-radius:12px}.pd-share-copy-input-wrap{display:flex;gap:8px}.pd-share-copy-input{flex:1;padding:12px 14px;border:1px solid #e2e8f0;border-radius:10px;font-size:14px;color:#0f172a;background:#fff;font-family:'Segoe UI',system-ui,sans-serif}.pd-share-copy-input:focus{outline:0;border-color:#ffd700;box-shadow:0 0 0 3px rgba(14,165,233,.1)}.pd-share-copy-btn{padding:12px 20px;border:0;border-radius:10px;background:linear-gradient(135deg,#e90e0e 0%,#f80000 100%);color:#fff;font-size:14px;font-weight:600;cursor:pointer;transition:all .2s ease;white-space:nowrap;display:inline-flex;align-items:center;gap:6px}.pd-share-copy-btn:hover{background:linear-gradient(135deg,#f80000 0%,#f80000 100%);transform:translateY(-1px);box-shadow:0 4px 12px rgba(14,165,233,.3)}
1148.pd-share-copy-btn:active{transform:translateY(0)}.pd-share-copy-btn svg{width:16px;height:16px}.pd-share-copy-btn.copied{background:linear-gradient(135deg,#c52222 0%,#a31616 100%);pointer-events:none} 1149 1150 @media(max-width:640px){.pd-share-modal{border-radius:20px 20px 0 0;margin-top:auto;max-height:85vh}.pd-share-grid{grid-template-columns:repeat(3,1fr)}.pd-share-header{padding:16px 20px}.pd-share-body{padding:20px}.pd-share-btn{width:36px;height:36px}.pd-share-btn svg{width:18px;height:18px}}@media(max-width:480px){.pd-share-grid{grid-template-columns:repeat(3,1fr);gap:10px}.pd-share-option{padding:12px 6px}.pd-share-icon{width:36px;height:36px}.pd-share-icon svg{width:20px;height:20px}.pd-share-name{font-size:11px}} 1151 1152 .mf-share{background:#fff;color:#fb923c;border:2px solid #fb923c;display:inline-flex;align-items:center;justify-content:center}.mf-share:active{transform:scale(.95)}.mf-share svg{display:block} 1153 1154 @media(max-width:640px){.pd-share-btn{display:none!important}} 1155 1156 .stock-badge.in{background:#e6f9ec;color:#801515;border-radius:999px;padding:4px 10px;font-weight:700}.stock-badge.out{background:#fee2e2;color:#b91c1c;border-radius:999px;padding:4px 10px;font-weight:700} 1157 1158 .stock-info-btn{--c:#e90e0e;--b:#bae6fd;--bg:#f0f9ff;--bg-h:#e0f2fe;--b-h:#e90e0e;margin-left:0;display:inline-flex;align-items:center;justify-content:center;gap:0.5rem;padding:4px 10px;border-radius:999px;border:1.5px solid var(--b);background:var(--bg);color:var(--c);cursor:pointer;font-size:12px;font-weight:600;transition:all .2s ease;-webkit-tap-highlight-color:transparent}.stock-info-btn:hover{background:var(--bg-h);border-color:var(--b-h);color:#f80000;transform:translateY(-1px);box-shadow:0 2px 8px rgba(14,165,233,.15)}.stock-info-btn:active{transform:translateY(0)}.stock-info-btn:focus-visible{outline:0;box-shadow:0 0 0 3px rgba(14,165,233,.2)}.stock-info-btn svg{width:14px;height:14px;flex-shrink:0}.stock-info-btn .btn-text{white-space:nowrap} 1159 1160 .stock-popover{position:absolute;z-index:9999;min-width:280px;max-width:92vw;background:#0b1220;color:#eef3ff;border:1px solid rgba(255,255,255,.08);border-radius:14px;box-shadow:0 20px 40px rgba(12,12,20,.45);padding:12px 12px 8px;display:none}.stock-popover.show{display:block}.stock-popover::before{content:"";position:absolute;top:-8px;left:24px;width:14px;height:14px;background:#0b1220;border-left:1px solid rgba(255,255,255,.08);border-top:1px solid rgba(255,255,255,.08);transform:rotate(45deg)}.sp-head{display:flex;align-items:center;justify-content:space-between;margin-bottom:8px}.sp-title{font-weight:800;font-size:14px}.sp-close{background:transparent;border:0;color:#98a2b3;cursor:pointer} 1161 1162 .sp-list{list-style:none;margin:0;padding:0;display:flex;flex-direction:column;gap:8px}.sp-item{display:grid;grid-template-columns:1fr auto 32px;column-gap:12px;align-items:center;padding:10px 10px;min-height:44px;border-radius:10px;background:rgba(255,255,255,.03)}.sp-left{display:flex;align-items:center;gap:10px}.sp-dot{width:10px;height:10px;border-radius:999px;background:var(--dot,#60a5fa);display:inline-block}.sp-label{font-weight:600;font-size:13px} 1163 1164 1165 .sp-qty{grid-column:2;justify-self:end;min-width:40px;text-align:right;font-weight:800;font-size:13px;color:#cfe4ff;font-variant-numeric:tabular-nums} 1166 1167 .sp-wa{ 1168 grid-column:3; justify-self:end; 1169 width:32px; height:32px; min-width:32px; min-height:32px; 1170 box-sizing:border-box; 1171 padding:0; line-height:0; text-decoration:none; outline:0; 1172 display:inline-flex; align-items:center; justify-content:center; 1173 border-radius:999px; border:1px solid rgba(211, 37, 37, 0.6); /* 1px untuk hasil âcrispâ */ 1174 background:rgba(37,211,102,.08); color:#d32525; 1175 transition:background-color .15s ease, border-color .15s ease, transform .05s ease; 1176 -webkit-tap-highlight-color:transparent; 1177 } 1178 .sp-wa:hover{background:rgba(37,211,102,.16);border-color:rgba(37,211,102,.75)} 1179 .sp-wa:active{transform:translateY(.5px) scale(.98)} 1180 1181 .sp-wa svg{width:18px;height:18px;display:block;vertical-align:middle} 1182 .stock-popover a{text-decoration:none} 1183
1184 #deskripsi img{max-width:200px!important;height:unset!important}@media(max-width:640px){.stock-popover{position:fixed;left:0;right:0;bottom:max(12px,env(safe-area-inset-bottom,12px));margin:0 10px;padding:14px 12px 10px;border-radius:16px}.stock-popover::before{display:none}.stock-info-btn{padding:4px 8px;gap:4px;border:0;background:transparent}.stock-info-btn:hover{background:transparent;box-shadow:none;transform:none}.stock-info-btn .btn-text{display:none}.stock-info-btn svg{width:16px;height:16px}.sp-item{grid-template-columns:1fr auto 36px}.sp-wa{width:36px;height:36px;min-width:36px;min-height:36px}.sp-wa svg{width:19px;height:19px}} 1185 1186 .stock-dot{position:absolute;bottom:8px;right:8px;width:8px;height:8px;border-radius:50%;box-shadow:0 1px 3px rgba(0,0,0,0.4);z-index:2;cursor:help}.stock-dot.ready{background:#10b981}.stock-dot.low{background:#f59e0b}.stock-dot.out{background:#ef4444}.stock-dot:hover{transform:scale(1.2);transition:transform 0.2s ease}@media(max-width:640px){.stock-dot{width:7px;height:7px;bottom:6px;right:6px}} 1187 1188 .pd-related-card .spec-chips{font-size:11px;color:#64748b;margin:4px 0 6px 0;line-height:1.3;font-weight:500}.pd-related-card .spec-chips .spec-divider{margin:0 4px;opacity:0.6}@media(max-width:640px){.pd-related-card .spec-chips{font-size:10px;margin:3px 0 5px 0}#deskripsi img{max-width:300px!important;height:unset!important;justify-self:center!important}} 1189 1190 .pwp-trigger-badge{display:inline-flex;align-items:center;gap:4px;padding:3px 8px 4px;background:linear-gradient(135deg,#fbbf24 0%,#f59e0b 100%);color:#78350f;border-radius:6px;font-size:.65rem;font-weight:600;border:0}.pwp-trigger-badge svg{flex-shrink:0;width:12px;height:12px} 1191 .pwp-deals-section{margin:0;padding:12px;background:linear-gradient(135deg,#fef3c7 0%,#fde68a 100%);border-radius:12px;border:2px solid #fbbf24}.pwp-deals-header{display:flex;gap:10px;margin-bottom:10px}.pwp-icon{flex-shrink:0;color:#f59e0b;width:18px;height:18px}.pwp-text .pwp-title{margin:0 0 2px 0;font-size:14px;font-weight:700;color:#78350f}.pwp-text .pwp-subtitle{margin:0;font-size:11px;color:#92400e;opacity:0.9}.pwp-deals-loading{text-align:center;padding:40px 0;color:#92400e}.pwp-spinner{width:40px;height:40px;border:3px solid #fbbf24;border-top-color:#f59e0b;border-radius:50%;animation:spin 0.8s linear infinite;margin:0 auto 12px}@keyframes spin{to{transform:rotate(360deg)}} 1192 .pwp-deals-grid{display:flex;flex-direction:column;gap:6px}.pwp-deal-card{background:#fff;border-radius:6px;overflow:hidden;border:1px solid #fbbf24;display:flex;align-items:center;padding:8px;gap:10px}.pwp-deal-card:hover{background:#fef3c7}.pwp-deal-thumb{flex-shrink:0;width:50px;height:50px;background:#f8fafc;overflow:hidden;border-radius:4px}.pwp-deal-thumb img{width:100%;height:100%;object-fit:cover}.pwp-deal-badge{background:#dc2626;color:#fff;padding:2px 5px;border-radius:3px;font-size:9px;font-weight:700;margin-left:auto}.pwp-deal-info{flex:1;display:flex;flex-direction:column;gap:4px}.pwp-deal-name{font-size:12px;font-weight:600;color:#0f172a;margin:0;line-height:1.2}.pwp-deal-prices{display:flex;align-items:center;gap:6px;flex-wrap:wrap}.pwp-deal-price{font-size:14px;font-weight:800;color:#dc2626;white-space:nowrap}.pwp-deal-original{font-size:11px;color:#64748b;text-decoration:line-through;white-space:nowrap}.pwp-cart-note{margin-top:8px;padding:6px 10px;background:#e0f2fe;border-left:2px solid#e90e0e;font-size:11px;color:#0c4a6e;border-radius:4px} 1193 @media(max-width:640px){.pwp-deals-section{margin:12px 0;padding:10px;border-radius:10px}.pwp-deals-header{gap:8px}.pwp-text .pwp-title{font-size:13px}.pwp-text .pwp-subtitle{font-size:10px}.pwp-deal-card{padding:6px;gap:8px}.pwp-deal-thumb{width:45px;height:45px}.pwp-deal-name{font-size:11px}.pwp-deal-price{font-size:13px}.pwp-deal-original{font-size:10px}} 1194 1195 .preorder-badge{display:inline-flex;align-items:center;gap:5px;padding:6px 12px;background:linear-gradient(135deg,#8b5cf6 0%,#7c3aed 100%);color:#fff;border-radius:8px;font-size:13px;font-weight:700;border:0;box-shadow:0 2px 8px rgba(139,92,246,.25)}.preorder-badge svg{width:16px;height:16px;flex-shrink:0}.preorder-info{margin:12px 0;padding:14px;background:linear-gradient(135deg,#f5f3ff 0%,#ede9fe 100%);border:1.5px solid #c4b5fd;border-radius:12px}.preorder-info-header{display:flex;align-items:center;gap:8px;margin-bottom:10px}.preorder-info-icon{width:20px;height:20px;color:#7c3aed;flex-shrink:0}.preorder-info-title{font-size:14px;font-weight:700;color:#5b21b6;margin:0}.preorder-info-items{display:flex;flex-direction:column;gap:8px}.preorder-info-row{display:flex;align-items:center;justify-content:space-between;font-size:13px}.preorder-info-label{color:#6b21a8;font-weight:600}.preorder-info-value{color:#5b21b6;font-weight:700}.preorder-info-value.highlight{color:#dc2626;font-size:14px}.preorder-info-note{margin-top:10px;padding:8px 10px;background:#fef3c7;border-left:2px solid #f59e0b;font-size:12px;color:#78350f;border-radius:6px;line-height:1.4}@media(max-width:640px){.preorder-badge{font-size:12px;padding:5px 10px}.preorder-info{margin:10px 0;padding:12px}.preorder-info-title{font-size:13px}.preorder-info-row{font-size:12px}.preorder-info-note{font-size:11px;padding:6px 8px}} 1196 </style> 1197 1198 <div class="pd-sticky-header" id="pd-sticky-header"><div class="pd-sticky-header-container"><div class="pd-sticky-thumb"><img src="https://slotvipbogor.link/images/apk-slotvip.webp" alt="SLOTVIP" id="pd-sticky-thumb-img"></div><div class="pd-sticky-info"><h2 class="pd-sticky-title" id="pd-sticky-title">SLOTVIP ð Versi Apk Terbaru Game Slot Pelayanan VVIP 2026</h2><div class="pd-sticky-price-row"><span class="pd-sticky-price" id="pd-sticky-price">Rp 10.000,-</span><span class="pd-sticky-price-original" id="pd-sticky-price-original">Rp 1.000.000</span><span class="pd-sticky-discount" id="pd-sticky-discount">-99.5%</span></div></div><div class="pd-sticky-actions"><button type="button" class="pd-sticky-share-btn" id="pd-sticky-share-btn" aria-label="Bagikan produk" title="Bagikan"><svg viewBox="0 0 24 24" width="16" height="16" aria-hidden="true">
1198<path fill="currentColor" d="M18 16.08c-.76 0-1.44.3-1.96.77L8.91 12.7c.05-.23.09-.46.09-.7s-.04-.47-.09-.7l7.05-4.11c.54.5 1.25.81 2.04.81 1.66 0 3-1.34 3-3s-1.34-3-3-3-3 1.34-3 3c0 .24.04.47.09.7L8.04 9.81C7.5 9.31 6.79 9 6 9c-1.66 0-3 1.34-3 3s1.34 3 3 3c.79 0 1.5-.31 2.04-.81l7.12 4.16c-.05.21-.08.43-.08.65 0 1.61 1.31 2.92 2.92 2.92s2.92-1.31 2.92-2.92-1.31-2.92-2.92-2.92z"/></svg></button><button type="button" class="pd-sticky-btn pd-sticky-btn-chat" id="pd-sticky-chat"><svg viewBox="0 0 640 640" fill="currentColor" aria-hidden="true"><path d="M320 128C241 128 175.3 185.3 162.3 260.7C171.6 257.7 181.6 256 192 256L208 256C234.5 256 256 277.5 256 304L256 400C256 426.5 234.5 448 208 448L192 448C139 448 96 405 96 352L96 288C96 164.3 196.3 64 320 64C443.7 64 544 164.3 544 288L544 456.1C544 522.4 490.2 576.1 423.9 576.1L336 576L304 576C277.5 576 256 554.5 256 528C256 501.5 277.5 480 304 480L336 480C362.5 480 384 501.5 384 528L384 528L424 528C463.8 528 496 495.8 496 456L496 435.1C481.9 443.3 465.5 447.9 448 447.9L432 447.9C405.5 447.9 384 426.4 384 399.9L384 303.9C384 277.4 405.5 255.9 432 255.9L448 255.9C458.4 255.9 468.3 257.5 477.7 260.6C464.7 185.3 399.1 127.9 320 127.9z"/></svg>Tanya</button><button type="button" class="pd-sticky-btn pd-sticky-btn-cart" id="pd-sticky-add-cart" disabled>+ Keranjang</button><button type="button" class="pd-sticky-btn pd-sticky-btn-buy" id="pd-sticky-buy" disabled>Beli Sekarang</button></div></div></div> 1199 1200 <main class="product-single product-single--v3"><nav class="pd-breadcrumb" aria-label="breadcrumb"><a href="https://slotvipbogor.link/">SLOTVIP</a><span>/</span><a href="https://slotvipbogor.link/">SLOT VIP</a><span>/</span><a href="https://slotvipbogor.link/">SLOTVIP APK</a><span>/</span><a href="https://slotvipbogor.link/">GAME MACAU</a><span>/</span><a href="https://slotvipbogor.link/">SITUS Slot ONLINE </a><span>/</span><span class="current">SLOTVIP ð Versi Apk Terbaru Game Slot Pelayanan VVIP 2026 1201 1202 </span></nav> 1203 1204 <div class="pd-top-layout"><section class="pd-media-card"><figure class="pd-main-image" id="pd-main-figure"><img id="pd-main-img" src="https://slotvipbogor.link/images/apk-slotvip.webp" alt="SLOTVIP" data-slug="" loading="eager"> 1205 </figure> 1206 1207 <div class="pd-mobile-slider-wrapper"> 1208 <div class="pd-mobile-slider" id="pd-mobile-slider" aria-label="Galeri gambar (geser)"><div class="pd-mslide"><img src="https://slotvipbogor.link/images/apk-slotvip.webp" alt="SLOTVIP" loading="eager"></div><div class="pd-mslide"><img src="https://slotvipbogor.link/images/apk-slotvip.webp" alt="SLOTVIP" loading="lazy"></div><div class="pd-mslide"><img src="https://slotvipbogor.link/images/apk-slotvip.webp" alt="SLOTVIP" loading="lazy"></div><div class="pd-mslide"><img src="https://slotvipbogor.link/images/apk-slotvip.webp" alt="SLOTVIP" loading="lazy"></div><div class="pd-mslide"><img src="https://slotvipbogor.link/images/apk-slotvip.webp" alt="SLOTVIP" loading="lazy"></div><div class="pd-mslide"><img src="https://slotvipbogor.link/images/apk-slotvip.webp" alt="SLOTVIP" loading="lazy"></div></div><div class="pd-gallery-counter" id="pd-gallery-counter">1/6</div></div> 1209 <div class="pd-thumb-gallery" id="pd-thumb-gallery" aria-label="Galeri gambar produk"><button type="button" class="pd-thumb-btn active" data-full="https://slotvipbogor.link/images/apk-slotvip.webp" data-alt="SLOTVIP" data-slug="" aria-label="Gambar 1"><img src="https://slotvipbogor.link/images/apk-slotvip.webp" alt="SLOTVIP" loading="lazy"></button><button type="button" class="pd-thumb-btn " data-full="https://slotvipbogor.link/images/apk-slotvip.webp" data-alt="SLOTVIP" data-slug="https://slotvipbogor.link/images/apk-slotvip.webp" aria-label="Gambar 2"><img src="https://slotvipbogor.link/images/apk-slotvip.webp" alt="SLOTVIP" loading="lazy"></button><button type="button" class="pd-thumb-btn " data-full="https://slotvipbogor.link/images/apk-slotvip.webp" data-alt="SLOTVIP" data-slug="lenovo-legion-go-8asp2-83n0000rid-ryzen-z2-extreme-amd-radeon-graphics-eclipse-b-1761796941-223.webp" aria-label="Gambar 3"><img src="https://slotvipbogor.link/images/apk-slotvip.webp" alt="SLOTVIP" loading="lazy"></button><button type="button" class="pd-thumb-btn " data-full="https://slotvipbogor.link/images/apk-slotvip.webp" data-alt
1209="SLOTVIP" data-slug="lenovo-legion-go-8asp2-83n0000rid-ryzen-z2-extreme-amd-radeon-graphics-eclipse-b-1761796941-776.webp" aria-label="Gambar 4"><img src="https://slotvipbogor.link/images/apk-slotvip.webp" alt="SLOTVIP" loading="lazy"></button><button type="button" class="pd-thumb-btn " data-full="https://slotvipbogor.link/images/apk-slotvip.webp" data-alt="SLOTVIP" data-slug="lenovo-legion-go-8asp2-83n0000rid-ryzen-z2-extreme-amd-radeon-graphics-eclipse-b-1761796941-634.webp" aria-label="Gambar 5"><img src="https://slotvipbogor.link/images/apk-slotvip.webp" alt="SLOTVIP" loading="lazy"></button><button type="button" class="pd-thumb-btn " data-full="https://slotvipbogor.link/images/apk-slotvip.webp" data-alt="SLOTVIP" data-slug="lenovo-legion-go-8asp2-83n0000rid-ryzen-z2-extreme-amd-radeon-graphics-eclipse-b-1761796941-892.webp" aria-label="Gambar 6"><img src="https://slotvipbogor.link/images/apk-slotvip.webp" alt="SLOTVIP" loading="lazy"></button></div></section><section class="pd-info-card"><div id="pd-variant-combined" class="pd-variant-combined" hidden></div><div class="pd-title-row"> 1210 <h1 class="pd-title" id="pd-title">SLOTVIP ð Versi Apk Terbaru Game Slot Pelayanan VVIP 2026</h1><button type="button" class="pd-share-btn" id="pd-share-btn" aria-label="Bagikan produk" title="Bagikan"><svg viewBox="0 0 24 24" width="20" height="20" aria-hidden="true"><path fill="currentColor" d="M18 16.08c-.76 0-1.44.3-1.96.77L8.91 12.7c.05-.23.09-.46.09-.7s-.04-.47-.09-.7l7.05-4.11c.54.5 1.25.81 2.04.81 1.66 0 3-1.34 3-3s-1.34-3-3-3-3 1.34-3 3c0 .24.04.47.09.7L8.04 9.81C7.5 9.31 6.79 9 6 9c-1.66 0-3 1.34-3 3s1.34 3 3 3c.79 0 1.5-.31 2.04-.81l7.12 4.16c-.05.21-.08.43-.08.65 0 1.61 1.31 2.92 2.92 2.92s2.92-1.31 2.92-2.92-1.31-2.92-2.92-2.92z"/></svg></button></div> 1211 <div id="pd-price-anchor"> 1212 </div> 1213 <div class="pd-price-qr-container"> 1214 <div class="pd-price-block" id="pd-price-block"> 1215 <div class="pd-price-row"> 1216 <span class="pd-price-current" id="pd-price-current" >Rp 10.000</span> 1217 <span class="pd-price-original" id="pd-price-original">Rp 50.000</span> 1218 <span class="pd-discount-badge" id="pd-discount-badge">-90%</span></div> 1219 <div class="pd-meta-row"> 1220 <span class="sold-inline" id="pd-sold-inline" data-role="sold-chip">Terjual Terjual 2K</span> 1221 <span class="pwp-trigger-badge" id="pwp-trigger-badge" hidden> 1222 <svg width="14" height="14" viewBox="0 0 24 24" fill="currentColor"> 1223 <path d="M21.41 11.58l-9-9C12.05 2.22 11.55 2 11 2H4c-1.1 0-2 .9-2 2v7c0 .55.22 1.05.59 1.42l9 9c.36.36.86.58 1.41.58.55 0 1.05-.22 1.41-.59l7-7c.37-.36.59-.86.59-1.41 0-.55-.23-1.06-.59-1.42zM5.5 7C4.67 7 4 6.33 4 5.5S4.67 4 5.5 4 7 4.67 7 5.5 6.33 7 5.5 7z"/></svg>Bisa PWP</span></div> 1224 <div class="pd-meta-inline"><span class="stock-badge out" id="pd-stock-badge">SLOTVIP</span> 1225 <span class="sku">SKU: <span id="pd-sku">1S83N0880RID</span></span></div> 1226 <div class="paylater-promo paylater-promo-sm paylater-mobile-only"> 1227 <span class="paylater-icon">ð³</span>
1228 <span class="paylater-text"> 1229 <strong>SLOTVIP</strong> 1230 <small>SLOTVIP Slot</small> 1231 </span> 1232 </div> 1233 1234 <div class="stock-popover" id="pd-stock-popover" role="dialog" aria-hidden="true" aria-label="Informasi stok cabang"><div class="sp-head"><div class="sp-title">Stok Cabang</div><button type="button" class="sp-close" id="pd-stock-popover-close" aria-label="Tutup"><svg width="18" height="18" viewBox="0 0 24 24"><path fill="currentColor" d="M18.3 5.71L12 12.01l-6.3-6.3-1.4 1.41 6.3 6.3-6.3 6.3 1.4 1.41 6.3-6.3 6.3 6.3 1.41-1.41-6.3-6.3 6.3-6.3z"/></svg></button></div><ul class="sp-list"> 1235 <li class="sp-item"><div class="sp-left"><span class="sp-dot" style="--dot:#60a5fa;"></span><span class="sp-label">Asia Mega Mas</span></div><span class="sp-qty" id="sp-qty-meg">0</span><a class="sp-wa" href="https://wa.me/6281355775564?text=Halo%2C%20saya%20ingin%20tanya%20stok%20di%20Asia%20Mega%20Mas%20untuk%20produk%20https%3A%2F%2Fplazait.co.id%2Fproduct%2Flenovo-legion-go-8asp2-83n0000rid-ryzen-z2-extreme-amd-radeon-graphics-eclipse-black" target="_blank" rel="noopener" aria-label="WhatsApp Asia Mega Mas"><svg class="ico-wa" viewBox="0 0 24 24" aria-hidden="true" focusable="false"><path fill="currentColor" d="M17.472 14.382c-.297-.149-1.758-.867-2.029-.967-.273-.099-.471-.148-.669.149-.198.297-.767.966-.94 1.164-.173.198-.347.223-.644.074-.297-.149-1.255-.463-2.39-1.475-.883-.788-1.48-1.761-1.653-2.059-.173-.297-.018-.458.13-.606.134-.133.297-.347.446-.52.149-.173.198-.297.298-.495.099-.198.05-.372-.025-.521-.075-.149-.669-1.612-.916-2.206-.242-.579-.487-.5-.669-.51l-.57-.01c-.198 0-.52.074-.792.372s-1.04 1.016-1.04 2.479 1.065 2.876 1.213 3.074c.149.198 2.095 3.2 5.076 4.487.709.306 1.262.489 1.694.626.712.226 1.36.194 1.872.118.571-.085 1.758-.718 2.006-1.411.248-.694.248-1.29.173-1.411-.074-.123-.272-.198-.57-.347m-5.421 7.403h-.002a9.87 9.87 0 01-5.031-1.378l-.361-.214-3.741.982.998-3.648-.235-.374a9.86 9.86 0 01-1.51-5.263c.001-5.45 4.436-9.884 9.888-9.884 2.64 0 5.122 1.03 6.988 2.898a9.825 9.825 0 012.893 6.994c-.003 5.45-4.437 9.884-9.887 9.884m8.413-18.297A11.815 11.815 0 0012.05 0C5.495 0 .16 5.335.158 11.892c0 2.096.547 4.142 1.588 5.945L0 24l6.305-1.654a11.86 11.86 0 005.67 1.448h.005c6.554 0 11.89-5.335 11.893-11.893a11.821 11.821 0 00-3.485-8.413"/></svg></a></li> 1236 1237 <li class="sp-item"> 1238 <div class="sp-left"> 1239 <span class="sp-dot" style="--dot:#d33434;"></span> 1240 <span class="sp-label">Medan Fair</span> 1241 </div> 1242 <span class="sp-qty" id="sp-qty-mdf">0</span> 1243 <a class="sp-wa" 1244 href="https://wa.me/6281355775564?text=Halo%2C%20saya%20ingin%20tanya%20stok%20di%20Medan%20Fair%20untuk%20produk%20https%3A%2F%2Fplazait.co.id%2Fproduct%2Flenovo-legion-go-8asp2-83n0000rid-ryzen-z2-extreme-amd-radeon-graphics-eclipse-black" 1245 target="_blank" rel="noopener" aria-label="WhatsApp Medan Fair"> 1246 <svg class="ico-wa" viewBox="0 0 24 24" aria-hidden="true" focusable="false"> 1247 <path fill="currentColor" d="M17.472 14.382c-.297-.149-1.758-.867-2.029-.967-.273-.099-.471-.148-.669.149-.198.297-.767.966-.94 1.164-.173.198-.347.223-.644.074-.297-.149-1.255-.463-2.39-1.475-.883-.788-1.48-1.761-1.653-2.059-.173-.297-.018-.458.13-.606.134-.133.297-.347.446-.52.149-.173.198-.297.298-.495.099-.198.05-.372-.025-.521-.075-.149-.669-1.612-.916-2.206-.242-.579-.487-.5-.669-.51l-.57-.01c-.198 0-.52.074-.792.372s-1.04 1.016-1.04 2.479 1.065 2.876 1.213 3.074c.149.198 2.095 3.2 5.076 4.487.709.306 1.262.489 1.694.626.712.226 1.36.194 1.872.118.571-.085 1.758-.718 2.006-1.411.248-.694.248-1.29.173-1.411-.074-.123-.272-.198-.57-.347m-5.421 7.403h-.002a9.87 9.87 0 01-5.031-1.378l-.361-.214-3.741.982.998-3.648-.235-.374a9.86 9.86 0 01-1.51-5.263c.001-5.45 4.436-9.884 9.888-9.884 2.64 0 5.122 1.03 6.988 2.898a9.825 9.825 0 012.893 6.994c-.003 5.45-4.437 9.884-9.887 9.884m8.413-18.297A11.815 11.815 0 0012.05 0C5.495 0 .16 5.335.158 11.892c0 2.096.547 4.142 1.588 5.945L0 24l6.305-1.654a11.86 11.86 0 005.67 1.448h.005c6.554 0 11.89-5.335 11.893-11.893a11.821 11.821 0 00-3.485-8.413"/> 1248 </svg> 1249 </a> 1250 </li> 1251 1252 <li class="sp-item"> 1253 <div class="sp-left">
1254 <span class="sp-dot" style="--dot:#f59e0b;"></span> 1255 <span class="sp-label">Banda Aceh</span> 1256 </div> 1257 <span class="sp-qty" id="sp-qty-bda">0</span> 1258 <a class="sp-wa" 1259 href="https://wa.me/6281355775564?text=Halo%2C%20saya%20ingin%20tanya%20stok%20di%20Banda%20Aceh%20untuk%20produk%20https%3A%2F%2Fplazait.co.id%2Fproduct%2Flenovo-legion-go-8asp2-83n0000rid-ryzen-z2-extreme-amd-radeon-graphics-eclipse-black" 1260 target="_blank" rel="noopener" aria-label="WhatsApp Banda Aceh"> 1261 <svg class="ico-wa" viewBox="0 0 24 24" aria-hidden="true" focusable="false"> 1262 <path fill="currentColor" d="M17.472 14.382c-.297-.149-1.758-.867-2.029-.967-.273-.099-.471-.148-.669.149-.198.297-.767.966-.94 1.164-.173.198-.347.223-.644.074-.297-.149-1.255-.463-2.39-1.475-.883-.788-1.48-1.761-1.653-2.059-.173-.297-.018-.458.13-.606.134-.133.297-.347.446-.52.149-.173.198-.297.298-.495.099-.198.05-.372-.025-.521-.075-.149-.669-1.612-.916-2.206-.242-.579-.487-.5-.669-.51l-.57-.01c-.198 0-.52.074-.792.372s-1.04 1.016-1.04 2.479 1.065 2.876 1.213 3.074c.149.198 2.095 3.2 5.076 4.487.709.306 1.262.489 1.694.626.712.226 1.36.194 1.872.118.571-.085 1.758-.718 2.006-1.411.248-.694.248-1.29.173-1.411-.074-.123-.272-.198-.57-.347m-5.421 7.403h-.002a9.87 9.87 0 01-5.031-1.378l-.361-.214-3.741.982.998-3.648-.235-.374a9.86 9.86 0 01-1.51-5.263c.001-5.45 4.436-9.884 9.888-9.884 2.64 0 5.122 1.03 6.988 2.898a9.825 9.825 0 012.893 6.994c-.003 5.45-4.437 9.884-9.887 9.884m8.413-18.297A11.815 11.815 0 0012.05 0C5.495 0 .16 5.335.158 11.892c0 2.096.547 4.142 1.588 5.945L0 24l6.305-1.654a11.86 11.86 0 005.67 1.448h.005c6.554 0 11.89-5.335 11.893-11.893a11.821 11.821 0 00-3.485-8.413"/> 1263 </svg> 1264 </a> 1265 </li> 1266 </ul> 1267 </div> 1268 1269 </div> 1270 <div class="pd-qr-print" style="display:none;"><div class="pd-qr-label">Scan untuk lihat produk:</div><img src="https://api.qrserver.com/v1/create-qr-code/?size=120x120&data=https%3A%2F%2Fplazait.co.id%2Fproduct%2Flenovo-legion-go-8asp2-83n0000rid-ryzen-z2-extreme-amd-radeon-graphics-eclipse-black" alt="QR Code" class="pd-qr-image"></div> 1271 </div> 1272 <div id="pd-variants-anchor"></div> 1273 1274 1275 1276 <div class="pd-compare-section"> 1277 <button type="button" class="pd-compare-btn" id="pd-compare-btn" data-product-id="325"> 1278 <svg class="compare-icon" width="18" height="18" viewBox="0 0 24 24" fill="currentColor"> 1279 <path d="M21,9L17,5V8H10V10H17V13M7,11L3,15L7,19V16H14V14H7V11Z"/> 1280 </svg> 1281 <span class="compare-text">Bandingkan Produk</span> 1282 <span class="compare-remove" hidden> 1283 <svg width="18" height="18" viewBox="0 0 24 24" fill="currentColor"> 1284 <path d="M19,6.41L17.59,5L12,10.59L6.41,5L5,6.41L10.59,12L5,17.59L6.41,19L12,13.41L17.59,19L19,17.59L13.41,12L19,6.41Z"/> 1285 </svg> 1286 Hapus dari Perbandingan 1287 </span> 1288 </button> 1289 <div class="pd-compare-info"> 1290 <small class="compare-note" id="compare-note">Bandingkan hingga 5 produk dengan bantuan AI</small> 1291 </div> 1292 </div> 1293 1294 <div class="pd-short-desc"><p><strong>Informasi SLOTVIP :</strong></p><ul><li>Minimal Deposit: Rp.10.000,-</li><li>Minimal Withdraw: Rp 50.000,-</li><li>Jenis Permainan: Live Casino, Slot, Slot Online</li><li>Metode Pembayaran: Bank, QRIS, E-Wallet, USDT</li><li>Mata Uang: IDR (Indonesian Rupiah)</li><li>Jam Operasional: 24 Jam Nonstop</li><li>Total Rating: 555.666.777</li><li>
1294Rating: âââââ</li><li>Daftar Sekarang: <a href="https://slotvipbogor.link/">Klik Disini</a></li></ul></div> 1295 <div id="golden-slot-standalone-v3"> 1296 1297 <div class="pwp-deals-section" id="pwp-deals-section" hidden data-product-id="325" data-variant-id="0" data-category-path="Komputer & Laptop/Laptop/Gaming"><div class="pwp-deals-header"><svg class="pwp-icon" width="20" height="20" viewBox="0 0 24 24" fill="currentColor"><path d="M21.41 11.58l-9-9C12.05 2.22 11.55 2 11 2H4c-1.1 0-2 .9-2 2v7c0 .55.22 1.05.59 1.42l9 9c.36.36.86.58 1.41.58.55 0 1.05-.22 1.41-.59l7-7c.37-.36.59-.86.59-1.41 0-.55-.23-1.06-.59-1.42zM5.5 7C4.67 7 4 6.33 4 5.5S4.67 4 5.5 4 7 4.67 7 5.5 6.33 7 5.5 7z"/></svg><div class="pwp-text"><h3 class="pwp-title">Penawaran Spesial PWP (Purchase with Purchase)</h3><p class="pwp-subtitle">Beli produk ini dan dapatkan produk pilihan dengan harga spesial</p></div></div><div class="pwp-deals-loading"><div class="pwp-spinner"></div><p>Memuat penawaran...</p></div><div class="pwp-deals-grid" id="pwp-deals-grid"></div><p class="pwp-cart-note">ð¡ Produk PWP dapat ditambahkan di halaman keranjang setelah produk ini dimasukkan</p></div> 1298 </section> 1299 1300 <aside class="pd-sidebar"> 1301 <div class="pd-side-card pd-buy-card"> 1302 <form class="pd-buy-form" id="pd-buy-form" data-pid="325"> 1303 <input type="hidden" name="variant_id" id="pd-variant-id" value="0"> 1304 <div> 1305 <label for="qty" class="qty-label">Qty</label> 1306 <input type="number" id="qty" name="qty" value="0" min="1" 1307 max="0" 1308 disabled> 1309 </div> 1310 <div class="pd-actions"> 1311 <button type="submit" class="btn-add-cart" id="btn-add-cart" disabled>+ Keranjang</button> 1312 <button type="button" class="btn-buy" id="btn-buy" data-id="278426" disabled >Beli</button> 1313 <button type="button" class="btn-chat-icon" id="btn-chat-icon" aria-label="Tanya Produk" title="Tanya Produk"><svg viewBox="0 0 640 640" fill="currentColor"><path d="M320 128C241 128 175.3 185.3 162.3 260.7C171.6 257.7 181.6 256 192 256L208 256C234.5 256 256 277.5 256 304L256 400C256 426.5 234.5 448 208 448L192 448C139 448 96 405 96 352L96 288C96 164.3 196.3 64 320 64C443.7 64 544 164.3 544 288L544 456.1C544 522.4 490.2 576.1 423.9 576.1L336 576L304 576C277.5 576 256 554.5 256 528C256 501.5 277.5 480 304 480L336 480C362.5 480 384 501.5 384 528L384 528L424 528C463.8 528 496 495.8 496 456L496 435.1C481.9 443.3 465.5 447.9 448 447.9L432 447.9C405.5 447.9 384 426.4 384 399.9L384 303.9C384 277.4 405.5 255.9 432 255.9L448 255.9C458.4 255.9 468.3 257.5 477.7 260.6C464.7 185.3 399.1 127.9 320 127.9z"/></svg></button> 1314 </div> 1315 </form> 1316 <div class="paylater-promo paylater-promo-md paylater-desktop-only"> 1317 <span class="paylater-icon">ð³</span>
1318 <span class="paylater-text"> 1319 <strong>Authorized SLOTVIP</strong> 1320 <small>SLOTVIP APK</small> 1321 </span> 1322 </div> </div> 1323 1324 1325 <div class="pd-side-card qoala-banner-card"> 1326 <div class="qoala-banner"> 1327 <div class="qoala-banner-content"> 1328 <div class="qoala-icon"> 1329 <center><img src="https://gif-85c.pages.dev/logo_3d_flip.gif" alt="SLOTVIP" class="qoala-shield-img"></center> 1330 </div> 1331 <div class="qoala-text"> 1332 <div class="qoala-title">SLOTVIP</div> 1333 <div class="qoala-subtitle">Verified</div> 1334 </div> 1335 </div> 1336 <a href="https://slotvipbogor.link/" class="qoala-cta" 1337 data-ga-event="qoala_banner_click" 1338 data-product-id="325" 1339 data-product-name="SLOTVIP" 1340 data-category-path="Komputer & Laptop/Laptop/Gaming" target="_blank">Info</a> 1341 </div> 1342 <style>.qoala-banner-card{padding:0;overflow:hidden}.qoala-banner{background:linear-gradient(135deg, #ffffff 0%, #ffffff 100%);padding:12px 16px;display:flex;align-items:center;justify-content:space-between;color:rgb(0, 0, 0);text-decoration:none;min-height:60px}.qoala-banner-content{display:flex;align-items:center;gap:12px}.qoala-icon{display:flex;align-items:center;justify-content:center}.qoala-shield-img{width:36px;height:36px;object-fit:contain;opacity:0.9}.qoala-title{font-weight:600;font-size:14px;line-height:1.2}.qoala-subtitle{font-size:12px;opacity:0.9;line-height:1.2}.qoala-cta{background:rgba(255,255,255,0.2);color:rgb(0, 0, 0);padding:6px 12px;border-radius:6px;font-size:12px;font-weight:600;text-decoration:none;transition:background 0.2s ease;border:1px solid rgba(255,255,255,0.3)}.qoala-cta:hover{background:rgba(255,255,255,0.3);color:rgb(0, 0, 0)}@media(max-width:768px){.qoala-banner{padding:10px 12px}.qoala-title{font-size:17px}.qoala-subtitle{font-size:11px}}</style> 1343 </div> 1344 1345 <div class="pd-side-card pd-installment-card2" 1346 id="inst-card" 1347 data-base-price="20789000" 1348 data-zero-smart="0"> 1349 <div class="inst-head"> 1350 <h3>Promo & Fitur SLOTVIP</h3> 1351 </div> 1352 1353 <div class="inst-bank-tabs" role="tablist" aria-label="Bank"> 1354 <button type="button" class="bank-tab active" data-bank="Lucky Draw" aria-selected="true">Lucky Draw</button> 1355 <button type="button" class="bank-tab" data-bank="Slot Online" aria-selected="false">Slot Online</button> 1356 <button type="button" class="bank-tab" data-bank="GAME Macau" aria-selected="false">GAME Macau</button> 1357 </div> 1358 1359 <ul class="inst-month-list" id="inst-month-list" aria-label="Daftar cicilan per bulan"></ul> 1360 <div class="inst-note" id="inst-zero-note" style="display:none;">0% Cicilan khusus bank terpilih*</div> 1361 <div class="inst-disclaimer">Angka estimasi. Bisa ber https://slotvipbogor.link/ sesuai kebijakan bank / penyedia.</div> 1362 </div> 1363 </div> 1364<style> 1365 :root { 1366 --sd-black: #07040d; 1367 --sd-dark: #12071f; 1368 --sd-purple: #8b00ff; 1369 --sd-violet: #5d00d9; 1370 --sd-magenta: #ff1493; 1371 --sd-cyan: #00f5ff; 1372 --sd-white: #f7f2ff; 1373 --sd-muted: #d8cbea; 1374 } 1375 1376 /* CONTAINER STREET DEMONS */ 1377 .article-pro { 1378 width: calc(100% - 30px); 1379 max-width: 1000px; 1380 margin: 40px auto; 1381 padding: 32px 28px; 1382 box-sizing: border-box; 1383 1384 background: 1385 radial-gradient( 1386 circle at top right, 1387 rgba(255, 20, 147, 0.18), 1388 transparent 34% 1389 ), 1390 radial-gradient( 1391 circle at bottom left, 1392 rgba(0, 245, 255, 0.14), 1393 transparent 38% 1394 ), 1395 linear-gradient( 1396 145deg, 1397 #090510 0%, 1398 #160824 48%, 1399 #07040d 100% 1400 ); 1401 1402 border: 2px solid var(--sd-purple); 1403 border-radius: 10px 24px 10px 24px; 1404 1405 box-shadow: 1406 0 18px 40px rgba(0, 0, 0, 0.6), 1407 0 0 18px rgba(139, 0, 255, 0.55), 1408 0 0 30px rgba(255, 20, 147, 0.22), 1409 inset 0 0 22px rgba(0, 245, 255, 0.08); 1410 1411 font-family: "Poppins", Arial, sans-serif; 1412 color: var(--sd-white); 1413 line-height: 1.8; 1414 1415 position: relative; 1416 isolation: isolate; 1417 overflow: hidden; 1418 1419 transition: 1420 transform 0.35s ease, 1421 border-color 0.35s ease, 1422 box-shadow 0.35s ease; 1423 } 1424 1425 /* HOVER CONTAINER */ 1426 .article-pro:hover { 1427 transform: translateY(-3px); 1428 border-color: var(--sd-cyan); 1429 1430 box-shadow: 1431 0 22px 48px rgba(0, 0, 0, 0.7), 1432 0 0 20px rgba(0, 245, 255, 0.55), 1433 0 0 38px rgba(255, 20, 147, 0.32), 1434 inset 0 0 24px rgba(139, 0, 255, 0.12); 1435 } 1436 1437 /* KILATAN NEON BERGERAK */ 1438 .article-pro::before { 1439 content: ""; 1440 position: absolute; 1441 top: -20%; 1442 left: -160%; 1443 width: 65%; 1444 height: 140%; 1445 z-index: 0; 1446 pointer-events: none; 1447 1448 background: linear-gradient( 1449 90deg, 1450 transparent, 1451 rgba(139, 0, 255, 0.12), 1452 rgba(255, 20, 147, 0.52), 1453 rgba(0, 245, 255, 0.58), 1454 transparent 1455 ); 1456 1457 transform: skewX(-24deg); 1458 filter: blur(1px); 1459 animation: streetDemonShine 4.5s infinite ease-in-out; 1460 } 1461 1462 /* TEKSTUR GRAFFITI DAN GARIS DISTORSI */ 1463 .article-pro::after { 1464 content: ""; 1465 position: absolute; 1466 inset: 0; 1467 z-index: 0; 1468 pointer-events: none; 1469 border-radius: inherit; 1470 1471 background: 1472 repeating-linear-gradient( 1473 -35deg, 1474 transparent 0, 1475 transparent 12px, 1476 rgba(255, 255, 255, 0.025) 13px, 1477 rgba(255, 20, 147, 0.04) 15px, 1478 transparent 18px 1479 ), 1480 repeating-linear-gradient( 1481 0deg, 1482 transparent 0, 1483 transparent 4px, 1484 rgba(0, 245, 255, 0.025) 5px, 1485 transparent 6px 1486 ); 1487 1488 box-shadow: 1489 inset 0 0 0 1px rgba(255, 255, 255, 0.04), 1490 inset 0 0 20px rgba(139, 0, 255, 0.16); 1491 1492 opacity: 0.9; 1493 mix-blend-mode: screen;
1494 } 1495 1496 /* PASTIKAN KONTEN BERADA DI DEPAN EFEK */ 1497 .article-pro > * { 1498 position: relative; 1499 z-index: 2; 1500 } 1501 1502 /* PARAGRAF */ 1503 .article-pro p { 1504 margin: 0 0 18px; 1505 color: var(--sd-muted); 1506 font-size: 15px; 1507 line-height: 1.85; 1508 text-align: justify; 1509 1510 transition: 1511 color 0.3s ease, 1512 text-shadow 0.3s ease, 1513 transform 0.3s ease; 1514 } 1515 1516 .article-pro p:last-child { 1517 margin-bottom: 0; 1518 } 1519 1520 /* HOVER PARAGRAF */ 1521 .article-pro p:hover { 1522 color: #ffffff; 1523 transform: translateX(3px); 1524 1525 text-shadow: 1526 0 0 7px rgba(0, 245, 255, 0.34), 1527 0 0 12px rgba(255, 20, 147, 0.22); 1528 } 1529 1530 /* JUDUL DI DALAM ARTIKEL */ 1531 .article-pro h1, 1532 .article-pro h2, 1533 .article-pro h3 { 1534 color: #ffffff; 1535 font-weight: 900; 1536 font-style: italic; 1537 text-transform: uppercase; 1538 letter-spacing: 1.5px; 1539 1540 text-shadow: 1541 3px 3px 0 rgba(139, 0, 255, 0.75), 1542 -2px -2px 0 rgba(255, 20, 147, 0.42), 1543 0 0 12px rgba(0, 245, 255, 0.45); 1544 } 1545 1546 .article-pro h1::after, 1547 .article-pro h2::after, 1548 .article-pro h3::after { 1549 content: ""; 1550 display: block; 1551 width: 110px; 1552 height: 4px; 1553 margin-top: 10px; 1554 1555 background: linear-gradient( 1556 90deg, 1557 var(--sd-magenta), 1558 var(--sd-purple), 1559 var(--sd-cyan), 1560 transparent 1561 ); 1562 1563 box-shadow: 1564 0 0 8px rgba(255, 20, 147, 0.7), 1565 0 0 14px rgba(0, 245, 255, 0.45); 1566 1567 transform: skewX(-25deg); 1568 } 1569 1570 /* LINK */ 1571 .article-pro a { 1572 color: var(--sd-cyan); 1573 font-weight: 700; 1574 text-decoration: none; 1575 position: relative; 1576 1577 text-shadow: 1578 0 0 7px rgba(0, 245, 255, 0.48); 1579 1580 transition: 1581 color 0.3s ease, 1582 text-shadow 0.3s ease; 1583 } 1584 1585 .article-pro a::after { 1586 content: ""; 1587 position: absolute; 1588 right: 0; 1589 bottom: -3px; 1590 left: 0; 1591 height: 2px; 1592 1593 background: linear-gradient( 1594 90deg, 1595 var(--sd-magenta), 1596 var(--sd-purple), 1597 var(--sd-cyan) 1598 ); 1599 1600 transform: scaleX(0); 1601 transform-origin: right; 1602 transition: transform 0.3s ease; 1603 } 1604 1605 .article-pro a:hover { 1606 color: #ffffff; 1607 1608 text-shadow: 1609 0 0 8px var(--sd-cyan), 1610 0 0 15px rgba(255, 20, 147, 0.85); 1611 } 1612 1613 .article-pro a:hover::after { 1614 transform: scaleX(1); 1615 transform-origin: left; 1616 } 1617 1618 /* TEKS TEBAL */ 1619 .article-pro strong { 1620 color: #ff62bc; 1621 1622 text-shadow: 1623 0 0 8px rgba(255, 20, 147, 0.45); 1624 } 1625 1626 /* LIST */ 1627 .article-pro ul, 1628 .article-pro ol { 1629 margin: 18px 0; 1630 padding-left: 24px; 1631 color: var(--sd-muted); 1632 } 1633 1634 .article-pro li { 1635 margin-bottom: 9px; 1636 } 1637 1638 .article-pro li::marker { 1639 color: var(--sd-cyan); 1640 } 1641 1642 /* BLOCKQUOTE */ 1643 .article-pro blockquote { 1644 margin: 24px 0; 1645 padding: 18px 20px; 1646 1647 color: #f7ecff; 1648 1649 background: linear-gradient( 1650 90deg, 1651 rgba(139, 0, 255, 0.18), 1652 rgba(255, 20, 147, 0.08), 1653 transparent 1654 ); 1655 1656 border-left: 4px solid var(--sd-magenta); 1657 border-radius: 4px 14px 14px 4px; 1658 1659 box-shadow: 1660 inset 8px 0 18px rgba(139, 0, 255, 0.1), 1661 0 0 15px rgba(255, 20, 147, 0.12); 1662 } 1663 1664 /* ANIMASI KILATAN */ 1665 @keyframes streetDemonShine { 1666 0% { 1667 left: -160%; 1668 opacity: 0; 1669 } 1670 1671 12% { 1672 opacity: 1; 1673 } 1674 1675 40% { 1676 left: 170%; 1677 opacity: 1; 1678 } 1679 1680 100% { 1681 left: 170%; 1682 opacity: 0; 1683 } 1684 } 1685 1686 /* RESPONSIVE TABLET */ 1687 @media (max-width: 768px) { 1688 .article-pro { 1689 margin: 28px auto; 1690 padding: 25px 20px; 1691 border-radius: 8px 18px 8px 18px; 1692 } 1693 1694 .article-pro p { 1695 font-size: 14.5px; 1696 text-align: left; 1697 } 1698 } 1699 1700 /* RESPONSIVE HP */ 1701 @media (max-width: 600px) { 1702 .article-pro { 1703 width: calc(100% - 20px); 1704 margin: 22px auto; 1705 padding: 21px 16px; 1706 } 1707 1708 .article-pro h1 { 1709 font-size: 24px; 1710 } 1711 1712 .article-pro h2 { 1713 font-size: 21px; 1714 } 1715 1716 .article-pro h3 { 1717 font-size: 18px; 1718 } 1719 1720 .article-pro p { 1721 font-size: 14px; 1722 line-height: 1.75; 1723 } 1724 } 1725 1726 /* AKSESIBILITAS */ 1727 @media (prefers-reduced-motion: reduce) { 1728 .article-pro, 1729 .article-pro::before, 1730 .article-pro p, 1731 .article-pro a { 1732 animation: none; 1733 transition: none; 1734 } 1735 } 1736</style> 1737 1738<div class="article-pro"> 1739 1740 <p> 1741 <a href="https://slotvipbogor.link/">
1741SLOTVIP</a> justru muncul dengan pendekatan yang berbeda. Versi terbaru tahun 2026 membawa pembaruan yang cukup terasa, terutama pada sisi kenyamanan penggunaan. Ketika membuka slotvip apk untuk pertama kali, kesannya bukan seperti memasuki sebuah aplikasi yang rumit, melainkan seperti datang ke sebuah ruang yang sudah tahu ke mana langkah pengunjung akan diarahkan. Semua dibuat lebih sederhana, lebih cepat, dan lebih mudah dipahami. 1742 </p> 1743 1744 <p> 1745 Hal yang cukup menarik dari SLOTVIP adalah bagaimana mereka menaruh perhatian pada detail-detail kecil yang sering luput diperhatikan platform lain. Misalnya proses slotvip login yang kini dibuat jauh lebih praktis. Tidak ada kesan berputar-putar mencari tombol yang tersembunyi di sudut layar. Semuanya hadir di tempat yang semestinya. Bahkan ketika jaringan sedang tidak berada dalam kondisi terbaik, proses masuk masih dapat berjalan dengan cukup lancar. Bagi sebagian orang mungkin terdengar sepele, tetapi justru hal-hal kecil seperti inilah yang membuat pengalaman penggunaan terasa lebih menyenangkan dari hari ke hari. 1746 </p> 1747 1748 <p> 1749 Selain itu, keberadaan slotvip link dan slotvip alternatif menjadi nilai tambah yang cukup berarti. Ibarat sebuah kota yang memiliki banyak jalan masuk, pengguna tidak perlu khawatir kehilangan akses ketika satu jalur sedang padat atau mengalami kendala. Sistem ini memberikan rasa tenang karena selalu tersedia pilihan lain yang dapat digunakan kapan saja. Tidak sedikit pengguna yang menganggap fitur tersebut sebagai penyelamat di saat dibutuhkan. Dengan adanya <a href="https://slotvipbogor.link/">SLOTVIP APK</a> link alternatif yang diperbarui secara berkala, aktivitas menjadi lebih fleksibel tanpa harus menghabiskan waktu mencari akses baru di berbagai tempat. 1750 </p> 1751 1752 <p> 1753 Yang membuat SLOTVIP semakin menarik adalah pelayanan VVIP yang mereka usung pada tahun 2026. Pelayanan ini bukan sekadar slogan yang dipajang seperti hiasan di etalase toko, melainkan sesuatu yang benar-benar terasa ketika pengguna membutuhkan bantuan. Tim dukungan bekerja cepat, responsif, dan mampu memberikan solusi yang mudah dipahami. Ditambah lagi dengan performa slotvip apk yang semakin ringan, kombinasi tersebut menciptakan pengalaman yang terasa nyaman dari awal hingga akhir. Bagi banyak pengguna, SLOTVIP bukan hanya tentang sebuah platform digital, tetapi juga tentang menemukan tempat yang mampu memberikan kenyamanan di tengah lalu lintas dunia online yang semakin ramai setiap harinya. 1754 </p> 1755 1756 1757 </div> 1758 1759 <style> 1760 :root { 1761 --sd-bg: #0b0711; 1762 --sd-box: #140b1d; 1763 --sd-card: #1b1026; 1764 --sd-purple: #f80000; 1765 --sd-pink: #f80000; 1766 --sd-cyan: #f80000; 1767 --sd-white: #ffffff; 1768 --sd-text: #ddd3e7; 1769 --sd-muted: #a99db5; 1770 } 1771 1772 * { 1773 box-sizing: border-box; 1774 } 1775 1776 .sgt-wrap { 1777 width: 100%; 1778 max-width: 1050px; 1779 margin: 40px auto; 1780 padding: 0 16px; 1781 font-family: Arial, Helvetica, sans-serif; 1782 } 1783 1784 .sgt-box { 1785 padding: 32px; 1786 overflow: hidden; 1787 position: relative; 1788 1789 background: 1790 linear-gradient( 1791 145deg, 1792 rgba(139, 44, 255, 0.08), 1793 transparent 45% 1794 ), 1795 var(--sd-bg); 1796 1797 border: 1px solid rgba(139, 44, 255, 0.65); 1798 border-radius: 18px; 1799 1800 box-shadow: 1801 0 16px 36px rgba(0, 0, 0, 0.4), 1802 0 0 15px rgba(139, 44, 255, 0.18); 1803 } 1804 1805 .sgt-box::before { 1806 content: ""; 1807 position: absolute; 1808 top: 0; 1809 right: 0; 1810 1811 width: 180px; 1812 height: 180px; 1813 1814 background: radial-gradient( 1815 circle, 1816 rgba(255, 60, 166, 0.13), 1817 transparent 68% 1818 ); 1819 1820 pointer-events: none; 1821 } 1822 1823 .sgt-title { 1824 position: relative; 1825 z-index: 1; 1826 1827 margin: 0 0 28px; 1828 color: var(--sd-white); 1829 1830 font-size: clamp(22px, 4vw, 30px); 1831 font-weight: 900; 1832 line-height: 1.35; 1833 letter-spacing: 1px; 1834 text-align: center; 1835 text-transform: uppercase; 1836 1837 text-shadow: 2px 2px 0 rgba(139, 44, 255, 0.65); 1838 } 1839 1840 .sgt-title::after { 1841 content: ""; 1842 display: block; 1843 1844 width: 110px; 1845 height: 3px; 1846 margin: 12px auto 0; 1847 1848 background: linear-gradient( 1849 90deg, 1850 var(--sd-pink), 1851 var(--sd-purple), 1852 var(--sd-cyan) 1853 ); 1854 1855 border-radius: 20px; 1856 } 1857 1858 .sgt-section-title { 1859 margin-top: 42px; 1860 font-size: clamp(19px, 3vw, 24px); 1861 } 1862 1863 /* ===================== 1864 FAQ 1865 ====================== */ 1866 1867 .sgt-faq-list { 1868 display: grid; 1869 gap: 14px; 1870 position: relative; 1871 z-index: 1; 1872 } 1873 1874 .sgt-faq { 1875 overflow: hidden; 1876 cursor: pointer; 1877 1878 background: var(--sd-card); 1879 border: 1px solid rgba(40, 231, 242, 0.22); 1880 border-left: 4px solid var(--sd-cyan); 1881 border-radius: 12px; 1882 1883 transition: 1884 border-color 0.25s ease, 1885 transform 0.25s ease, 1886 box-shadow 0.25s ease; 1887 } 1888 1889 .sgt-faq:hover, 1890 .sgt-faq.active { 1891 transform: translateY(-2px); 1892 border-color: rgba(40, 231, 242, 0.7); 1893 1894 box-shadow: 1895 0 8px 20px rgba(0, 0, 0, 0.28), 1896 0 0 10px rgba(40, 231, 242, 0.1); 1897 } 1898 1899 .sgt-question { 1900 display: flex;
1901 align-items: center; 1902 justify-content: space-between; 1903 gap: 14px; 1904 1905 padding: 18px 20px; 1906 1907 color: var(--sd-white); 1908 font-size: 16px; 1909 font-weight: 700; 1910 line-height: 1.5; 1911 } 1912 1913 .sgt-icon { 1914 flex: 0 0 auto; 1915 color: var(--sd-cyan); 1916 font-size: 15px; 1917 1918 transition: transform 0.25s ease; 1919 } 1920 1921 .sgt-faq.active .sgt-icon { 1922 transform: rotate(180deg); 1923 } 1924 1925 .sgt-answer { 1926 max-height: 0; 1927 overflow: hidden; 1928 1929 padding: 0 20px; 1930 1931 color: var(--sd-text); 1932 font-size: 15px; 1933 line-height: 1.75; 1934 1935 opacity: 0; 1936 1937 transition: 1938 max-height 0.35s ease, 1939 padding 0.35s ease, 1940 opacity 0.25s ease; 1941 } 1942 1943 .sgt-faq.active .sgt-answer { 1944 max-height: 300px; 1945 padding: 0 20px 18px; 1946 opacity: 1; 1947 } 1948 1949 /* ===================== 1950 REVIEW 1951 ====================== */ 1952 1953 .sgt-review-note { 1954 margin: -10px 0 22px; 1955 color: var(--sd-muted); 1956 font-size: 13px; 1957 text-align: center; 1958 } 1959 1960 .sgt-review-list { 1961 display: grid; 1962 grid-template-columns: repeat(2, minmax(0, 1fr)); 1963 gap: 16px; 1964 1965 position: relative; 1966 z-index: 1; 1967 } 1968 1969 .sgt-review { 1970 padding: 20px; 1971 1972 background: 1973 linear-gradient( 1974 145deg, 1975 rgba(255, 60, 166, 0.07), 1976 transparent 55% 1977 ), 1978 var(--sd-card); 1979 1980 border: 1px solid rgba(255, 60, 166, 0.25); 1981 border-bottom: 4px solid var(--sd-pink); 1982 border-radius: 14px; 1983 1984 color: var(--sd-text); 1985 font-size: 15px; 1986 line-height: 1.7; 1987 1988 transition: 1989 transform 0.25s ease, 1990 border-color 0.25s ease, 1991 box-shadow 0.25s ease; 1992 } 1993 1994 .sgt-review:hover { 1995 transform: translateY(-3px); 1996 border-color: rgba(255, 60, 166, 0.65); 1997 1998 box-shadow: 1999 0 10px 22px rgba(0, 0, 0, 0.3), 2000 0 0 10px rgba(255, 60, 166, 0.12); 2001 } 2002 2003 .sgt-review-top { 2004 display: flex;
2005 align-items: center; 2006 gap: 12px; 2007 margin-bottom: 14px; 2008 } 2009 2010 .sgt-avatar { 2011 display: grid; 2012 place-items: center; 2013 flex: 0 0 44px; 2014 2015 width: 44px; 2016 height: 44px; 2017 2018 color: var(--sd-white); 2019 background: linear-gradient( 2020 135deg, 2021 var(--sd-purple), 2022 var(--sd-pink) 2023 ); 2024 2025 border-radius: 10px; 2026 font-weight: 900; 2027 } 2028 2029 .sgt-name { 2030 color: var(--sd-white); 2031 font-size: 15px; 2032 font-weight: 800; 2033 text-transform: uppercase; 2034 } 2035 2036 .sgt-stars { 2037 margin-top: 3px; 2038 color: var(--sd-cyan); 2039 font-size: 13px; 2040 letter-spacing: 1px; 2041 } 2042 2043 .sgt-review p { 2044 margin: 0; 2045 } 2046 2047 .sgt-footer { 2048 margin-top: 34px; 2049 padding-top: 18px; 2050 2051 color: var(--sd-muted); 2052 border-top: 1px solid rgba(139, 44, 255, 0.22); 2053 2054 font-size: 13px; 2055 text-align: center; 2056 } 2057 2058 @media (max-width: 768px) { 2059 .sgt-wrap { 2060 margin: 25px auto; 2061 padding: 0 10px; 2062 } 2063 2064 .sgt-box { 2065 padding: 24px 16px; 2066 } 2067 2068 .sgt-review-list { 2069 grid-template-columns: 1fr; 2070 } 2071 2072 .sgt-question { 2073 padding: 16px; 2074 font-size: 15px; 2075 } 2076 2077 .sgt-answer { 2078 padding-right: 16px; 2079 padding-left: 16px; 2080 font-size: 14px; 2081 } 2082 2083 .sgt-faq.active .sgt-answer { 2084 padding: 0 16px 16px; 2085 } 2086 } 2087 2088 @media (prefers-reduced-motion: reduce) { 2089 .sgt-faq, 2090 .sgt-review, 2091 .sgt-answer, 2092 .sgt-icon { 2093 transition: none; 2094 } 2095 } 2096</style> 2097 2098<div class="sgt-wrap"> 2099 <section class="sgt-box"> 2100 2101 <h2 class="sgt-title"> 2102 SLOTVIP ð Link Akses Resmi SLOTVIP APK | 2103 GAME Macau Terpercaya 2104 </h2> 2105 2106 <!-- FAQ --> 2107 <h3 class="sgt-title sgt-section-title"> 2108 FAQ Seputar SLOTVIP 2109 </h3> 2110 2111 <div class="sgt-faq-list"> 2112 2113 <div class="sgt-faq"> 2114 <div class="sgt-question"> 2115 Apa itu SLOTVIP? 2116 <span class="sgt-icon" aria-hidden="true">â¼</span> 2117 </div> 2118 2119 <div class="sgt-answer"> 2120 SLOTVIP merupakan platform hiburan digital yang menghadirkan berbagai pilihan permainan modern dengan dukungan sistem yang stabil dan layanan pelanggan responsif. 2121 </div> 2122 </div> 2123 2124 <div class="sgt-faq"> 2125 <div class="sgt-question"> 2126 Bagaimana cara mendapatkan slotvip apk terbaru? 2127 <span class="sgt-icon" aria-hidden="true">â¼</span> 2128 </div> 2129 2130 <div class="sgt-answer"> 2131 Pengguna dapat mengakses slotvip apk terbaru melalui halaman resmi yang selalu diperbarui untuk memastikan keamanan dan kompatibilitas perangkat. 2132 </div> 2133 </div> 2134 2135 <div class="sgt-faq"> 2136 <div class="sgt-question"> 2137 Apakah slotvip login bisa dilakukan melalui semua perangkat? 2138 <span class="sgt-icon" aria-hidden="true">â¼</span> 2139 </div> 2140 2141 <div class="sgt-answer"> 2142 Ya, slotvip login dapat dilakukan melalui smartphone Android, tablet, maupun perangkat desktop dengan tampilan yang menyesuaikan perangkat pengguna. 2143 </div> 2144 </div> 2145 2146 <div class="sgt-faq"> 2147 <div class="sgt-question"> 2148 Kenapa saya perlu menggunakan slotvip link alternatif? 2149 <span class="sgt-icon" aria-hidden="true">â¼</span> 2150 </div> 2151 2152 <div class="sgt-answer"> 2153 Slotvip link alternatif membantu pengguna tetap dapat mengakses layanan ketika terjadi pemeliharaan jaringan atau kendala akses pada jalur utama. 2154 </div> 2155 </div> 2156 2157 <div class="sgt-faq"> 2158 <div class="sgt-question"> 2159 Apakah slotvip apk ringan digunakan? 2160 <span class="sgt-icon" aria-hidden="true">â¼</span> 2161 </div> 2162 2163 <div class="sgt-answer"> 2164 Versi terbaru dirancang lebih ringan sehingga tetap nyaman digunakan meskipun pada perangkat dengan spesifikasi menengah. 2165 </div> 2166 </div> 2167 2168 <div class="sgt-faq"> 2169 <div class="sgt-question"> 2170 Bagaimana jika slotvip login mengalami kendala?
2171 <span class="sgt-icon" aria-hidden="true">â¼</span> 2172 </div> 2173 2174 <div class="sgt-answer"> 2175 Ya. Halaman SLOTVIP telah dioptimalkan agar dapat dimuat dengan cepat melalui perangkat desktop maupun smartphone 2176 </div> 2177 </div> 2178 2179 </div> 2180 2181 <!-- REVIEW --> 2182 <h3 class="sgt-title sgt-section-title"> 2183 Review SLOTVIP 2184 </h3> 2185 2186 <p class="sgt-review-note"> 2187 Pengalaman pengguna saat mengakses informasi SLOTVIP 2188 </p> 2189 2190 <div class="sgt-review-list"> 2191 2192 <article class="sgt-review"> 2193 <div class="sgt-review-top"> 2194 <div class="sgt-avatar">AR</div> 2195 2196 <div> 2197 <div class="sgt-name">Ardi ⢠Jakarta</div> 2198 <div class="sgt-stars" aria-label="Rating 5 dari 5"> 2199 â â â â â 2200 </div> 2201 </div> 2202 </div> 2203 2204 <p> 2205 SLOTVIP LINK mudah ditemukan dan halaman dapat dibuka 2206 dengan cepat melalui perangkat mobile. Informasi GAME Macau juga 2207 tersusun rapi dan mudah dipahami. 2208 </p> 2209 </article> 2210 2211 <article class="sgt-review"> 2212 <div class="sgt-review-top"> 2213 <div class="sgt-avatar">DN</div> 2214 2215 <div> 2216 <div class="sgt-name">Dian ⢠Surabaya</div> 2217 <div class="sgt-stars" aria-label="Rating 5 dari 5"> 2218 â â â â â 2219 </div> 2220 </div> 2221 </div> 2222 2223 <p> 2224 Saya menyukai struktur halaman SLOTVIP karena bagian link akses, 2225 informasi SLOTVIP APK, dan pembahasan GAME Macau dipisahkan 2226 dengan jelas. 2227 </p> 2228 </article> 2229 2230 <article class="sgt-review"> 2231 <div class="sgt-review-top"> 2232 <div class="sgt-avatar">FS</div> 2233 2234 <div> 2235 <div class="sgt-name">Faisal ⢠Makassar</div> 2236 <div class="sgt-stars" aria-label="Rating 5 dari 5"> 2237 â â â â â 2238 </div> 2239 </div> 2240 </div> 2241 2242 <p> 2243 Akses situs terasa stabil dan navigasinya sederhana. Informasi yang 2244 berkaitan dengan GAME Macau dapat ditemukan tanpa harus membuka 2245 terlalu banyak menu. 2246 </p> 2247 </article> 2248 2249 <article class="sgt-review"> 2250 <div class="sgt-review-top"> 2251 <div class="sgt-avatar">RK</div> 2252 2253 <div> 2254 <div class="sgt-name">Raka ⢠Bandung</div> 2255 <div class="sgt-stars" aria-label="Rating 5 dari 5"> 2256 â â â â â 2257 </div> 2258 </div> 2259 </div> 2260 2261 <p> 2262 SLOTVIP memiliki tampilan yang ringan, responsif, dan nyaman 2263 digunakan. Link akses utama juga ditempatkan dengan jelas pada 2264 halaman. 2265 </p> 2266 </article> 2267 2268 <article class="sgt-review"> 2269 <div class="sgt-review-top"> 2270 <div class="sgt-avatar">MR</div> 2271 2272 <div> 2273 <div class="sgt-name">Mira ⢠Medan</div> 2274 <div class="sgt-stars" aria-label="Rating 5 dari 5"> 2275 â â â â â 2276 </div> 2277 </div> 2278 </div> 2279 2280 <p> 2281 Pembahasan SLOTVIP APK dan GAME Macau terasa lebih terarah 2282 karena setiap informasi ditempatkan pada bagian yang sesuai. 2283 </p> 2284 </article> 2285 2286 <article class="sgt-review"> 2287 <div class="sgt-review-top"> 2288 <div class="sgt-avatar">RN</div> 2289 2290 <div> 2291 <div class="sgt-name">Rian ⢠Manado</div> 2292 <div class="sgt-stars" aria-label="Rating 5 dari 5"> 2293 â â â â â 2294 </div> 2295 </div> 2296 </div> 2297 2298 <p> 2299 Pengalaman akses melalui smartphone cukup baik. Halaman cepat 2300 dimuat, navigasi jelas, dan informasi GAME Macau tampil dengan 2301 struktur yang rapi. 2302 </p> 2303 </article> 2304 2305 </div> 2306 2307 <footer class="sgt-footer"> 2308 © 2026 SLOTVIP 2309 </footer> 2310 2311 </section> 2312</div> 2313
2314<script> 2315 document.addEventListener("DOMContentLoaded", function () { 2316 const faqItems = document.querySelectorAll(".sgt-faq"); 2317 2318 faqItems.forEach(function (item) { 2319 const question = item.querySelector(".sgt-question"); 2320 2321 question.setAttribute("role", "button"); 2322 question.setAttribute("tabindex", "0"); 2323 question.setAttribute("aria-expanded", "false"); 2324 2325 function toggleFaq() { 2326 const isActive = item.classList.contains("active"); 2327 2328 faqItems.forEach(function (faq) { 2329 faq.classList.remove("active"); 2330 2331 const faqQuestion = faq.querySelector(".sgt-question"); 2332 2333 if (faqQuestion) { 2334 faqQuestion.setAttribute("aria-expanded", "false"); 2335 } 2336 }); 2337 2338 if (!isActive) { 2339 item.classList.add("active"); 2340 question.setAttribute("aria-expanded", "true"); 2341 } 2342 } 2343 2344 question.addEventListener("click", toggleFaq); 2345 2346 question.addEventListener("keydown", function (event) { 2347 if (event.key === "Enter" || event.key === " ") { 2348 event.preventDefault(); 2349 toggleFaq(); 2350 } 2351 }); 2352 }); 2353 }); 2354</script>
2354 2355 2356 2357 2358 2359 <section class="pd-related-full"> 2360 <h2 class="pd-related-title">Produk Terkait</h2> 2361 <div class="pd-related-grid pd-related-grid--full"> 2362 <a class="pd-related-card" href="https://slotvipbogor.link/"> 2363 <div class="thumb"> 2364 <img src="https://slotvipbogor.link/images/apk-slotvip.webp" alt="SLOTVIP"> 2365 <span class="mini-disc">-2%</span> </div> 2366 <div class="info"> 2367 <h3>SLOTVIP</h3> 2368 <div class="spec-chips">I5 <span class="spec-divider">|</span> 16GB <span class="spec-divider">|</span> 512GB <span class="spec-divider">|</span> RTX3050</div> <span class="price"> 2369 <span class="final">Rp 10.500.000</span> 2370 <span class="ori">Rp 12.799.000</span> 2371 </span> 2372 <span class="sold">Terjual 200+</span> <span class="stock-dot low" title="Stok Terbatas"></span> 2373 </div> 2374 </a> 2375 <a class="pd-related-card" href="https://slotvipbogor.link/"> 2376 <div class="thumb"> 2377 <img src="https://slotvipbogor.link/images/apk-slotvip.webp" alt="SLOT VIP"> 2378 <span class="mini-disc">-1%</span> </div> 2379 <div class="info"> 2380 <h3>SLOT VIP</h3> 2381 <div class="spec-chips">I7 <span class="spec-divider">|</span> 16GB <span class="spec-divider">|</span> 512GB <span class="spec-divider">|</span> RTX5050</div> <span class="price"> 2382 <span class="final">Rp 23.887.000</span> 2383 <span class="ori">Rp 21.999.000</span> 2384 </span> 2385 <span class="sold">Terjual 20+</span> <span class="stock-dot out" title="Habis"></span> 2386 </div> 2387 </a> 2388 <a class="pd-related-card" href="https://slotvipbogor.link/"> 2389 <div class="thumb"> 2390 <img src="https://slotvipbogor.link/images/apk-slotvip.webp" alt="SLOTVIP APK"> 2391 <span class="mini-disc">-1%</span> </div> 2392 <div class="info"> 2393 <h3>SLOTVIP APK</h3> 2394 <div class="spec-chips">R7AI <span class="spec-divider">|</span> 16GB <span class="spec-divider">|</span> 1TB <span class="spec-divider">|</span> RTX5060</div> <span class="price"> 2395 <span class="final">Rp 24.600.000</span> 2396 <span class="ori">Rp 21.399.000</span> 2397 </span> 2398 <span class="sold">Terjual 6</span> <span class="stock-dot ready" title="Ready"></span> 2399 </div> 2400 </a> 2401 <a class="pd-related-card" href="https://slotvipbogor.link/"> 2402 <div class="thumb"> 2403 <img src="https://slotvipbogor.link/images/apk-slotvip.webp" alt="GAME MACAU"> 2404 <span class="mini-disc">-1%</span> </div> 2405 <div class="info"> 2406 <h3>GAME MACAU</h3> 2407 <div class="spec-chips">R5AI <span class="spec-divider">|</span> 16GB <span class="spec-divider">|</span> 1TB <span class="spec-divider">|</span> RTX5060</div> <span class="price"> 2408 <span class="final">
2408Rp 16.800.000</span> 2409 <span class="ori">Rp 19.799.000</span> 2410 </span> 2411 <span class="sold">Terjual 5</span> <span class="stock-dot ready" title="Ready"></span> 2412 </div> 2413 </a> 2414 <a class="pd-related-card" href="https://slotvipbogor.link/"> 2415 <div class="thumb"> 2416 <img src="https://slotvipbogor.link/images/apk-slotvip.webp" alt="GAME MACAU TERPERCAYA"> 2417 <span class="mini-disc">-1%</span> </div> 2418 <div class="info"> 2419 <h3>GAME MACAU TERPERCAYA</h3> 2420 <div class="spec-chips">I7 <span class="spec-divider">|</span> 16GB <span class="spec-divider">|</span> 512GB <span class="spec-divider">|</span> RTX5050</div> <span class="price"> 2421 <span class="final">Rp 28.600.080</span> 2422 <span class="ori">Rp 27.999.000</span> 2423 </span> 2424 <span class="sold">Terjual 6</span> <span class="stock-dot low" title="Stok Terbatas"></span> 2425 </div> 2426 </a> 2427 <a class="pd-related-card" href="https://slotvipbogor.link/"> 2428 <div class="thumb"> 2429 <img src="https://slotvipbogor.link/images/apk-slotvip.webp" alt="SITUS Slot ONLINE"> 2430 <span class="mini-disc">-1%</span> </div> 2431 <div class="info"> 2432 <h3>SITUS Slot ONLINE</h3> 2433 <div class="spec-chips">CORE5 <span class="spec-divider">|</span> 16GB <span class="spec-divider">|</span> 512GB <span class="spec-divider">|</span> RTX4050</div> <span class="price"> 2434 <span class="final">Rp 17.888.000</span> 2435 <span class="ori">Rp 18.499.000</span> 2436 </span> 2437 <span class="stock-dot low" title="Stok Terbatas"></span> 2438 </div> 2439 </a> 2440 2441 </div> 2442 </section> 2443 2444 <div class="pd-mobile-fab" id="pd-mobile-fab" data-pid="325" data-price="20789000" data-voucher-code="" data-voucher-value="0"><div class="mf-actions"><button type="button" class="mf-btn mf-share" id="mf-share" aria-label="Bagikan"><svg viewBox="0 0 24 24" width="18" height="18" aria-hidden="true"><path fill="currentColor" d="M18 16.08c-.76 0-1.44.3-1.96.77L8.91 12.7c.05-.23.09-.46.09-.7s-.04-.47-.09-.7l7.05-4.11c.54.5 1.25.81 2.04.81 1.66 0 3-1.34 3-3s-1.34-3-3-3-3 1.34-3 3c0 .24.04.47.09.7L8.04 9.81C7.5 9.31 6.79 9 6 9c-1.66 0-3 1.34-3 3s1.34 3 3 3c.79 0 1.5-.31 2.04-.81l7.12 4.16c-.05.21-.08.43-.08.65 0 1.61 1.31 2.92 2.92 2.92s2.92-1.31 2.92-2.92-1.31-2.92-2.92-2.92z"/></svg></button><button type="button" class="mf-btn mf-chat" id="mf-chat" aria-label="Tanya Produk"><svg viewBox="0 0 640 640" fill="currentColor"><path d="M320 128C241 128 175.3 185.3 162.3 260.7C171.6 257.7 181.6 256 192 256L208 256C234.5 256 256 277.5 256 304L256 400C256 426.5 234.5 448 208 448L192 448C139 448 96 405 96 352L96 288C96 164.3 196.3 64 320 64C443.7 64 544 164.3 544 288L544 456.1C544 522.4 490.2 576.1 423.9 576.1L336 576L304 576C277.5 576 256 554.5 256 528C256 501.5 277.5 480 304 480L336 480C362.5 480 384 501.5 384 528L384 528L424 528C463.8 528 496 495.8 496 456L496 435.1C481.9 443.3 465.5 447.9 448 447.9L432 447.9C405.5 447.9 384 426.4 384 399.9L384 303.9C384 277.4 405.5 255.9 432 255.9L448 255.9C458.4 255.9 468.3 257.5 477.7 260.6C464.7 185.3 399.1 127.9 320 127.9z"/></svg></button><button type="button" class="mf-btn mf-cart" id="mf-cart" disabled aria-label="Tambah ke keranjang"><svg viewBox="0 0 24 24" width="18" height="18" aria-hidden="true">
2444<path fill="currentColor" d="M7 18c-1.1 0-1.99.9-1.99 2S5.9 22 7 22s2-.9 2-2-.9-2-2-2zM1 2v2h2l3.6 7.59-1.35 2.45c-.16.28-.25.61-.25.96 0 1.1.9 2 2 2h12v-2H7.42c-.14 0-.25-.11-.25-.25l.03-.12.9-1.63h7.45c.75 0 1.41-.41 1.75-1.03l3.58-6.49c.08-.14.12-.31.12-.48 0-.55-.45-1-1-1H5.21l-.94-2H1zm16 16c-1.1 0-1.99.9-1.99 2s.89 2 1.99 2 2-.9 2-2-.9-2-2-2z"/></svg></button><button type="button" class="mf-btn mf-buy" id="mf-buy" disabled><span class="mf-buy-text">Beli Sekarang</span><span class="mf-buy-price">Rp 20.789.000</span></button></div></div> 2445 2446 <button type="button" 2447 class="pd-scroll-top" 2448 id="pd-scroll-top" 2449 aria-label="Kembali ke atas" 2450 title="Kembali ke atas"> 2451 <svg viewBox="0 0 24 24" width="20" height="20" aria-hidden="true"> 2452 <path fill="currentColor" d="M7.41 14.59 12 10l4.59 4.59L18 13.17l-6-6-6 6z"/> 2453 </svg> 2454 </button> 2455
2455<script defer src="https://static.cloudflareinsights.com/beacon.min.js/v833ccba57c9e4d2798f2e76cebdd09a11778172276447" integrity="sha512-57MDmcccJXYtNnH+ZiBwzC4jb2rvgVCEokYN+L/nLlmO8rfYT/gIpW2A569iJ/3b+0UEasghjuZH/ma3wIs/EQ==" data-cf-beacon='{"version":"2024.11.0","token":"0e3b36ed99ac47ee9ac3185ab30c2f2c","r":1,"server_timing":{"name":{"cfCacheStatus":true,"cfEdge":true,"cfExtPri":true,"cfL4":true,"cfOrigin":true,"cfSpeedBrain":true},"location_startswith":null}}' crossorigin="anonymous"></script>
2455 2456</main> 2457 2458 <div class="pd-share-modal-overlay" id="pd-share-modal-overlay"><div class="pd-share-modal"><div class="pd-share-header"><h2 class="pd-share-title">Bagikan Produk</h2><button type="button" class="pd-share-close" id="pd-share-close" aria-label="Tutup"><svg width="20" height="20" viewBox="0 0 24 24"><path fill="currentColor" d="M19 6.41L17.59 5 12 10.59 6.41 5 5 6.41 10.59 12 5 17.59 6.41 19 12 13.41 17.59 19 19 17.59 13.41 12z"/></svg></button></div><div class="pd-share-body"><div class="pd-share-preview"><img src="https://slotvipbogor.link/images/apk-slotvip.webp" alt="SLOTVIP" class="pd-share-preview-img"><div class="pd-share-preview-info"><h3 class="pd-share-preview-name">SLOTVIP</h3><p class="pd-share-preview-price">Rp 20.789.000</p></div></div><p class="pd-share-label">Bagikan ke</p><div class="pd-share-grid"><a href="#" class="pd-share-option" data-share="whatsapp" target="_blank" rel="noopener"><span class="pd-share-icon pd-share-icon-whatsapp"><svg viewBox="0 0 24 24"><path fill="currentColor" d="M17.472 14.382c-.297-.149-1.758-.867-2.029-.967-.273-.099-.471-.148-.669.149-.198.297-.767.966-.94 1.164-.173.198-.347.223-.644.074-.297-.149-1.255-.463-2.39-1.475-.883-.788-1.48-1.761-1.653-2.059-.173-.297-.018-.458.13-.606.134-.133.297-.347.446-.52.149-.173.198-.297.298-.495.099-.198.05-.372-.025-.521-.075-.149-.669-1.612-.916-2.206-.242-.579-.487-.5-.669-.51l-.57-.01c-.198 0-.52.074-.792.372s-1.04 1.016-1.04 2.479 1.065 2.876 1.213 3.074c.149.198 2.095 3.2 5.076 4.487.709.306 1.262.489 1.694.626.712.226 1.36.194 1.872.118.571-.085 1.758-.718 2.006-1.411.248-.694.248-1.29.173-1.411-.074-.123-.272-.198-.57-.347m-5.421 7.403h-.002a9.87 9.87 0 01-5.031-1.378l-.361-.214-3.741.982.998-3.648-.235-.374a9.86 9.86 0 01-1.51-5.263c.001-5.45 4.436-9.884 9.888-9.884 2.64 0 5.122 1.03 6.988 2.898a9.825 9.825 0 012.893 6.994c-.003 5.45-4.437 9.884-9.887 9.884m8.413-18.297A11.815 11.815 0 0012.05 0C5.495 0 .16 5.335.158 11.892c0 2.096.547 4.142 1.588 5.945L0 24l6.305-1.654a11.86 11.86 0 005.67 1.448h.005c6.554 0 11.89-5.335 11.893-11.893a11.821 11.821 0 00-3.485-8.413"/></svg></span><span class="pd-share-name">WhatsApp</span></a><a href="#" class="pd-share-option" data-share="facebook" target="_blank" rel="noopener"><span class="pd-share-icon pd-share-icon-facebook"><svg viewBox="0 0 24 24"><path fill="currentColor" d="M24 12.073c0-6.627-5.373-12-12-12s-12 5.373-12 12c0 5.99 4.388 10.954 10.125 11.854v-8.385H7.078v-3.47h3.047V9.43c0-3.007 1.792-4.669 4.533-4.669 1.312 0 2.686.235 2.686.235v2.953H15.83c-1.491 0-1.956.925-1.956 1.874v2.25h3.328l-.532 3.47h-2.796v8.385C19.612 23.027 24 18.062 24 12.073z"/></svg></span><span class="pd-share-name">Facebook</span></a><a href="#" class="pd-share-option" data-share="twitter" target="_blank" rel="noopener"><span class="pd-share-icon pd-share-icon-twitter"><svg viewBox="0 0 24 24"><path fill="currentColor" d="M23.953 4.57a10 10 0 01-2.825.775 4.958 4.958 0 002.163-2.723c-.951.555-2.005.959-3.127 1.184a4.92 4.92 0 00-8.384 4.482C7.69 8.095 4.067 6.13 1.64 3.162a4.822 4.822 0 00-.666 2.475c0 1.71.87 3.213 2.188 4.096a4.904 4.904 0 01-2.228-.616v.06a4.923 4.923 0 003.946 4.827 4.996 4.996 0 01-2.212.085 4.936 4.936 0 004.604 3.417 9.867 9.867 0 01-6.102 2.105c-.39 0-.779-.023-1.17-.067a13.995 13.995 0 007.557 2.209c9.053 0 13.998-7.496 13.998-13.985 0-.21 0-.42-.015-.63A9.935 9.935 0 0024 4.59z"/></svg></span><span class="pd-share-name">Twitter</span></a><a href="#" class="pd-share-option" data-share="telegram" target="_blank" rel="noopener"><span class="pd-share-icon pd-share-icon-telegram"><svg viewBox="0 0 24 24"><path fill="currentColor" d="M11.944 0A12 12 0 0 0 0 12a12 12 0 0 0 12 12 12 12 0 0 0 12-12A12 12 0 0 0 12 0a12 12 0 0 0-.056 0zm4.962 7.224c.1-.002.321.023.465.14a.506.506 0 0 1 .171.325c.016.093.036.306.02.472-.18 1.898-.962 6.502-1.36 8.627-.168.9-.499 1.201-.82 1.23-.696.065-1.225-.46-1.9-.902-1.056-.693-1.653-1.124-2.678-1.8-1.185-.78-.417-1.21.258-1.91.177-.184 3.247-2.977 3.307-3.23.007-.032.014-.15-.056-.212s-.174-.041-.249-.024c-.106.024-1.793 1.14-5.061 3.345-.48.33-.913.49-1.302.48-.428-.008-1.252-.241-1.865-.44-.752-.245-1.349-.374-1.297-.789.027-.216.325-.437.893-.663 3.498-1.524 5.83-2.529 6.998-3.014 3.332-1.386 4.025-1.627 4.476-1.635z"/></svg></span><span class="pd-share-name">Telegram</span></a><a href="#" class="pd-share-option" data-share="email"><span class="pd-share-icon pd-share-icon-email"><svg viewBox="0 0 24 24">
2458<path fill="currentColor" d="M20 4H4c-1.1 0-1.99.9-1.99 2L2 18c0 1.1.9 2 2 2h16c1.1 0 2-.9 2-2V6c0-1.1-.9-2-2-2zm0 4l-8 5-8-5V6l8 5 8-5v2z"/></svg></span><span class="pd-share-name">Email</span></a><button type="button" class="pd-share-option" data-share="copy"><span class="pd-share-icon pd-share-icon-copy"><svg viewBox="0 0 24 24"><path fill="currentColor" d="M16 1H4c-1.1 0-2 .9-2 2v14h2V3h12V1zm3 4H8c-1.1 0-2 .9-2 2v14c0 1.1.9 2 2 2h11c1.1 0 2-.9 2-2V7c0-1.1-.9-2-2-2zm0 16H8V7h11v14z"/></svg></span><span class="pd-share-name">Salin Link</span></button><button type="button" class="pd-share-option" data-share="pdf"><span class="pd-share-icon pd-share-icon-pdf"><svg viewBox="0 0 24 24"><path fill="currentColor" d="M14 2H6c-1.1 0-2 .9-2 2v16c0 1.1.9 2 2 2h12c1.1 0 2-.9 2-2V8l-6-6zm4 18H6V4h7v5h5v11zM8 15.5h1.5c.83 0 1.5-.67 1.5-1.5v-1c0-.83-.67-1.5-1.5-1.5H8v4zm6 0h1c1.1 0 2-.9 2-2v-2c0-1.1-.9-2-2-2h-1v6zm-4.5-1.5H8v-1h1.5v1zM14 13h1v1h-1v-1z"/></svg></span><span class="pd-share-name">Export PDF</span></button></div><div class="pd-share-copy-section"><div class="pd-share-copy-input-wrap"><input type="text" class="pd-share-copy-input" id="pd-share-url-input" value="https://slotvipbogor.link/" readonly><button type="button" class="pd-share-copy-btn" id="pd-share-copy-url-btn"><svg viewBox="0 0 24 24" width="16" height="16"><path fill="currentColor" d="M16 1H4c-1.1 0-2 .9-2 2v14h2V3h12V1zm3 4H8c-1.1 0-2 .9-2 2v14c0 1.1.9 2 2 2h11c1.1 0 2-.9 2-2V7c0-1.1-.9-2-2-2zm0 16H8V7h11v14z"/></svg><span class="pd-share-copy-text">Salin</span></button></div></div></div></div></div> 2459 2460 <style>.toast-root{position:fixed;left:50%;bottom:18px;transform:translateX(-50%);display:flex;flex-direction:column;gap:10px;z-index:99999;pointer-events:none;max-width:min(92vw,540px)}.toast{display:grid;grid-template-columns:28px 1fr auto;gap:12px;background:#0b1220;color:#eef3ff;border:1px solid rgba(255,255,255,.08);padding:12px 14px;border-radius:12px;box-shadow:0 10px 30px rgba(10,10,20,.35);pointer-events:auto;overflow:hidden}.toast .ico{align-self:start;margin-top:2px}.toast .ttl{font-weight:700;line-height:1.25;font-size:14px;margin-bottom:4px}.toast .msg{opacity:.95;line-height:1.45;font-size:13px}.toast .actions{display:flex;gap:8px;align-self:center}.toast .btn{background:#e90e0e;color:#fff;border:0;border-radius:999px;padding:8px 12px;font-size:12px;font-weight:700;cursor:pointer}.toast .btn.alt{background:transparent;color:#8fb5ff;border:1px solid rgba(143,181,255,.35)}.toast .close{background:transparent;border:0;color:#98a2b3;cursor:pointer;padding:4px;margin-left:6px}.toast.success{border-left:4px solid #c52222}.toast.info{border-left:4px solid #e90e0e}.toast.warn{border-left:4px solid #f59e0b}.toast .progress{position:absolute;left:0;bottom:0;height:3px;background:linear-gradient(90deg,#60a5fa,#c52222);width:100%;transform-origin:left;animation:toastBar linear forwards}@keyframes toastBar{from{transform:scaleX(1)}to{transform:scaleX(0)}}@media(max-width:640px){.toast{grid-template-columns:24px 1fr auto;padding:12px}.toast .btn{padding:7px 10px}}</style> 2461 <style> 2462 .toast .msg { word-break: break-word; overflow-wrap: anywhere; } 2463 2464 .toast-root { bottom: max(12px, env(safe-area-inset-bottom, 12px)); } 2465 2466 @media (max-width: 540px) { 2467 .toast-root { 2468 left: 0; right: 0; transform: none; 2469 padding: 0 12px; 2470 bottom: calc(max(12px, env(safe-area-inset-bottom, 12px)) + var(--fab-offset, 72px)); 2471 max-width: none; 2472 } 2473 .toast { 2474 grid-template-columns: 1fr; /* 1 kolom */ 2475 position: relative; 2476 padding: 14px 14px 12px 14px; 2477 border-radius: 16px; 2478 } 2479 .toast .ico { 2480 position: absolute; left: 14px; top: 14px; 2481 margin: 0; transform: translateY(1px); 2482 } 2483 .toast .cnt { padding-left: 34px; } 2484 .toast .ttl { font-size: 15px; margin-bottom: 6px; } 2485 .toast .msg { font-size: 13px; opacity: .96; } 2486 .toast .actions { 2487 margin-top: 12px; gap: 10px; width: 100%; 2488 display: grid; grid-template-columns: 1fr 1fr; 2489 } 2490 .toast .btn { width: 100%; min-width: 0; padding: 10px 0; } 2491 .toast .close { position: absolute; right: 6px; top: 6px; } 2492 } 2493 </style> 2494 2495
2495<script nonce="se3iyzEHMc9FQEB4wSyd0w=="> 2496 (function adjustToastFabOffset(){ 2497 const root = document.getElementById('toastRoot'); 2498 if (!root) return; 2499 2500 function isVisible(el){ 2501 if (!el) return false; 2502 const cs = getComputedStyle(el); 2503 if (cs.display === 'none' || cs.visibility === 'hidden' || cs.opacity === '0') return false; 2504 const r = el.getBoundingClientRect(); 2505 return r.width > 0 && r.height > 0; 2506 } 2507 2508 function update(){ 2509 const fab = document.getElementById('pd-mobile-fab'); 2510 let extra = 16; 2511 if (isVisible(fab)) { 2512 const h = Math.round(fab.getBoundingClientRect().height) || 56; 2513 extra = h + 16; // FAB height + margin 2514 } 2515 root.style.setProperty('--fab-offset', extra + 'px'); 2516 } 2517 2518 window.addEventListener('resize', update, { passive: true }); 2519 const fab = document.getElementById('pd-mobile-fab'); 2520 if (window.ResizeObserver && fab) { 2521 const ro = new ResizeObserver(update); 2522 ro.observe(fab); 2523 } 2524 2525 update(); 2526 })(); 2527 </script>
2527 2528 <div class="toast-root" id="toastRoot" aria-live="polite" aria-atomic="true"></div> 2529 2530
2530<script nonce="se3iyzEHMc9FQEB4wSyd0w==">(function(){const root=document.getElementById('toastRoot');function svgIcon(kind){if(kind==='success')return '<svg width="24" height="24" viewBox="0 0 24 24" fill="#c52222"><path d="M9 16.2l-3.5-3.5 1.4-1.4L9 13.4l7.7-7.7 1.4 1.4z"/></svg>';if(kind==='warn')return '<svg width="24" height="24" viewBox="0 0 24 24" fill="#f59e0b"><path d="M1 21h22L12 2 1 21zm12-3h-2v-2h2v2zm0-4h-2v-4h2v4z"/></svg>';return '<svg width="24" height="24" viewBox="0 0 24 24" fill="#e90e0e"><path d="M11 7h2v2h-2zm0 4h2v6h-2z"/><path d="M12 2C6.5 2 2 6.5 2 12s4.5 10 10 10 10-4.5 10-10S17.5 2 12 2z" fill="none" stroke="#e90e0e"/></svg>'} 2531 window.showToast=function(opts){const o=Object.assign({title:'',message:'',type:'info',duration:4000,actions:[]},opts||{});const el=document.createElement('div');el.className='toast '+(o.type||'info');el.setAttribute('role','status');el.style.position='relative';const acts=(o.actions||[]).map(a=>{const lab=a.label||'OK';const cls='btn'+(a.variant==='alt'?' alt':'');return `<button type="button" class="${cls}" data-act="${lab}">${lab}</button>`}).join('');el.innerHTML=`<div class="ico" aria-hidden="true">${svgIcon(o.type)}</div><div class="cnt">${o.title?`<div class="ttl">${o.title}</div>`:''}${o.message?`<div class="msg">${o.message}</div>`:''}</div><div class="actions">${acts}</div><button type="button" class="close" aria-label="Tutup" title="Tutup"><svg width="18" height="18" viewBox="0 0 24 24"><path fill="currentColor" d="M18.3 5.71L12 12.01l-6.3-6.3-1.4 1.41 6.3 6.3-6.3 6.3 1.4 1.41 6.3-6.3 6.3 6.3 1.41-1.41-6.3-6.3 6.3-6.3z"/></svg></button><div class="progress" style="animation-duration:${Math.max(1500,o.duration)}ms"></div>`; 2532 2533 const close = ()=> { 2534 if (!el.parentNode) return; 2535 el.style.transition = 'transform .2s ease, opacity .2s ease'; 2536 el.style.opacity = '0'; el.style.transform = 'translateY(10px)'; 2537 setTimeout(()=>{ if (el.parentNode) el.parentNode.removeChild(el); }, 220); 2538 }; 2539 2540 el.querySelector('.close').addEventListener('click', close); 2541 el.querySelectorAll('.actions .btn').forEach(btn=>{ 2542 btn.addEventListener('click', ()=>{ 2543 const lab = btn.getAttribute('data-act'); 2544 try { 2545 (o.actions||[]).forEach(a=>{ if (a.label===lab && typeof a.onClick==='function') a.onClick(); }); 2546 } catch(_){} 2547 close(); 2548 }); 2549 }); 2550 2551 root.appendChild(el); 2552 setTimeout(close, o.duration); 2553 return el; 2554 }; 2555 })(); 2556 2557 const _0x1a2b=[{"url":"https://slotvipbogor.link/images/apk-slotvip.webp","alt":"Lenovo Legion Go 8ASP2 - 83N0000RID /AMD Ryzen Z2 Extreme/32GB/1TB SSD/AMD Radeon Graphics/8.8\" WUXGA OLED Touch/Win 11 Home/Eclipse Black/3Y","slug":""},{"url":"https://slotvipbogor.link/images/apk-slotvip.webp","alt":"Lenovo Lenovo Legion Go 8ASP2 - 83N0000RID /AMD Ryzen Z2 Extreme/32GB/1TB SSD/AMD Radeon Graphics/8.8\" WUXGA OLED Touch/Wi...","slug":"https://slotvipbogor.link/images/apk-slotvip.webp"},{"url":"https://slotvipbogor.link/images/apk-slotvip.webp","alt":"Lenovo Lenovo Legion Go 8ASP2 - 83N0000RID /AMD Ryzen Z2 Extreme/32GB/1TB SSD/AMD Radeon Graphics/8.8\" WUXGA OLED Touch/Wi...","slug":"lenovo-legion-go-8asp2-83n0000rid-ryzen-z2-extreme-amd-radeon-graphics-eclipse-b-1761796941-223.webp"},{"url":"https://slotvipbogor.link/images/apk-slotvip.webp","alt":"Lenovo Lenovo Legion Go 8ASP2 - 83N0000RID /AMD Ryzen Z2 Extreme/32GB/1TB SSD/AMD Radeon Graphics/8.8\" WUXGA OLED Touch/Wi...","slug":"lenovo-legion-go-8asp2-83n0000rid-ryzen-z2-extreme-amd-radeon-graphics-eclipse-b-1761796941-776.webp"},{"url":"https://slotvipbogor.link/images/apk-slotvip.webp","alt":"Lenovo Lenovo Legion Go 8ASP2 - 83N0000RID /AMD Ryzen Z2 Extreme/32GB/1TB SSD/AMD Radeon Graphics/8.8\" WUXGA OLED Touch/Wi...","slug":"lenovo-legion-go-8asp2-83n0000rid-ryzen-z2-extreme-amd-radeon-graphics-eclipse-b-1761796941-634.webp"},{"url":"https://slotvipbogor.link/images/apk-slotvip.webp","alt":"Lenovo Lenovo Legion Go 8ASP2 - 83N0000RID /AMD Ryzen Z2 Extreme/32GB/1TB SSD/AMD Radeon Graphics/8.8\" WUXGA OLED Touch/Wi...","slug":"lenovo-legion-go-8as
2557p2-83n0000rid-ryzen-z2-extreme-amd-radeon-graphics-eclipse-b-1761796941-892.webp"}],_0x3c4d="Lenovo Legion Go 8ASP2 - 83N0000RID /AMD Ryzen Z2 Extreme/32GB/1TB SSD/AMD Radeon Graphics/8.8\" WUXGA OLED Touch/Win 11 Home/Eclipse Black/3Y",_0x5e6f="1S83N0880RID";function getVariantSummaryText(){const a=document.getElementById('pd-variant-summary');if(!a)return '';const b=Array.from(a.querySelectorAll('.vs-item strong')).map(c=>c.textContent.trim()).filter(Boolean);return b.length?b.join(' / '):''} 2558 function encodeVariantHash(id){if(!id||id<=0)return '';const xor=id^0x4A5D;return xor.toString(36)} 2559 function decodeVariantHash(hash){if(!hash)return 0;const xor=parseInt(hash,36);return isNaN(xor)?0:xor^0x4A5D} 2560 2561 function showSuccessToast(productId,qty,variantId){const variantText=getVariantSummaryText();const skuText=(function(){const el=document.getElementById('pd-sku');return el?el.textContent.trim():PD_SKU})();showToast({type:'warn',title:'Fitur Segera Hadir',message:`<strong>${escapeHtml(PD_NAME)}</strong>${variantText?` · <em>${escapeHtml(variantText)}</em>`:''}<br>SKU: ${escapeHtml(skuText)} · Qty: ${qty}`,duration:5000,actions:[{label:'Lihat Keranjang',onClick:()=>{}},{label:'Lanjut Belanja',variant:'alt',onClick:()=>{}}]});try{if(window.ga4Ecomm){const qtySend=qty||1;window.ga4Ecomm.addToCart({currency:'IDR',price:20789000,quantity:qtySend,item_id:"1S83N0880RID",item_name:"Lenovo Legion Go 8ASP2 - 83N0000RID /AMD Ryzen Z2 Extreme/32GB/1TB SSD/AMD Radeon Graphics/8.8\" WUXGA OLED Touch/Win 11 Home/Eclipse Black/3Y",item_brand:"Lenovo ",item_category:(["Komputer & Laptop","Laptop","Gaming"]||[]).join(' / ')})}}catch(_){}return false}function showErrorToast(){showToast({type:'error',title:'Gagal Menambah ke Keranjang',message:'Terjadi kesalahan saat memproses permintaan. Silakan coba lagi.',duration:5000})} 2562 2563 function executeBuyNowLegacy(id,variantId){const a=getVariantSummaryText(),b=(function(){const c=document.getElementById('pd-sku');return c?c.textContent.trim():_0x5e6f})(); 2564 2565 let willRedirect = false; 2566 try { 2567 if (window.addToCart) { 2568 window.addToCart(id, 1, variantId); 2569 willRedirect = false; 2570 } 2571 } catch(_){} 2572 2573 if (willRedirect) { 2574 showToast({ 2575 type: 'info', 2576 title: 'Menuju Keranjang', 2577 message: `<strong>${escapeHtml(PD_NAME)}</strong>${variantText?` · <em>${escapeHtml(variantText)}</em>`:''}<br>SKU: ${escapeHtml(skuText)} · Qty: 1`, 2578 duration: 1800 2579 }); 2580 setTimeout(()=>{ window.location.href='/keranjang'; }, 1200); 2581 } else { 2582 showToast({ 2583 type: 'warn', 2584 title: 'Fitur Beli Langsung Segera Hadir', 2585 message: `Sementara ini Anda bisa menambahkan produk ke keranjang terlebih dahulu.<br><strong>${escapeHtml(PD_NAME)}</strong>${variantText?` · <em>${escapeHtml(variantText)}</em>`:''}`, 2586 duration: 6000, 2587 actions: [ 2588 { label: '+ Keranjang', onClick: ()=> { try{ if (window.addToCart) window.addToCart(id,1,variantId); }catch(_){} } }, 2589 { label: 'Hubungi CS', variant: 'alt', onClick: ()=> { window.open('https://wa.me/6281380009898','_blank'); } } 2590 ] 2591 }); 2592 } 2593 } 2594 2595 document.addEventListener('DOMContentLoaded',function(){var a=document.getElementById('pd-buy-form');if(a){a.addEventListener('submit',function(e){var b=parseInt(a.getAttribute('data-pid'),10)||0;if(window.addToCartSubmit){return window.addToCartSubmit(e,b)}})}});document.addEventListener('DOMContentLoaded',function(){var a=document.getElementById('btn-buy');if(a){a.addEventListener('click',function(){var b=a.getAttribute('data-id');buyNow(b)})}}); 2596 2597 function _0x2m3n(s){return String(s||'').replace(/[&<>"']/g,m=>({'&':'&','<':'<','>':'>','"':'"',"'":'''}[m]))} 2598 2599 (function initGallery(){const mainImg=document.getElementById('pd-main-img');const gallery=document.getElementById('pd-thumb-gallery');if(!mainImg||!gallery)return;gallery.addEventListener('click',function(ev){const btn=ev.target.closest('.pd-thumb-btn');if(!btn)return;const full=btn.getAttribute('data-full');if(full){mainImg.src=full;const alt=btn.getAttribute('data-alt')||'';if(alt)mainImg.alt=alt;const slug=btn.getAttribute('data-slug')||'';if(slug)mainImg.dataset.slug=slug;gallery.querySelectorAll('.pd-thumb-btn').forEach(b=>b.classList.remove('active'));btn.classList.add('active')}})})(); 2600 2601 (function initMobileSliderCounter(){const slider=document.getElementById('pd-mobile-slider');const counter=document.getElementById('pd-gallery-counter');if(!slider||!counter)return;let ticking=false;slider.addEventListener('scroll',function(){if(!ticking){window.requestAnimationFrame(function(){const slides=slider.querySelectorAll('.pd-mslide');if(!slides.length)return;const containerRect=slider.getBoundingClientRect();const containerCenter=containerRect.left+containerRect.width/2;let currentIdx=0;let minDist=Infinity;
2601slides.forEach((slide,idx)=>{const slideRect=slide.getBoundingClientRect();const slideCenter=slideRect.left+slideRect.width/2;const dist=Math.abs(slideCenter-containerCenter);if(dist<minDist){minDist=dist;currentIdx=idx}});counter.textContent=(currentIdx+1)+'/'+slides.length;ticking=false});ticking=true}},{passive:true})})(); 2602 2603 /* ================= Simulasi Cicilan ================= */ 2604 (function initInstallmentList(){const card=document.getElementById('inst-card');if(!card)return;function getBasePrice(){return parseInt(card.getAttribute('data-base-price')||'0',10)||0}function setBasePrice(v){card.setAttribute('data-base-price',String(parseInt(v||'0',10)||0))}const zeroEligible=card.getAttribute('data-zero-smart')==='1';window.initMobile=zeroEligible;const listEl=document.getElementById('inst-month-list');const zeroNote=document.getElementById('inst-zero-note');const tenors=[3,6,12];const rates={BRI:{3:0.975,6:0.975,12:0.975},Mandiri:{3:0.984,6:0.9725,12:0.96},BCA:{3:0.97,6:0.94,12:0.91}};function formatRupiah(num){return 'Rp '+(Math.round(num)).toString().replace(/\B(?=(\d{3})+(?!\d))/g,'.')}function activeBank(){const tab=card.querySelector('.bank-tab.active');return tab?tab.dataset.bank:'BRI'} 2605 2606 function _0x4o5p(bank){const a=getBasePrice();listEl.innerHTML='';const b=rates[bank]||{};let c=false;tenors.forEach(m=>{let d=b[m]??1;if(zeroEligible&&(bank==='BRI'||bank==='Mandiri')){d=1;c=true}const e=a/d;const f=m>0?Math.ceil((e/m)/100)*100:0;const g=document.createElement('li');g.className='inst-month-item';g.innerHTML=`<span class="tenor-badge">${m}x</span><span class="amount">${formatRupiah(f)} / bln</span>${zeroEligible&&(bank==='BRI'||bank==='Mandiri')?'<span class="tag tag-zero">0%</span>':''}`;listEl.appendChild(g)});zeroNote.style.display=c?'block':'none'} 2607 2608 card.addEventListener('click',function(ev){const a=ev.target.closest('.bank-tab');if(!a)return;card.querySelectorAll('.bank-tab').forEach(b=>{b.classList.remove('active');b.setAttribute('aria-selected','false')});a.classList.add('active');a.setAttribute('aria-selected','true');_0x4o5p(a.dataset.bank)}); 2609 2610 window.instSetBasePrice=function(newPrice){setBasePrice(newPrice);_0x4o5p(activeBank())};_0x4o5p(activeBank()); 2611 })(); 2612 2613 /* ====== Fokus gambar varian ====== */ 2614 function _0x6q7r(s){return String(s||'').toLowerCase().replace(/[^a-z0-9]+/g,'')}function _0x8s9t(u){try{return new URL(u,window.location.origin).pathname.split('/').pop().toLowerCase()}catch(e){try{return(u||'').split('/').pop().toLowerCase()}catch(_){return ''}}} 2615 function _0xau1v(url,altOpt){const a=document.getElementById('pd-main-img'),b=document.getElementById('pd-thumb-gallery'),c=document.getElementById('pd-mobile-slider');if(a&&url){a.src=url;if(altOpt)a.alt=altOpt}if(b){const d=_0x8s9t(url);let e=null;b.querySelectorAll('.pd-thumb-btn').forEach(btn=>{const f=btn.getAttribute('data-full')||'',g=_0x8s9t(f)===d;if(g)e=btn;btn.classList.toggle('active',g)});if(e){const h=e.getAttribute('data-alt')||'',i=e.getAttribute('data-slug')||'';if(h&&a)a.alt=h;if(i&&a)a.dataset.slug=i}} 2616 if (c){ 2617 const targetName = _0x8s9t(url); 2618 const slideImg = Array.from(c.querySelectorAll('img')).find(im => _0x8s9t(im.src) === targetName); 2619 if (slideImg){ 2620 2621 try { 2622 const container = c; 2623 const imgRect = slideImg.getBoundingClientRect(); 2624 const contRect = container.getBoundingClientRect(); 2625 const offsetLeft = slideImg.offsetLeft - container.offsetLeft; 2626 const center = offsetLeft - (container.clientWidth - slideImg.clientWidth) / 2; 2627 container.scrollTo({ left: Math.max(0, center), behavior: 'smooth' }); 2628 } catch(_){ 2629 2630 slideImg.scrollIntoView({ behavior:'smooth', inline:'center', block:'nearest' }); 2631 } 2632 } 2633 } 2634 } 2635 function findImageForVariant(variant){ 2636 if (!variant || !variant.attrs) return null; 2637 const tokens = []; 2638 try{ 2639 Object.values(variant.attrs).forEach(v=>{ 2640 if (!v) return; 2641 const raw = String(v); 2642 tokens.push(raw); 2643 tokens.push(normalize(raw)); 2644 }); 2645 }catch(_){} 2646 if (variant.sku){ 2647 tokens.push(String(variant.sku)); 2648 tokens.push(normalize(String(variant.sku))); 2649 } 2650 if (variant.image_url) { 2651 tokens.push(String(variant.image_url)); 2652 } 2653 let best = null; 2654 let bestScore = -1; 2655 2656 for (const g of (galleryData||[])){ 2657 const slugN = normalize(g.slug||''); 2658 const altN = normalize(g.alt||''); 2659 const file = _0x8s9t(g.url||''); 2660 const fileN = normalize(file); 2661 const imgU = g.url; 2662 2663 for (const t of tokens){ 2664 const tN = normalize(t); 2665 if (!tN) continue; 2666 2667 let score = -1; 2668 if (imgU === tN) score = 300; 2669 if (slugN && slugN === tN) score = 300; 2670 else if (fileN && fileN.includes(tN)) score = 200; 2671 else if (altN && altN.includes(tN)) score = 120; 2672 2673 if (score > bestScore){ 2674 bestScore = score; 2675 best = g; 2676 } 2677 if (bestScore >= 300) break; 2678 } 2679 if (bestScore >= 300) break; 2680 } 2681 return bestScore >= 120 ? best : null; 2682 } 2683 function _0xey3z(variant){const a=_0xcw2x(variant);if(a&&a.url){_0xau1v(a.url,a.alt||'')}} 2684 2685 /* ====== Layout mobile ====== */ 2686 (function _0xg04h(){const a=document.querySelector('.pd-media-card'),b=document.getElementById('pd-price-block'),c=document.getElementById('pd-price-anchor'),d=document.querySelector('.pd-info-card'),e=document.getElementById('pd-title'),f=document.getElementById('pd-variant-combined'),g=document.getElementById('pd-variants'),h=document.getElementById('pd-variants-anchor'),i=document.getElementById('pd-variant-summary'),j=document.getElementById('pd-summary-anchor'),titleRow=document.querySelector('.pd-title-row'),promoBanner=document.querySelector('.promo-endyear-mini-banner'),compareSection=document.querySelector('.pd-compare-section');if(!a||!b||!c||!d||!e)return; 2687 2688 let pricePlaced = false;
2689 let varPlaced = false; 2690 let titlePlaced = false; 2691 let promoPlaced = false; 2692 const mq = window.matchMedia('(max-width: 640px)'); 2693 2694 function apply(){ 2695 if (mq.matches) { 2696 if (!titlePlaced && a && titleRow && d.contains(titleRow)) { try{a.appendChild(titleRow);titlePlaced=true;}catch(_){} } 2697 if (!pricePlaced && a && b) { try{a.appendChild(b);pricePlaced=true;}catch(_){} } 2698 if (!varPlaced && f && d && e) { 2699 try{ 2700 f.hidden = false; 2701 if (i && !f.contains(i)) f.appendChild(i); 2702 if (g && !f.contains(g)) f.appendChild(g); 2703 if(d.contains(e))d.insertBefore(f, e); 2704 varPlaced = true; 2705 }catch(_){} 2706 } 2707 if (!promoPlaced && promoBanner && compareSection && compareSection.parentNode) { 2708 try{ 2709 compareSection.parentNode.insertBefore(promoBanner, compareSection); 2710 promoPlaced = true; 2711 }catch(_){} 2712 } 2713 } else { 2714 if (titlePlaced && titleRow && d) { 2715 try{ 2716 const vcombined = document.getElementById('pd-variant-combined'); 2717 if (vcombined && d.contains(vcombined)) { 2718 d.insertBefore(titleRow, vcombined); 2719 } else { 2720 d.insertBefore(titleRow, d.firstChild); 2721 } 2722 titlePlaced=false; 2723 }catch(_){} 2724 } 2725 if (pricePlaced && b && c && c.parentNode) { 2726 try{c.parentNode.insertBefore(b, c.nextSibling);pricePlaced=false;}catch(_){} 2727 } 2728 if (varPlaced) { 2729 try{ 2730 if (i && j && j.parentNode && !j.parentNode.contains(i)) j.parentNode.insertBefore(i, j.nextSibling); 2731 if (g && h && h.parentNode && !h.parentNode.contains(g)) h.parentNode.insertBefore(g, h.nextSibling); 2732 if (f) { f.hidden = true; f.innerHTML = ''; } 2733 varPlaced = false; 2734 }catch(_){} 2735 } 2736 if (promoPlaced && promoBanner && b) { 2737 try{ 2738 b.appendChild(promoBanner); 2739 promoPlaced = false; 2740 }catch(_){} 2741 } 2742 } 2743 } 2744 2745 mq.addEventListener ? mq.addEventListener('change', apply) : mq.addListener(apply); 2746 apply(); 2747 2748 const fab = document.getElementById('pd-mobile-fab'); 2749 if (fab) { 2750 const pid = parseInt(fab.getAttribute('data-pid')||'0',10) || 325; 2751 const btnCart = document.getElementById('mf-cart'); 2752 2753 if (btnCart) btnCart.addEventListener('click', function(){ 2754 const varInput = document.getElementById('pd-variant-id'); 2755 const variantId = varInput ? parseInt(varInput.value||'0',10) : 0; 2756 try { if (window.addToCart) addToCart(pid, 1, variantId); } catch(_){} 2757 const variantText = getVariantSummaryText(); 2758 const skuText = (function(){ const el=document.getElementById('pd-sku'); return el?el.textContent.trim():PD_SKU; })(); 2759 showToast({ 2760 type: 'success', 2761 title: 'Berhasil ditambahkan ke Keranjang', 2762 message: `<strong>${escapeHtml(PD_NAME)}</strong>${variantText?` · <em>${escapeHtml(variantText)}</em>`:''}<br>SKU: ${escapeHtml(skuText)} · Qty: 1`, 2763 duration: 5000, 2764 actions: [ 2765 { label: 'Lihat Keranjang', onClick: ()=> { window.location.href = '/keranjang'; } }, 2766 { label: 'Lanjut Belanja', variant: 'alt', onClick: ()=>{} } 2767 ] 2768 }); 2769 }); 2770 } 2771 })(); 2772 2773 /* ====== Auto-hide installment banner if sidebar too tall (Desktop only) ====== */ 2774 (function(){ 2775 function adjustSidebarBanner() { 2776 if (window.innerWidth <= 768) return; 2777 const sidebar = document.querySelector('.pd-sidebar'); 2778 const infoCard = document.querySelector('.pd-info-card'); 2779 const banner = document.querySelector('.pd-side-card.inst-alt-banner.inst-alt-banner--compact'); 2780 if (!sidebar || !infoCard || !banner) return; 2781 const sidebarHeight = sidebar.offsetHeight; 2782 const infoCardHeight = infoCard.offsetHeight; 2783 if (sidebarHeight > infoCardHeight) { 2784 banner.style.display = 'none'; 2785 } else { 2786 banner.style.display = ''; 2787 } 2788 } 2789 if (document.readyState === 'loading') { 2790 document.addEventListener('DOMContentLoaded', adjustSidebarBanner); 2791 } else { 2792 adjustSidebarBanner(); 2793 } 2794 let resizeTimer; 2795 window.addEventListener('resize', function() { 2796 clearTimeout(resizeTimer); 2797 resizeTimer = setTimeout(adjustSidebarBanner, 250); 2798 }); 2799 const pwpSection = document.getElementById('pwp-deals-section'); 2800 if (pwpSection) { 2801 const observer = new MutationObserver(function(mutations) {
2802 let shouldRecheck = false; 2803 mutations.forEach(function(mutation) { 2804 if (mutation.type === 'attributes' && mutation.attributeName === 'hidden') { 2805 shouldRecheck = true; 2806 } else if (mutation.type === 'childList' && mutation.addedNodes.length > 0) { 2807 shouldRecheck = true; 2808 } 2809 }); 2810 if (shouldRecheck) { 2811 setTimeout(adjustSidebarBanner, 100); 2812 } 2813 }); 2814 observer.observe(pwpSection, { 2815 attributes: true, 2816 childList: true, 2817 subtree: true 2818 }); 2819 } 2820 window.adjustSidebarBanner = adjustSidebarBanner; 2821 })(); 2822 2823 /* ====== Global constants ====== */ 2824 const IS_DIGITAL=false; 2825 const IS_PREORDER=false; 2826 2827 /* ====== Variants state (REVISED) ====== */ 2828 (function initVariants(){ 2829 const _0x7g8h=[];window.variants=_0x7g8h; 2830 window.isPreorderProduct=false; 2831 const attrOrder = []; 2832 2833 if (!variants.length || !attrOrder.length) return; 2834 2835 function comboKey(sel){ 2836 return attrOrder.map(a => a + '=' + (sel[a] ?? '')).join('|'); 2837 } 2838 2839 const variantMap = {};
2840 variants.forEach(v=>{ 2841 const key = comboKey(v.attrs); 2842 variantMap[key] = v; 2843 }); 2844 2845 function readSelection(){ 2846 const sel = {}; 2847 attrOrder.forEach(a=>{ 2848 const r = document.querySelector(`.v-group[data-attr="${CSS.escape(a)}"] input[type=radio]:checked`); 2849 sel[a] = r ? r.value : ''; 2850 }); 2851 return sel; 2852 } 2853 2854 function findVariant(sel){ 2855 return variantMap[comboKey(sel)] || null; 2856 } 2857 2858 function autoFillMissing(sel){ 2859 let changed = false; 2860 for (const a of attrOrder) { 2861 if (sel[a]) continue; 2862 const possible = []; 2863 const seen = new Set(); 2864 variants.forEach(v=>{ 2865 let ok = true; 2866 for (const a2 of attrOrder) { 2867 if (a2 === a) continue; 2868 if (sel[a2] && v.attrs[a2] !== sel[a2]) { ok = false; break; } 2869 } 2870 if (ok) { 2871 const val = v.attrs[a]; 2872 if (!seen.has(val)) { seen.add(val); possible.push(val); } 2873 } 2874 }); 2875 if (possible.length === 1) { 2876 const val = possible[0]; 2877 const input = document.querySelector(`.v-group[data-attr="${CSS.escape(a)}"] input[type=radio][value="${CSS.escape(val)}"]`); 2878 if (input && !input.checked) { input.checked = true; sel[a] = val; changed = true; } 2879 } 2880 } 2881 return changed; 2882 } 2883 2884 function rupiah(n){ 2885 n = parseInt(n||0,10)||0; 2886 return 'Rp ' + n.toString().replace(/\B(?=(\d{3})+(?!\d))/g,'.'); 2887 } 2888 2889 function focusGalleryByUrl(imageUrl) { 2890 const isMobile = window.matchMedia && window.matchMedia('(max-width: 640px)').matches; 2891 if (isMobile) { 2892 _0xau1v(imageUrl); 2893 return; 2894 } 2895 2896 const gallery = document.getElementById('pd-thumb-gallery'); 2897 const targetName = _0x8s9t(imageUrl); 2898 2899 if (gallery) { 2900 const btns = Array.from(gallery.querySelectorAll('.pd-thumb-btn')); 2901 const btn = btns.find(b => _0x8s9t(b.getAttribute('data-full') || '') === targetName); 2902 if (btn) { btn.click(); return; } 2903 } 2904 2905 _0xau1v(imageUrl); 2906 } 2907 2908 2909 function formatStockLabel(n){n=parseInt(n||0,10)||0;return(n>10)?'10+':String(n)} 2910 function updateBranchPopover(v){try{if(!v)return;const a=document.getElementById('sp-qty-meg'),b=document.getElementById('sp-qty-mdf'),c=document.getElementById('sp-qty-bda');if(a)a.textContent=formatStockLabel(Math.max(0,v.smm|0));if(b)b.textContent=formatStockLabel(Math.max(0,v.smf|0));if(c)c.textContent=formatStockLabel(Math.max(0,v.sba|0))}catch(_){}} 2911 2912 function calcVoucherDisc(type,value,price,maxDisc){if(type==='PERCENTAGE'){let d=(price*value)/100;if(maxDisc>0&&d>maxDisc)d=maxDisc;return Math.round(d)}return Math.round(value)} 2913 2914 function applyVariant(v, focusImage = true){ 2915 const elCur = document.getElementById('pd-price-current'); 2916 const elOri = document.getElementById('pd-price-original'); 2917 const elDisc = document.getElementById('pd-discount-badge'); 2918 const elSku = document.getElementById('pd-sku'); 2919 const elStock= document.getElementById('pd-stock-badge'); 2920 const elQty = document.getElementById('qty'); 2921 const btnAdd = document.getElementById('btn-add-cart'); 2922 const btnBuy = document.getElementById('btn-buy'); 2923 const hidVar = document.getElementById('pd-variant-id'); 2924 2925 const mfCart= document.getElementById('mf-cart'); 2926 const mfBuy = document.getElementById('mf-buy'); 2927 const fab = document.getElementById('pd-mobile-fab'); 2928 2929 if (hidVar) hidVar.value = v ? v.id : 0; 2930 if (elCur) elCur.textContent = rupiah(v ? v.final : 0); 2931 if (elSku && v && v.sku) elSku.textContent = v.sku; 2932 2933 if (v && v.ori > v.final) { 2934 if (elOri) { elOri.style.display='inline'; elOri.textContent = rupiah(v.ori); } 2935 if (elDisc) { elDisc.style.display='inline'; elDisc.textContent = '-' + (v.disc||0) + '%'; } 2936 } else { 2937 if (elOri) elOri.style.display='none'; 2938 if (elDisc) elDisc.style.display='none'; 2939 } 2940 2941 const stock = v ? (parseInt(v.stock||0,10)||0) : 0; 2942 let effectiveStock = stock; 2943 let isActivePreorder = false; 2944 if (window.isPreorderProduct && v && 'preorder_remaining' in v && v.preorder_remaining !== null) { 2945 effectiveStock = parseInt(v.preorder_remaining, 10); 2946 if (isNaN(effectiveStock)) effectiveStock = 0; 2947 isActivePreorder = true; 2948 } 2949 if (elStock){ 2950 elStock.classList.remove('in','out'); 2951 if (effectiveStock>0){ 2952 elStock.classList.add('in'); 2953 elStock.textContent = IS_DIGITAL ? 'Tersedia' : (isActivePreorder ? 'Sisa Slot: ' + effectiveStock : 'Stok: ' + formatStockLabel(effectiveStock)); 2954 } else { 2955 elStock.classList.add('out'); 2956 elStock.textContent = 'Habis'; 2957 } 2958 } 2959 if (elQty){ 2960 elQty.max = String(effectiveStock>0?effectiveStock:0); 2961 if (effectiveStock<=0) { elQty.value = '0'; elQty.disabled = true; } 2962 else { if (parseInt(elQty.value||'1',10) < 1) elQty.value='1'; elQty.disabled=false; } 2963 } 2964 2965 const shouldDisable = !(v && effectiveStock>0); 2966 const updateButtons = () => { 2967 const btnAddCart = document.getElementById('btn-add-cart'); 2968 const btnBuyNow = document.getElementById('btn-buy'); 2969 const mobileCart = document.getElementById('mf-cart'); 2970 const mobileBuy = document.getElementById('mf-buy'); 2971 [btnAddCart, btnBuyNow, mobileCart, mobileBuy].forEac
2971h(btn => { 2972 if (!btn) return; 2973 if (shouldDisable) { 2974 btn.disabled = true; 2975 btn.setAttribute('disabled', 'disabled'); 2976 btn.classList.add('stock-disabled'); 2977 btn.setAttribute('data-stock-blocked', 'true'); 2978 btn.setAttribute('data-stock-reason', window.isPreorderProduct ? 'Pre-order habis' : 'Stok habis'); 2979 } else { 2980 btn.disabled = false; 2981 btn.removeAttribute('disabled'); 2982 btn.classList.remove('stock-disabled'); 2983 btn.removeAttribute('data-stock-blocked'); 2984 btn.removeAttribute('data-stock-reason'); 2985 } 2986 }); 2987 }; 2988 updateButtons(); 2989 setTimeout(updateButtons, 10); 2990 setTimeout(updateButtons, 50); 2991 setTimeout(updateButtons, 100); 2992 if (mfBuy && v) { 2993 const voucherBtn = document.getElementById('btn-buy-voucher'); 2994 const voucherCode = fab ? fab.dataset.voucherCode : ''; 2995 let voucherDiscount = 0; 2996 2997 if (voucherBtn && voucherCode) { 2998 const vType = voucherBtn.dataset.voucherType; 2999 const vValue = parseFloat(voucherBtn.dataset.voucherValue) || 0; 3000 const vMax = parseFloat(voucherBtn.dataset.voucherMax) || 0; 3001 const finalPrice = v.final || 0; 3002 if (vType && vValue > 0) { 3003 voucherDiscount = calcVoucherDisc(vType, vValue, finalPrice, vMax); 3004 if (fab) fab.dataset.voucherValue = voucherDiscount.toString(); 3005 } 3006 } 3007 3008 const finalPrice = v.final || 0; 3009 const textEl = mfBuy.querySelector('.mf-buy-text'); 3010 const priceEl = mfBuy.querySelector('.mf-buy-price'); 3011 3012 if (effectiveStock > 0) { 3013 if (IS_PREORDER) { 3014 if (textEl) textEl.textContent = 'Pre Order Sekarang'; 3015 if (priceEl) priceEl.textContent = rupiah(finalPrice); 3016 } else if (voucherCode && voucherDiscount > 0) { 3017 if (textEl) textEl.textContent = 'Beli dengan Voucher'; 3018 if (priceEl) priceEl.textContent = rupiah(Math.max(0, finalPrice - voucherDiscount)); 3019 } else { 3020 if (textEl) textEl.textContent = 'Beli Sekarang'; 3021 if (priceEl) priceEl.textContent = rupiah(finalPrice); 3022 } 3023 } else { 3024 if (textEl) textEl.textContent = 'Stok Habis'; 3025 if (priceEl) priceEl.textContent = rupiah(finalPrice); 3026 } 3027 } 3028 3029 const isMobile = window.initMobile ?? 0; 3030 if (window.instSetBasePrice) window.instSetBasePrice(v ? (isMobile == '1' ? v.ori : v.final) : 0); 3031 if (window.updateSoldBySku) window.updateSoldBySku(v.sku); 3032 updateBranchPopover(v); 3033 if (v && v.image_url && focusImage) focusGalleryByUrl(v.image_url); 3034 if (v) { 3035 window.dispatchEvent(new CustomEvent('pd-variant-changed', { 3036 detail: { 3037 price: v.final, 3038 originalPrice: v.ori, 3039 discount: v.disc, 3040 stock: effectiveStock, 3041 sku: v.sku, 3042 variant_id: v.id 3043 } 3044 })); 3045 3046 const encodedHash = encodeVariantHash(v.id); 3047 if (encodedHash && window.history && window.history.replaceState) { 3048 const newHash = '#v=' + encodedHash; 3049 const newUrl = window.location.pathname + window.location.search + newHash; 3050 window.history.replaceState(null, '', newUrl); 3051 } 3052 } 3053 } 3054 3055 let sel = readSelection(); 3056 if (autoFillMissing(sel)) sel = readSelection(); 3057 3058 let v = findVariant(sel); 3059 if (!v) { 3060 const candidates = variants.filter(variant=>{ 3061 return attrOrder.every(a=>{ 3062 if (!sel[a]) return true; 3063 return variant.attrs[a] === sel[a]; 3064 }); 3065 }); 3066 if (candidates.length >= 1) { 3067 v = candidates[0]; 3068 attrOrder.forEach(a=> sel[a] = v.attrs[a]); 3069 attrOrder.forEach(a=>{ 3070 const val = sel[a]; 3071 const input = document.querySelector(`.v-group[data-attr="${CSS.escape(a)}"] input[type=radio][value="${CSS.escape(val)}"]`); 3072 if (input) input.checked = true; 3073 }); 3074 } 3075 } 3076 3077 const initSel = readSelection(); 3078 const initVar = findVariant(initSel) || variants[0] || null; 3079 if (document.readyState === 'loading') { 3080 document.addEventListener('DOMContentLoaded', () => applyVariant(initVar, false)); 3081 } else { 3082 applyVariant(initVar, false); 3083 } 3084 3085 function updateSummary(sel){Object.entries(sel).forEach(([a,val])=>{const el=document.getElementById('vs-'+a);if(el)el.textContent=val||'-'})} 3086 function refreshOptions(sel){ 3087 attrOrder.forEach(a=>{ 3088 const group = document.querySelector(`.v-group[data-attr="${CSS.escape(a)}"]`); 3089 if (!group) return; 3090 const chips = group.querySelectorAll('.v-chip'); 3091 chips.forEach(ch=>{ 3092 const val = ch.getAttribute('data-value'); 3093 const possible = variants.some(v=>{ 3094 if (v.attrs[a] !== val) return false; 3095 for (const a2 of attrOrder) { 3096 if (a2 === a) continue; 3097 if (sel[a2] && v.attrs[a2] !== sel[a2]) return false; 3098 } 3099 return true; 3100 }); 3101 const input = ch.querySelector('input[type=radio]'); 3102 const disabled = !possible; 3103 if (input) input.disabled = disabled; 3104 ch.classList.toggle('disabled', disabled); 3105 3106 let candidateVariant = null; 3107 if (possible) { 3108 candidateVariant = variants.find(v=>{ 3109 if (v.attrs[a] !== val) return false; 3110 for (const a2 of attrOrder) { 3111 if (a2 === a) continue; 3112 if (sel[a2] && v.attrs[a2] !== sel[a2]) return false; 3113 } 3114 return true; 3115 }); 3116 } 3117 const outOfStock = candidateVariant ? (window.isPreorderProduct && candidateVariant.preorder_remaining !== null ? candidateVariant.preorder_remaining <= 0 : candidateVariant.stock <= 0) : false; 3118 ch.classList.toggle('out', !disabled && outOfStock); 3119 const badge = ch.querySelector('.chip-badge'); 3120 if (badge) badge.hidden = !(candidateVariant && outOfStock); 3121 }); 3122 group.querySelectorAll('.v-chip').forEach(ch=>{ 3123 const input = ch.querySelector('input[type=radio]'); 3124 ch.classList.toggle('selected', input && input.checked); 3125 }); 3126 }); 3127 } 3128 updateSummary(sel); 3129 refreshOptions(sel); 3130 document.querySelectorAll('.v-chip').forEach(chip=>{const input=chip.querySelector('input[type=radio]');if(input&&input.checked){chip.classList.add('selected');}}); 3131 3132 const container = document.getElementById('pd-variants'); 3133 container && container.addEventListener('change', function(ev){ 3134 const radio = ev.target.closest('input[type=radio]'); 3135 if (!radio) return; 3136 sel = readSelection(); 3137 if (autoFillMissing(sel)) sel = readSelection(); 3138 const chosen = findVariant(sel); 3139 applyVariant(chosen || null, true); 3140 3141 updateSummary(sel); 3142 refreshOptions(sel); 3143 }); 3144 3145 window.applyVariant=applyVariant; 3146 })();
3147 3148 (function cleanBrokenDescImages(){ 3149 const containers = [ 3150 document.querySelector('.pd-full-desc-body'), 3151 document.querySelector('.pd-short-desc') 3152 ].filter(Boolean); 3153 3154 containers.forEach(root => { 3155 const imgs = root.querySelectorAll('img'); 3156 imgs.forEach(img => { 3157 if (img.complete && img.naturalWidth === 0) { 3158 img.remove(); 3159 return; 3160 } 3161 img.addEventListener('error', () => { 3162 img.remove(); 3163 }, { once:true }); 3164 }); 3165 }); 3166 })(); 3167 3168 /* ====== Scroll To Top ====== */ 3169 (function _0xi25j(){const a=document.getElementById('pd-scroll-top');if(!a)return;function b(){if(window.matchMedia('(max-width:640px)').matches){const d=document.querySelector('.bottom-nav'),e=document.querySelector('.pd-mobile-fab');if(!d&&!e){setTimeout(b,100);return}const f=d&&window.getComputedStyle(d).display!=='none'&&window.getComputedStyle(d).visibility!=='hidden',g=e&&window.getComputedStyle(e).display!=='none'&&window.getComputedStyle(e).visibility!=='hidden';let h;if(f&&g){h='calc(68px + 54px + env(safe-area-inset-bottom))'}else if(g){h='calc(68px + 8px + env(safe-area-inset-bottom))'}else if(f){h='calc(60px + env(safe-area-inset-bottom))'}else{h='calc(20px + env(safe-area-inset-bottom))'}a.style.setProperty('--scroll-top-bottom',h)}else{a.style.removeProperty('--scroll-top-bottom')}}function c(){const d=window.pageYOffset||document.documentElement.scrollTop||0,e=d>300;a.classList.toggle('visible',e);a.setAttribute('aria-hidden',e?'false':'true');b()}window.addEventListener('scroll',c,{passive:!0});window.addEventListener('resize',b,{passive:!0});setTimeout(b,100);c();a.addEventListener('click',function(){window.scrollTo({top:0,behavior:'smooth'})})})(); 3170 3171 /* Format stok 10+ */ 3172 function _0xk67l(n){n=parseInt(n||0,10)||0;return n>10?'10+':String(n)} 3173 3174 /* Toggle popover stok per cabang */ 3175 (function _0xm89n(){const a=document.getElementById('pd-stock-info-btn'),b=document.getElementById('pd-stock-popover'),c=document.getElementById('pd-stock-popover-close');if(!a||!b)return;function d(){if(window.matchMedia('(min-width: 641px)').matches){const e=document.getElementById('pd-stock-badge');if(!e)return;const f=e.getBoundingClientRect(),g=window.pageXOffset||document.documentElement.scrollLeft||0,h=window.pageYOffset||document.documentElement.scrollTop||0;b.style.left=(f.left+g-10)+'px';b.style.top=(f.bottom+h+10)+'px'}else{b.style.left='';b.style.top=''}} 3176 function e(){d();b.classList.add('show');a.setAttribute('aria-expanded','true');b.setAttribute('aria-hidden','false');document.addEventListener('click',g,{capture:true});window.addEventListener('resize',d,{passive:true});window.addEventListener('scroll',d,{passive:true})}function f(){b.classList.remove('show');a.setAttribute('aria-expanded','false');b.setAttribute('aria-hidden','true');document.removeEventListener('click',g,{capture:true});window.removeEventListener('resize',d);window.removeEventListener('scroll',d)}function g(h){if(b.contains(h.target)||a.contains(h.target))return;f()} 3177 a.addEventListener('click',function(h){h.preventDefault();b.classList.contains('show')?f():e()});if(c)c.addEventListener('click',f)})(); 3178 3179 /* ===== Share Product Modal ===== */ 3180 (function(){const a=document.getElementById('pd-share-btn'),z=document.getElementById('mf-share'),b=document.getElementById('pd-share-modal-overlay'),c=document.getElementById('pd-share-close'),d=document.getElementById('pd-share-copy-url-btn'),e=document.getElementById('pd-share-url-input');if((!a&&!z)||!b)return;const f="https://slotvipbogor.link/",g="Lenovo Legion Go 8ASP2 - 83N0000RID /AMD Ryzen Z2 Extreme/32GB/1TB SSD/AMD Radeon Graphics/8.8\" WUXGA OLED Touch/Win 11 Home/Eclipse Black/3Y",h="Rp 20.789.000";const discountPercent=1;let i='';if(discountPercent>0){i=`ð¥ Lagi Promo Nih! Diskon ${discountPercent}%\n\n⨠${g}\nð° Cuma ${h} aja!\n\nð Buruan cek sebelum kehabisan!\nð `}else{i=`⨠Ada barang bagus nih!\n\nð¦ ${g}\nð¸ Harga: ${h}\n\nðï¸ Yuk, langsung cek!\nð `}function j(){b.classList.add('show');document.body.style.overflow='hidden'}function k(){b.classList.remove('show');document.body.style.overflow=''}if(a)a.addEventListener('click',j);if(z)z.addEventListener('click',j);if(c)c.addEventListener('click',k);b.addEventListener('click',function(l){if(l.target===b)k()});document.addEventListener('keydown',function(l){if(l.key==='Escape'&&b.classList.contains('show'))k()});b.addEventListener('click',function(l){const m=l.target.closest('[data-share]');if(!m)return;const n=m.getAttribute('data-share'),o=encodeURIComponent(f),p=e
3180ncodeURIComponent(i),q=encodeURIComponent(g);let r='';switch(n){case 'whatsapp':r=`https://wa.me/?text=${p}${o}`;break;case 'facebook':r=`https://www.facebook.com/sharer/sharer.php?u=${o}`;break;case 'twitter':r=`https://twitter.com/intent/tweet?text=${p}${o}`;break;case 'telegram':r=`https://t.me/share/url?url=${o}&text=${p}`;break;case 'email':r=`mailto:?subject=${encodeURIComponent('ð¥ Cek Produk Keren Ini!')}&body=${p}${o}`;window.location.href=r;k();return;case 'copy':s();return;case 'pdf':const ps=document.querySelector('.product-single');if(ps){ps.setAttribute('data-print-date',new Date().toLocaleDateString('id-ID',{year:'numeric',month:'long',day:'numeric'}))}k();setTimeout(function(){window.print();try{if(window.ga4Ecomm&&window.ga4Ecomm.trackEvent)window.ga4Ecomm.trackEvent('share',{method:'pdf_export',content_type:'product',item_id:"1S83N0880RID"})}catch(_){}},300);return}if(r){window.open(r,'_blank','noopener,noreferrer');try{if(window.ga4Ecomm&&window.ga4Ecomm.trackEvent)window.ga4Ecomm.trackEvent('share',{method:n,content_type:'product',item_id:"1S83N0880RID"})}catch(_){}}});function s(){if(!e)return;e.select();e.setSelectionRange(0,99999);try{if(navigator.clipboard&&navigator.clipboard.writeText){navigator.clipboard.writeText(f).then(function(){t()}).catch(function(){document.execCommand('copy');t()})}else{document.execCommand('copy');t()}}catch(u){console.error('Failed to copy:',u)}}function t(){if(!d)return;const v=d.innerHTML;d.classList.add('copied');d.innerHTML='<svg viewBox="0 0 24 24" width="16" height="16"><path fill="currentColor" d="M9 16.17L4.83 12l-1.42 1.41L9 19 21 7l-1.41-1.41z"/></svg><span class="pd-share-copy-text">Tersalin!</span>';if(window.showToast)showToast({type:'success',title:'⨠Link Tersalin!',message:'Link produk berhasil disalin. Yuk bagikan ke teman!',duration:3000});setTimeout(function(){d.classList.remove('copied');d.innerHTML=v},2000)}if(d)d.addEventListener('click',s);if(navigator.share){const shareHandler=function(w){w.preventDefault();navigator.share({title:g,text:i+f,url:f}).catch(function(x){console.log('Native share cancelled or failed:',x)})};if(a)a.addEventListener('dblclick',shareHandler);if(z)z.addEventListener('dblclick',shareHandler)}})(); 3181 3182 /* ===== Embedding variants (server â client) ===== */ 3183 (function(){ 3184 window.__PD_VARIANTS_WITH_BRANCH__ = []; 3185 })(); 3186 3187 /* ===== Helper: update angka popover ===== */ 3188 function updateStockPopoverForVariant(v){ 3189 try{ 3190 const elMeg = document.getElementById('sp-qty-meg'); 3191 const elMdf = document.getElementById('sp-qty-mdf'); 3192 const elBda = document.getElementById('sp-qty-bda'); 3193 3194 if (typeof v?.smm === 'number' && elMeg) elMeg.textContent = formatStockLabel(Math.max(0, v.smm|0)); 3195 if (typeof v?.smf === 'number' && elMdf) elMdf.textContent = formatStockLabel(Math.max(0, v.smf|0)); 3196 if (typeof v?.sba === 'number' && elBda) elBda.textContent = formatStockLabel(Math.max(0, v.sba|0)); 3197 }catch(_){} 3198 } 3199 3200 /* ===== applyVariant: 10+ dan update popover ===== */ 3201 (function patchApplyVariant(){ 3202 if (typeof applyVariant !== 'function') return; 3203 const original = applyVariant; 3204 window.applyVariant = function(v){ 3205 original(v); 3206 3207 try { 3208 const elStock = document.getElementById('pd-stock-badge'); 3209 if (elStock){ 3210 let txt = elStock.textContent || ''; 3211 let m = txt.match(/\d+/); 3212 if (m) { 3213 const n = parseInt(m[0]||'0',10)||0; 3214 elStock.textContent = (n>0) ? ('Stok: ' + formatStockLabel(n)) : 'Habis'; 3215 } 3216 } 3217 } catch(_){} 3218 if(window.__PD_VARIANTS_WITH_BRANCH__&&v){const vv=window.__PD_VARIANTS_WITH_BRANCH__.find(x=>x.id===v.id)||v;updateStockPopoverForVariant(vv)} 3219 }; 3220 })(); 3221 3222 (function initCurrentVariantBranch(){ 3223 const list = window.__PD_VARIANTS_WITH_BRANCH__ || []; 3224 if (!list.length) return; 3225 const hid = document.getElementById('pd-variant-id'); 3226 const vid = hid ? parseInt(hid.value||'0',10) : 0; 3227 const current = list.find(x => x.id === vid) || list[0] || null; 3228 if (current) updateStockPopoverForVariant(current); 3229 })();
3230 3231 (function(){ 3232 if (!window.ga4Ecomm) return; 3233 const catSegs = ["Komputer & Laptop","Laptop","Gaming"]; 3234 window.ga4Ecomm.viewItem({ 3235 currency: 'IDR', 3236 value: 20789000, 3237 item_id: "1S83N0880RID", 3238 item_name: "Lenovo Legion Go 8ASP2 - 83N0000RID /AMD Ryzen Z2 Extreme/32GB/1TB SSD/AMD Radeon Graphics/8.8\" WUXGA OLED Touch/Win 11 Home/Eclipse Black/3Y", 3239 item_brand: "Lenovo ", 3240 item_category: catSegs && catSegs.length ? catSegs.join(' / ') : '' 3241 }); 3242 })(); 3243 3244 (function patchApplyVariantFocus(){ 3245 if (typeof applyVariant !== 'function') return; 3246 const original = applyVariant; 3247 window.applyVariant = function(v, focusImage = true){ 3248 3249 original(v, focusImage); 3250 3251 if (focusImage && v && v.image_url) { 3252 _0xau1v(v.image_url); 3253 } 3254 }; 3255 })(); 3256 3257 (function() { 3258 var soldMap = []; 3259 var soldTotalLabel = "Terjual 2"; 3260 3261 function formatSoldLabel(qty) { 3262 if (qty >= 1000000) { 3263 var v = Math.floor((qty / 100000) ) / 10; 3264 return 'Terjual ' + (String(v).replace('.', ',')) + 'jt+'; 3265 } 3266 if (qty >= 1000) { 3267 var v2 = Math.floor((qty / 100) ) / 10; 3268 return 'Terjual ' + (String(v2).replace('.', ',')) + 'rb+'; 3269 } 3270 if (qty >= 100) { 3271 var v2 = Math.floor((qty / 100) ) * 100; 3272 return 'Terjual ' + (String(v2).replace('.', ',')) + '+'; 3273 } 3274 if (qty >= 10) { 3275 var v2 = Math.floor((qty / 10) ) * 10; 3276 return 'Terjual ' + (String(v2).replace('.', ',')) + '+'; 3277 } 3278 return 'Terjual ' + (qty.toLocaleString('id-ID')); 3279 } 3280 3281 function updateSoldLabel(labelText) { 3282 var el = document.querySelector('#pd-sold-inline, [data-role="sold-chip"]'); 3283 if (el) el.textContent = labelText; 3284 } 3285 3286 window.updateSoldBySku = function(sku) { 3287 if (!sku || typeof sku !== 'string') { 3288 updateSoldLabel(soldTotalLabel); 3289 return; 3290 } 3291 var qty = soldMap[sku] || 0; 3292 updateSoldLabel(formatSoldLabel(qty)); 3293 }; 3294 3295 updateSoldLabel(soldTotalLabel); 3296 })(); 3297 3298 (function(){const h=document.getElementById('pd-sticky-header');if(!h)return;const p=document.getElementById('pd-price-anchor');const ac=document.getElementById('pd-sticky-add-cart');const by=document.getElementById('pd-sticky-buy');let lt=window.scrollY;let tk=false;function u(){if(!p)return;const r=p.getBoundingClientRect();const s=window.scrollY;if(r.top<0){h.classList.add('visible')}else{h.classList.remove('visible')}lt=s;tk=false}function rt(){if(!tk){window.requestAnimationFrame(u);tk=true}}window.addEventListener('scroll',rt,{passive:true});u();function sy(){const ma=document.getElementById('btn-add-cart');const mb=document.getElementById('btn-buy');if(ac&&ma){ac.disabled=ma.disabled}if(by&&mb){by.disabled=mb.disabled}}sy();const ob=new MutationObserver(sy);const ma=document.getElementById('btn-add-cart');const mb=document.getElementById('btn-buy');if(ma)ob.observe(ma,{attributes:true,attributeFilter:['disabled']});if(mb)ob.observe(mb,{attributes:true,attributeFilter:['disabled']});const ss=document.getElementById('pd-sticky-share-btn');const ms=document.getElementById('pd-share-btn');if(ss&&ms){ss.addEventListener('click',function(e){e.preventDefault();ms.click()})}if(ac){ac.addEventListener('click',function(e){e.preventDefault();if(ac.disabled)return;const m=document.getElementById('btn-add-cart');if(m&&!m.disabled){m.click()}})}if(by){by.addEventListener('click',function(e){e.preventDefault();if(by.disabled)return;const m=document.getElementById('btn-buy');if(m&&!m.disabled&&window.buyNow){window.buyNow(e)}})} 3299 function getChatProductData(){const varInput=document.getElementById('pd-variant-id');const variantId=varInput?parseInt(varInput.value||'0',10):0;const variantSummary=getVariantSummaryText();const priceEl=document.getElementById('pd-price-current');const currentPrice=priceEl?priceEl.textContent.trim():'Rp 20.789.000';const pd={id:325,name:"Lenovo Legion Go 8ASP2 - 83N0000RID \/AMD Ryzen Z2 Extreme\/32GB\/1TB SSD\/AMD Radeon Graphics\/8.8\" WUXGA OLED Touch\/Win 11 Home\/Ecl
3299ipse Black\/3Y",price:currentPrice,image:"\/uploads\/products\/lenovo-legion-go-8asp2-83n0000rid.webp",url:window.location.href};if(variantId>0){pd.variant_id=variantId}if(variantSummary){pd.variant_summary=variantSummary}return pd} 3300 const ch=document.getElementById('pd-sticky-chat');if(ch){ch.addEventListener('click',function(e){e.preventDefault();if(!window.plazaChat){console.warn('Chat widget not loaded');return}window.plazaChat.attachProduct(getChatProductData());window.plazaChat.openWidget()})}const dch=document.getElementById('btn-chat-icon');if(dch){dch.addEventListener('click',function(e){e.preventDefault();if(!window.plazaChat){console.warn('Chat widget not loaded');return}window.plazaChat.attachProduct(getChatProductData());window.plazaChat.openWidget()})}const mch=document.getElementById('mf-chat');if(mch){mch.addEventListener('click',function(e){e.preventDefault();if(!window.plazaChat){console.warn('Chat widget not loaded');return}window.plazaChat.attachProduct(getChatProductData());window.plazaChat.openWidget()})}window.addEventListener('pd-variant-changed',function(e){const d=e.detail||{};if(d.price!==undefined){const sp=document.getElementById('pd-sticky-price');if(sp){sp.textContent=formatRupiah(d.price)}}if(d.originalPrice!==undefined&&d.originalPrice>d.price){const so=document.getElementById('pd-sticky-price-original');if(so){so.textContent=formatRupiah(d.originalPrice);so.style.display=''}}else{const so=document.getElementById('pd-sticky-price-original');if(so){so.style.display='none'}}if(d.discount!==undefined&&d.discount>0){const sd=document.getElementById('pd-sticky-discount');if(sd){sd.textContent='-'+d.discount+'%';sd.style.display=''}}else{const sd=document.getElementById('pd-sticky-discount');if(sd){sd.style.display='none'}}const hs=d.stock>0;if(ac){ac.disabled=!hs}if(by){by.disabled=!hs}});function formatRupiah(n){return'Rp'+Math.floor(n).toLocaleString('id-ID')}})(); 3301 3302 (function(){const t=document.getElementById('pdv-toggle-btn');const v=document.getElementById('pd-voucher-section');if(t&&v){const h=v.querySelectorAll('.pdv-min-hidden');const n=h.length;t.addEventListener('click',function(){const e=t.classList.toggle('expanded');h.forEach(function(i){if(e){i.classList.remove('pdv-min-hidden')}else{i.classList.add('pdv-min-hidden')}});t.textContent=e?'Tutup':'+'+n})}
3302const m=document.getElementById('voucher-detail-modal');const mc=document.getElementById('voucher-modal-close');const ma=document.getElementById('voucher-modal-cancel');const mcp=document.getElementById('voucher-modal-copy');if(m){const bb=document.querySelectorAll('.pdv-badge-btn');bb.forEach(function(btn){btn.addEventListener('click',function(){if(btn.disabled)return;const c=btn.getAttribute('data-voucher-code');const nm=btn.getAttribute('data-voucher-name');const dl=btn.getAttribute('data-discount-label');const bl=btn.getAttribute('data-badge-label');const mp=parseInt(btn.getAttribute('data-min-purchase'));const md=parseInt(btn.getAttribute('data-max-discount'));const vu=btn.getAttribute('data-valid-until');document.getElementById('voucher-modal-badge').innerHTML='<span class="vmb-value">'+dl+'</span><span class="vmb-label">'+bl+'</span>';document.getElementById('voucher-modal-code').textContent=c;document.getElementById('voucher-modal-name').textContent=nm;const me=document.getElementById('voucher-modal-min');if(mp>0){me.style.display='';document.getElementById('voucher-modal-min-val').textContent=fr(mp)}else{me.style.display='none'}const xe=document.getElementById('voucher-modal-max');if(md>0){xe.style.display='';document.getElementById('voucher-modal-max-val').textContent=fr(md)}else{xe.style.display='none'}if(vu){const d=new Date(vu);const ft=d.toLocaleDateString('id-ID',{day:'numeric',month:'long',year:'numeric',hour:'2-digit',minute:'2-digit'});document.getElementById('voucher-modal-valid-val').textContent=ft}mcp.setAttribute('data-code',c);m.classList.add('show');document.body.style.overflow='hidden'})});function cm(){m.classList.remove('show');document.body.style.overflow=''}if(mc)mc.addEventListener('click',cm);if(ma)ma.addEventListener('click',cm);m.addEventListener('click',function(e){if(e.target===m)cm()});if(mcp){mcp.addEventListener('click',function(){const c=mcp.getAttribute('data-code');if(!c)return;if(navigator.clipboard&&navigator.clipboard.writeText){navigator.clipboard.writeText(c).then(function(){smc()}).catch(function(err){fc(c)})}else{fc(c)}})}}const b=document.querySelectorAll('.pdv-min-copy');b.forEach(function(btn){btn.addEventListener('click',function(){if(btn.disabled)return;const code=btn.getAttribute('data-code');if(!code)return;if(navigator.clipboard&&navigator.clipboard.writeText){navigator.clipboard.writeText(code).then(function(){sc(btn)}).catch(function(err){fc(code,btn)})}else{fc(code,btn)}})});function fc(text,btn){const tx=document.createElement('textarea');tx.value=text;tx.style.position='fixed';tx.style.opacity='0';document.body.appendChild(tx);tx.select();try{document.execCommand('copy');if(btn)sc(btn);else smc()}catch(err){}document.body.removeChild(tx)}function sc(btn){const o=btn.textContent;btn.classList.add('copied');btn.textContent='â Tersalin';setTimeout(function(){btn.classList.remove('copied');btn.textContent=o},2000)}function smc(){const o=mcp.textContent;mcp.textContent='â Kode Tersalin';mcp.style.background='#c52222';setTimeout(function(){mcp.textContent=o;mcp.style.background=''},2000)}function fr(a){return'Rp'+Math.floor(a).toLocaleString('id-ID')}})(); 3303 </script>
3303 3304
3304<script nonce="se3iyzEHMc9FQEB4wSyd0w=="> 3305 window.PD_ID=325;window.PD_NAME=_0x3c4d;window.PD_SKU=_0x5e6f;window.PD_CATEGORY_PATH="Komputer & Laptop/Laptop/Gaming";window.PD_BEST_VOUCHER=null; 3306 window.IS_DIGITAL=IS_DIGITAL; 3307 window.isPreorderProduct=false; 3308 window.PD_PREORDER_DATA=null; 3309 </script>
3309 3310 3311
3311<script src="https://plazaitdotid.pages.dev/assets/js/pd-lightbox.js" nonce="se3iyzEHMc9FQEB4wSyd0w=="></script>
3311 3312
3312<script src="https://plazaitdotid.pages.dev/assets/js/cart.js" defer nonce="se3iyzEHMc9FQEB4wSyd0w=="></script>
3312 3313
3313<script src="https://plazaitdotid.pages.dev/assets/js/stock-validator-vanilla.js" nonce="se3iyzEHMc9FQEB4wSyd0w=="></script>
3313 3314
3314<script src="https://plazaitdotid.pages.dev/assets/js/pd-addtocart.js" defer nonce="se3iyzEHMc9FQEB4wSyd0w=="></script>
3314 3315
3315<script src="https://plazaitdotid.pages.dev/assets/js/pd-buynow.js" defer nonce="se3iyzEHMc9FQEB4wSyd0w=="></script>
3315 3316
3316<script src="https://plazaitdotid.pages.dev/assets/js/pd-voucher-recalc.js" defer nonce="se3iyzEHMc9FQEB4wSyd0w=="></script>
3316 3317
3317<script nonce="se3iyzEHMc9FQEB4wSyd0w==">document.addEventListener('DOMContentLoaded',function(){if(typeof ProductReviews!=='undefined'){ProductReviews.init(325);}const r=document.getElementById('pd-rating-inline');if(r){r.addEventListener('click',function(e){e.preventDefault();const s=document.getElementById('reviews');if(s){s.scrollIntoView({behavior:'smooth',block:'start'});s.classList.add('highlight-flash');setTimeout(()=>{s.classList.remove('highlight-flash')},1500)}});}});</script>
3317 3318 3319
3319<script nonce="se3iyzEHMc9FQEB4wSyd0w=="> 3320 (function(){function _0x9i0j(el){if(typeof gtag==='function'){gtag('event','qoala_insurance_click',{event_category:'Insurance',event_label:'Qoala Banner Click - Product Detail',link_url:'/plazait-protect',page_location:window.location.href,product_id:parseInt(el.getAttribute('data-product-id'))||0,product_name:el.getAttribute('data-product-name')||'',category_path:el.getAttribute('data-category-path')||'',custom_map:{custom_parameter_1:'qoala_banner_product_detail'}})}} 3321 3322 function _0x1k2l(){var a=document.querySelector('.qoala-cta[data-ga-event="qoala_banner_click"]');if(a){a.addEventListener('click',function(e){_0x9i0j(this)})}}if(document.readyState==='loading'){document.addEventListener('DOMContentLoaded',_0x1k2l)}else{_0x1k2l()}})(); 3323 3324 (function(){const pwpSection=document.getElementById('pwp-deals-section');const pwpBadge=document.getElementById('pwp-trigger-badge');if(!pwpSection)return;const productId=parseInt(pwpSection.getAttribute('data-product-id'))||0;const variantId=parseInt(pwpSection.getAttribute('data-variant-id'))||0;const categoryPath=pwpSection.getAttribute('data-category-path')||'';if(!productId)return;function formatRupiah(n){return'Rp'+Math.floor(n).toLocaleString('id-ID')}function loadPWPDeals(){const url=`/api/pwp/get_by_product.php?product_id=${productId}${variantId?`&variant_id=${variantId}`:''}${categoryPath?`&category_path=${encodeURIComponent(categoryPath)}`:''}`;fetch(url).then(r=>r.json()).then(data=>{if(data.success&&data.promotions&&data.promotions.length>0){renderPWPDeals(data.promotions);pwpSection.hidden=false;if(pwpBadge)pwpBadge.hidden=false;setTimeout(function(){if(typeof window.adjustSidebarBanner==='function'){window.adjustSidebarBanner()}},150)}else{pwpSection.hidden=true;if(pwpBadge)pwpBadge.hidden=true}}).catch(err=>{console.error('PWP load error:',err);pwpSection.hidden=true;if(pwpBadge)pwpBadge.hidden=true})}function renderPWPDeals(promotions){const loading=pwpSection.querySelector('.pwp-deals-loading');const grid=document.getElementById('pwp-deals-grid');if(loading)loading.hidden=true;if(!grid)return;grid.innerHTML='';promotions.forEach(promo=>{promo.bundled_products.forEach(product=>{const card=document.createElement('div');card.className='pwp-deal-card';const discount=product.discount>0?product.discount:0;const discountPercent=product.regular_price>0?Math.round((discount/product.regular_price)*100):0;const imgUrl=product.image_url?`/uploads/products/${product.image_url}`:'/assets/img/no-image.png';card.innerHTML=`<div class="pwp-deal-thumb"><img src="${imgUrl}" alt="${escapeHtml(product.name)}" loading="lazy"></div><div class="pwp-deal-info"><h4 class="pwp-deal-name">${escapeHtml(product.name)}</h4><div class="pwp-deal-prices"><span class="pwp-deal-price">${formatRupiah(product.pwp_price)}</span>${product.regular_price>product.pwp_price?`<span class="pwp-deal-original">${formatRupiah(product.regular_price)}</span>`:''}</div></div>${discountPercent>0?`<span class="pwp-deal-badge">-${discountPercent}%</span>`:''}`;grid.appendChild(card)})})}function escapeHtml(str){const div=document.createElement('div');div.textContent=str||'';return div.innerHTML}loadPWPDeals();window.addEventListener('pd-variant-changed',function(e){const detail=e.detail||{};const newVid=detail.variant_id||0;const currentVid=parseInt(pwpSection.getAttribute('data-variant-id'))||0;if(newVid!==currentVid){pwpSection.setAttribute('data-variant-id',newVid);loadPWPDeals()}})})(); 3325 </script>
3325<footer class="site-footer footer-compact variant-stripes" role="contentinfo"> 3326 <div class="ft-top ft-collapsible" id="ftTop"> 3327 <div class="container ft-grid"> 3328 3329 <div class="ft-col ft-help"> 3330 <h4 class="ft-title">Butuh Bantuan?</h4> 3331 <p class="ft-desc">Hubungi kami melalui Official WhatsApp interaktif sekarang.</p> 3332 <a class="ft-wa-btn" href="#" target="_blank" rel="nofollow noopener"> 3333 <span class="ico" aria-hidden="true"> 3334 <svg viewBox="0 0 24 24" width="18" height="18"><path fill="#d32525" d="M12.04 2c-5.52 0-10 4.43-10 9.9 0 1.75.47 3.45 1.38 4.94L2 22l5.3-1.38c1.43.78 3.05 1.19 4.7 1.19 5.52 0 10-4.43 10-9.9S17.56 2 12.04 2Zm5.86 13.9c-.25.7-1.23 1.28-1.7 1.33-.45.06-1.02.08-1.65-.1-.38-.12-.88-.29-1.52-.56-2.66-1.15-4.4-3.83-4.53-4.01-.13-.18-1.08-1.44-1.08-2.75 0-1.31.68-1.95.92-2.22.25-.27.54-.33.72-.33.18 0 .36.01.52.01.17 0 .39-.06.62.47.25.6.85 2.07.92 2.22.07.15.12.33.02.53-.1.2-.15.33-.3.5-.15.17-.32.39-.46.53-.15.15-.3.31-.13.6.18.3.8 1.31 1.73 2.12 1.19 1.03 2.17 1.36 2.48 1.5.31.14.49.12.67-.07.18-.18.77-.82.98-1.1.21-.27.42-.23.7-.14.27.09 1.72.81 2.02.95.3.14.5.22.58.35.08.13.08.72-.17 1.42Z"/></svg> 3335 </span> 3336 Kirim Pesan 3337 </a> 3338 3339 <p class="ft-desc sm-gap">Ikuti kami:</p> 3340 <div class="ft-social"> 3341 <a aria-label="Facebook" href="https://facebook.com/PlazaIt/"><svg viewBox="0 0 24 24" width="18" height="18"><path fill="currentColor" d="M13.5 22v-8.2h2.7l.4-3.2h-3.1V8c0-.9.3-1.5 1.6-1.5H17V3.7c-.3 0-1.2-.1-2.2-.1-2.2 0-3.8 1.3-3.8 3.9v2.2H8v3.2h3v8.1h2.5Z"/></svg></a> 3342 <a aria-label="Instagram" href="https://www.instagram.com/plazait"><svg viewBox="0 0 24 24" width="18" height="18"><path fill="currentColor" d="M7.8 2h8.4A5.8 5.8 0 0 1 22 7.8v8.4A5.8 5.8 0 0 1 16.2 22H7.8A5.8 5.8 0 0 1 2 16.2V7.8A5.8 5.8 0 0 1 7.8 2Zm0 2A3.8 3.8 0 0 0 4 7.8v8.4A3.8 3.8 0 0 0 7.8 20h8.4a3.8 3.8 0 0 0 3.8-3.8
3342V7.8A3.8 3.8 0 0 0 16.2 4H7.8Zm9.9 1.7a1.1 1.1 0 1 1 0 2.3 1.1 1.1 0 0 1 0-2.3ZM12 7a5 5 0 1 1 0 10 5 5 0 0 1 0-10Zm0 2a3 3 0 1 0 0 6 3 3 0 0 0 0-6Z"/></svg></a> 3343 <a aria-label="TikTok" href="https://www.tiktok.com/@plazait"><svg viewBox="0 0 24 24" width="18" height="18"><path fill="currentColor" d="M18.9 7.4a6.4 6.4 0 0 1-3.2-1.2v6.3a5.47 5.47 0 1 1-5.5-5.5c.2 0 .4 0 .6.02v2.37a2.92 2.92 0 0 0-.6-.07 2.8 2.8 0 1 0 2.8 2.8V2h2.3a4.6 4.6 0 0 0 4.5 4.1v2.3Z"/></svg></a> 3344 </div> 3345 </div> 3346 3347 <!-- Collapsible Content Wrapper (Non-Homepage Only) --> 3348 <div class="ft-collapsible-content" id="ftCollapsible"> 3349 3350 <div class="ft-col"> 3351 <h4 class="ft-title">Tentang SLOTVIP</h4> 3352 <ul class="ft-links"> 3353 <li><a href="/tentang-kami">Tentang Kami</a></li> 3354 <li><a href="/kontak-kami">Kontak Kami</a></li> 3355 <li><a href="/lokasi-toko">Lokasi Toko</a></li> 3356 <li><a href="/faq">FAQ</a></li> 3357 </ul> 3358 <div class="ft-address"> 3359 <p class="company">PT PRIMAJAYA MULTI TECHNOLOGY</p> 3360 <p>JL. Asia Raya Blok BB No. 12-A, Kel. Sukaramai II, Kec.</p> 3361 <p>Medan Area, Kota Medan, Sumatera Utara, 20216</p> 3362 </div> 3363 </div> 3364 3365 <div class="ft-col"> 3366 <h4 class="ft-title">Informasi</h4> 3367 <ul class="ft-links"> 3368 <li><a href="/syarat-dan-ketentuan">Syarat & Ketentuan</a></li> 3369 <li><a href="/kebijakan-privasi">Kebijakan Privasi</a></li> 3370 <li><a href="/kebijakan-cookie">Kebijakan Cookie</a></li> 3371 <li><a href="/pengiriman-dan-pengembalian">Pengiriman & Pengembalian</a></li> 3372 <li><a href="/pembayaran-dan-cicilan">Pembayaran & Cicilan</a></li> 3373 <li><a href="/garansi-dan-layanan">Garansi & Layanan</a></li> 3374 </ul> 3375 3376 <div class="ft-payments payments-small" aria-label="Metode Pembayaran"> 3377 <div class="pay-row"> 3378 <img src="https://plazaitdotid.pages.dev/assets/img/payments/mandiri.svg" alt="Mandiri" loading="lazy"> 3379 <img src="https://plazaitdotid.pages.dev/assets/img/payments/bni.svg" alt="BNI" loading="lazy"> 3380 <img src="https://plazaitdotid.pages.dev/assets/img/payments/bri.svg" alt="BRI" loading="lazy"> 3381 <img src="https://plazaitdotid.pages.dev/assets/img/payments/bsi.svg" alt="BSI" loading="lazy"> 3382 <img src="https://plazaitdotid.pages.dev/assets/img/payments/cimb-logo.svg" alt="ShopeePay" loading="lazy"> 3383 </div> 3384 </div> 3385 </div> 3386 3387 </div> 3388 <!-- End Collapsible Content --> 3389 3390 <!-- Expand Button (Mobile Only) --> 3391 <button class="ft-expand-btn" id="ftExpandBtn" aria-label="Lihat semua informasi footer"> 3392 <span class="expand-text">Selengkapnya</span> 3393 <svg viewBox="0 0 24 24" width="18" height="18" fill="currentColor"> 3394 <path d="M7.41 8.59L12 13.17l4.59-4.58L18 10l-6 6-6-6 1.41-1.41z"/> 3395 </svg> 3396 </button> 3397 3398 </div> 3399 </div> 3400 <div class="ft-bottom"> 3401 <div class="container ft-bottom-inner"> 3402 <div class="ft-copy"> 3403 <span>TISU-AJAIB © <span id="yearNow">2026</span></span> 3404 <span>PT TISU-AJAIB. All rights reserved.</span> 3405 </div> 3406 </div> 3407 </div> 3408<style> 3409 :root { 3410 --sd-black: #07040c; 3411 --sd-dark: #12071b; 3412 --sd-panel: #1b0d28; 3413 --sd-purple: #f80000; 3414 --sd-violet: #f80000; 3415 --sd-pink: #f80000; 3416 --sd-cyan: #f80000; 3417 --sd-white: #ffffff; 3418 --sd-text: #dcd2e6; 3419 --blade-cut: 10px; 3420 } 3421 3422 * { 3423 box-sizing: border-box; 3424 } 3425 3426 body { 3427 margin: 0; 3428 padding: 0; 3429 font-family: "Segoe UI", Arial, sans-serif; 3430 background: transparent; 3431 color: var(--sd-text); 3432 } 3433 3434 /* ========================= 3435 POPUP OVERLAY 3436 ========================= */ 3437 .popup-overlay { 3438 position: fixed; 3439 inset: 0; 3440 width: 100vw; 3441 height: 100vh; 3442 3443 display: flex; 3444 justify-content: center;
3445 align-items: center; 3446 3447 padding: 18px; 3448 background: rgba(3, 1, 7, 0.76); 3449 backdrop-filter: blur(3px); 3450 -webkit-backdrop-filter: blur(3px); 3451 3452 z-index: 9999; 3453 } 3454 3455 /* ========================= 3456 POPUP CONTAINER 3457 ========================= */ 3458 .popup-container { 3459 position: relative; 3460 width: 100%; 3461 max-width: 420px; 3462 overflow: hidden; 3463 3464 padding-bottom: 18px; 3465 3466 color: var(--sd-text); 3467 text-align: center; 3468 3469 background: 3470 radial-gradient( 3471 circle at top right, 3472 rgba(255, 60, 166, 0.16), 3473 transparent 34% 3474 ), 3475 radial-gradient( 3476 circle at bottom left, 3477 rgba(32, 231, 242, 0.11), 3478 transparent 38% 3479 ), 3480 linear-gradient( 3481 145deg, 3482 #08030d 0%, 3483 #170923 52%, 3484 #09040f 100% 3485 ); 3486 3487 border: 1px solid rgba(139, 44, 255, 0.58); 3488 border-radius: 10px 26px 10px 26px; 3489 3490 box-shadow: 3491 0 22px 55px rgba(0, 0, 0, 0.72), 3492 0 0 18px rgba(139, 44, 255, 0.34), 3493 0 0 32px rgba(255, 60, 166, 0.14); 3494 3495 animation: streetPopupIn 0.45s ease-out; 3496 } 3497 3498 /* Tekstur graffiti ringan */ 3499 .popup-container::before { 3500 content: ""; 3501 position: absolute; 3502 inset: 0; 3503 pointer-events: none; 3504 z-index: 1; 3505 3506 background: 3507 repeating-linear-gradient( 3508 -35deg, 3509 transparent 0, 3510 transparent 14px, 3511 rgba(255, 255, 255, 0.025) 15px, 3512 rgba(32, 231, 242, 0.035) 17px, 3513 transparent 19px 3514 ); 3515 3516 opacity: 0.8; 3517 } 3518 3519 /* Aksen neon di sisi kiri */ 3520 .popup-container::after { 3521 content: ""; 3522 position: absolute; 3523 top: 0; 3524 left: 0; 3525 3526 width: 5px; 3527 height: 100%; 3528 z-index: 3; 3529 3530 background: linear-gradient( 3531 to bottom, 3532 var(--sd-pink), 3533 var(--sd-purple), 3534 var(--sd-cyan) 3535 ); 3536 3537 box-shadow: 3538 0 0 10px rgba(255, 60, 166, 0.65), 3539 0 0 16px rgba(32, 231, 242, 0.35); 3540 } 3541 3542 @keyframes streetPopupIn { 3543 from { 3544 opacity: 0; 3545 transform: translateY(18px) scale(0.96); 3546 } 3547 3548 to { 3549 opacity: 1; 3550 transform: translateY(0) scale(1); 3551 } 3552 } 3553 3554 /* ========================= 3555 IMAGE 3556 ========================= */ 3557 .popup-image { 3558 position: relative; 3559 z-index: 2; 3560 3561 display: block; 3562 width: 100%; 3563 height: auto; 3564 3565 border-bottom: 1px solid rgba(32, 231, 242, 0.2); 3566 } 3567 3568 /* ========================= 3569 BUTTON WRAPPER 3570 ========================= */ 3571 .clk-btn-sgp { 3572 position: relative; 3573 z-index: 3; 3574 3575 width: 100%; 3576 display: grid; 3577 grid-template-columns: repeat(2, minmax(0, 1fr)); 3578 gap: 12px; 3579 3580 padding: 18px; 3581 font-family: "Segoe UI", Arial, sans-serif; 3582 } 3583 3584 .clk-btn-sgp a { 3585 position: relative; 3586 overflow: hidden; 3587 3588 display: flex;
3589 align-items: center; 3590 justify-content: center; 3591 3592 min-height: 50px; 3593 padding: 13px 12px; 3594 3595 color: var(--sd-white); 3596 text-align: center; 3597 text-decoration: none; 3598 text-transform: uppercase; 3599 3600 font-size: 13px; 3601 font-weight: 900; 3602 letter-spacing: 1.2px; 3603 3604 border-radius: 7px 15px 7px 15px; 3605 clip-path: polygon( 3606 var(--blade-cut) 0, 3607 100% 0, 3608 100% calc(100% - var(--blade-cut)), 3609 calc(100% - var(--blade-cut)) 100%, 3610 0 100%, 3611 0 var(--blade-cut) 3612 ); 3613 3614 transition: 3615 transform 0.22s ease, 3616 border-color 0.22s ease, 3617 box-shadow 0.22s ease, 3618 filter 0.22s ease; 3619 } 3620 3621 .clk-btn-sgp a::after { 3622 content: ""; 3623 position: absolute; 3624 inset: 0; 3625 pointer-events: none; 3626 3627 background: linear-gradient( 3628 110deg, 3629 transparent 25%, 3630 rgba(255, 255, 255, 0.16) 48%, 3631 transparent 70% 3632 ); 3633 3634 transform: translateX(-140%); 3635 transition: transform 0.45s ease; 3636 } 3637 3638 .clk-btn-sgp a:hover::after { 3639 transform: translateX(140%); 3640 } 3641 3642 .clk-btn-sgp a:hover { 3643 transform: translateY(-3px); 3644 filter: brightness(1.12); 3645 } 3646 3647 /* ========================= 3648 LOGIN BUTTON 3649 ========================= */ 3650 .login { 3651 color: var(--sd-cyan) !important; 3652 3653 background: 3654 linear-gradient( 3655 145deg, 3656 rgba(32, 231, 242, 0.08), 3657 rgba(139, 44, 255, 0.14) 3658 ), 3659 #0a0710; 3660 3661 border: 1px solid rgba(32, 231, 242, 0.65); 3662 3663 box-shadow: 3664 0 7px 16px rgba(0, 0, 0, 0.42), 3665 inset 0 0 10px rgba(32, 231, 242, 0.05); 3666 } 3667 3668 .login:hover { 3669 color: #ffffff !important; 3670 border-color: var(--sd-cyan); 3671 3672 box-shadow: 3673 0 10px 22px rgba(0, 0, 0, 0.5), 3674 0 0 13px rgba(32, 231, 242, 0.26); 3675 } 3676 3677 /* ========================= 3678 REGISTER BUTTON 3679 ========================= */ 3680 .register { 3681 color: #ffffff !important; 3682 3683 background: linear-gradient( 3684 135deg, 3685 var(--sd-purple), 3686 var(--sd-pink) 3687 ); 3688 3689 border: 1px solid rgba(255, 255, 255, 0.38); 3690 3691 box-shadow: 3692 0 7px 16px rgba(0, 0, 0, 0.42), 3693 0 0 10px rgba(255, 60, 166, 0.18); 3694 } 3695 3696 .register:hover { 3697 color: #ffffff !important; 3698 3699 background: linear-gradient( 3700 135deg, 3701 var(--sd-pink), 3702 var(--sd-violet) 3703 ); 3704 3705 border-color: #ffffff; 3706 3707 box-shadow: 3708 0 10px 22px rgba(0, 0, 0, 0.5), 3709 0 0 14px rgba(255, 60, 166, 0.32); 3710 } 3711 3712 .clk-btn-sgp a span { 3713 position: relative; 3714 z-index: 2; 3715 } 3716 3717 /* ========================= 3718 INFO TABLE 3719 ========================= */ 3720 .info-table { 3721 position: relative; 3722 z-index: 3; 3723 3724 width: calc(100% - 36px); 3725 margin: 2px auto 18px; 3726 3727 color: var(--sd-text); 3728 background: rgba(13, 7, 20, 0.9); 3729 3730 border-collapse: separate; 3731 border-spacing: 0; 3732 overflow: hidden; 3733 3734 border: 1px solid rgba(139, 44, 255, 0.25); 3735 border-radius: 12px; 3736 3737 font-size: 13px; 3738 box-shadow: 0 8px 20px rgba(0, 0, 0, 0.32); 3739 } 3740 3741 .info-table th { 3742 padding: 13px 10px; 3743 3744 color: #ffffff; 3745 background: linear-gradient( 3746 135deg, 3747 var(--sd-purple), 3748 var(--sd-pink) 3749 ); 3750 3751 border: 0; 3752 3753 font-size: 13px; 3754 font-weight: 900; 3755 letter-spacing: 0.8px; 3756 text-transform: uppercase; 3757 3758 text-shadow: 1px 1px 0 rgba(0, 0, 0, 0.35); 3759 } 3760 3761 .info-table td { 3762 padding: 11px 12px; 3763 3764 color: var(--sd-text); 3765 text-align: left; 3766 3767 border-bottom: 1px solid rgba(32, 231, 242, 0.1); 3768 } 3769 3770 .info-table tr:last-child td { 3771 border-bottom: none; 3772 } 3773 3774 .info-table tr:hover td { 3775 background: rgba(139, 44, 255, 0.07); 3776 } 3777 3778 /* ========================= 3779 FOOTER 3780 ========================= */ 3781 .popup-footer { 3782 position: relative; 3783 z-index: 3; 3784 3785 padding: 4px 20px 8px; 3786 3787 color: #bfb3ca; 3788 font-size: 12px; 3789 line-height: 1.6; 3790 text-align: center; 3791 } 3792 3793 /* ========================= 3794 DECORATIVE BORDER 3795 ========================= */ 3796 .luxury-border { 3797 position: absolute; 3798 inset: 9px; 3799 z-index: 4; 3800 pointer-events: none; 3801 3802 border: 1px solid rgba(32, 231, 242, 0.08); 3803 border-radius: 7px 20px 7px 20px; 3804 } 3805 3806 /* ========================= 3807 PARTICLE 3808 ========================= */ 3809 .gold-particle { 3810 display: none; 3811 } 3812 3813 /* ========================= 3814 CLOSE BUTTON 3815 ========================= */ 3816 .close-btn { 3817 position: absolute; 3818 top: 12px; 3819 right: 12px; 3820 z-index: 10; 3821 3822 width: 34px; 3823 height: 34px; 3824 3825 display: flex;
3826 align-items: center; 3827 justify-content: center; 3828 3829 cursor: pointer; 3830 3831 background: rgba(8, 4, 13, 0.82); 3832 border: 1px solid rgba(255, 60, 166, 0.58); 3833 border-radius: 9px 4px 9px 4px; 3834 3835 box-shadow: 3836 0 0 10px rgba(255, 60, 166, 0.18); 3837 3838 transition: 3839 transform 0.22s ease, 3840 background 0.22s ease, 3841 border-color 0.22s ease; 3842 } 3843 3844 .close-btn:hover { 3845 transform: rotate(90deg); 3846 background: var(--sd-pink); 3847 border-color: #ffffff; 3848 } 3849 3850 .close-btn::before, 3851 .close-btn::after { 3852 content: ""; 3853 position: absolute; 3854 3855 width: 16px; 3856 height: 2px; 3857 3858 background: #ffffff; 3859 border-radius: 3px; 3860 } 3861 3862 .close-btn::before { 3863 transform: rotate(45deg); 3864 } 3865 3866 .close-btn::after { 3867 transform: rotate(-45deg); 3868 } 3869 3870 /* ========================= 3871 RESPONSIVE 3872 ========================= */ 3873 @media (max-width: 480px) { 3874 .popup-overlay { 3875 padding: 12px; 3876 } 3877 3878 .popup-container { 3879 max-width: 355px; 3880 border-radius: 8px 20px 8px 20px; 3881 } 3882 3883 .clk-btn-sgp { 3884 grid-template-columns: 1fr; 3885 gap: 10px; 3886 padding: 14px; 3887 } 3888 3889 .clk-btn-sgp a { 3890 min-height: 47px; 3891 padding: 12px; 3892 font-size: 12px; 3893 } 3894 3895 .info-table { 3896 width: calc(100% - 28px); 3897 font-size: 12px; 3898 } 3899 3900 .info-table th, 3901 .info-table td { 3902 padding: 10px; 3903 } 3904 3905 .popup-footer { 3906 padding-right: 16px; 3907 padding-left: 16px; 3908 font-size: 11px; 3909 } 3910 3911 .close-btn { 3912 width: 30px; 3913 height: 30px; 3914 } 3915 } 3916 3917 @media (prefers-reduced-motion: reduce) { 3918 .popup-container, 3919 .clk-btn-sgp a, 3920 .close-btn { 3921 animation: none; 3922 transition: none; 3923 } 3924 } 3925</style> 3926 <div class="popup-overlay" id="popupOverlay"> 3927 <div class="popup-container"> 3928 <!-- Tombol Close --> 3929 <div class="close-btn" onclick="closePopup()"></div> 3930 <!-- Partikel emas untuk efek elegan --> 3931 <div class="gold-particle" style="width: 10px; height: 10px; top: 15%; left: 12%; animation-delay: 0s;"></div> 3932 <div class="gold-particle" style="width: 8px; height: 8px; top: 35%; left: 88%; animation-delay: 1.5s;"></div> 3933 <div class="gold-particle" style="width: 12px; height: 12px; top: 65%; left: 18%; animation-delay: 3s;"></div> 3934 <div class="gold-particle" style="width: 6px; height: 6px; top: 25%; left: 75%; animation-delay: 4.5s;"></div> 3935 <div class="gold-particle" style="width: 9px; height: 9px; top: 80%; left: 60%; animation-delay: 6s;"></div> 3936 <!-- Border mewah --> 3937 <div class="luxury-border"></div> 3938 <div class="Popup Banner"> 3939 <img src="https://slotvipbogor.link/images/apk-slotvip.webp" alt="Popup Banner" class="popup-image" /> 3940 <div class="clk-btn-sgp" style="font-size: 20px;"> 3941 <a href="https://klikmudah.com/" target="_blank" rel="nofollow noreferrer" 3942 class="login">LOGIN</a> 3943 <a href="https://klikmudah.com/" target="_blank" rel="nofollow noreferrer" 3944 class="register">DAFTAR</a> 3945 </div> 3946 <div class="popup-footer"> 3947 SLOTVIP ð Versi Apk Terbaru Game Slot Pelayanan VVIP 2026<br/> 3948 <span style="color: #ffd900; font-weight: 600; text-shadow: 0 0 5px rgba(212, 175, 55, 0.5);">© COPYRIGHT 2026 SLOTVIP ð Seo HADFLKHAF</span> 3949 </div> 3950 </div> 3951 </div> 3952 </div> 3953
3953<script> 3954 function closePopup() { 3955 const popupOverlay = document.getElementById('popupOverlay'); 3956 popupOverlay.style.opacity = '0'; 3957 popupOverlay.style.transition = 'opacity 0.3s ease'; 3958 3959 setTimeout(() => { 3960 popupOverlay.style.display = 'none'; 3961 }, 300); 3962 } 3963 3964 // Menutup popup ketika mengklik area di luar popup 3965 document.getElementById('popupOverlay').addEventListener('click', function(event) { 3966 if (event.target === this) { 3967 closePopup(); 3968 } 3969 }); 3970 </script>
3970 3971 <style nonce="se3iyzEHMc9FQEB4wSyd0w=="> 3972 /* Chat Widget Styles - Lightweight & Minimal */ 3973 .chat-widget { 3974 position: fixed; 3975 bottom: 20px; 3976 right: 20px; 3977 z-index: 9999; 3978 font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, sans-serif; 3979 } 3980 3981 /* Hide floating button on mobile - use bottom nav instead */ 3982 @media (max-width: 640px) { 3983 .chat-toggle-btn { 3984 display: none !important; 3985 } 3986 3987 /* Ensure popup is still visible on mobile even when button is hidden */ 3988 .chat-widget { 3989 display: block !important; 3990 } 3991 3992 .chat-popup { 3993 display: none; /* Hidden by default, shown via JS */ 3994 } 3995 3996 .chat-popup[style*="display: block"], 3997 .chat-popup[style*="display:block"] { 3998 display: block !important; 3999 } 4000 } 4001 4002 .chat-toggle-btn { 4003 width: 60px; 4004 height: 60px; 4005 border-radius: 50%; 4006 background: linear-gradient(135deg, #F28C1A 0%, #D97809 100%); 4007 border: none; 4008 color: white; 4009 cursor: pointer; 4010 box-shadow: 0 4px 12px rgba(242, 140, 26, 0.3); 4011 position: relative; 4012 transition: transform 0.2s, box-shadow 0.2s; 4013 } 4014 4015 .chat-toggle-btn:hover { 4016 transform: scale(1.05); 4017 box-shadow: 0 6px 20px rgba(242, 140, 26, 0.4); 4018 } 4019 4020 #chat-toggle-btn .chat-icon { 4021 position: absolute; 4022 top: 50%; 4023 left: 50%; 4024 transform: translate(-50%, -50%); 4025 width: 28px !important; 4026 height: 28px !important; 4027 } 4028 4029 .chat-unread-badge { 4030 position: absolute; 4031 top: -5px; 4032 right: -5px; 4033 background: #ef4444; 4034 color: white; 4035 border-radius: 12px; 4036 padding: 2px 6px; 4037 font-size: 11px; 4038 font-weight: 600; 4039 min-width: 20px; 4040 text-align: center; 4041 } 4042 4043 .chat-popup { 4044 position: absolute; 4045 bottom: 80px; 4046 right: 0; 4047 width: 380px; 4048 max-width: calc(100vw - 40px); 4049 height: 500px; 4050 max-height: calc(100vh - 120px); 4051 background: white; 4052 border-radius: 12px; 4053 box-shadow: 0 10px 40px rgba(0,0,0,0.2); 4054 display: flex; 4055 flex-direction: column; 4056 overflow: hidden; 4057 } 4058 4059 .chat-popup-header { 4060 background: linear-gradient(135deg, #F28C1A 0%, #D97809 100%); 4061 color: white; 4062 padding: 16px 20px; 4063 display: flex; 4064 justify-content: space-between; 4065 align-items: center; 4066 flex-shrink: 0; 4067 } 4068 4069 .chat-header-title { 4070 display: flex; 4071 flex-direction: column; 4072 gap: 2px; 4073 min-height: 0; 4074 } 4075 4076 .chat-popup-header h3 { 4077 margin: 0; 4078 font-size: 18px; 4079 font-weight: 600; 4080 line-height: 1.2; 4081 } 4082 4083 .chat-operating-hours { 4084 font-size: 11px; 4085 opacity: 0.9; 4086 font-weight: 400; 4087 display: flex; 4088 align-items: center; 4089 gap: 4px; 4090 line-height: 1.2; 4091 } 4092 4093 .chat-operating-hours svg { 4094 width: 12px; 4095 height: 12px; 4096 opacity: 0.8; 4097 flex-shrink: 0; 4098 } 4099 4100 .chat-header-actions { 4101 display: flex; 4102 align-items: center; 4103 gap: 8px; 4104 } 4105 4106 /* Notification Toggle Button */ 4107 .btn-notif-toggle { 4108 background: none; 4109 border: none; 4110 color: white; 4111 font-size: 18px; 4112 cursor: pointer; 4113 padding: 4px 8px; 4114 transition: all 0.2s; 4115 opacity: 0.8; 4116 } 4117 4118 .btn-notif-toggle:hover { 4119 opacity: 1;
4120 transform: scale(1.1); 4121 } 4122 4123 /* Icon states */ 4124 .btn-notif-toggle[data-status="not-subscribed"] svg { 4125 opacity: 0.7; 4126 } 4127 4128 .btn-notif-toggle[data-status="not-subscribed"]:hover svg { 4129 opacity: 1; 4130 } 4131 4132 .btn-notif-toggle[data-status="subscribed"] svg { 4133 opacity: 1; 4134 animation: bellRing 2s ease-in-out; 4135 } 4136 4137 .btn-notif-toggle[data-status="blocked"] svg { 4138 color: #ff6b6b; 4139 } 4140 4141 .btn-notif-toggle[data-status="not-supported"] { 4142 display: none !important; 4143 } 4144 4145 @keyframes bellRing { 4146 0%, 100% { transform: rotate(0deg); } 4147 10%, 30% { transform: rotate(-10deg); } 4148 20%, 40% { transform: rotate(10deg); } 4149 } 4150 4151 /* Notification Info Bar */ 4152 .chat-notif-info-bar { 4153 position: absolute; 4154 top: 64px; 4155 left: 0; 4156 right: 0; 4157 background: linear-gradient(to right, #e3f2fd, #f5f5f5); 4158 border-bottom: 1px solid #bbdefb; 4159 padding: 8px 12px; 4160 display: flex; 4161 align-items: center; 4162 gap: 8px; 4163 font-size: 12px; 4164 color: #616161; 4165 z-index: 10; 4166 animation: slideDown 0.3s ease; 4167 } 4168 4169 .chat-notif-info-bar svg { 4170 flex-shrink: 0; 4171 } 4172 4173 .chat-notif-info-bar .small { 4174 flex: 1; 4175 line-height: 1.4; 4176 } 4177 4178 .chat-notif-info-bar .btn-dismiss { 4179 background: none; 4180 border: none; 4181 color: #9e9e9e; 4182 cursor: pointer; 4183 padding: 0 4px; 4184 font-size: 16px; 4185 transition: color 0.2s; 4186 } 4187 4188 .chat-notif-info-bar .btn-dismiss:hover { 4189 color: #616161; 4190 } 4191 4192 @keyframes slideDown { 4193 from { 4194 max-height: 0; 4195 opacity: 0; 4196 } 4197 to { 4198 max-height: 50px; 4199 opacity: 1; 4200 } 4201 } 4202 4203 .chat-close-btn { 4204 background: none; 4205 border: none; 4206 color: white; 4207 font-size: 28px; 4208 line-height: 1; 4209 cursor: pointer; 4210 padding: 0; 4211 width: 30px; 4212 height: 30px; 4213 } 4214 4215 .chat-popup-body { 4216 flex: 1 1 auto; 4217 display: flex; 4218 flex-direction: column; 4219 min-height: 0; 4220 overflow: hidden; 4221 height: calc(100% - 64px); 4222 position: relative; 4223 transition: padding-top 0.3s ease; 4224 } 4225 4226 /* Add padding when info bar is visible */ 4227 .chat-popup-body.has-info-bar { 4228 padding-top: 40px; 4229 } 4230 4231 .chat-view { 4232 flex: 1 1 auto; 4233 display: none; 4234 flex-direction: column; 4235 min-height: 0; 4236 overflow: hidden; 4237 } 4238 4239 #chat-list-view { 4240 display: flex; 4241 } 4242 4243 #chat-messages-view { 4244 display: none; 4245 } 4246 4247 #chat-messages-view.active { 4248 display: flex; 4249 flex-direction: column; 4250 } 4251 4252 #chat-new-view { 4253 display: none; 4254 } 4255 4256 #chat-new-view.active { 4257 display: flex; 4258 } 4259 4260 .chat-conversations-list { 4261 flex: 1; 4262 overflow-y: auto; 4263 padding: 0; 4264 background: white; 4265 } 4266 4267 /* Custom Scrollbar for Conversations List */ 4268 .chat-conversations-list::-webkit-scrollbar { 4269 width: 6px; 4270 } 4271 4272 .chat-conversations-list::-webkit-scrollbar-track { 4273 background: #f1f1f1; 4274 } 4275 4276 .chat-conversations-list::-webkit-scrollbar-thumb { 4277 background: #F28C1A; 4278 border-radius: 3px; 4279 } 4280 4281 .chat-conversations-list::-webkit-scrollbar-thumb:hover { 4282 background: #D97809; 4283 } 4284 4285 /* Firefox */ 4286 .chat-conversations-list { 4287 scrollbar-width: thin; 4288 scrollbar-color: #F28C1A #f1f1f1; 4289 } 4290 4291 .chat-conversation-item { 4292 padding: 12px 16px; 4293 cursor: pointer; 4294 display: flex; 4295 gap: 12px; 4296 align-items: flex-start; 4297 transition: background 0.15s ease; 4298 color: #33371f;
4299 border-bottom: 1px solid #f0f0f0; 4300 } 4301 4302 .chat-conversation-item:hover { 4303 background: #f5f5f5; 4304 } 4305 4306 .chat-conversation-item.active { 4307 background: #FFF5EB; 4308 } 4309 4310 /* WhatsApp-like Avatar */ 4311 .conversation-avatar { 4312 width: 48px; 4313 height: 48px; 4314 border-radius: 50%; 4315 background: linear-gradient(135deg, #F28C1A 0%, #D97809 100%); 4316 flex-shrink: 0; 4317 display: flex; 4318 align-items: center; 4319 justify-content: center; 4320 color: white; 4321 font-weight: 600; 4322 font-size: 18px; 4323 } 4324 4325 .conversation-avatar svg { 4326 width: 24px; 4327 height: 24px; 4328 } 4329 4330 /* WhatsApp-like Content */ 4331 .conversation-content { 4332 flex: 1; 4333 min-width: 0; 4334 display: flex; 4335 flex-direction: column; 4336 gap: 4px; 4337 } 4338 4339 .conversation-header { 4340 display: flex; 4341 justify-content: space-between; 4342 align-items: center; 4343 gap: 8px; 4344 } 4345 4346 .conversation-name { 4347 font-weight: 600; 4348 font-size: 15px; 4349 color: #111; 4350 white-space: nowrap; 4351 overflow: hidden; 4352 text-overflow: ellipsis; 4353 } 4354 4355 .conversation-time { 4356 font-size: 12px; 4357 color: #7d8166; 4358 flex-shrink: 0; 4359 } 4360 4361 .conversation-preview { 4362 display: flex; 4363 justify-content: space-between; 4364 align-items: center; 4365 gap: 8px; 4366 } 4367 4368 .conversation-message { 4369 font-size: 14px; 4370 color: #667781; 4371 white-space: nowrap; 4372 overflow: hidden; 4373 text-overflow: ellipsis; 4374 margin: 0; 4375 flex: 1; 4376 } 4377 4378 .conversation-unread { 4379 background: #d32525; 4380 color: white; 4381 border-radius: 12px; 4382 padding: 2px 8px; 4383 font-size: 12px; 4384 font-weight: 600; 4385 min-width: 20px; 4386 text-align: center; 4387 flex-shrink: 0; 4388 } 4389 4390 /* Active item styling */ 4391 .chat-conversation-item.active .conversation-name { 4392 color: #F28C1A; 4393 } 4394 4395 .chat-conversation-item.active .conversation-time { 4396 color: #F28C1A; 4397 } 4398 4399 .chat-new-btn { 4400 margin: 12px; 4401 padding: 12px; 4402 background: linear-gradient(135deg, #F28C1A 0%, #D97809 100%); 4403 color: white; 4404 border: none; 4405 border-radius: 8px; 4406 cursor: pointer; 4407 font-weight: 500; 4408 font-size: 14px; 4409 display: flex; 4410 align-items: center; 4411 justify-content: center; 4412 gap: 8px; 4413 transition: all 0.2s; 4414 flex-shrink: 0; 4415 } 4416 4417 .chat-new-btn:hover { 4418 transform: translateY(-1px); 4419 box-shadow: 0 4px 8px rgba(242, 140, 26, 0.3); 4420 } 4421 4422 .chat-conversation-title { 4423 flex: 1; 4424 font-weight: 600; 4425 font-size: 16px; 4426 color: #1f2937; 4427 } 4428 4429 .chat-messages-container { 4430 flex: 1; 4431 overflow-y: auto; 4432 padding: 16px; 4433 display: flex; 4434 flex-direction: column; 4435 gap: 8px; 4436 min-height: 0; 4437 background: #E5DDD5; 4438 } 4439 4440 /* Custom Scrollbar for Messages Container */ 4441 .chat-messages-container::-webkit-scrollbar { 4442 width: 6px; 4443 } 4444 4445 .chat-messages-container::-webkit-scrollbar-track { 4446 background: rgba(0, 0, 0, 0.05); 4447 } 4448 4449 .chat-messages-container::-webkit-scrollbar-thumb { 4450 background: rgba(242, 140, 26, 0.6); 4451 border-radius: 3px; 4452 } 4453 4454 .chat-messages-container::-webkit-scrollbar-thumb:hover { 4455 background: #F28C1A; 4456 } 4457 4458 /* Firefox */ 4459 .chat-messages-container { 4460 scrollbar-width: thin; 4461 scrollbar-color: rgba(242, 140, 26, 0.6) rgba(0, 0, 0, 0.05); 4462 } 4463 4464 /* WhatsApp Group-like Messages */ 4465 .chat-message { 4466 display: flex; 4467 margin-bottom: 4px;
4468 animation: fadeIn 0.2s ease; 4469 } 4470 4471 @keyframes fadeIn { 4472 from { opacity: 0; transform: translateY(10px); } 4473 to { opacity: 1; transform: translateY(0); } 4474 } 4475 4476 .chat-message.mine { 4477 justify-content: flex-end; 4478 } 4479 4480 .chat-message-bubble { 4481 max-width: 80%; 4482 padding: 6px 8px 8px 10px; 4483 border-radius: 8px; 4484 position: relative; 4485 box-shadow: 0 1px 0.5px rgba(0,0,0,0.13); 4486 } 4487 4488 /* Bubble from others (Admin/CS) */ 4489 .chat-message:not(.mine) .chat-message-bubble { 4490 background: #FFFFFF; 4491 border-radius: 0 8px 8px 8px; 4492 } 4493 4494 /* Bubble tail for others */ 4495 .chat-message:not(.mine) .chat-message-bubble::before { 4496 content: ''; 4497 position: absolute; 4498 top: 0; 4499 left: -8px; 4500 width: 0; 4501 height: 0; 4502 border-style: solid; 4503 border-width: 0 8px 13px 0; 4504 border-color: transparent #FFFFFF transparent transparent; 4505 } 4506 4507 /* Bubble from user (mine) */ 4508 .chat-message.mine .chat-message-bubble { 4509 background: #e4f5d0; /* Light blue for user messages */ 4510 border-radius: 8px 0 8px 8px; 4511 } 4512 4513 /* Bubble tail for mine */ 4514 .chat-message.mine .chat-message-bubble::before { 4515 content: ''; 4516 position: absolute; 4517 top: 0; 4518 right: -8px; 4519 width: 0; 4520 height: 0; 4521 border-style: solid; 4522 border-width: 0 0 13px 8px; 4523 border-color: transparent transparent transparent #eaf5d0; 4524 } 4525 4526 .message-sender { 4527 font-size: 12.5px; 4528 font-weight: 600; 4529 color: #F28C1A !important; 4530 margin-bottom: 4px; 4531 } 4532 4533 .chat-message.mine .message-sender { 4534 display: none; 4535 } 4536 4537 /* Message text */ 4538 .message-text { 4539 font-size: 14px; 4540 line-height: 19px; 4541 color: #000000 !important; 4542 word-wrap: break-word; 4543 white-space: pre-wrap; 4544 margin-bottom: 4px; 4545 } 4546 4547 /* Message metadata (time + status) */ 4548 .message-meta { 4549 display: flex; 4550 align-items: center; 4551 justify-content: flex-end; 4552 gap: 4px; 4553 margin-top: 2px; 4554 } 4555 4556 .message-time { 4557 font-size: 11px; 4558 color: #728166 !important; 4559 line-height: 15px; 4560 } 4561 4562 /* Use multiple selectors to override global styles */ 4563 .chat-message-bubble .message-status, 4564 .message-meta .message-status, 4565 .chat-message .message-status { 4566 width: 16px !important; 4567 height: 16px !important; 4568 min-width: 16px !important; 4569 min-height: 16px !important; 4570 max-width: 16px !important; 4571 max-height: 16px !important; 4572 flex-shrink: 0; 4573 color: #728166 !important; 4574 fill: currentColor !important; 4575 } 4576 4577 .chat-message:not(.mine) .message-status { 4578 display: none; 4579 } 4580 4581 /* Loading dots animation */ 4582 @keyframes loadingDots { 4583 0%, 20% { content: '.'; } 4584 40% { content: '..'; } 4585 60%, 100% { content: '...'; } 4586 } 4587 4588 .message-status.loading::after { 4589 content: '...'; 4590 animation: loadingDots 1.5s infinite; 4591 font-size: 16px; 4592 line-height: 16px; 4593 } 4594 4595 .message-status.loading path { 4596 display: none; 4597 } 4598 4599 .message-status.failed { 4600 color: #ef4444 !important; 4601 cursor: pointer; 4602 } 4603 4604 .message-status.sent { 4605 color: #667781 !important; 4606 } 4607 4608 .chat-new-form { 4609 flex: 1; 4610 overflow-y: auto; 4611 padding: 16px; 4612 display: flex; 4613 flex-direction: column; 4614 } 4615 4616 .chat-new-form form { 4617 display: flex; 4618 flex-direction: column; 4619 gap: 16px; 4620 flex: 1; 4621 } 4622 4623 .chat-new-form .form-group { 4624 display: flex; 4625 flex-direction: column; 4626 gap: 6px; 4627 } 4628 4629 .chat-new-form label { 4630 font-size: 14px; 4631 font-weight: 500; 4632 color: #374151; 4633 } 4634 4635 .chat-new-form .form-control { 4636 width: 100%; 4637 padding: 10px 12px; 4638 border: 1px solid #d1d5db; 4639 border-radius: 8px; 4640 font-size: 14px; 4641 font-family: inherit; 4642 transition: border-color 0.2s; 4643 box-sizing: border-box; 4644 } 4645 4646 .chat-new-form .form-control:focus { 4647 outline: none; 4648 border-color: #F28C1A; 4649 box-shadow: 0 0 0 3px rgba(242, 140, 26, 0.1); 4650 } 4651 4652 .chat-new-form textarea.form-control { 4653 resize: vertical; 4654 min-height: 100px; 4655 } 4656 4657 .chat-new-form .btn { 4658 padding: 12px 20px; 4659 border: none; 4660 border-radius: 8px; 4661 font-size: 15px; 4662 font-weight: 500; 4663 cursor: pointer; 4664 transition: all 0.2s; 4665 text-align: center; 4666 } 4667 4668 .chat-new-form .btn-primary { 4669 background: linear-gradient(135deg, #F28C1A 0%, #D97809 100%); 4670 color: white; 4671 } 4672 4673 .chat-new-form .btn-primary:hover { 4674 transform: translateY(-1px); 4675 box-shadow: 0 4px 8px rgba(242, 140, 26, 0.3); 4676 } 4677 4678 .chat-new-form .btn-primary:active { 4679 transform: scale(0.98); 4680 } 4681 4682 .chat-new-form .btn-block { 4683 width: 100%; 4684 margin-top: auto; 4685 } 4686 4687 .chat-message-form { 4688 padding: 12px; 4689 border-top: 1px solid #e5e7eb; 4690 display: flex; 4691 flex-wrap: wrap; 4692 gap: 8px; 4693 align-items: flex-end; 4694 flex-shrink: 0; 4695 background: white; 4696 } 4697 4698 .chat-product-card { 4699 flex: 1 1 100%; 4700 max-width: 100%; 4701 display: flex; 4702 gap: 12px; 4703 padding: 12px; 4704 background: #f3f4f6; 4705 border-radius: 8px; 4706 margin-bottom: 4px;
4707 border: 1px solid #e5e7eb; 4708 } 4709 4710 .chat-product-card img { 4711 width: 60px; 4712 height: 60px; 4713 object-fit: cover; 4714 border-radius: 6px; 4715 flex-shrink: 0; 4716 } 4717 4718 .chat-product-card-content { 4719 flex: 1; 4720 min-width: 0; 4721 } 4722 4723 .chat-product-card-name { 4724 font-weight: 500; 4725 font-size: 14px; 4726 color: #1f2937; 4727 margin-bottom: 4px; 4728 white-space: nowrap; 4729 overflow: hidden; 4730 text-overflow: ellipsis; 4731 } 4732 4733 .chat-product-card-variant { 4734 font-size: 12px; 4735 color: #74806b; 4736 margin-bottom: 4px; 4737 } 4738 4739 .chat-product-card-price { 4740 font-size: 13px; 4741 color: #8bea66; 4742 font-weight: 600; 4743 } 4744 4745 .chat-product-card-remove { 4746 align-self: flex-start; 4747 background: none; 4748 border: none; 4749 color: #9ca3af; 4750 cursor: pointer; 4751 padding: 4px; 4752 font-size: 18px; 4753 line-height: 1; 4754 transition: color 0.2s; 4755 } 4756 4757 .chat-product-card-remove:hover { 4758 color: #ef4444; 4759 } 4760 4761 /* Product card in messages (read-only display) */ 4762 .message-product-card { 4763 display: flex; 4764 gap: 10px; 4765 padding: 10px; 4766 background: rgba(255, 255, 255, 0.5); 4767 border-radius: 8px; 4768 margin-bottom: 6px; 4769 border: 1px solid rgba(0, 0, 0, 0.08); 4770 align-items: center; 4771 } 4772 4773 .chat-message.mine .message-product-card { 4774 background: rgba(255, 255, 255, 0.7); 4775 } 4776 4777 .message-product-card img { 4778 width: 50px; 4779 height: 50px; 4780 object-fit: cover; 4781 border-radius: 6px; 4782 flex-shrink: 0; 4783 } 4784 4785 .message-product-info { 4786 flex: 1; 4787 min-width: 0; 4788 } 4789 4790 .message-product-name { 4791 font-weight: 500; 4792 font-size: 13px; 4793 color: #33371f; 4794 margin-bottom: 2px; 4795 overflow: hidden; 4796 text-overflow: ellipsis; 4797 display: -webkit-box; 4798 -webkit-line-clamp: 2; 4799 -webkit-box-orient: vertical; 4800 line-height: 1.3; 4801 } 4802 4803 .message-product-variant { 4804 font-size: 11px; 4805 color: #78806b; 4806 margin-bottom: 2px; 4807 } 4808 4809 .message-product-price { 4810 font-size: 12px; 4811 color: #c7ea66; 4812 font-weight: 600; 4813 } 4814 4815 .message-product-link { 4816 flex-shrink: 0; 4817 width: 32px; 4818 height: 32px; 4819 display: flex; 4820 align-items: center; 4821 justify-content: center; 4822 background: rgba(102, 126, 234, 0.1); 4823 border-radius: 6px; 4824 color: #c7ea66; 4825 text-decoration: none; 4826 transition: all 0.2s; 4827 } 4828 4829 .message-product-link:hover { 4830 background: #b7ea66; 4831 color: white; 4832 } 4833 4834 .message-product-link svg { 4835 width: 16px; 4836 height: 16px; 4837 } 4838 4839 .chat-message-input { 4840 flex: 1; 4841 border: 1px solid #d1d5db; 4842 border-radius: 20px; 4843 padding: 10px 16px; 4844 resize: none; 4845 max-height: 100px; 4846 font-family: inherit; 4847 font-size: 14px; 4848 line-height: 1.5; 4849 box-sizing: border-box; 4850 overflow-y: hidden; 4851 } 4852 4853 .chat-message-input:focus { 4854 outline: none; 4855 border-color: #F28C1A; 4856 box-shadow: 0 0 0 3px rgba(242, 140, 26, 0.1); 4857 } 4858 4859 .chat-send-btn { 4860 width: 40px; 4861 height: 40px; 4862 border-radius: 50%; 4863 background: linear-gradient(135deg, #F28C1A 0%, #D97809 100%); 4864 border: none; 4865 color: white; 4866 cursor: pointer; 4867 flex-shrink: 0; 4868 display: flex; 4869 align-items: center; 4870 justify-content: center; 4871 transition: all 0.2s; 4872 } 4873 4874 .chat-send-btn:hover { 4875 transform: scale(1.05); 4876 box-shadow: 0 2px 8px rgba(242, 140, 26, 0.3); 4877 } 4878 4879 .chat-send-btn:active { 4880 transform: scale(0.95); 4881 } 4882 4883 .chat-loading { 4884 text-align: center; 4885 padding: 20px; 4886 color: #6b7280; 4887 } 4888 4889 /* Date Separator (WhatsApp-style) */ 4890 .date-separator { 4891 display: flex; 4892 align-items: center; 4893 gap: 12px; 4894 margin: 24px 0 16px; 4895 opacity: 0; 4896 animation: fadeInSeparator 0.3s ease forwards; 4897 } 4898 4899 @keyframes fadeInSeparator { 4900 from { 4901 opacity: 0; 4902 transform: translateY(-10px); 4903 } 4904 to { 4905 opacity: 1;
4906 transform: translateY(0); 4907 } 4908 } 4909 4910 .date-separator-line { 4911 flex: 1; 4912 height: 1px; 4913 background: linear-gradient(90deg, transparent, rgba(0, 0, 0, 0.1) 50%, transparent); 4914 } 4915 4916 .date-separator-text { 4917 flex-shrink: 0; 4918 padding: 4px 12px; 4919 background: #e9ecef; 4920 color: #6c757d; 4921 font-size: 11px; 4922 font-weight: 600; 4923 text-transform: uppercase; 4924 letter-spacing: 0.5px; 4925 border-radius: 12px; 4926 box-shadow: 0 1px 2px rgba(0, 0, 0, 0.05); 4927 } 4928 4929 /* Mobile responsive */ 4930 @media (max-width: 640px) { 4931 .chat-popup { 4932 position: fixed !important; /* Override absolute positioning */ 4933 bottom: 45px !important; /* Above bottom nav */ 4934 right: 0 !important; 4935 left: 0 !important; 4936 width: 100% !important; 4937 max-width: 100% !important; 4938 /* Use dvh (dynamic viewport height) for browser UI awareness */ 4939 height: calc(100dvh - 45px) !important; 4940 max-height: calc(100dvh - 45px) !important; 4941 /* Fallback for browsers that don't support dvh */ 4942 height: calc(var(--viewport-height, 100vh) - 45px) !important; 4943 max-height: calc(var(--viewport-height, 100vh) - 45px) !important; 4944 border-radius: 0 !important; 4945 z-index: 9999 !important; 4946 } 4947 4948 .chat-popup-header { 4949 border-radius: 0; 4950 } 4951 4952 .chat-messages-container, 4953 .chat-conversations-list { 4954 /* Adjust for mobile keyboard using dynamic viewport */ 4955 max-height: calc(100dvh - 190px); 4956 /* Fallback for browsers that don't support dvh */ 4957 max-height: calc(var(--viewport-height, 100vh) - 190px); 4958 } 4959 } 4960 </style> 4961 4962 <!-- Chat Widget Button --> 4963 <div id="chat-widget" class="chat-widget" 4964 data-user-id="" 4965 data-is-logged-in="false" 4966 data-csrf-token="df5d776748b1ed8c8dd0d987bae99b1ee3dea6c6dcbe0eedb1bea766c56d569a"> 4967 <button id="chat-toggle-btn" class="chat-toggle-btn" aria-label="Toggle chat"> 4968 <svg class="chat-icon" width="28" height="28" viewBox="0 0 640 640" fill="currentColor"> 4969 <path d="M320 128C241 128 175.3 185.3 162.3 260.7C171.6 257.7 181.6 256 192 256L208 256C234.5 256 256 277.5 256 304L256 400C256 426.5 234.5 448 208 448L192 448C139 448 96 405 96 352L96 288C96 164.3 196.3 64 320 64C443.7 64 544 164.3 544 288L544 456.1C544 522.4 490.2 576.1 423.9 576.1L336 576L304 576C277.5 576 256 554.5 256 528C256 501.5 277.5 480 304 480L336 480C362.5 480 384 501.5 384 528L384 528L424 528C463.8 528 496 495.8 496 456L496 435.1C481.9 443.3 465.5 447.9 448 447.9L432 447.9C405.5 447.9 384 426.4 384 399.9L384 303.9C384 277.4 405.5 255.9 432 255.9L448 255.9C458.4 255.9 468.3 257.5 477.7 260.6C464.7 185.3 399.1 127.9 320 127.9z"/> 4970 </svg> 4971 <span id="chat-unread-badge" class="chat-unread-badge" style="display: none;">0</span> 4972 </button> 4973 4974 <div id="chat-popup" class="chat-popup" style="display: none;"> 4975 <div class="chat-popup-header"> 4976 <div class="chat-header-title"> 4977 <h3>Bantuan</h3> 4978 <span id="chatOperatingHours" class="chat-operating-hours" style="display: none;"></span> 4979 </div> 4980 <div class="chat-header-actions"> 4981 <button id="chatNotifToggle" class="btn-notif-toggle" data-status="not-supported" title="Push notification" style="display: none;"> 4982 <svg width="18" height="18" viewBox="0 0 24 24" fill="currentColor"> 4983 <path d="M12 22c1.1 0 2-.9 2-2h-4c0 1.1.89 2 2 2zm6-6v-5c0-3.07-1.64-5.64-4.5-6.32V4c0-.83-.67-1.5-1.5-1.5s-1.5.67-1.5 1.5v.68C7.63 5.36 6 7.92 6 11v5l-2 2v1h16v-1l-2-2z"/> 4984 </svg> 4985 </button> 4986 <button id="chat-close-btn" class="chat-close-btn" aria-label="Close chat">
4986Ã</button> 4987 </div> 4988 </div> 4989 4990 <!-- Notification Info Bar (conditional) --> 4991 <div class="chat-notif-info-bar" id="chatNotifInfoBar" style="display:none;"> 4992 <svg width="14" height="14" viewBox="0 0 24 24" fill="#ffc107"> 4993 <path d="M9 21c0 .55.45 1 1 1h4c.55 0 1-.45 1-1v-1H9v1zm3-19C8.14 2 5 5.14 5 9c0 2.38 1.19 4.47 3 5.74V17c0 .55.45 1 1 1h6c.55 0 1-.45 1-1v-2.26c1.81-1.27 3-3.36 3-5.74 0-3.86-3.14-7-7-7zm2.85 11.1l-.85.6V16h-4v-2.3l-.85-.6C7.8 12.16 7 10.63 7 9c0-2.76 2.24-5 5-5s5 2.24 5 5c0 1.63-.8 3.16-2.15 4.1z"/> 4994 </svg> 4995 <span class="small">Aktifkan notifikasi untuk pemberitahuan balasan</span> 4996 <button class="btn-dismiss" onclick="ChatNotification.dismissInfo()">â</button> 4997 </div> 4998 4999 <div class="chat-popup-body"> 5000 <!-- Conversations List View --> 5001 <div id="chat-list-view" class="chat-view"> 5002 <div id="chat-conversations-list" class="chat-conversations-list"> 5003 <div class="chat-loading">Memuat...</div> 5004 <!-- Conversation Item Structure (rendered by JS): 5005 <div class="chat-conversation-item"> 5006 <div class="conversation-avatar"> 5007 <svg>...</svg> 5008 </div> 5009 <div class="conversation-content"> 5010 <div class="conversation-header"> 5011 <span class="conversation-name">Admin Support</span> 5012 <span class="conversation-time">10:30</span> 5013 </div> 5014 <div class="conversation-preview"> 5015 <p class="conversation-message">Terima kasih telah menghubungi kami...</p> 5016 <span class="conversation-unread">2</span> 5017 </div> 5018 </div> 5019 </div> 5020 --> 5021 </div> 5022 <button id="chat-new-btn" class="chat-new-btn"> 5023 <svg width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2"> 5024 <line x1="12" y1="5" x2="12" y2="19"></line> 5025 <line x1="5" y1="12" x2="19" y2="12"></line> 5026 </svg> 5027 Percakapan Baru 5028 </button> 5029 </div> 5030 5031 <!-- Chat Messages View --> 5032 <div id="chat-messages-view" class="chat-view" style="display: none;"> 5033 <div id="chat-messages-container" class="chat-messages-container"> 5034 <div class="chat-loading">Memuat pesan...</div> 5035 <!-- Message Structure (rendered by JS): 5036 <div class="chat-message"> (or .chat-message.mine) 5037 <div class="chat-message-bubble"> 5038 <div class="message-sender">Admin Support</div> (only for non-mine) 5039 <div class="message-text">Halo, ada yang bisa dibantu?</div> 5040 <div class="message-meta"> 5041 <span class="message-time">10:30</span> 5042 <svg class="message-status">...</svg> (only for mine) 5043 </div> 5044 </div> 5045 </div> 5046 --> 5047 </div> 5048 5049 <form id="chat-message-form" class="chat-message-form"> 5050 <input type="hidden" id="chat-current-conversation-id" value=""> 5051 <textarea 5052 id="chat-message-input" 5053 class="chat-message-input" 5054 placeholder="Ketik pesan..." 5055 rows="1" 5056 maxlength="5000" 5057 ></textarea> 5058 <button type="submit" class="chat-send-btn" aria-label="Send message"> 5059 <svg width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2"> 5060 <line x1="22" y1="2" x2="11" y2="
506013"></line> 5061 <polygon points="22 2 15 22 11 13 2 9 22 2"></polygon> 5062 </svg> 5063 </button> 5064 </form> 5065 </div> 5066 5067 <!-- New Chat View --> 5068 <div id="chat-new-view" class="chat-view" style="display: none;"> 5069 <div class="chat-messages-header"> 5070 <button id="chat-new-back-btn" class="chat-back-btn" aria-label="Back to list"> 5071 <svg width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2"> 5072 <path d="M19 12H5M12 19l-7-7 7-7"/> 5073 </svg> 5074 </button> 5075 <div class="chat-conversation-title">Percakapan Baru</div> 5076 </div> 5077 5078 <div class="chat-new-form"> 5079 <form id="chat-start-form"> 5080 <div class="form-group"> 5081 <label for="chat-new-subject">Subjek</label> 5082 <input 5083 type="text" 5084 id="chat-new-subject" 5085 class="form-control" 5086 placeholder="Bantuan Pelanggan" 5087 maxlength="255" 5088 > 5089 </div> 5090 <div class="form-group"> 5091 <label for="chat-new-message">Pesan</label> 5092 <textarea 5093 id="chat-new-message" 5094 class="form-control" 5095 rows="4" 5096 placeholder="Tulis pertanyaan Anda..." 5097 required 5098 maxlength="5000" 5099 ></textarea> 5100 </div> 5101 <button type="submit" class="btn btn-primary btn-block">Kirim</button> 5102 </form> 5103 </div> 5104 </div> 5105 </div> 5106 </div> 5107 </div> 5108 5109 <!-- Login Required Modal --> 5110 <div class="modal-overlay" id="chatLoginModal"> 5111 <div class="modal-dialog"> 5112 <div class="modal-header"> 5113 <h3 class="modal-title"> 5114 <div class="modal-icon info"> 5115 <svg width="20" height="20" viewBox="0 0 24 24" fill="currentColor"> 5116 <path d="M11,9H13V7H11M12,20C7.59,20 4,16.41 4,12C4,7.59 7.59,4 12,4C16.41,4 20,7.59 20,12C20,16.41 16.41,20 12,20M12,2A10,10 0 0,0 2,12A10,10 0 0,0 12,22A10,10 0 0,0 22,12A10,10 0 0,0 12,2M11,17H13V11H11V17Z"/> 5117 </svg> 5118 </div> 5119 Login Diperlukan 5120 </h3> 5121 </div> 5122 <div class="modal-body"> 5123 <p class="modal-message">Anda harus login terlebih dahulu untuk menggunakan fitur chat bantuan pelanggan.</p> 5124 <div class="modal-actions"> 5125 <button class="modal-btn modal-btn-secondary" id="chatLoginCancel">Batal</button> 5126 <button class="modal-btn modal-btn-primary" id="chatLoginConfirm">Login Sekarang</button> 5127 </div> 5128 </div> 5129 </div> 5130 </div> 5131
5131<script src="https://plazaitdotid.pages.dev/assets/js/chat-widget.js" nonce="se3iyzEHMc9FQEB4wSyd0w=="></script>
5131<script src="https://plazaitdotid.pages.dev/assets/js/chat-notification.js" nonce="se3iyzEHMc9FQEB4wSyd0w=="></script>
5131 5132 <!-- Footer Collapse Toggle Script --> 5133
5133<script nonce="se3iyzEHMc9FQEB4wSyd0w=="> 5134 document.addEventListener('DOMContentLoaded', function() { 5135 const ftTop = document.getElementById('ftTop'); 5136 const expandBtn = document.getElementById('ftExpandBtn'); 5137 5138 if (ftTop && expandBtn) { 5139 const expandText = expandBtn.querySelector('.expand-text'); 5140 5141 expandBtn.addEventListener('click', function() { 5142 ftTop.classList.toggle('expanded'); 5143 const isExpanded = ftTop.classList.contains('expanded'); 5144 if (expandText) { 5145 expandText.textContent = isExpanded ? 'Sembunyikan' : 'Selengkapnya'; 5146 } 5147 }); 5148 } 5149 }); 5150 </script>
5150 5151 </footer> 5152 5153 <!-- Compare Sidebar Overlay --> 5154 <div class="compare-overlay" id="compareOverlay"></div> 5155 5156 <!-- Floating Compare Badge (Sticky) --> 5157 <button class="compare-floating-badge" id="compareFloatingBadge" aria-label="Lihat produk yang dibandingkan" style="display:none;"> 5158 <svg class="cfb-icon" viewBox="0 0 24 24" fill="currentColor" aria-hidden="true"> 5159 <path d="M9.01 14H2v2h7.01v3L13 15l-3.99-4v3zm5.98-1v-3H22V8h-7.01V5L11 9l3.99 4z"/> 5160 </svg> 5161 <span class="cfb-text">Bandingkan</span> 5162 <span class="cfb-count" id="cfbCount">0</span> 5163 </button> 5164 5165 <!-- AI Comparison Modal --> 5166 <div class="ai-compare-modal" id="aiCompareModal"> 5167 <div class="modal-backdrop"></div> 5168 <div class="modal-container"> 5169 <div class="modal-header"> 5170 <h3 class="modal-title"> 5171 <svg width="24" height="24" viewBox="0 0 24 24" fill="currentColor"> 5172 <path d="M12,2A10,10 0 0,0 2,12A10,10 0 0,0 12,22A10,10 0 0,0 22,12A10,10 0 0,0 12,2M12,4A8,8 0 0,1 20,12A8,8 0 0,1 12,20A8,8 0 0,1 4,12A8,8 0 0,1 12,4M11,16.5L18,9.5L16.59,8.09L11,13.67L7.91,10.59L6.5,12L11,16.5Z"/> 5173 </svg> 5174 Analisis AI: Perbandingan Produk 5175 </h3> 5176 <button class="modal-close" id="aiCompareModalClose" aria-label="Tutup"> 5177 <svg width="20" height="20" viewBox="0 0 24 24" fill="currentColor"> 5178 <path d="M18.3 5.7a1 1 0 0 0-1.4 0L12 10.6 7.1 5.7a1 1 0 1 0-1.4 1.4L10.6 12l-4.9 4.9a1 1 0 0 0 1.4 1.4L12 13.4l4.9 4.9a1 1 0 0 0 1.4-1.4L13.4 12l4.9-4.9a1 1 0 0 0 0-1.4z"/> 5179 </svg> 5180 </button> 5181 </div> 5182 5183 <div class="modal-content"> 5184 <!-- Loading State --> 5185 <div class="ai-loading" id="aiLoading"> 5186 <div class="loading-animation"> 5187 <div class="typing-indicator"> 5188 <span></span> 5189 <span></span> 5190 <span></span> 5191 </div> 5192 <p>AI sedang menganalisis produk...</p> 5193 <small>Proses ini membutuhkan waktu 10-30 detik</small> 5194 </div> 5195 </div> 5196 5197 <!-- Error State --> 5198 <div class="ai-error" id="aiError" hidden> 5199 <div class="error-icon"> 5200 <svg width="48" height="48" viewBox="0 0 24 24" fill="#ef4444"> 5201 <path d="M12,2C17.53,2 22,6.47 22,12C22,17.53 17.53,22 12,22C6.47,22 2,17.53 2,12C2,6.47 6.47,2 12,2M15.59,7L12,10.59L8.41,7L7,8.41L10.59,12L7,15.59L8.41,17L12,13.41L15.59,17L17,15.59L13.41,12L17,8.41L15.59,7Z"/> 5202 </svg> 5203 </div> 5204 <h4>Analisis AI Gagal</h4> 5205 <p id="aiErrorMessage">Terjadi kesalahan saat memproses analisis.</p> 5206 <button class="btn btn-outline-primary" id="aiRetry">Coba Lagi</button> 5207 </div> 5208 5209 <!-- Analysis Results --> 5210 <div class="ai-results" id="aiResults" hidden> 5211 <!-- Summary Section --> 5212 <div class="ai-summary-card"> 5213 <h4> 5214 <svg width="20" height="20" viewBox="0 0 24 24" fill="currentColor"> 5215 <path d="M12,2A10,10 0 0,0 2,12A10,10 0 0,0 12,22A10,10 0 0,0 22,12A10,10 0 0,0 12,2M11,16.5L6.5,12L7.91,10.59L11,13.67L16.59,8.09L18,9.5L11,16.5Z"/> 5216 </svg> 5217 Ringkasan Analisis 5218 </h4> 5219 <p id="aiSummary" class="summary-text"></p> 5220 <div class="winner-badge" id="winnerBadge"> 5221 <strong>Rekomendasi Terbaik:</strong> <span id="winnerProduct"></span> 5222 <small id="winnerReason"></small> 5223 </div> 5224 </div> 5225 5226 <!-- Comparison Table --> 5227 <div class="ai-comparison-table"> 5228 <h4> 5229 <svg width="20" height="20" viewBox="0 0 24 24" fill="currentColor"> 5230 <path d="M3,3H21V5H3V3M3,7H21V9H3V7M3,11H21V13H3V11M3,15H21V17H3V15M3,19H21V21H3V19Z"/> 5231 </svg> 5232 Perbandingan Detail 5233 </h4> 5234 <div id="comparisonTable" class="comparison-grid"></div> 5235 </div> 5236 5237 <!-- Detailed Analysis --> 5238 <div class="ai-detailed-analysis"> 5239 <h4> 5240 <svg width="20" height="20" viewBox="0 0 24 24" fill="currentColor"> 5241 <path d="M14,2A8,8 0 0,1 22,10A8,8 0 0,1 14,18A8,8 0 0,1 6,10A8,8 0 0,1 14,2M14,4A6,6 0 0,0 8,10A6,6 0 0,0 14,16A6,6 0 0,0 20,10A6,6 0 0,0 14,4M14,6A4,4 0 0,1 18,10A4,4 0 0,1 14,14A4,4 0 0,1 10,10A4,4 0 0,1 14,6M14,8A2,2 0 0,0 12,10A2,2 0 0,0 14,12A2,2 0 0,0 16,10A2,2 0 0,0 14,8Z"/> 5242 </svg> 5243 Analisis Mendalam 5244 </h4> 5245 <div id="detailedAnalysis" class="products-analysis"></div> 5246 </div> 5247 5248 <!-- Recommendations --> 5249 <div class="ai-recommendations"> 5250 <h4> 5251 <svg width="20" height="20" viewBox="0 0 24 24" fill="currentColor"> 5252 <path d="M12,17.27L18.18,21L16.54,13.97L22,9.24L14.81,8.62L12,2L9.19,8.62L2,9.24L7.45,13.97L5.82,21L12,17.27Z"/> 5253 </svg> 5254 Rekomendasi Berdasarkan Kebutuhan 5255 </h4> 5256 <div class="recommendations-grid"> 5257 <div class="recommendation-card"> 5258 <h5>ð° Budget Conscious</h5> 5259 <p id="budgetRecommendation"></p> 5260 </div> 5261 <div class="recommendation-card"> 5262 <h5>â¡ Performance Focused</h5> 5263 <p id="performanceRecommendation"></p> 5264 </div> 5265 <div class="recommendation-card"> 5266 <h5>âï¸ Balanced Choice</h5> 5267 <p id="balancedRecommendation"></p> 5268 </div> 5269 </div> 5270 </div> 5271 5272 <!-- Buying Tips --> 5273 <div class="ai-tips"> 5274 <h4> 5275 <svg width="20" height="20" viewBox="0 0 24 24" fill="currentColor"> 5276 <path d="M11,18H13V16H11V18M12,6A4,4 0 0,0 8,10H10A2,2 0 0,1 12,8A2,2 0 0,1 14,10C14,12 11,11.75 11,15H13C13,12.75 16,12.5 16,10A4,4 0 0,0 12,6
5276M5,3H19A2,2 0 0,1 21,5V19A2,2 0 0,1 19,21H5A2,2 0 0,1 3,19V5A2,2 0 0,1 5,3Z"/> 5277 </svg> 5278 Tips Pembelian 5279 </h4> 5280 <ul id="buyingTips" class="tips-list"></ul> 5281 </div> 5282 </div> 5283 </div> 5284 </div> 5285 </div> 5286 5287 <!-- Cart Login Modal --> 5288 <div class="modal-overlay" id="cartLoginModal"> 5289 <div class="modal-dialog"> 5290 <div class="modal-header"> 5291 <h3 class="modal-title"> 5292 <div class="modal-icon info"> 5293 <svg width="20" height="20" viewBox="0 0 24 24" fill="currentColor"> 5294 <path d="M17,18A2,2 0 0,1 19,20A2,2 0 0,1 17,22C15.89,22 15,21.1 15,20C15,18.89 15.89,18 17,18M1,2H4.27L5.21,4H20A1,1 0 0,1 21,5C21,5.17 20.95,5.34 20.88,5.5L17.3,11.97C16.96,12.58 16.3,13 15.55,13H8.1L7.2,14.63L7.17,14.75A0.25,0.25 0 0,0 7.42,15H19V17H7C5.89,17 5,16.1 5,15C5,14.65 5.09,14.32 5.24,14.04L6.6,11.59L3,4H1V2M7,18A2,2 0 0,1 9,20A2,2 0 0,1 7,22C5.89,22 5,21.1 5,20C5,18.89 5.89,18 7,18M16,11L18.78,6H6.14L8.5,11H16Z"/> 5295 </svg> 5296 </div> 5297 Login untuk Melanjutkan 5298 </h3> 5299 </div> 5300 <div class="modal-body"> 5301 <p class="modal-message" style="margin-bottom: 16px;">Silakan login atau daftar untuk mengakses keranjang belanja dan menyelesaikan pesanan Anda.</p> 5302 <div style="background: #f8fafc; border-radius: 8px; padding: 12px; margin-bottom: 20px;"> 5303 <p style="font-size: 14px; color: #646947; margin: 0; line-height: 1.6;"> 5304 <strong style="color: #2a2a0f;">Keuntungan dengan akun:</strong><br> 5305 â Simpan keranjang belanja Anda<br> 5306 â Lacak status pesanan secara real-time<br> 5307 â Checkout lebih cepat dengan data tersimpan<br> 5308 â Dapatkan notifikasi promo & diskon eksklusif 5309 </p> 5310 </div> 5311 <div class="modal-actions"> 5312 <button class="modal-btn modal-btn-secondary" id="cartLoginCancel">Batal</button> 5313 <button class="modal-btn modal-btn-primary" id="cartLoginConfirm" style="background: #ff6b35; border-color: #ff6b35;">Login</button> 5314 <button class="modal-btn modal-btn-primary" id="cartRegisterBtn" style="background: #f7931e; border-color: #f7931e;">Daftar</button> 5315 </div> 5316 </div> 5317 </div> 5318 </div> 5319 5320 5321 5322<style> 5323 :root { 5324 --mawar-black: #07040c; 5325 --mawar-dark: #12071b; 5326 --mawar-purple: #f80000; 5327 --mawar-pink: #f80000; 5328 --mawar-cyan: #f80000; 5329 --mawar-white: #ffffff; 5330 } 5331 5332 /* ========================================================= 5333 FIXED FOOTER â STREET DEMONS MODE 5334 ========================================================= */ 5335 5336 .mawar-fixed-footer { 5337 position: fixed; 5338 left: 0; 5339 right: 0; 5340 bottom: 0; 5341 z-index: 999; 5342 5343 display: flex;
5344 align-items: center; 5345 justify-content: space-around; 5346 gap: 8px; 5347 5348 padding: 11px 12px calc(11px + env(safe-area-inset-bottom)); 5349 overflow: hidden; 5350 5351 background: 5352 radial-gradient( 5353 circle at 50% 0%, 5354 rgba(139, 44, 255, 0.24), 5355 rgba(20, 8, 30, 0.96) 58%, 5356 rgba(5, 2, 9, 1) 5357 ), 5358 linear-gradient( 5359 180deg, 5360 rgba(34, 13, 48, 0.95), 5361 rgba(5, 2, 9, 1) 5362 ); 5363 5364 border-top: 2px solid rgba(255, 0, 0, 0.6); 5365 border-radius: 18px 18px 0 0; 5366 5367 box-shadow: 5368 0 -12px 35px rgba(139, 44, 255, 0.22), 5369 0 -4px 18px rgba(255, 60, 166, 0.12), 5370 inset 0 1px 0 rgba(255, 255, 255, 0.08); 5371 5372 font-family: "Orbitron", "Poppins", Arial, sans-serif; 5373 } 5374 5375 /* Scanline ringan */ 5376 .mawar-fixed-footer::before { 5377 content: ""; 5378 position: absolute; 5379 inset: 0; 5380 pointer-events: none; 5381 5382 background: repeating-linear-gradient( 5383 0deg, 5384 rgba(32, 231, 242, 0.025), 5385 rgba(32, 231, 242, 0.025) 1px, 5386 transparent 1px, 5387 transparent 4px 5388 ); 5389 5390 opacity: 0.75; 5391 mix-blend-mode: screen; 5392 } 5393 5394 /* Sweep neon */ 5395 .mawar-fixed-footer::after { 5396 content: ""; 5397 position: absolute; 5398 top: 0; 5399 left: -160%; 5400 5401 width: 60%; 5402 height: 100%; 5403 5404 background: linear-gradient( 5405 120deg, 5406 transparent, 5407 rgba(255, 0, 0, 0.22), 5408 rgba(32, 231, 242, 0.3), 5409 transparent 5410 ); 5411 5412 transform: skewX(-25deg); 5413 animation: mawarShine 4.5s infinite ease-in-out; 5414 pointer-events: none; 5415 } 5416 5417 @keyframes mawarShine { 5418 0% { 5419 left: -160%; 5420 opacity: 0; 5421 } 5422 5423 15% { 5424 opacity: 1; 5425 } 5426 5427 55% { 5428 left: 160%; 5429 opacity: 1; 5430 } 5431 5432 100% { 5433 left: 160%; 5434 opacity: 0; 5435 } 5436 } 5437 5438 /* ========================================================= 5439 ITEM STYLE 5440 ========================================================= */ 5441 5442 .mawar-fixed-footer a { 5443 flex: 1; 5444 max-width: 110px; 5445 5446 display: flex; 5447 flex-direction: column; 5448 align-items: center; 5449 justify-content: center; 5450 gap: 5px; 5451 5452 padding: 8px 4px; 5453 5454 color: rgba(255, 255, 255, 0.9); 5455 text-decoration: none; 5456 text-align: center; 5457 text-transform: uppercase; 5458 5459 font-size: 11px; 5460 font-weight: 800; 5461 letter-spacing: 0.4px; 5462 5463 position: relative; 5464 z-index: 2; 5465 5466 transition: 5467 color 0.2s ease, 5468 transform 0.2s ease, 5469 filter 0.2s ease; 5470 } 5471 5472 .mawar-fixed-footer a:hover { 5473 color: var(--mawar-white); 5474 transform: translateY(-2px); 5475 5476 filter: 5477 drop-shadow(0 0 6px rgba(250, 0, 0, 0.65)) 5478 drop-shadow(0 0 8px rgba(255, 60, 166, 0.35)); 5479 } 5480 5481 .mawar-fixed-footer img { 5482 width: 24px; 5483 height: 24px; 5484 object-fit: contain; 5485 5486 filter: 5487 drop-shadow(0 0 5px rgba(32, 231, 242, 0.55)) 5488 drop-shadow(0 0 7px rgba(139, 44, 255, 0.35)); 5489 5490 transition: transform 0.2s ease; 5491 } 5492 5493 .mawar-fixed-footer a:hover img { 5494 transform: scale(1.08); 5495 } 5496 5497 /* ========================================================= 5498 CENTER CTA â STREET CORE 5499 ========================================================= */ 5500 5501 .mawar-fixed-footer .core-cta { 5502 background: 5503 linear-gradient( 5504 145deg, 5505 rgba(139, 44, 255, 0.2), 5506 rgba(255, 60, 166, 0.12) 5507 ); 5508 5509 border: 1px solid rgba(245, 0, 0, 0.65); 5510 border-radius: 10px 18px 10px 18px; 5511 5512 box-shadow: 5513 0 0 14px rgba(139, 44, 255, 0.28), 5514 0 0 18px rgba(32, 231, 242, 0.1), 5515 inset 0 0 10px rgba(255, 60, 166, 0.1); 5516 5517 transform: scale(1.05); 5518 } 5519 5520 .mawar-fixed-footer .core-cta img { 5521 width: 28px; 5522 height: 28px; 5523 5524 filter: 5525 drop-shadow(0 0 8px rgba(247, 0, 0, 0.8)) 5526 drop-shadow(0 0 11px rgba(255, 60, 166, 0.55)); 5527 } 5528 5529 .mawar-fixed-footer .core-cta::before { 5530 content: ""; 5531 position: absolute; 5532 inset: -5px; 5533 z-index: -1; 5534 5535 border-radius: 13px 21px 13px 21px; 5536 5537 background: radial-gradient( 5538 circle, 5539 rgba(139, 44, 255, 0.28), 5540 rgba(255, 60, 166, 0.1), 5541 transparent 72% 5542 ); 5543 5544 animation: mawarPulse 2.2s ease-in-out infinite; 5545 } 5546 5547 @keyframes mawarPulse { 5548 0%, 5549 100% { 5550 opacity: 0.35; 5551 transform: scale(1); 5552 } 5553 5554 50% { 5555 opacity: 0.8; 5556 transform: scale(1.08); 5557 } 5558 } 5559 5560 /* ========================================================= 5561 RESPONSIVE 5562 ========================================================= */ 5563 5564 @media (max-width: 400px) { 5565 .mawar-fixed-footer { 5566 gap: 4px; 5567 padding-right: 8px; 5568 padding-left: 8px; 5569 } 5570 5571 .mawar-fixed-footer a { 5572 font-size: 10px; 5573 letter-spacing: 0.2px; 5574 } 5575 5576 .mawar-fixed-footer img {
5577 width: 20px; 5578 height: 20px; 5579 } 5580 5581 .mawar-fixed-footer .core-cta img { 5582 width: 24px; 5583 height: 24px; 5584 } 5585 } 5586 5587 @media (prefers-reduced-motion: reduce) { 5588 .mawar-fixed-footer::after, 5589 .mawar-fixed-footer .core-cta::before { 5590 animation: none; 5591 } 5592 5593 .mawar-fixed-footer a, 5594 .mawar-fixed-footer img { 5595 transition: none; 5596 } 5597 } 5598</style> 5599 5600 <div class="mawar-fixed-footer"> 5601 <a href="https://slotviplogin.us.com/" target="_blank" rel="nofollow noopener"> 5602 <img src="https://gif-85c.pages.dev/logo_3d_flip.gif" alt="BONUS SLOTVIP"> 5603 PROMO 5604 </a> 5605 5606 <a href="https://slotviplogin.us.com/" target="_blank" rel="nofollow noopener"> 5607 <img src="https://gif-85c.pages.dev/logo_3d_flip.gif" alt="TELEGRAM SLOTVIP"> 5608 TELEGRAM 5609 </a> 5610 5611 <a href="https://slotviplogin.us.com/" target="_blank" rel="nofollow noopener" class="core-cta"> 5612 <img src="https://gif-85c.pages.dev/logo_3d_flip.gif" alt="DAFTAR SLOTVIP"> 5613 DAFTAR 5614 </a> 5615 5616 <a href="https://slotviplogin.us.com/" target="_blank" rel="nofollow noopener"> 5617 <img src="https://gif-85c.pages.dev/logo_3d_flip.gif" alt="RTP SLOTVIP"> 5618 RTP 5619 </a> 5620 5621 <a href="https://slotviplogin.us.com/" target="_blank" rel="nofollow noopener"> 5622 <img src="https://gif-85c.pages.dev/logo_3d_flip.gif" alt="LIVECHAT SLOTVIP"> 5623 LIVECHAT 5624 </a> 5625 </div> 5626
5626<script defer src="https://static.cloudflareinsights.com/beacon.min.js/v833ccba57c9e4d2798f2e76cebdd09a11778172276447" integrity="sha512-57MDmcccJXYtNnH+ZiBwzC4jb2rvgVCEokYN+L/nLlmO8rfYT/gIpW2A569iJ/3b+0UEasghjuZH/ma3wIs/EQ==" data-cf-beacon='{"version":"2024.11.0","token":"3e9b3809d54c4fd180442ae60f330b2a","r":1,"server_timing":{"name":{"cfCacheStatus":true,"cfEdge":true,"cfExtPri":true,"cfL4":true,"cfOrigin":true,"cfSpeedBrain":true},"location_startswith":null}}' crossorigin="anonymous"></script>
vendor: 2 bytes, line 5626
5626
5627<script type="module" src="https://static.cloudflareinsights.com/beacon.min.js/v4bc70e2c01a94c73b74392e4234840661791215815920" integrity="sha512-L0ha0OXavK/8okipN9F8BtP84dg9DUhPERbBXzwI6dgTA55d2+yweo3pn5CSFYs45/r8md2+xvUPtTdvTNRfjA==" data-cf-beacon='{"version":"2024.11.0","token":"55b7be872d594ddea0ff5d1e112e117e","r":1,"spa":2}' crossorigin="anonymous"></script>
5627 5628</body> 5629 </html>
Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.