1 2 3 4 5 6<!DOCTYPE html> 7<html lang="id"> 8 9<head> 10 <meta charset="UTF-8"> 11 <title>RAJAVIP: Inovasi Baru Game Digital dengan Akses Mudah & Praktis</title> 12 <meta name="description" 13 content="RAJAVIP hadir membawa inovasi baru game digital dengan akses mudah dan praktis, serta beragam hiburan populer yang seru untuk dinikmati setiap saat."> 14 <meta name="robots" content="index, follow"> 15 <link rel="canonical" href="https://moderntally.com/"> 16 <link rel="amphtml" href="https://fabric.moderntally.com/"> 17 <link rel="alternate" hreflang="id-id" href="https://fabric.moderntally.com/"/> 18 <link rel="alternate" href="https://fabric.moderntally.com/"/> 19 <link rel="alternate" hreflang="id" href="https://fabric.moderntally.com/"/> 20 <link rel="alternate" hreflang="en" href="https://fabric.moderntally.com/"/> 21 <link rel="alternate" hreflang="x-default" href="https://fabric.moderntally.com/"/> 22 <meta property="og:locale" content="id_ID"> 23 <meta property="og:site_name" content="RAJAVIP"> 24 <meta property="og:type" content="product"> 25 <meta property="og:title" content="RAJAVIP: Inovasi Baru Game Digital dengan Akses Mudah & Praktis"> 26 <meta property="og:description" 27 content="RAJAVIP hadir membawa inovasi baru game digital dengan akses mudah dan praktis, serta beragam hiburan populer yang seru untuk dinikmati setiap saat."> 28 <meta property="og:url" content="https://moderntally.com/"> 29 <meta property="og:image" content="https://moderntally.com/imagess/inovasi-game-digital.png"> 30 <meta property="og:image:alt" content="RAJAVIP: Inovasi Baru Game Digital dengan Akses Mudah & Praktis"> 31 <meta property="product:price:amount" content="9000"> 32 <meta property="product:price:currency" content="IDR"> 33 <meta property="product:availability" content="out of stock"> 34 <meta name="twitter:card" content="summary_large_image"> 35 <meta name="twitter:title" content="RAJAVIP: Inovasi Baru Game Digital dengan Akses Mudah & Praktis"> 36 <meta name="twitter:description" 37 content="RAJAVIP hadir membawa inovasi baru game digital dengan akses mudah dan praktis, serta beragam hiburan populer yang seru untuk dinikmati setiap saat."> 38 <meta name="twitter:image" content="https://moderntally.com/imagess/inovasi-game-digital.png"> 39 40
40<script type="application/ld+json"> 41 { 42 "@context": "https://schema.org", 43 "@type": "WebSite", 44 "@id": "https://moderntally.com/#website", 45 "url": "https://moderntally.com/", 46 "name": "RAJAVIP", 47 "inLanguage": "id", 48 "potentialAction": { 49 "@type": "SearchAction", 50 "target": "https://moderntally.com/", 51 "query-input": "required name=search_term_string" 52 } 53 } 54 </script>
54 55 56
56<script type="application/ld+json"> 57 { 58 "@context": "https://schema.org", 59 "@type": "Organization", 60 "@id": "/#organization", 61 "name": "RAJAVIP", 62 "url": "https://moderntally.com/", 63 "logo": "https://moderntally.com/imagess/logo-rajavip.png" 64 } 65 </script>
65 66 67
67<script type="application/ld+json"> 68 { 69 "@context": "https://schema.org", 70 "@type": "Product", 71 "name": "RAJAVIP: Inovasi Baru Game Digital dengan Akses Mudah & Praktis", 72 "sku": "RJ777", 73 "image": [ 74 "https://moderntally.com/imagess/inovasi-game-digital.png" 75 ], 76 "url": "https://moderntally.com/", 77 "description": "RAJAVIP hadir membawa inovasi baru game digital dengan akses mudah dan praktis, serta beragam hiburan populer yang seru untuk dinikmati setiap saat.", 78 "category": "Raja Game", 79 "brand": { 80 "@type": "Brand", 81 "name": "RAJAVIP" 82 }, 83 "offers": { 84 "@type": "Offer", 85 "url": "https://moderntally.com/", 86 "priceCurrency": "IDR", 87 "price": "10000", 88 "priceValidUntil": "2027-03-01", 89 "availability": "https://schema.org/OutOfStock", 90 "itemCondition": "https://schema.org/NewCondition", 91 "seller": { 92 "@type": "Organization", 93 "name": "RAJAVIP", 94 "url": "https://moderntally.com/" 95 } 96 }, 97 "aggregateRating": { 98 "@type": "AggregateRating", 99 "ratingValue": "4.9", 100 "reviewCount": "9888", 101 "bestRating": "5", 102 "worstRating": "1" 103 } 104 } 105 </script>
105 106 107
107<script type="application/ld+json"> 108 { 109 "@context": "https://schema.org", 110 "@type": "BreadcrumbList", 111 "itemListElement": [{ 112 "@type": "ListItem", 113 "position": 1, 114 "name": "RAJAVIP", 115 "item": "https://moderntally.com/" 116 }, 117 { 118 "@type": "ListItem", 119 "position": 2, 120 "name": "LINK RAJA GAME", 121 "item": "https://moderntally.com/" 122 } 123 ] 124 } 125 </script>
125 126 127
127<script type="application/ld+json"> 128 { 129 "@context": "https://schema.org", 130 "@type": "FAQPage", 131 "mainEntity": [{ 132 "@type": "Question", 133 "name": "Apa itu RAJAVIP?", 134 "acceptedAnswer": { 135 "@type": "Answer", 136 "text": "RAJAVIP hadir membawa inovasi baru game digital dengan akses mudah dan praktis, serta beragam hiburan populer yang seru untuk dinikmati setiap saat." 137 } 138 }, 139 { 140 "@type": "Question", 141 "name": "Mengapa RAJAVIP disebut link raja game online terbaik?", 142 "acceptedAnswer": { 143 "@type": "Answer", 144 "text": "Karena RAJAVIP menghadirkan layanan stabil, akses cepat, pilihan permainan lengkap, serta pengalaman bermain yang nyaman bagi para pengguna." 145 } 146 }, 147 { 148 "@type": "Question", 149 "name": "Apakah RAJAVIP cocok untuk pemula?", 150 "acceptedAnswer": { 151 "@type": "Answer", 152 "text": "Ya, RAJAVIP sangat cocok untuk pemula karena memiliki tampilan yang ramah pengguna, proses daftar yang mudah, serta berbagai panduan bermain yang membantu pemain baru." 153 } 154 }, 155 { 156 "@type": "Question", 157 "name": "Hiburan apa saja yang tersedia di RAJAVIP?", 158 "acceptedAnswer": { 159 "@type": "Answer", 160 "text": "RAJAVIP menyediakan berbagai hiburan digital menarik seperti game online populer, permainan interaktif, dan layanan yang dirancang untuk memberikan pengalaman bermain yang seru setiap hari." 161 } 162 }, 163 { 164 "@type": "Question", 165 "name": "Bagaimana cara mengakses RAJAVIP dengan aman?", 166 "acceptedAnswer": { 167 "@type": "Answer", 168 "text": "Untuk mengakses RAJAVIP dengan aman, pastikan menggunakan link resmi terbaru yang telah disediakan oleh platform ini." 169 } 170 } 171 ] 172 } 173 </script>
173 174 <!-- User Session Data --> 175 <meta name="csrf-token" content="9ce6e4a17f7cc189893df9e47789b13e98829450d516a0cae5ca7b5f43e5dadc"> 176 <meta name="user-logged-in" content="false"> 177 <meta name="user-id" content="0"> 178 179 <meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=0" /> 180 181 <link rel="shortcut icon" href="https://moderntally.com/imagess/icon-rajavip.png" type="image/x-icon"> 182 <link rel="stylesheet" href="https://plazaitdotid.pages.dev/assets/css/style.css"> 183 <link rel="stylesheet" href="https://plazaitdotid.pages.dev/assets/css/bottom-nav.css"> 184 <link rel="stylesheet" href="https://plazaitdotid.pages.dev/assets/css/search-suggest.css"> 185 <link rel="stylesheet" href="https://plazaitdotid.pages.dev/assets/css/product-detail.css"> 186 <link rel="stylesheet" href="https://plazaitdotid.pages.dev/assets/css/product-grid.css"> 187 <link rel="stylesheet" href="https://plazaitdotid.pages.dev/assets/css/site-notice.css"> 188 <link rel="stylesheet" href="https://plazaitdotid.pages.dev/assets/css/benchmark.css"> 189 <link rel="stylesheet" href="https://plazaitdotid.pages.dev/assets/css/product-filters.css"> 190 <link rel="stylesheet" href="https://plazaitdotid.pages.dev/assets/css/mega-menu-tiles.css"> 191 <link rel="stylesheet" href="https://plazaitdotid.pages.dev/assets/css/product-compare.css"> 192 <link rel="stylesheet" href="https://plazaitdotid.pages.dev/assets/css/product-card-actions.css"> 193 <link rel="stylesheet" href="https://plazaitdotid.pages.dev/assets/css/modal.css"> 194 <link rel="stylesheet" href="https://plazaitdotid.pages.dev/assets/css/reviews-points.css"> 195</head> 196 197<body> 198 <header class="topbar"> 199 <div class="container topbar-inner"> 200 <div class="topbar-left"> 201 RAJAVIP: Inovasi Baru Game Digital dengan Akses Mudah & Praktis 202 203 </div> 204 <div class="topbar-right"> 205 <a href="#">RAJAVIP</a> 206 <a href="#">PROMOSI</a> 207 <a href="#">ALTERNATIF</a> 208 <a href="#">DAFTAR</a> 209 </div> 210 </div> 211 </header> 212 <nav class="navbar"> 213 <nav class="navbar-logo" style="width: 100%;"> 214 <div class="container nav-inner" style="justify-items: center; justify-content: center;"> 215 <a href="/" class="logo-mobile"> 216 <img src="https://moderntally.com/imagess/logo-rajavip.png" alt="RAJAVIP" height="40"> 217 </a> 218 </div> 219 </nav> 220 <div class="container nav-inner"> 221 <a href="/" class="logo"> 222 <img src="https://moderntally.com/imagess/logo-rajavip.png" alt="RAJAVIP" height="40"> 223 </a> 224 225 226 <form class="search" method="get" action="#"> 227 <input type="hidden" name="page" value="produk"> 228 229 <!-- Search Icon (Desktop) --> 230 <button type="submit" class="search-icon-btn" id="searchBtn" aria-label="Cari"> 231 <svg width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5" 232 stroke-linecap="round" stroke-linejoin="round"> 233 <circle cx="11" cy="11" r="8" /> 234 <path d="m21 21-4.35-4.35" /> 235 </svg> 236 </button> 237 238 <input type="text" name="q" id="searchInput" placeholder="Cari RAJAVIP" value="" autocomplete="off"> 239 240 <div class="search-suggest" id="searchSuggest" hidden></div> 241 </form> 242 243 <div class="nav-actions"> 244 <!--<button class="icon-btn" id="notifBtn" title="Notifikasi">ð</button>--> 245 <button class="icon-btn cart-indicator" id="cartBtn" title="Keranjang"> 246 ð <span id="cartCount" class="badge" data-role="cart-badge" aria-live="polite">0</span> 247 </button> 248 249 250 <span id="compareCount" class="badge" data-role="compare-badge" aria-live="polite">0</span> 251 </button> 252 253 <!-- Dynamic login/logout button --> 254 <button class="login-btn" id="loginBtn" aria-label="Masuk">
255 <span class="login-text">Masuk</span> 256 <span class="login-ico" aria-hidden="true">ð</span> 257 </button> 258 </div> 259 </div> 260 261 <div class="container" style="display: flex; align-items: center;"> 262 263 264 <div class="mega-cats-wrapper"> 265 <div class="mega-cats container" id="megaCatsScroll" style="padding-left: 5px !important;"> 266 <a class="" href="https://moderntally.com/"> 267 RAJAVIP </a> 268 <a class="" href="https://moderntally.com/"> 269 RAJAVIP LINK </a> 270 <a class="" href="https://moderntally.com/"> 271 RAJA GAME </a> 272 <a class="" href="https://moderntally.com/"> 273 LINK RAJA GAME </a> 274 <a class="" href="https://moderntally.com/"> 275 RAJA GAME ONLINE </a> 276 </div> 277 <div class="mega-cats-fade" id="megaCatsFade"></div> 278 </div> 279 </div> 280 </nav> 281 282 <!-- Panel Mega Menu - Outside navbar for full-screen --> 283 <div class="mm2-panel" data-mm2="panel" role="dialog" aria-label="Kategori"> 284 <div class="mm2-view is-active" data-mm2="top"></div> 285 <div class="mm2-view" data-mm2="detail"></div> 286 </div> 287 288 <!-- Backdrop - Outside navbar for full-screen --> 289 <div class="mm2-backdrop" data-mm2="backdrop"></div> 290 291 <!-- Mobile Bottom Navigation --> 292 <nav class="bottom-nav"> 293 <div class="bottom-nav-inner"> 294 <!-- Home --> 295 <a href="/" class="bottom-nav-item" id="bottomHomeBtn" data-page="home"> 296 <div class="bottom-nav-item-icon"> 297 <!-- Outlined icon (default) --> 298 <svg class="icon-outlined" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" 299 stroke-linecap="round" stroke-linejoin="round"> 300 <path d="M3 9l9-7 9 7v11a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2z" /> 301 <polyline points="9 22 9 12 15 12 15 22" /> 302 </svg> 303 <!-- Filled icon (active) --> 304 <svg class="icon-filled" viewBox="0 0 24 24" fill="currentColor"> 305 <path 306 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" /> 307 <path 308 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" /> 309 </svg> 310 </div> 311 <span class="bottom-nav-item-label">Home</span> 312 </a> 313 314 <!-- Kategori --> 315 <button class="bottom-nav-item" id="bottomCategoryBtn" data-mm2="trigger" aria-label="Kategori"> 316 <div class="bottom-nav-item-icon"> 317 <!-- Outlined icon (default) --> 318 <svg class="icon-outlined" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" 319 stroke-linecap="round" stroke-linejoin="round"> 320 <line x1="3" y1="12" x2="21" y2="12" /> 321 <line x1="3" y1="6" x2="21" y2="6" /> 322 <line x1="3" y1="18" x2="21" y2="18" /> 323 </svg> 324 <!-- Filled icon (active) --> 325 <svg class="icon-filled" viewBox="0 0 24 24" fill="currentColor"> 326 <path 327 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" /> 328 </svg> 329 </div> 330 <span class="bottom-nav-item-label">Kategori</span> 331 </button> 332 333 <!-- Keranjang --> 334 <button class="bottom-nav-item" id="bottomCartBtn"> 335 <div class="bottom-nav-item-icon"> 336 <!-- Outlined icon (default) -->
337 <svg class="icon-outlined" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" 338 stroke-linecap="round" stroke-linejoin="round"> 339 <circle cx="9" cy="21" r="1" /> 340 <circle cx="20" cy="21" r="1" /> 341 <path d="M1 1h4l2.68 13.39a2 2 0 0 0 2 1.61h9.72a2 2 0 0 0 2-1.61L23 6H6" /> 342 </svg> 343 <!-- Filled icon (active) --> 344 <svg class="icon-filled" viewBox="0 0 24 24" fill="currentColor"> 345 <path 346 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" /> 347 </svg> 348 <span class="bottom-nav-item-badge" id="bottomCartCount">0</span> 349 </div> 350 <span class="bottom-nav-item-label">Keranjang</span> 351 </button> 352 353 <!-- Compare --> 354 <button class="bottom-nav-item" id="bottomCompareBtn"> 355 <div class="bottom-nav-item-icon"> 356 <!-- Outlined icon (default) --> 357 <svg class="icon-outlined" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" 358 stroke-linecap="round" stroke-linejoin="round"> 359 <polyline points="17 11 21 7 17 3" /> 360 <path d="M21 7H9" /> 361 <polyline points="7 21 3 17 7 13" /> 362 <path d="M15 17H3" /> 363 </svg> 364 <!-- Filled icon (active) --> 365 <svg class="icon-filled" viewBox="0 0 24 24" fill="currentColor"> 366 <path 367 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" /> 368 </svg> 369 <span class="bottom-nav-item-badge" id="bottomCompareCount" style="display:none;">0</span> 370 </div> 371 <span class="bottom-nav-item-label">Compare</span> 372 </button> 373 374 <!-- Chat - Always show, check login in JavaScript --> 375 <button class="bottom-nav-item" id="bottomChatBtn" data-page="chat"> 376 <div class="bottom-nav-item-icon"> 377 <!-- Outlined icon (default) --> 378 <svg class="icon-outlined" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" 379 opacity="0.85"> 380 <path d="M21 15a2 2 0 0 1-2 2H7l-4 4V5a2 2 0 0 1 2-2h14a2 2 0 0 1 2 2z" /> 381 </svg> 382 <!-- Filled icon (active) --> 383 <svg class="icon-filled" viewBox="0 0 24 24" fill="currentColor"> 384 <path d="M20 2H4c-1.1 0-2 .9-2 2v18l4-4h14c1.1 0 2-.9 2-2V4c0-1.1-.9-2-2-2z" /> 385 </svg> 386 <span class="bottom-nav-item-badge" id="bottomChatCount" style="display:none;">0</span> 387 </div> 388 <span class="bottom-nav-item-label">Chat</span> 389 </button> 390 391 <!-- Akun --> 392 <button class="bottom-nav-item" id="bottomLoginBtn"> 393 <div class="bottom-nav-item-icon"> 394 <!-- Outlined icon (default) --> 395 <svg class="icon-outlined" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" 396 stroke-linecap="round" stroke-linejoin="round"> 397 <path d="M20 21v-2a4 4 0 0 0-4-4H8a4 4 0 0 0-4 4v2" /> 398 <circle cx="12" cy="7" r="4" /> 399 </svg> 400 <!-- Filled icon (active) -->
401 <svg class="icon-filled" viewBox="0 0 24 24" fill="currentColor"> 402 <path fill-rule="evenodd" 403 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" 404 clip-rule="evenodd" /> 405 </svg> 406 </div> 407 <span class="bottom-nav-item-label">Login</span> 408 </button> 409 </svg> 410 </div> 411 </button> 412 </div> 413 </nav> 414 415 <!-- Mobile User Menu Bottom Sheet --> 416 417
417<script nonce="se3iyzEHMc9FQEB4wSyd0w=="> 418 (function () { 419 const btn = document.getElementById('megaMoreBtn'); 420 const dd = document.getElementById('megaMoreDropdown'); 421 if (!btn || !dd) return; 422 423 function openDD() { 424 dd.hidden = false; 425 btn.setAttribute('aria-expanded', 'true'); 426 document.addEventListener('click', outside, { 427 capture: true 428 }); 429 document.addEventListener('keydown', esc); 430 } 431 432 function closeDD() { 433 if (dd.hidden) return; 434 dd.hidden = true; 435 btn.setAttribute('aria-expanded', 'false'); 436 document.removeEventListener('click', outside, { 437 capture: true 438 }); 439 document.removeEventListener('keydown', esc); 440 } 441 442 function toggle() { 443 dd.hidden ? openDD() : closeDD(); 444 } 445 446 function outside(e) { 447 if (!dd.contains(e.target) && e.target !== btn) { 448 closeDD(); 449 } 450 } 451 452 function esc(e) { 453 if (e.key === 'Escape') { 454 closeDD(); 455 btn.focus(); 456 } 457 } 458 btn.addEventListener('click', toggle); 459 })(); 460 461 // ========== HORIZONTAL SCROLL FADE INDICATOR ========== 462 (function () { 463 const megaCats = document.getElementById('megaCatsScroll'); 464 const fade = document.getElementById('megaCatsFade'); 465 if (!megaCats || !fade) return; 466 467 function updateFade() { 468 const scrollLeft = megaCats.scrollLeft; 469 const scrollWidth = megaCats.scrollWidth; 470 const clientWidth = megaCats.clientWidth; 471 const maxScroll = scrollWidth - clientWidth; 472 473 // Hide fade when scrolled to end (within 10px tolerance) 474 if (maxScroll - scrollLeft <= 10) { 475 fade.style.opacity = '0'; 476 } else { 477 fade.style.opacity = '1'; 478 } 479 } 480 481 // Update on scroll 482 megaCats.addEventListener('scroll', updateFade, { 483 passive: true 484 }); 485 486 // Update on resize 487 window.addEventListener('resize', updateFade, { 488 passive: true 489 }); 490 491 // Initial check 492 setTimeout(updateFade, 100); 493 })(); 494 495 document.addEventListener('DOMContentLoaded', function () { 496 var input = document.getElementById('searchInput'); 497 if (!input) return; 498 input.addEventListener('keydown', function (e) { 499 if (e.key === 'Enter') { 500 e.preventDefault(); 501 var form = input.form; 502 if (!form) return; 503 if (typeof form.requestSubmit === 'function') form.requestSubmit(); 504 else form.submit(); 505 } 506 }); 507 }); 508 509 510 (function () { 511 const cartBtn = document.getElementById('cartBtn'); 512 if (cartBtn) { 513 cartBtn.addEventListener('click', function (e) { 514 e.preventDefault(); 515 516 const checkLogin = () => { 517 return window.isUserLoggedIn ? window.isUserLoggedIn() : false; 518 }; 519 520 if (checkLogin()) { 521 window.location.href = '/keranjang'; 522 } else { 523 showCartLoginModal(); 524 } 525 }); 526 } 527 528 const loginBtn = document.getElementById('loginBtn'); 529 if (loginBtn) { 530 loginBtn.addEventListener('click', function (e) { 531 e.preventDefault(); 532 window.location.href = 533 'https://moderntally.com/'; 534 }); 535 } 536 537 const userMenuBtn = document.getElementById('userMenuBtn'); 538 const userDropdown = document.getElementById('userDropdown'); 539 540 if (userMenuBtn && userDropdown) { 541 function openDropdown() { 542 userDropdown.hidden = false; 543 userMenuBtn.setAttribute('aria-expanded', 'true'); 544 document.addEventListener('click', closeOnOutside, { 545 capture: true 546 }); 547 document.addEventListener('keydown', closeOnEscape); 548 } 549 550 function closeDropdown() { 551 if (userDropdown.hidden) return; 552 userDropdown.hidden = true; 553 userMenuBtn.setAttribute('aria-expanded', 'false'); 554 document.removeEventListener('click', closeOnOutside, { 555 capture: true 556 }); 557 document.removeEventListener('keydown', closeOnEscape); 558 } 559 560 function closeOnOutside(e) { 561 if (!userDropdown.contains(e.target) && e.target !== userMenuBtn) { 562 closeDropdown(); 563 } 564 } 565 566 function closeOnEscape(e) { 567 if (e.key === 'Escape') { 568 closeDropdown(); 569 userMenuBtn.focus(); 570 } 571 } 572 573 userMenuBtn.addEventListener('click', function (e) { 574 e.preventDefault(); 575 userDropdown.hidden ? openDropdown() : closeDropdown(); 576 }); 577 578 // Close dropdown when clicking profile links 579 userDropdown.querySelectorAll('[data-close-dropdown]').forEach(link => { 580 link.addEventListener('click', function () { 581 closeDropdown(); 582 }); 583 }); 584 } 585 586 // Bottom nav profile button - toggle mobile bottom sheet 587 const bottomProfileBtn = document.getElementById('bottomProfileBtn'); 588 const mobileUserSheet = document.getElementById('mobileUserSheet'); 589 const mobileUserSheetBackdrop = document.getElementById('mobileUserSheetBackdrop'); 590 591 if (bottomProfileBtn && mobileUserSheet) { 592 function openMobileSheet() { 593 mobileUserSheet.hidden = false; 594 document.body.style.overflow = 'hidden'; 595 // Trigger animation 596 requestAnimationFrame(() => { 597 mobileUserSheet.classList.add('active'); 598 }); 599 } 600 601 function closeMobileSheet() { 602 mobileUserSheet.classList.remove('active'); 603 document.body.style.overflow = ''; 604 setTimeout(() => { 605 mobileUserSheet.hidden = true; 606 }, 300); 607 } 608 609 bottomProfileBtn.addEventListener('click', function (e) { 610 e.preventDefault(); 611 openMobileSheet(); 612 }); 613 614 if (mobileUserSheetBackdrop) { 615 mobileUserSheetBackdrop.addEventListener('click', closeMobileSheet); 616 } 617 618 // Close on escape key 619 document.addEventListener('keydown', function (e) { 620 if (e.key === 'Escape' && !mobileUserSheet.hidden) { 621 closeMobileSheet(); 622 } 623 }); 624 625 // Close sheet when clicking profile links 626 mobileUserSheet.querySelectorAll('[data-close-sheet]').forEach(link => { 627 link.addEventListener('click', function () { 628 closeMobileSheet(); 629 }); 630 }); 631 } 632 633 // Handle Google avatar error in bottom-nav (fallback to initials) 634 const bottomNavAvatar = document.querySelector('.bottom-nav-avatar-img'); 635 if (bottomNavAvatar) { 636 bottomNavAvatar.addEventListener('error', function () { 637 const initials = this.getAttribute('data-fallback-initials') || 'U'; 638 const initialsDiv = document.createElement('div'); 639 initialsDiv.className = 'bottom-nav-avatar-initials'; 640 initialsDiv.textContent = initials; 641 this.parentNode.replaceChild(initialsDiv, this); 642 }); 643 } 644 645 // Mobile logout button 646 const mobileLogoutBtn = document.getElementById('mobileLogoutBtn'); 647 if (mobileLogoutBtn) { 648 mobileLogoutBtn.addEventListener('click', async function (e) { 649 e.preventDefault(); 650 651 // Check push notification before logout 652 if (window.ChatNotification && typeof window.ChatNotification 653 .confirmLogoutWithPushNotification === 'function') { 654 const confirmLogout = await window.ChatNotification 655 .confirmLogoutWithPushNotification(); 656 if (!confirmLogout) { 657 return; // User cancelled logout 658 } 659 } 660 661 const getCsrfToken = () => document.querySelector('meta[name="csrf-token"]') ? 662 .getAttribute('content') || ''; 663 664 try { 665 const response = await fetch('/auth/logout', { 666 method: 'POST', 667 credentials: 'same-origin', 668 headers: { 669 'Content-Type': 'application/json', 670 'X-CSRF-Token': getCsrfToken() 671 }, 672 body: JSON.stringify({ 673 csrf_token: getCsrfToken() 674 }) 675 }); 676 677 if (response.ok) { 678 if (window.guestCart && typeof window.guestCart.clear === 'function') { 679 window.guestCart.clear(); 680 } 681 window.location.href = '/login?logged_out=1'; 682 } else { 683 console.error('Logout failed'); 684 window.location.href = '/logout'; 685 } 686 } catch (error) { 687 console.error('Logout error:', error); 688 window.location.href = '/logout'; 689 } 690 }); 691 } 692 693 const logoutBtn = document.getElementById('logoutBtn'); 694 if (logoutBtn) { 695 logoutBtn.addEventListener('click', async function (e) { 696 e.preventDefault(); 697 698 // Check push notification before logout 699 if (window.ChatNotification && typeof window.ChatNotification 700 .confirmLogoutWithPushNotification === 'function') { 701 const confirmLogout = await window.ChatNotification 702 .confirmLogoutWithPushNotification(); 703 if (!confirmLogout) { 704 return; // User cancelled logout 705 } 706 } 707 708 const getCsrfToken = () => document.querySelector('meta[name="csrf-token"]') ? 709 .getAttribute('content') || ''; 710 711 try { 712 const response = await fetch('/auth/logout', { 713 method: 'POST', 714 credentials: 'same-origin', 715 headers: { 716 'Content-Type': 'application/json', 717 'X-CSRF-Token': getCsrfToken() 718 }, 719 body: JSON.stringify({ 720 csrf_token: getCsrfToken() 721 }) 722 }); 723 724 if (response.ok) { 725 if (window.guestCart && typeof window.guestCart.clear === 'function') { 726 window.guestCart.clear(); 727 } 728 729 window.location.href = '/login?logged_out=1'; 730 } else { 731 console.error('Logout failed'); 732 window.location.href = '/logout'; 733 } 734 } catch (error) { 735 console.error('Logout error:', error); 736 window.location.href = '/logout'; 737 } 738 }); 739 } 740 741 const wishlistBtn = document.getElementById('wishlistBtn'); 742 const notifBtn = document.getElementById('notifBtn'); 743 744 if (wishlistBtn) { 745 wishlistBtn.addEventListener('click', function (e) { 746 e.preventDefault(); 747 alert('Fitur wishlist akan segera tersedia!'); 748 }); 749 } 750 751 if (notifBtn) { 752 notifBtn.addEventListener('click', function (e) { 753 e.preventDefault(); 754 alert('Fitur notifikasi akan segera tersedia!'); 755 }); 756 } 757 })(); 758 759 // ========== MOBILE BOTTOM NAVIGATION ========== 760 (function initBottomNav() { 761 // Sync cart badge with bottom nav 762 function syncBottomCartBadge() { 763 const mainBadge = document.getElementById('cartCount'); 764 const bottomBadge = document.getElementById('bottomCartCount'); 765 if (mainBadge && bottomBadge) { 766 const count = mainBadge.textContent; 767 bottomBadge.textContent = count; 768 bottomBadge.style.display = parseInt(count) > 0 ? 'flex' : 'none'; 769 } 770 } 771 772 // Sync compare badge with bottom nav 773 function syncBottomCompareBadge() { 774 const mainBadge = document.getElementById('compareCount'); 775 const bottomBadge = document.getElementById('bottomCompareCount'); 776 if (mainBadge && bottomBadge) { 777 const count = mainBadge.textContent; 778 bottomBadge.textContent = count; 779 bottomBadge.style.display = parseInt(count) > 0 ? 'flex' : 'none'; 780 } 781 } 782 783 // Initial sync 784 syncBottomCartBadge(); 785 syncBottomCompareBadge(); 786 787 // Observe badge changes 788 const observer = new MutationObserver(function () { 789 syncBottomCartBadge(); 790 syncBottomCompareBadge(); 791 }); 792 793 const cartBadge = document.getElementById('cartCount'); 794 const compareBadge = document.getElementById('compareCount'); 795 796 if (cartBadge) observer.observe(cartBadge, { 797 childList: true, 798 characterData: true, 799 subtree: true 800 }); 801 if (compareBadge) observer.observe(compareBadge, { 802 childList: true, 803 characterData: true, 804 subtree: true 805 }); 806 807 // Bottom Cart Button 808 const bottomCartBtn = document.getElementById('bottomCartBtn'); 809 if (bottomCartBtn) { 810 bottomCartBtn.addEventListener('click', function (e) { 811 e.preventDefault(); 812 813 const checkLogin = () => { 814 r
814eturn window.isUserLoggedIn ? window.isUserLoggedIn() : false; 815 }; 816 817 if (checkLogin()) { 818 window.location.href = '/keranjang'; 819 } else { 820 showCartLoginModal(); 821 } 822 }); 823 } 824 825 // Bottom Compare Button 826 const bottomCompareBtn = document.getElementById('bottomCompareBtn'); 827 if (bottomCompareBtn) { 828 bottomCompareBtn.addEventListener('click', function (e) { 829 e.preventDefault(); 830 831 // Close chat widget if open 832 if (window.plazaChat && window.plazaChat.isWidgetOpen) { 833 window.plazaChat.closeWidget(); 834 } 835 836 const mainCompareBtn = document.getElementById('compareBtn'); 837 if (mainCompareBtn) { 838 mainCompareBtn.click(); 839 } 840 }); 841 } 842 843 // Bottom Category Button - triggers mega menu 844 const bottomCategoryBtn = document.getElementById('bottomCategoryBtn'); 845 if (bottomCategoryBtn) { 846 bottomCategoryBtn.addEventListener('click', function (e) { 847 e.preventDefault(); 848 // Trigger desktop mega menu 849 const desktopTrigger = document.querySelector('.mm2-trigger:not(#bottomCategoryBtn)'); 850 if (desktopTrigger) { 851 desktopTrigger.click(); 852 } 853 }); 854 } 855 856 // Bottom Login Button 857 const bottomLoginBtn = document.getElementById('bottomLoginBtn'); 858 if (bottomLoginBtn) { 859 bottomLoginBtn.addEventListener('click', function (e) { 860 e.preventDefault(); 861 window.location.href = '/login'; 862 }); 863 } 864 865 // Bottom Chat Button 866 const bottomChatBtn = document.getElementById('bottomChatBtn'); 867 if (bottomChatBtn) { 868 bottomChatBtn.addEventListener('click', function (e) { 869 e.preventDefault(); 870 871 // Trigger chat widget (try multiple times if needed) 872 const triggerChat = () => { 873 const chatToggle = document.getElementById('chat-toggle-btn'); 874 if (chatToggle) { 875 chatToggle.click(); 876 return true; 877 } 878 return false; 879 }; 880 881 // Immediate attempt 882 if (!triggerChat()) { 883 // Retry after 100ms if not found 884 setTimeout(() => { 885 if (!triggerChat()) { 886 // Last resort: manually show popup 887 const popup = document.getElementById('chat-popup'); 888 if (popup) { 889 popup.style.display = 'block'; 890 } 891 } 892 }, 100); 893 } 894 }); 895 } 896 897 // Sync chat unread badge 898 function syncBottomChatBadge() { 899 const chatBadge = document.getElementById('chat-unread-badge'); 900 const bottomChatBadge = document.getElementById('bottomChatCount'); 901 if (chatBadge && bottomChatBadge) { 902 const count = chatBadge.textContent; 903 bottomChatBadge.textContent = count; 904 bottomChatBadge.style.display = chatBadge.style.display; 905 } 906 } 907 908 // Observe chat badge changes 909 const chatBadge = document.getElementById('chat-unread-badge'); 910 if (chatBadge) { 911 observer.observe(chatBadge, { 912 attributes: true, 913 childList: true, 914 characterData: true, 915 subtree: true 916 }); 917 syncBottomChatBadge(); 918 } 919 920 // Active state management based on current page 921 function updateActiveState() { 922 const currentPath = window.location.pathname; 923 const bottomNavItems = document.querySelectorAll('.bottom-nav-item'); 924
925 bottomNavItems.forEach(item => { 926 item.classList.remove('active'); 927 928 const itemId = item.id; 929 const page = item.getAttribute('data-page'); 930 const href = item.getAttribute('href'); 931 932 // Check by ID for specific pages 933 if (itemId === 'bottomHomeBtn' && currentPath === '/') { 934 item.classList.add('active'); 935 } else if (itemId === 'bottomCartBtn' && (currentPath === '/keranjang' || 936 currentPath === '/cart')) { 937 item.classList.add('active'); 938 } else if (itemId === 'bottomProfileBtn' && currentPath.startsWith('/profile')) { 939 item.classList.add('active'); 940 } else if (itemId === 'bottomCategoryBtn' && currentPath.startsWith('/kategori')) { 941 item.classList.add('active'); 942 } else if (itemId === 'bottomCompareBtn' && currentPath === '/compare') { 943 item.classList.add('active'); 944 } else if (itemId === 'bottomChatBtn' && currentPath === '/chat') { 945 item.classList.add('active'); 946 } 947 // Fallback: check by data-page attribute 948 else if (page === 'home' && currentPath === '/') { 949 item.classList.add('active'); 950 } else if (page === 'profile' && currentPath.startsWith('/profile')) { 951 item.classList.add('active'); 952 } 953 // Fallback: check by href 954 else if (href && currentPath === href) { 955 item.classList.add('active'); 956 } 957 }); 958 } 959 960 // Update active state on load 961 updateActiveState(); 962 963 // Bottom nav always visible - auto-hide disabled for better UX 964 // const bottomNav = document.querySelector('.bottom-nav'); 965 // if (bottomNav && window.innerWidth <= 640) { 966 // // Auto-hide feature disabled 967 // } 968 })(); 969 // Cart Login Modal Handler (Global scope) 970 function showCartLoginModal() { 971 const modal = document.getElementById('cartLoginModal'); 972 if (!modal) return; 973 974 modal.classList.add('show'); 975 976 const confirmBtn = document.getElementById('cartLoginConfirm'); 977 const registerBtn = document.getElementById('cartRegisterBtn'); 978 const cancelBtn = document.getElementById('cartLoginCancel'); 979 980 const handleLogin = () => { 981 window.location.href = '/login?return=' + encodeURIComponent('/keranjang'); 982 }; 983 984 const handleRegister = () => { 985 window.location.href = '/register?return=' + encodeURIComponent('/keranjang'); 986 }; 987 988 const handleCancel = () => { 989 modal.classList.remove('show'); 990 confirmBtn.removeEventListener('click', handleLogin); 991 registerBtn.removeEventListener('click', handleRegister); 992 cancelBtn.removeEventListener('click', handleCancel); 993 }; 994 995 confirmBtn.removeEventListener('click', handleLogin); 996 registerBtn.removeEventListener('click', handleRegister); 997 cancelBtn.removeEventListener('click', handleCancel); 998 999 confirmBtn.addEventListener('click', handleLogin); 1000 registerBtn.addEventListener('click', handleRegister); 1001 cancelBtn.addEventListener('click', handleCancel); 1002 1003 modal.addEventListener('click', (e) => { 1004 if (e.target === modal) { 1005 handleCancel(); 1006 } 1007 }); 1008 } 1009 </script>
1009 1010
1010<script src="https://plazaitdotid.pages.dev/assets/js/cart-badge.js" defer nonce="se3iyzEHMc9FQEB4wSyd0w=="> 1011 </script>
1011 1012 1013 <!-- Product Compare Sidebar --> 1014 <div class="compare-sidebar" id="compareSidebar"> 1015 <div class="compare-header"> 1016 <h4 class="compare-title"> 1017 <svg width="20" height="20" viewBox="0 0 24 24" fill="currentColor"> 1018 <path 1019 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" /> 1020 </svg> 1021 Bandingkan Produk 1022 <span class="compare-count" id="compareCountSidebar">(0)</span> 1023 </h4> 1024 <button class="compare-close" id="compareClose" aria-label="Tutup"> 1025 <svg width="18" height="18" viewBox="0 0 24 24" fill="currentColor"> 1026 <path 1027 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" /> 1028 </svg> 1029 </button> 1030 </div> 1031 1032 <div class="compare-content"> 1033 <div class="compare-empty" id="compareEmpty"> 1034 <div class="empty-icon"> 1035 <svg width="48" height="48" viewBox="0 0 24 24" fill="currentColor" opacity="0.3"> 1036 <path 1037 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" /> 1038 </svg> 1039 </div> 1040 <h5>Belum ada produk dipilih</h5> 1041 <p>Pilih produk yang ingin dibandingkan dengan klik tombol "Bandingkan Produk" di halaman produk.</p> 1042 </div> 1043 1044 <div class="compare-list" id="compareList"> 1045 <!-- Products will be populated here --> 1046 </div> 1047 </div> 1048 1049 <div class="compare-actions" id="compareActions"> 1050 <button class="btn btn-outline-danger btn-sm" id="compareClearAll"> 1051 <svg width="16" height="16" viewBox="0 0 24 24" fill="currentColor"> 1052 <path 1053 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" /> 1054 </svg> 1055 Hapus Semua 1056 </button> 1057 <button class="btn btn-primary btn-sm" id="compareAnalyze" disabled> 1058 <svg width="16" height="16" viewBox="0 0 24 24" fill="currentColor"> 1059 <path 1060 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" /> 1061 </svg> 1062 Analisis AI 1063 </button> 1064 </div> 1065 1066 <!-- AI Disclaimer in Sidebar --> 1067 <div class="compare-disclaimer"> 1068 <div class="ai-disclaimer"> 1069 <div class="disclaimer-text"> 1070 <strong>ð¡ Catatan:</strong> Analisis ini dihasilkan oleh AI dan dapat mengalami kesalahan. 1071 Gunakan sebagai referensi dan tetap pertimbangkan kebutuhan spesifik Anda sebelum membeli. 1072 Untuk konsultasi lebih lanjut, silakan hubungi tim RAJAVIP. 1073 </div> 1074 </div> 1075 </div> 1076 </div> 1077 <link rel="stylesheet" href="https://plazaitdotid.pages.dev/assets/css/pd-lightbox.css"> 1078 <style> 1079 .paylater-promo { 1080 display: inline-flex; 1081 align-items: center; 1082 gap: 8px; 1083 background: linear-gradient(135deg, #f0fdf4 0, #dcfce7 100%); 1084 border: 1px solid #86efac; 1085 border-radius: 8px; 1086 padding: 8px 12px; 1087 font-size: 13px; 1088 line-height: 1.4; 1089 margin: 8px 0 1090 } 1091 1092 .paylater-promo-sm { 1093 padding: 6px 10px; 1094 font-size: 11px; 1095 gap: 6px 1096 } 1097 1098 .paylater-promo-md { 1099 padding: 8px 12px; 1100 font-size: 13px; 1101 gap: 8px 1102 } 1103 1104 .paylater-promo-lg { 1105 padding: 10px 16px; 1106 font-size: 14px; 1107 gap: 10px 1108 } 1109 1110 .paylater-icon { 1111 font-size: 1.2em; 1112 flex-shrink: 0 1113 } 1114 1115 .paylater-text { 1116 display: flex; 1117 flex-direction: column; 1118 gap: 2px 1119 } 1120 1121 .paylater-text strong { 1122 color: #15803d; 1123 font-weight: 600 1124 } 1125 1126 .paylater-text small { 1127 color: #16a34a; 1128 font-size: .85em; 1129 opacity: .9 1130 } 1131 1132 .paylater-desktop-only { 1133 display: none 1134 } 1135 1136 .paylater-mobile-only { 1137 display: flex 1138 } 1139 1140 @media (min-width:641px) { 1141 .paylater-desktop-only { 1142 display: flex 1143 } 1144 1145 .paylater-mobile-only { 1146 display: none 1147 } 1148 } 1149 1150 @media (max-width:640px) { 1151 .paylater-promo { 1152 font-size: 12px; 1153 padding: 7px 10px 1154 } 1155 1156 .paylater-promo-lg { 1157 font-size: 13px; 1158 padding: 8px 12px 1159 } 1160 } 1161 1162 @media print { 1163 .paylater-promo { 1164 display: none !important 1165 } 1166 } 1167 1168 .paylater-compact { 1169 display: inline-block; 1170 font-size: 11px; 1171 font-weight: 600; 1172 color: #059669; 1173 background: #d1fae5; 1174 padding: 3px 8px; 1175 border-radius: 4px; 1176 margin: 6px 0 4px; 1177 line-height: 1.3 1178 } 1179 1180 @media (max-width:640px) { 1181 .paylater-compact { 1182 font-size: 10px; 1183 padding: 2px 6px; 1184 margin: 5px 0 3px 1185 } 1186 } 1187 1188 @media print { 1189 .paylater-compact { 1190 display: none !important 1191 } 1192 } 1193 </style> 1194 <style nonce="se3iyzEHMc9FQEB4wSyd0w=="> 1195 .pd-voucher-minimal { 1196 margin: 10px 0; 1197 display: flex; 1198 flex-direction: column; 1199 gap: 6px 1200 } 1201 1202 .pdv-min-item { 1203 display: flex; 1204 align-items: center; 1205 gap: 8px; 1206 padding: 0; 1207 height: 32px; 1208 transition: all .2s ease 1209 } 1210 1211 .pdv-min-hidden { 1212 display: none 1213 } 1214 1215 .pdv-min-disabled { 1216 opacity: .5 1217 } 1218 1219 .pdv-badge-btn { 1220 display: inline-flex; 1221 align-items: center; 1222 gap: 8px; 1223 background: linear-gradient(135deg, #667eea 0, #764ba2 100%); 1224 border: none; 1225 border-radius: 8px; 1226 padding: 3px; 1227 cursor: pointer; 1228 transition: all .2s ease; 1229 width: auto 1230 } 1231 1232 .pdv-badge-btn:hover:not(:disabled) { 1233 transform: translateY(-1px); 1234 box-shadow: 0 4px 12px rgba(102, 126, 234, .3) 1235 } 1236 1237 .pdv-badge-btn:disabled { 1238 opacity: .6;
1239 cursor: not-allowed 1240 } 1241 1242 .pdv-badge-icon { 1243 color: #fff; 1244 flex-shrink: 0 1245 } 1246 1247 .pdv-badge-text { 1248 font-size: 14px; 1249 font-weight: 700; 1250 color: #fff; 1251 white-space: nowrap 1252 } 1253 1254 .pdv-badge-code { 1255 font-family: 'Courier New', monospace; 1256 font-size: 13px; 1257 font-weight: 700; 1258 color: #fff; 1259 background: rgba(255, 255, 255, .2); 1260 padding: 4px 8px; 1261 border-radius: 4px; 1262 border: none; 1263 white-space: nowrap 1264 } 1265 1266 .pdv-min-copy, 1267 .pdv-min-more { 1268 padding: 4px 12px; 1269 font-size: 12px; 1270 font-weight: 600; 1271 border-radius: 5px; 1272 border: 1px solid #e2e8f0; 1273 background: #fff; 1274 color: #667eea; 1275 cursor: pointer; 1276 transition: all .2s ease; 1277 white-space: nowrap 1278 } 1279 1280 .pdv-min-copy:hover:not(:disabled), 1281 .pdv-min-more:hover { 1282 background: #667eea; 1283 color: #fff; 1284 border-color: #667eea 1285 } 1286 1287 .pdv-min-copy:disabled { 1288 opacity: .4; 1289 cursor: not-allowed 1290 } 1291 1292 .pdv-min-copy.copied { 1293 background: #22c55e; 1294 color: #fff; 1295 border-color: #22c55e 1296 } 1297 1298 .pdv-min-more { 1299 margin-left: auto 1300 } 1301
1302 .modal-close { 1303 position: absolute; 1304 top: 20px; 1305 right: 20px; 1306 background: none; 1307 border: none; 1308 cursor: pointer; 1309 color: #64748b; 1310 padding: 4px; 1311 transition: color .2s ease 1312 } 1313 1314 .modal-close:hover { 1315 color: #1e293b 1316 } 1317 1318 .modal-body { 1319 margin-bottom: 8px 1320 } 1321 1322 .voucher-modal-content { 1323 text-align: center 1324 } 1325 1326 .voucher-modal-badge { 1327 display: inline-flex; 1328 flex-direction: row; 1329 align-items: center; 1330 gap: 6px; 1331 background: linear-gradient(135deg, #667eea 0, #764ba2 100%); 1332 border-radius: 10px; 1333 padding: 8px 16px; 1334 margin-bottom: 12px 1335 } 1336 1337 .vmb-value { 1338 font-size: 18px; 1339 font-weight: 700; 1340 color: #fff; 1341 line-height: 1 1342 } 1343 1344 .vmb-label { 1345 font-size: 18px; 1346 font-weight: 700; 1347 color: #fff; 1348 text-transform: uppercase; 1349 letter-spacing: .5px 1350 } 1351 1352 .voucher-modal-code { 1353 font-family: 'Courier New', monospace; 1354 font-size: 14px; 1355 font-weight: 700; 1356 color: #667eea; 1357 background: rgba(102, 126, 234, .1); 1358 padding: 6px 12px; 1359 border-radius: 6px; 1360 border: 2px dashed rgba(102, 126, 234, .3); 1361 display: inline-block; 1362 margin-bottom: 10px 1363 } 1364 1365 .voucher-modal-name { 1366 font-size: 14px; 1367 font-weight: 600; 1368 color: #1e293b; 1369 margin-bottom: 16px 1370 } 1371 1372 .voucher-modal-details { 1373 text-align: left; 1374 background: #f8fafc; 1375 border-radius: 8px; 1376 padding: 12px; 1377 margin-bottom: 16px 1378 } 1379 1380 .vmd-item { 1381 display: flex; 1382 align-items: flex-start; 1383 gap: 8px; 1384 padding: 6px 0; 1385 font-size: 13px; 1386 color: #64748b; 1387 border-bottom: 1px solid #e2e8f0 1388 } 1389 1390 .vmd-item:last-child { 1391 border-bottom: none 1392 } 1393 1394 .vmd-item svg { 1395 color: #667eea; 1396 flex-shrink: 0; 1397 margin-top: 2px 1398 } 1399 1400 .vmd-item strong { 1401 color: #1e293b 1402 } 1403
1404 .modal-actions { 1405 padding: 20px 1406 } 1407 1408 .modal-btn-primary { 1409 background: linear-gradient(135deg, #667eea 0, #764ba2 100%); 1410 color: #fff 1411 } 1412 1413 .modal-btn-primary:hover { 1414 opacity: .9; 1415 transform: translateY(-1px) 1416 } 1417 1418 @media (max-width:640px) { 1419 .pdv-min-item { 1420 gap: 6px 1421 } 1422 1423 .pdv-badge-btn { 1424 padding: 3px; 1425 gap: 6px 1426 } 1427 1428 .pdv-badge-text { 1429 font-size: 13px 1430 } 1431 1432 .pdv-badge-code { 1433 font-size: 12px; 1434 padding: 3px 6px 1435 } 1436 1437 .pdv-min-copy, 1438 .pdv-min-more { 1439 padding: 3px 10px; 1440 font-size: 11px 1441 } 1442 1443 .modal-dialog { 1444 max-width: 95%; 1445 margin: 20px 1446 } 1447 1448 .vmb-value { 1449 font-size: 16px 1450 } 1451 1452 .vmb-label { 1453 font-size: 16px 1454 } 1455 1456 .voucher-modal-code { 1457 font-size: 13px; 1458 padding: 5px 10px 1459 } 1460 } 1461 </style> 1462 <style nonce="se3iyzEHMc9FQEB4wSyd0w=="> 1463 .promo-endyear-mini-banner { 1464 display: flex; 1465 align-items: center; 1466 gap: 12px; 1467 padding: 12px 16px; 1468 background: rgba(255, 255, 255, .8); 1469 backdrop-filter: blur(10px); 1470 -webkit-backdrop-filter: blur(10px); 1471 border: 2px solid rgba(242, 140, 26, .2); 1472 border-radius: 12px; 1473 margin: 16px 0; 1474 box-shadow: 0 4px 16px rgba(0, 0, 0, .08); 1475 transition: all .3s ease 1476 } 1477 1478 .promo-endyear-mini-banner:hover { 1479 transform: translateY(-2px); 1480 box-shadow: 0 6px 20px rgba(0, 0, 0, .12); 1481 border-color: rgba(242, 140, 26, .4) 1482 } 1483 1484 .pey-icon { 1485 font-size: 32px; 1486 line-height: 1; 1487 flex-shrink: 0 1488 } 1489 1490 .pey-content { 1491 flex: 1; 1492 min-width: 0 1493 } 1494 1495 .pey-content strong { 1496 display: block; 1497 font-size: 14px; 1498 font-weight: 700; 1499 color: #F28C1A; 1500 margin-bottom: 2px 1501 } 1502 1503 .pey-content span { 1504 display: block; 1505 font-size: 13px; 1506 color: #64748b; 1507 line-height: 1.4 1508 } 1509 1510 .pey-link { 1511 flex-shrink: 0; 1512 padding: 8px 16px; 1513 background: linear-gradient(135deg, #F28C1A, #FFB84D); 1514 color: #fff; 1515 text-decoration: none; 1516 font-size: 13px; 1517 font-weight: 700; 1518 border-radius: 8px; 1519 white-space: nowrap; 1520 transition: all .2s ease; 1521 box-shadow: 0 2px 8px rgba(242, 140, 26, .25) 1522 } 1523 1524 .pey-link:hover { 1525 transform: translateX(2px); 1526 box-shadow: 0 4px 12px rgba(242, 140, 26, .35) 1527 } 1528 1529 @media(max-width:640px) { 1530 .promo-endyear-mini-banner { 1531 flex-wrap: wrap; 1532 gap: 8px; 1533 padding: 10px 12px 1534 } 1535 1536 .pey-icon { 1537 font-size: 28px; 1538 align-self: flex-start 1539 } 1540 1541 .pey-content { 1542 flex: 1; 1543 min-width: 0 1544 } 1545 1546 .pey-content strong { 1547 font-size: 12px 1548 } 1549 1550 .pey-content span { 1551 font-size: 11px; 1552 line-height: 1.3 1553 } 1554 1555 .pey-link { 1556 width: 100%; 1557 flex-basis: 100%; 1558 font-size: 11px; 1559 padding: 6px 12px; 1560 text-align: center 1561 } 1562 } 1563 1564 @media print { 1565 .promo-endyear-mini-banner { 1566 display: none !important 1567 } 1568 } 1569 </style> 1570 <style nonce="se3iyzEHMc9FQEB4wSyd0w=="> 1571 .pd-title-row { 1572 position: relative; 1573 margin-bottom: 12px; 1574 padding-right: 52px 1575 } 1576 1577 .pd-title { 1578 margin: 0 !important 1579 } 1580 1581 .pd-share-btn { 1582 position: absolute; 1583 top: 0; 1584 right: 0; 1585 width: 40px; 1586 height: 40px; 1587 display: inline-flex; 1588 align-items: center; 1589 justify-content: center; 1590 border-radius: 10px; 1591 border: 1px solid #e2e8f0; 1592 background: #fff; 1593 color: #64748b; 1594 cursor: pointer; 1595 transition: all .2s ease; 1596 -webkit-tap-highlight-color: transparent 1597 } 1598 1599 .pd-share-btn:hover { 1600 background: #f8fafc; 1601 border-color: #cbd5e1; 1602 color: #0f172a; 1603 transform: translateY(-1px) 1604 } 1605 1606 .pd-share-btn:active { 1607 transform: translateY(0) 1608 } 1609 1610 .pd-share-btn svg { 1611 display: block 1612 } 1613 1614 .pd-share-modal-overlay { 1615 position: fixed; 1616 inset: 0; 1617 background: rgba(15, 23, 42, .75); 1618 backdrop-filter: blur(4px); 1619 z-index: 99999; 1620 display: none; 1621 align-items: center; 1622 justify-content: center; 1623 padding: 0; 1624 animation: fadeIn .2s ease 1625 } 1626 1627 .pd-share-modal-overlay.show { 1628 display: flex 1629 } 1630 1631 .pd-share-modal { 1632 background: #fff; 1633 border-radius: 20px; 1634 box-shadow: 0 25px 50px -12px rgba(0, 0, 0, .25); 1635 max-width: 480px; 1636 width: 100%; 1637 max-height: 90vh; 1638 overflow: hidden; 1639 display: flex; 1640 flex-direction: column; 1641 animation: slideUp .3s cubic-bezier(.16, 1, .3, 1) 1642 } 1643 1644 @keyframes fadeIn { 1645 from { 1646 opacity: 0 1647 } 1648 1649 to { 1650 opacity: 1 1651 } 1652 } 1653 1654 @keyframes slideUp { 1655 from { 1656 opacity: 0; 1657 transform: translateY(20px) scale(.95) 1658 } 1659 1660 to { 1661 opacity: 1;
1662 transform: translateY(0) scale(1) 1663 } 1664 } 1665 1666 .pd-share-header { 1667 display: flex; 1668 align-items: center; 1669 justify-content: space-between; 1670 padding: 20px 24px; 1671 border-bottom: 1px solid #f1f5f9 1672 } 1673 1674 .pd-share-title { 1675 font-size: 18px; 1676 font-weight: 700; 1677 color: #0f172a; 1678 margin: 0 1679 } 1680 1681 .pd-share-close { 1682 width: 32px; 1683 height: 32px; 1684 border-radius: 8px; 1685 border: 0; 1686 background: transparent; 1687 color: #64748b; 1688 display: inline-flex; 1689 align-items: center; 1690 justify-content: center; 1691 cursor: pointer; 1692 transition: all .15s ease 1693 } 1694 1695 .pd-share-close:hover { 1696 background: #f1f5f9; 1697 color: #0f172a 1698 } 1699 1700 .pd-share-body { 1701 padding: 24px; 1702 overflow-y: auto 1703 } 1704 1705 .pd-share-preview { 1706 display: flex; 1707 gap: 12px; 1708 padding: 16px; 1709 background: #f8fafc; 1710 border-radius: 12px; 1711 margin-bottom: 24px 1712 } 1713 1714 .pd-share-preview-img { 1715 width: 64px; 1716 height: 64px; 1717 border-radius: 8px; 1718 object-fit: cover; 1719 flex-shrink: 0; 1720 border: 1px solid #e2e8f0 1721 } 1722 1723 .pd-share-preview-info { 1724 flex: 1; 1725 min-width: 0 1726 } 1727 1728 .pd-share-preview-name { 1729 font-size: 14px; 1730 font-weight: 600; 1731 color: #0f172a; 1732 margin: 0 0 4px 0; 1733 display: -webkit-box; 1734 -webkit-line-clamp: 2; 1735 -webkit-box-orient: vertical; 1736 overflow: hidden 1737 } 1738 1739 .pd-share-preview-price { 1740 font-size: 16px; 1741 font-weight: 700; 1742 color: #0ea5e9; 1743 margin: 0 1744 } 1745 1746 .pd-share-label { 1747 font-size: 13px; 1748 font-weight: 600; 1749 color: #475569; 1750 margin: 0 0 12px 0; 1751 text-transform: uppercase; 1752 letter-spacing: .5px 1753 } 1754 1755 .pd-share-grid { 1756 display: grid; 1757 grid-template-columns: repeat(4, 1fr); 1758 gap: 12px; 1759 margin-bottom: 24px 1760 } 1761 1762 .pd-share-option { 1763 display: flex; 1764 flex-direction: column; 1765 align-items: center; 1766 gap: 8px; 1767 padding: 16px 8px; 1768 border: 1.5px solid #e2e8f0; 1769 border-radius: 12px; 1770 background: #fff; 1771 cursor: pointer; 1772 transition: all .2s ease; 1773 text-decoration: none; 1774 color: inherit 1775 } 1776 1777 .pd-share-option:hover { 1778 border-color: #94a3b8; 1779 background: #f8fafc; 1780 transform: translateY(-2px) 1781 } 1782 1783 .pd-share-option:active { 1784 transform: translateY(0) 1785 } 1786 1787 .pd-share-icon { 1788 width: 40px; 1789 height: 40px; 1790 border-radius: 10px; 1791 display: inline-flex; 1792 align-items: center; 1793 justify-content: center; 1794 position: relative 1795 } 1796 1797 .pd-share-icon svg { 1798 width: 24px; 1799 height: 24px; 1800 display: block 1801 } 1802 1803 .pd-share-icon-whatsapp { 1804 background: linear-gradient(135deg, #25D366 0%, #128C7E 100%); 1805 color: #fff 1806 } 1807 1808 .pd-share-icon-facebook { 1809 background: linear-gradient(135deg, #1877F2 0%, #0c63d4 100%); 1810 color: #fff 1811 } 1812 1813 .pd-share-icon-twitter { 1814 background: linear-gradient(135deg, #1DA1F2 0%, #0d8bd9 100%); 1815 color: #fff 1816 } 1817 1818 .pd-share-icon-telegram { 1819 background: linear-gradient(135deg, #0088cc 0%, #0077b3 100%); 1820 color: #fff 1821 } 1822 1823 .pd-share-icon-email { 1824 background: linear-gradient(135deg, #EA4335 0%, #c5331f 100%); 1825 color: #fff 1826 } 1827 1828 .pd-share-icon-copy { 1829 background: linear-gradient(135deg, #6366f1 0%, #4f46e5 100%); 1830 color: #fff 1831 } 1832 1833 .pd-share-icon-pdf { 1834 background: linear-gradient(135deg, #ef4444 0%, #dc2626 100%); 1835 color: #fff 1836 } 1837 1838 .pd-share-name { 1839 font-size: 12px; 1840 font-weight: 600; 1841 color: #475569; 1842 text-align: center 1843 } 1844 1845 .pd-share-copy-section { 1846 background: #f8fafc; 1847 padding: 16px; 1848 border-radius: 12px 1849 } 1850 1851 .pd-share-copy-input-wrap { 1852 display: flex; 1853 gap: 8px 1854 } 1855 1856 .pd-share-copy-input { 1857 flex: 1; 1858 padding: 12px 14px; 1859 border: 1px solid #e2e8f0; 1860 border-radius: 10px; 1861 font-size: 14px; 1862 color: #0f172a; 1863 background: #fff; 1864 font-family: 'Segoe UI', system-ui, sans-serif 1865 } 1866 1867 .pd-share-copy-input:focus { 1868 outline: 0; 1869 border-color: #0ea5e9; 1870 box-shadow: 0 0 0 3px rgba(14, 165, 233, .1) 1871 } 1872 1873 .pd-share-copy-btn { 1874 padding: 12px 20px; 1875 border: 0; 1876 border-radius: 10px; 1877 background: linear-gradient(135deg, #0ea5e9 0%, #0284c7 100%); 1878 color: #fff; 1879 font-size: 14px; 1880 font-weight: 600; 1881 cursor: pointer; 1882 transition: all .2s ease; 1883 white-space: nowrap; 1884 display: inline-flex; 1885 align-items: center; 1886 gap: 6px 1887 } 1888 1889 .pd-share-copy-btn:hover { 1890 background: linear-gradient(135deg, #0284c7 0%, #0369a1 100%); 1891 transform: translateY(-1px); 1892 box-shadow: 0 4px 12px rgba(14, 165, 233, .3) 1893 } 1894 1895 .pd-share-copy-btn:active { 1896 transform: translateY(0) 1897 } 1898 1899 .pd-share-copy-btn svg { 1900 width: 16px; 1901 height: 16px 1902 } 1903 1904 .pd-share-copy-btn.copied { 1905 background: linear-gradient(135deg, #22c55e 0%, #16a34a 100%); 1906 pointer-events: none 1907 } 1908 1909 @media(max-width:640px) { 1910 .pd-share-modal { 1911 border-radius: 20px 20px 0 0; 1912 margin-top: auto; 1913 max-height: 85vh 1914 } 1915 1916 .pd-share-grid { 1917 grid-template-columns: repeat(3, 1fr) 1918 } 1919 1920 .pd-share-header { 1921 padding: 16px 20px 1922 } 1923 1924 .pd-share-body { 1925 padding: 20px 1926 } 1927 1928 .pd-share-btn { 1929 width: 36px; 1930 height: 36px 1931 } 1932 1933 .pd-share-btn svg { 1934 width: 18px;
1935 height: 18px 1936 } 1937 } 1938 1939 @media(max-width:480px) { 1940 .pd-share-grid { 1941 grid-template-columns: repeat(3, 1fr); 1942 gap: 10px 1943 } 1944 1945 .pd-share-option { 1946 padding: 12px 6px 1947 } 1948 1949 .pd-share-icon { 1950 width: 36px; 1951 height: 36px 1952 } 1953 1954 .pd-share-icon svg { 1955 width: 20px; 1956 height: 20px 1957 } 1958 1959 .pd-share-name { 1960 font-size: 11px 1961 } 1962 } 1963 1964 .mf-share { 1965 background: #fff; 1966 color: #fb923c; 1967 border: 2px solid #fb923c; 1968 display: inline-flex; 1969 align-items: center; 1970 justify-content: center 1971 } 1972 1973 .mf-share:active { 1974 transform: scale(.95) 1975 } 1976 1977 .mf-share svg { 1978 display: block 1979 } 1980 1981 @media(max-width:640px) { 1982 .pd-share-btn { 1983 display: none !important 1984 } 1985 } 1986 1987 .stock-badge.in { 1988 background: #e6f9ec; 1989 color: #15803d; 1990 border-radius: 999px; 1991 padding: 4px 10px; 1992 font-weight: 700 1993 } 1994 1995 .stock-badge.out { 1996 background: #fee2e2; 1997 color: #0080ff; 1998 border-radius: 999px; 1999 padding: 4px 10px; 2000 font-weight: 700 2001 } 2002 2003 .stock-info-btn { 2004 --c: #0ea5e9; 2005 --b: #bae6fd; 2006 --bg: #f0f9ff; 2007 --bg-h: #e0f2fe; 2008 --b-h: #0ea5e9; 2009 margin-left: 0; 2010 display: inline-flex; 2011 align-items: center; 2012 justify-content: center; 2013 gap: 0.5rem; 2014 padding: 4px 10px; 2015 border-radius: 999px; 2016 border: 1.5px solid var(--b); 2017 background: var(--bg); 2018 color: var(--c); 2019 cursor: pointer; 2020 font-size: 12px; 2021 font-weight: 600; 2022 transition: all .2s ease; 2023 -webkit-tap-highlight-color: transparent 2024 } 2025 2026 .stock-info-btn:hover { 2027 background: var(--bg-h); 2028 border-color: var(--b-h); 2029 color: #0284c7; 2030 transform: translateY(-1px); 2031 box-shadow: 0 2px 8px rgba(14, 165, 233, .15) 2032 } 2033 2034 .stock-info-btn:active { 2035 transform: translateY(0) 2036 } 2037 2038 .stock-info-btn:focus-visible { 2039 outline: 0; 2040 box-shadow: 0 0 0 3px rgba(14, 165, 233, .2) 2041 } 2042 2043 .stock-info-btn svg { 2044 width: 14px; 2045 height: 14px; 2046 flex-shrink: 0 2047 } 2048 2049 .stock-info-btn .btn-text { 2050 white-space: nowrap 2051 } 2052 2053 .stock-popover { 2054 position: absolute; 2055 z-index: 9999; 2056 min-width: 280px; 2057 max-width: 92vw; 2058 background: #0b1220; 2059 color: #eef3ff; 2060 border: 1px solid rgba(255, 255, 255, .08); 2061 border-radius: 14px; 2062 box-shadow: 0 20px 40px rgba(12, 12, 20, .45); 2063 padding: 12px 12px 8px; 2064 display: none 2065 } 2066 2067 .stock-popover.show { 2068 display: block 2069 } 2070 2071 .stock-popover::before { 2072 content: ""; 2073 position: absolute; 2074 top: -8px; 2075 left: 24px; 2076 width: 14px; 2077 height: 14px; 2078 background: #0b1220; 2079 border-left: 1px solid rgba(255, 255, 255, .08); 2080 border-top: 1px solid rgba(255, 255, 255, .08); 2081 transform: rotate(45deg) 2082 } 2083 2084 .sp-head { 2085 display: flex; 2086 align-items: center; 2087 justify-content: space-between; 2088 margin-bottom: 8px 2089 } 2090 2091 .sp-title { 2092 font-weight: 800; 2093 font-size: 14px 2094 } 2095 2096 .sp-close { 2097 background: transparent; 2098 border: 0; 2099 color: #98a2b3; 2100 cursor: pointer 2101 } 2102 2103 .sp-list { 2104 list-style: none; 2105 margin: 0; 2106 padding: 0; 2107 display: flex; 2108 flex-direction: column; 2109 gap: 8px 2110 } 2111 2112 .sp-item { 2113 display: grid; 2114 grid-template-columns: 1fr auto 32px; 2115 column-gap: 12px; 2116 align-items: center; 2117 padding: 10px 10px; 2118 min-height: 44px;
2119 border-radius: 10px; 2120 background: rgba(255, 255, 255, .03) 2121 } 2122 2123 .sp-left { 2124 display: flex; 2125 align-items: center; 2126 gap: 10px 2127 } 2128 2129 .sp-dot { 2130 width: 10px; 2131 height: 10px; 2132 border-radius: 999px; 2133 background: var(--dot, #60a5fa); 2134 display: inline-block 2135 } 2136 2137 .sp-label { 2138 font-weight: 600; 2139 font-size: 13px 2140 } 2141 2142 2143 .sp-qty { 2144 grid-column: 2; 2145 justify-self: end; 2146 min-width: 40px; 2147 text-align: right; 2148 font-weight: 800; 2149 font-size: 13px; 2150 color: #cfe4ff; 2151 font-variant-numeric: tabular-nums 2152 } 2153 2154 .sp-wa { 2155 grid-column: 3; 2156 justify-self: end; 2157 width: 32px; 2158 height: 32px; 2159 min-width: 32px; 2160 min-height: 32px; 2161 box-sizing: border-box; 2162 padding: 0; 2163 line-height: 0; 2164 text-decoration: none; 2165 outline: 0; 2166 display: inline-flex; 2167 align-items: center; 2168 justify-content: center; 2169 border-radius: 999px; 2170 border: 1px solid rgba(37, 211, 102, .60); 2171 /* 1px untuk hasil âcrispâ */ 2172 background: rgba(37, 211, 102, .08); 2173 color: #25D366; 2174 transition: background-color .15s ease, border-color .15s ease, transform .05s ease; 2175 -webkit-tap-highlight-color: transparent; 2176 } 2177 2178 .sp-wa:hover { 2179 background: rgba(37, 211, 102, .16); 2180 border-color: rgba(37, 211, 102, .75) 2181 } 2182 2183 .sp-wa:active { 2184 transform: translateY(.5px) scale(.98) 2185 } 2186 2187 .sp-wa svg { 2188 width: 18px; 2189 height: 18px; 2190 display: block; 2191 vertical-align: middle 2192 } 2193 2194 .stock-popover a { 2195 text-decoration: none 2196 } 2197
2198 #deskripsi img { 2199 max-width: 450px !important; 2200 height: unset !important 2201 } 2202 2203 @media(max-width:640px) { 2204 .stock-popover { 2205 position: fixed; 2206 left: 0; 2207 right: 0; 2208 bottom: max(12px, env(safe-area-inset-bottom, 12px)); 2209 margin: 0 10px; 2210 padding: 14px 12px 10px; 2211 border-radius: 16px 2212 } 2213 2214 .stock-popover::before { 2215 display: none 2216 } 2217 2218 .stock-info-btn { 2219 padding: 4px 8px; 2220 gap: 4px; 2221 border: 0; 2222 background: transparent 2223 } 2224 2225 .stock-info-btn:hover { 2226 background: transparent; 2227 box-shadow: none; 2228 transform: none 2229 } 2230 2231 .stock-info-btn .btn-text { 2232 display: none 2233 } 2234 2235 .stock-info-btn svg { 2236 width: 16px; 2237 height: 16px 2238 } 2239 2240 .sp-item { 2241 grid-template-columns: 1fr auto 36px 2242 } 2243 2244 .sp-wa { 2245 width: 36px; 2246 height: 36px; 2247 min-width: 36px; 2248 min-height: 36px 2249 } 2250 2251 .sp-wa svg { 2252 width: 19px; 2253 height: 19px 2254 } 2255 } 2256 2257 .stock-dot { 2258 position: absolute; 2259 bottom: 8px; 2260 right: 8px; 2261 width: 8px; 2262 height: 8px; 2263 border-radius: 50%; 2264 box-shadow: 0 1px 3px rgba(0, 0, 0, 0.4); 2265 z-index: 2; 2266 cursor: help 2267 } 2268 2269 .stock-dot.ready { 2270 background: #10b981 2271 } 2272 2273 .stock-dot.low { 2274 background: #f59e0b 2275 } 2276 2277 .stock-dot.out { 2278 background: #ef4444 2279 } 2280 2281 .stock-dot:hover { 2282 transform: scale(1.2); 2283 transition: transform 0.2s ease 2284 } 2285 2286 @media(max-width:640px) { 2287 .stock-dot { 2288 width: 7px; 2289 height: 7px; 2290 bottom: 6px; 2291 right: 6px 2292 } 2293 } 2294 2295 .pd-related-card .spec-chips { 2296 font-size: 11px; 2297 color: #64748b; 2298 margin: 4px 0 6px 0; 2299 line-height: 1.3; 2300 font-weight: 500 2301 } 2302 2303 .pd-related-card .spec-chips .spec-divider { 2304 margin: 0 4px; 2305 opacity: 0.6 2306 } 2307 2308 @media(max-width:640px) { 2309 .pd-related-card .spec-chips { 2310 font-size: 10px; 2311 margin: 3px 0 5px 0 2312 } 2313 2314 #deskripsi img { 2315 max-width: 300px !important; 2316 height: unset !important; 2317 justify-self: center !important 2318 } 2319 } 2320 2321 .pwp-trigger-badge { 2322 display: inline-flex; 2323 align-items: center; 2324 gap: 4px; 2325 padding: 3px 8px 4px; 2326 background: linear-gradient(135deg, #fbbf24 0%, #f59e0b 100%); 2327 color: #78350f; 2328 border-radius: 6px; 2329 font-size: .65rem; 2330 font-weight: 600; 2331 border: 0 2332 } 2333 2334 .pwp-trigger-badge svg { 2335 flex-shrink: 0; 2336 width: 12px; 2337 height: 12px 2338 } 2339 2340 .pwp-deals-section { 2341 margin: 0; 2342 padding: 12px; 2343 background: linear-gradient(135deg, #fef3c7 0%, #fde68a 100%); 2344 border-radius: 12px; 2345 border: 2px solid #fbbf24 2346 } 2347 2348 .pwp-deals-header { 2349 display: flex; 2350 gap: 10px; 2351 margin-bottom: 10px 2352 } 2353 2354 .pwp-icon { 2355 flex-shrink: 0; 2356 color: #f59e0b; 2357 width: 18px; 2358 height: 18px 2359 } 2360 2361 .pwp-text .pwp-title { 2362 margin: 0 0 2px 0; 2363 font-size: 14px; 2364 font-weight: 700; 2365 color: #78350f 2366 } 2367 2368 .pwp-text .pwp-subtitle { 2369 margin: 0; 2370 font-size: 11px; 2371 color: #92400e; 2372 opacity: 0.9 2373 } 2374 2375 .pwp-deals-loading { 2376 text-align: center; 2377 padding: 40px 0; 2378 color: #92400e 2379 } 2380 2381 .pwp-spinner { 2382 width: 40px; 2383 height: 40px; 2384 border: 3px solid #fbbf24; 2385 border-top-color: #f59e0b; 2386 border-radius: 50%; 2387 animation: spin 0.8s linear infinite; 2388 margin: 0 auto 12px 2389 } 2390 2391 @keyframes spin { 2392 to { 2393 transform: rotate(360deg) 2394 } 2395 } 2396 2397 .pwp-deals-grid { 2398 display: flex; 2399 flex-direction: column; 2400 gap: 6px 2401 } 2402 2403 .pwp-deal-card { 2404 background: #fff; 2405 border-radius: 6px; 2406 overflow: hidden; 2407 border: 1px solid #fbbf24; 2408 display: flex; 2409 align-items: center; 2410 padding: 8px; 2411 gap: 10px 2412 } 2413 2414 .pwp-deal-card:hover { 2415 background: #fef3c7 2416 } 2417 2418 .pwp-deal-thumb { 2419 flex-shrink: 0; 2420 width: 50px; 2421 height: 50px; 2422 background: #f8fafc; 2423 overflow: hidden; 2424 border-radius: 4px 2425 } 2426 2427 .pwp-deal-thumb img { 2428 width: 100%; 2429 height: 100%; 2430 object-fit: cover 2431 } 2432 2433 .pwp-deal-badge { 2434 background: #dc2626; 2435 color: #fff; 2436 padding: 2px 5px; 2437 border-radius: 3px; 2438 font-size: 9px; 2439 font-weight: 700; 2440 margin-left: auto 2441 } 2442 2443 .pwp-deal-info { 2444 flex: 1; 2445 display: flex; 2446 flex-direction: column; 2447 gap: 4px 2448 } 2449 2450 .pwp-deal-name { 2451 font-size: 12px; 2452 font-weight: 600; 2453 color: #0f172a; 2454 margin: 0; 2455 line-height: 1.2 2456 } 2457 2458 .pwp-deal-prices { 2459 display: flex; 2460 align-items: center; 2461 gap: 6px; 2462 flex-wrap: wrap 2463 } 2464 2465 .pwp-deal-price { 2466 font-size: 14px; 2467 font-weight: 800; 2468 color: #dc2626; 2469 white-space: nowrap 2470 } 2471 2472 .pwp-deal-original { 2473 font-size: 11px; 2474 color: #64748b; 2475 text-decoration: line-through; 2476 white-space: nowrap 2477 } 2478 2479 .pwp-cart-note { 2480 margin-top: 8px; 2481 padding: 6px 10px; 2482 background: #e0f2fe; 2483 border-left: 2px solid#0ea5e9; 2484 font-size: 11px; 2485 color: #0c4a6e; 2486 border-radius: 4px 2487 } 2488 2489 @media(max-width:640px) { 2490 .pwp-deals-section { 2491 margin: 12px 0; 2492 padding: 10px; 2493 border-radius: 10px 2494 } 2495 2496 .pwp-deals-header { 2497 gap: 8px 2498 } 2499 2500 .pwp-text .pwp-title { 2501 font-size: 13px 2502 } 2503 2504 .pwp-text .pwp-subtitle { 2505 font-size: 10px 2506 } 2507 2508 .pwp-deal-card { 2509 padding: 6px; 2510 gap: 8px 2511 } 2512 2513 .pwp-deal-thumb { 2514 width: 45px; 2515 height: 45px 2516 } 2517 2518 .pwp-deal-name { 2519 font-size: 11px 2520 } 2521 2522 .pwp-deal-price { 2523 font-size: 13px 2524 } 2525 2526 .pwp-deal-original { 2527 font-size: 10px 2528 } 2529 } 2530 2531 .preorder-badge { 2532 display: inline-flex; 2533 align-items: center; 2534 gap: 5px; 2535 padding: 6px 12px; 2536 background: linear-gradient(135deg, #8b5cf6 0%, #7c3aed 100%); 2537 color: #fff; 2538 border-radius: 8px; 2539 font-size: 13px; 2540 font-weight: 700; 2541 border: 0; 2542 box-shadow: 0 2px 8px rgba(139, 92, 246, .25) 2543 } 2544 2545 .preorder-badge svg { 2546 width: 16px; 2547 height: 16px; 2548 flex-shrink: 0 2549 } 2550 2551 .preorder-info { 2552 margin: 12px 0; 2553 padding: 14px; 2554 background: linear-gradient(135deg, #f5f3ff 0%, #ede9fe 100%); 2555 border: 1.5px solid #c4b5fd; 2556 border-radius: 12px 2557 } 2558 2559 .preorder-info-header { 2560 display: flex; 2561 align-items: center; 2562 gap: 8px; 2563 margin-bottom: 10px 2564 } 2565 2566 .preorder-info-icon {
2567 width: 20px; 2568 height: 20px; 2569 color: #7c3aed; 2570 flex-shrink: 0 2571 } 2572 2573 .preorder-info-title { 2574 font-size: 14px; 2575 font-weight: 700; 2576 color: #5b21b6; 2577 margin: 0 2578 } 2579 2580 .preorder-info-items { 2581 display: flex; 2582 flex-direction: column; 2583 gap: 8px 2584 } 2585 2586 .preorder-info-row { 2587 display: flex; 2588 align-items: center; 2589 justify-content: space-between; 2590 font-size: 13px 2591 } 2592 2593 .preorder-info-label { 2594 color: #6b21a8; 2595 font-weight: 600 2596 } 2597 2598 .preorder-info-value { 2599 color: #5b21b6; 2600 font-weight: 700 2601 } 2602 2603 .preorder-info-value.highlight { 2604 color: #dc2626; 2605 font-size: 14px 2606 } 2607 2608 .preorder-info-note { 2609 margin-top: 10px; 2610 padding: 8px 10px; 2611 background: #fef3c7; 2612 border-left: 2px solid #f59e0b; 2613 font-size: 12px; 2614 color: #78350f; 2615 border-radius: 6px; 2616 line-height: 1.4 2617 } 2618 2619 @media(max-width:640px) { 2620 .preorder-badge { 2621 font-size: 12px; 2622 padding: 5px 10px 2623 } 2624 2625 .preorder-info { 2626 margin: 10px 0; 2627 padding: 12px 2628 } 2629 2630 .preorder-info-title { 2631 font-size: 13px 2632 } 2633 2634 .preorder-info-row { 2635 font-size: 12px 2636 } 2637 2638 .preorder-info-note { 2639 font-size: 11px; 2640 padding: 6px 8px 2641 } 2642 } 2643 </style> 2644 2645 <div class="pd-sticky-header" id="pd-sticky-header"> 2646 <div class="pd-sticky-header-container"> 2647 <div class="pd-sticky-thumb"><img src="https://moderntally.com/imagess/inovasi-game-digital.png" alt="RAJAVIP" id="pd-sticky-thumb-img"></div> 2648 <div class="pd-sticky-info"> 2649 <h2 class="pd-sticky-title" id="pd-sticky-title">RAJAVIP: Inovasi Baru Game Digital dengan Akses Mudah & Praktis 2650 </h2> 2651 <div class="pd-sticky-price-row"><span class="pd-sticky-price" id="pd-sticky-price">Rp 2652 10.000,-</span><span class="pd-sticky-price-original" id="pd-sticky-price-original">Rp 2653 1.000.000</span><span class="pd-sticky-discount" id="pd-sticky-discount">-99.0%</span></div> 2654 </div> 2655 <div class="pd-sticky-actions"><button type="button" class="pd-sticky-share-btn" id="pd-sticky-share-btn" 2656 aria-label="Bagikan produk" title="Bagikan"><svg viewBox="0 0 24 24" width="16" height="16" 2657 aria-hidden="true"> 2658 <path fill="currentColor" 2659 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" /> 2660 </svg></button><button type="button" class="pd-sticky-btn pd-sticky-btn-chat" 2661 id="pd-sticky-chat"><svg viewBox="0 0 640 640" fill="currentColor" aria-hidden="true"> 2662 <path 2663 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" /> 2664 </svg>Tanya</button><button type="button" class="pd-sticky-btn pd-sticky-btn-cart" 2665 id="pd-sticky-add-cart" disabled>+ Keranjang</button><button type="button" 2666 class="pd-sticky-btn pd-sticky-btn-buy" id="pd-sticky-buy" disabled>Beli Sekarang</button></div> 2667 </div> 2668 </div> 2669 2670 <main class="product-single product-single--v3"> 2671 <nav class="pd-breadcrumb" aria-label="breadcrumb"><a 2672 href="https://moderntally.com/">
2672RAJAVIP</a><span>/</span><a 2673 href="https://moderntally.com/">RAJAVIP LINK</a><span>/</span><a 2674 href="https://moderntally.com/">RAJA GAME</a><span>/</span><a 2675 href="https://moderntally.com/">LINK RAJA GAME</a><span>/</span><a 2676 href="https://moderntally.com/">RAJA GAME ONLINE</a> <span>/</span> 2677 <span class="current">SITUS RAJAVIP</span></nav> 2678 2679 <div class="pd-top-layout"> 2680 <section class="pd-media-card"> 2681 <figure class="pd-main-image" id="pd-main-figure"><img id="pd-main-img" src="https://moderntally.com/imagess/inovasi-game-digital.png" 2682 alt="RAJAVIP" data-slug="" loading="eager"> 2683 </figure> 2684 2685 <div class="pd-mobile-slider-wrapper"> 2686 <div class="pd-mobile-slider" id="pd-mobile-slider" aria-label="Galeri gambar (geser)"> 2687 <div class="pd-mslide"><img src="https://moderntally.com/imagess/inovasi-game-digital.png" alt="RAJAVIP" loading="eager"></div> 2688 <div class="pd-mslide"><img src="https://moderntally.com/imagess/inovasi-game-digital.png" alt="RAJAVIP" loading="lazy"></div> 2689 <div class="pd-mslide"><img src="https://moderntally.com/imagess/inovasi-game-digital.png" alt="RAJAVIP" loading="lazy"></div> 2690 <div class="pd-mslide"><img src="https://moderntally.com/imagess/inovasi-game-digital.png" alt="RAJAVIP" loading="lazy"></div> 2691 <div class="pd-mslide"><img src="https://moderntally.com/imagess/inovasi-game-digital.png" alt="RAJAVIP" loading="lazy"></div> 2692 <div class="pd-mslide"><img src="https://moderntally.com/imagess/inovasi-game-digital.png" alt="RAJAVIP" loading="lazy"></div> 2693 </div> 2694 <div class="pd-gallery-counter" id="pd-gallery-counter">1/6</div> 2695 </div> 2696 <div class="pd-thumb-gallery" id="pd-thumb-gallery" aria-label="Galeri gambar produk"><button 2697 type="button" class="pd-thumb-btn active" data-full="https://moderntally.com/imagess/inovasi-game-digital.png" data-alt="RAJAVIP" 2698 data-slug="" aria-label="Gambar 1"><img src="https://moderntally.com/imagess/inovasi-game-digital.png" alt="RAJAVIP" 2699 loading="lazy"></button><button type="button" class="pd-thumb-btn " 2700 data-full="https://moderntally.com/imagess/inovasi-game-digital.png" data-alt="RAJAVIP" data-slug="https://moderntally.com/imagess/inovasi-game-digital.png" 2701 aria-label="Gambar 2"><img src="https://moderntally.com/imagess/inovasi-game-digital.png" alt="RAJAVIP" 2702 loading="lazy"></button><button type="button" class="pd-thumb-btn " 2703 data-full="https://moderntally.com/imagess/inovasi-game-digital.png" data-alt="RAJAVIP" 2704 data-slug="lenovo-legion-go-8asp2-83n0000rid-ryzen-z2-extreme-amd-radeon-graphics-eclipse-b-1761796941-223.webp" 2705 aria-label="Gambar 3"><img src="https://moderntally.com/imagess/inovasi-game-digital.png" alt="RAJAVIP" 2706 loading="lazy"></button><button type="button" class="pd-thumb-btn " 2707 data-full="https://moderntally.com/imagess/inovasi-game-digital.png" data-alt="RAJAVIP" 2708 data-slug="lenovo-legion-go-8asp2-83n0000rid-ryzen-z2-extreme-amd-radeon-graphics-eclipse-b-1761796941-776.webp" 2709 aria-label="Gambar 4"><img src="https://moderntally.com/imagess/inovasi-game-digital.png" alt="RAJAVIP" 2710 loading="lazy"></button><button type="button" class="pd-thumb-btn " 2711 data-full="https://moderntally.com/imagess/inovasi-game-digital.png" data-alt="RAJAVIP" 2712 data-slug="lenovo-legion-go-8asp2-83n0000rid-ryzen-z2-extreme-amd-radeon-graphics-eclipse-b-1761796941-634.webp" 2713 aria-label="Gambar 5"><img src="https://moderntally.com/imagess/inovasi-game-digital.png" alt="RAJAVIP" 2714 loading="lazy"></button><button type="button" class="pd-thumb-btn " 2715 data-full="https://moderntally.com/imagess/inovasi-game-digital.png" data-alt
2715="RAJAVIP" 2716 data-slug="lenovo-legion-go-8asp2-83n0000rid-ryzen-z2-extreme-amd-radeon-graphics-eclipse-b-1761796941-892.webp" 2717 aria-label="Gambar 6"><img src="https://moderntally.com/imagess/inovasi-game-digital.png" alt="RAJAVIP" loading="lazy"></button> 2718 </div> 2719 </section> 2720 <section class="pd-info-card"> 2721 <div id="pd-variant-combined" class="pd-variant-combined" hidden></div> 2722 <div class="pd-title-row"> 2723 <h1 class="pd-title" id="pd-title">RAJAVIP: Inovasi Baru Game Digital dengan Akses Mudah & Praktis 2724 </h1><button type="button" class="pd-share-btn" id="pd-share-btn" aria-label="Bagikan produk" 2725 title="Bagikan"><svg viewBox="0 0 24 24" width="20" height="20" aria-hidden="true"> 2726 <path fill="currentColor" 2727 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" /> 2728 </svg></button> 2729 </div> 2730 <div id="pd-price-anchor"> 2731 </div> 2732 <div class="pd-price-qr-container"> 2733 <div class="pd-price-block" id="pd-price-block"> 2734 <div class="pd-price-row"> 2735 <span class="pd-price-current" id="pd-price-current">Rp 10.000</span> 2736 <span class="pd-price-original" id="pd-price-original">Rp 100.000</span> 2737 <span class="pd-discount-badge" id="pd-discount-badge">-90%</span></div> 2738 <div class="pd-meta-row"> 2739 <span class="sold-inline" id="pd-sold-inline" data-role="sold-chip">Terjual Terjual 2</span> 2740 <span class="pwp-trigger-badge" id="pwp-trigger-badge" hidden> 2741 <svg width="14" height="14" viewBox="0 0 24 24" fill="currentColor"> 2742 <path 2743 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" /> 2744 </svg>Bisa PWP</span></div> 2745 <div class="pd-meta-inline"><span class="stock-badge out" id="pd-stock-badge">
2745RAJAVIP</span> 2746 <span class="sku">SKU: <span id="pd-sku">RJ777</span></span></div> 2747 <div class="paylater-promo paylater-promo-sm paylater-mobile-only"> 2748 <span class="paylater-icon">ð³</span> 2749 <span class="paylater-text"> 2750 <strong>Autorized Game Gacor</strong> 2751 <small>Link Login RAJAVIP</small> 2752 </span> 2753 </div> 2754 2755 <div class="stock-popover" id="pd-stock-popover" role="dialog" aria-hidden="true" 2756 aria-label="Informasi stok cabang"> 2757 <div class="sp-head"> 2758 <div class="sp-title">Stok Cabang</div><button type="button" class="sp-close" 2759 id="pd-stock-popover-close" aria-label="Tutup"><svg width="18" height="18" 2760 viewBox="0 0 24 24"> 2761 <path fill="currentColor" 2762 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" /> 2763 </svg></button> 2764 </div> 2765 <ul class="sp-list"> 2766 <li class="sp-item"> 2767 <div class="sp-left"><span class="sp-dot" style="--dot:#60a5fa;"></span><span 2768 class="sp-label">Asia Mega Mas</span></div><span class="sp-qty" 2769 id="sp-qty-meg">0</span><a class="sp-wa" 2770 href="https://wa.me/6281380009898?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" 2771 target="_blank" rel="noopener" aria-label="WhatsApp Asia Mega Mas"><svg 2772 class="ico-wa" viewBox="0 0 24 24" aria-hidden="true" focusable="false"> 2773 <path fill="currentColor" 2774 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" /> 2775 </svg></a> 2776 </li> 2777 2778 <li class="sp-item"> 2779 <div class="sp-left"> 2780 <span class="sp-dot" style="--dot:#34d399;"></span> 2781 <span class="sp-label">Medan Fair</span> 2782 </div> 2783 <span class="sp-qty" id="sp-qty-mdf">0</span> 2784 <a class="sp-wa" 2785 href="https://wa.me/6285388992009?text=Halo%2C%20saya%20ingin%20tanya%20stok%20di%20Medan%20Fair%20untuk%20produk%20https%3A%2F%2Fplazait.co.id%2Fproduct%2Flenovo-legion-go-8as
2785p2-83n0000rid-ryzen-z2-extreme-amd-radeon-graphics-eclipse-black" 2786 target="_blank" rel="noopener" aria-label="WhatsApp Medan Fair"> 2787 <svg class="ico-wa" viewBox="0 0 24 24" aria-hidden="true" focusable="false"> 2788 <path fill="currentColor" 2789 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" /> 2790 </svg> 2791 </a> 2792 </li> 2793 2794 <li class="sp-item"> 2795 <div class="sp-left"> 2796 <span class="sp-dot" style="--dot:#f59e0b;"></span> 2797 <span class="sp-label">Banda Aceh</span> 2798 </div> 2799 <span class="sp-qty" id="sp-qty-bda">0</span> 2800 <a class="sp-wa" 2801 href="https://wa.me/628116833411?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" 2802 target="_blank" rel="noopener" aria-label="WhatsApp Banda Aceh"> 2803 <svg class="ico-wa" viewBox="0 0 24 24" aria-hidden="true" focusable="false"> 2804 <path fill="currentColor" 2805 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" /> 2806 </svg> 2807 </a> 2808 </li> 2809 </ul> 2810 </div> 2811 2812 </div> 2813 <div class="pd-qr-print" style="display:none;"> 2814 <div class="pd-qr-label">Scan untuk lihat produk:</div><img 2815 src="https://api.qrserver.com/v1/create-qr-code/?size=120x120&data=https%3A%2F%2Fplazait.co.id%2Fproduct%2Flenovo-legion-go-8as
2815p2-83n0000rid-ryzen-z2-extreme-amd-radeon-graphics-eclipse-black" 2816 alt="QR Code" class="pd-qr-image"> 2817 </div> 2818 </div> 2819 <div id="pd-variants-anchor"></div> 2820 2821 2822 2823 <div class="pd-compare-section"> 2824 <button type="button" class="pd-compare-btn" id="pd-compare-btn" data-product-id="325"> 2825 <svg class="compare-icon" width="18" height="18" viewBox="0 0 24 24" fill="currentColor"> 2826 <path d="M21,9L17,5V8H10V10H17V13M7,11L3,15L7,19V16H14V14H7V11Z" /> 2827 </svg> 2828 <span class="compare-text">Bandingkan Produk</span> 2829 <span class="compare-remove" hidden> 2830 <svg width="18" height="18" viewBox="0 0 24 24" fill="currentColor"> 2831 <path 2832 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" /> 2833 </svg> 2834 Hapus dari Perbandingan 2835 </span> 2836 </button> 2837 <div class="pd-compare-info"> 2838 <small class="compare-note" id="compare-note">Bandingkan hingga 5 produk dengan bantuan 2839 AI</small> 2840 </div> 2841 </div> 2842 2843 <style> 2844 /* Section utama */ 2845 .article-wrapper { 2846 max-width: 850px; 2847 margin: 60px auto; 2848 padding: 40px; 2849 background: #ffffff; 2850 border-radius: 10px; 2851 box-shadow: 0 8px 25px rgba(0, 0, 0, 0.08); 2852 font-family: Arial, Helvetica, sans-serif; 2853 color: #333; 2854 line-height: 1.8; 2855 } 2856 2857 /* Judul utama */ 2858 .article-wrapper h1 { 2859 font-size: 28px; 2860 margin-bottom: 20px; 2861 line-height: 1.4; 2862 } 2863 2864 /* Subjudul */ 2865 .article-wrapper h2 { 2866 font-size: 20px; 2867 margin-top: 35px; 2868 margin-bottom: 15px; 2869 padding-left: 12px; 2870 border-left: 4px solid #555; 2871 } 2872 2873 /* Paragraf */ 2874 .article-wrapper p { 2875 margin-bottom: 18px; 2876 text-align: justify; 2877 font-size: 16px; 2878 } 2879 2880 /* Highlight box */ 2881 .highlight-box { 2882 background: #f3f3f3; 2883 padding: 18px; 2884 margin: 25px 0; 2885 border-radius: 6px; 2886 border-left: 4px solid #888; 2887 font-size: 15px; 2888 } 2889 2890 /* Responsive */ 2891 @media(max-width:768px) { 2892 .article-wrapper { 2893 margin: 20px; 2894 padding: 25px; 2895 } 2896 2897 .article-wrapper h1 { 2898 font-size: 22px; 2899 } 2900 2901 .article-wrapper p { 2902 font-size: 15px; 2903 } 2904 } 2905 </style> 2906 <section class="article-wrapper"> 2907 2908 <h1>RAJAVIP: Inovasi Baru Game Digital dengan Akses Mudah & Praktis</h1> 2909 2910 <p style="text-align: justify;"><a href="https://moderntally.com/">RAJAVIP</a> hadir membawa inovasi baru game digital dengan akses mudah dan praktis, serta beragam hiburan populer yang seru untuk dinikmati setiap saat.</p> 2911 2912 <style> 2913 .n-columns-2 { 2914 display: grid; 2915 grid-template-columns: repeat(2, 1fr); 2916 gap: 1rem; 2917 font-weight: 600; 2918 margin: 0 auto 0.5rem; 2919 padding-top: 20px; 2920 max-width: 1280px; 2921 } 2922 2923 .n-columns-2 a { 2924 text-align: center; 2925 color: #fff; 2926 padding: 14px 12px; 2927 border-radius: 12px; 2928 text-decoration: none 2929 } 2930 2931 .n-columns-2 a:hover { 2932 transform: translateY(-4px) scale(1.02); 2933 box-shadow: 0 6px 15px rgba(0, 0, 0, .4) 2934 } 2935 2936 .n-columns-2 a span { 2937 position: relative; 2938 z-index: 1 2939 } 2940 2941 .login { 2942 overflow: hidden; 2943 position: relative; 2944 border: 2px solid gold; 2945 background: rgb(255, 217, 0) 2946 } 2947 2948 .register { 2949 background: rgb(255, 0, 0); 2950 border: 2px solid red; 2951 overflow: hidden; 2952 position: relative; 2953 } 2954 2955 .login::before, 2956 .register::before, 2957 .css-1ihqho8::before { 2958 content: ""; 2959 position: absolute; 2960 top: 0; 2961 left: 0; 2962 right: 0; 2963 bottom: 0; 2964 background: radial-gradient(circle at 30% 70%, rgba(246, 92, 92, 0.3) 0%, transparent 50%), radial-gradient(circle at 70% 30%, rgba(255, 0, 0, 0.3) 0%, transparent 50%), radial-gradient(circle at 20% 20%, rgba(0, 0, 0, 0.1) 0%, transparent 40%), radial-gradient(circle at 80% 80%, rgba(255, 255, 255, 0.1) 0%, transparent 40%), black; 2965 z-index: -2 2966 } 2967 2968 .login::after, 2969 .register::after, 2970 .css-1ihqho8::after { 2971 content: ""; 2972 position: absolute; 2973 top: 0; 2974 left: 0; 2975 right: 0; 2976 bottom: 0; 2977 background-image: radial-gradient(3px 3px at 20px 30px, white, transparent), radial-gradient(3px 3px at 40px 70px, rgba(255, 255, 255, 0.8), transparent), radial-gradient(2px 2px at 90px 40px, rgba(255, 255, 255, 0.6), transparent), radial-gradient(2px 2px at 130px 80px, rgba(255, 255, 255, 0.4), transparent), radial-gradient(2px 2px at 160px 30px, rgba(255, 255, 255, 0.7), transparent); 2978 background-repeat: repeat; 2979 background-size: 200px 100px; 2980 animation: stars 20s linear infinite; 2981 z-index: -1; 2982 opacity: 0.5; 2983 } 2984 2985 @keyframes stars { 2986 from { 2987 transform: translateX(0); 2988 } 2989 2990 to { 2991 transform: translateX(-200px); 2992 } 2993 } 2994 </style> 2995 <div class="n-columns-2"> 2996 <a href="https://vpnwarp.win/rajavipslot" class="login"><span>LOGIN</span></a> 2997 2998 <a href="https://vpnwarp.win/rajavipslot" class="register"><span>DAFTAR</span></a> 2999 </div> 3000 </div> 3001 <div class="pwp-deals-section" id="pwp-deals-section" hidden data-product-id="325" data-variant-id="0" 3002 data-category-path="Komputer & Laptop/Laptop/Gaming"> 3003 <div class="pwp-deals-header"><svg class="pwp-icon" width="20" height="20" viewBox="0 0 24 24" 3004 fill="currentColor"> 3005 <path 3006 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
3006-.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" /> 3007 </svg> 3008 <div class="pwp-text"> 3009 <h3 class="pwp-title">Penawaran Spesial PWP (Purchase with Purchase)</h3> 3010 <p class="pwp-subtitle">Beli produk ini dan dapatkan produk pilihan dengan harga spesial</p> 3011 </div> 3012 </div> 3013 <div class="pwp-deals-loading"> 3014 <div class="pwp-spinner"></div> 3015 <p>Memuat penawaran...</p> 3016 </div> 3017 <div class="pwp-deals-grid" id="pwp-deals-grid"></div> 3018 <p class="pwp-cart-note">ð¡ Produk PWP dapat ditambahkan di halaman keranjang setelah produk ini dimasukkan 3019 </p> 3020 </div> 3021 </section> 3022 3023 <aside class="pd-sidebar"> 3024 <div class="pd-side-card pd-buy-card"> 3025 <form class="pd-buy-form" id="pd-buy-form" data-pid="325"> 3026 <input type="hidden" name="variant_id" id="pd-variant-id" value="0"> 3027 <div> 3028 <label for="qty" class="qty-label">Qty</label> 3029 <input type="number" id="qty" name="qty" value="0" min="1" max="0" disabled> 3030 </div> 3031 <div class="pd-actions"> 3032 <button type="submit" class="btn-add-cart" id="btn-add-cart" disabled>+ Keranjang</button> 3033 <button type="button" class="btn-buy" id="btn-buy" data-id="278426" disabled>Beli</button> 3034 <button type="button" class="btn-chat-icon" id="btn-chat-icon" aria-label="Tanya Produk" 3035 title="Tanya Produk"><svg viewBox="0 0 640 640" fill="currentColor"> 3036 <path 3037 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" /> 3038 </svg></button> 3039 </div> 3040 </form> 3041 <div class="paylater-promo paylater-promo-md paylater-desktop-only"> 3042 <span class="paylater-icon">ð³</span> 3043 <span class="paylater-text"> 3044 <strong>Autorized Link Raja Game</strong> 3045 <small>Link Login RAJAVIP</small> 3046 </span> 3047 </div> 3048 </div> 3049 3050 3051 <div class="pd-side-card qoala-banner-card"> 3052 <div class="qoala-banner"> 3053 <div class="qoala-banner-content"> 3054 <div class="qoala-icon"> 3055 <center><img src="https://moderntally.com/imagess/icon-rajavip.png" alt="RAJAVIP" class="qoala-shield-img"></center> 3056 </div> 3057 <div class="qoala-text"> 3058 <div class="qoala-title">Login RAJAVIP</div> 3059 <div class="qoala-subtitle">Verified</div> 3060 </div> 3061 </div> 3062 <a href="https://moderntally.com/" class="qoala-cta" 3063 data-ga-event="qoala_banner_click" data-product-id="325" data-product-name="RAJAVIP" 3064 data-category-path="Komputer & Laptop/Laptop/Gaming" target="_blank">Info</a> 3065 </div> 3066 <style> 3067 .qoala-banner-card { 3068 padding: 0; 3069 overflow: hidden 3070 } 3071 3072 .qoala-banner { 3073 background: linear-gradient(135deg, #b31a1a 0%, #b31a1a 100%); 3074 padding: 12px 16px; 3075 display: flex; 3076 align-items: center; 3077 justify-content: space-between; 3078 color: white; 3079 text-decoration: none; 3080 min-height: 60px 3081 } 3082 3083 .qoala-banner-content { 3084 display: flex; 3085 align-items: center; 3086 gap: 12px 3087 } 3088 3089 .qoala-icon { 3090 display: flex; 3091 align-items: center; 3092 justify-content: center 3093 } 3094 3095 .qoala-shield-img { 3096 width: 36px; 3097 height: 36px; 3098 object-fit: contain; 3099 opacity: 0.9 3100 } 3101 3102 .qoala-title { 3103 font-weight: 600; 3104 font-size: 14px; 3105 line-height: 1.2 3106 } 3107 3108 .qoala-subtitle { 3109 font-size: 12px; 3110 opacity: 0.9; 3111 line-height: 1.2 3112 } 3113 3114 .qoala-cta { 3115 background: rgba(255, 255, 255, 0.2); 3116 color: white; 3117 padding: 6px 12px; 3118 border-radius: 6px; 3119 font-size: 12px; 3120 font-weight: 600; 3121 text-decoration: none; 3122 transition: background 0.2s ease; 3123 border: 1px solid rgba(255, 255, 255, 0.3) 3124 } 3125 3126 .qoala-cta:hover { 3127 background: rgba(255, 255, 255, 0.3); 3128 color: white 3129 } 3130 3131 @media(max-width:768px) { 3132 .qoala-banner { 3133 padding: 10px 12px 3134 } 3135 3136 .qoala-title { 3137 font-size: 17px 3138 } 3139 3140 .qoala-subtitle { 3141 font-size: 11px 3142 } 3143 } 3144 </style> 3145 </div> 3146 3147 <style> 3148 .alex-table-wrapper { 3149 max-width: 900px; 3150 margin: 60px auto; 3151 font-family: Arial, sans-serif; 3152 } 3153 3154 .alex-table-title { 3155 text-align: center; 3156 font-size: 26px; 3157 color: #000000; 3158 font-weight: bold; 3159 margin-bottom: 20px; 3160 text-shadow: 0 0 10px yellow; 3161 } 3162 3163 .alex-table { 3164 width: 100%; 3165 border-collapse: collapse; 3166 background: #000; 3167 border: 2px solid rgb(64, 0, 255); 3168 box-shadow: 0 0 15px yellow; 3169 color: #fff; 3170 } 3171 3172 .alex-table th, 3173 .alex-table td { 3174 padding: 14px; 3175 border: 1px solid rgb(179, 26, 26); 3176 text-align: left; 3177 } 3178 3179 .alex-table th { 3180 background: #111; 3181 color: rgb(179, 26, 26); 3182 } 3183 3184 .alex-table tr:nth-child(even) { 3185 background: #0a0a0a; 3186 } 3187 3188 .alex-table tr:hover { 3189 background: #111; 3190 } 3191 </style> 3192 3193 <div class="alex-table-wrapper"> 3194 3195 <div class="alex-table-title"> 3196 Informasi Situs RAJAVIP 3197 </div> 3198 3199 <table class="alex-table"> 3200 3201 <tr> 3202 <th>Nama Situs</th> 3203 <td>
3203RAJAVIP</td> 3204 </tr> 3205 3206 <tr> 3207 <th>Jenis Permainan</th> 3208 <td>Game Online</td> 3209 </tr> 3210 3211 <tr> 3212 <th>Minimal Deposit</th> 3213 <td>Rp10.000</td> 3214 </tr> 3215 3216 <tr> 3217 <th>Metode Akses</th> 3218 <td>Smartphone, Tablet, dan Desktop</td> 3219 </tr> 3220 3221 <tr> 3222 <th>Program Bonus</th> 3223 <td>Bonus New Member, Bonus Harian, Bonus Mingguan</td> 3224 </tr> 3225 3226 <tr> 3227 <th>Layanan</th> 3228 <td>Online 24 Jam</td> 3229 </tr> 3230 3231 <tr> 3232 <th>Keunggulan</th> 3233 <td>Permainan terlengkap, akses cepat, dan dijamin approve pasti seru</td> 3234 </tr> 3235 3236 </table> 3237 3238 </div> 3239 3240 <style> 3241 .sembunyi { 3242 display: none; 3243 } 3244 </style> 3245 <div class="sembunyi"> 3246 <div class="sembunyi"> 3247 3248 </div> 3249 <a href="https://moderntally.com/" 3250 class="iab-cta iab-cta--compact" 3251 aria-label="Lihat detail cicilan Kredivo, Home Credit, Indodana">Detail & Syarat</a> 3252 <div class="iab-footnote iab-footnote--compact">*S&K penyedia berlaku</div> 3253 </div> 3254 </aside> 3255 </div> 3256 <style> 3257 .alex-faq-wrapper { 3258 max-width: 900px; 3259 margin: 60px auto; 3260 font-family: Arial, sans-serif; 3261 } 3262 3263 .alex-faq-title { 3264 text-align: center; 3265 font-size: 26px; 3266 color: #000000; 3267 font-weight: bold; 3268 margin-bottom: 30px; 3269 text-shadow: 0 0 10px yellow; 3270 } 3271 3272 .alex-faq-container { 3273 background: #ffffff; 3274 border: 2px solid rgb(0, 200, 255); 3275 border-radius: 10px; 3276 box-shadow: 0 0 15px yellow; 3277 overflow: hidden; 3278 } 3279 3280 .alex-faq-slider { 3281 display: flex; 3282 transition: transform 0.6s ease; 3283 } 3284 3285 .alex-faq-item { 3286 min-width: 100%; 3287 padding: 30px; 3288 color: #000000; 3289 } 3290 3291 .alex-faq-question { 3292 font-size: 18px; 3293 font-weight: bold; 3294 color: #000000; 3295 margin-bottom: 10px; 3296 } 3297 3298 .alex-faq-answer { 3299 font-size: 15px; 3300 line-height: 1.7; 3301 color: #000000; 3302 } 3303 </style> 3304 3305 <section class="alex-faq-wrapper"> 3306 3307 <div class="alex-faq-title"> 3308 FAQ RAJAVIP Link Raja Game 3309 </div> 3310 3311 <div class="alex-faq-container"> 3312 3313 <div class="alex-faq-slider" id="faqSlider"> 3314 3315 <div class="alex-faq-item"> 3316 <div class="alex-faq-question"> 3317 Apa itu RAJAVIP? 3318 </div> 3319 <div class="alex-faq-answer"> 3320 RAJAVIP adalah situs hiburan online terbaru yang menyediakan berbagai pilihan game populer dengan sistem yang dirancang untuk memberikan pengalaman bermain yang mudah dan menguntungkan. 3321 </div> 3322 </div> 3323 3324 <div class="alex-faq-item"> 3325 <div class="alex-faq-question"> 3326 Mengapa RAJAVIP disebut link raja game online terbaik? 3327 </div> 3328 <div class="alex-faq-answer"> 3329 Karena RAJAVIP menghadirkan layanan stabil, akses cepat, pilihan permainan lengkap, serta pengalaman bermain yang nyaman bagi para pengguna. 3330 </div> 3331 </div> 3332 3333 <div class="alex-faq-item"> 3334 <div class="alex-faq-question"> 3335 Apakah RAJAVIP cocok untuk pemula? 3336 </div> 3337 <div class="alex-faq-answer"> 3338 Ya, RAJAVIP sangat cocok untuk pemula karena memiliki tampilan yang ramah pengguna, proses daftar yang mudah, serta berbagai panduan bermain yang membantu pemain baru. 3339 </div> 3340 </div> 3341 3342 <div class="alex-faq-item"> 3343 <div class="alex-faq-question"> 3344 Hiburan apa saja yang tersedia di RAJAVIP? 3345 </div> 3346 <div class="alex-faq-answer"> 3347 RAJAVIP menyediakan berbagai hiburan digital menarik seperti game online populer, permainan interaktif, dan layanan yang dirancang untuk memberikan pengalaman bermain yang seru setiap hari. 3348 </div> 3349 </div> 3350 3351 <div class="alex-faq-item"> 3352 <div class="alex-faq-question"> 3353 Bagaimana cara mengakses RAJAVIP dengan aman? 3354 </div> 3355 <div class="alex-faq-answer"> 3356 Untuk mengakses RAJAVIP dengan aman, pastikan menggunakan link resmi terbaru, koneksi internet yang stabil, serta menghindari tautan yang tidak terpercaya 3357 </div> 3358 </div> 3359 3360 </div> 3361 3362 </div> 3363 </div> 3364 </section> 3365 3366
3366<script> 3367 let faqIndex = 0; 3368 const faqSlider = document.getElementById("faqSlider"); 3369 const totalFAQ = faqSlider.children.length; 3370 3371 function autoSlideFAQ() { 3372 faqIndex++; 3373 if (faqIndex >= totalFAQ) { 3374 faqIndex = 0; 3375 } 3376 faqSlider.style.transform = "translateX(-" + faqIndex * 100 + "%)"; 3377 } 3378 3379 setInterval(autoSlideFAQ, 4000); 3380 </script>
3380 3381 3382
3382<script> 3383 const faqItems = document.querySelectorAll(".faq-item"); 3384 faqItems.forEach(item => { 3385 item.querySelector(".faq-question").addEventListener("click", () => { 3386 item.classList.toggle("active"); 3387 }); 3388 }); 3389 </script>
3389 3390 3391 3392 3393 3394 </section> 3395 3396 3397 3398 <section class="pd-related-full"> 3399 <h2 class="pd-related-title">Produk Terkait</h2> 3400 <div class="pd-related-grid pd-related-grid--full"> 3401 <a class="pd-related-card" href="https://moderntally.com/"> 3402 <div class="thumb"> 3403 <img src="https://moderntally.com/imagess/inovasi-game-digital.png" alt="RAJAVIP"> 3404 <span class="mini-disc">-2%</span> </div> 3405 <div class="info"> 3406 <h3>RAJAVIP</h3> 3407 <div class="spec-chips">HOT <span class="spec-divider">|</span> Spin Games <span 3408 class="spec-divider">|</span> Akurat by <span class="spec-divider">|</span> Raja Game</div> 3409 <span class="price"> 3410 <span class="final">Rp 58.600.000</span> 3411 <span class="ori">Rp 12.799.000</span> 3412 </span> 3413 <span class="sold">Terjual 200+</span> <span class="stock-dot low" title="Stok Terbatas"></span> 3414 </div> 3415 </a> 3416 <a class="pd-related-card" href="https://moderntally.com/"> 3417 <div class="thumb"> 3418 <img src="https://moderntally.com/imagess/inovasi-game-digital.png" alt="RAJAVIP"> 3419 <span class="mini-disc">-1%</span> </div> 3420 <div class="info"> 3421 <h3>SITUS RAJAVIP</h3> 3422 <div class="spec-chips">HOT <span class="spec-divider">|</span> Live Games <span 3423 class="spec-divider">|</span> Akurat by <span class="spec-divider">|</span> Raja Game</div> <span 3424 class="price"> 3425 <span class="final">Rp 15.779.000</span> 3426 <span class="ori">Rp 16.999.000</span> 3427 </span> 3428 <span class="sold">Terjual 20+</span> <span class="stock-dot out" title="Habis"></span> 3429 </div> 3430 </a> 3431 <a class="pd-related-card" href="https://moderntally.com/"> 3432 <div class="thumb"> 3433 <img src="https://moderntally.com/imagess/inovasi-game-digital.png" alt="RAJAVIP"> 3434 <span class="mini-disc">-1%</span> </div> 3435 <div class="info"> 3436 <h3>RAJAVIP LINK</h3> 3437 <div class="spec-chips">HOT<span class="spec-divider">|</span> Arcade Games <span 3438 class="spec-divider">|</span> Akurat by <span class="spec-divider">|</span> Raja Game</div> 3439 <span class="price"> 3440 <span class="final">Rp 121.200.000</span> 3441 <span class="ori">Rp 121.399.000</span> 3442 </span> 3443 <span class="sold">Terjual 6</span> <span class="stock-dot ready" title="Ready"></span> 3444 </div> 3445 </a> 3446 <a class="pd-related-card" href="https://moderntally.com/"> 3447 <div class="thumb"> 3448 <img src="https://moderntally.com/imagess/inovasi-game-digital.png" alt="RAJAVIP"> 3449 <span class="mini-disc">-1%</span> </div> 3450 <div class="info"> 3451 <h3>RAJA GAME</h3> 3452 <div class="spec-chips">HOT<span class="spec-divider">|</span> Table Games <span 3453 class="spec-divider">|</span> Akurat by <span class="spec-divider">|</span> Raja Game</div> 3454 <span class="price"> 3455 <span class="final">Rp 99.600.000</span> 3456 <span class="ori">Rp 99.799.000</span> 3457 </span> 3458 <span class="sold">Terjual 5</span> <span class="stock-dot ready" title="Ready"></span> 3459 </div> 3460 </a> 3461 <a class="pd-related-card" href="https://moderntally.com/"> 3462 <div class="thumb"> 3463 <img src="https://moderntally.com/imagess/inovasi-game-digital.png" alt="RAJAVIP">
3464 <span class="mini-disc">-1%</span> </div> 3465 <div class="info"> 3466 <h3>LINK RAJA GAME</h3> 3467 <div class="spec-chips">HOT<span class="spec-divider">|</span> Premium <span 3468 class="spec-divider">|</span> Akurat by <span class="spec-divider">|</span> Raja Game</div> 3469 <span class="price"> 3470 <span class="final">Rp 57.599.000</span> 3471 <span class="ori">Rp 57.999.000</span> 3472 </span> 3473 <span class="sold">Terjual 6</span> <span class="stock-dot low" title="Stok Terbatas"></span> 3474 </div> 3475 </a> 3476 <a class="pd-related-card" href="https://moderntally.com/"> 3477 <div class="thumb"> 3478 <img src="https://moderntally.com/imagess/inovasi-game-digital.png" alt="RAJAVIP"> 3479 <span class="mini-disc">-1%</span> </div> 3480 <div class="info"> 3481 <h3>RAJA GAME ONLINE</h3> 3482 <div class="spec-chips">Resmi <span class="spec-divider">|</span> Ekslusif <span 3483 class="spec-divider">|</span> Akurat by <span class="spec-divider">|</span> Raja Game</div> 3484 <span class="price"> 3485 <span class="final">Rp 88.315.000</span> 3486 <span class="ori">Rp 88.499.000</span> 3487 </span> 3488 <span class="stock-dot low" title="Stok Terbatas"></span> 3489 </div> 3490 </a> 3491 3492 </div> 3493 </section> 3494 3495 <div class="pd-mobile-fab" id="pd-mobile-fab" data-pid="325" data-price="20789000" data-voucher-code="" 3496 data-voucher-value="0"> 3497 <div class="mf-actions"><button type="button" class="mf-btn mf-share" id="mf-share" 3498 aria-label="Bagikan"><svg viewBox="0 0 24 24" width="18" height="18" aria-hidden="true"> 3499 <path fill="currentColor" 3500 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" /> 3501 </svg></button><button type="button" class="mf-btn mf-chat" id="mf-chat" 3502 aria-label="Tanya Produk"><svg viewBox="0 0 640 640" fill="currentColor"> 3503 <path 3504 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" /> 3505 </svg></button><button type="button" class="mf-btn mf-cart" id="mf-cart" disabled 3506 aria-label="Tambah ke keranjang"><svg viewBox="0 0 24 24" width="18" height="18" aria-hidden="true"> 3507 <path fill="currentColor" 3508 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" /> 3509 </svg></button><button type="button" class="mf-btn mf-buy" id="mf-buy" disabled><span 3510 class="mf-buy-text">Beli Sekarang</span><span class="mf-buy-price">Rp 20.789.000</span></button> 3511 </div> 3512 </div> 3513 3514 <button type="button" class="pd-scroll-top" id="pd-scroll-top" aria-label="Kembali ke atas" 3515 title="Kembali ke atas"> 3516 <svg viewBox="0 0 24 24" width="20" height="20" aria-hidden="true">
3517 <path fill="currentColor" d="M7.41 14.59 12 10l4.59 4.59L18 13.17l-6-6-6 6z" /> 3518 </svg> 3519 </button> 3520 </main> 3521 3522 <div class="pd-share-modal-overlay" id="pd-share-modal-overlay"> 3523 <div class="pd-share-modal"> 3524 <div class="pd-share-header"> 3525 <h2 class="pd-share-title">Bagikan Produk</h2><button type="button" class="pd-share-close" 3526 id="pd-share-close" aria-label="Tutup"><svg width="20" height="20" viewBox="0 0 24 24"> 3527 <path fill="currentColor" 3528 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" /> 3529 </svg></button> 3530 </div> 3531 <div class="pd-share-body"> 3532 <div class="pd-share-preview"><img src="https://moderntally.com/imagess/inovasi-game-digital.png" alt="RAJAVIP" 3533 class="pd-share-preview-img"> 3534 <div class="pd-share-preview-info"> 3535 <h3 class="pd-share-preview-name">RAJAVIP</h3> 3536 <p class="pd-share-preview-price">Rp 20.789.000</p> 3537 </div> 3538 </div> 3539 <p class="pd-share-label">Bagikan ke</p> 3540 <div class="pd-share-grid"><a href="#" class="pd-share-option" data-share="whatsapp" target="_blank" 3541 rel="noopener"><span class="pd-share-icon pd-share-icon-whatsapp"><svg viewBox="0 0 24 24"> 3542 <path fill="currentColor" 3543 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" /> 3544 </svg></span><span class="pd-share-name">WhatsApp</span></a><a href="#" 3545 class="pd-share-option" data-share="facebook" target="_blank" rel="noopener"><span 3546 class="pd-share-icon pd-share-icon-facebook"><svg viewBox="0 0 24 24"> 3547 <path fill="currentColor" 3548 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" /> 3549 </svg></span><span class="pd-share-name">Facebook</span></a><a href="#" 3550 class="pd-share-option" data-share="twitter" target="_blank" rel="noopener"><span 3551 class="pd-share-icon pd-share-icon-twitter"><svg viewBox="0 0 24 24"> 3552 <path fill="currentColor" 3553 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" /> 3554 </svg></span><span class="pd-share-name">Twitter</span></a><a href="#" 3555 class="pd-share-option" data-share="telegram" target="_blank" rel="noopener"><span 3556 class="pd-share-icon pd-share-icon-telegram"><svg viewBox="0 0 24 24">
3557 <path fill="currentColor" 3558 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" /> 3559 </svg></span><span class="pd-share-name">Telegram</span></a><a href="#" 3560 class="pd-share-option" data-share="email"><span class="pd-share-icon pd-share-icon-email"><svg 3561 viewBox="0 0 24 24"> 3562 <path fill="currentColor" 3563 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" /> 3564 </svg></span><span class="pd-share-name">Email</span></a><button type="button" 3565 class="pd-share-option" data-share="copy"><span class="pd-share-icon pd-share-icon-copy"><svg
3566 viewBox="0 0 24 24"> 3567 <path fill="currentColor" 3568 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" /> 3569 </svg></span><span class="pd-share-name">Salin Link</span></button><button type="button" 3570 class="pd-share-option" data-share="pdf"><span class="pd-share-icon pd-share-icon-pdf"><svg 3571 viewBox="0 0 24 24"> 3572 <path fill="currentColor" 3573 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" /> 3574 </svg></span><span class="pd-share-name">Export PDF</span></button></div> 3575 <div class="pd-share-copy-section"> 3576 <div class="pd-share-copy-input-wrap"><input type="text" class="pd-share-copy-input" 3577 id="pd-share-url-input" 3578 value="https://moderntally.com/" 3579 readonly><button type="button" class="pd-share-copy-btn" id="pd-share-copy-url-btn"><svg
3580 viewBox="0 0 24 24" width="16" height="16"> 3581 <path fill="currentColor" 3582 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" /> 3583 </svg><span class="pd-share-copy-text">Salin</span></button></div> 3584 </div> 3585 </div> 3586 </div> 3587 </div> 3588 3589 <style> 3590 .toast-root { 3591 position: fixed; 3592 left: 50%; 3593 bottom: 18px; 3594 transform: translateX(-50%); 3595 display: flex; 3596 flex-direction: column; 3597 gap: 10px; 3598 z-index: 99999; 3599 pointer-events: none; 3600 max-width: min(92vw, 540px) 3601 } 3602 3603 .toast { 3604 display: grid; 3605 grid-template-columns: 28px 1fr auto; 3606 gap: 12px; 3607 background: #0b1220; 3608 color: #eef3ff; 3609 border: 1px solid rgba(255, 255, 255, .08); 3610 padding: 12px 14px; 3611 border-radius: 12px; 3612 box-shadow: 0 10px 30px rgba(10, 10, 20, .35); 3613 pointer-events: auto; 3614 overflow: hidden 3615 } 3616 3617 .toast .ico { 3618 align-self: start; 3619 margin-top: 2px 3620 } 3621 3622 .toast .ttl { 3623 font-weight: 700; 3624 line-height: 1.25; 3625 font-size: 14px; 3626 margin-bottom: 4px 3627 } 3628 3629 .toast .msg { 3630 opacity: .95; 3631 line-height: 1.45; 3632 font-size: 13px 3633 } 3634 3635 .toast .actions { 3636 display: flex; 3637 gap: 8px; 3638 align-self: center 3639 } 3640 3641 .toast .btn { 3642 background: #0ea5e9; 3643 color: #fff; 3644 border: 0; 3645 border-radius: 999px; 3646 padding: 8px 12px; 3647 font-size: 12px; 3648 font-weight: 700; 3649 cursor: pointer 3650 } 3651 3652 .toast .btn.alt { 3653 background: transparent; 3654 color: #8fb5ff; 3655 border: 1px solid rgba(143, 181, 255, .35) 3656 } 3657 3658 .toast .close { 3659 background: transparent; 3660 border: 0; 3661 color: #98a2b3; 3662 cursor: pointer; 3663 padding: 4px; 3664 margin-left: 6px 3665 } 3666 3667 .toast.success { 3668 border-left: 4px solid #22c55e 3669 } 3670 3671 .toast.info { 3672 border-left: 4px solid #0ea5e9 3673 } 3674 3675 .toast.warn { 3676 border-left: 4px solid #f59e0b 3677 } 3678 3679 .toast .progress { 3680 position: absolute; 3681 left: 0; 3682 bottom: 0; 3683 height: 3px; 3684 background: linear-gradient(90deg, #60a5fa, #22c55e); 3685 width: 100%; 3686 transform-origin: left; 3687 animation: toastBar linear forwards 3688 } 3689 3690 @keyframes toastBar { 3691 from { 3692 transform: scaleX(1) 3693 } 3694 3695 to { 3696 transform: scaleX(0) 3697 } 3698 } 3699 3700 @media(max-width:640px) { 3701 .toast { 3702 grid-template-columns: 24px 1fr auto; 3703 padding: 12px 3704 } 3705 3706 .toast .btn { 3707 padding: 7px 10px 3708 } 3709 } 3710 </style> 3711 <style> 3712 .toast .msg { 3713 word-break: break-word; 3714 overflow-wrap: anywhere; 3715 } 3716 3717 .toast-root { 3718 bottom: max(12px, env(safe-area-inset-bottom, 12px)); 3719 } 3720 3721 @media (max-width: 540px) { 3722 .toast-root { 3723 left: 0; 3724 right: 0; 3725 transform: none; 3726 padding: 0 12px; 3727 bottom: calc(max(12px, env(safe-area-inset-bottom, 12px)) + var(--fab-offset, 72px)); 3728 max-width: none; 3729 } 3730 3731 .toast { 3732 grid-template-columns: 1fr; 3733 /* 1 kolom */ 3734 position: relative; 3735 padding: 14px 14px 12px 14px; 3736 border-radius: 16px; 3737 } 3738 3739 .toast .ico { 3740 position: absolute; 3741 left: 14px; 3742 top: 14px; 3743 margin: 0; 3744 transform: translateY(1px); 3745 } 3746 3747 .toast .cnt { 3748 padding-left: 34px; 3749 } 3750 3751 .toast .ttl { 3752 font-size: 15px; 3753 margin-bottom: 6px; 3754 } 3755 3756 .toast .msg { 3757 font-size: 13px; 3758 opacity: .96; 3759 } 3760 3761 .toast .actions { 3762 margin-top: 12px; 3763 gap: 10px; 3764 width: 100%; 3765 display: grid; 3766 grid-template-columns: 1fr 1fr; 3767 } 3768 3769 .toast .btn { 3770 width: 100%; 3771 min-width: 0; 3772 padding: 10px 0; 3773 } 3774 3775 .toast .close { 3776 position: absolute; 3777 right: 6px; 3778 top: 6px; 3779 } 3780 } 3781 </style> 3782 3783
3783<script nonce="se3iyzEHMc9FQEB4wSyd0w=="> 3784 (function adjustToastFabOffset() { 3785 const root = document.getElementById('toastRoot'); 3786 if (!root) return; 3787 3788 function isVisible(el) { 3789 if (!el) return false; 3790 const cs = getComputedStyle(el); 3791 if (cs.display === 'none' || cs.visibility === 'hidden' || cs.opacity === '0') return false; 3792 const r = el.getBoundingClientRect(); 3793 return r.width > 0 && r.height > 0; 3794 } 3795 3796 function update() { 3797 const fab = document.getElementById('pd-mobile-fab'); 3798 let extra = 16; 3799 if (isVisible(fab)) { 3800 const h = Math.round(fab.getBoundingClientRect().height) || 56; 3801 extra = h + 16; // FAB height + margin 3802 } 3803 root.style.setProperty('--fab-offset', extra + 'px'); 3804 } 3805 3806 window.addEventListener('resize', update, { 3807 passive: true 3808 }); 3809 const fab = document.getElementById('pd-mobile-fab'); 3810 if (window.ResizeObserver && fab) { 3811 const ro = new ResizeObserver(update); 3812 ro.observe(fab); 3813 } 3814 3815 update(); 3816 })(); 3817 </script>
3817 3818 <div class="toast-root" id="toastRoot" aria-live="polite" aria-atomic="true"></div> 3819 3820
3820<script nonce="se3iyzEHMc9FQEB4wSyd0w=="> 3821 (function () { 3822 const root = document.getElementById('toastRoot'); 3823 3824 function svgIcon(kind) { 3825 if (kind === 'success') 3826 return '<svg width="24" height="24" viewBox="0 0 24 24" fill="#22c55e"><path d="M9 16.2l-3.5-3.5 1.4-1.4L9 13.4l7.7-7.7 1.4 1.4z"/></svg>'; 3827 if (kind === 'warn') 3828 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>'; 3829 return '<svg width="24" height="24" viewBox="0 0 24 24" fill="#0ea5e9"><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="#0ea5e9"/></svg>' 3830 } 3831 window.showToast = function (opts) { 3832 const o = Object.assign({ 3833 title: '', 3834 message: '', 3835 type: 'info', 3836 duration: 4000, 3837 actions: [] 3838 }, opts || {}); 3839 const el = document.createElement('div'); 3840 el.className = 'toast ' + (o.type || 'info'); 3841 el.setAttribute('role', 'status'); 3842 el.style.position = 'relative'; 3843 const acts = (o.actions || []).map(a => { 3844 const lab = a.label || 'OK'; 3845 const cls = 'btn' + (a.variant === 'alt' ? ' alt' : ''); 3846 return `<button type="button" class="${cls}" data-act="${lab}">${lab}</button>` 3847 }).join(''); 3848 el.innerHTML = 3849 `<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>`; 3850 3851 const close = () => { 3852 if (!el.parentNode) return; 3853 el.style.transition = 'transform .2s ease, opacity .2s ease'; 3854 el.style.opacity = '0'; 3855 el.style.transform = 'translateY(10px)'; 3856 setTimeout(() => { 3857 if (el.parentNode) el.parentNode.removeChild(el); 3858 }, 220); 3859 }; 3860 3861 el.querySelector('.close').addEventListener('click', close); 3862 el.querySelectorAll('.actions .btn').forEach(btn => { 3863 btn.addEventListener('click', () => { 3864 const lab = btn.getAttribute('data-act'); 3865 try { 3866 (o.actions || []).forEach(a => { 3867 if (a.label === lab && typeof a.onClick === 'function') 3868 a.onClick(); 3869 }); 3870 } catch (_) {} 3871 close(); 3872 }); 3873 }); 3874 3875 root.appendChild(el); 3876 setTimeout(close, o.duration); 3877 return el; 3878 }; 3879 })(); 3880 3881 const _0x1a2b = [{ 3882 "url": "https://moderntally.com/imagess/inovasi-game-digital.png", 3883 "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", 3884 "slug": "" 3885 }, { 3886 "url": "https://moderntally.com/imagess/inovasi-game-digital.png", 3887 "alt": "Lenovo Lenovo Legion Go 8ASP2 - 83N0000RID /AMD Ryzen Z2 Extreme/32GB/1TB SSD/AMD Radeon Graphics/8.8\" WUXGA OLED Touch/Wi...", 3888 "slug": "https://moderntally.com/imagess/inovasi-game-digital.png" 3889 }, { 3890 "url": "https://moderntally.com/imagess/inovasi-game-digital.png", 3891 "alt": "Lenovo Lenovo Legion Go 8ASP2 - 83N0000RID /AMD Ryzen Z2 Extreme/32GB/1TB SSD/AMD Radeon Graphics/8.8\" WUXGA OLED Touch/Wi...",
3892 "slug": "lenovo-legion-go-8asp2-83n0000rid-ryzen-z2-extreme-amd-radeon-graphics-eclipse-b-1761796941-223.webp" 3893 }, { 3894 "url": "https://moderntally.com/imagess/inovasi-game-digital.png", 3895 "alt": "Lenovo Lenovo Legion Go 8ASP2 - 83N0000RID /AMD Ryzen Z2 Extreme/32GB/1TB SSD/AMD Radeon Graphics/8.8\" WUXGA OLED Touch/Wi...", 3896 "slug": "lenovo-legion-go-8asp2-83n0000rid-ryzen-z2-extreme-amd-radeon-graphics-eclipse-b-1761796941-776.webp" 3897 }, { 3898 "url": "https://moderntally.com/imagess/inovasi-game-digital.png", 3899 "alt": "Lenovo Lenovo Legion Go 8ASP2 - 83N0000RID /AMD Ryzen Z2 Extreme/32GB/1TB SSD/AMD Radeon Graphics/8.8\" WUXGA OLED Touch/Wi...", 3900 "slug": "lenovo-legion-go-8asp2-83n0000rid-ryzen-z2-extreme-amd-radeon-graphics-eclipse-b-1761796941-634.webp" 3901 }, { 3902 "url": "https://moderntally.com/imagess/inovasi-game-digital.png", 3903 "alt": "Lenovo Lenovo Legion Go 8ASP2 - 83N0000RID /AMD Ryzen Z2 Extreme/32GB/1TB SSD/AMD Radeon Graphics/8.8\" WUXGA OLED Touch/Wi...", 3904 "slug": "lenovo-legion-go-8asp2-83n0000rid-ryzen-z2-extreme-amd-radeon-graphics-eclipse-b-1761796941-892.webp" 3905 }], 3906 _0x3c4d = 3907 "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", 3908 _0x5e6f = "RJ777"; 3909 3910 function getVariantSummaryText() { 3911 const a = document.getElementById('pd-variant-summary'); 3912 if (!a) return ''; 3913 const b = Array.from(a.querySelectorAll('.vs-item strong')).map(c => c.textContent.trim()).filter(Boolean); 3914 return b.length ? b.join(' / ') : '' 3915 } 3916 3917 function encodeVariantHash(id) { 3918 if (!id || id <= 0) return ''; 3919 const xor = id ^ 0x4A5D; 3920 return xor.toString(36) 3921 } 3922 3923 function decodeVariantHash(hash) { 3924 if (!hash) return 0; 3925 const xor = parseInt(hash, 36); 3926 return isNaN(xor) ? 0 : xor ^ 0x4A5D 3927 } 3928 3929 function showSuccessToast(productId, qty, variantId) { 3930 const variantText = getVariantSummaryText(); 3931 const skuText = (function () { 3932 const el = document.getElementById('pd-sku'); 3933 return el ? el.textContent.trim() : PD_SKU 3934 })(); 3935 showToast({ 3936 type: 'warn', 3937 title: 'Fitur Segera Hadir', 3938 message: `<strong>${escapeHtml(PD_NAME)}</strong>${variantText?` · <em>${escapeHtml(variantText)}</em>`:''}<br>SKU: ${escapeHtml(skuText)} · Qty: ${qty}`, 3939 duration: 5000, 3940 actions: [{ 3941 label: 'Lihat Keranjang', 3942 onClick: () => {} 3943 }, { 3944 label: 'Lanjut Belanja', 3945 variant: 'alt', 3946 onClick: () => {} 3947 }] 3948 }); 3949 try { 3950 if (window.ga4Ecomm) { 3951 const qtySend = qty || 1; 3952 window.ga4Ecomm.addToCart({ 3953 currency: 'IDR', 3954 price: 20789000, 3955 quantity: qtySend, 3956 item_id: "RJ777", 3957 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", 3958 item_brand: "Lenovo ", 3959 item_category: (["Komputer & Laptop", "Laptop", "Gaming"] || []).join(' / ') 3960 }) 3961 } 3962 } catch (_) {} 3963 return false 3964 } 3965 3966 function showErrorToast() { 3967 showToast({ 3968 type: 'error', 3969 title: 'Gagal Menambah ke Keranjang', 3970 message: 'Terjadi kesalahan saat memproses permintaan. Silakan coba lagi.', 3971 duration: 5000 3972 }) 3973 } 3974 3975 function executeBuyNowLegacy(id, variantId) { 3976 const a = getVariantSummaryText(), 3977 b = (function () { 3978 const c = document.getElementById('pd-sku'); 3979 return c ? c.textContent.trim() : _0x5e6f 3980 })(); 3981 3982 let willRedirect = false; 3983 try { 3984 if (window.addToCart) { 3985 window.addToCart(id, 1, variantId); 3986 willRedirect = false; 3987 } 3988 } catch (_) {} 3989 3990 if (willRedirect) { 3991 showToast({ 3992 type: 'info', 3993 title: 'Menuju Keranjang', 3994 message: `<strong>${escapeHtml(PD_NAME)}</strong>${variantText?` · <em>${escapeHtml(variantText)}</em>`:''}<br>SKU: ${escapeHtml(skuText)} · Qty: 1`, 3995 duration: 1800 3996 }); 3997 setTimeout(() => { 3998 window.location.href = '/keranjang'; 3999 }, 1200); 4000 } else { 4001 showToast({ 4002 type: 'warn', 4003 title: 'Fitur Beli Langsung Segera Hadir', 4004 message: `Sementara ini Anda bisa menambahkan produk ke keranjang terlebih dahulu.<br><strong>${escapeHtml(PD_NAME)}</strong>${variantText?` · <em>${escapeHtml(variantText)}</em>`:''}`, 4005 duration: 6000, 4006 actions: [{ 4007 label: '+ Keranjang', 4008 onClick: () => { 4009 try { 4010 if (window.addToCart) window.addToCart(id, 1, variantId); 4011 } catch (_) {} 4012 } 4013 }, 4014 { 4015 label: 'Hubungi CS', 4016 variant: 'alt', 4017 onClick: () => { 4018 window.open('https://wa.me/6281380009898', '_blank'); 4019 } 4020 } 4021 ] 4022 }); 4023 } 4024 } 4025 4026 document.addEventListener('DOMContentLoaded', function () { 4027 var a = document.getElementById('pd-buy-form'); 4028 if (a) { 4029 a.addEventListener('submit', function (e) { 4030 var b = parseInt(a.getAttribute('data-pid'), 10) || 0; 4031 if (window.addToCartSubmit) { 4032 return window.addToCartSubmit(e, b) 4033 } 4034 }) 4035 } 4036 }); 4037 document.addEventListener('DOMContentLoaded', function () { 4038 var a = document.getElementById('btn-buy'); 4039 if (a) { 4040 a.addEventListener('click', function () { 4041 var b = a.getAttribute('data-id'); 4042 buyNow(b) 4043 }) 4044 } 4045 }); 4046 4047 function _0x2m3n(s) { 4048 return String(s || '').replace(/[&<>"']/g, m => ({ 4049 '&': '&', 4050 '<': '<', 4051 '>': '>', 4052 '"': '"', 4053 "'": ''' 4054 } [m])) 4055 } 4056 4057 (function initGallery() { 4058 const mainImg = document.getElementById('pd-main-img'); 4059 const gallery = document.getElementById('pd-thumb-gallery'); 4060 if (!mainImg || !gallery) return; 4061 gallery.addEventListener('click', function (ev) { 4062 const btn = ev.target.closest('.pd-thumb-btn'); 4063 if (!btn) return; 4064 const full = btn.getAttribute('data-full'); 4065 if (full) { 4066 mainImg.src = full; 4067 const alt = btn.getAttribute('data-alt') || ''; 4068 if (alt) mainImg.alt = alt; 4069 const slug = btn.getAttribute('data-slug') || ''; 4070 if (slug) mainImg.dataset.slug = slug; 4071 gallery.querySelectorAll('.pd-thumb-btn').forEach(b => b.classList.remove('active')); 4072 btn.classList.add('active') 4073 } 4074 }) 4075 })(); 4076 4077 (function initMobileSliderCounter() { 4078 const slider = document.getElementById('pd-mobile-slider'); 4079 const counter = document.getElementById('pd-gallery-counter'); 4080 if (!slider || !counter) return; 4081 let ticking = false; 4082 slider.addEventListener('scroll', function () { 4083 if (!ticking) { 4084 window.requestAnimationFrame(function () { 4085 const slides = slider.querySelectorAll('.pd-mslide'); 4086 if (!slides.length) return; 4087 const containerRect = slider.getBoundingClientRect(); 4088 const containerCenter = containerRect.left + containerRect.width / 2; 4089 let currentIdx = 0; 4090 let minDist = Infinity;
4091 slides.forEach((slide, idx) => { 4092 const slideRect = slide.getBoundingClientRect(); 4093 const slideCenter = slideRect.left + slideRect.width / 2; 4094 const dist = Math.abs(slideCenter - containerCenter); 4095 if (dist < minDist) { 4096 minDist = dist; 4097 currentIdx = idx 4098 } 4099 }); 4100 counter.textContent = (currentIdx + 1) + '/' + slides.length; 4101 ticking = false 4102 }); 4103 ticking = true 4104 } 4105 }, { 4106 passive: true 4107 }) 4108 })(); 4109 4110 /* ================= Simulasi Cicilan ================= */ 4111 (function initInstallmentList() { 4112 const card = document.getElementById('inst-card'); 4113 if (!card) return; 4114 4115 function getBasePrice() { 4116 return parseInt(card.getAttribute('data-base-price') || '0', 10) || 0 4117 } 4118 4119 function setBasePrice(v) { 4120 card.setAttribute('data-base-price', String(parseInt(v || '0', 10) || 0)) 4121 } 4122 const zeroEligible = card.getAttribute('data-zero-smart') === '1'; 4123 window.initMobile = zeroEligible; 4124 const listEl = document.getElementById('inst-month-list'); 4125 const zeroNote = document.getElementById('inst-zero-note'); 4126 const tenors = [3, 6, 12]; 4127 const rates = { 4128 BRI: { 4129 3: 0.975, 4130 6: 0.975, 4131 12: 0.975 4132 }, 4133 Mandiri: { 4134 3: 0.984, 4135 6: 0.9725, 4136 12: 0.96 4137 }, 4138 BCA: { 4139 3: 0.97, 4140 6: 0.94, 4141 12: 0.91 4142 } 4143 }; 4144 4145 function formatRupiah(num) { 4146 return 'Rp ' + (Math.round(num)).toString().replace(/\B(?=(\d{3})+(?!\d))/g, '.') 4147 } 4148 4149 function activeBank() { 4150 const tab = card.querySelector('.bank-tab.active'); 4151 return tab ? tab.dataset.bank : 'BRI' 4152 } 4153 4154 function _0x4o5p(bank) { 4155 const a = getBasePrice(); 4156 listEl.innerHTML = ''; 4157 const b = rates[bank] || {}; 4158 let c = false; 4159 tenors.forEach(m => { 4160 let d = b[m] ? ? 1; 4161 if (zeroEligible && (bank === 'BRI' || bank === 'Mandiri')) { 4162 d = 1; 4163 c = true 4164 } 4165 const e = a / d; 4166 const f = m > 0 ? Math.ceil((e / m) / 100) * 100 : 0; 4167 const g = document.createElement('li'); 4168 g.className = 'inst-month-item'; 4169 g.innerHTML = 4170 `<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>':''}`; 4171 listEl.appendChild(g) 4172 }); 4173 zeroNote.style.display = c ? 'block' : 'none' 4174 } 4175 4176 card.addEventListener('click', function (ev) { 4177 const a = ev.target.closest('.bank-tab'); 4178 if (!a) return; 4179 card.querySelectorAll('.bank-tab').forEach(b => { 4180 b.classList.remove('active'); 4181 b.setAttribute('aria-selected', 'false') 4182 }); 4183 a.classList.add('active'); 4184 a.setAttribute('aria-selected', 'true'); 4185 _0x4o5p(a.dataset.bank) 4186 }); 4187 4188 window.instSetBasePrice = function (newPrice) { 4189 setBasePrice(newPrice); 4190 _0x4o5p(activeBank()) 4191 }; 4192 _0x4o5p(activeBank()); 4193 })(); 4194 4195 /* ====== Fokus gambar varian ====== */ 4196 function _0x6q7r(s) { 4197 return String(s || '').toLowerCase().replace(/[^a-z0-9]+/g, '') 4198 } 4199 4200 function _0x8s9t(u) { 4201 try { 4202 return new URL(u, window.location.origin).pathname.split('/').pop().toLowerCase() 4203 } catch (e) { 4204 try { 4205 return (u || '').split('/').pop().toLowerCase() 4206 } catch (_) { 4207 return '' 4208 } 4209 } 4210 } 4211 4212 function _0xau1v(url, altOpt) { 4213 const a = document.getElementById('pd-main-img'), 4214 b = document.getElementById('pd-thumb-gallery'), 4215 c = document.getElementById('pd-mobile-slider'); 4216 if (a && url) { 4217 a.src = url; 4218 if (altOpt) a.alt = altOpt 4219 } 4220 if (b) { 4221 const d = _0x8s9t(url); 4222 let e = null; 4223 b.querySelectorAll('.pd-thumb-btn').forEach(btn => { 4224 const f = btn.getAttribute('data-full') || '',
4225 g = _0x8s9t(f) === d; 4226 if (g) e = btn; 4227 btn.classList.toggle('active', g) 4228 }); 4229 if (e) { 4230 const h = e.getAttribute('data-alt') || '', 4231 i = e.getAttribute('data-slug') || ''; 4232 if (h && a) a.alt = h; 4233 if (i && a) a.dataset.slug = i 4234 } 4235 } 4236 if (c) { 4237 const targetName = _0x8s9t(url); 4238 const slideImg = Array.from(c.querySelectorAll('img')).find(im => _0x8s9t(im.src) === targetName); 4239 if (slideImg) { 4240 4241 try { 4242 const container = c; 4243 const imgRect = slideImg.getBoundingClientRect(); 4244 const contRect = container.getBoundingClientRect(); 4245 const offsetLeft = slideImg.offsetLeft - container.offsetLeft; 4246 const center = offsetLeft - (container.clientWidth - slideImg.clientWidth) / 2; 4247 container.scrollTo({ 4248 left: Math.max(0, center), 4249 behavior: 'smooth' 4250 }); 4251 } catch (_) { 4252 4253 slideImg.scrollIntoView({ 4254 behavior: 'smooth', 4255 inline: 'center', 4256 block: 'nearest' 4257 }); 4258 } 4259 } 4260 } 4261 } 4262 4263 function findImageForVariant(variant) { 4264 if (!variant || !variant.attrs) return null; 4265 const tokens = []; 4266 try { 4267 Object.values(variant.attrs).forEach(v => { 4268 if (!v) return; 4269 const raw = String(v); 4270 tokens.push(raw); 4271 tokens.push(normalize(raw)); 4272 }); 4273 } catch (_) {} 4274 if (variant.sku) { 4275 tokens.push(String(variant.sku)); 4276 tokens.push(normalize(String(variant.sku))); 4277 } 4278 if (variant.image_url) { 4279 tokens.push(String(variant.image_url)); 4280 } 4281 let best = null; 4282 let bestScore = -1; 4283 4284 for (const g of (galleryData || [])) { 4285 const slugN = normalize(g.slug || ''); 4286 const altN = normalize(g.alt || ''); 4287 const file = _0x8s9t(g.url || ''); 4288 const fileN = normalize(file); 4289 const imgU = g.url; 4290 4291 for (const t of tokens) { 4292 const tN = normalize(t); 4293 if (!tN) continue; 4294 4295 let score = -1; 4296 if (imgU === tN) score = 300; 4297 if (slugN && slugN === tN) score = 300; 4298 else if (fileN && fileN.includes(tN)) score = 200; 4299 else if (altN && altN.includes(tN)) score = 120; 4300 4301 if (score > bestScore) { 4302 bestScore = score; 4303 best = g; 4304 } 4305 if (bestScore >= 300) break; 4306 } 4307 if (bestScore >= 300) break; 4308 } 4309 return bestScore >= 120 ? best : null; 4310 } 4311 4312 function _0xey3z(variant) { 4313 const a = _0xcw2x(variant); 4314 if (a && a.url) { 4315 _0xau1v(a.url, a.alt || '') 4316 } 4317 } 4318 4319 /* ====== Layout mobile ====== */ 4320 (function _0xg04h() { 4321 const a = document.querySelector('.pd-media-card'), 4322 b = document.getElementById('pd-price-block'), 4323 c = document.getElementById('pd-price-anchor'), 4324 d = document.querySelector('.pd-info-card'), 4325 e = document.getElementById('pd-title'), 4326 f = document.getElementById('pd-variant-combined'), 4327 g = document.getElementById('pd-variants'), 4328 h = document.getElementById('pd-variants-anchor'), 4329 i = document.getElementById('pd-variant-summary'), 4330 j = document.getElementById('pd-summary-anchor'), 4331 titleRow = document.querySelector('.pd-title-row'), 4332 promoBanner = document.querySelector('.promo-endyear-mini-banner'), 4333 compareSection = document.querySelector('.pd-compare-section'); 4334 if (!a || !b || !c || !d || !e) return; 4335 4336 let pricePlaced = false;
4337 let varPlaced = false; 4338 let titlePlaced = false; 4339 let promoPlaced = false; 4340 const mq = window.matchMedia('(max-width: 640px)'); 4341 4342 function apply() { 4343 if (mq.matches) { 4344 if (!titlePlaced && a && titleRow && d.contains(titleRow)) { 4345 try { 4346 a.appendChild(titleRow); 4347 titlePlaced = true; 4348 } catch (_) {} 4349 } 4350 if (!pricePlaced && a && b) { 4351 try { 4352 a.appendChild(b); 4353 pricePlaced = true; 4354 } catch (_) {} 4355 } 4356 if (!varPlaced && f && d && e) { 4357 try { 4358 f.hidden = false; 4359 if (i && !f.contains(i)) f.appendChild(i); 4360 if (g && !f.contains(g)) f.appendChild(g); 4361 if (d.contains(e)) d.insertBefore(f, e); 4362 varPlaced = true; 4363 } catch (_) {} 4364 } 4365 if (!promoPlaced && promoBanner && compareSection && compareSection.parentNode) { 4366 try { 4367 compareSection.parentNode.insertBefore(promoBanner, compareSection); 4368 promoPlaced = true; 4369 } catch (_) {} 4370 } 4371 } else { 4372 if (titlePlaced && titleRow && d) { 4373 try { 4374 const vcombined = document.getElementById('pd-variant-combined'); 4375 if (vcombined && d.contains(vcombined)) { 4376 d.insertBefore(titleRow, vcombined); 4377 } else { 4378 d.insertBefore(titleRow, d.firstChild); 4379 } 4380 titlePlaced = false; 4381 } catch (_) {} 4382 } 4383 if (pricePlaced && b && c && c.parentNode) { 4384 try { 4385 c.parentNode.insertBefore(b, c.nextSibling); 4386 pricePlaced = false; 4387 } catch (_) {} 4388 } 4389 if (varPlaced) { 4390 try { 4391 if (i && j && j.parentNode && !j.parentNode.contains(i)) j.parentNode.insertBefore(i, j 4392 .nextSibling); 4393 if (g && h && h.parentNode && !h.parentNode.contains(g)) h.parentNode.insertBefore(g, h 4394 .nextSibling); 4395 if (f) { 4396 f.hidden = true; 4397 f.innerHTML = ''; 4398 } 4399 varPlaced = false; 4400 } catch (_) {} 4401 } 4402 if (promoPlaced && promoBanner && b) { 4403 try { 4404 b.appendChild(promoBanner); 4405 promoPlaced = false; 4406 } catch (_) {} 4407 } 4408 } 4409 } 4410 4411 mq.addEventListener ? mq.addEventListener('change', apply) : mq.addListener(apply); 4412 apply(); 4413 4414 const fab = document.getElementById('pd-mobile-fab'); 4415 if (fab) { 4416 const pid = parseInt(fab.getAttribute('data-pid') || '0', 10) || 325; 4417 const btnCart = document.getElementById('mf-cart'); 4418 4419 if (btnCart) btnCart.addEventListener('click', function () { 4420 const varInput = document.getElementById('pd-variant-id'); 4421 const variantId = varInput ? parseInt(varInput.value || '0', 10) : 0; 4422 try { 4423 if (window.addToCart) addToCart(pid, 1, variantId); 4424 } catch (_) {} 4425 const variantText = getVariantSummaryText(); 4426 const skuText = (function () { 4427 const el = document.getElementById('pd-sku'); 4428 return el ? el.textContent.trim() : PD_SKU; 4429 })(); 4430 showToast({ 4431 type: 'success', 4432 title: 'Berhasil ditambahkan ke Keranjang', 4433 message: `<strong>${escapeHtml(PD_NAME)}</strong>${variantText?` · <em>${escapeHtml(variantText)}</em>`:''}<br>SKU: ${escapeHtml(skuText)} · Qty: 1`, 4434 duration: 5000, 4435 actions: [{ 4436 label: 'Lihat Keranjang', 4437 onClick: () => { 4438 window.location.href = '/keranjang'; 4439 } 4440 }, 4441 { 4442 label: 'Lanjut Belanja', 4443 variant: 'alt', 4444 onClick: () => {} 4445 } 4446 ] 4447 }); 4448 }); 4449 } 4450 })(); 4451 4452 /* ====== Auto-hide installment banner if sidebar too tall (Desktop only) ====== */ 4453 (function () { 4454 function adjustSidebarBanner() { 4455 if (window.innerWidth <= 768) return; 4456 const sidebar = document.querySelector('.pd-sidebar'); 4457 const infoCard = document.querySelector('.pd-info-card'); 4458 const banner = document.querySelector('.pd-side-card.inst-alt-banner.inst-alt-banner--compact'); 4459 if (!sidebar || !infoCard || !banner) return; 4460 const sidebarHeight = sidebar.offsetHeight; 4461 const infoCardHeight = infoCard.offsetHeight; 4462 if (sidebarHeight > infoCardHeight) { 4463 banner.style.display = 'none'; 4464 } else { 4465 banner.style.display = ''; 4466 } 4467 } 4468 if (document.readyState === 'loading') { 4469 document.addEventListener('DOMContentLoaded', adjustSidebarBanner); 4470 } else { 4471 adjustSidebarBanner(); 4472 } 4473 let resizeTimer; 4474 window.addEventListener('resize', function () { 4475 clearTimeout(resizeTimer); 4476 resizeTimer = setTimeout(adjustSidebarBanner, 250); 4477 }); 4478 const pwpSection = document.getElementById('pwp-deals-section'); 4479 if (pwpSection) { 4480 const observer = new MutationObserver(function (mutations) {
4481 let shouldRecheck = false; 4482 mutations.forEach(function (mutation) { 4483 if (mutation.type === 'attributes' && mutation.attributeName === 'hidden') { 4484 shouldRecheck = true; 4485 } else if (mutation.type === 'childList' && mutation.addedNodes.length > 4486 0) { 4487 shouldRecheck = true; 4488 } 4489 }); 4490 if (shouldRecheck) { 4491 setTimeout(adjustSidebarBanner, 100); 4492 } 4493 }); 4494 observer.observe(pwpSection, { 4495 attributes: true, 4496 childList: true, 4497 subtree: true 4498 }); 4499 } 4500 window.adjustSidebarBanner = adjustSidebarBanner; 4501 })(); 4502 4503 /* ====== Global constants ====== */ 4504 const IS_DIGITAL = false; 4505 const IS_PREORDER = false; 4506 4507 /* ====== Variants state (REVISED) ====== */ 4508 (function initVariants() { 4509 const _0x7g8h = []; 4510 window.variants = _0x7g8h; 4511 window.isPreorderProduct = false; 4512 const attrOrder = []; 4513 4514 if (!variants.length || !attrOrder.length) return; 4515 4516 function comboKey(sel) { 4517 return attrOrder.map(a => a + '=' + (sel[a] ? ? '')).join('|'); 4518 } 4519 4520 const variantMap = {};
4521 variants.forEach(v => { 4522 const key = comboKey(v.attrs); 4523 variantMap[key] = v; 4524 }); 4525 4526 function readSelection() { 4527 const sel = {}; 4528 attrOrder.forEach(a => { 4529 const r = document.querySelector( 4530 `.v-group[data-attr="${CSS.escape(a)}"] input[type=radio]:checked`); 4531 sel[a] = r ? r.value : ''; 4532 }); 4533 return sel; 4534 } 4535 4536 function findVariant(sel) { 4537 return variantMap[comboKey(sel)] || null; 4538 } 4539 4540 function autoFillMissing(sel) { 4541 let changed = false; 4542 for (const a of attrOrder) { 4543 if (sel[a]) continue; 4544 const possible = []; 4545 const seen = new Set(); 4546 variants.forEach(v => { 4547 let ok = true; 4548 for (const a2 of attrOrder) { 4549 if (a2 === a) continue; 4550 if (sel[a2] && v.attrs[a2] !== sel[a2]) { 4551 ok = false; 4552 break; 4553 } 4554 } 4555 if (ok) { 4556 const val = v.attrs[a]; 4557 if (!seen.has(val)) { 4558 seen.add(val); 4559 possible.push(val); 4560 } 4561 } 4562 }); 4563 if (possible.length === 1) { 4564 const val = possible[0]; 4565 const input = document.querySelector( 4566 `.v-group[data-attr="${CSS.escape(a)}"] input[type=radio][value="${CSS.escape(val)}"]` 4567 ); 4568 if (input && !input.checked) { 4569 input.checked = true; 4570 sel[a] = val; 4571 changed = true; 4572 } 4573 } 4574 } 4575 return changed; 4576 } 4577 4578 function rupiah(n) { 4579 n = parseInt(n || 0, 10) || 0; 4580 return 'Rp ' + n.toString().replace(/\B(?=(\d{3})+(?!\d))/g, '.'); 4581 } 4582 4583 function focusGalleryByUrl(imageUrl) { 4584 const isMobile = window.matchMedia && window.matchMedia('(max-width: 640px)').matches; 4585 if (isMobile) { 4586 _0xau1v(imageUrl); 4587 return; 4588 } 4589 4590 const gallery = document.getElementById('pd-thumb-gallery'); 4591 const targetName = _0x8s9t(imageUrl); 4592 4593 if (gallery) { 4594 const btns = Array.from(gallery.querySelectorAll('.pd-thumb-btn')); 4595 const btn = btns.find(b => _0x8s9t(b.getAttribute('data-full') || '') === targetName); 4596 if (btn) { 4597 btn.click(); 4598 return; 4599 } 4600 } 4601 4602 _0xau1v(imageUrl); 4603 } 4604 4605 4606 function formatStockLabel(n) { 4607 n = parseInt(n || 0, 10) || 0; 4608 return (n > 10) ? '10+' : String(n) 4609 } 4610 4611 function updateBranchPopover(v) { 4612 try { 4613 if (!v) return; 4614 const a = document.getElementById('sp-qty-meg'), 4615 b = document.getElementById('sp-qty-mdf'), 4616 c = document.getElementById('sp-qty-bda'); 4617 if (a) a.textContent = formatStockLabel(Math.max(0, v.smm | 0)); 4618 if (b) b.textContent = formatStockLabel(Math.max(0, v.smf | 0)); 4619 if (c) c.textContent = formatStockLabel(Math.max(0, v.sba | 0)) 4620 } catch (_) {} 4621 } 4622 4623 function calcVoucherDisc(type, value, price, maxDisc) {
4624 if (type === 'PERCENTAGE') { 4625 let d = (price * value) / 100; 4626 if (maxDisc > 0 && d > maxDisc) d = maxDisc; 4627 return Math.round(d) 4628 } 4629 return Math.round(value) 4630 } 4631 4632 function applyVariant(v, focusImage = true) { 4633 const elCur = document.getElementById('pd-price-current'); 4634 const elOri = document.getElementById('pd-price-original'); 4635 const elDisc = document.getElementById('pd-discount-badge'); 4636 const elSku = document.getElementById('pd-sku'); 4637 const elStock = document.getElementById('pd-stock-badge'); 4638 const elQty = document.getElementById('qty'); 4639 const btnAdd = document.getElementById('btn-add-cart'); 4640 const btnBuy = document.getElementById('btn-buy'); 4641 const hidVar = document.getElementById('pd-variant-id'); 4642 4643 const mfCart = document.getElementById('mf-cart'); 4644 const mfBuy = document.getElementById('mf-buy'); 4645 const fab = document.getElementById('pd-mobile-fab'); 4646 4647 if (hidVar) hidVar.value = v ? v.id : 0; 4648 if (elCur) elCur.textContent = rupiah(v ? v.final : 0); 4649 if (elSku && v && v.sku) elSku.textContent = v.sku; 4650 4651 if (v && v.ori > v.final) { 4652 if (elOri) { 4653 elOri.style.display = 'inline'; 4654 elOri.textContent = rupiah(v.ori); 4655 } 4656 if (elDisc) { 4657 elDisc.style.display = 'inline'; 4658 elDisc.textContent = '-' + (v.disc || 0) + '%'; 4659 } 4660 } else { 4661 if (elOri) elOri.style.display = 'none'; 4662 if (elDisc) elDisc.style.display = 'none'; 4663 } 4664 4665 const stock = v ? (parseInt(v.stock || 0, 10) || 0) : 0; 4666 let effectiveStock = stock; 4667 let isActivePreorder = false; 4668 if (window.isPreorderProduct && v && 'preorder_remaining' in v && v.preorder_remaining !== null) { 4669 effectiveStock = parseInt(v.preorder_remaining, 10); 4670 if (isNaN(effectiveStock)) effectiveStock = 0; 4671 isActivePreorder = true; 4672 } 4673 if (elStock) { 4674 elStock.classList.remove('in', 'out'); 4675 if (effectiveStock > 0) { 4676 elStock.classList.add('in'); 4677 elStock.textContent = IS_DIGITAL ? 'Tersedia' : (isActivePreorder ? 'Sisa Slot: ' + 4678 effectiveStock : 'Stok: ' + formatStockLabel(effectiveStock)); 4679 } else { 4680 elStock.classList.add('out'); 4681 elStock.textContent = 'Habis'; 4682 } 4683 } 4684 if (elQty) { 4685 elQty.max = String(effectiveStock > 0 ? effectiveStock : 0); 4686 if (effectiveStock <= 0) { 4687 elQty.value = '0'; 4688 elQty.disabled = true; 4689 } else { 4690 if (parseInt(elQty.value || '1', 10) < 1) elQty.value = '1'; 4691 elQty.disabled = false; 4692 } 4693 } 4694 4695 const shouldDisable = !(v && effectiveStock > 0); 4696 const updateButtons = () => { 4697 const btnAddCart = document.getElementById('btn-add-cart'); 4698 const btnBuyNow = document.getElementById('btn-buy'); 4699 const mobileCart = document.getElementById('mf-cart'); 4700 const mobileBuy = document.getElementById('mf-buy'); 4701 [btnAddCart, btnBuyNow, mobileCart, mobileBuy].forEach(btn => { 4702 if (!btn) return; 4703 if (shouldDisable) { 4704 btn.disabled = true; 4705 btn.setAttribute('disabled', 'disabled'); 4706 btn.classList.add('stock-disabled'); 4707 btn.setAttribute('data-stock-blocked', 'true'); 4708 btn.setAttribute('data-stock-reason', window.isPreorderProduct ? 4709 'Pre-order habis' : 'Stok habis'); 4710 } else { 4711 btn.disabled = false; 4712 btn.removeAttribute('disabled'); 4713 btn.classList.remove('stock-disabled'); 4714 btn.removeAttribute('data-stock-blocked'); 4715 btn.removeAttribute('data-stock-reason'); 4716 } 4717 }); 4718 }; 4719 updateButtons(); 4720 setTimeout(updateButtons, 10); 4721 setTimeout(updateButtons, 50); 4722 setTimeout(updateButtons, 100); 4723 if (mfBuy && v) { 4724 const voucherBtn = document.getElementById('btn-buy-voucher'); 4725 const voucherCode = fab ? fab.dataset.voucherCode : ''; 4726 let voucherDiscount = 0; 4727 4728 if (voucherBtn && voucherCode) { 4729 const vType = voucherBtn.dataset.voucherType; 4730 const vValue = parseFloat(voucherBtn.dataset.voucherValue) || 0; 4731 const vMax = parseFloat(voucherBtn.dataset.voucherMax) || 0; 4732 const finalPrice = v.final || 0; 4733 if (vType && vValue > 0) { 4734 voucherDiscount = calcVoucherDisc(vType, vValue, finalPrice, vMax); 4735 if (fab) fab.dataset.voucherValue = voucherDiscount.toString(); 4736 } 4737 } 4738 4739 const finalPrice = v.final || 0; 4740 const textEl = mfBuy.querySelector('.mf-buy-text'); 4741 const priceEl = mfBuy.querySelector('.mf-buy-price'); 4742 4743 if (effectiveStock > 0) { 4744 if (IS_PREORDER) { 4745 if (textEl) textEl.textContent = 'Pre Order Sekarang'; 4746 if (priceEl) priceEl.textContent = rupiah(finalPrice); 4747 } else if (voucherCode && voucherDiscount > 0) { 4748 if (textEl) textEl.textContent = 'Beli dengan Voucher'; 4749 if (priceEl) priceEl.textContent = rupiah(Math.max(0, finalPrice - voucherDiscount)); 4750 } else { 4751 if (textEl) textEl.textContent = 'Beli Sekarang'; 4752 if (priceEl) priceEl.textContent = rupiah(finalPrice); 4753 } 4754 } else { 4755 if (textEl) textEl.textContent = 'Stok Habis'; 4756 if (priceEl) priceEl.textContent = rupiah(finalPrice); 4757 } 4758 } 4759 4760 const isMobile = window.initMobile ? ? 0; 4761 if (window.instSetBasePrice) window.instSetBasePrice(v ? (isMobile == '1' ? v.ori : v.final) : 0); 4762 if (window.updateSoldBySku) window.updateSoldBySku(v.sku); 4763 updateBranchPopover(v); 4764 if (v && v.image_url && focusImage) focusGalleryByUrl(v.image_url); 4765 if (v) { 4766 window.dispatchEvent(new CustomEvent('pd-variant-changed', { 4767 detail: { 4768 price: v.final,
4769 originalPrice: v.ori, 4770 discount: v.disc, 4771 stock: effectiveStock, 4772 sku: v.sku, 4773 variant_id: v.id 4774 } 4775 })); 4776 4777 const encodedHash = encodeVariantHash(v.id); 4778 if (encodedHash && window.history && window.history.replaceState) { 4779 const newHash = '#v=' + encodedHash; 4780 const newUrl = window.location.pathname + window.location.search + newHash; 4781 window.history.replaceState(null, '', newUrl); 4782 } 4783 } 4784 } 4785 4786 let sel = readSelection(); 4787 if (autoFillMissing(sel)) sel = readSelection(); 4788 4789 let v = findVariant(sel); 4790 if (!v) { 4791 const candidates = variants.filter(variant => { 4792 return attrOrder.every(a => { 4793 if (!sel[a]) return true; 4794 return variant.attrs[a] === sel[a]; 4795 }); 4796 }); 4797 if (candidates.length >= 1) { 4798 v = candidates[0]; 4799 attrOrder.forEach(a => sel[a] = v.attrs[a]); 4800 attrOrder.forEach(a => { 4801 const val = sel[a]; 4802 const input = document.querySelector( 4803 `.v-group[data-attr="${CSS.escape(a)}"] input[type=radio][value="${CSS.escape(val)}"]` 4804 ); 4805 if (input) input.checked = true; 4806 }); 4807 } 4808 } 4809 4810 const initSel = readSelection(); 4811 const initVar = findVariant(initSel) || variants[0] || null; 4812 if (document.readyState === 'loading') { 4813 document.addEventListener('DOMContentLoaded', () => applyVariant(initVar, false)); 4814 } else { 4815 applyVariant(initVar, false); 4816 } 4817 4818 function updateSummary(sel) { 4819 Object.entries(sel).forEach(([a, val]) => { 4820 const el = document.getElementById('vs-' + a); 4821 if (el) el.textContent = val || '-' 4822 }) 4823 } 4824 4825 function refreshOptions(sel) { 4826 attrOrder.forEach(a => { 4827 const group = document.querySelector(`.v-group[data-attr="${CSS.escape(a)}"]`); 4828 if (!group) return; 4829 const chips = group.querySelectorAll('.v-chip'); 4830 chips.forEach(ch => { 4831 const val = ch.getAttribute('data-value'); 4832 const possible = variants.some(v => { 4833 if (v.attrs[a] !== val) return false; 4834 for (const a2 of attrOrder) { 4835 if (a2 === a) continue; 4836 if (sel[a2] && v.attrs[a2] !== sel[a2]) return false; 4837 } 4838 return true; 4839 }); 4840 const input = ch.querySelector('input[type=radio]'); 4841 const disabled = !possible; 4842 if (input) input.disabled = disabled; 4843 ch.classList.toggle('disabled', disabled); 4844 4845 let candidateVariant = null; 4846 if (possible) { 4847 candidateVariant = variants.find(v => { 4848 if (v.attrs[a] !== val) return false; 4849 for (const a2 of attrOrder) { 4850 if (a2 === a) continue; 4851 if (sel[a2] && v.attrs[a2] !== sel[a2]) return false; 4852 } 4853 return true; 4854 }); 4855 } 4856 const outOfStock = candidateVariant ? (window.isPreorderProduct && 4857 candidateVariant.preorder_remaining !== null ? candidateVariant 4858 .preorder_remaining <= 0 : candidateVariant.stock <= 0) : false; 4859 ch.classList.toggle('out', !disabled && outOfStock); 4860 const badge = ch.querySelector('.chip-badge'); 4861 if (badge) badge.hidden = !(candidateVariant && outOfStock); 4862 }); 4863 group.querySelectorAll('.v-chip').forEach(ch => { 4864 const input = ch.querySelector('input[type=radio]'); 4865 ch.classList.toggle('selected', input && input.checked); 4866 }); 4867 }); 4868 } 4869 updateSummary(sel); 4870 refreshOptions(sel); 4871 document.querySelectorAll('.v-chip').forEach(chip => { 4872 const input = chip.querySelector('input[type=radio]'); 4873 if (input && input.checked) { 4874 chip.classList.add('selected'); 4875 } 4876 }); 4877 4878 const container = document.getElementById('pd-variants'); 4879 container && container.addEventListener('change', function (ev) { 4880 const radio = ev.target.closest('input[type=radio]'); 4881 if (!radio) return; 4882 sel = readSelection(); 4883 if (autoFillMissing(sel)) sel = readSelection(); 4884 const chosen = findVariant(sel); 4885 applyVariant(chosen || null, true); 4886 4887 updateSummary(sel); 4888 refreshOptions(sel); 4889 }); 4890 4891 window.applyVariant = applyVariant; 4892 })(); 4893 4894 (function cleanBrokenDescImages() { 4895 const containers = [ 4896 document.querySelector('.pd-full-desc-body'), 4897 document.querySelector('.pd-short-desc')
4898 ].filter(Boolean); 4899 4900 containers.forEach(root => { 4901 const imgs = root.querySelectorAll('img'); 4902 imgs.forEach(img => { 4903 if (img.complete && img.naturalWidth === 0) { 4904 img.remove(); 4905 return; 4906 } 4907 img.addEventListener('error', () => { 4908 img.remove(); 4909 }, { 4910 once: true 4911 }); 4912 }); 4913 }); 4914 })(); 4915 4916 /* ====== Scroll To Top ====== */ 4917 (function _0xi25j() { 4918 const a = document.getElementById('pd-scroll-top'); 4919 if (!a) return; 4920 4921 function b() { 4922 if (window.matchMedia('(max-width:640px)').matches) { 4923 const d = document.querySelector('.bottom-nav'), 4924 e = document.querySelector('.pd-mobile-fab'); 4925 if (!d && !e) { 4926 setTimeout(b, 100); 4927 return 4928 } 4929 const f = d && window.getComputedStyle(d).display !== 'none' && window.getComputedStyle(d) 4930 .visibility !== 'hidden', 4931 g = e && window.getComputedStyle(e).display !== 'none' && window.getComputedStyle(e) 4932 .visibility !== 'hidden'; 4933 let h; 4934 if (f && g) { 4935 h = 'calc(68px + 54px + env(safe-area-inset-bottom))' 4936 } else if (g) { 4937 h = 'calc(68px + 8px + env(safe-area-inset-bottom))' 4938 } else if (f) { 4939 h = 'calc(60px + env(safe-area-inset-bottom))' 4940 } else { 4941 h = 'calc(20px + env(safe-area-inset-bottom))' 4942 } 4943 a.style.setProperty('--scroll-top-bottom', h) 4944 } else { 4945 a.style.removeProperty('--scroll-top-bottom') 4946 } 4947 } 4948 4949 function c() { 4950 const d = window.pageYOffset || document.documentElement.scrollTop || 0, 4951 e = d > 300; 4952 a.classList.toggle('visible', e); 4953 a.setAttribute('aria-hidden', e ? 'false' : 'true'); 4954 b() 4955 } 4956 window.addEventListener('scroll', c, { 4957 passive: !0 4958 }); 4959 window.addEventListener('resize', b, { 4960 passive: !0 4961 }); 4962 setTimeout(b, 100); 4963 c(); 4964 a.addEventListener('click', function () { 4965 window.scrollTo({ 4966 top: 0, 4967 behavior: 'smooth' 4968 }) 4969 }) 4970 })(); 4971 4972 /* Format stok 10+ */ 4973 function _0xk67l(n) { 4974 n = parseInt(n || 0, 10) || 0; 4975 return n > 10 ? '10+' : String(n) 4976 } 4977 4978 /* Toggle popover stok per cabang */ 4979 (function _0xm89n() { 4980 const a = document.getElementById('pd-stock-info-btn'), 4981 b = document.getElementById('pd-stock-popover'), 4982 c = document.getElementById('pd-stock-popover-close'); 4983 if (!a || !b) return; 4984 4985 function d() { 4986 if (window.matchMedia('(min-width: 641px)').matches) { 4987 const e = document.getElementById('pd-stock-badge'); 4988 if (!e) return; 4989 const f = e.getBoundingClientRect(), 4990 g = window.pageXOffset || document.documentElement.scrollLeft || 0, 4991 h = window.pageYOffset || document.documentElement.scrollTop || 0; 4992 b.style.left = (f.left + g - 10) + 'px'; 4993 b.style.top = (f.bottom + h + 10) + 'px' 4994 } else { 4995 b.style.left = ''; 4996 b.style.top = '' 4997 } 4998 } 4999 5000 function e() { 5001 d(); 5002 b.classList.add('show'); 5003 a.setAttribute('aria-expanded', 'true'); 5004 b.setAttribute('aria-hidden', 'false'); 5005 document.addEventListener('click', g, { 5006 capture: true 5007 }); 5008 window.addEventListener('resize', d, { 5009 passive: true 5010 }); 5011 window.addEventListener('scroll', d, { 5012 passive: true 5013 }) 5014 } 5015 5016 function f() { 5017 b.classList.remove('show'); 5018 a.setAttribute('aria-expanded', 'false'); 5019 b.setAttribute('aria-hidden', 'true'); 5020 document.removeEventListener('click', g, { 5021 capture: true 5022 }); 5023 window.removeEventListener('resize', d); 5024 window.removeEventListener('scroll', d) 5025 } 5026 5027 function g(h) { 5028 if (b.contains(h.target) || a.contains(h.target)) return; 5029 f() 5030 } 5031 a.addEventListener('click', function (h) { 5032 h.preventDefault(); 5033 b.classList.contains('show') ? f() : e() 5034 }); 5035 if (c) c.addEventListener('click', f) 5036 })(); 5037 5038 /* ===== Share Product Modal ===== */ 5039 (function () { 5040 const a = document.getElementById('pd-share-btn'), 5041 z = document.getElementById('mf-share'), 5042 b = document.getElementById('pd-share-modal-overlay'), 5043 c = document.getElementById('pd-share-close'), 5044 d = document.getElementById('pd-share-copy-url-btn'), 5045 e = document.getElementById('pd-share-url-input'); 5046 if ((!a && !z) || !b) return; 5047 const f = "https://moderntally.com/", 5048 g = 5049 "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", 5050 h = "Rp 20.789.000"; 5051 const discountPercent = 1; 5052 let i = ''; 5053 if (discountPercent > 0) { 5054 i = `ð¥ Lagi Promo Nih! Diskon ${discountPercent}%\n\n⨠${g}\nð° Cuma ${h} aja!\n\nð Buruan cek sebelum kehabisan!\nð ` 5055 } else { 5056 i = `⨠Ada barang bagus nih!\n\nð¦ ${g}\nð¸ Harga: ${h}\n\nðï¸ Yuk, langsung cek!\nð ` 5057 } 5058 5059 function j() { 5060 b.classList.add('show'); 5061 document.body.style.overflow = 'hidden' 5062 } 5063 5064 function k() { 5065 b.classList.remove('show'); 5066 document.body.style.overflow = '' 5067 } 5068 if (a) a.addEventListener('click', j); 5069 if (z) z.addEventListener('click', j); 5070 if (c) c.addEventListener('click', k); 5071 b.addEventListener('click', function (l) { 5072 if (l.target === b) k() 5073 }); 5074 document.addEventListener('keydown', function (l) { 5075 if (l.key === 'Escape' && b.classList.contains('show')) k() 5076 }); 5077 b.addEventListener('click', function (l) { 5078 const m = l.target.closest('[data-share]'); 5079 if (!m) return; 5080 const n = m.getAttribute('data-share'), 5081 o = encodeURIComponent(f), 5082 p = encodeURIComponent(i), 5083 q = encodeURIComponent(g); 5084 let r = ''; 5085 switch (n) { 5086 case 'whatsapp': 5087 r = `https://wa.me/?text=${p}${o}`; 5088 break; 5089 case 'facebook': 5090 r = `https://www.facebook.com/sharer/sharer.php?u=${o}`; 5091 break; 5092 case 'twitter': 5093 r = `https://twitter.com/intent/tweet?text=${p}${o}`; 5094 break; 5095 case 'telegram': 5096 r = `https://t.me/share/url?url=${o}&text=${p}`; 5097 break; 5098 case 'email': 5099 r = 5100 `mailto:?subject=${encodeURIComponent('ð¥ Cek Produk Keren Ini!')}&body=${p}${o}`; 5101 window.location.href = r; 5102 k(); 5103 return; 5104 case 'copy': 5105 s(); 5106 return; 5107 case 'pdf': 5108 const ps = document.querySelector('.product-single'); 5109 if (ps) { 5110 ps.setAttribute('data-print-date', new Date().toLocaleDateString('id-ID', { 5111 year: 'numeric', 5112 month: 'long', 5113 day: 'numeric' 5114 })) 5115 } 5116 k(); 5117 setTimeout(function () { 5118 window.print(); 5119 try { 5120 if (window.ga4Ecomm && window.ga4Ecomm.trackEvent) window.ga4Ecomm 5121 .trackEvent('share', { 5122 method: 'pdf_export', 5123 content_type: 'product', 5124 item_id: "RJ777" 5125 }) 5126 } catch (_) {} 5127 }, 300); 5128 return 5129 } 5130 if (r) { 5131 window.open(r, '_blank', 'noopener,noreferrer'); 5132 try { 5133 if (window.ga4Ecomm && window.ga4Ecomm.trackEvent) window.ga4Ecomm.trackEvent( 5134 'share', { 5135 method: n, 5136 content_type: 'product', 5137 item_id: "RJ777" 5138 }) 5139 } catch (_) {} 5140 } 5141 }); 5142 5143 function s() { 5144 if (!e) return; 5145 e.select(); 5146 e.setSelectionRange(0, 99999); 5147 try { 5148 if (navigator.clipboard && navigator.clipboard.writeText) { 5149 navigator.clipboard.writeText(f).then(function () { 5150 t() 5151 }).catch(function () { 5152 document.execCommand('copy'); 5153 t() 5154 }) 5155 } else { 5156 document.execCommand('copy'); 5157 t() 5158 } 5159 } catch (u) { 5160 console.error('Failed to copy:', u) 5161 } 5162 } 5163 5164 function t() { 5165 if (!d) return; 5166 const v = d.innerHTML; 5167 d.classList.add('copied'); 5168 d.innerHTML = 5169 '<svg viewBox="0 0 24 24" width="16" height="16">
5169<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>'; 5170 if (window.showToast) showToast({ 5171 type: 'success', 5172 title: '⨠Link Tersalin!', 5173 message: 'Link produk berhasil disalin. Yuk bagikan ke teman!', 5174 duration: 3000 5175 }); 5176 setTimeout(function () { 5177 d.classList.remove('copied'); 5178 d.innerHTML = v 5179 }, 2000) 5180 } 5181 if (d) d.addEventListener('click', s); 5182 if (navigator.share) { 5183 const shareHandler = function (w) { 5184 w.preventDefault(); 5185 navigator.share({ 5186 title: g, 5187 text: i + f, 5188 url: f 5189 }).catch(function (x) { 5190 console.log('Native share cancelled or failed:', x) 5191 }) 5192 }; 5193 if (a) a.addEventListener('dblclick', shareHandler); 5194 if (z) z.addEventListener('dblclick', shareHandler) 5195 } 5196 })(); 5197 5198 /* ===== Embedding variants (server â client) ===== */ 5199 (function () { 5200 window.__PD_VARIANTS_WITH_BRANCH__ = []; 5201 })(); 5202 5203 /* ===== Helper: update angka popover ===== */ 5204 function updateStockPopoverForVariant(v) { 5205 try { 5206 const elMeg = document.getElementById('sp-qty-meg'); 5207 const elMdf = document.getElementById('sp-qty-mdf'); 5208 const elBda = document.getElementById('sp-qty-bda'); 5209 5210 if (typeof v ? .smm === 'number' && elMeg) elMeg.textContent = formatStockLabel(Math.max(0, v.smm | 0)); 5211 if (typeof v ? .smf === 'number' && elMdf) elMdf.textContent = formatStockLabel(Math.max(0, v.smf | 0)); 5212 if (typeof v ? .sba === 'number' && elBda) elBda.textContent = formatStockLabel(Math.max(0, v.sba | 0)); 5213 } catch (_) {} 5214 } 5215 5216 /* ===== applyVariant: 10+ dan update popover ===== */ 5217 (function patchApplyVariant() { 5218 if (typeof applyVariant !== 'function') return; 5219 const original = applyVariant; 5220 window.applyVariant = function (v) { 5221 original(v); 5222 5223 try { 5224 const elStock = document.getElementById('pd-stock-badge'); 5225 if (elStock) { 5226 let txt = elStock.textContent || ''; 5227 let m = txt.match(/\d+/); 5228 if (m) { 5229 const n = parseInt(m[0] || '0', 10) || 0; 5230 elStock.textContent = (n > 0) ? ('Stok: ' + formatStockLabel(n)) : 'Habis'; 5231 } 5232 } 5233 } catch (_) {} 5234 if (window.__PD_VARIANTS_WITH_BRANCH__ && v) { 5235 const vv = window.__PD_VARIANTS_WITH_BRANCH__.find(x => x.id === v.id) || v; 5236 updateStockPopoverForVariant(vv) 5237 } 5238 }; 5239 })(); 5240 5241 (function initCurrentVariantBranch() { 5242 const list = window.__PD_VARIANTS_WITH_BRANCH__ || []; 5243 if (!list.length) return; 5244 const hid = document.getElementById('pd-variant-id'); 5245 const vid = hid ? parseInt(hid.value || '0', 10) : 0; 5246 const current = list.find(x => x.id === vid) || list[0] || null; 5247 if (current) updateStockPopoverForVariant(current); 5248 })(); 5249 5250 (function () { 5251 if (!window.ga4Ecomm) return; 5252 const catSegs = ["Komputer & Laptop", "Laptop", "Gaming"]; 5253 window.ga4Ecomm.viewItem({ 5254 currency: 'IDR', 5255 value: 20789000, 5256 item_id: "RJ777", 5257 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", 5258 item_brand: "Lenovo ",
5259 item_category: catSegs && catSegs.length ? catSegs.join(' / ') : '' 5260 }); 5261 })(); 5262 5263 (function patchApplyVariantFocus() { 5264 if (typeof applyVariant !== 'function') return; 5265 const original = applyVariant; 5266 window.applyVariant = function (v, focusImage = true) { 5267 5268 original(v, focusImage); 5269 5270 if (focusImage && v && v.image_url) { 5271 _0xau1v(v.image_url); 5272 } 5273 }; 5274 })(); 5275 5276 (function () { 5277 var soldMap = []; 5278 var soldTotalLabel = "Terjual 2"; 5279 5280 function formatSoldLabel(qty) { 5281 if (qty >= 1000000) { 5282 var v = Math.floor((qty / 100000)) / 10; 5283 return 'Terjual ' + (String(v).replace('.', ',')) + 'jt+'; 5284 } 5285 if (qty >= 1000) { 5286 var v2 = Math.floor((qty / 100)) / 10; 5287 return 'Terjual ' + (String(v2).replace('.', ',')) + 'rb+'; 5288 } 5289 if (qty >= 100) { 5290 var v2 = Math.floor((qty / 100)) * 100; 5291 return 'Terjual ' + (String(v2).replace('.', ',')) + '+'; 5292 } 5293 if (qty >= 10) { 5294 var v2 = Math.floor((qty / 10)) * 10; 5295 return 'Terjual ' + (String(v2).replace('.', ',')) + '+'; 5296 } 5297 return 'Terjual ' + (qty.toLocaleString('id-ID')); 5298 } 5299 5300 function updateSoldLabel(labelText) { 5301 var el = document.querySelector('#pd-sold-inline, [data-role="sold-chip"]'); 5302 if (el) el.textContent = labelText; 5303 } 5304 5305 window.updateSoldBySku = function (sku) { 5306 if (!sku || typeof sku !== 'string') { 5307 updateSoldLabel(soldTotalLabel); 5308 return; 5309 } 5310 var qty = soldMap[sku] || 0; 5311 updateSoldLabel(formatSoldLabel(qty)); 5312 }; 5313 5314 updateSoldLabel(soldTotalLabel); 5315 })(); 5316 5317 (function () { 5318 const h = document.getElementById('pd-sticky-header'); 5319 if (!h) return; 5320 const p = document.getElementById('pd-price-anchor'); 5321 const ac = document.getElementById('pd-sticky-add-cart'); 5322 const by = document.getElementById('pd-sticky-buy'); 5323 let lt = window.scrollY; 5324 let tk = false; 5325 5326 function u() { 5327 if (!p) return; 5328 const r = p.getBoundingClientRect(); 5329 const s = window.scrollY; 5330 if (r.top < 0) { 5331 h.classList.add('visible') 5332 } else { 5333 h.classList.remove('visible') 5334 } 5335 lt = s; 5336 tk = false 5337 } 5338 5339 function rt() { 5340 if (!tk) { 5341 window.requestAnimationFrame(u); 5342 tk = true 5343 } 5344 } 5345 window.addEventListener('scroll', rt, { 5346 passive: true 5347 }); 5348 u(); 5349 5350 function sy() { 5351 const ma = document.getElementById('btn-add-cart'); 5352 const mb = document.getElementById('btn-buy'); 5353 if (ac && ma) { 5354 ac.disabled = ma.disabled 5355 } 5356 if (by && mb) { 5357 by.disabled = mb.disabled 5358 } 5359 } 5360 sy(); 5361 const ob = new MutationObserver(sy); 5362 const ma = document.getElementById('btn-add-cart'); 5363 const mb = document.getElementById('btn-buy'); 5364 if (ma) ob.observe(ma, { 5365 attributes: true, 5366 attributeFilter: ['disabled'] 5367 }); 5368 if (mb) ob.observe(mb, { 5369 attributes: true, 5370 attributeFilter: ['disabled'] 5371 }); 5372 const ss = document.getElementById('pd-sticky-share-btn'); 5373 const ms = document.getElementById('pd-share-btn'); 5374 if (ss && ms) { 5375 ss.addEventListener('click', function (e) { 5376 e.preventDefault(); 5377 ms.click() 5378 }) 5379 } 5380 if (ac) { 5381 ac.addEventListener('click', function (e) { 5382 e.preventDefault(); 5383 if (ac.disabled) return; 5384 const m = document.getElementById('btn-add-cart'); 5385 if (m && !m.disabled) { 5386 m.click() 5387 } 5388 }) 5389 } 5390 if (by) { 5391 by.addEventListener('click', function (e) { 5392 e.preventDefault(); 5393 if (by.disabled) return; 5394 const m = document.getElementById('btn-buy'); 5395 if (m && !m.disabled && window.buyNow) { 5396 window.buyNow(e) 5397 } 5398 }) 5399 } 5400 5401 function getChatProductData() { 5402 const varInput = document.getElementById('pd-variant-id'); 5403 const variantId = varInput ? parseInt(varInput.value || '0', 10) : 0; 5404 const variantSummary = getVariantSummaryText(); 5405 const priceEl = document.getElementById('pd-price-current'); 5406 const currentPrice = priceEl ? priceEl.textContent.trim() : 'Rp 20.789.000'; 5407 const pd = { 5408 id: 325, 5409 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
5409ipse Black\/3Y", 5410 price: currentPrice, 5411 image: "\/uploads\/products\/lenovo-legion-go-8asp2-83n0000rid.webp", 5412 url: window.location.href 5413 }; 5414 if (variantId > 0) { 5415 pd.variant_id = variantId 5416 } 5417 if (variantSummary) { 5418 pd.variant_summary = variantSummary 5419 } 5420 return pd 5421 } 5422 const ch = document.getElementById('pd-sticky-chat'); 5423 if (ch) { 5424 ch.addEventListener('click', function (e) { 5425 e.preventDefault(); 5426 if (!window.plazaChat) { 5427 console.warn('Chat widget not loaded'); 5428 return 5429 } 5430 window.plazaChat.attachProduct(getChatProductData()); 5431 window.plazaChat.openWidget() 5432 }) 5433 } 5434 const dch = document.getElementById('btn-chat-icon'); 5435 if (dch) { 5436 dch.addEventListener('click', function (e) { 5437 e.preventDefault(); 5438 if (!window.plazaChat) { 5439 console.warn('Chat widget not loaded'); 5440 return 5441 } 5442 window.plazaChat.attachProduct(getChatProductData()); 5443 window.plazaChat.openWidget() 5444 }) 5445 } 5446 const mch = document.getElementById('mf-chat'); 5447 if (mch) { 5448 mch.addEventListener('click', function (e) { 5449 e.preventDefault(); 5450 if (!window.plazaChat) { 5451 console.warn('Chat widget not loaded'); 5452 return 5453 } 5454 window.plazaChat.attachProduct(getChatProductData()); 5455 window.plazaChat.openWidget() 5456 }) 5457 } 5458 window.addEventListener('pd-variant-changed', function (e) { 5459 const d = e.detail || {}; 5460 if (d.price !== undefined) { 5461 const sp = document.getElementById('pd-sticky-price'); 5462 if (sp) { 5463 sp.textContent = formatRupiah(d.price) 5464 } 5465 } 5466 if (d.originalPrice !== undefined && d.originalPrice > d.price) { 5467 const so = document.getElementById('pd-sticky-price-original'); 5468 if (so) { 5469 so.textContent = formatRupiah(d.originalPrice); 5470 so.style.display = '' 5471 } 5472 } else { 5473 const so = document.getElementById('pd-sticky-price-original'); 5474 if (so) { 5475 so.style.display = 'none' 5476 } 5477 } 5478 if (d.discount !== undefined && d.discount > 0) { 5479 const sd = document.getElementById('pd-sticky-discount'); 5480 if (sd) { 5481 sd.textContent = '-' + d.discount + '%'; 5482 sd.style.display = '' 5483 } 5484 } else { 5485 const sd = document.getElementById('pd-sticky-discount'); 5486 if (sd) { 5487 sd.style.display = 'none' 5488 } 5489 } 5490 const hs = d.stock > 0; 5491 if (ac) { 5492 ac.disabled = !hs 5493 } 5494 if (by) { 5495 by.disabled = !hs 5496 } 5497 }); 5498 5499 function formatRupiah(n) { 5500 return 'Rp' + Math.floor(n).toLocaleString('id-ID') 5501 } 5502 })(); 5503 5504 (function () { 5505 const t = document.getElementById('pdv-toggle-btn'); 5506 const v = document.getElementById('pd-voucher-section'); 5507 if (t && v) { 5508 const h = v.querySelectorAll('.pdv-min-hidden'); 5509 const n = h.length; 5510 t.addEventListener('click', function () { 5511 const e = t.classList.toggle('expanded'); 5512 h.forEach(function (i) { 5513 if (e) { 5514 i.classList.remove('pdv-min-hidden') 5515 } else { 5516 i.classList.add('pdv-min-hidden') 5517 } 5518 }); 5519 t.textContent = e ? 'Tutup' : '+' + n 5520 }) 5521 } 5522 const m = document.getElementById('voucher-detail-modal'); 5523 const mc = document.getElementById('voucher-modal-close'); 5524 const ma = document.getElementById('voucher-modal-cancel'); 5525 const mcp = document.getElementById('voucher-modal-copy'); 5526 if (m) { 5527 const bb = document.querySelectorAll('.pdv-badge-btn'); 5528 bb.forEach(function (btn) { 5529 btn.addEventListener('click', function () { 5530 if (btn.disabled) return; 5531 const c = btn.getAttribute('data-voucher-code'); 5532 const nm = btn.getAttribute('data-voucher-name'); 5533 const dl = btn.getAttribute('data-discount-label'); 5534 const bl = btn.getAttribute('data-badge-label'); 5535 const mp = parseInt(btn.getAttribute('data-min-purchase')); 5536 const md = parseInt(btn.getAttribute('data-max-discount')); 5537 const vu = btn.getAttribute('data-valid-until'); 5538 document.getElementById('voucher-modal-badge').innerHTML = 5539 '<span class="vmb-value">' + dl + '</span><span class="vmb-label">' + 5540 bl + '</span>'; 5541 document.getElementById('voucher-modal-code').textContent = c; 5542 document.getElementById('voucher-modal-name').textContent = nm; 5543 const me = document.getElementById('voucher-modal-min'); 5544 if (mp > 0) { 5545 me.style.display = ''; 5546 document.getElementById('voucher-modal-min-val').textContent = fr(mp) 5547 } else { 5548 me.style.display = 'none' 5549 } 5550 const xe = document.getElementById('voucher-modal-max'); 5551 if (md > 0) { 5552 xe.style.display = ''; 5553 document.getElementById('voucher-modal-max-val').textContent = fr(md) 5554 } else { 5555 xe.style.display = 'none' 5556 } 5557 if (vu) { 5558 const d = new Date(vu); 5559 const ft = d.toLocaleDateString('id-ID', { 5560 day: 'numeric', 5561 month: 'long', 5562 year: 'numeric', 5563 hour: '2-digit', 5564 minute: '2-digit'
5565 }); 5566 document.getElementById('voucher-modal-valid-val').textContent = ft 5567 } 5568 mcp.setAttribute('data-code', c); 5569 m.classList.add('show'); 5570 document.body.style.overflow = 'hidden' 5571 }) 5572 }); 5573 5574 function cm() { 5575 m.classList.remove('show'); 5576 document.body.style.overflow = '' 5577 } 5578 if (mc) mc.addEventListener('click', cm); 5579 if (ma) ma.addEventListener('click', cm); 5580 m.addEventListener('click', function (e) { 5581 if (e.target === m) cm() 5582 }); 5583 if (mcp) { 5584 mcp.addEventListener('click', function () { 5585 const c = mcp.getAttribute('data-code'); 5586 if (!c) return; 5587 if (navigator.clipboard && navigator.clipboard.writeText) { 5588 navigator.clipboard.writeText(c).then(function () { 5589 smc() 5590 }).catch(function (err) { 5591 fc(c) 5592 }) 5593 } else { 5594 fc(c) 5595 } 5596 }) 5597 } 5598 } 5599 const b = document.querySelectorAll('.pdv-min-copy'); 5600 b.forEach(function (btn) { 5601 btn.addEventListener('click', function () { 5602 if (btn.disabled) return; 5603 const code = btn.getAttribute('data-code'); 5604 if (!code) return; 5605 if (navigator.clipboard && navigator.clipboard.writeText) { 5606 navigator.clipboard.writeText(code).then(function () { 5607 sc(btn) 5608 }).catch(function (err) { 5609 fc(code, btn) 5610 }) 5611 } else { 5612 fc(code, btn) 5613 } 5614 }) 5615 }); 5616 5617 function fc(text, btn) { 5618 const tx = document.createElement('textarea'); 5619 tx.value = text; 5620 tx.style.position = 'fixed'; 5621 tx.style.opacity = '0'; 5622 document.body.appendChild(tx); 5623 tx.select(); 5624 try { 5625 document.execCommand('copy'); 5626 if (btn) sc(btn); 5627 else smc() 5628 } catch (err) {} 5629 document.body.removeChild(tx) 5630 } 5631 5632 function sc(btn) { 5633 const o = btn.textContent; 5634 btn.classList.add('copied'); 5635 btn.textContent = 'â Tersalin'; 5636 setTimeout(function () { 5637 btn.classList.remove('copied'); 5638 btn.textContent = o 5639 }, 2000) 5640 } 5641 5642 function smc() { 5643 const o = mcp.textContent; 5644 mcp.textContent = 'â Kode Tersalin'; 5645 mcp.style.background = '#22c55e'; 5646 setTimeout(function () { 5647 mcp.textContent = o; 5648 mcp.style.background = '' 5649 }, 2000) 5650 } 5651 5652 function fr(a) { 5653 return 'Rp' + Math.floor(a).toLocaleString('id-ID') 5654 } 5655 })(); 5656 </script>
5656 5657
5657<script nonce="se3iyzEHMc9FQEB4wSyd0w=="> 5658 window.PD_ID = 325; 5659 window.PD_NAME = _0x3c4d; 5660 window.PD_SKU = _0x5e6f; 5661 window.PD_CATEGORY_PATH = "Komputer & Laptop/Laptop/Gaming"; 5662 window.PD_BEST_VOUCHER = null; 5663 window.IS_DIGITAL = IS_DIGITAL; 5664 window.isPreorderProduct = false; 5665 window.PD_PREORDER_DATA = null; 5666 </script>
5666 5667 5668
5668<script src="https://plazaitdotid.pages.dev/assets/js/pd-lightbox.js" nonce="se3iyzEHMc9FQEB4wSyd0w=="></script>
5668 5669
5669<script src="https://plazaitdotid.pages.dev/assets/js/cart.js" defer nonce="se3iyzEHMc9FQEB4wSyd0w=="></script>
5669 5670
5670<script src="https://plazaitdotid.pages.dev/assets/js/stock-validator-vanilla.js" nonce="se3iyzEHMc9FQEB4wSyd0w=="> 5671 </script>
5671 5672
5672<script src="https://plazaitdotid.pages.dev/assets/js/pd-addtocart.js" defer nonce="se3iyzEHMc9FQEB4wSyd0w=="> 5673 </script>
5673 5674
5674<script src="https://plazaitdotid.pages.dev/assets/js/pd-buynow.js" defer nonce="se3iyzEHMc9FQEB4wSyd0w=="></script>
5674 5675
5675<script src="https://plazaitdotid.pages.dev/assets/js/pd-voucher-recalc.js" defer nonce="se3iyzEHMc9FQEB4wSyd0w=="> 5676 </script>
5676 5677
5677<script nonce="se3iyzEHMc9FQEB4wSyd0w=="> 5678 document.addEventListener('DOMContentLoaded', function () { 5679 if (typeof ProductReviews !== 'undefined') { 5680 ProductReviews.init(325); 5681 } 5682 const r = document.getElementById('pd-rating-inline'); 5683 if (r) { 5684 r.addEventListener('click', function (e) { 5685 e.preventDefault(); 5686 const s = document.getElementById('reviews'); 5687 if (s) { 5688 s.scrollIntoView({ 5689 behavior: 'smooth', 5690 block: 'start' 5691 }); 5692 s.classList.add('highlight-flash'); 5693 setTimeout(() => { 5694 s.classList.remove('highlight-flash') 5695 }, 1500) 5696 } 5697 }); 5698 } 5699 }); 5700 </script>
5700 5701 5702
5702<script nonce="se3iyzEHMc9FQEB4wSyd0w=="> 5703 (function () { 5704 function _0x9i0j(el) { 5705 if (typeof gtag === 'function') { 5706 gtag('event', 'qoala_insurance_click', { 5707 event_category: 'Insurance', 5708 event_label: 'Qoala Banner Click - Product Detail', 5709 link_url: '/plazait-protect', 5710 page_location: window.location.href, 5711 product_id: parseInt(el.getAttribute('data-product-id')) || 0, 5712 product_name: el.getAttribute('data-product-name') || '', 5713 category_path: el.getAttribute('data-category-path') || '', 5714 custom_map: { 5715 custom_parameter_1: 'qoala_banner_product_detail' 5716 } 5717 }) 5718 } 5719 } 5720 5721 function _0x1k2l() { 5722 var a = document.querySelector('.qoala-cta[data-ga-event="qoala_banner_click"]'); 5723 if (a) { 5724 a.addEventListener('click', function (e) { 5725 _0x9i0j(this) 5726 }) 5727 } 5728 } 5729 if (document.readyState === 'loading') { 5730 document.addEventListener('DOMContentLoaded', _0x1k2l) 5731 } else { 5732 _0x1k2l() 5733 } 5734 })(); 5735 5736 (function () { 5737 const pwpSection = document.getElementById('pwp-deals-section'); 5738 const pwpBadge = document.getElementById('pwp-trigger-badge'); 5739 if (!pwpSection) return; 5740 const productId = parseInt(pwpSection.getAttribute('data-product-id')) || 0; 5741 const variantId = parseInt(pwpSection.getAttribute('data-variant-id')) || 0; 5742 const categoryPath = pwpSection.getAttribute('data-category-path') || ''; 5743 if (!productId) return; 5744 5745 function formatRupiah(n) { 5746 return 'Rp' + Math.floor(n).toLocaleString('id-ID') 5747 } 5748 5749 function loadPWPDeals() { 5750 const url = 5751 `/api/pwp/get_by_product.php?product_id=${productId}${variantId?`&variant_id=${variantId}`:''}${categoryPath?`&category_path=${encodeURIComponent(categoryPath)}`:''}`; 5752 fetch(url).then(r => r.json()).then(data => { 5753 if (data.success && data.promotions && data.promotions.length > 0) { 5754 renderPWPDeals(data.promotions); 5755 pwpSection.hidden = false; 5756 if (pwpBadge) pwpBadge.hidden = false; 5757 setTimeout(function () { 5758 if (typeof window.adjustSidebarBanner === 'function') { 5759 window.adjustSidebarBanner() 5760 } 5761 }, 150) 5762 } else { 5763 pwpSection.hidden = true; 5764 if (pwpBadge) pwpBadge.hidden = true 5765 } 5766 }).catch(err => { 5767 console.error('PWP load error:', err); 5768 pwpSection.hidden = true; 5769 if (pwpBadge) pwpBadge.hidden = true 5770 }) 5771 } 5772 5773 function renderPWPDeals(promotions) { 5774 const loading = pwpSection.querySelector('.pwp-deals-loading'); 5775 const grid = document.getElementById('pwp-deals-grid'); 5776 if (loading) loading.hidden = true; 5777 if (!grid) return; 5778 grid.innerHTML = ''; 5779 promotions.forEach(promo => { 5780 promo.bundled_products.forEach(product => { 5781 const card = document.createElement('div'); 5782 card.className = 'pwp-deal-card'; 5783 const discount = product.discount > 0 ? product.discount : 0; 5784 const discountPercent = product.regular_price > 0 ? Math.round((discount / 5785 product.regular_price) * 100) : 0; 5786 const imgUrl = product.image_url ? 5787 `/uploads/products/${product.image_url}` : '/assetsimg/no-image.png'; 5788 card.innerHTML = 5789 `<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>`:''}`; 5790 grid.appendChild(card) 5791 }) 5792 }) 5793 } 5794 5795 function escapeHtml(str) { 5796 const div = document.createElement('div'); 5797 div.textContent = str || ''; 5798 return div.innerHTML 5799 } 5800 loadPWPDeals(); 5801 window.addEventListener('pd-variant-changed', function (e) { 5802 const detail = e.detail || {}; 5803 const newVid = detail.variant_id || 0; 5804 const currentVid = parseInt(pwpSection.getAttribute('data-variant-id')) || 0; 5805 if (newVid !== currentVid) { 5806 pwpSection.setAttribute('data-variant-id', newVid); 5807 loadPWPDeals() 5808 } 5809 }) 5810 })(); 5811 </script>
5811 5812 <footer class="site-footer footer-compact variant-stripes" role="contentinfo"> 5813 <div class="ft-top ft-collapsible" id="ftTop"> 5814 <div class="container ft-grid"> 5815 5816 <div class="ft-col ft-help"> 5817 <h4 class="ft-title">Butuh Bantuan?</h4> 5818 <p class="ft-desc">Hubungi kami melalui Official WhatsApp interaktif sekarang.</p> 5819 <a class="ft-wa-btn" href="#" target="_blank" rel="nofollow noopener"> 5820 <span class="ico" aria-hidden="true"> 5821 <svg viewBox="0 0 24 24" width="18" height="18"> 5822 <path fill="#25D366" 5823 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" /> 5824 </svg> 5825 </span> 5826 Kirim Pesan 5827 </a> 5828 5829 <p class="ft-desc sm-gap">Ikuti kami:</p> 5830 <div class="ft-social"> 5831 <a aria-label="Facebook" href="/"><svg viewBox="0 0 24 24" width="18" height="18"> 5832 <path fill="currentColor" 5833 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" /> 5834 </svg></a> 5835 <a aria-label="Instagram" href="/"><svg viewBox="0 0 24 24" width="18" height="18"> 5836 <path fill="currentColor" 5837 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
5837V7.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" /> 5838 </svg></a> 5839 <a aria-label="TikTok" href="/"><svg viewBox="0 0 24 24" width="18" height="18"> 5840 <path fill="currentColor" 5841 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" /> 5842 </svg></a> 5843 </div> 5844 </div> 5845 5846 <!-- Collapsible Content Wrapper (Non-Homepage Only) --> 5847 <div class="ft-collapsible-content" id="ftCollapsible"> 5848 5849 <div class="ft-col"> 5850 <h4 class="ft-title">Tentang RAJAVIP</h4> 5851 <ul class="ft-links"> 5852 <li><a href="https://moderntally.com/">Tentang 5853 Kami</a></li> 5854 <li><a href="https://moderntally.com/">Kontak 5855 Kami</a></li> 5856 <li><a href="https://moderntally.com/">Lokasi 5857 Toko</a></li> 5858 <li><a href="https://moderntally.com/">FAQ</a> 5859 </li> 5860 </ul> 5861 <div class="ft-address"> 5862 <p class="company">PT Raja Game.</p> 5863 <p>JL. Raja Game Blok BB No. 12-A, Kel. RAJAVIP II,</p> 5864 <p>Kec. Medan Area, Kota Medan, Sumatera Utara, 20216</p> 5865 </div> 5866 </div> 5867 5868 <div class="ft-col"> 5869 <h4 class="ft-title">Informasi</h4> 5870 <ul class="ft-links"> 5871 <li><a href="https://moderntally.com/">Syarat 5872 & Ketentuan</a></li> 5873 <li><a href="https://moderntally.com/">Kebijakan 5874 Privasi</a></li> 5875 <li><a href="https://moderntally.com/">Kebijakan 5876 Cookie</a></li> 5877 <li><a href="https://moderntally.com/">Pengiriman 5878 & Pengembalian</a></li> 5879 <li><a href="https://moderntally.com/">Pembayaran 5880 & Cicilan</a></li> 5881 <li><a href="https://moderntally.com/">Garansi 5882 & Layanan</a></li> 5883 </ul> 5884 5885 <div class="ft-payments payments-small" aria-label="Metode Pembayaran"> 5886 <div class="pay-row"> 5887 <img src="https://moderntally.com/imagess/icon-rajavip.png" alt="Mandiri" 5888 loading="lazy"> 5889 <img src="https://moderntally.com/imagess/icon-rajavip.png" alt="BNI" 5890 loading="lazy"> 5891 <img src="https://moderntally.com/imagess/icon-rajavip.png" alt="BRI" 5892 loading="lazy"> 5893 <img src="https://moderntally.com/imagess/icon-rajavip.png" alt="BSI" 5894 loading="lazy"> 5895 <img src="https://moderntally.com/imagess/icon-rajavip.png" 5896 alt="ShopeePay" loading="lazy"> 5897 </div> 5898 </div> 5899 </div> 5900 5901 </div> 5902 <!-- End Collapsible Content --> 5903 5904 <!-- Expand Button (Mobile Only) --> 5905 <button class="ft-expand-btn" id="ftExpandBtn" aria-label="Lihat semua informasi footer">
5906 <span class="expand-text">Selengkapnya</span> 5907 <svg viewBox="0 0 24 24" width="18" height="18" fill="currentColor"> 5908 <path d="M7.41 8.59L12 13.17l4.59-4.58L18 10l-6 6-6-6 1.41-1.41z" /> 5909 </svg> 5910 </button> 5911 5912 </div> 5913 </div> 5914 <div class="ft-bottom"> 5915 <div class="container ft-bottom-inner"> 5916 <div class="ft-copy"> 5917 <span>RAJAVIP © <span id="yearNow">2026</span></span> 5918 <span>PT RAJAVIP. All rights reserved.</span> 5919 </div> 5920 </div> 5921 </div> 5922 5923 <style nonce="se3iyzEHMc9FQEB4wSyd0w=="> 5924 /* Chat Widget Styles - Lightweight & Minimal */ 5925 .chat-widget { 5926 position: fixed; 5927 bottom: 20px; 5928 right: 20px; 5929 z-index: 9999; 5930 font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, sans-serif; 5931 } 5932 5933 /* Hide floating button on mobile - use bottom nav instead */ 5934 @media (max-width: 640px) { 5935 .chat-toggle-btn { 5936 display: none !important; 5937 } 5938 5939 /* Ensure popup is still visible on mobile even when button is hidden */ 5940 .chat-widget { 5941 display: block !important; 5942 } 5943 5944 .chat-popup { 5945 display: none; 5946 /* Hidden by default, shown via JS */ 5947 } 5948 5949 .chat-popup[style*="display: block"], 5950 .chat-popup[style*="display:block"] { 5951 display: block !important; 5952 } 5953 } 5954 5955 .chat-toggle-btn { 5956 width: 60px; 5957 height: 60px; 5958 border-radius: 50%; 5959 background: linear-gradient(135deg, #F28C1A 0%, #D97809 100%); 5960 border: none; 5961 color: white; 5962 cursor: pointer; 5963 box-shadow: 0 4px 12px rgba(242, 140, 26, 0.3); 5964 position: relative; 5965 transition: transform 0.2s, box-shadow 0.2s; 5966 } 5967 5968 .chat-toggle-btn:hover { 5969 transform: scale(1.05); 5970 box-shadow: 0 6px 20px rgba(242, 140, 26, 0.4); 5971 } 5972 5973 #chat-toggle-btn .chat-icon { 5974 position: absolute; 5975 top: 50%; 5976 left: 50%; 5977 transform: translate(-50%, -50%); 5978 width: 28px !important; 5979 height: 28px !important; 5980 } 5981 5982 .chat-unread-badge { 5983 position: absolute; 5984 top: -5px; 5985 right: -5px; 5986 background: #ef4444; 5987 color: white; 5988 border-radius: 12px; 5989 padding: 2px 6px; 5990 font-size: 11px; 5991 font-weight: 600; 5992 min-width: 20px; 5993 text-align: center; 5994 } 5995 5996 .chat-popup { 5997 position: absolute; 5998 bottom: 80px; 5999 right: 0; 6000 width: 380px; 6001 max-width: calc(100vw - 40px); 6002 height: 500px; 6003 max-height: calc(100vh - 120px); 6004 background: white; 6005 border-radius: 12px; 6006 box-shadow: 0 10px 40px rgba(0, 0, 0, 0.2); 6007 display: flex; 6008 flex-direction: column; 6009 overflow: hidden; 6010 } 6011 6012 .chat-popup-header { 6013 background: linear-gradient(135deg, #F28C1A 0%, #D97809 100%); 6014 color: white; 6015 padding: 16px 20px; 6016 display: flex; 6017 justify-content: space-between; 6018 align-items: center; 6019 flex-shrink: 0; 6020 } 6021 6022 .chat-header-title { 6023 display: flex; 6024 flex-direction: column; 6025 gap: 2px; 6026 min-height: 0; 6027 } 6028 6029 .chat-popup-header h3 { 6030 margin: 0; 6031 font-size: 18px; 6032 font-weight: 600; 6033 line-height: 1.2; 6034 } 6035 6036 .chat-operating-hours { 6037 font-size: 11px; 6038 opacity: 0.9; 6039 font-weight: 400; 6040 display: flex; 6041 align-items: center; 6042 gap: 4px; 6043 line-height: 1.2; 6044 } 6045 6046 .chat-operating-hours svg { 6047 width: 12px; 6048 height: 12px; 6049 opacity: 0.8; 6050 flex-shrink: 0; 6051 } 6052 6053 .chat-header-actions { 6054 display: flex; 6055 align-items: center; 6056 gap: 8px; 6057 } 6058 6059 /* Notification Toggle Button */ 6060 .btn-notif-toggle { 6061 background: none; 6062 border: none; 6063 color: white; 6064 font-size: 18px; 6065 cursor: pointer; 6066 padding: 4px 8px; 6067 transition: all 0.2s; 6068 opacity: 0.8; 6069 } 6070 6071 .btn-notif-toggle:hover { 6072 opacity: 1;
6073 transform: scale(1.1); 6074 } 6075 6076 /* Icon states */ 6077 .btn-notif-toggle[data-status="not-subscribed"] svg { 6078 opacity: 0.7; 6079 } 6080 6081 .btn-notif-toggle[data-status="not-subscribed"]:hover svg { 6082 opacity: 1; 6083 } 6084 6085 .btn-notif-toggle[data-status="subscribed"] svg { 6086 opacity: 1; 6087 animation: bellRing 2s ease-in-out; 6088 } 6089 6090 .btn-notif-toggle[data-status="blocked"] svg { 6091 color: #ff6b6b; 6092 } 6093 6094 .btn-notif-toggle[data-status="not-supported"] { 6095 display: none !important; 6096 } 6097 6098 @keyframes bellRing { 6099 6100 0%, 6101 100% { 6102 transform: rotate(0deg); 6103 } 6104 6105 10%, 6106 30% { 6107 transform: rotate(-10deg); 6108 } 6109 6110 20%, 6111 40% { 6112 transform: rotate(10deg); 6113 } 6114 } 6115 6116 /* Notification Info Bar */ 6117 .chat-notif-info-bar { 6118 position: absolute; 6119 top: 64px; 6120 left: 0; 6121 right: 0; 6122 background: linear-gradient(to right, #e3f2fd, #f5f5f5); 6123 border-bottom: 1px solid #bbdefb; 6124 padding: 8px 12px; 6125 display: flex; 6126 align-items: center; 6127 gap: 8px; 6128 font-size: 12px; 6129 color: #616161; 6130 z-index: 10; 6131 animation: slideDown 0.3s ease; 6132 } 6133 6134 .chat-notif-info-bar svg { 6135 flex-shrink: 0; 6136 } 6137 6138 .chat-notif-info-bar .small { 6139 flex: 1; 6140 line-height: 1.4; 6141 } 6142 6143 .chat-notif-info-bar .btn-dismiss { 6144 background: none; 6145 border: none; 6146 color: #9e9e9e; 6147 cursor: pointer; 6148 padding: 0 4px; 6149 font-size: 16px; 6150 transition: color 0.2s; 6151 } 6152 6153 .chat-notif-info-bar .btn-dismiss:hover { 6154 color: #616161; 6155 } 6156 6157 @keyframes slideDown { 6158 from { 6159 max-height: 0; 6160 opacity: 0; 6161 } 6162 6163 to { 6164 max-height: 50px; 6165 opacity: 1; 6166 } 6167 } 6168 6169 .chat-close-btn { 6170 background: none; 6171 border: none; 6172 color: white; 6173 font-size: 28px; 6174 line-height: 1; 6175 cursor: pointer; 6176 padding: 0; 6177 width: 30px; 6178 height: 30px; 6179 } 6180 6181 .chat-popup-body { 6182 flex: 1 1 auto; 6183 display: flex; 6184 flex-direction: column; 6185 min-height: 0; 6186 overflow: hidden; 6187 height: calc(100% - 64px); 6188 position: relative; 6189 transition: padding-top 0.3s ease; 6190 } 6191 6192 /* Add padding when info bar is visible */ 6193 .chat-popup-body.has-info-bar { 6194 padding-top: 40px; 6195 } 6196 6197 .chat-view { 6198 flex: 1 1 auto; 6199 display: none; 6200 flex-direction: column; 6201 min-height: 0; 6202 overflow: hidden; 6203 } 6204 6205 #chat-list-view { 6206 display: flex; 6207 } 6208 6209 #chat-messages-view { 6210 display: none; 6211 } 6212 6213 #chat-messages-view.active { 6214 display: flex; 6215 flex-direction: column; 6216 } 6217 6218 #chat-new-view { 6219 display: none; 6220 } 6221 6222 #chat-new-view.active { 6223 display: flex; 6224 } 6225 6226 .chat-conversations-list { 6227 flex: 1; 6228 overflow-y: auto; 6229 padding: 0; 6230 background: white; 6231 } 6232 6233 /* Custom Scrollbar for Conversations List */ 6234 .chat-conversations-list::-webkit-scrollbar { 6235 width: 6px; 6236 } 6237 6238 .chat-conversations-list::-webkit-scrollbar-track { 6239 background: #f1f1f1; 6240 } 6241 6242 .chat-conversations-list::-webkit-scrollbar-thumb { 6243 background: #F28C1A; 6244 border-radius: 3px; 6245 } 6246 6247 .chat-conversations-list::-webkit-scrollbar-thumb:hover { 6248 background: #D97809; 6249 } 6250 6251 /* Firefox */ 6252 .chat-conversations-list { 6253 scrollbar-width: thin; 6254 scrollbar-color: #F28C1A #f1f1f1; 6255 } 6256 6257 .chat-conversation-item { 6258 padding: 12px 16px; 6259 cursor: pointer; 6260 display: flex; 6261 gap: 12px; 6262 align-items: flex-start; 6263 transition: background 0.15s ease; 6264 color: #1f2937;
6265 border-bottom: 1px solid #f0f0f0; 6266 } 6267 6268 .chat-conversation-item:hover { 6269 background: #f5f5f5; 6270 } 6271 6272 .chat-conversation-item.active { 6273 background: #FFF5EB; 6274 } 6275 6276 /* WhatsApp-like Avatar */ 6277 .conversation-avatar { 6278 width: 48px; 6279 height: 48px; 6280 border-radius: 50%; 6281 background: linear-gradient(135deg, #F28C1A 0%, #D97809 100%); 6282 flex-shrink: 0; 6283 display: flex; 6284 align-items: center; 6285 justify-content: center; 6286 color: white; 6287 font-weight: 600; 6288 font-size: 18px; 6289 } 6290 6291 .conversation-avatar svg { 6292 width: 24px; 6293 height: 24px; 6294 } 6295 6296 /* WhatsApp-like Content */ 6297 .conversation-content { 6298 flex: 1; 6299 min-width: 0; 6300 display: flex; 6301 flex-direction: column; 6302 gap: 4px; 6303 } 6304 6305 .conversation-header { 6306 display: flex; 6307 justify-content: space-between; 6308 align-items: center; 6309 gap: 8px; 6310 } 6311 6312 .conversation-name { 6313 font-weight: 600; 6314 font-size: 15px; 6315 color: #111; 6316 white-space: nowrap; 6317 overflow: hidden; 6318 text-overflow: ellipsis; 6319 } 6320 6321 .conversation-time { 6322 font-size: 12px; 6323 color: #667781; 6324 flex-shrink: 0; 6325 } 6326 6327 .conversation-preview { 6328 display: flex; 6329 justify-content: space-between; 6330 align-items: center; 6331 gap: 8px; 6332 } 6333 6334 .conversation-message { 6335 font-size: 14px; 6336 color: #667781; 6337 white-space: nowrap; 6338 overflow: hidden; 6339 text-overflow: ellipsis; 6340 margin: 0; 6341 flex: 1; 6342 } 6343 6344 .conversation-unread { 6345 background: #25D366; 6346 color: white; 6347 border-radius: 12px; 6348 padding: 2px 8px; 6349 font-size: 12px; 6350 font-weight: 600; 6351 min-width: 20px; 6352 text-align: center; 6353 flex-shrink: 0; 6354 } 6355 6356 /* Active item styling */ 6357 .chat-conversation-item.active .conversation-name { 6358 color: #F28C1A; 6359 } 6360 6361 .chat-conversation-item.active .conversation-time { 6362 color: #F28C1A; 6363 } 6364 6365 .chat-new-btn { 6366 margin: 12px; 6367 padding: 12px; 6368 background: linear-gradient(135deg, #F28C1A 0%, #D97809 100%); 6369 color: white; 6370 border: none; 6371 border-radius: 8px; 6372 cursor: pointer; 6373 font-weight: 500; 6374 font-size: 14px; 6375 display: flex; 6376 align-items: center; 6377 justify-content: center; 6378 gap: 8px; 6379 transition: all 0.2s; 6380 flex-shrink: 0; 6381 } 6382 6383 .chat-new-btn:hover { 6384 transform: translateY(-1px); 6385 box-shadow: 0 4px 8px rgba(242, 140, 26, 0.3); 6386 } 6387 6388 .chat-conversation-title { 6389 flex: 1; 6390 font-weight: 600; 6391 font-size: 16px; 6392 color: #1f2937; 6393 } 6394 6395 .chat-messages-container { 6396 flex: 1; 6397 overflow-y: auto; 6398 padding: 16px; 6399 display: flex; 6400 flex-direction: column; 6401 gap: 8px; 6402 min-height: 0; 6403 background: #E5DDD5; 6404 } 6405 6406 /* Custom Scrollbar for Messages Container */ 6407 .chat-messages-container::-webkit-scrollbar { 6408 width: 6px; 6409 } 6410 6411 .chat-messages-container::-webkit-scrollbar-track { 6412 background: rgba(0, 0, 0, 0.05); 6413 } 6414 6415 .chat-messages-container::-webkit-scrollbar-thumb { 6416 background: rgba(242, 140, 26, 0.6); 6417 border-radius: 3px; 6418 } 6419 6420 .chat-messages-container::-webkit-scrollbar-thumb:hover { 6421 background: #F28C1A; 6422 } 6423 6424 /* Firefox */ 6425 .chat-messages-container { 6426 scrollbar-width: thin; 6427 scrollbar-color: rgba(242, 140, 26, 0.6) rgba(0, 0, 0, 0.05); 6428 } 6429 6430 /* WhatsApp Group-like Messages */ 6431 .chat-message { 6432 display: flex; 6433 margin-bottom: 4px;
6434 animation: fadeIn 0.2s ease; 6435 } 6436 6437 @keyframes fadeIn { 6438 from { 6439 opacity: 0; 6440 transform: translateY(10px); 6441 } 6442 6443 to { 6444 opacity: 1; 6445 transform: translateY(0); 6446 } 6447 } 6448 6449 .chat-message.mine { 6450 justify-content: flex-end; 6451 } 6452 6453 .chat-message-bubble { 6454 max-width: 80%; 6455 padding: 6px 8px 8px 10px; 6456 border-radius: 8px; 6457 position: relative; 6458 box-shadow: 0 1px 0.5px rgba(0, 0, 0, 0.13); 6459 } 6460 6461 /* Bubble from others (Admin/CS) */ 6462 .chat-message:not(.mine) .chat-message-bubble { 6463 background: #FFFFFF; 6464 border-radius: 0 8px 8px 8px; 6465 } 6466 6467 /* Bubble tail for others */ 6468 .chat-message:not(.mine) .chat-message-bubble::before { 6469 content: ''; 6470 position: absolute; 6471 top: 0; 6472 left: -8px; 6473 width: 0; 6474 height: 0; 6475 border-style: solid; 6476 border-width: 0 8px 13px 0; 6477 border-color: transparent #FFFFFF transparent transparent; 6478 } 6479 6480 /* Bubble from user (mine) */ 6481 .chat-message.mine .chat-message-bubble { 6482 background: #D0E8F5; 6483 /* Light blue for user messages */ 6484 border-radius: 8px 0 8px 8px; 6485 } 6486 6487 /* Bubble tail for mine */ 6488 .chat-message.mine .chat-message-bubble::before { 6489 content: ''; 6490 position: absolute; 6491 top: 0; 6492 right: -8px; 6493 width: 0; 6494 height: 0; 6495 border-style: solid; 6496 border-width: 0 0 13px 8px; 6497 border-color: transparent transparent transparent #D0E8F5; 6498 } 6499 6500 .message-sender { 6501 font-size: 12.5px; 6502 font-weight: 600; 6503 color: #F28C1A !important; 6504 margin-bottom: 4px; 6505 } 6506 6507 .chat-message.mine .message-sender { 6508 display: none; 6509 } 6510 6511 /* Message text */ 6512 .message-text { 6513 font-size: 14px; 6514 line-height: 19px; 6515 color: #000000 !important; 6516 word-wrap: break-word; 6517 white-space: pre-wrap; 6518 margin-bottom: 4px; 6519 } 6520 6521 /* Message metadata (time + status) */ 6522 .message-meta { 6523 display: flex; 6524 align-items: center; 6525 justify-content: flex-end; 6526 gap: 4px; 6527 margin-top: 2px; 6528 } 6529 6530 .message-time { 6531 font-size: 11px; 6532 color: #667781 !important; 6533 line-height: 15px; 6534 } 6535 6536 /* Use multiple selectors to override global styles */ 6537 .chat-message-bubble .message-status, 6538 .message-meta .message-status, 6539 .chat-message .message-status { 6540 width: 16px !important; 6541 height: 16px !important; 6542 min-width: 16px !important; 6543 min-height: 16px !important; 6544 max-width: 16px !important; 6545 max-height: 16px !important; 6546 flex-shrink: 0; 6547 color: #667781 !important; 6548 fill: currentColor !important; 6549 } 6550 6551 .chat-message:not(.mine) .message-status { 6552 display: none; 6553 } 6554 6555 /* Loading dots animation */ 6556 @keyframes loadingDots { 6557 6558 0%, 6559 20% { 6560 content: '.'; 6561 } 6562 6563 40% { 6564 content: '..'; 6565 } 6566 6567 60%, 6568 100% { 6569 content: '...'; 6570 } 6571 } 6572 6573 .message-status.loading::after { 6574 content: '...'; 6575 animation: loadingDots 1.5s infinite; 6576 font-size: 16px; 6577 line-height: 16px; 6578 } 6579 6580 .message-status.loading path { 6581 display: none; 6582 } 6583 6584 .message-status.failed { 6585 color: #ef4444 !important; 6586 cursor: pointer; 6587 } 6588 6589 .message-status.sent { 6590 color: #667781 !important; 6591 } 6592 6593 .chat-new-form { 6594 flex: 1; 6595 overflow-y: auto; 6596 padding: 16px; 6597 display: flex; 6598 flex-direction: column; 6599 } 6600 6601 .chat-new-form form { 6602 display: flex; 6603 flex-direction: column; 6604 gap: 16px; 6605 flex: 1; 6606 } 6607 6608 .chat-new-form .form-group { 6609 display: flex; 6610 flex-direction: column; 6611 gap: 6px; 6612 } 6613 6614 .chat-new-form label { 6615 font-size: 14px; 6616 font-weight: 500; 6617 color: #374151; 6618 } 6619 6620 .chat-new-form .form-control { 6621 width: 100%; 6622 padding: 10px 12px; 6623 border: 1px solid #d1d5db; 6624 border-radius: 8px; 6625 font-size: 14px; 6626 font-family: inherit; 6627 transition: border-color 0.2s; 6628 box-sizing: border-box; 6629 } 6630 6631 .chat-new-form .form-control:focus { 6632 outline: none; 6633 border-color: #F28C1A; 6634 box-shadow: 0 0 0 3px rgba(242, 140, 26, 0.1); 6635 } 6636 6637 .chat-new-form textarea.form-control { 6638 resize: vertical; 6639 min-height: 100px; 6640 } 6641 6642 .chat-new-form .btn { 6643 padding: 12px 20px; 6644 border: none; 6645 border-radius: 8px; 6646 font-size: 15px; 6647 font-weight: 500; 6648 cursor: pointer; 6649 transition: all 0.2s; 6650 text-align: center; 6651 } 6652 6653 .chat-new-form .btn-primary { 6654 background: linear-gradient(135deg, #F28C1A 0%, #D97809 100%); 6655 color: white; 6656 } 6657 6658 .chat-new-form .btn-primary:hover { 6659 transform: translateY(-1px); 6660 box-shadow: 0 4px 8px rgba(242, 140, 26, 0.3); 6661 } 6662 6663 .chat-new-form .btn-primary:active { 6664 transform: scale(0.98); 6665 } 6666 6667 .chat-new-form .btn-block { 6668 width: 100%; 6669 margin-top: auto; 6670 } 6671 6672 .chat-message-form { 6673 padding: 12px; 6674 border-top: 1px solid #e5e7eb; 6675 display: flex; 6676 flex-wrap: wrap; 6677 gap: 8px; 6678 align-items: flex-end; 6679 flex-shrink: 0; 6680 background: white; 6681 } 6682 6683 .chat-product-card { 6684 flex: 1 1 100%; 6685 max-width: 100%; 6686 display: flex; 6687 gap: 12px; 6688 padding: 12px; 6689 background: #f3f4f6; 6690 border-radius: 8px; 6691 margin-bottom: 4px;
6692 border: 1px solid #e5e7eb; 6693 } 6694 6695 .chat-product-card img { 6696 width: 60px; 6697 height: 60px; 6698 object-fit: cover; 6699 border-radius: 6px; 6700 flex-shrink: 0; 6701 } 6702 6703 .chat-product-card-content { 6704 flex: 1; 6705 min-width: 0; 6706 } 6707 6708 .chat-product-card-name { 6709 font-weight: 500; 6710 font-size: 14px; 6711 color: #1f2937; 6712 margin-bottom: 4px; 6713 white-space: nowrap; 6714 overflow: hidden; 6715 text-overflow: ellipsis; 6716 } 6717 6718 .chat-product-card-variant { 6719 font-size: 12px; 6720 color: #6b7280; 6721 margin-bottom: 4px; 6722 } 6723 6724 .chat-product-card-price { 6725 font-size: 13px; 6726 color: #667eea; 6727 font-weight: 600; 6728 } 6729 6730 .chat-product-card-remove { 6731 align-self: flex-start; 6732 background: none; 6733 border: none; 6734 color: #9ca3af; 6735 cursor: pointer; 6736 padding: 4px; 6737 font-size: 18px; 6738 line-height: 1; 6739 transition: color 0.2s; 6740 } 6741 6742 .chat-product-card-remove:hover { 6743 color: #ef4444; 6744 } 6745 6746 /* Product card in messages (read-only display) */ 6747 .message-product-card { 6748 display: flex; 6749 gap: 10px; 6750 padding: 10px; 6751 background: rgba(255, 255, 255, 0.5); 6752 border-radius: 8px; 6753 margin-bottom: 6px; 6754 border: 1px solid rgba(0, 0, 0, 0.08); 6755 align-items: center; 6756 } 6757 6758 .chat-message.mine .message-product-card { 6759 background: rgba(255, 255, 255, 0.7); 6760 } 6761 6762 .message-product-card img { 6763 width: 50px; 6764 height: 50px; 6765 object-fit: cover; 6766 border-radius: 6px; 6767 flex-shrink: 0; 6768 } 6769 6770 .message-product-info { 6771 flex: 1; 6772 min-width: 0; 6773 } 6774 6775 .message-product-name { 6776 font-weight: 500; 6777 font-size: 13px; 6778 color: #1f2937; 6779 margin-bottom: 2px; 6780 overflow: hidden; 6781 text-overflow: ellipsis; 6782 display: -webkit-box; 6783 -webkit-line-clamp: 2; 6784 -webkit-box-orient: vertical; 6785 line-height: 1.3; 6786 } 6787 6788 .message-product-variant { 6789 font-size: 11px; 6790 color: #6b7280; 6791 margin-bottom: 2px; 6792 } 6793 6794 .message-product-price { 6795 font-size: 12px; 6796 color: #667eea; 6797 font-weight: 600; 6798 } 6799 6800 .message-product-link { 6801 flex-shrink: 0; 6802 width: 32px; 6803 height: 32px; 6804 display: flex; 6805 align-items: center; 6806 justify-content: center; 6807 background: rgba(102, 126, 234, 0.1); 6808 border-radius: 6px; 6809 color: #667eea; 6810 text-decoration: none; 6811 transition: all 0.2s; 6812 } 6813 6814 .message-product-link:hover { 6815 background: #667eea; 6816 color: white; 6817 } 6818 6819 .message-product-link svg { 6820 width: 16px; 6821 height: 16px; 6822 } 6823 6824 .chat-message-input { 6825 flex: 1; 6826 border: 1px solid #d1d5db; 6827 border-radius: 20px; 6828 padding: 10px 16px; 6829 resize: none; 6830 max-height: 100px; 6831 font-family: inherit; 6832 font-size: 14px; 6833 line-height: 1.5; 6834 box-sizing: border-box; 6835 overflow-y: hidden; 6836 } 6837 6838 .chat-message-input:focus { 6839 outline: none; 6840 border-color: #F28C1A; 6841 box-shadow: 0 0 0 3px rgba(242, 140, 26, 0.1); 6842 } 6843 6844 .chat-send-btn { 6845 width: 40px; 6846 height: 40px; 6847 border-radius: 50%; 6848 background: linear-gradient(135deg, #F28C1A 0%, #D97809 100%); 6849 border: none; 6850 color: white; 6851 cursor: pointer; 6852 flex-shrink: 0; 6853 display: flex; 6854 align-items: center; 6855 justify-content: center; 6856 transition: all 0.2s; 6857 } 6858 6859 .chat-send-btn:hover { 6860 transform: scale(1.05); 6861 box-shadow: 0 2px 8px rgba(242, 140, 26, 0.3); 6862 } 6863 6864 .chat-send-btn:active { 6865 transform: scale(0.95); 6866 } 6867 6868 .chat-loading { 6869 text-align: center; 6870 padding: 20px; 6871 color: #6b7280; 6872 } 6873 6874 /* Date Separator (WhatsApp-style) */ 6875 .date-separator { 6876 display: flex; 6877 align-items: center; 6878 gap: 12px; 6879 margin: 24px 0 16px; 6880 opacity: 0; 6881 animation: fadeInSeparator 0.3s ease forwards; 6882 } 6883 6884 @keyframes fadeInSeparator { 6885 from { 6886 opacity: 0; 6887 transform: translateY(-10px); 6888 } 6889 6890 to { 6891 opacity: 1;
6892 transform: translateY(0); 6893 } 6894 } 6895 6896 .date-separator-line { 6897 flex: 1; 6898 height: 1px; 6899 background: linear-gradient(90deg, transparent, rgba(0, 0, 0, 0.1) 50%, transparent); 6900 } 6901 6902 .date-separator-text { 6903 flex-shrink: 0; 6904 padding: 4px 12px; 6905 background: #e9ecef; 6906 color: #6c757d; 6907 font-size: 11px; 6908 font-weight: 600; 6909 text-transform: uppercase; 6910 letter-spacing: 0.5px; 6911 border-radius: 12px; 6912 box-shadow: 0 1px 2px rgba(0, 0, 0, 0.05); 6913 } 6914 6915 /* Mobile responsive */ 6916 @media (max-width: 640px) { 6917 .chat-popup { 6918 position: fixed !important; 6919 /* Override absolute positioning */ 6920 bottom: 45px !important; 6921 /* Above bottom nav */ 6922 right: 0 !important; 6923 left: 0 !important; 6924 width: 100% !important; 6925 max-width: 100% !important; 6926 /* Use dvh (dynamic viewport height) for browser UI awareness */ 6927 height: calc(100dvh - 45px) !important; 6928 max-height: calc(100dvh - 45px) !important; 6929 /* Fallback for browsers that don't support dvh */ 6930 height: calc(var(--viewport-height, 100vh) - 45px) !important; 6931 max-height: calc(var(--viewport-height, 100vh) - 45px) !important; 6932 border-radius: 0 !important; 6933 z-index: 9999 !important; 6934 } 6935 6936 .chat-popup-header { 6937 border-radius: 0; 6938 } 6939 6940 .chat-messages-container, 6941 .chat-conversations-list { 6942 /* Adjust for mobile keyboard using dynamic viewport */ 6943 max-height: calc(100dvh - 190px); 6944 /* Fallback for browsers that don't support dvh */ 6945 max-height: calc(var(--viewport-height, 100vh) - 190px); 6946 } 6947 } 6948 </style> 6949 <!-- Chat Widget Button --> 6950 <div id="chat-widget" class="chat-widget" data-user-id="" data-is-logged-in="false" 6951 data-csrf-token="df5d776748b1ed8c8dd0d987bae99b1ee3dea6c6dcbe0eedb1bea766c56d569a"> 6952 6953 <span id="chat-unread-badge" class="chat-unread-badge" style="display: none;">0</span> 6954 </button> 6955 6956 <div id="chat-popup" class="chat-popup" style="display: none;"> 6957 <div class="chat-popup-header"> 6958 <div class="chat-header-title"> 6959 <h3>Bantuan</h3> 6960 <span id="chatOperatingHours" class="chat-operating-hours" style="display: none;"></span> 6961 </div> 6962 <div class="chat-header-actions"> 6963 <button id="chatNotifToggle" class="btn-notif-toggle" data-status="not-supported" 6964 title="Push notification" style="display: none;"> 6965 <svg width="18" height="18" viewBox="0 0 24 24" fill="currentColor"> 6966 <path 6967 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" /> 6968 </svg> 6969 </button> 6970 <button id="chat-close-btn" class="chat-close-btn" aria-label="Close chat">Ã</button> 6971 </div> 6972 </div> 6973 6974 <!-- Notification Info Bar (conditional) --> 6975 <div class="chat-notif-info-bar" id="chatNotifInfoBar" style="display:none;"> 6976 <svg width="14" height="14" viewBox="0 0 24 24" fill="#ffc107"> 6977 <path 6978 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" /> 6979 </svg>
6980 <span class="small">Aktifkan notifikasi untuk pemberitahuan balasan</span> 6981 <button class="btn-dismiss" onclick="ChatNotification.dismissInfo()">â</button> 6982 </div> 6983 6984 <div class="chat-popup-body"> 6985 <!-- Conversations List View --> 6986 <div id="chat-list-view" class="chat-view"> 6987 <div id="chat-conversations-list" class="chat-conversations-list"> 6988 <div class="chat-loading">Memuat...</div> 6989 <!-- Conversation Item Structure (rendered by JS): 6990 <div class="chat-conversation-item"> 6991 <div class="conversation-avatar"> 6992 <svg>...</svg> 6993 </div> 6994 <div class="conversation-content"> 6995 <div class="conversation-header"> 6996 <span class="conversation-name">Admin Support</span> 6997 <span class="conversation-time">10:30</span> 6998 </div> 6999 <div class="conversation-preview"> 7000 <p class="conversation-message">Terima kasih telah menghubungi kami...</p> 7001 <span class="conversation-unread">2</span> 7002 </div> 7003 </div> 7004 </div> 7005 --> 7006 </div> 7007 <button id="chat-new-btn" class="chat-new-btn"> 7008 <svg width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" 7009 stroke-width="2"> 7010 <line x1="12" y1="5" x2="12" y2="19"></line> 7011 <line x1="5" y1="12" x2="19" y2="12"></line> 7012 </svg> 7013 Percakapan Baru 7014 </button> 7015 </div> 7016 7017 <!-- Chat Messages View --> 7018 <div id="chat-messages-view" class="chat-view" style="display: none;"> 7019 <div id="chat-messages-container" class="chat-messages-container"> 7020 <div class="chat-loading">Memuat pesan...</div> 7021 <!-- Message Structure (rendered by JS): 7022 <div class="chat-message"> (or .chat-message.mine) 7023 <div class="chat-message-bubble"> 7024 <div class="message-sender">Admin Support</div> (only for non-mine) 7025 <div class="message-text">Halo, ada yang bisa dibantu?</div> 7026 <div class="message-meta"> 7027 <span class="message-time">10:30</span> 7028 <svg class="message-status">...</svg> (only for mine) 7029 </div> 7030 </div> 7031 </div> 7032 --> 7033 </div> 7034 7035 <form id="chat-message-form" class="chat-message-form"> 7036 <input type="hidden" id="chat-current-conversation-id" value=""> 7037 <textarea id="chat-message-input" class="chat-message-input" placeholder="Ketik pesan..." 7038 rows="1" maxlength="5000"></textarea> 7039 <button type="submit" class="chat-send-btn" aria-label="Send message"> 7040 <svg width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" 7041 stroke-width="2"> 7042 <line x1="22" y1="2" x2="11" y2="13"></line> 7043 <polygon points="22 2 15 22 11 13 2 9 22 2"></polygon> 7044 </svg> 7045 </button> 7046 </form> 7047 </div> 7048 7049 <!-- New Chat View --> 7050 <div id="chat-new-view" class="chat-view" style="display: none;"> 7051 <div class="chat-messages-header"> 7052 <button id="chat-new-back-btn" class="chat-back-btn" aria-label="Back to list"> 7053 <svg width="16" height="16" viewB
7053ox="0 0 24 24" fill="none" stroke="currentColor" 7054 stroke-width="2"> 7055 <path d="M19 12H5M12 19l-7-7 7-7" /> 7056 </svg> 7057 </button> 7058 <div class="chat-conversation-title">Percakapan Baru</div> 7059 </div> 7060 7061 <div class="chat-new-form"> 7062 <form id="chat-start-form"> 7063 <div class="form-group"> 7064 <label for="chat-new-subject">Subjek</label> 7065 <input type="text" id="chat-new-subject" class="form-control" 7066 placeholder="Bantuan Pelanggan" maxlength="255"> 7067 </div> 7068 <div class="form-group"> 7069 <label for="chat-new-message">Pesan</label> 7070 <textarea id="chat-new-message" class="form-control" rows="4" 7071 placeholder="Tulis pertanyaan Anda..." required maxlength="5000"></textarea> 7072 </div> 7073 <button type="submit" class="btn btn-primary btn-block">Kirim</button> 7074 </form> 7075 </div> 7076 </div> 7077 </div> 7078 </div> 7079 </div> 7080 7081 <!-- Login Required Modal --> 7082 <div class="modal-overlay" id="chatLoginModal"> 7083 <div class="modal-dialog"> 7084 <div class="modal-header"> 7085 <h3 class="modal-title"> 7086 <div class="modal-icon info"> 7087 <svg width="20" height="20" viewBox="0 0 24 24" fill="currentColor"> 7088 <path 7089 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" /> 7090 </svg> 7091 </div> 7092 Login Diperlukan 7093 </h3> 7094 </div> 7095 <div class="modal-body"> 7096 <p class="modal-message">Anda harus login terlebih dahulu untuk menggunakan fitur chat bantuan 7097 pelanggan.</p> 7098 <div class="modal-actions"> 7099 <button class="modal-btn modal-btn-secondary" id="chatLoginCancel">Batal</button> 7100 <button class="modal-btn modal-btn-primary" id="chatLoginConfirm">Login Sekarang</button> 7101 </div> 7102 </div> 7103 </div> 7104 </div> 7105
7105<script src="https://plazaitdotid.pages.dev/assets/js/chat-widget.js" nonce="se3iyzEHMc9FQEB4wSyd0w=="></script>
7105 7106
7106<script src="https://plazaitdotid.pages.dev/assets/js/chat-notification.js" nonce="se3iyzEHMc9FQEB4wSyd0w=="> 7107 </script>
7107 7108 <!-- Footer Collapse Toggle Script --> 7109
7109<script nonce="se3iyzEHMc9FQEB4wSyd0w=="> 7110 document.addEventListener('DOMContentLoaded', function () { 7111 const ftTop = document.getElementById('ftTop'); 7112 const expandBtn = document.getElementById('ftExpandBtn'); 7113 7114 if (ftTop && expandBtn) { 7115 const expandText = expandBtn.querySelector('.expand-text'); 7116 7117 expandBtn.addEventListener('click', function () { 7118 ftTop.classList.toggle('expanded'); 7119 const isExpanded = ftTop.classList.contains('expanded'); 7120 if (expandText) { 7121 expandText.textContent = isExpanded ? 'Sembunyikan' : 'Selengkapnya'; 7122 } 7123 }); 7124 } 7125 }); 7126 </script>
7126 7127 </footer> 7128 7129 <!-- Compare Sidebar Overlay --> 7130 <div class="compare-overlay" id="compareOverlay"></div> 7131 7132 <!-- Floating Compare Badge (Sticky) --> 7133 <button class="compare-floating-badge" id="compareFloatingBadge" aria-label="Lihat produk yang dibandingkan" 7134 style="display:none;"> 7135 <svg class="cfb-icon" viewBox="0 0 24 24" fill="currentColor" aria-hidden="true"> 7136 <path d="M9.01 14H2v2h7.01v3L13 15l-3.99-4v3zm5.98-1v-3H22V8h-7.01V5L11 9l3.99 4z" /> 7137 </svg> 7138 <span class="cfb-text">Bandingkan</span> 7139 <span class="cfb-count" id="cfbCount">0</span> 7140 </button> 7141 7142 <!-- AI Comparison Modal --> 7143 <div class="ai-compare-modal" id="aiCompareModal"> 7144 <div class="modal-backdrop"></div> 7145 <div class="modal-container"> 7146 <div class="modal-header"> 7147 <h3 class="modal-title"> 7148 <svg width="24" height="24" viewBox="0 0 24 24" fill="currentColor"> 7149 <path 7150 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" /> 7151 </svg> 7152 Analisis AI: Perbandingan Produk 7153 </h3> 7154 <button class="modal-close" id="aiCompareModalClose" aria-label="Tutup"> 7155 <svg width="20" height="20" viewBox="0 0 24 24" fill="currentColor"> 7156 <path 7157 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" /> 7158 </svg> 7159 </button> 7160 </div> 7161 7162 <div class="modal-content"> 7163 <!-- Loading State --> 7164 <div class="ai-loading" id="aiLoading"> 7165 <div class="loading-animation"> 7166 <div class="typing-indicator"> 7167 <span></span> 7168 <span></span> 7169 <span></span> 7170 </div> 7171 <p>AI sedang menganalisis produk...</p> 7172 <small>Proses ini membutuhkan waktu 10-30 detik</small> 7173 </div> 7174 </div> 7175 7176 <!-- Error State --> 7177 <div class="ai-error" id="aiError" hidden> 7178 <div class="error-icon"> 7179 <svg width="48" height="48" viewBox="0 0 24 24" fill="#ef4444"> 7180 <path 7181 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" /> 7182 </svg> 7183 </div> 7184 <h4>Analisis AI Gagal</h4> 7185 <p id="aiErrorMessage">Terjadi kesalahan saat memproses analisis.</p> 7186 <button class="btn btn-outline-primary" id="aiRetry">Coba Lagi</button> 7187 </div> 7188 7189 <!-- Analysis Results --> 7190 <div class="ai-results" id="aiResults" hidden> 7191 <!-- Summary Section --> 7192 <div class="ai-summary-card"> 7193 <h4> 7194 <svg width="20" height="20" viewBox="0 0 24 24" fill="currentColor"> 7195 <path 7196 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" /> 7197 </svg> 7198 Ringkasan Analisis 7199 </h4> 7200 <p id="aiSummary" class="summary-text"></p> 7201 <div class="winner-badge" id="winnerBadge"> 7202 <strong>Rekomendasi Terbaik:</strong> <span id="winnerProduct"></span> 7203 <small id="winnerReason"></small> 7204 </div> 7205 </div> 7206 7207 <!-- Comparison Table --> 7208 <div class="ai-comparison-table"> 7209 <h4> 7210 <svg width="20" height="20" viewBox="0 0 24 24" fill="currentColor"> 7211 <path d="M3,3H21V5H3V3M3,7H21V9H3V7M3,11H21V13H3V11M3,15H21V17H3V15M3,19H21V21H3V19Z" /> 7212 </svg> 7213 Perbandingan Detail 7214 </h4> 7215 <div id="comparisonTable" class="comparison-grid"></div> 7216 </div> 7217 7218 <!-- Detailed Analysis --> 7219 <div class="ai-detailed-analysis"> 7220 <h4> 7221 <svg width="20" height="20" viewBox="0 0 24 24" fill="currentColor"> 7222 <path 7223 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" /> 7224 </svg> 7225 Analisis Mendalam 7226 </h4> 7227 <div id="detailedAnalysis" class="products-analysis"></div> 7228 </div> 7229 7230 <!-- Recommendations --> 7231 <div class="ai-recommendations"> 7232 <h4> 7233 <svg width="20" height="20" viewBox="0 0 24 24" fill="currentColor"> 7234 <path 7235 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" /> 7236 </svg> 7237 Rekomendasi Berdasarkan Kebutuhan 7238 </h4> 7239 <div class="recommendations-grid"> 7240 <div class="recommendation-card"> 7241 <h5>ð° Budget Conscious</h5> 7242 <p id="budgetRecommendation"></p> 7243 </div> 7244 <div class="recommendation-card"> 7245 <h5>â¡ Performance Focused</h5> 7246 <p id="performanceRecommendation"></p> 7247 </div> 7248 <div class="recommendation-card"> 7249 <h5>âï¸ Balanced Choice</h5> 7250 <p id="balancedRecommendation"></p> 7251 </div> 7252 </div> 7253 </div> 7254 7255 <!-- Buying Tips --> 7256 <div class="ai-tips"> 7257 <h4> 7258 <svg width="20" height="20" viewBox="0 0 24 24" fill="currentColor"> 7259 <path 7260 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
7260M5,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" /> 7261 </svg> 7262 Tips Pembelian 7263 </h4> 7264 <ul id="buyingTips" class="tips-list"></ul> 7265 </div> 7266 </div> 7267 </div> 7268 </div> 7269 </div> 7270 7271 <!-- Cart Login Modal --> 7272 <div class="modal-overlay" id="cartLoginModal"> 7273 <div class="modal-dialog"> 7274 <div class="modal-header"> 7275 <h3 class="modal-title"> 7276 <div class="modal-icon info"> 7277 <svg width="20" height="20" viewBox="0 0 24 24" fill="currentColor"> 7278 <path 7279 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" /> 7280 </svg> 7281 </div> 7282 Login untuk Melanjutkan 7283 </h3> 7284 </div> 7285 <div class="modal-body"> 7286 <p class="modal-message" style="margin-bottom: 16px;">Silakan login atau daftar untuk mengakses 7287 keranjang belanja dan menyelesaikan pesanan Anda.</p> 7288 <div style="background: #f8fafc; border-radius: 8px; padding: 12px; margin-bottom: 20px;"> 7289 <p style="font-size: 14px; color: #475569; margin: 0; line-height: 1.6;"> 7290 <strong style="color: #0f172a;">Keuntungan dengan akun:</strong><br> 7291 â Simpan keranjang belanja Anda<br> 7292 â Lacak status pesanan secara real-time<br> 7293 â Checkout lebih cepat dengan data tersimpan<br> 7294 â Dapatkan notifikasi promo & diskon eksklusif 7295 </p> 7296 </div> 7297 <div class="modal-actions"> 7298 <button class="modal-btn modal-btn-secondary" id="cartLoginCancel">Batal</button> 7299 <button class="modal-btn modal-btn-primary" id="cartLoginConfirm" 7300 style="background: #ff6b35; border-color: #ff6b35;">Login</button> 7301 <button class="modal-btn modal-btn-primary" id="cartRegisterBtn" 7302 style="background: #f7931e; border-color: #f7931e;">Daftar</button> 7303 </div> 7304 </div> 7305 </div> 7306 </div> 7307 7308 7309
7309<script src="https://plazaitdotid.pages.dev/assets/js/app.js" nonce="se3iyzEHMc9FQEB4wSyd0w=="></script>
7309 7310
7310<script src="https://plazaitdotid.pages.dev/assets/js/site-notice.js" nonce="se3iyzEHMc9FQEB4wSyd0w=="></script>
7310 7311
7311<script src="https://plazaitdotid.pages.dev/assets/js/guest-cart.js" nonce="se3iyzEHMc9FQEB4wSyd0w=="></script>
7311 7312
7312<script src="https://plazaitdotid.pages.dev/assets/js/cart.js" nonce="se3iyzEHMc9FQEB4wSyd0w=="></script>
7312 7313
7313<script defer src="https://plazaitdotid.pages.dev/assets/js/mega-menu-tiles.js" nonce="se3iyzEHMc9FQEB4wSyd0w=="> 7314 </script>
7314 7315
7315<script src="https://plazaitdotid.pages.dev/assets/js/benchmark.js" nonce="se3iyzEHMc9FQEB4wSyd0w=="></script>
7315 7316
7316<script src="https://plazaitdotid.pages.dev/assets/js/product-compare.js" defer nonce="se3iyzEHMc9FQEB4wSyd0w=="> 7317 </script>
7317 7318
7318<script src="https://plazaitdotid.pages.dev/assets/js/product-card-actions.js" defer 7319 nonce="se3iyzEHMc9FQEB4wSyd0w=="></script>
7319 7320
7320<script src="https://plazaitdotid.pages.dev/assets/js/prsementara layanan bantuanoduct-reviews.js" defer nonce="se3iyzEHMc9FQEB4wSyd0w=="> 7321 </script>
7321 7322
7322<script src="https://plazaitdotid.pages.dev/assets/js/review-submission.js" defer nonce="se3iyzEHMc9FQEB4wSyd0w=="> 7323 </script>
7323 7324
7324<script defer 7325 src="https://static.cloudflareinsights.com/beacon.min.js/v8c78df7c7c0f484497ecbca7046644da1771523124516" 7326 integrity="sha512-8DS7rgIrAmghBFwoOTujcf6D9rXvH8xm8JQ1Ja01h9QX8EzXldiszufYa4IFfKdLUKTTrnSFXLDkUEOTrZQ8Qg==" 7327 data-cf-beacon='{"version":"2024.11.0","token":"c6e2065ed8664545b4545e771552f98c","r":1,"server_timing":{"name":{"cfCacheStatus":true,"cfEdge":true,"cfExtPri":true,"cfL4":true,"cfOrigin":true,"cfSpeedBrain":true},"location_startswith":null}}' 7328 crossorigin="anonymous"></script>
vendor: 2 bytes, line 7328
7328
7329<script defer src="https://static.cloudflareinsights.com/beacon.min.js/v8c78df7c7c0f484497ecbca7046644da1771523124516" integrity="sha512-8DS7rgIrAmghBFwoOTujcf6D9rXvH8xm8JQ1Ja01h9QX8EzXldiszufYa4IFfKdLUKTTrnSFXLDkUEOTrZQ8Qg==" data-cf-beacon='{"version":"2024.11.0","token":"294f0486cfc64bde901ddfa41a2cf382","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 7329
7329
7330<script defer src="https://static.cloudflareinsights.com/beacon.min.js/v8c78df7c7c0f484497ecbca7046644da1771523124516" integrity="sha512-8DS7rgIrAmghBFwoOTujcf6D9rXvH8xm8JQ1Ja01h9QX8EzXldiszufYa4IFfKdLUKTTrnSFXLDkUEOTrZQ8Qg==" data-cf-beacon='{"version":"2024.11.0","token":"1a260f871e264b7d808bfbfddc3c619b","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 7330
7330
7331<script defer src="https://static.cloudflareinsights.com/beacon.min.js/v8c78df7c7c0f484497ecbca7046644da1771523124516" integrity="sha512-8DS7rgIrAmghBFwoOTujcf6D9rXvH8xm8JQ1Ja01h9QX8EzXldiszufYa4IFfKdLUKTTrnSFXLDkUEOTrZQ8Qg==" data-cf-beacon='{"version":"2024.11.0","token":"1a260f871e264b7d808bfbfddc3c619b","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 7331
7331
7332<script defer src="https://static.cloudflareinsights.com/beacon.min.js/v8c78df7c7c0f484497ecbca7046644da1771523124516" integrity="sha512-8DS7rgIrAmghBFwoOTujcf6D9rXvH8xm8JQ1Ja01h9QX8EzXldiszufYa4IFfKdLUKTTrnSFXLDkUEOTrZQ8Qg==" data-cf-beacon='{"version":"2024.11.0","token":"1a260f871e264b7d808bfbfddc3c619b","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 7332
7332
7333<script defer src="https://static.cloudflareinsights.com/beacon.min.js/v8c78df7c7c0f484497ecbca7046644da1771523124516" integrity="sha512-8DS7rgIrAmghBFwoOTujcf6D9rXvH8xm8JQ1Ja01h9QX8EzXldiszufYa4IFfKdLUKTTrnSFXLDkUEOTrZQ8Qg==" data-cf-beacon='{"version":"2024.11.0","token":"1a260f871e264b7d808bfbfddc3c619b","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 7333
7333
7334<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":"241daa48cc9e4e698656eb829b6023ac","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 7334
7334
7335<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":"ab1caf73dcc24051805c9250a712ec79","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 7335
7335
7336<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":"ab1caf73dcc24051805c9250a712ec79","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 7336
7336
7337<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":"ab1caf73dcc24051805c9250a712ec79","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 7337
7337
7338<script defer src="https://static.cloudflareinsights.com/beacon.min.js/v4513226cdae34746b4dedf0b4dfa099e1781791509496" integrity="sha512-ZE9pZaUXND66v380QUtch/5sE9tPFh2zg45pR2PB0CVkCtOREv2AJKkSidISWkysEuQ0EH8faUU5du78bx87UQ==" data-cf-beacon='{"version":"2024.11.0","token":"7f34a88a7b3f4212b22e3c454dfec7ae","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 7338
7338
7339<script defer src="https://static.cloudflareinsights.com/beacon.min.js/v4513226cdae34746b4dedf0b4dfa099e1781791509496" integrity="sha512-ZE9pZaUXND66v380QUtch/5sE9tPFh2zg45pR2PB0CVkCtOREv2AJKkSidISWkysEuQ0EH8faUU5du78bx87UQ==" data-cf-beacon='{"version":"2024.11.0","token":"80fe70ba93c24500a78a85be84082267","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 7339
7339
7340<script defer src="https://static.cloudflareinsights.com/beacon.min.js/v4513226cdae34746b4dedf0b4dfa099e1781791509496" integrity="sha512-ZE9pZaUXND66v380QUtch/5sE9tPFh2zg45pR2PB0CVkCtOREv2AJKkSidISWkysEuQ0EH8faUU5du78bx87UQ==" data-cf-beacon='{"version":"2024.11.0","token":"80fe70ba93c24500a78a85be84082267","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 7340
7340
7341<script type="module" src="https://static.cloudflareinsights.com/beacon.min.js/v4513226cdae34746b4dedf0b4dfa099e1781791509496" integrity="sha512-ZE9pZaUXND66v380QUtch/5sE9tPFh2zg45pR2PB0CVkCtOREv2AJKkSidISWkysEuQ0EH8faUU5du78bx87UQ==" data-cf-beacon='{"version":"2024.11.0","token":"0be3f43d88cf4faaae36ae57bda47803","r":1}' crossorigin="anonymous"></script>
vendor: 2 bytes, line 7341
7341
7342<script type="module" src="https://static.cloudflareinsights.com/beacon.min.js/v4513226cdae34746b4dedf0b4dfa099e1781791509496" integrity="sha512-ZE9pZaUXND66v380QUtch/5sE9tPFh2zg45pR2PB0CVkCtOREv2AJKkSidISWkysEuQ0EH8faUU5du78bx87UQ==" data-cf-beacon='{"version":"2024.11.0","token":"bf34d461e8e643b0a0c272144f84ed31","r":1}' crossorigin="anonymous"></script>
vendor: 2 bytes, line 7342
7342
7343<script type="module" src="https://static.cloudflareinsights.com/beacon.min.js/v31edd6df95cf4e85bb4c19e7a9bdbcba1788362987495" integrity="sha512-iIg7k2xntmwu6/uSb5tpc/hySgZc4eoL31yB29W6tJFo2akwjPWcEqnCEdJvGexCL0KEQwVYv5BlowfhVz26hg==" data-cf-beacon='{"version":"2024.11.0","token":"8971552aad264a6594e13e6903c414e0","r":1,"spa":2}' crossorigin="anonymous"></script>
vendor: 2 bytes, line 7343
7343
7344<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":"15d5674ff9804a069037ce08dd85bdfa","r":1,"spa":2}' crossorigin="anonymous"></script>
7344 7345</body> 7346 7347</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.