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