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