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