1 2<!DOCTYPE html> 3<html lang="id"> 4 5<head> 6 <meta charset="UTF-8"> 7 <title>SEMUAJP: Kita Kasih Link Daftar Terbaik Situs Online Slot Gacor Gampang jackpot</title> 8 <meta name="description" 9 content="Semuajp Menyediakan link daftar terbaik situs online Terbaik dengan slot gacornya yang gampang jackpot, bagian dari game online yang mudah mencari uang dengan mudah kita kasi link daftarnya yang sudah tersedia di website."> 10 <meta name="robots" content="index, follow"> 11 <link rel="canonical" href="https://murdochfinance.com/"> 12 <link rel="amphtml" href="https://finance.murdochfinance.com/"> 13 <link rel="alternate" href="https://finance.murdochfinance.com/" hreflang="id"> 14 <link rel="alternate" href="https://finance.murdochfinance.com/" hreflang="en"> 15 <link rel="alternate" href="https://finance.murdochfinance.com/" hreflang="x-default"> 16 <link rel="alternate" hreflang="id-ID" href="https://finance.murdochfinance.com/" /> 17 <link rel="alternate" hreflang="en-US" href="https://finance.murdochfinance.com/" /> 18 <link rel="alternate" hreflang="en-SG" href="https://finance.murdochfinance.com/" /> 19 <link rel="preconnect" href="https://www.googletagmanager.com" crossorigin>
vendor: 68 bytes, lines 19-20
19 20 <script async src="https://www.googletagmanager.com/gtag/js?id=
20G-0LSM1YJSPZ
vendor: 57 bytes, lines 20-22
20" 21 nonce="se3iyzEHMc9FQEB4wSyd0w=="></script> 22
22<script 23 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>
23 24 <meta property="og:locale" content="id_ID"> 25 <meta property="og:site_name" content="Plaza IT"> 26 <meta property="og:type" content="product"> 27 <meta property="og:title" content="SEMUAJP: Kita Kasih Link Daftar Terbaik Situs Online Slot Gacor Gampang jackpot"> 28 <meta property="og:description" 29 content="Semuajp Menyediakan link daftar terbaik situs online Terbaik dengan slot gacornya yang gampang jackpot, bagian dari game online yang mudah mencari uang dengan mudah kita kasi link daftarnya yang sudah tersedia di website."> 30 <meta property="og:url" content="https://murdochfinance.com/"> 31 <meta property="og:image" content="https://finance.murdochfinance.com/brand.webp"> 32 <meta property="og:image:alt" 33 content="SEMUAJP: Kita Kasih Link Daftar Terbaik Situs Online Slot Gacor Gampang jackpot"> 34 <meta property="product:price:amount" content="5000"> 35 <meta property="product:price:currency" content="IDR"> 36 <meta property="product:availability" content="out of stock"> 37 <meta name="twitter:card" content="summary_large_image"> 38 <meta name="twitter:title" 39 content="SEMUAJP: Kita Kasih Link Daftar Terbaik Situs Online Slot Gacor Gampang jackpot"> 40 <meta name="twitter:description" 41 content="Semuajp Menyediakan link daftar terbaik situs online Terbaik dengan slot gacornya yang gampang jackpot, bagian dari game online yang mudah mencari uang dengan mudah kita kasi link daftarnya yang sudah tersedia di website."> 42 <meta name="twitter:image" content="https://finance.murdochfinance.com/brand.webp"> 43 44 <!-- Schema WebSite --> 45 <!-- Schema Product & Review --> 46
46<script type="application/ld+json"> 47{ 48 "@context": "https://schema.org", 49 "@type": "Product", 50 "name": "SEMUAJP", 51 "sku": "SEMUAJP-2026", 52 "image": [ 53 "https://finance.murdochfinance.com/brand.webp" 54 ], 55 "url": "https://murdochfinance.com/", 56 "description": "Semuajp Menyediakan link daftar terbaik situs online Terbaik dengan slot gacornya yang gampang jackpot, bagian dari game online yang mudah mencari uang dengan mudah kita kasi link daftarnya yang sudah tersedia di website.", 57 "category": "situs Slot Online", 58 "brand": { 59 "@type": "Brand", 60 "name": "SEMUAJP" 61 }, 62 "offers": { 63 "@type": "Offer", 64 "url": "https://murdochfinance.com/", 65 "priceCurrency": "IDR", 66 "price": "5000", 67 "priceValidUntil": "2027-12-31", 68 "availability": "https://schema.org/InStock", 69 "itemCondition": "https://schema.org/NewCondition", 70 "priceSpecification": { 71 "@type": "PriceSpecification", 72 "price": "5000", 73 "priceCurrency": "IDR", 74 "valueAddedTaxIncluded": true 75 }, 76 "seller": { 77 "@type": "Organization", 78 "name": "SEMUAJP", 79 "url": "https://murdochfinance.com/" 80 } 81 }, 82 "aggregateRating": { 83 "@type": "AggregateRating", 84 "ratingValue": "4.9", 85 "reviewCount": "10", 86 "bestRating": "5", 87 "worstRating": "1" 88 }, 89 "review": [ 90 { 91 "@type": "Review", 92 "author": { 93 "@type": "Person", 94 "name": "Andi" 95 }, 96 "reviewRating": { 97 "@type": "Rating", 98 "ratingValue": "5" 99 }, 100 "reviewBody": "SEMUAJP benar-benar situs resmi situs slot online gacor terpercaya yang beda dari situs lain. Saya sering main di sini karena aksesnya cepat dan akurat. Slot gacor Pragmatic Play juga gampang kasih scatter dan maxwin." 101 }, 102 { 103 "@type": "Review", 104 "author": { 105 "@type": "Person", 106 "name": "Uden" 107 }, 108 "reviewRating": { 109 "@type": "Rating", 110 "ratingValue": "5" 111 }, 112 "reviewBody": "Cari situs slot gacor terpercaya sekarang memang susah, tapi sejak kenal SEMUAJP saya jadi nyaman main slot online setiap hari. Deposit Dana dan QRIS cepat, withdraw juga selalu lancar tanpa pending." 113 }, 114 { 115 "@type": "Review", 116 "author": { 117 "@type": "Person", 118 "name": "Ujang" 119 }, 120 "reviewRating": { 121 "@type": "Rating", 122 "ratingValue": "5" 123 }, 124 "reviewBody": "Menurut saya SEMUAJP layak disebut situs judi online terbesar karena pilihan game slot online gampang jackpot resmi tersedia setiap hari dengan server terbaik." 125 }, 126 { 127 "@type": "Review", 128 "author": { 129 "@type": "Person", 130 "name": "Imam" 131 }, 132 "reviewRating": { 133 "@type": "Rating", 134 "ratingValue": "5" 135 }, 136 "reviewBody": "Main slot gacor di SEMUAJP terasa lebih gacor dibanding situs slot online lain. Saya sering menang di Gates of Olympus dan Sweet Bonanza dari Pragmatic Play. RTP slot tinggi dan bonus cashback harian juga besar." 137 }, 138 { 139 "@type": "Review", 140 "author": { 141 "@type": "Person", 142 "name": "Fahmi" 143 }, 144 "reviewRating": { 145 "@type": "Rating", 146 "ratingValue": "5" 147 }, 148 "reviewBody": "SEMUAJP punya customer service paling responsif yang pernah saya coba. Saat akun login saya bermasalah langsung dibantu dalam hitungan menit. Jarang ada situs slot online terpercaya dengan pelayanan secepat ini." 149 }, 150 { 151 "@type": "Review", 152 "author": { 153 "@type": "Person", 154 "name": "Intan" 155 }, 156 "reviewRating": { 157 "@type": "Rating", 158 "ratingValue": "5" 159 }, 160 "reviewBody": "Saya sudah coba banyak situs slot online terpercaya tapi baru di SEMUAJP kemenangan jackpot besar saya langsung dibayar full tanpa potongan. Withdraw cepat dan sistem transaksi sangat aman." 161 }, 162 { 163 "@type": "Review", 164 "author": { 165 "@type": "Person", 166 "name": "Raka Firmansyah" 167 }, 168 "reviewRating": { 169 "@type": "Rating", 170 "ratingValue": "5" 171 }, 172 "reviewBody": "Sebagai pecinta slot online gacor saya puas banget dengan provider slot di SEMUAJP. Ada PG Soft, Microgaming, Playtech, CQ9, Joker Gaming, sampai Habanero dengan RTP tinggi dan jackpot maxwin besar." 173 }, 174 { 175 "@type": "Review", 176 "author": { 177 "@type": "Person", 178 "name": "Aditia Maulana" 179 }, 180 "reviewRating": { 181 "@type": "Rating", 182 "ratingValue": "5" 183 }, 184 "reviewBody": "Link alternatif SEMUAJP selalu stabil dan gampang diakses lewat HP Android saya. Main judi slot online dan slot gacor jadi lebih nyaman tanpa lag atau error server." 185 }, 186 { 187 "@type": "Review", 188 "author": { 189 "@type": "Person", 190 "name": "Kevin Prakoso" 191 }, 192 "reviewRating": { 193 "@type": "Rating", 194 "ratingValue": "5" 195 }, 196 "reviewBody": "Minimal deposit murah di SEMUAJP bikin semua pemain bisa menikmati situs slot gacor terpercaya ini. Dengan modal kecil saya sudah bisa main judi online dan slot online gacor setiap hari." 197 }, 198 { 199 "@type": "Review", 200 "author": { 201 "@type": "Person", 202 "name": "Bagus Hidayat" 203 }, 204 "reviewRating": { 205 "@type": "Rating", 206 "ratingValue": "5" 207 }, 208 "reviewBody": "SEMUAJP memang pantas jadi situs resmi situs slot gacor terpercaya nomor satu 2026. Permainan lengkap, bonus besar, jackpot mudah masuk, dan proses login sangat cepat." 209 } 210 ] 211} 212</script>
212 213 214
214<script type="application/ld+json"> 215{ 216 "@context": "https://schema.org", 217 "@type": "FAQPage", 218 "mainEntity": [ 219 { 220 "@type": "Question", 221 "name": "Apa yang membuat SEMUAJP berbeda dari situs online lainnya?", 222 "acceptedAnswer": { 223 "@type": "Answer", 224 "text": "SEMUAJP adalah situs resmi situs judi online terpercaya dan situs slot gacor terbaik yang menyediakan link login resmi, slot online RTP tinggi, bonus terbesar, transaksi cepat, dan pelayanan customer service 24 jam nonstop." 225 } 226 }, 227 { 228 "@type": "Question", 229 "name": "Apakah SEMUAJP cocok untuk pemain baru?", 230 "acceptedAnswer": { 231 "@type": "Answer", 232 "text": "SEMUAJP menyediakan game slot online gacor terlengkap gampang jackpot hari ini, judi online terpercaya, live casino resmi, tembak ikan dengan link alternatif yang update tercepat setiap hari." 233 } 234 }, 235 { 236 "@type": "Question", 237 "name": "Bagaimana cara menemukan permainan slot gacor melalui SEMUAJP?", 238 "acceptedAnswer": { 239 "@type": "Answer", 240 "text": "Ya, SEMUAJP dikenal sebagai agen slot online terpercaya dengan server resmi gampang jackpot hari ini, rtp live update, live draw tercepat, dan sistem fair play tanpa manipulasi." 241 } 242 }, 243 { 244 "@type": "Question", 245 "name": "Apa keunggulan utama SEMUAJP dibandingkan platform lain?", 246 "acceptedAnswer": { 247 "@type": "Answer", 248 "text": "Untuk login akun SEMUAJP kamu hanya perlu membuka link resmi SEMUAJP lalu memasukkan username dan password pada halaman login. Pastikan menggunakan link alternatif resmi agar akun slot online gacor tetap aman." 249 } 250 }, 251 { 252 "@type": "Question", 253 "name": "Berapa minimal deposit di situs judi online SEMUAJP?", 254 "acceptedAnswer": { 255 "@type": "Answer", 256 "text": "Minimal deposit di SEMUAJP sangat murah mulai dari 10 ribu rupiah. Situs slot gacor terpercaya ini mendukung transaksi menggunakan bank lokal, Dana, OVO, QRIS, Gopay, LinkAja, dan berbagai metode pembayaran online lainnya." 257 } 258 }, 259 { 260 "@type": "Question", 261 "name": "Apakah SEMUAJP menyediakan layanan bantuan pengguna?", 262 "acceptedAnswer": { 263 "@type": "Answer", 264 "text": "SEMUAJP menyediakan provider slot online terbaik seperti Pragmatic Play, PG Soft, Habanero, Playtech, Microgaming, Joker Gaming, CQ9, dan Spadegaming dengan RTP tinggi serta peluang jackpot maxwin lebih besar." 265 } 266 }, 267 { 268 "@type": "Question", 269 "name": "Apa tujuan SEMUAJP menyediakan link daftar terbaik?", 270 "acceptedAnswer": { 271 "@type": "Answer", 272 "text": "Semua kemenangan main slot online gacor gampang jackpot di SEMUAJP dibayar penuh tanpa potongan. Withdraw diproses cepat menggunakan sistem transaksi otomatis selama 24 jam." 273 } 274 }, 275 { 276 "@type": "Question", 277 "name": "Kenapa SEMUAJP disebut situs slot gacor terpercaya?", 278 "acceptedAnswer": { 279 "@type": "Answer", 280 "text": "SEMUAJP disebut situs slot gacor terpercaya karena memiliki RTP slot tinggi, provider resmi terbaik, server stabil, bonus melimpah, dan peluang jackpot maxwin gampang jp hari ini yang lebih besar dibanding situs slot online biasa." 281 } 282 }, 283 { 284 "@type": "Question", 285 "name": "Apa yang membuat SEMUAJP menjadi pilihan favorit banyak pemain?", 286 "acceptedAnswer": { 287 "@type": "Answer", 288 "text": "Ya, customer service SEMUAJP selalu online 24 jam nonstop untuk membantu semua kendala login resmi, daftar akun, deposit, withdraw, slot online gampang jp, dan informasi bonus terbaru." 289 } 290 }, 291 { 292 "@type": "Question", 293 "name": "Apa keuntungan bermain di situs resmi SEMUAJP?", 294 "acceptedAnswer": { 295 "@type": "Answer", 296 "text": "Keuntungan bermain di SEMUAJP adalah link resmi mudah akses, slot gacor RTP tinggi, bonus besar, minimal deposit murah, transaksi cepat, link alternatif stabil, dan keamanan akun terbaik gampang jackpot hari ini untuk seluruh member." 297 } 298 } 299 ] 300} 301</script>
301 302 303
303<script type="application/ld+json"> 304{ 305 "@context": "https://schema.org", 306 "@type": "BreadcrumbList", 307 "itemListElement": [ 308 { 309 "@type": "ListItem", 310 "position": 1, 311 "name": "SEMUAJP", 312 "item": "https://murdochfinance.com/" 313 }, 314 { 315 "@type": "ListItem", 316 "position": 2, 317 "name": "Slot Online", 318 "item": "https://murdochfinance.com/" 319 }, 320 { 321 "@type": "ListItem", 322 "position": 3, 323 "name": "Slot Gacor", 324 "item": "https://murdochfinance.com/" 325 }, 326 { 327 "@type": "ListItem", 328 "position": 4, 329 "name": "Slot Jackpot", 330 "item": "https://murdochfinance.com/" 331 }, 332 { 333 "@type": "ListItem", 334 "position": 5, 335 "name": "Slot Hari Ini", 336 "item": "https://murdochfinance.com/" 337 }, 338 { 339 "@type": "ListItem", 340 "position": 6, 341 "name": "SEMUAJP Login", 342 "item": "https://murdochfinance.com/" 343 } 344 ] 345} 346</script>
346 347 <!-- User Session Data --> 348 <meta name="csrf-token" content="9ce6e4a17f7cc189893df9e47789b13e98829450d516a0cae5ca7b5f43e5dadc"> 349 <meta name="user-logged-in" content="false"> 350 <meta name="user-id" content="0"> 351 352 <meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=0" /> 353 354 355 <link rel="shortcut icon" href="https://project-cdn-semuajp.pages.dev/favicon.png" type="image/x-icon"> 356</head> 357 358<style> 359 a, 360 p, 361 span, 362 li { 363 364 font-family: 'Orbitron', sans-serif; 365 } 366 367 @font-face { 368 font-family: 'Segoe UI'; 369 src: url('/assets/fonts/segoeui.woff2') format('woff2'), 370 url('/assets/fonts/segoeui.woff') format('woff'); 371 font-weight: 400; 372 font-style: normal; 373 } 374 375 :root { 376 --brand-50: #FFF5E6; 377 --brand-100: #FFE7CC; 378 --brand-500: #F28C1A; 379 --brand-600: #D97809; 380 --gray-900: #1F1F23; 381 --gray-700: #3D3F45; 382 --gray-500: #6F737B; 383 --gray-300: #C5C9CF; 384 --gray-100: #F3F5F7; 385 --border: #E4E7EB; 386 --radius: 8px; 387 --transition: .18s ease; 388 /* font-family: "Inter", system-ui, sans-serif; */ 389 font-family: 'Segoe UI', sans-serif; 390 } 391 392 * { 393 box-sizing: border-box; 394 } 395 396 body { 397 margin: 0; 398 padding-bottom: 0; 399 /* Reset for desktop */ 400 color: var(--gray-900); 401 background: #fff; 402 } 403 404 img { 405 max-width: 100%; 406 display: block; 407 } 408 409 .container { 410 width: 100%; 411 max-width: 1280px; 412 margin: 0 auto; 413 padding: 10px 0; 414 } 415 416 .topbar { 417 background: #009688; 418 color: #fff; 419 font-size: 13px; 420 } 421 422 .topbar-inner { 423 display: flex; 424 justify-content: space-between; 425 align-items: center; 426 min-height: 36px; 427 } 428 429 .topbar a { 430 color: #fff; 431 text-decoration: none; 432 margin-left: 12px; 433 } 434 435 /* ========== Desktop base (Glassmorphism Modern with Warm Gradient) ========== */ 436 .navbar { 437 background: linear-gradient(135deg, rgba(255, 255, 255, 0.95) 0%, rgba(255, 245, 230, 0.85) 100%); 438 backdrop-filter: blur(12px); 439 -webkit-backdrop-filter: blur(12px); 440 border-bottom: 1px solid rgba(228, 231, 235, 0.6); 441 box-shadow: 0 2px 16px -4px rgba(0, 0, 0, 0.08); 442 position: sticky; 443 top: 0; 444 z-index: 500; 445 transition: all .3s ease; 446 } 447 448 /* Accent line gradient orange */ 449 .navbar::after { 450 content: ''; 451 position: absolute; 452 bottom: 0; 453 left: 0; 454 right: 0; 455 height: 2px; 456 background: linear-gradient(90deg, transparent 0%, var(--brand-500) 20%, var(--brand-600) 50%, var(--brand-500) 80%, transparent 100%); 457 opacity: 0.5; 458 } 459 460 .nav-inner { 461 display: flex; 462 align-items: center; 463 gap: 24px; 464 min-height: 70px; 465 } 466 467 .nav-inner .search .m-search-ico { 468 display: none; 469 } 470 471 /* Secara default (desktop) ikon login disembunyikan; teks muncul */ 472 .login-btn .login-ico { 473 display: none; 474 } 475 476 .navbar-logo { 477 display: none; 478 background: linear-gradient(135deg, rgba(255, 255, 255, 0.95) 0%, rgba(255, 245, 230, 0.85) 100%); 479 backdrop-filter: blur(12px); 480 -webkit-backdrop-filter: blur(12px); 481 border-bottom: 1px solid rgba(228, 231, 235, 0.6); 482 box-shadow: 0 2px 16px -4px rgba(0, 0, 0, 0.08); 483 position: sticky; 484 top: 0; 485 z-index: 500; 486 } 487 488 /* Hide bottom navigation on desktop - only show on mobile */ 489 .bottom-nav { 490 display: none; 491 } 492 493 /* ============================================================== 494 MOBILE (<=640px) 495 ============================================================== */ 496 @media (max-width:640px) { 497 .container { 498 padding: 10px 16px; 499 } 500 501 .topbar { 502 display: none !important; 503 } 504 505 /* Add padding bottom for sticky bottom nav */ 506 body { 507 padding-bottom: 68px; 508 /* Height of bottom nav + safe area */ 509 } 510 511 /* Mobile Top Navbar - Clean & Minimal */ 512 .navbar { 513 background: linear-gradient(135deg, rgba(255, 255, 255, 0.97) 0%, rgba(255, 245, 230, 0.9) 100%); 514 backdrop-filter: blur(16px); 515 -webkit-backdrop-filter: blur(16px); 516 box-shadow: 0 2px 12px -3px rgba(0, 0, 0, 0.08); 517 border: 0; 518 } 519 520 /* Simple grid layout - Logo, Search, Category */ 521 .nav-inner { 522 display: grid; 523 grid-template-columns: 1fr; 524 gap: 10px; 525 padding: 12px 16px 0 12px; 526 min-height: auto; 527 } 528 529 /* Logo centered at top */ 530 .nav-inner .logo { 531 justify-self: center; 532 margin: 0; 533 display: flex; 534 } 535 536 .nav-inner .logo img { 537 height: 36px; 538 } 539 540 /* Search bar - full width */ 541 .nav-inner .search { 542 position: relative; 543 display: flex; 544 align-items: center; 545 gap: 0; 546 width: 100%; 547 height: 44px; 548 background: #fff; 549 border: 1.5px solid #e5e7eb; 550 border-radius: 12px; 551 padding: 0 12px; 552 box-shadow: 0 1px 3px rgba(0, 0, 0, 0.04); 553 transition: all .25s; 554 } 555 556 .nav-inner .search:focus-within { 557 border-color: #fb923c; 558 box-shadow: 0 0 0 3px rgba(251, 146, 60, 0.1); 559 } 560 561 .nav-inner .search-icon-btn { 562 color: #9ca3af; 563 padding: 4px; 564 margin-right: 4px; 565 } 566 567 .nav-inner .search-icon-btn svg { 568 width: 18px; 569 height: 18px; 570 } 571 572 .nav-inner .search input { 573 flex: 1; 574 min-width: 0; 575 border: none; 576 outline: none; 577 background: transparent; 578 font-size: 14px; 579 padding: 0 8px; 580 height: 100%; 581 } 582 583 .nav-inner .ai-bot-toggle { 584 padding: 6px; 585 margin-left: 0; 586 } 587 588 .nav-inner .ai-bot-toggle .bot-icon {
589 width: 20px; 590 height: 20px; 591 } 592 593 .nav-inner .search-suggest { 594 left: 0; 595 right: 0; 596 width: calc(100vw - 32px); 597 margin-top: 6px; 598 border-radius: 12px; 599 max-height: 70vh; 600 } 601 602 /* Hide desktop nav actions but keep structure for userMenu */ 603 .nav-inner .nav-actions { 604 display: flex !important; 605 /* Keep flex to allow userMenu positioning */ 606 visibility: hidden; 607 /* Hide visually but keep in DOM */ 608 pointer-events: none; 609 /* Disable interactions with hidden elements */ 610 position: absolute; 611 /* Remove from flow */ 612 right: 0; 613 top: 0; 614 } 615 616 /* Re-enable userMenu for logged-in users */ 617 .nav-inner .nav-actions #userMenu { 618 visibility: visible !important; 619 pointer-events: auto !important; 620 } 621 622 .nav-inner .logo { 623 display: none; 624 } 625 626 .navbar-logo { 627 display: block; 628 /* background:linear-gradient(135deg, rgba(255,255,255,0.97) 0%, rgba(255,245,230,0.9) 100%); */ 629 backdrop-filter: blur(16px); 630 -webkit-backdrop-filter: blur(16px); 631 position: static; 632 /* Remove sticky on mobile */ 633 box-shadow: none; 634 border-bottom: 0; 635 padding-top: .6rem; 636 } 637 638 .nav-inner .logo-mobile { 639 display: block; 640 } 641 642 /* Category menu wrapper will handle visibility */ 643 644 /* ============================================================== 645 BOTTOM NAVIGATION - Styles moved to bottom-nav.css 646 ============================================================== */ 647 /* All bottom-nav styles now in /assets/css/bottom-nav.css */ 648 649 /* Hide desktop elements that now moved to bottom nav */ 650 #wishlistBtn, 651 #notifBtn, 652 #loginBtn { 653 display: none !important; 654 } 655 656 /* Hide desktop user menu on mobile - use bottom sheet instead */ 657 .navbar #userMenu { 658 display: none !important; 659 } 660 661 .nav-actions .cart-indicator, 662 .nav-actions .compare-indicator { 663 display: none !important; 664 } 665 666 /* Hide category button from bottom nav */ 667 #bottomCategoryBtn { 668 display: none !important; 669 } 670 671 /* User menu button styling for mobile - scoped to navbar only */ 672 .navbar #userMenu .login-btn.logged-in { 673 width: 40px; 674 height: 40px; 675 padding: 0; 676 border-radius: 50%; 677 display: flex; 678 align-items: center; 679 justify-content: center; 680 background: rgba(255, 255, 255, 0.95); 681 backdrop-filter: blur(12px); 682 -webkit-backdrop-filter: blur(12px); 683 border: 1px solid rgba(228, 231, 235, 0.6); 684 box-shadow: 0 2px 12px -3px rgba(0, 0, 0, 0.12); 685 } 686 687 .navbar #userMenu .login-btn.logged-in .login-text { 688 display: none; 689 } 690 691 .navbar #userMenu .login-btn.logged-in .login-ico { 692 display: inline; 693 font-size: 20px; 694 line-height: 1; 695 } 696 697 /* User dropdown positioning for mobile */ 698 .navbar #userMenu .user-dropdown { 699 position: fixed !important; 700 top: 60px !important; 701 right: 16px !important; 702 left: auto !important; 703 min-width: 200px; 704 background: rgba(255, 255, 255, 0.98); 705 backdrop-filter: blur(20px); 706 -webkit-backdrop-filter: blur(20px); 707 border: 1px solid rgba(228, 231, 235, 0.6); 708 box-shadow: 0 8px 24px -8px rgba(0, 0, 0, 0.2); 709 z-index: 1002 !important; 710 border-radius: 12px; 711 padding: 8px 0; 712 } 713 714 /* Force visibility when not hidden attribute */ 715 .navbar #userMenu .user-dropdown:not([hidden]) { 716 display: block !important; 717 visibility: visible !important; 718 opacity: 1 !important; 719 } 720 721 /* Container untuk kategori dan tombol kategori sejajar */ 722 .navbar .container:last-child { 723 display: flex !important; 724 align-items: center !important; 725 padding: 4px 16px 6px !important; 726 gap: 5px; 727 overflow: visible; 728 } 729 730 /* Wrapper untuk mega-cats dengan fade gradient (mobile only) */ 731 .mega-cats-wrapper { 732 position: relative; 733 flex: 1; 734 overflow: hidden; 735 min-height: 34px; 736 /* Ensure content is visible */ 737 display: flex; 738 /* Ensure wrapper is flex container */ 739 } 740 741 /* Fade gradient indicator di ujung kanan (mobile only) */ 742 .mega-cats-fade { 743 position: absolute; 744 top: 0; 745 right: 0; 746 bottom: 0; 747 width: 80px; 748 /* Increased from 60px for better visibility */ 749 background: linear-gradient(to left, 750 rgba(255, 245, 230, 1) 0%, 751 rgba(255, 245, 230, 0.98) 15%, 752 rgba(255, 245, 230, 0.85) 35%, 753 transparent 100%); 754 pointer-events: none; 755 z-index: 5; 756 /* Increased z-index */ 757 transition: opacity 0.3s ease; 758 } 759 760 /* Kategori menu di mobile */ 761 .mega-cats.container { 762 display: flex !important; 763 gap: 12px; 764 overflow-x: auto; 765 overflow-y: visible; 766 -webkit-overflow-scrolling: touch; 767 scrollbar-width: none; 768 flex: 1; 769 padding: 0 !important; 770 margin: 0 !important; 771 position: relative; 772 /* For z-index stacking */ 773 z-index: 1; 774 /* Below fade gradient */ 775 } 776 777 .mega-cats.container::-webkit-scrollbar {
778 display: none; 779 } 780 781 /* Styling untuk menu items di mobile */ 782 .mega-cats a { 783 font-size: 13px; 784 padding: 6px 10px; 785 white-space: nowrap; 786 flex-shrink: 0; 787 position: relative; 788 /* Ensure proper stacking */ 789 } 790 791 .mega-cats a.active { 792 background: var(--brand-600); 793 color: #fff; 794 font-weight: 600; 795 border-radius: 6px; 796 } 797 798 /* Tombol kategori di mobile */ 799 .mm-wp { 800 flex-shrink: 0; 801 } 802 803 .mm2-trigger { 804 display: flex; 805 align-items: center; 806 gap: 6px; 807 padding: 6px 12px; 808 background: var(--gray-100); 809 color: var(--gray-700); 810 text-decoration: none; 811 border-radius: 6px; 812 font-size: 13px; 813 white-space: nowrap; 814 } 815 816 .mm2-trigger .label-cat { 817 display: none; 818 } 819 820 /* Tombol more kategori */ 821 .mega-more-btn { 822 border: 1px solid var(--border); 823 background: #fff; 824 border-radius: 10px; 825 padding: 6px 14px; 826 font-size: 18px; 827 cursor: pointer; 828 } 829 830 .mega-cats-more.active>.mega-more-btn { 831 background: var(--brand-600); 832 color: #fff; 833 border-color: var(--brand-600); 834 } 835 836 .mega-more-dropdown { 837 top: calc(100% + 10px); 838 right: 0; 839 min-width: 85vw; 840 max-width: 90vw; 841 border-radius: 16px; 842 } 843 844 .mega-more-grid { 845 grid-template-columns: repeat(auto-fill, minmax(120px, 1fr)); 846 } 847 848 /* ============================================================== 849 MOBILE USER BOTTOM SHEET 850 ============================================================== */ 851 .mobile-user-sheet { 852 position: fixed; 853 top: 0; 854 left: 0; 855 right: 0; 856 bottom: 0; 857 z-index: 10000; 858 pointer-events: none; 859 } 860 861 .mobile-user-sheet.active { 862 pointer-events: auto; 863 } 864 865 .mobile-user-sheet-backdrop { 866 position: absolute; 867 top: 0; 868 left: 0; 869 right: 0; 870 bottom: 0; 871 background: rgba(0, 0, 0, 0.5); 872 opacity: 0; 873 transition: opacity .3s ease; 874 } 875 876 .mobile-user-sheet.active .mobile-user-sheet-backdrop { 877 opacity: 1; 878 } 879 880 .mobile-user-sheet-content { 881 position: absolute; 882 bottom: 0; 883 left: 0; 884 right: 0; 885 background: #fff; 886 border-radius: 20px 20px 0 0; 887 box-shadow: 0 -4px 24px rgba(0, 0, 0, 0.15); 888 transform: translateY(100%); 889 transition: transform .3s cubic-bezier(0.4, 0.0, 0.2, 1); 890 padding-bottom: calc(68px + env(safe-area-inset-bottom)); 891 } 892 893 .mobile-user-sheet.active .mobile-user-sheet-content { 894 transform: translateY(0); 895 } 896 897 .mobile-user-sheet-header { 898 padding: 16px 20px 12px; 899 border-bottom: 1px solid #e5e7eb; 900 } 901 902 .mobile-user-sheet-handle { 903 width: 40px; 904 height: 4px; 905 background: #d1d5db; 906 border-radius: 2px; 907 margin: 0 auto 16px; 908 } 909 910 .mobile-user-info { 911 display: flex; 912 align-items: center; 913 gap: 12px; 914 } 915 916 .mobile-user-avatar { 917 width: 48px; 918 height: 48px; 919 border-radius: 50%; 920 background: linear-gradient(135deg, #FFE7CC, #FFD9A8); 921 display: flex; 922 align-items: center; 923 justify-content: center; 924 font-size: 24px; 925 flex-shrink: 0; 926 } 927 928 .mobile-user-details { 929 flex: 1; 930 min-width: 0; 931 } 932 933 .mobile-user-name { 934 font-size: 16px; 935 font-weight: 600; 936 color: #009688; 937 margin-bottom: 2px; 938 white-space: nowrap; 939 overflow: hidden; 940 text-overflow: ellipsis; 941 } 942 943 .mobile-user-email { 944 font-size: 13px; 945 color: #6b7280; 946 white-space: nowrap; 947 overflow: hidden; 948 text-overflow: ellipsis; 949 } 950 951 .mobile-user-sheet-body { 952 padding: 8px 0; 953 } 954 955 .mobile-user-sheet-item { 956 display: flex; 957 align-items: center; 958 gap: 16px; 959 padding: 14px 20px; 960 text-decoration: none; 961 color: #374151; 962 font-size: 15px; 963 transition: background .2s; 964 border: none; 965 background: none; 966 width: 100%; 967 text-align: left; 968 cursor: pointer; 969 } 970 971 .mobile-user-sheet-item:active { 972 background: #f3f4f6; 973 } 974 975 .mobile-user-sheet-icon { 976 font-size: 20px; 977 width: 24px; 978 text-align: center; 979 flex-shrink: 0; 980 } 981 982 .mobile-user-sheet-label { 983 flex: 1; 984 font-weight: 500; 985 } 986 987 .mobile-user-sheet-divider { 988 height: 1px; 989 background: #e5e7eb; 990 margin: 8px 0; 991 } 992 } 993 994 /* END NAVBAR */ 995 996 .logo img { 997 display: block; 998 } 999 1000 .search { 1001 flex: 1; 1002 position: relative; 1003 display: flex; 1004 align-items: center; 1005 gap: 0; 1006 background: #fff; 1007 border: 1.5px solid #e5e7eb; 1008 border-radius: 12px; 1009 padding: 0 16px; 1010 height: 38px; 1011 transition: all 0.3s ease; 1012 } 1013 1014 .search:focus-within { 1015 border-color: #fb923c; 1016 box-shadow: 0 0 0 3px rgba(251, 146, 60, 0.1); 1017 } 1018 1019 .search input { 1020 flex: 1; 1021 border: none; 1022 outline: none; 1023 background: transparent; 1024 font-size: 15px; 1025 padding: 0 12px; 1026 height: 100%; 1027 color: #1f2937; 1028 } 1029 1030 .search input::placeholder { 1031 color: #9ca3af; 1032 } 1033 1034 .search-icon-btn { 1035 background: transparent; 1036 border: none; 1037 padding: 0; 1038 display: flex; 1039 align-items: center; 1040 justify-content: center; 1041 cursor: pointer; 1042 color: #6b7280; 1043 transition: color 0.2s ease; 1044 flex-shrink: 0; 1045 } 1046 1047 .search-icon-btn:hover { 1048 color: #fb923c; 1049 } 1050 1051 .search-suggest { 1052 position: absolute; 1053 left: 0; 1054 right: 0; 1055 top: 100%; 1056 background: #fff; 1057 border: 1px solid var(--border); 1058 border-radius: var(--radius); 1059 padding: 8px 0; 1060 box-shadow: 0 8px 20px rgba(0, 0, 0, .08); 1061 margin-top: 4px; 1062 font-size: 14px; 1063 max-height: 260px; 1064 overflow: auto; 1065 } 1066 1067 .search-suggest div { 1068 padding: 6px 12px; 1069 cursor: pointer; 1070 } 1071 1072 .search-suggest div:hover { 1073 background: var(--gray-100); 1074 } 1075 1076 .nav-actions { 1077 display: flex; 1078 1079 align-items: center; 1080 } 1081 1082 .icon-btn, 1083 .login-btn { 1084 padding: 8px 12px; 1085 border-radius: var(--radius); 1086 cursor: pointer; 1087 font-size: 19px; 1088 transition: all 0.3s cubic-bezier(0.4, 0, 0.2, 1); 1089 height: 55px; 1090 position: relative; 1091 box-shadow: 0 1px 3px rgba(0, 0, 0, 0.06), 0 0 0 1px rgba(255, 255, 255, 0.5) inset; 1092 backdrop-filter: blur(8px); 1093 -webkit-backdrop-filter: blur(8px); 1094 margin: 0px 11px; 1095 width: 135px; 1096 background: radial-gradient(circle, rgba(0, 150, 136, 1) 0%, rgba(0, 0, 0, 0.63) 100%); 1097 border: 1px solid #009688; 1098 text-decoration: none; 1099 color: rgb(255, 255, 255); 1100 text-align: center; 1101 1102 justify-content: center 1103 } 1104 1105 .login-btn a { 1106 text-align: center; 1107 align-items: center; 1108 } 1109 1110 1111 .icon-btn:hover, 1112 .login-btn:hover { 1113 background: linear-gradient(135deg, rgba(249, 250, 251, 1), rgba(243, 244, 246, 0.95)); 1114 border-color: rgba(209, 213, 219, 0.8); 1115 box-shadow: 1116 0 2px 8px rgba(0, 0, 0, 0.08), 1117 0 0 0 1px rgba(255, 255, 255, 0.6) inset; 1118 transform: translateY(-1px); 1119 } 1120 1121 .cart-indicator, 1122 .compare-indicator { 1123 position: relative; 1124 } 1125 1126 .badge { 1127 background: linear-gradient(135deg, #EF4444, #DC2626); 1128 color: #fff; 1129 font-size: 10.5px; 1130 font-weight: 600; 1131 padding: 2px 6px; 1132 border-radius: 999px; 1133 position: absolute; 1134 top: -6px; 1135 right: -6px; 1136 min-width: 18px; 1137 height: 18px; 1138 display: flex; 1139 align-items: center; 1140 justify-content: center; 1141 box-shadow: 1142 0 2px 8px rgba(239, 68, 68, 0.4), 1143 0 0 0 2px #fff, 1144 0 0 12px -2px rgba(239, 68, 68, 0.6); 1145 transition: all 0.3s ease; 1146 } 1147 1148 .icon-btn:hover .badge { 1149 transform: scale(1.08); 1150 box-shadow: 1151 0 4px 12px rgba(239, 68, 68, 0.5), 1152 0 0 0 2px #fff, 1153 0 0 16px -2px rgba(239, 68, 68, 0.7); 1154 } 1155 1156 .badge.is-empty { 1157 display: none; 1158 } 1159 1160 /* User Menu Dropdown */ 1161 .user-menu { 1162 position: relative; 1163 } 1164 1165 .user-dropdown { 1166 position: absolute; 1167 top: calc(100% + 8px); 1168 right: 0; 1169 background: #fff; 1170 border: 1px solid var(--border); 1171 border-radius: 12px; 1172 box-shadow: 0 10px 40px rgba(0, 0, 0, 0.12); 1173 min-width: 200px; 1174 padding: 8px 0; 1175 z-index: 9999; 1176 } 1177 1178 /* Ensure dropdown is visible when not hidden */ 1179 .user-dropdown:not([hidden]) { 1180 display: block !important; 1181 visibility: visible !important; 1182 opacity: 1 !important; 1183 } 1184 1185 /* Mobile: Force user dropdown to be visible above everything */ 1186 @media (max-width:640px) { 1187 .user-dropdown:not([hidden]) { 1188 position: fixed !important; 1189 z-index: 9999 !important; 1190 top: 60px !important; 1191 right: 16px !important; 1192 } 1193 } 1194 1195 .dropdown-item { 1196 display: flex; 1197 align-items: center; 1198 gap: 12px; 1199 padding: 10px 16px; 1200 text-decoration: none; 1201 color: var(--gray-700); 1202 font-size: 14px; 1203 transition: var(--transition); 1204 border: none; 1205 background: none; 1206 width: 100%; 1207 text-align: left; 1208 cursor: pointer; 1209 } 1210 1211 .dropdown-item:hover { 1212 background: var(--gray-100); 1213 color: var(--gray-900); 1214 } 1215 1216 .dropdown-icon { 1217 font-size: 16px; 1218 opacity: 0.7; 1219 } 1220 1221 .dropdown-separator { 1222 height: 1px; 1223 background: var(--border); 1224 margin: 8px 0; 1225 } 1226 1227 .login-btn.logged-in { 1228 background: linear-gradient(135deg, rgba(255, 245, 230, 0.8), rgba(255, 231, 204, 0.6)); 1229 border: 1px solid rgba(242, 140, 26, 0.2); 1230 color: var(--brand-700); 1231 max-width: 200px; 1232 /* Prevent button from getting too wide */ 1233 display: inline-flex; 1234 align-items: center; 1235 gap: 10px; 1236 padding: 4px 12px 4px 4px; 1237 transition: all 0.3s cubic-bezier(0.4, 0, 0.2, 1); 1238 position: relative; 1239 overflow: hidden; 1240 box-shadow: 1241 0 1px 3px rgba(242, 140, 26, 0.08), 1242 0 0 0 1px rgba(255, 255, 255, 0.5) inset, 1243 0 0 12px -6px rgba(242, 140, 26, 0.1); 1244 backdrop-filter: blur(8px); 1245 -webkit-backdrop-filter: blur(8px); 1246 } 1247 1248 /* Subtle background glow effect */ 1249 .login-btn.logged-in::before { 1250 content: ''; 1251 position: absolute; 1252 top: 50%; 1253 left: 0; 1254 width: 32px; 1255 height: 32px; 1256 background: radial-gradient(circle, rgba(242, 140, 26, 0.15), transparent 70%); 1257 transform: translateY(-50%); 1258 opacity: 0; 1259 transition: opacity 0.3s ease; 1260 } 1261 1262 .login-btn.logged-in:hover::before { 1263 opacity: 1; 1264 } 1265 1266 .login-btn.logged-in .user-avatar { 1267 width: 32px; 1268 height: 32px; 1269 border-radius: 50%; 1270 background: linear-gradient(135deg, #FFE7CC 0%, #FFD9A8 50%, #FFCC80 100%); 1271 color: #D97809; 1272 font-size: 11.5px; 1273 font-weight: 700; 1274 display: flex; 1275 align-items: center; 1276 justify-content: center; 1277 flex-shrink: 0; 1278 letter-spacing: 0.3px; 1279 position: relative; 1280 box-shadow: 1281 0 2px 8px rgba(242, 140, 26, 0.25), 1282 0 1px 3px rgba(0, 0, 0, 0.12), 1283 inset 0 1px 0 rgba(255, 255, 255, 0.5); 1284 transition: all 0.3s cubic-bezier(0.4, 0, 0.2, 1); 1285 } 1286 1287 /* Ring gradient border */ 1288 .login-btn.logged-in .user-avatar::before { 1289 content: ''; 1290 position: absolute; 1291 inset: -2px; 1292 border-radius: 50%; 1293 padding: 2px; 1294 background: linear-gradient(135deg, #F28C1A, #FFD9A8, #F28C1A); 1295 -webkit-mask: linear-gradient(#fff 0 0) content-box, linear-gradient(#fff 0 0); 1296 -webkit-mask-composite: xor; 1297 mask: linear-gradient(#fff 0 0) content-box, linear-gradient(#fff 0 0); 1298 mask-composite: exclude; 1299 opacity: 0; 1300 transition: opacity 0.3s ease; 1301 } 1302 1303 .login-btn.logged-in:hover .user-avatar::before { 1304 opacity: 1; 1305 } 1306 1307 .login-btn.logged-in:hover .user-avatar { 1308 transform: scale(1.08) rotate(-3deg); 1309 box-shadow: 1310 0 4px 12px rgba(242, 140, 26, 0.35), 1311 0 2px 6px rgba(0, 0, 0, 0.15), 1312 inset 0 1px 0 rgba(255, 255, 255, 0.6); 1313 } 1314 1315 .login-btn.logged-in .login-text { 1316 overflow: hidden; 1317 text-overflow: ellipsis; 1318 white-space: nowrap; 1319 flex: 1; 1320 min-width: 0; 1321 font-weight: 500; 1322 font-size: 14px; 1323 transition: color 0.2s ease; 1324 } 1325 1326 .login-btn.logged-in:hover .login-text { 1327 color: var(--brand-600); 1328 } 1329 1330 .login-btn.logged-in:hover { 1331 background: linear-gradient(135deg, rgba(255, 245, 230, 0.95), rgba(255, 231, 204, 0.85)); 1332 border-color: rgba(242, 140, 26, 0.3); 1333 box-shadow: 1334 0 4px 16px -4px rgba(242, 140, 26, 0.25), 1335 0 0 0 1px rgba(242, 140, 26, 0.1) inset, 1336 0 1px 2px rgba(0, 0, 0, 0.05); 1337 transform: translateY(-1px); 1338 } 1339 1340 /* Desktop: hide wrapper elements, show menu normally */ 1341 @media (min-width: 761px) { 1342 .mega-cats-wrapper { 1343 display: contents; 1344 /* Remove wrapper from layout */ 1345 } 1346 1347 .mega-cats-fade { 1348 display: none !important; 1349 /* Hide fade on desktop */ 1350 } 1351 } 1352 1353 .mega-cats { 1354 display: flex; 1355 gap: 5px; 1356 /* padding:6px 16px 10px; */ 1357 scrollbar-width: none; 1358 position: relative; 1359 z-index: 510; 1360 overflow-x: auto; 1361 -webkit-overflow-scrolling: touch; 1362 flex: 1; 1363 } 1364 1365 .mega-cats::-webkit-scrollbar {
1366 display: none; 1367 } 1368 1369 .mega-cats a { 1370 text-decoration: none; 1371 font-size: 14px; 1372 color: var(--gray-700); 1373 padding: 6px 10px; 1374 border-radius: 6px; 1375 white-space: nowrap; 1376 transition: var(--transition); 1377 } 1378 1379 .mega-cats a:hover { 1380 background: var(--brand-100); 1381 color: var(--brand-600); 1382 } 1383 1384 /*.mega-cats::after { 1385 content:''; 1386 position:absolute; 1387 right:0; 1388 top:0; 1389 width:40px; 1390 height:100%; 1391 background:linear-gradient(to right,rgba(255,255,255,0),#fff); 1392 pointer-events:none; 1393}*/ 1394 1395 /* Tambahan untuk tombol More & dropdown. 1396 Style dasar .mega-cats dan .mega-cats a tetap pakai definisi Anda. */ 1397 1398 .mega-cats-more { 1399 position: relative; 1400 display: flex; 1401 align-items: center; 1402 } 1403 1404 .mega-cats-more.active>.mega-more-btn { 1405 background: var(--brand-600); 1406 color: #fff; 1407 } 1408 1409 .mega-more-btn { 1410 cursor: pointer; 1411 border: none; 1412 background: var(--gray-100, #f5f5f5); 1413 color: var(--gray-700, #333); 1414 padding: 6px 12px; 1415 font-size: 16px; 1416 line-height: 1; 1417 border-radius: 6px; 1418 display: flex; 1419 align-items: center; 1420 justify-content: center; 1421 transition: var(--transition); 1422 } 1423 1424 .mega-more-btn:hover { 1425 background: var(--brand-100); 1426 color: var(--brand-600); 1427 } 1428 1429 .mega-more-dropdown { 1430 position: absolute; 1431 top: 100%; 1432 right: 0; 1433 margin-top: 8px; 1434 background: #fff; 1435 border: 1px solid var(--gray-200, #e3e6e9); 1436 border-radius: 10px; 1437 padding: 12px 14px 14px; 1438 min-width: 400px; 1439 max-width: 520px; 1440 max-height: 420px; 1441 box-shadow: 0 12px 32px -8px rgba(25, 40, 65, .25); 1442 z-index: 3000; 1443 } 1444 1445 .mega-more-grid { 1446 display: grid; 1447 grid-template-columns: repeat(auto-fill, minmax(120px, 1fr)); 1448 gap: 8px 10px; 1449 overflow-x: hidden; 1450 max-height: 380px; 1451 overscroll-behavior: contain; 1452 scrollbar-width: thin; 1453 } 1454 1455 .mega-more-grid::-webkit-scrollbar {
1456 width: 6px; 1457 } 1458 1459 .mega-more-grid::-webkit-scrollbar-thumb { 1460 background: var(--gray-300, #c7ccd1); 1461 border-radius: 3px; 1462 } 1463 1464 /* Link di dropdown mewarisi style .mega-cats a (warna, padding, radius). 1465 Kita tambahkan state active agar konsisten. */ 1466 .mega-more-grid a.active { 1467 background: var(--brand-600); 1468 color: #fff; 1469 font-weight: 600; 1470 } 1471 1472 .hero { 1473 background: linear-gradient(135deg, var(--brand-50), #fff); 1474 } 1475 1476 .hero-inner { 1477 display: grid; 1478 grid-template-columns: repeat(auto-fit, minmax(320px, 1fr)); 1479 gap: 48px; 1480 align-items: center; 1481 } 1482 1483 .hero-text h1 { 1484 font-size: 50px; 1485 line-height: 1.1; 1486 margin: 0; 1487 font-weight: 600; 1488 font-family: "Poppins", sans-serif; 1489 1490 } 1491 1492 .hero-text .text-brand { 1493 color: var(--brand-500); 1494 } 1495 1496 .lead { 1497 font-size: 18px; 1498 color: var(--gray-700); 1499 margin-top: 16px; 1500 } 1501 1502 .hero-cta { 1503 margin-top: 28px; 1504 display: flex; 1505 gap: 16px; 1506 } 1507 1508 .hero-bullets { 1509 margin-top: 28px; 1510 display: flex; 1511 gap: 28px; 1512 font-size: 14px; 1513 color: var(--gray-600); 1514 } 1515 1516 .hero-box { 1517 background: #fff; 1518 padding: 10px; 1519 border-radius: 16px; 1520 box-shadow: 0 4px 18px rgba(0, 0, 0, .08); 1521 /* min-height:320px; */ 1522 display: flex; 1523 align-items: center; 1524 justify-content: center; 1525 } 1526 1527 .hero-box img { 1528 border-radius: 10px; 1529 } 1530 1531 @media (max-width:680px) { 1532 .hero-inner { 1533 gap: 25px; 1534 } 1535 } 1536 1537 .usp-section { 1538 position: relative; 1539 background: 1540 linear-gradient(180deg, #FFFDFB 0%, #FFFFFF 60%); 1541 border-top: 1px solid var(--border); 1542 border-bottom: 1px solid var(--border); 1543 padding: 10px 0 10px; 1544 } 1545 1546 .usp-list { 1547 list-style: none; 1548 margin: 0; 1549 padding: 0; 1550 display: grid; 1551 gap: 26px; 1552 } 1553 1554 .usp-list.variant-soft { 1555 grid-template-columns: repeat(auto-fit, minmax(230px, 1fr)); 1556 } 1557 1558 .usp-item { 1559 display: flex; 1560 gap: 16px; 1561 align-items: flex-start; 1562 background: #fff; 1563 padding: 18px 18px 18px 16px; 1564 border: 1px solid rgba(226, 226, 226, 0.7); 1565 border-radius: 18px; 1566 position: relative; 1567 overflow: hidden; 1568 isolation: isolate; 1569 box-shadow: 0 2px 4px -1px rgba(0, 0, 0, .04), 0 6px 18px -6px rgba(0, 0, 0, .08); 1570 transition: .35s cubic-bezier(.16, .8, .32, 1); 1571 } 1572 1573 .usp-item::before { 1574 content: ""; 1575 position: absolute; 1576 inset: 0; 1577 background: radial-gradient(circle at 18% 22%, rgba(242, 140, 26, .18), transparent 60%); 1578 opacity: .65; 1579 transition: .5s; 1580 z-index: -1; 1581 } 1582 1583 .usp-item:hover { 1584 transform: translateY(-6px); 1585 box-shadow: 0 10px 26px -8px rgba(0, 0, 0, .15), 0 3px 8px -2px rgba(0, 0, 0, .08); 1586 border-color: rgba(242, 140, 26, .35); 1587 } 1588 1589 .usp-item:hover::before { 1590 background: radial-gradient(circle at 70% 40%, rgba(242, 140, 26, .22), transparent 65%); 1591 } 1592 1593 .usp-icon { 1594 flex: 0 0 56px; 1595 width: 56px; 1596 height: 56px; 1597 border-radius: 16px; 1598 display: flex; 1599 align-items: center; 1600 justify-content: center; 1601 background: 1602 linear-gradient(135deg, #FFE7CC, #FFD9A8); 1603 position: relative; 1604 box-shadow: inset 0 0 0 1px rgba(255, 255, 255, .6), 0 4px 10px -3px rgba(0, 0, 0, .15); 1605 transition: .45s; 1606 } 1607 1608 .usp-item:hover .usp-icon { 1609 transform: rotate(-4deg) scale(1.06); 1610 box-shadow: inset 0 0 0 1px rgba(255, 255, 255, .8), 0 6px 14px -4px rgba(0, 0, 0, .20); 1611 } 1612 1613 .usp-icon svg { 1614 width: 28px; 1615 height: 28px; 1616 display: block; 1617 filter: drop-shadow(0 2px 2px rgba(0, 0, 0, .18)); 1618 } 1619 1620 .usp-text h3 { 1621 font-size: 15px; 1622 font-weight: 600; 1623 margin: 2px 0 6px; 1624 letter-spacing: .2px; 1625 } 1626 1627 .usp-text p { 1628 font-size: 13px; 1629 line-height: 1.3; 1630 margin: 0; 1631 color: var(--gray-600); 1632 } 1633 1634 @media (max-width:680px) { 1635 .usp-section { 1636 padding: 5px 0 5px; 1637 margin-bottom: 0.75rem; 1638 } 1639 1640 .usp-item { 1641 padding: 16px 14px; 1642 } 1643 1644 .usp-icon { 1645 width: 50px; 1646 height: 50px; 1647 border-radius: 14px; 1648 } 1649 1650 .usp-text h3 { 1651 font-size: 14px; 1652 margin-bottom: 4px; 1653 } 1654 1655 .usp-text p { 1656 font-size: 12.5px; 1657 } 1658 1659 .usp-list { 1660 gap: 10px; 1661 } 1662 } 1663 1664 .flash { 1665 padding: 50px 0 30px; 1666 background: #fff; 1667 } 1668 1669 .flash-head { 1670 display: flex; 1671 align-items: center; 1672 justify-content: space-between; 1673 margin-bottom: 20px; 1674 } 1675 1676 .flash-head h2 { 1677 margin: 0; 1678 font-size: 24px; 1679 font-family: "Poppins"; 1680 } 1681 1682 .flash .countdown { 1683 font-family: monospace; 1684 background: #009688; 1685 color: #fff; 1686 padding: 8px 14px; 1687 border-radius: 8px; 1688 font-size: 16px; 1689 letter-spacing: 1px; 1690 } 1691 1692 .flash-scroll { 1693 display: flex; 1694 gap: 16px; 1695 overflow-x: auto; 1696 padding-bottom: 6px; 1697 scrollbar-width: none; 1698 } 1699 1700 .flash-scroll::-webkit-scrollbar {
1701 display: none; 1702 } 1703 1704 .products { 1705 padding: 60px 0; 1706 background: #fff; 1707 } 1708 1709 .products-head { 1710 display: flex; 1711 justify-content: space-between; 1712 align-items: center; 1713 margin-bottom: 24px; 1714 flex-wrap: wrap; 1715 gap: 16px; 1716 } 1717 1718 .products-head h2 { 1719 margin: 0; 1720 font-size: 24px; 1721 font-family: "Poppins"; 1722 } 1723 1724 .product-filters input { 1725 padding: 8px 12px; 1726 border: 1px solid var(--border); 1727 border-radius: 8px; 1728 font-size: 14px; 1729 width: 220px; 1730 } 1731 1732 .product-grid { 1733 display: grid; 1734 gap: 24px; 1735 grid-template-columns: repeat(auto-fill, minmax(180px, 1fr)); 1736 } 1737 1738 .prod-card { 1739 background: #fff; 1740 border: 1px solid var(--border); 1741 padding: 12px; 1742 border-radius: 12px; 1743 position: relative; 1744 display: flex; 1745 flex-direction: column; 1746 transition: var(--transition); 1747 } 1748 1749 .prod-card.small { 1750 min-width: 160px; 1751 } 1752 1753 .prod-card:hover { 1754 box-shadow: 0 8px 20px rgba(0, 0, 0, .12); 1755 transform: translateY(-3px); 1756 } 1757 1758 .prod-card .img-box { 1759 background: var(--gray-100); 1760 border-radius: 10px; 1761 aspect-ratio: 1/1; 1762 display: flex; 1763 align-items: center; 1764 justify-content: center; 1765 overflow: hidden; 1766 } 1767 1768 .prod-card .img-box img { 1769 width: 100%; 1770 height: 100%; 1771 object-fit: contain; 1772 transition: var(--transition); 1773 } 1774 1775 .prod-card:hover .img-box img { 1776 transform: scale(1.04); 1777 } 1778 1779 .prod-card .name { 1780 font-size: 13.5px; 1781 font-weight: 500; 1782 margin: 10px 0 6px; 1783 min-height: 36px; 1784 line-height: 1.3; 1785 } 1786 1787 .price { 1788 display: flex; 1789 gap: 6px; 1790 align-items: center; 1791 flex-wrap: wrap; 1792 } 1793 1794 .price strong { 1795 color: var(--brand-600); 1796 font-size: 14px; 1797 } 1798 1799 1800 1801 .price .old { 1802 font-size: 11px; 1803 color: var(--gray-500); 1804 text-decoration: line-through; 1805 } 1806 1807 .tag.discount { 1808 position: absolute; 1809 top: 8px; 1810 left: 8px; 1811 background: #E54848; 1812 color: #fff; 1813 font-size: 11px; 1814 padding: 4px 6px; 1815 border-radius: 6px; 1816 font-weight: 600; 1817 } 1818 1819 .btn { 1820 border: none; 1821 cursor: pointer; 1822 font-weight: 500; 1823 font-size: 14px; 1824 padding: 12px 22px; 1825 border-radius: 10px; 1826 background: var(--gray-900); 1827 color: #fff; 1828 transition: var(--transition); 1829 text-decoration: none; 1830 text-align: center; 1831 display: inline-flex; 1832 align-items: center; 1833 justify-content: center; 1834 gap: 6px; 1835 } 1836 1837 .btn:hover { 1838 background: #000; 1839 } 1840 1841 .btn-primary { 1842 background: var(--brand-500); 1843 } 1844 1845 .btn-primary:hover { 1846 background: var(--brand-600); 1847 } 1848 1849 .btn-outline { 1850 background: #fff; 1851 color: var(--gray-900); 1852 border: 1px solid var(--border); 1853 } 1854 1855 .btn-outline:hover { 1856 background: var(--gray-100); 1857 } 1858 1859 .btn-sm { 1860 padding: 8px 14px; 1861 font-size: 13px; 1862 } 1863 1864 .btn-mini { 1865 padding: 6px 10px; 1866 font-size: 12px; 1867 } 1868 1869 .add-cart { 1870 margin-top: auto; 1871 background: var(--brand-500); 1872 color: #fff; 1873 } 1874 1875 .add-cart:hover { 1876 background: var(--brand-600); 1877 } 1878 1879 /* ==== FOOTER COMPACT FIX PATCH (final) ==== */ 1880 1881 /* 1. Pastikan grid aktif */ 1882 1883 .site-footer.footer-compact .ft-grid { 1884 display: grid; 1885 grid-template-columns: repeat(auto-fit, minmax(240px, 1fr)); 1886 gap: 30px 40px; 1887 align-items: start; 1888 } 1889 1890 /* 2. Spacing atas bawah dipadatkan */ 1891 .site-footer.footer-compact .ft-top { 1892 padding: 42px 0 26px; 1893 } 1894 1895 /* 3. Judul & teks */ 1896 .site-footer.footer-compact .ft-title { 1897 margin: 0 0 14px; 1898 font-size: 14px; 1899 letter-spacing: .8px; 1900 text-transform: uppercase; 1901 font-weight: 600; 1902 color: #82b1c9; 1903 } 1904 1905 .site-footer.footer-compact .ft-desc, 1906 .site-footer.footer-compact .ft-text { 1907 margin: 0 0 16px; 1908 font-size: 13.5px; 1909 line-height: 1.45; 1910 color: #c6d6e0; 1911 max-width: 330px; 1912 } 1913 1914 .site-footer.footer-compact .ft-desc.sm-gap { 1915 margin-top: 18px; 1916 } 1917 1918 /* 4. Reset ikon SVG agar tidak membesar */ 1919 .site-footer.footer-compact svg {
1920 width: 20px; 1921 height: 20px; 1922 flex: 0 0 20px; 1923 display: inline-block; 1924 } 1925 1926 .site-footer.footer-compact .ft-social svg { 1927 width: 18px; 1928 height: 18px; 1929 } 1930 1931 .site-footer.footer-compact .ft-wa-btn svg { 1932 width: 18px; 1933 height: 18px; 1934 } 1935 1936 /* Jika ada aturan global svg { width:100%; } â paksa override */ 1937 svg { 1938 max-width: 100%; 1939 } 1940 1941 .site-footer.footer-compact svg { 1942 width: 20px !important; 1943 height: 20px !important; 1944 } 1945 1946 /* 5. Link list */ 1947 .site-footer.footer-compact .ft-links { 1948 list-style: none; 1949 margin: 0 0 12px; 1950 padding: 0; 1951 display: flex; 1952 flex-direction: column; 1953 gap: 4px; 1954 } 1955 1956 .site-footer.footer-compact .ft-links li { 1957 margin: 0; 1958 } 1959 1960 .site-footer.footer-compact .ft-links a { 1961 display: flex; 1962 align-items: center; 1963 gap: 8px; 1964 font-size: 13.5px; 1965 padding: 5px 2px; 1966 text-decoration: none; 1967 color: #c6d6e0; 1968 border-radius: 8px; 1969 transition: .25s; 1970 } 1971 1972 .site-footer.footer-compact .ft-links a:hover { 1973 background: rgba(255, 255, 255, .06); 1974 padding-left: 6px; 1975 color: #fff; 1976 } 1977 1978 .site-footer.footer-compact .ico-s { 1979 width: 24px; 1980 height: 24px; 1981 background: #103346; 1982 color: #89b8cf; 1983 border-radius: 6px; 1984 display: flex; 1985 align-items: center; 1986 justify-content: center; 1987 flex: 0 0 24px; 1988 font-size: 12px; 1989 transition: .3s; 1990 } 1991 1992 .site-footer.footer-compact .ft-links a:hover .ico-s { 1993 background: #F28C1A; 1994 color: #fff; 1995 transform: rotate(-4deg); 1996 } 1997 1998 /* 6. WhatsApp button */ 1999 .site-footer.footer-compact .ft-wa-btn { 2000 display: inline-flex; 2001 align-items: center; 2002 gap: 8px; 2003 background: #fff; 2004 color: #062437; 2005 padding: 8px 18px; 2006 font-size: 13.5px; 2007 border-radius: 22px; 2008 font-weight: 500; 2009 text-decoration: none; 2010 box-shadow: 0 3px 8px -3px rgba(0, 0, 0, .45); 2011 transition: .25s; 2012 } 2013 2014 .site-footer.footer-compact .ft-wa-btn:hover { 2015 transform: translateY(-2px); 2016 box-shadow: 0 6px 14px -6px rgba(0, 0, 0, .55); 2017 } 2018 2019 /* 7. Sosial */ 2020 .site-footer.footer-compact .ft-social { 2021 display: flex; 2022 gap: 12px; 2023 margin-top: 4px; 2024 } 2025 2026 .site-footer.footer-compact .ft-social a { 2027 width: 34px; 2028 height: 34px; 2029 background: rgba(255, 255, 255, .08); 2030 display: flex; 2031 align-items: center; 2032 justify-content: center; 2033 border-radius: 10px; 2034 color: #c6d6e0; 2035 transition: .25s; 2036 } 2037 2038 .site-footer.footer-compact .ft-social a:hover { 2039 background: #F28C1A; 2040 color: #fff; 2041 } 2042 2043 /* 8. Alamat */ 2044 .site-footer.footer-compact .ft-address { 2045 font-size: 12.5px; 2046 line-height: 1.44; 2047 color: #8fa4b1; 2048 max-width: 330px; 2049 margin-top: 12px; 2050 } 2051 2052 .site-footer.footer-compact .ft-address .company { 2053 margin: 0 0 4px; 2054 font-weight: 600; 2055 color: #e5f2f7; 2056 font-size: 12.8px; 2057 } 2058 2059 /* 9. Payments kecil & rapi */ 2060 .site-footer.footer-compact .ft-payments { 2061 margin-top: 14px; 2062 display: flex; 2063 flex-direction: column; 2064 gap: 8px; 2065 max-width: 350px; 2066 } 2067 2068 .site-footer.footer-compact .ft-payments .pay-row { 2069 display: flex; 2070 gap: 8px; 2071 flex-wrap: wrap; 2072 } 2073 2074 .site-footer.footer-compact .ft-payments img { 2075 width: 46px; 2076 height: 32px; 2077 padding: 3px 5px; 2078 background: #fff; 2079 border-radius: 7px; 2080 object-fit: contain; 2081 box-shadow: 0 2px 6px -3px rgba(0, 0, 0, .45); 2082 transition: .25s; 2083 } 2084 2085 .site-footer.footer-compact .ft-payments img:hover { 2086 transform: translateY(-3px); 2087 box-shadow: 0 5px 12px -6px rgba(0, 0, 0, .55); 2088 } 2089 2090 /* 10. Bottom bar */ 2091 .site-footer.footer-compact .ft-bottom { 2092 border-top: 1px solid rgba(255, 255, 255, .08); 2093 background: #041f31; 2094 padding: 12px 0 16px; 2095 margin-top: 4px; 2096 } 2097 2098 .site-footer.footer-compact .ft-copy { 2099 font-size: 11.5px; 2100 color: #8fa7b5; 2101 display: flex; 2102 flex-wrap: wrap; 2103 gap: 12px; 2104 justify-content: center; 2105 line-height: 1.3; 2106 margin: 0; 2107 } 2108 2109 .site-footer.footer-compact .ft-copy span { 2110 position: relative; 2111 padding: 0 10px; 2112 } 2113 2114 .site-footer.footer-compact .ft-copy span+span:before { 2115 content: ""; 2116 position: absolute; 2117 left: 0; 2118 top: 50%; 2119 width: 1px; 2120 height: 12px; 2121 background: rgba(255, 255, 255, .14); 2122 transform: translateY(-50%); 2123 } 2124 2125 @media (max-width:580px) { 2126 .site-footer.footer-compact .ft-top { 2127 padding: 34px 0 18px; 2128 } 2129 2130 .site-footer.footer-compact .ft-grid { 2131 gap: 26px 20px; 2132 } 2133 2134 .site-footer.footer-compact .ft-copy span { 2135 padding: 0; 2136 } 2137 2138 .site-footer.footer-compact .ft-copy span+span:before { 2139 display: none; 2140 } 2141 } 2142 2143 .copy { 2144 margin-top: 40px; 2145 border-top: 1px solid #222; 2146 text-align: center; 2147 padding: 18px 0; 2148 font-size: 12px; 2149 color: #666; 2150 } 2151 2152 @media (max-width:760px) { 2153 .hero-text h1 { 2154 font-size: 38px; 2155 } 2156 2157 .hero { 2158 padding: 0px 0 30px; 2159 } 2160 2161 .topbar-inner { 2162 flex-direction: column; 2163 gap: 4px; 2164 padding: 6px 0; 2165 } 2166 2167 .nav-inner { 2168 flex-wrap: wrap; 2169 } 2170 2171 .mega-cats { 2172 gap: 10px; 2173 } 2174 2175 .product-grid { 2176 gap: 16px; 2177 } 2178 2179 .prod-card { 2180 padding: 10px; 2181 } 2182 } 2183 2184 /* === PLAZA IT DARK ORANGE FOOTER THEME === */ 2185 .site-footer.footer-compact { 2186 --ft-bg-0: #051722; 2187 --ft-bg-1: #072534; 2188 --ft-bg-2: #0B2F40; 2189 --ft-bg-3: #103A4E; 2190 --ft-orange: #F28C1A; 2191 --ft-orange-dark: #D97809; 2192 --ft-text: #E9F2F6; 2193 --ft-text-sec: #B8CAD3; 2194 --ft-text-muted: #8FA4B1; 2195 --ft-divider: rgba(255, 255, 255, 0.08); 2196 --ft-glow: rgba(242, 140, 26, 0.18); 2197 --ft-glow-fade: rgba(242, 140, 26, 0); 2198 color: var(--ft-text); 2199 } 2200 2201 /* BASE TEXT / LINKS (override sebelumnya jika perlu) */ 2202 .site-footer.footer-compact .ft-title { 2203 color: #9CC5D7; 2204 } 2205 2206 .site-footer.footer-compact .ft-links a { 2207 color: var(--ft-text-sec); 2208 } 2209 2210 .site-footer.footer-compact .ft-links a:hover { 2211 color: #fff; 2212 } 2213 2214 .site-footer.footer-compact .ft-address { 2215 color: var(--ft-text-muted); 2216 } 2217 2218 .site-footer.footer-compact .ft-copy { 2219 color: #9AB2BD; 2220 } 2221 2222 /* ICON BACKGROUND (kubu gelap) */
2223 .site-footer.footer-compact .ico-s { 2224 background: #0F3647; 2225 color: #9FC7DA; 2226 } 2227 2228 .site-footer.footer-compact .ft-links a:hover .ico-s { 2229 background: var(--ft-orange); 2230 color: #fff; 2231 } 2232 2233 /* WhatsApp button biarkan putih agar kontras */ 2234 .site-footer.footer-compact .ft-wa-btn { 2235 box-shadow: 0 4px 12px -5px rgba(0, 0, 0, .6), 0 0 0 3px rgba(255, 255, 255, 0.05); 2236 } 2237 2238 .site-footer.footer-compact .ft-wa-btn:hover { 2239 box-shadow: 0 8px 20px -8px rgba(0, 0, 0, .65), 0 0 0 3px rgba(242, 140, 26, 0.25); 2240 } 2241 2242 /* Payment cards border halus */ 2243 .site-footer.footer-compact .ft-payments img { 2244 box-shadow: 0 2px 6px -3px rgba(0, 0, 0, .55), 0 0 0 1px rgba(255, 255, 255, 0.05); 2245 } 2246 2247 .site-footer.footer-compact .ft-payments img:hover { 2248 box-shadow: 0 6px 14px -6px rgba(0, 0, 0, .65), 0 0 0 1px rgba(242, 140, 26, 0.4); 2249 } 2250 2251 /* ========== VARIANT A: DIAGONAL EMBER (AKTIF) ========== */ 2252 .site-footer.footer-compact.variant-ember { 2253 background: 2254 radial-gradient(circle at 78% 82%, var(--ft-glow) 0%, var(--ft-glow-fade) 55%), 2255 linear-gradient(140deg, var(--ft-bg-1) 0%, var(--ft-bg-2) 55%, var(--ft-bg-0) 100%); 2256 } 2257 2258 .site-footer.footer-compact.variant-ember .ft-bottom { 2259 background: rgba(0, 0, 0, 0.25); 2260 backdrop-filter: blur(2px); 2261 } 2262 2263 /* ========== VARIANT B: TOP BAR ORANGE ========== */ 2264 .site-footer.footer-compact.variant-bar { 2265 background: var(--ft-bg-1); 2266 position: relative; 2267 } 2268 2269 .site-footer.footer-compact.variant-bar::before { 2270 content: ""; 2271 position: absolute; 2272 left: 0; 2273 top: 0; 2274 width: 100%; 2275 height: 3px; 2276 background: linear-gradient(90deg, var(--ft-orange-dark), var(--ft-orange)); 2277 box-shadow: 0 0 12px -2px var(--ft-orange); 2278 } 2279 2280 .site-footer.footer-compact.variant-bar .ft-bottom { 2281 background: #041c28; 2282 } 2283 2284 /* ========== VARIANT C: RADIAL GLOW BAWAH ========== */ 2285 .site-footer.footer-compact.variant-radial { 2286 background: 2287 radial-gradient(circle at 70% 90%, rgba(242, 140, 26, 0.22) 0%, rgba(242, 140, 26, 0.04) 38%, rgba(242, 140, 26, 0) 65%), 2288 linear-gradient(150deg, #052131 0%, #062d3f 50%, #041924 100%); 2289 } 2290 2291 .site-footer.footer-compact.variant-radial .ft-bottom { 2292 background: #041c29; 2293 } 2294 2295 /* ========== VARIANT D: LAYERED STRIPES ========== */ 2296 .site-footer.footer-compact.variant-stripes { 2297 background: 2298 repeating-linear-gradient(180deg, rgba(255, 255, 255, 0.015) 0 38px, rgba(255, 255, 255, 0) 38px 76px), 2299 linear-gradient(130deg, #052636 0%, #062a3c 60%, #041d28 100%); 2300 position: relative; 2301 } 2302 2303 .site-footer.footer-compact.variant-stripes::after { 2304 content: ""; 2305 position: absolute; 2306 left: 0; 2307 bottom: 0; 2308 width: 100%; 2309 height: 110px; 2310 background: linear-gradient(0deg, rgba(0, 0, 0, .35), rgba(0, 0, 0, 0)); 2311 pointer-events: none; 2312 } 2313 2314 .site-footer.footer-compact.variant-stripes .ft-bottom { 2315 background: #031821; 2316 } 2317 2318 /* Garis aksen oranye tipis di atas bottom */ 2319 .site-footer.footer-compact.variant-stripes .ft-bottom { 2320 position: relative; 2321 } 2322 2323 .site-footer.footer-compact.variant-stripes .ft-bottom::before { 2324 content: ""; 2325 position: absolute; 2326 left: 0; 2327 top: 0; 2328 width: 100%; 2329 height: 2px; 2330 background: linear-gradient(90deg, rgba(242, 140, 26, 0), rgba(242, 140, 26, .65), rgba(242, 140, 26, 0)); 2331 } 2332 2333 /* ========== VARIANT E: GLASS PANEL ========== */ 2334 .site-footer.footer-compact.variant-glass { 2335 background: linear-gradient(145deg, #051c29 0%, #041620 65%, #03121b 100%); 2336 } 2337 2338 .site-footer.footer-compact.variant-glass .ft-grid { 2339 position: relative; 2340 padding: 32px clamp(10px, 2vw, 24px); 2341 border-radius: 22px; 2342 background: linear-gradient(140deg, rgba(255, 255, 255, 0.06), rgba(255, 255, 255, 0.02)); 2343 border: 1px solid rgba(255, 255, 255, 0.08); 2344 box-shadow: 0 12px 28px -12px rgba(0, 0, 0, 0.45), 0 0 0 1px rgba(255, 255, 255, 0.04) inset; 2345 backdrop-filter: blur(8px); 2346 -webkit-backdrop-filter: blur(8px); 2347 } 2348 2349 .site-footer.footer-compact.variant-glass .ft-bottom { 2350 background: #02141d; 2351 } 2352 2353 /* HOVER ACCENTS */ 2354 .site-footer.footer-compact a { 2355 transition: color .25s, background .25s, box-shadow .25s; 2356 } 2357 2358 .site-footer.footer-compact .ft-links a:hover { 2359 box-shadow: 0 2px 6px -3px rgba(0, 0, 0, .5), 2360 0 0 0 1px rgba(242, 140, 26, 0.55); 2361 } 2362 2363 .site-footer.footer-compact .ft-social a { 2364 background: #0E3445; 2365 color: #bcd4dd; 2366 } 2367 2368 .site-footer.footer-compact .ft-social a:hover { 2369 background: var(--ft-orange); 2370 color: #fff; 2371 box-shadow: 0 0 0 3px rgba(242, 140, 26, 0.28); 2372 } 2373 2374 /* Divider di atas footer (opsional) */ 2375 .footer-divider-top { 2376 height: 1px; 2377 background: linear-gradient(90deg, transparent, rgba(255, 255, 255, 0.15), transparent); 2378 width: 100%; 2379 margin: 0 0 4px; 2380 } 2381
2382 /* ==== MOBILE FOOTER COLLAPSE (Non-Homepage Only) ==== */ 2383 2384 /* Desktop: wrapper tidak mengganggu grid layout */ 2385 .ft-collapsible-content { 2386 display: contents; 2387 } 2388 2389 @media (max-width: 768px) { 2390 2391 /* Wrapper untuk konten yang bisa collapse */ 2392 .ft-top.ft-collapsible .ft-collapsible-content { 2393 display: block; 2394 max-height: 80px; 2395 overflow: hidden; 2396 position: relative; 2397 transition: max-height 0.4s cubic-bezier(0.4, 0, 0.2, 1); 2398 } 2399 2400 /* Fade gradient overlay */ 2401 .ft-top.ft-collapsible .ft-collapsible-content::after { 2402 content: ''; 2403 position: absolute; 2404 bottom: 0; 2405 left: 0; 2406 right: 0; 2407 height: 70px; 2408 background: linear-gradient(to bottom, transparent 0%, rgba(6, 43, 69, 0.6) 40%, #062b45 100%); 2409 pointer-events: none; 2410 opacity: 1; 2411 transition: opacity 0.3s ease; 2412 z-index: 1; 2413 } 2414 2415 /* State: Expanded */ 2416 .ft-top.ft-collapsible.expanded .ft-collapsible-content { 2417 max-height: 1500px; 2418 } 2419 2420 .ft-top.ft-collapsible.expanded .ft-collapsible-content::after { 2421 opacity: 0; 2422 } 2423 2424 /* Expand Button - Di luar collapsible, selalu visible */ 2425 .ft-expand-btn { 2426 display: flex; 2427 align-items: center; 2428 justify-content: center; 2429 gap: 8px; 2430 width: 100%; 2431 margin: -8px 0 0; 2432 padding: 12px 20px; 2433 background: rgba(255, 255, 255, 0.12); 2434 border: 1px solid rgba(255, 255, 255, 0.25); 2435 border-radius: 10px; 2436 color: #e5f2f7; 2437 font-size: 13.5px; 2438 font-weight: 500; 2439 cursor: pointer; 2440 transition: all 0.3s ease; 2441 outline: none; 2442 position: relative; 2443 z-index: 10; 2444 } 2445 2446 .ft-expand-btn:hover { 2447 background: rgba(255, 255, 255, 0.18); 2448 border-color: rgba(255, 255, 255, 0.35); 2449 color: #fff; 2450 transform: translateY(-2px); 2451 } 2452 2453 .ft-expand-btn:active { 2454 transform: scale(0.98); 2455 } 2456 2457 .ft-expand-btn svg { 2458 width: 18px; 2459 height: 18px; 2460 transition: transform 0.3s ease; 2461 fill: currentColor; 2462 } 2463 2464 .ft-top.ft-collapsible.expanded .ft-expand-btn { 2465 margin-top: 15px; 2466 } 2467 2468 .ft-top.ft-collapsible.expanded .ft-expand-btn svg { 2469 transform: rotate(180deg); 2470 } 2471 } 2472 2473 /* Desktop: hide expand button */ 2474 @media (min-width: 769px) { 2475 .ft-expand-btn { 2476 display: none !important; 2477 } 2478 } 2479 2480 /* RESPONSIVE (jika background panel butuh penyesuaian) */ 2481 @media (max-width:640px) { 2482 .site-footer.footer-compact.variant-glass .ft-grid { 2483 padding: 26px 18px; 2484 } 2485 } 2486 2487 /* Mobile Bottom Navigation */ 2488 .bottom-nav { 2489 position: fixed; 2490 bottom: 0; 2491 left: 0; 2492 right: 0; 2493 background: #ffffff; 2494 border-top: 1px solid #e5e7eb; 2495 z-index: 9998; 2496 /* Below chat widget */ 2497 box-shadow: 0 -2px 10px rgba(0, 0, 0, 0.05); 2498 display: none; 2499 /* Hidden on desktop */ 2500 } 2501 2502 .bottom-nav-inner { 2503 display: flex; 2504 justify-content: space-around; 2505 align-items: center; 2506 padding: 2px 0; 2507 max-width: 640px; 2508 margin: 0 auto; 2509 } 2510 2511 .bottom-nav-item { 2512 flex: 1; 2513 display: flex; 2514 flex-direction: column; 2515 align-items: center; 2516 justify-content: center; 2517 gap: 4px; 2518 padding: 8px 8px; 2519 background: none; 2520 border: none; 2521 cursor: pointer; 2522 text-decoration: none; 2523 color: #6b7280; 2524 transition: all 0.3s ease; 2525 position: relative; 2526 } 2527 2528 .bottom-nav-item:hover { 2529 color: #F28C1A; 2530 } 2531 2532 .bottom-nav-item.active { 2533 flex-direction: row; 2534 gap: 8px; 2535 background: linear-gradient(135deg, #F28C1A 0%, #D97809 100%); 2536 color: white; 2537 border-radius: 20px; 2538 padding: 8px 16px; 2539 box-shadow: 0 2px 8px rgba(242, 140, 26, 0.3); 2540 } 2541 2542 .bottom-nav-item-icon { 2543 width: 24px; 2544 height: 24px; 2545 position: relative; 2546 } 2547 2548 .bottom-nav-item-icon svg { 2549 width: 100%; 2550 height: 100%; 2551 } 2552 2553 /* Icon variant switching */ 2554 .bottom-nav-item .icon-outlined { 2555 display: block; 2556 } 2557 2558 .bottom-nav-item .icon-filled { 2559 display: none; 2560 } 2561 2562 .bottom-nav-item.active .icon-outlined { 2563 display: none; 2564 } 2565 2566 .bottom-nav-item.active .icon-filled { 2567 display: block; 2568 } 2569 2570 .bottom-nav-item-label { 2571 font-size: 12px; 2572 font-weight: 600; 2573 line-height: 1; 2574 display: none; 2575 white-space: nowrap; 2576 } 2577 2578 .bottom-nav-item.active .bottom-nav-item-label { 2579 display: block; 2580 } 2581 2582 /* Avatar styles for bottom-nav */ 2583 .bottom-nav-avatar-img, 2584 .bottom-nav-avatar-initials { 2585 width: 24px; 2586 height: 24px; 2587 border-radius: 50%; 2588 display: block; 2589 } 2590 2591 .bottom-nav-avatar-img { 2592 object-fit: cover; 2593 } 2594 2595 .bottom-nav-avatar-initials { 2596 background: linear-gradient(135deg, #F28C1A 0%, #D97809 100%); 2597 color: white; 2598 font-size: 10px; 2599 font-weight: 700; 2600 display: flex; 2601 align-items: center; 2602 justify-content: center; 2603 line-height: 1; 2604 letter-spacing: 0.5px; 2605 } 2606 2607 /* Hide SVG when avatar is shown */ 2608 .bottom-nav-item-icon:has(.bottom-nav-avatar-img) .bottom-nav-svg-icon,
2609 .bottom-nav-item-icon:has(.bottom-nav-avatar-initials) .bottom-nav-svg-icon { 2610 display: none; 2611 } 2612 2613 /* Active state adjustments for avatar */ 2614 .bottom-nav-item.active .bottom-nav-avatar-initials { 2615 background: white; 2616 color: #F28C1A; 2617 border: 2px solid rgba(255, 255, 255, 0.8); 2618 box-sizing: border-box; 2619 } 2620 2621 .bottom-nav-item.active .bottom-nav-avatar-img { 2622 border: 2px solid rgba(255, 255, 255, 0.9); 2623 box-sizing: border-box; 2624 } 2625 2626 .bottom-nav-item-badge { 2627 position: absolute; 2628 top: -4px; 2629 right: -4px; 2630 background: #ef4444; 2631 color: white; 2632 border-radius: 10px; 2633 padding: 2px 5px; 2634 font-size: 10px; 2635 font-weight: 600; 2636 min-width: 18px; 2637 height: 18px; 2638 display: flex; 2639 align-items: center; 2640 justify-content: center; 2641 line-height: 1; 2642 } 2643 2644 /* Show on mobile only */ 2645 @media (max-width: 640px) { 2646 .bottom-nav { 2647 display: block; 2648 } 2649 2650 /* Add bottom padding to body to prevent content being hidden */ 2651 body { 2652 padding-bottom: 60px; 2653 } 2654 } 2655 2656 /* Mobile User Sheet - Bottom Sheet for Profile Menu */ 2657 .mobile-user-sheet { 2658 position: fixed; 2659 bottom: 0; 2660 left: 0; 2661 right: 0; 2662 z-index: 10000; 2663 pointer-events: none; 2664 } 2665 2666 .mobile-user-sheet:not([hidden]) { 2667 pointer-events: auto; 2668 } 2669 2670 .mobile-user-sheet-backdrop { 2671 position: fixed; 2672 inset: 0; 2673 background: rgba(0, 0, 0, 0.5); 2674 opacity: 0; 2675 transition: opacity 0.2s ease-out; 2676 } 2677 2678 .mobile-user-sheet.active .mobile-user-sheet-backdrop { 2679 opacity: 1; 2680 } 2681 2682 .mobile-user-sheet-content { 2683 position: absolute; 2684 bottom: 0; 2685 left: 0; 2686 right: 0; 2687 background: white; 2688 border-radius: 16px 16px 0 0; 2689 max-height: 80vh; 2690 overflow-y: auto; 2691 transform: translateY(100%); 2692 transition: transform 0.3s ease-out; 2693 } 2694 2695 .mobile-user-sheet.active .mobile-user-sheet-content { 2696 transform: translateY(0); 2697 } 2698 2699 .mobile-user-sheet-handle { 2700 width: 40px; 2701 height: 4px; 2702 background: #d1d5db; 2703 border-radius: 2px; 2704 margin: 12px auto 16px; 2705 } 2706 2707 .mobile-user-sheet-header { 2708 padding: 0 20px 16px; 2709 border-bottom: 1px solid #e5e7eb; 2710 } 2711 2712 .mobile-user-info { 2713 display: flex; 2714 align-items: center; 2715 gap: 12px; 2716 } 2717 2718 .mobile-user-avatar { 2719 width: 48px; 2720 height: 48px; 2721 background: linear-gradient(135deg, #FFE7CC 0%, #FFD9A8 50%, #FFCC80 100%); 2722 border-radius: 50%; 2723 display: flex; 2724 align-items: center; 2725 justify-content: center; 2726 font-size: 24px; 2727 color: #D97809; 2728 font-weight: 600; 2729 } 2730 2731 .mobile-user-details { 2732 flex: 1; 2733 } 2734 2735 .mobile-user-name { 2736 font-weight: 600; 2737 font-size: 16px; 2738 color: #1f2937; 2739 margin-bottom: 4px; 2740 } 2741 2742 .mobile-user-email { 2743 font-size: 13px; 2744 color: #6b7280; 2745 } 2746 2747 .mobile-user-sheet-body { 2748 padding: 8px 0; 2749 } 2750 2751 .mobile-user-sheet-item { 2752 display: flex; 2753 align-items: center; 2754 gap: 12px; 2755 padding: 14px 20px; 2756 background: none; 2757 border: none; 2758 width: 100%; 2759 text-align: left; 2760 cursor: pointer; 2761 text-decoration: none; 2762 color: #374151; 2763 transition: background 0.2s; 2764 } 2765 2766 .mobile-user-sheet-item:hover { 2767 background: #f9fafb; 2768 } 2769 2770 .mobile-user-sheet-icon { 2771 font-size: 20px; 2772 width: 24px; 2773 text-align: center; 2774 } 2775 2776 .mobile-user-sheet-label { 2777 font-size: 15px; 2778 font-weight: 500; 2779 } 2780 2781 .mobile-user-sheet-divider { 2782 height: 1px; 2783 background: #e5e7eb; 2784 margin: 8px 0; 2785 } 2786 2787 @keyframes fadeIn { 2788 from { 2789 opacity: 0; 2790 } 2791 2792 to { 2793 opacity: 1; 2794 } 2795 } 2796
2797 @keyframes slideUp { 2798 from { 2799 transform: translateY(100%); 2800 } 2801 2802 to { 2803 transform: translateY(0); 2804 } 2805 } 2806 2807 /* Ensure chat widget works well with bottom nav */ 2808 @media (max-width: 640px) { 2809 .chat-widget { 2810 bottom: 0 !important; 2811 /* Chat opens from bottom */ 2812 } 2813 2814 .chat-popup { 2815 /* Chat popup should be above bottom nav */ 2816 z-index: 9999; 2817 } 2818 } 2819 2820 .search { 2821 position: relative; 2822 } 2823 2824 /* AI Bot Toggle Button */ 2825 .ai-bot-toggle { 2826 display: flex; 2827 align-items: center; 2828 justify-content: center; 2829 background: transparent; 2830 border: none; 2831 padding: 8px; 2832 cursor: pointer; 2833 border-radius: 8px; 2834 transition: all 0.3s cubic-bezier(0.4, 0, 0.2, 1); 2835 margin-left: 4px; 2836 flex-shrink: 0; 2837 display: none; 2838 } 2839 2840 .ai-bot-toggle .bot-icon { 2841 color: #9ca3af; 2842 transition: all 0.3s ease; 2843 } 2844 2845 .ai-bot-toggle:hover .bot-icon { 2846 color: #6b7280; 2847 transform: scale(1.1); 2848 } 2849 2850 .ai-bot-toggle.active .bot-icon { 2851 color: #fb923c; 2852 animation: botPulse 2s ease-in-out infinite; 2853 } 2854 2855 .ai-bot-toggle.active { 2856 background: rgba(251, 146, 60, 0.1); 2857 } 2858 2859 .ai-bot-toggle.active:hover .bot-icon { 2860 color: #f97316; 2861 } 2862 2863 @keyframes botPulse { 2864 2865 0%, 2866 100% { 2867 transform: scale(1); 2868 } 2869 2870 50% { 2871 transform: scale(1.12); 2872 } 2873 } 2874 2875 /* Search Suggest Box */ 2876 .search-suggest { 2877 position: absolute; 2878 top: 100%; 2879 left: 0; 2880 right: 0; 2881 background: #fff; 2882 border: 1px solid #e1e4e8; 2883 border-top: none; 2884 box-shadow: 0 4px 12px rgba(0, 0, 0, 0.08); 2885 max-height: 400px; 2886 overflow-y: auto; 2887 z-index: 100; 2888 padding: 0; 2889 font-size: 14px; 2890 border-radius: 0 0 8px 8px; 2891 } 2892 2893 .suggest-item { 2894 display: flex; 2895 align-items: center; 2896 gap: 8px; 2897 padding: 10px 16px; 2898 cursor: pointer; 2899 transition: all 0.2s ease; 2900 border-bottom: 1px solid #f1f5f9; 2901 } 2902 2903 .suggest-item:last-child { 2904 border-bottom: none; 2905 } 2906 2907 .suggest-item:hover, 2908 .suggest-item.active { 2909 background: linear-gradient(90deg, #f8fafc 0%, #f1f5f9 100%); 2910 padding-left: 20px; 2911 } 2912 2913 .suggest-thumb { 2914 width: 42px; 2915 height: 42px; 2916 object-fit: cover; 2917 border: 1px solid #ddd; 2918 border-radius: 4px; 2919 background: #fafafa; 2920 } 2921 2922 .suggest-meta { 2923 flex: 1; 2924 min-width: 0; 2925 } 2926 2927 .suggest-name { 2928 font-weight: 500; 2929 color: #222; 2930 line-height: 1.2; 2931 white-space: nowrap; 2932 overflow: hidden; 2933 text-overflow: ellipsis; 2934 } 2935 2936 .suggest-price { 2937 color: #d32f2f; 2938 font-size: 12px; 2939 margin-top: 2px; 2940 } 2941 2942 /* AI Insights */ 2943 .suggest-ai-insight { 2944 display: flex; 2945 align-items: center; 2946 gap: 8px; 2947 padding: 8px 12px; 2948 background: linear-gradient(135deg, #f0f9ff 0%, #e0f2fe 100%); 2949 border-bottom: 1px solid #bae6fd; 2950 color: #0369a1; 2951 font-size: 12px; 2952 font-weight: 500; 2953 line-height: 1.4; 2954 } 2955 2956 .suggest-ai-insight svg { 2957 flex-shrink: 0; 2958 opacity: 0.8; 2959 } 2960 2961 .suggest-ai-insight span { 2962 flex: 1; 2963 } 2964 2965 /* AI Progress States */ 2966 .ai-progress-container { 2967 padding: 20px 16px; 2968 background: linear-gradient(135deg, #fafbff 0%, #f5f7ff 100%); 2969 } 2970 2971 .ai-progress-header { 2972 display: flex; 2973 align-items: center; 2974 gap: 10px; 2975 margin-bottom: 16px; 2976 } 2977 2978 .ai-progress-icon { 2979 width: 36px; 2980 height: 36px; 2981 display: flex; 2982 align-items: center; 2983 justify-content: center; 2984 background: linear-gradient(135deg, #667eea 0%, #764ba2 100%); 2985 border-radius: 50%; 2986 color: #fff; 2987 font-size: 18px;
2988 animation: aiIconSpin 3s linear infinite; 2989 } 2990 2991 @keyframes aiIconSpin { 2992 0% { 2993 transform: rotate(0deg); 2994 } 2995 2996 100% { 2997 transform: rotate(360deg); 2998 } 2999 } 3000 3001 .ai-progress-text { 3002 flex: 1; 3003 } 3004 3005 .ai-progress-title { 3006 font-weight: 600; 3007 color: #1e293b; 3008 font-size: 14px; 3009 margin-bottom: 2px; 3010 } 3011 3012 .ai-progress-subtitle { 3013 font-size: 12px; 3014 color: #64748b; 3015 } 3016 3017 /* Progress Steps */ 3018 .ai-progress-steps { 3019 display: flex; 3020 flex-direction: column; 3021 gap: 10px; 3022 margin-top: 16px; 3023 } 3024 3025 .ai-progress-step { 3026 display: flex; 3027 align-items: center; 3028 gap: 10px; 3029 padding: 8px 12px; 3030 background: #fff; 3031 border-radius: 8px; 3032 border: 1px solid #e2e8f0; 3033 transition: all 0.3s ease; 3034 } 3035 3036 .ai-progress-step.active { 3037 border-color: #667eea; 3038 background: #f8f9ff; 3039 box-shadow: 0 2px 8px rgba(102, 126, 234, 0.1); 3040 } 3041 3042 .ai-progress-step.completed { 3043 border-color: #10b981; 3044 background: #f0fdf4; 3045 } 3046 3047 .ai-step-icon { 3048 width: 20px; 3049 height: 20px; 3050 display: flex; 3051 align-items: center; 3052 justify-content: center; 3053 border-radius: 50%; 3054 font-size: 11px; 3055 flex-shrink: 0; 3056 } 3057 3058 .ai-progress-step.active .ai-step-icon { 3059 background: #667eea; 3060 color: #fff; 3061 animation: pulse 1.5s ease-in-out infinite; 3062 } 3063 3064 .ai-progress-step.completed .ai-step-icon { 3065 background: #10b981; 3066 color: #fff; 3067 } 3068 3069 .ai-progress-step.pending .ai-step-icon { 3070 background: #e2e8f0; 3071 color: #94a3b8; 3072 } 3073 3074 .ai-step-text { 3075 flex: 1; 3076 font-size: 13px; 3077 color: #475569; 3078 font-weight: 500; 3079 } 3080 3081 .ai-progress-step.completed .ai-step-text { 3082 color: #059669; 3083 } 3084 3085 /* AI Analysis Result Banner */ 3086 .ai-result-banner { 3087 padding: 12px 16px; 3088 background: linear-gradient(135deg, #ecfdf5 0%, #d1fae5 100%); 3089 border-bottom: 1px solid #86efac; 3090 display: flex; 3091 align-items: center; 3092 gap: 10px; 3093 } 3094 3095 .ai-result-icon { 3096 font-size: 20px; 3097 animation: bounceIn 0.5s ease; 3098 } 3099 3100 @keyframes bounceIn { 3101 0% { 3102 transform: scale(0); 3103 opacity: 0; 3104 } 3105 3106 50% { 3107 transform: scale(1.1); 3108 } 3109 3110 100% { 3111 transform: scale(1); 3112 opacity: 1; 3113 } 3114 } 3115 3116 .ai-result-text { 3117 flex: 1; 3118 } 3119 3120 .ai-result-title { 3121 font-weight: 600; 3122 color: #065f46; 3123 font-size: 13px; 3124 margin-bottom: 2px; 3125 } 3126 3127 .ai-result-description { 3128 font-size: 12px; 3129 color: #047857; 3130 opacity: 0.9; 3131 } 3132 3133 /* Product Items Section Header */ 3134 .suggest-section-header { 3135 padding: 10px 16px; 3136 background: linear-gradient(135deg, #f8fafc 0%, #f1f5f9 100%); 3137 border-bottom: 1px solid #e2e8f0; 3138 } 3139 3140 .suggest-header-main { 3141 display: flex; 3142 align-items: center; 3143 gap: 6px; 3144 margin-bottom: 4px; 3145 } 3146 3147 .suggest-header-icon { 3148 font-size: 14px; 3149 } 3150 3151 .suggest-header-text { 3152 font-size: 12px; 3153 font-weight: 600; 3154 color: #64748b; 3155 text-transform: uppercase; 3156 letter-spacing: 0.5px; 3157 } 3158 3159 .suggest-header-hint { 3160 font-size: 11px; 3161 color: #94a3b8; 3162 font-weight: 400; 3163 text-transform: none; 3164 letter-spacing: 0; 3165 display: flex; 3166 align-items: center; 3167 gap: 4px; 3168 } 3169 3170 .suggest-header-hint kbd { 3171 display: inline-block; 3172 padding: 2px 6px; 3173 font-size: 10px; 3174 font-weight: 600; 3175 line-height: 1; 3176 color: #475569; 3177 background: #fff; 3178 border: 1px solid #cbd5e1; 3179 border-radius: 4px; 3180 box-shadow: 0 1px 2px rgba(0, 0, 0, 0.05); 3181 font-family: 'Segoe UI', monospace; 3182 } 3183 3184 /* Footer Hint */ 3185 .suggest-footer-hint { 3186 display: flex; 3187 align-items: center; 3188 justify-content: center; 3189 padding: 12px 16px; 3190 background: linear-gradient(135deg, #fef3c7 0%, #fde68a 100%); 3191 border-top: 1px solid #fbbf24; 3192 color: #92400e; 3193 font-size: 12px; 3194 font-weight: 500; 3195 text-align: center; 3196 cursor: default; 3197 } 3198 3199 .suggest-footer-hint svg { 3200 color: #f59e0b; 3201 flex-shrink: 0; 3202 } 3203 3204 .suggest-footer-hint kbd { 3205 display: inline-block; 3206 padding: 3px 7px; 3207 margin: 0 3px; 3208 font-size: 11px; 3209 font-weight: 600; 3210 line-height: 1; 3211 color: #78350f; 3212 background: #fff; 3213 border: 1px solid #f59e0b; 3214 border-radius: 4px; 3215 box-shadow: 0 1px 3px rgba(245, 158, 11, 0.2); 3216 font-family: 'Segoe UI', monospace; 3217 } 3218 3219 .suggest-footer-link { 3220 color: #ea580c; 3221 font-weight: 600; 3222 text-decoration: underline; 3223 text-underline-offset: 2px; 3224 text-decoration-thickness: 1px; 3225 cursor: pointer; 3226 transition: all 0.2s ease; 3227 } 3228 3229 .suggest-footer-link:hover { 3230 color: #c2410c; 3231 text-decoration-thickness: 2px; 3232 text-shadow: 0 0 8px rgba(234, 88, 12, 0.3); 3233 } 3234 3235 /* Loading state */ 3236 .suggest-loading { 3237 display: flex; 3238 align-items: center; 3239 justify-content: center; 3240 gap: 8px; 3241 padding: 16px 12px; 3242 color: #64748b; 3243 font-size: 13px; 3244 } 3245
3246 @keyframes pulse { 3247 3248 0%, 3249 100% { 3250 opacity: 1; 3251 } 3252 3253 50% { 3254 opacity: 0.5; 3255 } 3256 } 3257 3258 .suggest-loading { 3259 animation: pulse 1.5s ease-in-out infinite; 3260 } 3261 3262 /* Responsive Mobile Styles */ 3263 @media (max-width: 768px) { 3264 .ai-bot-toggle { 3265 padding: 6px; 3266 margin-left: 0; 3267 } 3268 3269 .ai-bot-toggle .bot-icon { 3270 width: 20px; 3271 height: 20px; 3272 } 3273 3274 .search-icon-btn { 3275 margin-right: 4px; 3276 } 3277 3278 .search-icon-btn svg { 3279 width: 18px; 3280 height: 18px; 3281 } 3282 3283 .search-suggest { 3284 max-height: 350px; 3285 } 3286 3287 /* Mobile hint adjustments */ 3288 .suggest-header-hint { 3289 font-size: 10px; 3290 } 3291 3292 .suggest-header-hint kbd { 3293 padding: 1px 4px; 3294 font-size: 9px; 3295 } 3296 3297 .suggest-footer-hint { 3298 padding: 10px 12px; 3299 font-size: 11px; 3300 } 3301 3302 .suggest-footer-hint svg { 3303 width: 14px; 3304 height: 14px; 3305 } 3306 3307 .suggest-footer-hint kbd { 3308 padding: 2px 5px; 3309 font-size: 10px; 3310 } 3311 3312 .ai-progress-container { 3313 padding: 16px 12px; 3314 } 3315 3316 .ai-progress-icon { 3317 width: 32px; 3318 height: 32px; 3319 font-size: 16px; 3320 } 3321 3322 .ai-progress-title { 3323 font-size: 13px; 3324 } 3325 3326 .ai-progress-subtitle { 3327 font-size: 11px; 3328 } 3329 3330 .ai-progress-step { 3331 padding: 6px 10px; 3332 } 3333 3334 .ai-step-text { 3335 font-size: 12px; 3336 } 3337 3338 .suggest-item { 3339 padding: 8px 12px; 3340 } 3341 3342 .suggest-thumb { 3343 width: 36px; 3344 height: 36px; 3345 } 3346 3347 .suggest-name { 3348 font-size: 13px; 3349 } 3350 3351 .suggest-price { 3352 font-size: 11px; 3353 } 3354 } 3355 3356 @media (max-width: 480px) { 3357 .ai-bot-toggle { 3358 padding: 4px; 3359 } 3360 3361 .ai-bot-toggle .bot-icon { 3362 width: 18px; 3363 height: 18px; 3364 } 3365 3366 .search-icon-btn svg { 3367 width: 16px; 3368 height: 16px; 3369 } 3370 3371 /* Ultra-compact hints for small screens */ 3372 .suggest-header-hint { 3373 display: none; 3374 /* Hide header hint on very small screens */ 3375 } 3376 3377 .suggest-footer-hint { 3378 padding: 8px 10px; 3379 font-size: 10px; 3380 flex-direction: column; 3381 gap: 4px; 3382 } 3383 3384 .suggest-footer-hint svg { 3385 display: none; 3386 /* Hide icon to save space */ 3387 } 3388 3389 .suggest-footer-hint kbd { 3390 padding: 2px 4px; 3391 font-size: 9px; 3392 } 3393 3394 .ai-progress-steps { 3395 gap: 8px; 3396 } 3397 3398 .ai-step-text { 3399 font-size: 11px; 3400 } 3401 } 3402 3403 /* AI Search Prompt Box */ 3404 .ai-search-prompt { 3405 padding: 24px; 3406 background: linear-gradient(135deg, #fff5f0 0%, #ffffff 100%); 3407 } 3408 3409 .ai-prompt-header { 3410 display: flex; 3411 align-items: center; 3412 gap: 12px; 3413 margin-bottom: 16px; 3414 } 3415 3416 .ai-prompt-icon { 3417 width: 48px; 3418 height: 48px; 3419 background: linear-gradient(135deg, #fb923c 0%, #f97316 100%); 3420 border-radius: 12px; 3421 display: flex; 3422 align-items: center; 3423 justify-content: center; 3424 font-size: 24px; 3425 box-shadow: 0 4px 12px rgba(251, 146, 60, 0.3); 3426 } 3427 3428 .ai-prompt-text { 3429 flex: 1; 3430 } 3431 3432 .ai-prompt-title { 3433 font-size: 16px; 3434 font-weight: 700; 3435 color: #1f2937; 3436 margin-bottom: 4px; 3437 } 3438 3439 .ai-prompt-subtitle { 3440 font-size: 13px; 3441 color: #6b7280; 3442 } 3443 3444 .ai-prompt-query { 3445 background: white; 3446 border: 2px solid #fb923c; 3447 border-radius: 8px; 3448 padding: 12px 16px; 3449 margin-bottom: 16px; 3450 } 3451 3452 .ai-query-label { 3453 font-size: 11px; 3454 font-weight: 600; 3455 color: #fb923c; 3456 text-transform: uppercase; 3457 letter-spacing: 0.5px; 3458 margin-bottom: 4px; 3459 } 3460 3461 .ai-query-text { 3462 font-size: 15px; 3463 font-weight: 600; 3464 color: #1f2937; 3465 } 3466 3467 .ai-search-trigger-btn { 3468 width: 100%; 3469 padding: 14px 20px; 3470 background: linear-gradient(135deg, #fb923c 0%, #f97316 100%); 3471 color: white; 3472 border: none; 3473 border-radius: 10px; 3474 font-size: 15px; 3475 font-weight: 700; 3476 cursor: pointer; 3477 display: flex; 3478 align-items: center; 3479 justify-content: center; 3480 gap: 8px; 3481 transition: all 0.3s ease; 3482 box-shadow: 0 4px 12px rgba(251, 146, 60, 0.4); 3483 } 3484 3485 .ai-search-trigger-btn:hover { 3486 transform: translateY(-2px); 3487 box-shadow: 0 6px 20px rgba(251, 146, 60, 0.5); 3488 } 3489 3490 .ai-search-trigger-btn:active { 3491 transform: translateY(0); 3492 } 3493 3494 .ai-btn-icon { 3495 font-size: 18px; 3496 animation: sparkle 2s ease-in-out infinite; 3497 } 3498
3499 @keyframes sparkle { 3500 3501 0%, 3502 100% { 3503 opacity: 1; 3504 transform: scale(1); 3505 } 3506 3507 50% { 3508 opacity: 0.7; 3509 transform: scale(1.2); 3510 } 3511 } 3512 3513 .ai-btn-text { 3514 font-size: 15px; 3515 } 3516 3517 .ai-prompt-footer { 3518 margin-top: 12px; 3519 text-align: center; 3520 font-size: 12px; 3521 color: #9ca3af; 3522 font-style: italic; 3523 } 3524 3525 /* ==================== TRENDING SEARCH STYLES ==================== */ 3526 3527 .search-suggest.trending-mode { 3528 border-top: 3px solid #fb923c; 3529 max-width: 900px; 3530 min-width: 600px; 3531 } 3532 3533 /* Two-column container */ 3534 .trending-container { 3535 display: flex; 3536 gap: 0; 3537 padding: 0 !important; 3538 } 3539 3540 .trending-column { 3541 flex: 1; 3542 min-width: 0; 3543 padding: 0 !important; 3544 } 3545 3546 .trending-column.trending-searches { 3547 border-right: 2px solid #e2e8f0; 3548 padding: 0 !important; 3549 } 3550 3551 /* Mobile: stack columns vertically */ 3552 @media (max-width: 768px) { 3553 .search-suggest.trending-mode { 3554 min-width: auto; 3555 max-width: 100%; 3556 } 3557 3558 .trending-container { 3559 flex-direction: column; 3560 } 3561 3562 .trending-column.trending-searches { 3563 border-right: none; 3564 border-bottom: 2px solid #e2e8f0; 3565 } 3566 } 3567 3568 .trending-header { 3569 display: flex; 3570 align-items: center; 3571 gap: 8px; 3572 padding: 14px 16px; 3573 border-bottom: 1px solid #e2e8f0; 3574 background: linear-gradient(135deg, #fb923c 0%, #f97316 100%); 3575 color: white; 3576 position: sticky; 3577 top: 0; 3578 z-index: 10; 3579 } 3580 3581 .trending-icon { 3582 font-size: 20px; 3583 animation: trendingPulse 2s infinite; 3584 } 3585 3586 @keyframes trendingPulse { 3587 3588 0%, 3589 100% { 3590 transform: scale(1); 3591 filter: drop-shadow(0 0 0 rgba(251, 146, 60, 0)); 3592 } 3593 3594 50% { 3595 transform: scale(1.15); 3596 filter: drop-shadow(0 0 8px rgba(255, 255, 255, 0.8)); 3597 } 3598 } 3599 3600 .trending-title { 3601 font-weight: 700; 3602 font-size: 14px; 3603 letter-spacing: 0.3px; 3604 } 3605 3606 .trending-subtitle { 3607 font-size: 11px; 3608 opacity: 0.9; 3609 margin-left: auto; 3610 font-style: italic; 3611 } 3612 3613 /* Trending searches item */ 3614 .trending-item { 3615 display: flex; 3616 align-items: center; 3617 gap: 12px; 3618 padding: 12px 16px; 3619 cursor: pointer; 3620 transition: all 0.2s ease; 3621 border-bottom: 1px solid #f1f5f9; 3622 position: relative; 3623 } 3624 3625 .trending-item:hover { 3626 background: linear-gradient(90deg, #fff7ed 0%, #ffedd5 100%); 3627 padding-left: 20px; 3628 } 3629 3630 .trending-item:hover::before { 3631 content: ''; 3632 position: absolute; 3633 left: 0; 3634 top: 0; 3635 bottom: 0; 3636 width: 4px; 3637 background: linear-gradient(180deg, #fb923c 0%, #f97316 100%); 3638 } 3639 3640 .trending-item:last-child { 3641 border-bottom: none; 3642 } 3643 3644 .trending-rank { 3645 font-size: 20px; 3646 flex-shrink: 0; 3647 width: 32px; 3648 text-align: center; 3649 } 3650 3651 .trending-query { 3652 flex: 1; 3653 font-size: 14px; 3654 color: #1f2937; 3655 font-weight: 500; 3656 line-height: 1.4; 3657 } 3658 3659 .trending-category { 3660 font-size: 11px; 3661 color: #f97316; 3662 background: #fff7ed; 3663 padding: 3px 10px; 3664 border-radius: 12px; 3665 white-space: nowrap; 3666 font-weight: 500; 3667 border: 1px solid #fed7aa; 3668 } 3669 3670 /* Trending products item */ 3671 .trending-product-item { 3672 display: flex; 3673 align-items: center; 3674 gap: 12px; 3675 padding: 12px 16px; 3676 cursor: pointer; 3677 transition: all 0.2s ease; 3678 border-bottom: 1px solid #f1f5f9; 3679 position: relative; 3680 } 3681 3682 .trending-product-item:hover { 3683 background: linear-gradient(90deg, #fef3c7 0%, #fde68a 100%); 3684 padding-left: 20px; 3685 } 3686 3687 .trending-product-item:hover::before { 3688 content: ''; 3689 position: absolute; 3690 left: 0; 3691 top: 0; 3692 bottom: 0; 3693 width: 4px; 3694 background: linear-gradient(180deg, #fbbf24 0%, #f59e0b 100%); 3695 } 3696 3697 .trending-product-item:last-child { 3698 border-bottom: none; 3699 } 3700 3701 .trending-product-thumb { 3702 width: 48px; 3703 height: 48px; 3704 object-fit: cover; 3705 border-radius: 8px; 3706 border: 1px solid #e5e7eb; 3707 flex-shrink: 0; 3708 background: white; 3709 } 3710 3711 .trending-product-info { 3712 flex: 1; 3713 min-width: 0; 3714 } 3715 3716 .trending-product-name { 3717 font-size: 13px; 3718 font-weight: 400; 3719 color: #1f2937; 3720 line-height: 1.4; 3721 margin-bottom: 0; 3722 padding: 0 !important; 3723 overflow: hidden; 3724 text-overflow: ellipsis; 3725 display: -webkit-box; 3726 -webkit-line-clamp: 2; 3727 -webkit-box-orient: vertical; 3728 } 3729 3730 .trending-product-price { 3731 font-size: 12px; 3732 font-weight: 700; 3733 color: #f59e0b; 3734 padding: 4px 0 !important; 3735 } 3736 3737 .trending-product { 3738 padding: 0; 3739 } 3740 3741 /* ==================== END TRENDING STYLES ==================== */ 3742 /* === PRODUCT DETAIL v3 (Tokopedia-like) â Full stylesheet === */ 3743 3744 /* Root / Container */ 3745 .product-single { 3746 --pd-gap: 2rem; 3747 --pd-border: #e2e8f0; 3748 --pd-bg: #ffffff; 3749 --pd-muted: #64748b; 3750 --pd-dark: #0f172a; 3751 --pd-accent: #0d6efd; 3752 /* tema utama situs */ 3753 --pd-radius: 12px; 3754 --pd-soft: #f8fafc; 3755 --pd-soft-border: #e5e7eb; 3756 --pd-danger: #dc2626; 3757 --pd-success-bg: #dcfce7; 3758 --pd-success-text: #166534; 3759 --pd-danger-bg: #fee2e2; 3760 --pd-danger-text: #b91c1c; 3761 --pd-shadow: 0 6px 20px -10px rgba(0, 0, 0, .12); 3762 --pd-transition: .25s cubic-bezier(.4, .0, .2, 1); 3763 max-width: 1280px; 3764 margin-inline: auto; 3765 } 3766 3767 /* === Sticky Product Header Bar (muncul saat scroll) === */ 3768 .pd-sticky-header { 3769 position: fixed; 3770 top: 0; 3771 left: 0; 3772 right: 0; 3773 z-index: 998; 3774 background: rgba(255, 255, 255, 0.98); 3775 backdrop-filter: blur(12px); 3776 -webkit-backdrop-filter: blur(12px); 3777 border-bottom: 1px solid rgba(226, 232, 240, 0.8); 3778 box-shadow: 0 4px 16px -4px rgba(0, 0, 0, 0.08); 3779 transform: translateY(-100%); 3780 opacity: 0; 3781 transition: transform 0.3s cubic-bezier(0.4, 0, 0.2, 1), 3782 opacity 0.3s cubic-bezier(0.4, 0, 0.2, 1); 3783 pointer-events: none; 3784 } 3785 3786 .pd-sticky-header.visible { 3787 transform: translateY(0); 3788 opacity: 1; 3789 pointer-events: auto; 3790 } 3791 3792 .pd-sticky-header-container { 3793 max-width: 1280px; 3794 margin: 0 auto; 3795 padding: 12px 20px; 3796 display: flex; 3797 align-items: center; 3798 gap: 16px; 3799 } 3800 3801 .pd-sticky-thumb { 3802 width: 48px; 3803 height: 48px; 3804 flex-shrink: 0; 3805 border-radius: 8px; 3806 border: 1px solid #e2e8f0; 3807 overflow: hidden; 3808 background: #f8fafc; 3809 } 3810 3811 .pd-sticky-thumb img { 3812 width: 100%; 3813 height: 100%; 3814 object-fit: cover; 3815 display: block; 3816 } 3817 3818 .pd-sticky-info { 3819 flex: 1; 3820 min-width: 0; 3821 display: flex; 3822 flex-direction: column; 3823 gap: 4px; 3824 } 3825 3826 .pd-sticky-title { 3827 font-size: 0.9rem; 3828 font-weight: 600; 3829 color: #0f172a; 3830 line-height: 1.3; 3831 white-space: nowrap; 3832 overflow: hidden; 3833 text-overflow: ellipsis; 3834 margin: 0; 3835 } 3836 3837 .pd-sticky-price-row { 3838 display: flex; 3839 align-items: center; 3840 gap: 8px; 3841 flex-wrap: wrap; 3842 } 3843 3844 .pd-sticky-price { 3845 font-size: 1.1rem; 3846 font-weight: 700; 3847 color: #0d6efd; 3848 line-height: 1; 3849 } 3850 3851 .pd-sticky-price-original { 3852 font-size: 0.75rem; 3853 color: #94a3b8; 3854 text-decoration: line-through; 3855 line-height: 1; 3856 } 3857 3858 .pd-sticky-discount { 3859 background: #dc2626; 3860 color: #fff; 3861 font-size: 0.65rem; 3862 font-weight: 600; 3863 padding: 2px 6px; 3864 border-radius: 4px; 3865 letter-spacing: 0.3px; 3866 line-height: 1; 3867 } 3868 3869 .pd-sticky-actions { 3870 display: flex; 3871 gap: 8px; 3872 flex-shrink: 0; 3873 align-items: center; 3874 } 3875 3876 .pd-sticky-share-btn { 3877 padding: 8px 16px; 3878 border-radius: 8px; 3879 border: 1px solid #e2e8f0; 3880 background: #fff; 3881 color: #64748b; 3882 cursor: pointer; 3883 transition: all 0.2s ease; 3884 display: inline-flex; 3885 align-items: center; 3886 justify-content: center; 3887 flex-shrink: 0; 3888 } 3889 3890 .pd-sticky-share-btn:hover { 3891 background: #f8fafc; 3892 border-color: #cbd5e1; 3893 color: #0f172a; 3894 transform: translateY(-1px); 3895 } 3896 3897 .pd-sticky-share-btn:active { 3898 transform: translateY(0); 3899 } 3900 3901 .pd-sticky-share-btn svg { 3902 display: block; 3903 width: 16px; 3904 height: 16px; 3905 } 3906 3907 .pd-sticky-btn-chat svg { 3908 width: 16px !important; 3909 height: 16px !important; 3910 max-width: none !important; 3911 margin-right: 4px; 3912 flex-shrink: 0; 3913 } 3914 3915 .pd-sticky-btn { 3916 padding: 8px 16px; 3917 border-radius: 8px; 3918 font-size: 0.85rem; 3919 font-weight: 600; 3920 cursor: pointer; 3921 transition: all 0.2s ease; 3922 border: 0; 3923 display: inline-flex; 3924 align-items: center; 3925 justify-content: center; 3926 white-space: nowrap; 3927 } 3928 3929 .pd-sticky-btn-cart { 3930 background: #fff; 3931 color: #0d6efd; 3932 border: 1px solid #0d6efd; 3933 } 3934 3935 .pd-sticky-btn-cart:hover { 3936 background: rgba(13, 110, 253, 0.06); 3937 } 3938 3939 .pd-sticky-btn-chat { 3940 background: #fff; 3941 color: #64748b; 3942 border: 1px solid #cbd5e1; 3943 flex: 0.8; 3944 } 3945 3946 .pd-sticky-btn-chat:hover { 3947 background: #f8fafc; 3948 border-color: #94a3b8; 3949 color: #475569; 3950 } 3951 3952 .pd-sticky-btn-buy { 3953 background: #0d6efd; 3954 color: #fff; 3955 border: 1px solid #0d6efd; 3956 box-shadow: 0 2px 8px -2px rgba(13, 110, 253, 0.4); 3957 } 3958 3959 .pd-sticky-btn-buy:hover { 3960 filter: brightness(0.95); 3961 } 3962 3963 .pd-sticky-btn:disabled { 3964 opacity: 0.5;
3965 cursor: not-allowed; 3966 } 3967 3968 /* Hide on mobile (use existing FAB instead) */ 3969 @media (max-width: 880px) { 3970 .pd-sticky-header { 3971 display: none; 3972 } 3973 } 3974 3975 /* === PRINT STYLES (for PDF Export) === */ 3976 @media print { 3977 3978 /* Reset & Base */ 3979 * { 3980 -webkit-print-color-adjust: exact !important; 3981 print-color-adjust: exact !important; 3982 } 3983 3984 body { 3985 background: white !important; 3986 margin: 0; 3987 padding: 0; 3988 } 3989 3990 /* Hide all navigation, buttons, and interactive elements */ 3991 nav, 3992 header, 3993 footer, 3994 nav *, 3995 header *, 3996 footer *, 3997 .navbar, 3998 .navbar *, 3999 .nav-item, 4000 .nav-link, 4001 .pd-sticky-header, 4002 .pd-sticky-header.visible, 4003 .pd-breadcrumb, 4004 .pd-sidebar, 4005 .pd-mobile-fab, 4006 .pd-share-btn, 4007 .pd-sticky-share-btn, 4008 #pd-share-btn, 4009 .share-button, 4010 [data-share-btn], 4011 button, 4012 .btn-add-cart, 4013 .btn-buy, 4014 .pd-actions, 4015 .pd-compare-section, 4016 .pd-compare-btn, 4017 .pd-compare-info, 4018 #pd-compare-btn, 4019 .compare-note, 4020 .compare-container, 4021 .compare-dropdown, 4022 .compare-panel, 4023 .compare-wrapper, 4024 [data-compare], 4025 [id*="compare"], 4026 [class*="compare"], 4027 .pd-thumb-gallery, 4028 .pd-installment-card, 4029 .pd-installment-card2, 4030 .inst-alt-banner--compact, 4031 .qoala-banner-card, 4032 .tradein-compact-card, 4033 .pwp-deals-section, 4034 #pwp-deals-section, 4035 .pwp-trigger-badge, 4036 .pd-related-full, 4037 .pd-scroll-top, 4038 .stock-info-btn, 4039 .stock-popover, 4040 .pd-countdown-modern, 4041 .pd-share-modal-overlay, 4042 [id*="promo-"], 4043 .bottom-nav, 4044 .pd-buy-form, 4045 .pd-buy-card, 4046 .pd-extra-meta, 4047 .pd-reviews-section, 4048 #reviews, 4049 hr, 4050 .divider, 4051 .separator { 4052 display: none !important; 4053 visibility: hidden !important; 4054 opacity: 0 !important; 4055 height: 0 !important; 4056 max-height: 0 !important; 4057 overflow: hidden !important; 4058 margin: 0 !important; 4059 padding: 0 !important; 4060 border: none !important; 4061 } 4062 4063 /* Extra aggressive reset for any remaining borders */ 4064 .pd-info-card *, 4065 .pd-meta-inline *, 4066 .pd-variants * { 4067 border: none !important; 4068 border-top: none !important; 4069 border-bottom: none !important; 4070 } 4071 4072 /* Layout restructure */ 4073 .product-single { 4074 max-width: 100% !important; 4075 margin: 0 !important; 4076 padding: 0 !important; 4077 box-shadow: none !important; 4078 } 4079 4080 /* Reset all shadows and borders for print */ 4081 * { 4082 box-shadow: none !important; 4083 } 4084 4085 .pd-top-layout { 4086 display: grid !important; 4087 grid-template-columns: 280px 1fr !important; 4088 gap: 24px !important; 4089 margin: 0 0 24px 0 !important; 4090 padding: 0 !important; 4091 page-break-inside: avoid; 4092 align-items: start !important; 4093 } 4094 4095 /* Print header with logo - centered and larger */ 4096 .product-single::before { 4097 content: "" !important; 4098 display: block !important; 4099 width: 150px !important; 4100 height: 50px !important; 4101 background: url('/assets/img/logo.png') no-repeat center !important; 4102 background-size: contain !important; 4103 margin: 0 auto 20px !important; 4104 visibility: visible !important; 4105 opacity: 1 !important; 4106 } 4107 4108 /* Media card - left column */ 4109 .pd-media-card { 4110 border: none !important; 4111 padding: 0 !important; 4112 margin: 0 !important; 4113 text-align: center; 4114 page-break-inside: avoid; 4115 } 4116 4117 /* Hide desktop image, use mobile slider for both desktop and mobile */ 4118 .pd-main-image { 4119 display: none !important; 4120 } 4121 4122 /* Mobile slider - show first image only in print */ 4123 .pd-mobile-slider { 4124 display: block !important; 4125 overflow: visible !important; 4126 } 4127 4128 .pd-mslide { 4129 display: none !important; 4130 } 4131 4132 .pd-mslide:first-child { 4133 display: block !important; 4134 border: 1px solid #e2e8f0 !important; 4135 max-width: 280px !important; 4136 margin: 0 auto !important; 4137 border-radius: 8px !important; 4138 } 4139 4140 .pd-mslide:first-child img { 4141 max-height: 280px !important; 4142 width: 100% !important; 4143 height: auto !important; 4144 object-fit: contain !important; 4145 } 4146 4147 /* Info card - right column */ 4148 .pd-info-card { 4149 border: none !important; 4150 border-top: none !important; 4151 border-bottom: none !important; 4152 padding: 0 !important; 4153 margin: 0 !important; 4154 background: white !important; 4155 box-shadow: none !important; 4156 } 4157 4158 /* Title */ 4159 .pd-title-row { 4160 display: block !important; 4161 margin-bottom: 10px !important; 4162 border: none !important; 4163 border-top: none !important; 4164 border-bottom: none !important; 4165 padding: 0 !important; 4166 box-shadow: none !important; 4167 text-decoration: none !important; 4168 } 4169 4170 /* Hide share button in print */ 4171 .pd-title-row .pd-share-btn, 4172 .pd-title-row #pd-share-btn { 4173 display: none !important; 4174 } 4175 4176 .pd-title { 4177 font-size: 13pt !important; 4178 color: #000 !important; 4179 margin: 0 0 10px 0 !important; 4180 page-break-after: avoid; 4181 font-weight: 700 !important; 4182 line-height: 1.3 !important; 4183 border: none !important; 4184 border-top: none !important; 4185 border-bottom: none !important; 4186 padding-bottom: 0 !important; 4187 box-shadow: none !important; 4188 text-decoration: none !important; 4189 } 4190 4191 /* Price and QR container - side by side */ 4192 .pd-price-qr-container { 4193 display: flex !important; 4194 gap: 16px !important; 4195 align-items: flex-start !important; 4196 margin-bottom: 14px !important; 4197 box-shadow: none !important; 4198 border: none !important; 4199 text-decoration: none !important; 4200 } 4201 4202 /* Price block - left side */ 4203 .pd-price-block { 4204 flex: 1 !important; 4205 margin: 0 !important; 4206 padding-bottom: 0 !important; 4207 border-bottom: none !important; 4208 box-shadow: none !important; 4209 } 4210 4211 .pd-price-row { 4212 margin-bottom: 8px !important; 4213 border: none !important; 4214 border-top: none !important; 4215 border-bottom: none !important; 4216 padding: 0 !important; 4217 } 4218 4219 /* Hide all empty or unnecessary elements in price row */ 4220 .pd-price-row>span:empty, 4221 .pd-price-row>.sold-inline, 4222 #pd-sold-inline { 4223 display: none !important; 4224 } 4225 4226 .pd-price-current { 4227 font-size: 18pt !important; 4228 color: #0d6efd !important; 4229 } 4230 4231 /* Show price range for variant products in print */ 4232 .pd-price-current[data-price-range]::after { 4233 content: attr(data-price-range) !important; 4234 display: block !important; 4235 font-size: 11pt !important; 4236 color: #64748b !important; 4237 margin-top: 4px !important; 4238 font-weight: normal !important; 4239 } 4240 4241 /* Hide 'Range:' prefix text */ 4242 .pd-price-current[data-price-range]::after { 4243 content: attr(data-price-range) !important; 4244 } 4245 4246 .pd-price-original { 4247 font-size: 12pt !important; 4248 color: #64748b !important; 4249 } 4250 4251 .pd-discount-badge { 4252 font-size: 10pt !important; 4253 padding: 2px 6px !important; 4254 } 4255 4256 /* QR Code section - right side beside price */ 4257 .pd-qr-print { 4258 display: block !important; 4259 flex: 0 0 100px !important; 4260 margin: 0 !important; 4261 padding: 8px !important; 4262 background: #f8fafc !important; 4263 border-radius: 8px !important; 4264 text-align: center !important; 4265 page-break-inside: avoid !important; 4266 border: 1px solid #cbd5e1 !important; 4267 } 4268 4269 .pd-qr-label { 4270 font-size: 6.5pt !important; 4271 color: #64748b !important; 4272 margin-bottom: 5px !important; 4273 line-height: 1.2 !important; 4274 font-weight: 600 !important; 4275 } 4276 4277 .pd-qr-image { 4278 width: 80px !important; 4279 height: 80px !important; 4280 display: block !important; 4281 margin: 0 auto !important; 4282 } 4283 4284 /* Meta info */ 4285 .pd-meta-inline { 4286 display: flex !important; 4287 gap: 12px !important; 4288 margin-bottom: 0 !important; 4289 padding-bottom: 14px !important; 4290 font-size: 10pt !important; 4291 border: none !important; 4292 border-top: none !important; 4293 border-bottom: none !important; 4294 padding-top: 0 !important; 4295 box-shadow: none !important; 4296 text-decoration: none !important; 4297 background: transparent !important; 4298 } 4299 4300 /* Hide stock badge in print */ 4301 .stock-badge, 4302 .stock-info-btn { 4303 display: none !important; 4304 } 4305 4306 .sku { 4307 color: #64748b !important; 4308 } 4309 4310 /* Hide sold badge if empty/zero */ 4311 .sold-inline { 4312 display: none !important; 4313 } 4314 4315 /* Hide variant summary section in print */ 4316 .pd-variant-combined, 4317 #pd-variant-combined, 4318 .pd-variant-summary, 4319 [data-role="sold-chip"] { 4320 display: none !important; 4321 } 4322 4323 /* Hide compare section completely in print */ 4324 .pd-compare-section, 4325 .pd-compare-btn, 4326 #pd-compare-btn, 4327 .pd-compare-info, 4328 .compare-note, 4329 .compare-text, 4330 .compare-remove { 4331 display: none !important; 4332 visibility: hidden !important; 4333 height: 0 !important; 4334 margin: 0 !important; 4335 padding: 0 !important; 4336 overflow: hidden !important; 4337 } 4338 4339 /* Variants - show all options with selected highlighted */ 4340 .pd-variants { 4341 margin: 0 !important; 4342 padding: 0 !important; 4343 page-break-inside: avoid !important; 4344 border: none !important; 4345 border-top: none !important; 4346 border-bottom: none !important; 4347 box-shadow: none !important; 4348 background: transparent !important; 4349 } 4350 4351 /* Add 'Variant:' label before variant groups */ 4352 .pd-variants::before { 4353 content: "Variant:" !important; 4354 display: block !important; 4355 font-size: 11pt !important; 4356 font-weight: 700 !important; 4357 color: #0f172a !important; 4358 margin-bottom: 10px !important; 4359 border: none !important; 4360 padding: 0 !important; 4361 border-top: none !important; 4362 border-bottom: none !important; 4363 } 4364 4365 .v-group { 4366 display: flex !important; 4367 align-items: center !important; 4368 gap: 8px !important; 4369 margin-bottom: 8px !important; 4370 line-height: 1 !important; 4371 page-break-inside: avoid !important; 4372 border: none !important; 4373 padding: 0 !important; 4374 } 4375 4376 .v-group:last-child { 4377 margin-bottom: 0 !important; 4378 } 4379 4380 .v-label { 4381 font-weight: 700 !important; 4382 margin: 0 !important; 4383 font-size: 9pt !important; 4384 color: #475569 !important; 4385 min-width: 60px !important; 4386 flex-shrink: 0 !important; 4387 border: none !important; 4388 padding: 0 !important; 4389 } 4390 4391 .v-options { 4392 display: flex !important; 4393 gap: 6px !important; 4394 flex-wrap: wrap !important; 4395 border: none !important; 4396 padding: 0 !important; 4397 margin: 0 !important; 4398 } 4399 4400 .v-chip { 4401 border: 1px solid #cbd5e1 !important; 4402 padding: 3px 10px !important; 4403 font-size: 9pt !important; 4404 background: #f8fafc !important; 4405 border-radius: 6px !important; 4406 display: inline-flex !important; 4407 align-items: center !important; 4408 page-break-inside: avoid !important; 4409 } 4410 4411 /* Highlight selected variant with blue background */ 4412 .v-chip.selected { 4413 background: #eff6ff !important; 4414 border-color: #2563eb !important; 4415 font-weight: 600 !important; 4416 } 4417 4418 /* Hide radio inputs */ 4419 .v-chip input[type="radio"] { 4420 display: none !important; 4421 } 4422 4423 /* Hide "Habis" badge in print */ 4424 .v-chip .chip-badge { 4425 display: none !important; 4426 } 4427 4428 /* Short description - HIDDEN in print */ 4429 .pd-short-desc { 4430 display: none !important; 4431 } 4432 4433 /* QR Code section - right side beside price */ 4434 .pd-qr-print { 4435 display: block !important; 4436 flex: 0 0 100px !important; 4437 margin: 0 !important; 4438 padding: 8px !important; 4439 background: #f8fafc !important; 4440 border-radius: 8px !important; 4441 text-align: center !important; 4442 page-break-inside: avoid !important; 4443 border: 1px solid #cbd5e1 !important; 4444 } 4445 4446 .pd-qr-label { 4447 font-size: 6.5pt !important; 4448 color: #64748b !important; 4449 margin-bottom: 5px !important; 4450 line-height: 1.2 !important; 4451 font-weight: 600 !important; 4452 } 4453 4454 .pd-qr-image { 4455 width: 80px !important; 4456 height: 80px !important; 4457 display: block !important; 4458 margin: 0 auto !important; 4459 } 4460 4461 /* Full description - below 2 column layout */ 4462 .pd-full-description { 4463 border: none !important; 4464 padding: 0 !important; 4465 margin: 24px 0 0 0 !important; 4466 page-break-before: avoid; 4467 grid-column: 1 / -1 !important; 4468 } 4469 4470 .pd-full-desc-title { 4471 font-size: 13pt !important; 4472 font-weight: 700 !important; 4473 margin: 0 0 12px 0 !important; 4474 color: #000 !important; 4475 border-top: none !important; 4476 border-bottom: none !important; 4477 padding-top: 16px !important; 4478 } 4479 4480 .pd-full-desc-body { 4481 font-size: 10pt !important; 4482 line-height: 1.6 !important; 4483 color: #334155 !important; 4484 } 4485 4486 .pd-full-desc-body img { 4487 max-height: 200px !important; 4488 width: auto !important; 4489 page-break-inside: avoid; 4490 display: none !important; 4491 /* Hide images in print to save space */ 4492 } 4493 4494 /* Also target #deskripsi img if exists */
4495 #deskripsi img { 4496 max-width: 350px !important; 4497 height: auto !important; 4498 } 4499 4500 .pd-full-desc-body table { 4501 border-collapse: collapse !important; 4502 width: 100% !important; 4503 margin: 12px 0 !important; 4504 font-size: 9pt !important; 4505 } 4506 4507 .pd-full-desc-body th, 4508 .pd-full-desc-body td { 4509 border: 1px solid #cbd5e1 !important; 4510 padding: 6px 8px !important; 4511 } 4512 4513 /* Print footer */ 4514 .product-single::after { 4515 content: "Plaza IT - plazait.co.id | Printed: " attr(data-print-date); 4516 display: block; 4517 margin-top: 30px; 4518 padding-top: 16px; 4519 border-top: 1px solid #e2e8f0; 4520 font-size: 9pt; 4521 color: #64748b; 4522 text-align: center; 4523 } 4524 4525 /* Page breaks */ 4526 .pd-media-card, 4527 .pd-price-block, 4528 .pd-full-desc-title { 4529 page-break-after: avoid; 4530 } 4531 4532 .pd-full-description { 4533 page-break-before: auto; 4534 } 4535 } 4536 4537 /* === Breadcrumb (truncate last item) === */ 4538 .pd-breadcrumb { 4539 display: flex; 4540 flex-wrap: nowrap; 4541 align-items: center; 4542 gap: .5rem; 4543 font-size: .72rem; 4544 margin: .7rem 0 1.2rem .5rem; 4545 color: var(--pd-muted); 4546 overflow: hidden; 4547 } 4548 4549 .pd-breadcrumb a { 4550 color: var(--pd-accent); 4551 text-decoration: none 4552 } 4553 4554 .pd-breadcrumb a:hover { 4555 text-decoration: underline 4556 } 4557 4558 .pd-breadcrumb a, 4559 .pd-breadcrumb span { 4560 flex: 0 0 auto 4561 } 4562 4563 .pd-breadcrumb .current { 4564 flex: 1 1 auto; 4565 min-width: 0; 4566 white-space: nowrap; 4567 overflow: hidden; 4568 text-overflow: ellipsis; 4569 font-weight: 600; 4570 color: var(--pd-dark); 4571 padding-right: 2px; 4572 } 4573 4574 /* === Top layout === */ 4575 .pd-top-layout { 4576 display: grid; 4577 gap: var(--pd-gap); 4578 grid-template-columns: minmax(260px, 340px) minmax(460px, 1fr) 300px; 4579 align-items: start; 4580 margin-bottom: 2.4rem; 4581 } 4582 4583 4584 /* === Media column === */ 4585 .pd-media-card { 4586 background: #fff; 4587 border: 1px solid var(--pd-border); 4588 border-radius: var(--pd-radius); 4589 padding: 1rem 1rem 1.2rem; 4590 } 4591 4592 .pd-main-image { 4593 margin: 0 0 .8rem; 4594 border: 1px solid var(--pd-soft-border); 4595 border-radius: 10px; 4596 overflow: hidden; 4597 background: #fff; 4598 position: relative 4599 } 4600 4601 .pd-main-image img { 4602 width: 100%; 4603 display: block; 4604 object-fit: contain; 4605 aspect-ratio: 1/1 4606 } 4607 4608 /* Gallery Thumbnails */ 4609 .pd-thumb-gallery { 4610 margin-top: .6rem; 4611 display: flex; 4612 flex-wrap: wrap; 4613 gap: .55rem 4614 } 4615 4616 .pd-thumb-btn { 4617 border: 1px solid var(--pd-soft-border); 4618 background: #fff; 4619 cursor: pointer; 4620 width: 64px; 4621 height: 64px; 4622 padding: 2px; 4623 display: flex; 4624 align-items: center; 4625 justify-content: center; 4626 overflow: hidden; 4627 border-radius: 8px; 4628 transition: border-color .18s ease, box-shadow .18s ease, transform .18s ease; 4629 position: relative; 4630 } 4631 4632 .pd-thumb-btn img { 4633 max-width: 100%; 4634 max-height: 100%; 4635 object-fit: contain; 4636 display: block 4637 } 4638 4639 .pd-thumb-btn:hover { 4640 border-color: var(--pd-accent) 4641 } 4642 4643 .pd-thumb-btn.active { 4644 border-color: var(--pd-accent); 4645 box-shadow: 0 0 0 2px rgba(13, 110, 253, .25) 4646 } 4647 4648 .pd-thumb-btn:focus-visible { 4649 outline: 2px solid var(--pd-accent); 4650 outline-offset: 2px 4651 } 4652 4653 .pd-thumb-btn:active { 4654 transform: scale(.96) 4655 } 4656 4657 /* === Info column === */ 4658 .pd-info-card { 4659 background: #fff; 4660 border: 1px solid var(--pd-border); 4661 border-radius: var(--pd-radius); 4662 padding: 1.4rem 1.6rem 2rem; 4663 } 4664 4665 .pd-title { 4666 font-size: 1.5em; 4667 line-height: 3.25; 4668 font-weight: 600; 4669 color: black; 4670 font-family: 'Orbitron', sans-serif; 4671 } 4672 4673 .pd-price-block { 4674 margin: 0 0 1rem 4675 } 4676 4677 .pd-price-row { 4678 display: flex; 4679 flex-wrap: wrap; 4680 align-items: center; 4681 gap: .75rem; 4682 margin: 0 0 .35rem 4683 } 4684 4685 .pd-price-current { 4686 font-size: 2rem; 4687 font-weight: 700; 4688 color: var(--pd-accent) 4689 } 4690 4691 .pd-price-original { 4692 font-size: .9rem; 4693 text-decoration: line-through; 4694 color: #94a3b8 4695 } 4696 4697 .pd-discount-badge { 4698 background: var(--pd-danger); 4699 color: #fff; 4700 font-size: .68rem; 4701 padding: 4px 8px 3px; 4702 font-weight: 600; 4703 border-radius: 6px; 4704 letter-spacing: .5px 4705 } 4706 4707 .pd-meta-inline { 4708 display: flex; 4709 flex-wrap: wrap; 4710 gap: .9rem; 4711 align-items: center; 4712 font-size: .63rem; 4713 letter-spacing: .6px; 4714 text-transform: uppercase; 4715 font-weight: 600 4716 } 4717 4718 .stock-badge { 4719 padding: 4px 10px; 4720 border-radius: 24px; 4721 background: var(--pd-soft); 4722 color: var(--pd-muted); 4723 display: inline-block; 4724 line-height: 1; 4725 vertical-align: middle 4726 } 4727 4728 .stock-badge.in { 4729 background: var(--pd-success-bg); 4730 color: var(--pd-success-text) 4731 } 4732 4733 .stock-badge.out { 4734 background: var(--pd-danger-bg); 4735 color: var(--pd-danger-text) 4736 } 4737 4738 .digital-badge { 4739 padding: 4px 10px; 4740 border-radius: 24px; 4741 background: linear-gradient(135deg, #FF5722 0%, #764ba2 100%); 4742 color: #fff; 4743 font-size: .63rem; 4744 font-weight: 600; 4745 letter-spacing: .6px; 4746 text-transform: uppercase; 4747 display: inline-block; 4748 line-height: 1; 4749 vertical-align: middle; 4750 border: none 4751 } 4752 4753 .sku { 4754 color: var(--pd-muted) 4755 } 4756 4757 .pd-short-desc { 4758 font-size: .85rem; 4759 line-height: 1.5; 4760 margin: 0 0 1.2rem; 4761 color: #334155;
4762 overflow-wrap: anywhere 4763 } 4764 4765 .pd-short-desc p { 4766 margin: 0 0 .75rem 4767 } 4768 4769 .pd-short-desc ul, 4770 .pd-short-desc ol { 4771 margin: .5rem 0 .9rem 1.1rem; 4772 font-size: .85rem; 4773 line-height: 1.45 4774 } 4775 4776 /* Meta row for sold and rating badges */ 4777 .pd-meta-row { 4778 display: flex; 4779 align-items: center; 4780 flex-wrap: wrap; 4781 gap: 5px; 4782 margin-top: 8px; 4783 margin-bottom: 4px; 4784 } 4785 4786 /* Sales (Terjual) badge inline */ 4787 .sold-inline { 4788 display: inline-block; 4789 font-size: .65rem; 4790 font-weight: 600; 4791 color: #475569; 4792 background: #f1f5f9; 4793 padding: 3px 8px 4px; 4794 border-radius: 6px; 4795 letter-spacing: .4px; 4796 margin-left: 0; 4797 } 4798 4799 /* Price row divider */ 4800 .price-divider { 4801 display: inline-block; 4802 margin: 0 .4rem; 4803 color: #cbd5e1; 4804 font-weight: 400; 4805 } 4806 4807 /* Rating badge inline */ 4808 .rating-inline { 4809 display: inline-flex; 4810 align-items: center; 4811 gap: 4px; 4812 padding: 3px 8px 4px; 4813 background: #fff7ed; 4814 border-radius: 6px; 4815 font-size: .65rem; 4816 font-weight: 600; 4817 color: #ea580c; 4818 text-decoration: none; 4819 transition: all .2s ease; 4820 cursor: pointer; 4821 margin-left: .5rem; 4822 white-space: nowrap; 4823 } 4824 4825 .rating-inline:hover { 4826 background: #ffedd5; 4827 transform: translateY(-1px); 4828 box-shadow: 0 2px 4px rgba(234, 88, 12, 0.1); 4829 } 4830 4831 .rating-inline .star-icon { 4832 font-size: .75rem; 4833 color: #f59e0b; 4834 line-height: 1; 4835 } 4836 4837 .rating-inline .rating-value { 4838 color: #ea580c; 4839 } 4840 4841 .rating-inline .rating-badge-count { 4842 color: #9a3412; 4843 opacity: 0.85; 4844 } 4845 4846 @media (max-width: 640px) { 4847 .rating-inline { 4848 font-size: .65rem; 4849 padding: 3px 8px 4px; 4850 } 4851 4852 .rating-inline .star-icon { 4853 font-size: .7rem; 4854 } 4855 } 4856 4857 /* Highlight animation for review section */ 4858 @keyframes highlightFlash { 4859 4860 0%, 4861 100% { 4862 background-color: transparent; 4863 } 4864 4865 50% { 4866 background-color: rgba(251, 146, 60, 0.1); 4867 } 4868 } 4869 4870 .highlight-flash { 4871 animation: highlightFlash 1.5s ease; 4872 } 4873 4874 /* === Variant chips === */ 4875 .pd-variants { 4876 margin-top: 14px 4877 } 4878 4879 .v-group { 4880 margin-bottom: 12px 4881 } 4882 4883 .v-label { 4884 font-weight: 600; 4885 margin-bottom: 6px 4886 } 4887 4888 .v-options { 4889 display: flex; 4890 flex-wrap: wrap; 4891 gap: 8px 4892 } 4893 4894 .v-chip { 4895 display: inline-flex; 4896 align-items: center; 4897 gap: 8px; 4898 padding: 6px 10px; 4899 border: 1px solid #d6d9de; 4900 border-radius: 999px; 4901 cursor: pointer; 4902 background: #fff; 4903 transition: .15s ease; 4904 user-select: none 4905 } 4906 4907 .v-chip:hover { 4908 border-color: #9aa3af; 4909 box-shadow: 0 1px 0 rgba(0, 0, 0, .04) 4910 } 4911 4912 .v-chip.selected { 4913 border-color: #2563eb; 4914 background: #eff6ff 4915 } 4916 4917 .v-chip.disabled { 4918 opacity: .45; 4919 cursor: not-allowed 4920 } 4921 4922 .v-chip.out { 4923 border-style: dashed 4924 } 4925 4926 .v-chip input { 4927 display: none 4928 } 4929 4930 .v-chip .dot { 4931 width: 14px; 4932 height: 14px; 4933 border-radius: 50%; 4934 background: var(--dot, #999); 4935 box-shadow: inset 0 0 0 1px rgba(0, 0, 0, .2) 4936 } 4937 4938 .v-chip .dot--neutral { 4939 background: #9aa3af 4940 } 4941 4942 .v-chip .txt { 4943 font-size: .95rem; 4944 white-space: nowrap 4945 } 4946 4947 .v-chip .chip-badge { 4948 margin-left: 2px; 4949 font-size: .72rem; 4950 line-height: 1; 4951 padding: 3px 6px; 4952 border-radius: 6px; 4953 background: #fee2e2; 4954 color: #991b1b; 4955 border: 1px solid #fecaca 4956 } 4957 4958 .pd-variant-summary { 4959 margin-top: 8px; 4960 color: #475569; 4961 font-size: .92rem 4962 } 4963 4964 .pd-variant-summary .vs-item { 4965 display: inline-flex; 4966 gap: 4px; 4967 margin-right: 10px 4968 } 4969 4970 /* === Buy form (di sidebar kanan untuk desktop) === */ 4971 .pd-buy-form { 4972 display: flex; 4973 flex-wrap: wrap; 4974 align-items: flex-end; 4975 gap: 1rem 1.4rem; 4976 margin: 0 4977 } 4978 4979 .qty-label { 4980 display: block; 4981 font-size: .6rem; 4982 font-weight: 600; 4983 letter-spacing: .7px; 4984 text-transform: uppercase; 4985 color: var(--pd-muted); 4986 margin-bottom: .35rem 4987 } 4988 4989 .pd-buy-form input[type=number] { 4990 width: 90px; 4991 padding: .55rem .6rem; 4992 border: 1px solid var(--pd-soft-border); 4993 border-radius: 6px; 4994 font-size: .85rem 4995 } 4996 4997 .pd-actions { 4998 display: flex; 4999 gap: .8rem; 5000 flex-wrap: wrap 5001 } 5002 5003 /* Tombol senada tema */ 5004 .btn-add-cart, 5005 .btn-buy, 5006 .btn-chat-icon { 5007 cursor: pointer; 5008 border: 0; 5009 font-weight: 700; 5010 border-radius: 10px; 5011 font-size: .9rem; 5012 display: inline-flex; 5013 align-items: center; 5014 justify-content: center; 5015 gap: .4rem; 5016 min-height: 44px; 5017 padding: 0 1rem; 5018 transition: var(--pd-transition) 5019 } 5020 5021 .btn-add-cart { 5022 background: var(--brand-500); 5023 color: #fff; 5024 box-shadow: 0 2px 8px -2px rgba(13, 110, 253, .35) 5025 } 5026 5027 .btn-add-cart:hover { 5028 filter: brightness(.95) 5029 } 5030 5031 .btn-buy { 5032 background: #fff; 5033 color: var(--brand-500); 5034 border: 2px solid var(--brand-500) 5035 } 5036 5037 .btn-buy:hover { 5038 background: rgba(13, 110, 253, .06) 5039 } 5040 5041 .btn-chat-icon { 5042 background: #fff; 5043 color: #fb923c; 5044 border: 2px solid #fb923c; 5045 padding: 0; 5046 width: 44px; 5047 min-width: 44px 5048 } 5049 5050 .btn-chat-icon:hover { 5051 background: rgba(251, 146, 60, 0.06); 5052 border-color: #f97316 5053 } 5054 5055 .btn-chat-icon svg {
5056 width: 20px; 5057 height: 20px; 5058 flex-shrink: 0 5059 } 5060 5061 .btn-add-cart:disabled, 5062 .btn-buy:disabled, 5063 .btn-chat-icon:disabled { 5064 opacity: .5; 5065 cursor: not-allowed 5066 } 5067 5068 /* Buy with Voucher Button - Cleaner, more compact design */ 5069 .btn-buy-voucher { 5070 cursor: pointer; 5071 border: 0; 5072 font-weight: 600; 5073 border-radius: 10px; 5074 display: inline-flex; 5075 align-items: center; 5076 justify-content: space-between; 5077 gap: 10px; 5078 min-height: 44px; 5079 padding: 0 14px 0 12px; 5080 transition: all 0.3s ease; 5081 background: linear-gradient(135deg, #7c3aed 0%, #9333ea 100%); 5082 color: #fff; 5083 box-shadow: 0 3px 10px rgba(124, 58, 237, 0.3); 5084 position: relative; 5085 overflow: hidden; 5086 flex: 1 1 auto 5087 } 5088 5089 .btn-buy-voucher:hover { 5090 transform: translateY(-2px); 5091 box-shadow: 0 5px 16px rgba(124, 58, 237, 0.4) 5092 } 5093 5094 .btn-buy-voucher:active { 5095 transform: translateY(0); 5096 box-shadow: 0 2px 6px rgba(124, 58, 237, 0.3) 5097 } 5098 5099 .btn-buy-voucher .bv-icon { 5100 font-size: 20px; 5101 line-height: 1; 5102 flex-shrink: 0 5103 } 5104 5105 .btn-buy-voucher .bv-text { 5106 display: flex; 5107 flex-direction: column; 5108 align-items: flex-start; 5109 gap: 2px; 5110 flex: 1; 5111 min-width: 0; 5112 font-size: 14px; 5113 line-height: 1.2 5114 } 5115 5116 .btn-buy-voucher .bv-text small { 5117 font-size: 10px; 5118 opacity: 0.85; 5119 font-weight: 500; 5120 letter-spacing: 0.3px; 5121 font-family: monospace 5122 } 5123 5124 .btn-buy-voucher .bv-save { 5125 font-size: 12px; 5126 font-weight: 700; 5127 background: rgba(255, 255, 255, 0.25); 5128 padding: 4px 8px; 5129 border-radius: 6px; 5130 white-space: nowrap; 5131 flex-shrink: 0 5132 } 5133 5134 /* Extra meta (opsional) */ 5135 .pd-extra-meta { 5136 background: var(--pd-soft); 5137 border: 1px solid var(--pd-border); 5138 border-radius: 10px; 5139 padding: .85rem 1rem; 5140 display: grid; 5141 gap: .45rem; 5142 font-size: .7rem; 5143 line-height: 1.3 5144 } 5145 5146 .pd-extra-meta span { 5147 font-weight: 600; 5148 color: var(--pd-muted); 5149 margin-right: .3rem 5150 } 5151 5152 .pd-extra-meta a { 5153 color: var(--pd-accent); 5154 text-decoration: none 5155 } 5156 5157 .pd-extra-meta a:hover { 5158 text-decoration: underline 5159 } 5160 5161 /* === Sidebar === */ 5162 .pd-sidebar { 5163 display: flex; 5164 flex-direction: column; 5165 gap: 1.2rem 5166 } 5167 5168 .pd-side-card { 5169 background: #fff; 5170 border: 1px solid var(--pd-border); 5171 border-radius: var(--pd-radius); 5172 padding: 1rem 1.1rem 1.2rem 5173 } 5174 5175 .pd-side-card h3 { 5176 margin: 0 0 .7rem; 5177 font-size: .8rem; 5178 font-weight: 700; 5179 letter-spacing: .6px; 5180 text-transform: uppercase; 5181 color: var(--pd-dark) 5182 } 5183 5184 .pd-side-card ul { 5185 list-style: none; 5186 margin: 0; 5187 padding: 0; 5188 display: grid; 5189 gap: .45rem; 5190 font-size: .7rem; 5191 color: #334155 5192 } 5193 5194 .pd-side-card li { 5195 position: relative; 5196 padding-left: 13px; 5197 line-height: 1.25 5198 } 5199 5200 .pd-side-card li:before { 5201 content: ''; 5202 width: 6px; 5203 height: 6px; 5204 background: var(--pd-accent); 5205 border-radius: 50%; 5206 position: absolute; 5207 left: 0; 5208 top: .45rem 5209 } 5210 5211 .pay-logos { 5212 display: flex; 5213 gap: .4rem; 5214 flex-wrap: wrap; 5215 margin: .1rem 0 .4rem 5216 } 5217 5218 .pay-logos span { 5219 font-size: .55rem; 5220 background: var(--pd-soft); 5221 border: 1px solid var(--pd-soft-border); 5222 padding: .35rem .55rem; 5223 border-radius: 6px; 5224 font-weight: 600; 5225 letter-spacing: .5px 5226 } 5227 5228 /* Buy card hanya desktop (mobile pakai FAB) */ 5229 .pd-buy-card { 5230 display: block 5231 } 5232 5233 @media (max-width:880px) { 5234 .pd-buy-card { 5235 display: none 5236 } 5237 5238 .pd-title-row { 5239 padding-right: 0 !important; 5240 } 5241 } 5242 5243 /* === Full Description === */ 5244 .pd-full-description { 5245 background: #fff; 5246 border: 1px solid var(--pd-border); 5247 border-radius: var(--pd-radius); 5248 padding: 1.6rem 1.9rem .6rem; 5249 margin: 0 0 .8rem 5250 } 5251 5252 .pd-full-desc-title { 5253 margin: 0 0 1.1rem; 5254 font-size: 1.15rem; 5255 font-weight: 600; 5256 color: var(--pd-dark) 5257 } 5258 5259 .pd-full-desc-body { 5260 font-size: .9rem; 5261 line-height: 1.6; 5262 color: #334155;
5263 overflow-wrap: anywhere 5264 } 5265 5266 .pd-full-desc-body p { 5267 margin: 0 0 1rem 5268 } 5269 5270 .pd-full-desc-body ul, 5271 .pd-full-desc-body ol { 5272 margin: .5rem 0 1rem 1.2rem 5273 } 5274 5275 .pd-full-desc-body table { 5276 width: 100%; 5277 border-collapse: collapse; 5278 margin: 1rem 0 1.2rem 5279 } 5280 5281 .pd-full-desc-body table, 5282 .pd-full-desc-body th, 5283 .pd-full-desc-body td { 5284 border-bottom: 1px dotted #cbd5e1; 5285 vertical-align: top 5286 } 5287 5288 .pd-full-desc-body th, 5289 .pd-full-desc-body td { 5290 padding: .45rem .55rem; 5291 text-align: left 5292 } 5293 5294 .pd-full-desc-body img { 5295 max-width: 100%; 5296 height: auto; 5297 display: block; 5298 } 5299 5300 /* === Related (container) === */ 5301 .pd-related-full { 5302 background: #fff; 5303 border: 1px solid var(--pd-border); 5304 border-radius: var(--pd-radius); 5305 padding: 1.4rem 1.6rem 1.9rem; 5306 margin: 0 0 2rem; 5307 } 5308 5309 .pd-related-title { 5310 margin: 0 0 1.1rem; 5311 font-size: 1.05rem; 5312 font-weight: 600; 5313 color: var(--pd-dark) 5314 } 5315 5316 /* Related Grid (dirapikan: gabung selector agar tidak duplikat) */ 5317 .pd-related-grid, 5318 .pd-related-grid--full { 5319 display: grid !important; 5320 gap: 16px !important; 5321 grid-template-columns: repeat(auto-fill, minmax(170px, 1fr)) !important; 5322 align-items: stretch; 5323 } 5324 5325 /* Fallback jika grid tidak didukung */ 5326 @supports not (display:grid) { 5327 5328 .pd-related-grid, 5329 .pd-related-grid--full { 5330 display: flex !important; 5331 flex-wrap: wrap 5332 } 5333 5334 .pd-related-grid .pd-related-card, 5335 .pd-related-grid--full .pd-related-card { 5336 flex: 0 0 calc(20% - 16px); 5337 max-width: calc(20% - 16px) 5338 } 5339 5340 @media (max-width:1100px) { 5341 5342 .pd-related-grid .pd-related-card, 5343 .pd-related-grid--full .pd-related-card { 5344 flex: 0 0 calc(25% - 16px); 5345 max-width: calc(25% - 16px) 5346 } 5347 } 5348 5349 @media (max-width:820px) { 5350 5351 .pd-related-grid .pd-related-card, 5352 .pd-related-grid--full .pd-related-card { 5353 flex: 0 0 calc(33.333% - 16px); 5354 max-width: calc(33.333% - 16px) 5355 } 5356 } 5357 5358 @media (max-width:580px) { 5359 5360 .pd-related-grid .pd-related-card, 5361 .pd-related-grid--full .pd-related-card { 5362 flex: 0 0 calc(50% - 16px); 5363 max-width: calc(50% - 16px) 5364 } 5365 } 5366 } 5367 5368 /* Related Card */ 5369 .pd-related-card { 5370 display: flex; 5371 flex-direction: column; 5372 border: 1px solid var(--pd-soft-border); 5373 background: #fff; 5374 border-radius: 10px; 5375 text-decoration: none; 5376 color: inherit; 5377 overflow: hidden; 5378 transition: var(--pd-transition); 5379 position: relative; 5380 min-width: 0; 5381 } 5382 5383 .pd-related-card:hover { 5384 transform: translateY(-4px); 5385 box-shadow: var(--pd-shadow) 5386 } 5387 5388 .pd-related-card .thumb { 5389 aspect-ratio: 1/1; 5390 background: #f1f5f9; 5391 overflow: hidden; 5392 position: relative 5393 } 5394 5395 .pd-related-card img { 5396 width: 100%; 5397 height: 100%; 5398 object-fit: cover; 5399 display: block 5400 } 5401 5402 .mini-disc { 5403 position: absolute; 5404 top: 6px; 5405 left: 6px; 5406 background: #dc2626; 5407 color: #fff; 5408 font-size: .55rem; 5409 padding: 3px 6px 2px; 5410 border-radius: 4px; 5411 font-weight: 600 5412 } 5413 5414 .pd-related-card .info { 5415 padding: .55rem .65rem .75rem; 5416 display: flex; 5417 flex-direction: column; 5418 gap: .25rem 5419 } 5420 5421 .pd-related-card h3 { 5422 font-size: .68rem; 5423 line-height: 1.25; 5424 margin: 0; 5425 height: 2.5em; 5426 overflow: hidden; 5427 font-weight: 600; 5428 color: #334155; 5429 display: -webkit-box; 5430 -webkit-line-clamp: 2; 5431 -webkit-box-orient: vertical 5432 } 5433 5434 .pd-related-card .price { 5435 font-size: .7rem; 5436 font-weight: 600; 5437 color: var(--pd-accent) 5438 } 5439 5440 .pd-related-card .sold { 5441 display: block; 5442 font-size: .6rem; 5443 font-weight: 600; 5444 color: #475569; 5445 margin-top: 2px; 5446 letter-spacing: .3px; 5447 background: #f1f5f9; 5448 padding: 2px 6px 3px; 5449 border-radius: 5px; 5450 width: max-content; 5451 } 5452 5453 .pd-related-card .price .final { 5454 font-size: .82rem; 5455 font-weight: 700; 5456 color: #0d6efd; 5457 } 5458 5459 .pd-related-card .price .ori { 5460 font-size: .6rem; 5461 text-decoration: line-through; 5462 color: #94a3b8; 5463 font-weight: 500; 5464 } 5465 5466 /* === Mobile slider (scroll-snap) â gambar utama tetap tampil === */ 5467 .pd-mobile-slider { 5468 display: none 5469 } 5470 5471 .pd-mobile-slider img { 5472 width: 100%; 5473 display: block; 5474 object-fit: contain; 5475 aspect-ratio: 1/1 5476 } 5477 5478 /* Gallery counter badge */ 5479 .pd-gallery-counter { 5480 position: absolute; 5481 bottom: 12px; 5482 left: 12px; 5483 background: rgba(255, 255, 255, 0.25); 5484 color: #9E9E9E; 5485 padding: 4px 10px; 5486 border-radius: 10px; 5487 font-size: 12px; 5488 font-weight: 600; 5489 z-index: 100; 5490 backdrop-filter: blur(6px); 5491 -webkit-backdrop-filter: blur(6px); 5492 font-variant-numeric: tabular-nums; 5493 pointer-events: none; 5494 display: none; 5495 box-shadow: 0 1px 4px rgba(0, 0, 0, .15); 5496 line-height: 1; 5497 border: 1px solid rgba(0, 0, 0, 0.08); 5498 } 5499 5500 @media (max-width:640px) { 5501 .pd-media-card { 5502 border: 0; 5503 padding: 0 1rem 0; 5504 } 5505 5506 .pd-info-card { 5507 border: 0; 5508 padding: 0 1.3rem 0; 5509 } 5510 5511 .pd-side-card { 5512 flex: 1 1 !important; 5513 } 5514 5515 .pd-top-layout { 5516 gap: 0; 5517 margin-bottom: 0; 5518 } 5519 5520 .pd-variants { 5521 margin-bottom: 1.5rem; 5522 } 5523 5524 .pd-main-image { 5525 display: none 5526 } 5527 5528 .pd-gallery-counter { 5529 display: block 5530 } 5531 5532 .pd-mobile-slider-wrapper { 5533 position: relative; 5534 margin-bottom: .6rem; 5535 } 5536 5537 .pd-mobile-slider { 5538 display: flex; 5539 gap: 8px; 5540 overflow-x: auto; 5541 scroll-snap-type: x mandatory; 5542 -webkit-overflow-scrolling: touch; 5543 } 5544 5545 .pd-mslide { 5546 min-width: 100%; 5547 flex: 0 0 100%; 5548 scroll-snap-align: center; 5549 border: 1px solid var(--pd-soft-border); 5550 border-radius: 10px; 5551 overflow: hidden; 5552 background: #fff 5553 } 5554 5555 .pd-thumb-gallery { 5556 display: none 5557 } 5558 5559 /* hide thumbnails on mobile */ 5560 } 5561 5562 /* === Mobile Floating Action Bar === */ 5563 .pd-mobile-fab { 5564 position: fixed; 5565 left: 0; 5566 right: 0; 5567 bottom: 42px; 5568 /* Position above bottom-nav (60px min-height + 6px padding) */ 5569 display: none; 5570 align-items: center; 5571 gap: .75rem; 5572 padding: 12px 16px; 5573 background: rgba(255, 255, 255, 0.95); 5574 backdrop-filter: blur(20px); 5575 -webkit-backdrop-filter: blur(20px); 5576 border-top: 1px solid rgba(228, 231, 235, 0.6); 5577 box-shadow: 0 -4px 16px -4px rgba(0, 0, 0, 0.12); 5578 z-index: 999; 5579 /* Below bottom-nav (1000) */ 5580 transition: bottom .3s cubic-bezier(0.4, 0.0, 0.2, 1); 5581 } 5582 5583 /* When bottom-nav is hidden, move FAB to bottom */ 5584 body:has(.bottom-nav.hidden) .pd-mobile-fab { 5585 bottom: 0; 5586 } 5587 5588 .pd-mobile-fab .mf-actions { 5589 display: flex; 5590 gap: .5rem; 5591 width: 100% 5592 } 5593 5594 .mf-btn { 5595 border-radius: 10px; 5596 padding: .6rem 1rem; 5597 font-weight: 600; 5598 font-size: 14px; 5599 cursor: pointer; 5600 transition: all .2s; 5601 -webkit-tap-highlight-color: transparent; 5602 display: inline-flex; 5603 align-items: center; 5604 justify-content: center; 5605 gap: 4px; 5606 } 5607 5608 .mf-buy { 5609 background: #fb923c; 5610 color: #fff; 5611 border: 0; 5612 box-shadow: 0 2px 8px rgba(251, 146, 60, 0.3); 5613 flex: 1; 5614 flex-direction: column; 5615 padding: .55rem 1rem; 5616 line-height: 1; 5617 min-height: 44px; 5618 font-family: inherit; 5619 } 5620 5621 .mf-buy .mf-buy-text { 5622 font-size: 11px; 5623 font-weight: 600; 5624 opacity: 0.95; 5625 font-family: inherit; 5626 } 5627 5628 .mf-buy .mf-buy-price { 5629 font-size: 13px; 5630 font-weight: 800; 5631 letter-spacing: -0.3px; 5632 font-family: inherit; 5633 line-height: 1; 5634 } 5635 5636 .mf-buy:active { 5637 transform: scale(0.97) 5638 } 5639 5640 .mf-cart { 5641 background: #fff; 5642 color: #fb923c; 5643 border: 2px solid #fb923c; 5644 width: 44px; 5645 height: 44px; 5646 min-height: 44px; 5647 padding: 0; 5648 flex-shrink: 0; 5649 font-family: inherit; 5650 } 5651 5652 .mf-cart:active { 5653 transform: scale(0.95) 5654 } 5655 5656 .mf-chat { 5657 background: #fff; 5658 color: #fb923c; 5659 border: 2px solid #fb923c; 5660 width: 44px; 5661 height: 44px; 5662 min-height: 44px; 5663 padding: 0; 5664 flex-shrink: 0; 5665 font-family: inherit 5666 } 5667 5668 .mf-chat:active { 5669 transform: scale(0.95) 5670 } 5671 5672 .mf-chat svg {
5673 width: 20px; 5674 height: 20px; 5675 flex-shrink: 0 5676 } 5677 5678 .mf-share { 5679 background: #fff; 5680 color: #fb923c; 5681 border: 2px solid #fb923c; 5682 width: 44px; 5683 height: 44px; 5684 padding: 0; 5685 flex-shrink: 0; 5686 } 5687 5688 .mf-share:active { 5689 transform: scale(0.95) 5690 } 5691 5692 .mf-btn:disabled { 5693 opacity: .5; 5694 cursor: not-allowed 5695 } 5696 5697 @media (max-width:640px) { 5698 .pd-mobile-fab { 5699 display: flex 5700 } 5701 5702 .product-single { 5703 padding-bottom: 0; 5704 } 5705 5706 /* Space for FAB + bottom-nav */ 5707 } 5708 5709 /* === Installment cards === */ 5710 .pd-installment-card { 5711 border: 1px solid var(--pd-border); 5712 background: #fff; 5713 border-radius: var(--pd-radius); 5714 padding: 1rem 1.1rem 1.25rem; 5715 display: flex; 5716 flex-direction: column; 5717 gap: .85rem 5718 } 5719 5720 .pd-installment-card h3 { 5721 margin: 0 0 .2rem; 5722 font-size: .78rem; 5723 font-weight: 700; 5724 letter-spacing: .6px; 5725 text-transform: uppercase; 5726 color: var(--pd-dark) 5727 } 5728 5729 .inst-tabs { 5730 display: flex; 5731 gap: .4rem 5732 } 5733 5734 .inst-tab { 5735 flex: 1 1 0; 5736 background: var(--pd-soft); 5737 border: 1px solid var(--pd-soft-border); 5738 padding: .45rem .5rem; 5739 font-size: .63rem; 5740 font-weight: 600; 5741 border-radius: 6px; 5742 cursor: pointer; 5743 letter-spacing: .4px; 5744 transition: var(--pd-transition) 5745 } 5746 5747 .inst-tab.active, 5748 .inst-tab:hover { 5749 background: var(--pd-accent); 5750 color: #fff; 5751 border-color: var(--pd-accent) 5752 } 5753 5754 .inst-tab:focus { 5755 outline: 2px solid var(--pd-accent); 5756 outline-offset: 2px 5757 } 5758 5759 .inst-tenors { 5760 display: flex; 5761 gap: .4rem; 5762 flex-wrap: wrap 5763 } 5764 5765 .tenor-btn { 5766 flex: 1 0 auto; 5767 background: #fff; 5768 border: 1px solid var(--pd-soft-border); 5769 padding: .42rem .55rem; 5770 font-size: .6rem; 5771 font-weight: 600; 5772 border-radius: 20px; 5773 cursor: pointer; 5774 transition: .18s; 5775 min-width: 56px 5776 } 5777 5778 .tenor-btn.active, 5779 .tenor-btn:hover { 5780 background: #1d7df0; 5781 color: #fff; 5782 border-color: #1d7df0 5783 } 5784 5785 .inst-result { 5786 display: flex; 5787 flex-direction: column; 5788 gap: .45rem; 5789 font-size: .63rem 5790 } 5791 5792 .inst-line { 5793 display: flex; 5794 justify-content: space-between; 5795 align-items: center; 5796 padding: .35rem .55rem; 5797 background: var(--pd-soft); 5798 border: 1px solid var(--pd-soft-border); 5799 border-radius: 6px 5800 } 5801 5802 .inst-line.highlight { 5803 background: #1d7df0; 5804 color: #fff; 5805 border-color: #1d7df0; 5806 font-weight: 600 5807 } 5808 5809 .inst-line .lbl { 5810 opacity: .8 5811 } 5812 5813 .inst-line .val { 5814 font-weight: 600; 5815 letter-spacing: .3px 5816 } 5817 5818 .inst-footnote { 5819 font-size: .53rem; 5820 line-height: 1.25; 5821 color: #64748b; 5822 margin-top: .2rem 5823 } 5824 5825 @media (max-width: 860px) { 5826 .pd-installment-card { 5827 order: 3 5828 } 5829 5830 .inst-tabs .inst-tab, 5831 .inst-tenors .tenor-btn { 5832 font-size: .65rem 5833 } 5834 5835 /* Voucher button responsive - make it simpler */ 5836 .btn-buy-voucher { 5837 padding: 0 12px; 5838 gap: 8px 5839 } 5840 5841 .btn-buy-voucher .bv-icon { 5842 font-size: 18px 5843 } 5844 5845 .btn-buy-voucher .bv-text { 5846 font-size: 13px 5847 } 5848 5849 .btn-buy-voucher .bv-text small { 5850 font-size: 9px 5851 } 5852 5853 .btn-buy-voucher .bv-save { 5854 font-size: 11px; 5855 padding: 3px 6px 5856 } 5857 } 5858 5859 /* Installment List v2 (eye-catching) */ 5860 .pd-installment-card2 { 5861 background: radial-gradient(circle, rgba(0, 150, 136, 1) 0%, rgba(0, 0, 0, 0.63) 100%); 5862 border: 1px solid #009688; 5863 border-radius: var(--pd-radius); 5864 padding: 1rem 1.05rem 1.2rem; 5865 display: flex; 5866 flex-direction: column; 5867 gap: .5rem; 5868 position: relative; 5869 overflow: hidden; 5870 } 5871 5872 .pd-installment-card2:before { 5873 content: ''; 5874 position: absolute; 5875 width: 140px; 5876 height: 140px; 5877 background: radial-gradient(circle at center, rgba(29, 125, 240, .18), rgba(29, 125, 240, 0)); 5878 top: -40px; 5879 right: -40px; 5880 pointer-events: none 5881 } 5882 5883 .pd-installment-card2 h3 { 5884 margin: 0; 5885 font-size: .8rem; 5886 font-weight: 700; 5887 letter-spacing: .6px; 5888 text-transform: uppercase; 5889 color: #0f2f54 5890 } 5891 5892 .pd-installment-card2 .inst-head { 5893 display: flex; 5894 align-items: center; 5895 justify-content: space-between; 5896 gap: .5rem 5897 } 5898 5899 .inst-head-badge { 5900 background: #1d7df0; 5901 color: #fff; 5902 font-size: .55rem; 5903 font-weight: 600; 5904 padding: .25rem .5rem; 5905 border-radius: 20px; 5906 letter-spacing: .4px; 5907 box-shadow: 0 2px 6px -2px rgba(29, 125, 240, .6) 5908 } 5909 5910 .inst-bank-tabs { 5911 display: flex; 5912 gap: .45rem 5913 } 5914 5915 .bank-tab { 5916 flex: 1 1 0; 5917 background: #fff; 5918 border: 1px solid var(--pd-soft-border);
5919 padding: .5rem .55rem; 5920 font-size: .63rem; 5921 font-weight: 600; 5922 border-radius: 7px; 5923 cursor: pointer; 5924 transition: .18s; 5925 letter-spacing: .3px 5926 } 5927 5928 .bank-tab.active, 5929 .bank-tab:hover { 5930 background: #1d7df0; 5931 color: #fff; 5932 border-color: #1d7df0; 5933 box-shadow: 0 3px 10px -4px rgba(29, 125, 240, .6) 5934 } 5935 5936 .bank-tab:focus { 5937 outline: 2px solid #1d7df0; 5938 outline-offset: 2px 5939 } 5940 5941 .inst-month-list { 5942 list-style: none; 5943 margin: 0; 5944 padding: 0; 5945 display: flex; 5946 flex-direction: column; 5947 gap: .55rem 5948 } 5949 5950 .inst-month-item { 5951 display: flex; 5952 align-items: center; 5953 gap: .65rem; 5954 background: #fff; 5955 border: 1px solid var(--pd-soft-border); 5956 border-radius: 14px; 5957 padding: .55rem .7rem; 5958 position: relative; 5959 overflow: hidden; 5960 transition: .25s 5961 } 5962 5963 .inst-month-item:before { 5964 content: ''; 5965 position: absolute; 5966 inset: 0; 5967 opacity: 0; 5968 background: linear-gradient(90deg, rgba(29, 125, 240, .08), rgba(29, 125, 240, 0)); 5969 transition: .25s 5970 } 5971 5972 .inst-month-item:hover { 5973 transform: translateY(-2px); 5974 box-shadow: 0 6px 14px -6px rgba(0, 40, 120, .25) 5975 } 5976 5977 .inst-month-item:hover:before { 5978 opacity: 1 5979 } 5980 5981 .tenor-badge { 5982 background: #1d7df0; 5983 color: #fff; 5984 font-weight: 700; 5985 min-width: 42px; 5986 text-align: center; 5987 padding: .38rem .4rem; 5988 font-size: .8rem; 5989 border-radius: 10px; 5990 box-shadow: 0 3px 10px -4px rgba(29, 125, 240, .6) 5991 } 5992 5993 .amount { 5994 flex: 1; 5995 font-size: .8rem; 5996 font-weight: 600; 5997 color: #0f2f54; 5998 letter-spacing: .3px 5999 } 6000 6001 .tag { 6002 font-size: .55rem; 6003 font-weight: 600; 6004 padding: .28rem .55rem; 6005 border-radius: 30px; 6006 letter-spacing: .4px; 6007 text-transform: uppercase; 6008 white-space: nowrap 6009 } 6010 6011 .tag-zero { 6012 background: #16a34a; 6013 color: #fff; 6014 box-shadow: 0 2px 8px -3px rgba(16, 180, 90, .55) 6015 } 6016 6017 .inst-note { 6018 font-size: .6rem; 6019 font-weight: 600; 6020 color: #0f2f54; 6021 background: #e0f7ed; 6022 border: 1px solid #b2ebd2; 6023 padding: .4rem .6rem; 6024 border-radius: 8px; 6025 letter-spacing: .3px 6026 } 6027 6028 .inst-disclaimer { 6029 font-size: .52rem; 6030 line-height: 1.25; 6031 color: #64748b; 6032 margin-top: -.2rem 6033 } 6034 6035 @media (max-width:860px) { 6036 .pd-installment-card2 { 6037 order: 3 6038 } 6039 6040 .tenor-badge { 6041 min-width: 38px; 6042 font-size: .75rem 6043 } 6044 6045 .amount { 6046 font-size: .78rem 6047 } 6048 } 6049 6050 /* Alt Fintech Banner (compact) */ 6051 .inst-alt-banner--compact { 6052 background: linear-gradient(142deg, #1d7df0 0%, #3c98ff 55%, #67bdff 100%); 6053 color: #fff; 6054 border: 0; 6055 padding: .95rem .95rem 1.05rem; 6056 border-radius: 16px; 6057 box-shadow: 0 6px 18px -6px rgba(0, 70, 160, .45); 6058 position: relative; 6059 overflow: hidden; 6060 min-height: auto; 6061 } 6062 6063 .inst-alt-banner--compact:before, 6064 .inst-alt-banner--compact:after { 6065 content: ''; 6066 position: absolute; 6067 border-radius: 50%; 6068 background: rgba(255, 255, 255, .15); 6069 filter: blur(2px); 6070 pointer-events: none; 6071 } 6072 6073 .inst-alt-banner--compact:before { 6074 width: 130px; 6075 height: 130px; 6076 top: -50px; 6077 right: -35px 6078 } 6079 6080 .inst-alt-banner--compact:after { 6081 width: 90px; 6082 height: 90px; 6083 bottom: -40px; 6084 left: -30px 6085 } 6086 6087 .inst-alt-banner--compact .iab-top { 6088 margin: 0 0 .55rem; 6089 display: flex; 6090 flex-direction: column; 6091 gap: .25rem 6092 } 6093 6094 .inst-alt-banner--compact .iab-title { 6095 font-size: .74rem; 6096 font-weight: 700; 6097 letter-spacing: .7px; 6098 line-height: 1.15 6099 } 6100
6101 .inst-alt-banner--compact .iab-sub { 6102 font-size: .55rem; 6103 font-weight: 500; 6104 opacity: .95; 6105 letter-spacing: .4px 6106 } 6107 6108 .iab-logos-compact { 6109 display: flex; 6110 gap: .55rem; 6111 align-items: center; 6112 margin: 0 0 .6rem; 6113 flex-wrap: nowrap; 6114 justify-content: space-between 6115 } 6116 6117 .iab-logos-compact .logo-fin { 6118 width: 30% 6119 } 6120 6121 .iab-logos-compact .logo { 6122 width: 48px; 6123 height: 48px; 6124 border-radius: 14px; 6125 display: flex; 6126 align-items: center; 6127 justify-content: center; 6128 font-size: .62rem; 6129 font-weight: 700; 6130 letter-spacing: .3px; 6131 position: relative; 6132 color: #fff; 6133 box-shadow: 0 4px 10px -4px rgba(0, 0, 0, .35); 6134 background: rgba(255, 255, 255, .15); 6135 backdrop-filter: blur(4px); 6136 transition: .25s; 6137 text-shadow: 0 1px 2px rgba(0, 0, 0, .4); 6138 user-select: none; 6139 } 6140 6141 .iab-logos-compact .logo:before { 6142 content: ''; 6143 position: absolute; 6144 inset: 0; 6145 border-radius: inherit; 6146 background: linear-gradient(140deg, rgba(255, 255, 255, .35), rgba(255, 255, 255, 0)); 6147 mix-blend-mode: overlay; 6148 opacity: .55; 6149 pointer-events: none; 6150 } 6151 6152 .iab-logos-compact .logo:hover { 6153 transform: translateY(-3px) scale(1.05); 6154 box-shadow: 0 8px 18px -6px rgba(0, 0, 0, .45) 6155 } 6156 6157 .iab-cta--compact { 6158 display: inline-flex; 6159 padding: .45rem .85rem; 6160 font-size: .58rem; 6161 font-weight: 700; 6162 background: #fff; 6163 color: #0f3c6d; 6164 border-radius: 30px; 6165 text-decoration: none; 6166 letter-spacing: .55px; 6167 box-shadow: 0 4px 12px -5px rgba(0, 0, 0, .35); 6168 transition: .25s; 6169 } 6170 6171 .iab-cta--compact:hover { 6172 transform: translateY(-2px); 6173 box-shadow: 0 8px 18px -7px rgba(0, 0, 0, .45) 6174 } 6175 6176 .iab-footnote--compact { 6177 margin-top: .45rem; 6178 font-size: .46rem; 6179 opacity: .85; 6180 letter-spacing: .25px 6181 } 6182 6183 @media (max-width:860px) { 6184 .inst-alt-banner--compact { 6185 order: 4; 6186 margin-top: .4rem; 6187 flex: 1 1 6188 } 6189 6190 .iab-logos-compact .logo { 6191 width: 46px; 6192 height: 46px 6193 } 6194 } 6195 6196 /* === Scroll To Top (baru) === */ 6197 .pd-scroll-top { 6198 position: fixed; 6199 right: 20px; 6200 bottom: 90px; 6201 width: 48px; 6202 height: 48px; 6203 border-radius: 50%; 6204 background: linear-gradient(135deg, #ffffff 0%, #f8fafc 100%); 6205 color: #0f2f54; 6206 border: 1px solid rgba(226, 232, 240, 0.8); 6207 box-shadow: 0 8px 20px -8px rgba(0, 0, 0, .3), 0 2px 6px rgba(0, 0, 0, .1); 6208 display: flex; 6209 align-items: center; 6210 justify-content: center; 6211 cursor: pointer; 6212 z-index: 1105; 6213 opacity: 0; 6214 transform: translateY(12px) scale(.92); 6215 transition: all .3s cubic-bezier(0.4, 0, 0.2, 1); 6216 backdrop-filter: blur(8px); 6217 -webkit-backdrop-filter: blur(8px); 6218 } 6219 6220 .pd-scroll-top:hover { 6221 box-shadow: 0 12px 28px -10px rgba(0, 0, 0, .4), 0 4px 12px rgba(0, 0, 0, .15); 6222 transform: translateY(0) scale(1); 6223 background: linear-gradient(135deg, #ffffff 0%, #fefefe 100%); 6224 border-color: rgba(226, 232, 240, 1); 6225 } 6226 6227 .pd-scroll-top:active { 6228 transform: translateY(0) scale(.96); 6229 } 6230 6231 .pd-scroll-top:focus-visible { 6232 outline: 2px solid var(--pd-accent); 6233 outline-offset: 2px 6234 } 6235 6236 .pd-scroll-top.visible { 6237 opacity: 1; 6238 transform: translateY(0) scale(1) 6239 } 6240 6241 @media (max-width:640px) { 6242 6243 /* Dynamic positioning via JavaScript */ 6244 .pd-scroll-top { 6245 right: 14px; 6246 bottom: var(--scroll-top-bottom, calc(68px + 18px + env(safe-area-inset-bottom))); 6247 } 6248 } 6249 6250 /* === Responsive layout tweaks === */ 6251 @media (max-width:1250px) { 6252 .pd-top-layout { 6253 grid-template-columns: minmax(260px, 330px) 1fr 6254 } 6255 6256 .pd-sidebar { 6257 grid-column: 1 / -1; 6258 flex-direction: row; 6259 flex-wrap: wrap; 6260 gap: 1rem 6261 } 6262 6263 .pd-side-card { 6264 flex: 1 1 250px 6265 } 6266 } 6267 6268 @media (max-width:880px) { 6269 .pd-top-layout { 6270 grid-template-columns: 1fr 6271 } 6272 6273 .pd-sidebar { 6274 flex-direction: column; 6275 padding: 0 1rem; 6276 } 6277 6278 .pd-title { 6279 font-size: 1.2rem 6280 } 6281 6282 .pd-price-current { 6283 font-size: 1.5rem 6284 } 6285 } 6286 6287 @media (max-width:640px) { 6288 6289 /* Related: 2 kolom di mobile */ 6290 .pd-related-full { 6291 padding: 1.2rem; 6292 border: 0; 6293 padding-top: .6rem; 6294 margin-bottom: .6rem; 6295 } 6296 6297 .pd-related-grid, 6298 .pd-related-grid--full { 6299 grid-template-columns: repeat(2, 1fr) !important; 6300 gap: 12px !important 6301 } 6302 } 6303 6304 @media (max-width:560px) { 6305 .pd-actions { 6306 flex-direction: column 6307 } 6308 6309 .btn-add-cart, 6310 .btn-buy, 6311 .btn-buy-voucher { 6312 width: 100% 6313 } 6314 6315 .pd-full-description { 6316 padding: 1.2rem; 6317 border: 0; 6318 padding-bottom: 0; 6319 } 6320 } 6321 6322 @media (max-width:380px) { 6323 .pd-related-full { 6324 padding: .9rem .7rem 1.1rem 6325 } 6326 6327 .pd-related-grid, 6328 .pd-related-grid--full { 6329 gap: 8px !important 6330 } 6331 6332 .pd-related-card .info { 6333 padding: .4rem .48rem .55rem 6334 } 6335 } 6336 6337 /* === Modern Countdown (Product Detail) === */ 6338 .pd-countdown-modern { 6339 --cd-bg1: #0ea5e9; 6340 /* sky-500 */ 6341 --cd-bg2: #6366f1; 6342 /* indigo-500 */ 6343 --cd-text: #0b1220; 6344 --cd-contrast: #ffffff; 6345 --cd-shadow: 0 8px 24px -10px rgba(0, 0, 0, .25); 6346 --cd-border: rgba(255, 255, 255, .25); 6347 --cd-box: rgba(255, 255, 255, .65); 6348 --cd-box-text: #0f172a; 6349 --cd-danger: #ef4444; 6350 6351 display: flex; 6352 gap: .75rem; 6353 align-items: center; 6354 background: linear-gradient(135deg, var(--cd-bg1), var(--cd-bg2)); 6355 border: 1px solid var(--cd-border); 6356 color: var(--cd-contrast); 6357 border-radius: 14px; 6358 padding: .6rem .8rem; 6359 box-shadow: var(--cd-shadow); 6360 position: relative; 6361 overflow: hidden; 6362 margin-bottom: 1rem; 6363 } 6364 6365 .pd-countdown-modern .pd-cd-icon { 6366 width: 28px; 6367 height: 28px; 6368 flex: 0 0 28px; 6369 display: grid; 6370 place-items: center; 6371 background: rgba(255, 255, 255, .22); 6372 border: 1px solid var(--cd-border); 6373 border-radius: 10px; 6374 box-shadow: inset 0 1px 0 rgba(255, 255, 255, .35); 6375 } 6376 6377 .pd-countdown-modern .pd-cd-icon svg { 6378 width: 18px; 6379 height: 18px; 6380 fill: #fff; 6381 opacity: .95 6382 } 6383 6384 .pd-countdown-modern .pd-cd-body { 6385 display: flex; 6386 flex-direction: column; 6387 gap: .35rem; 6388 min-width: 0 6389 } 6390 6391 .pd-countdown-modern .pd-cd-label { 6392 font-size: .72rem; 6393 font-weight: 700; 6394 letter-spacing: .4px; 6395 opacity: .95; 6396 line-height: 1; 6397 text-shadow: 0 1px 0 rgba(0, 0, 0, .08); 6398 } 6399 6400 .pd-countdown-modern .pd-cd-time { 6401 display: flex; 6402 align-items: end; 6403 gap: .35rem; 6404 flex-wrap: wrap; 6405 line-height: 1; 6406 } 6407 6408 .pd-countdown-modern .unit { 6409 display: flex; 6410 flex-direction: column; 6411 align-items: center; 6412 gap: .18rem; 6413 min-width: 58px; 6414 } 6415 6416 .pd-countdown-modern .num { 6417 display: inline-flex; 6418 align-items: center; 6419 justify-content: center; 6420 min-width: 58px; 6421 height: 40px; 6422 padding: 0 .4rem; 6423 background: var(--cd-box); 6424 color: var(--cd-box-text); 6425 border: 1px solid rgba(15, 23, 42, .08); 6426 border-radius: 10px; 6427 font: 800 1.05rem ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", monospace; 6428 letter-spacing: .5px; 6429 box-shadow: 0 4px 14px -6px rgba(0, 0, 0, .4), inset 0 1px 0 rgba(255, 255, 255, .55); 6430 } 6431 6432 .pd-countdown-modern .unit-label { 6433 font-size: .62rem; 6434 font-weight: 700; 6435 opacity: .9; 6436 text-shadow: 0 1px 0 rgba(255, 255, 255, .15); 6437 } 6438 6439 .pd-countdown-modern .colon { 6440 font-weight: 900; 6441 font-size: 1.05rem; 6442 opacity: .95; 6443 transform: translateY(-2px); 6444 animation: cdBlink 1.2s infinite steps(2, jump-none); 6445 } 6446
6447 @keyframes cdBlink { 6448 0% { 6449 opacity: 1 6450 } 6451 6452 50% { 6453 opacity: .25 6454 } 6455 6456 100% { 6457 opacity: 1 6458 } 6459 } 6460 6461 .pd-countdown-modern .pd-cd-progress { 6462 display: none; 6463 position: relative; 6464 height: 6px; 6465 border-radius: 999px; 6466 overflow: hidden; 6467 background: rgba(255, 255, 255, .25); 6468 border: 1px solid rgba(255, 255, 255, .28); 6469 } 6470 6471 .pd-countdown-modern .pd-cd-progress .bar { 6472 height: 100%; 6473 width: 0%; 6474 background: linear-gradient(90deg, #22c55e, #a3e635); 6475 box-shadow: 0 2px 8px rgba(0, 0, 0, .25) inset; 6476 transition: width .35s ease; 6477 } 6478 6479 /* State saat hampir habis */ 6480 .pd-countdown-modern.danger { 6481 --cd-bg1: #f97316; 6482 /* orange-500 */ 6483 --cd-bg2: #ef4444; 6484 /* red-500 */ 6485 } 6486 6487 /* Responsive */ 6488 @media (max-width:640px) { 6489 .pd-countdown-modern { 6490 padding: .55rem .65rem; 6491 border-radius: 12px; 6492 gap: .6rem; 6493 } 6494 6495 .pd-countdown-modern .unit { 6496 min-width: 52px 6497 } 6498 6499 .pd-countdown-modern .num { 6500 min-width: 52px; 6501 height: 36px; 6502 font-size: .98rem 6503 } 6504 } 6505 6506 /* === Modern Countdown polish (shine + compact) === */ 6507 .pd-countdown-modern { 6508 position: relative; 6509 } 6510 6511 .pd-countdown-modern::after { 6512 content: ""; 6513 position: absolute; 6514 inset: -1px; 6515 background: linear-gradient(120deg, rgba(255, 255, 255, .12), rgba(255, 255, 255, 0) 35%), 6516 radial-gradient(120% 120% at 0% 0%, rgba(255, 255, 255, .08), rgba(255, 255, 255, 0) 60%); 6517 border-radius: inherit; 6518 pointer-events: none; 6519 mix-blend-mode: screen; 6520 animation: sheen 4.5s ease-in-out infinite; 6521 } 6522 6523 @keyframes sheen { 6524 0% { 6525 opacity: .35; 6526 transform: translateX(-10%) 6527 } 6528 6529 50% { 6530 opacity: .15; 6531 transform: translateX(4%) 6532 } 6533 6534 100% { 6535 opacity: .35; 6536 transform: translateX(-10%) 6537 } 6538 } 6539 6540 /* Mode compact (aktifkan dengan data-mode="compact" di elemen) */ 6541 .pd-countdown-modern[data-mode="compact"] { 6542 gap: .55rem; 6543 padding: .5rem .6rem; 6544 border-radius: 12px; 6545 } 6546 6547 .pd-countdown-modern[data-mode="compact"] .unit { 6548 min-width: 46px; 6549 } 6550 6551 .pd-countdown-modern[data-mode="compact"] .num { 6552 min-width: 46px; 6553 height: 34px; 6554 font-size: .92rem; 6555 } 6556 6557 .pd-countdown-modern[data-mode="compact"] .pd-cd-label { 6558 font-size: .66rem; 6559 } 6560 6561 .pd-countdown-modern[data-mode="compact"] .pd-cd-icon { 6562 width: 24px; 6563 height: 24px; 6564 border-radius: 8px; 6565 } 6566 6567 .pd-countdown-modern[data-mode="compact"] .pd-cd-progress { 6568 height: 5px; 6569 } 6570 6571 /* Product Grid (Firebird) */ 6572 6573 .product-archive { 6574 max-width: 1320px; 6575 margin-inline: auto; 6576 padding: 0 0 3rem; 6577 /*font-family: system-ui,-apple-system,Segoe UI,Roboto,Ubuntu,sans-serif;*/ 6578 } 6579 6580 .pa-toolbar { 6581 display: flex; 6582 flex-wrap: wrap; 6583 gap: 1rem; 6584 justify-content: space-between; 6585 align-items: flex-start; 6586 margin-bottom: 1.4rem; 6587 } 6588 6589 .pa-title { 6590 font-size: 1.4rem; 6591 margin: 0; 6592 font-weight: 600; 6593 line-height: 1.2; 6594 color: #0f172a; 6595 } 6596 6597 .pa-left { 6598 display: flex; 6599 flex-wrap: wrap; 6600 gap: .75rem; 6601 align-items: center; 6602 } 6603 6604 .pa-filter-badge { 6605 background: #f1f5f9; 6606 border: 1px solid #e2e8f0; 6607 padding: .45rem .6rem; 6608 border-radius: 8px; 6609 font-size: .7rem; 6610 display: flex; 6611 align-items: center; 6612 gap: .4rem; 6613 line-height: 1; 6614 color: #475569; 6615 } 6616 6617 .pa-filter-badge strong { 6618 color: #0f172a; 6619 } 6620 6621 .pa-filter-badge .clear { 6622 display: inline-block; 6623 text-decoration: none; 6624 background: #e2e8f0; 6625 color: #475569; 6626 font-weight: 600; 6627 padding: 0 .35rem .05rem; 6628 border-radius: 4px; 6629 transition: .2s; 6630 font-size: .75rem; 6631 line-height: 1; 6632 } 6633 6634 .pa-filter-badge .clear:hover { 6635 background: #cbd5e1; 6636 color: #1e293b; 6637 } 6638 6639 .pa-right { 6640 display: flex; 6641 gap: 1rem; 6642 flex-wrap: wrap; 6643 align-items: flex-start; 6644 } 6645 6646 .pa-search { 6647 display: flex; 6648 gap: .5rem; 6649 align-items: center; 6650 background: #fff; 6651 border: 1px solid #e2e8f0; 6652 padding: .4rem .5rem; 6653 border-radius: 8px; 6654 } 6655 6656 .pa-search input[type=text] { 6657 border: 0; 6658 outline: none; 6659 font-size: .8rem; 6660 padding: .35rem .4rem; 6661 min-width: 200px; 6662 } 6663 6664 .pa-search button { 6665 background: #0d6efd; 6666 border: 0; 6667 color: #fff; 6668 font-size: .7rem; 6669 padding: .45rem .75rem; 6670 border-radius: 6px; 6671 cursor: pointer; 6672 font-weight: 600; 6673 letter-spacing: .3px; 6674 transition: .25s; 6675 } 6676 6677 .pa-search button:hover { 6678 background: #0b5dc4; 6679 } 6680 6681 .pa-sort { 6682 display: flex; 6683 gap: .4rem; 6684 align-items: center; 6685 font-size: .7rem; 6686 background: #fff; 6687 border: 1px solid #e2e8f0; 6688 padding: .4rem .55rem; 6689 border-radius: 8px; 6690 } 6691 6692 .pa-sort select { 6693 font-size: .75rem; 6694 padding: .35rem .5rem; 6695 border: 1px solid #cbd5e1; 6696 border-radius: 6px; 6697 background: #fff; 6698 outline: none; 6699 } 6700 6701 .pa-empty { 6702 border: 1px dashed #cbd5e1; 6703 padding: 3rem 1rem; 6704 text-align: center; 6705 border-radius: 12px; 6706 background: #fff; 6707 } 6708 6709 .pa-empty p { 6710 margin: 0 0 1rem; 6711 font-size: .9rem; 6712 color: #475569; 6713 } 6714 6715 .btn-reset { 6716 display: inline-block; 6717 background: #0d6efd; 6718 color: #fff; 6719 font-size: .7rem; 6720 padding: .55rem 1rem; 6721 border-radius: 8px; 6722 text-decoration: none; 6723 font-weight: 600; 6724 letter-spacing: .4px; 6725 transition: .25s; 6726 } 6727 6728 .btn-reset:hover { 6729 background: #0a58c7; 6730 } 6731 6732 /* Grid */ 6733 .pa-grid { 6734 display: grid; 6735 gap: 1rem; 6736 grid-template-columns: repeat(auto-fill, minmax(180px, 1fr)); 6737 align-items: stretch; 6738 } 6739 6740 .pa-card { 6741 background: #fff; 6742 border: 1px solid #e2e8f0; 6743 border-radius: 12px; 6744 display: flex; 6745 flex-direction: column; 6746 text-decoration: none; 6747 color: inherit; 6748 position: relative; 6749 overflow: hidden; 6750 transition: .28s cubic-bezier(.4, 0, .2, 1); 6751 min-width: 0; 6752 padding: 0; 6753 } 6754 6755 .pa-card:hover { 6756 transform: translateY(-4px); 6757 box-shadow: 0 8px 22px -8px rgba(0, 0, 0, .15); 6758 border-color: #dce2ea; 6759 } 6760 6761 .pa-card .thumb { 6762 aspect-ratio: 1/1; 6763 background: #f1f5f9; 6764 display: flex; 6765 align-items: center; 6766 justify-content: center; 6767 overflow: hidden; 6768 position: relative; 6769 } 6770 6771 .pa-card img { 6772 width: 100%; 6773 height: 100%; 6774 object-fit: cover; 6775 display: block; 6776 } 6777 6778 .badge-disc { 6779 position: absolute; 6780 top: 8px; 6781 left: 8px; 6782 background: #dc2626; 6783 color: #fff; 6784 font-size: .6rem; 6785 padding: 4px 6px 3px; 6786 border-radius: 6px; 6787 font-weight: 700; 6788 letter-spacing: .4px; 6789 } 6790 6791 .pa-card .body { 6792 padding: .65rem .7rem .8rem; 6793 display: flex; 6794 flex-direction: column; 6795 gap: .45rem; 6796 min-height: 90px; 6797 } 6798 6799 .pa-card .title { 6800 font-size: .75rem; 6801 line-height: 1.25; 6802 margin: 0; 6803 font-weight: 600; 6804 color: #1e293b; 6805 height: 2.4em; 6806 overflow: hidden; 6807 } 6808 6809 .pa-card .prices { 6810 display: flex; 6811 flex-wrap: wrap; 6812 align-items: baseline; 6813 gap: .4rem; 6814 } 6815 6816 .pa-card .prices .final { 6817 font-size: .83rem; 6818 font-weight: 700; 6819 color: #0d6efd; 6820 } 6821 6822 .pa-card .prices .ori { 6823 font-size: .63rem; 6824 text-decoration: line-through; 6825 color: #94a3b8; 6826 font-weight: 500; 6827 } 6828 6829 .pa-card .cat { 6830 margin-top: auto; 6831 font-size: .55rem; 6832 letter-spacing: .6px; 6833 text-transform: uppercase; 6834 background: #f1f5f9; 6835 border: 1px solid #e2e8f0; 6836 padding: .28rem .45rem .25rem; 6837 border-radius: 20px; 6838 font-weight: 600; 6839 color: #475569; 6840 align-self: flex-start; 6841 } 6842 6843 .pa-card .meta-line { 6844 margin-top: 4px; 6845 font-size: .65rem; 6846 color: #475569; 6847 } 6848 6849 .pa-card .meta-line .sold { 6850 display: inline-block; 6851 background: #f1f5f9; 6852 padding: 2px 6px 3px; 6853 border-radius: 4px; 6854 font-weight: 600; 6855 letter-spacing: .3px; 6856 color: #334155; 6857 } 6858 6859 /* Pagination */ 6860 .pa-pagination { 6861 margin-top: 2rem; 6862 display: flex; 6863 flex-wrap: wrap; 6864 gap: .4rem; 6865 justify-content: center; 6866 font-size: .7rem; 6867 align-items: center; 6868 } 6869 6870 .pa-pagination a, 6871 .pa-pagination span { 6872 min-width: 34px; 6873 height: 34px; 6874 display: flex; 6875 align-items: center; 6876 justify-content: center; 6877 border-radius: 8px; 6878 text-decoration: none; 6879 font-weight: 600; 6880 padding: 0 .6rem; 6881 box-sizing: border-box; 6882 border: 1px solid #e2e8f0; 6883 background: #fff; 6884 color: #334155; 6885 transition: .25s; 6886 } 6887 6888 .pa-pagination a:hover { 6889 background: #f1f5f9; 6890 color: #0f172a; 6891 } 6892 6893 .pa-pagination .current { 6894 background: #0d6efd; 6895 color: #fff; 6896 border-color: #0d6efd; 6897 } 6898 6899 .pa-pagination .gap { 6900 border: none; 6901 background: transparent; 6902 font-weight: 400; 6903 color: #94a3b8; 6904 } 6905 6906 /* =============== Mobile Filter Bar (Tokopedia-like) =============== */ 6907 .pa-mobile-filterbar { 6908 display: none 6909 } 6910 6911 @media (max-width: 640px) { 6912 6913 /* sembunyikan tombol lama */ 6914 .pa-btn-filter { 6915 display: none 6916 } 6917 6918 .pa-mobile-filterbar { 6919 display: block; 6920 position: sticky; 6921 top: 0; 6922 /* sesuaikan jika ada header fixed di atas */ 6923 z-index: 5; 6924 background: #fff; 6925 border-bottom: 1px solid #e2e8f0; 6926 padding: .4rem .5rem; 6927 margin: -.4rem -1rem .6rem; 6928 /* full-bleed di container mobile */ 6929 } 6930 6931 .pa-mobile-filterbar .mf-scroll { 6932 display: flex; 6933 align-items: center; 6934 gap: .5rem; 6935 overflow-x: auto; 6936 -webkit-overflow-scrolling: touch; 6937 scrollbar-width: none; 6938 } 6939 6940 .pa-mobile-filterbar .mf-scroll::-webkit-scrollbar {
6941 display: none 6942 } 6943 6944 .mf-chip { 6945 flex: 0 0 auto; 6946 background: #fff; 6947 color: #334155; 6948 text-decoration: none; 6949 border: 1px solid #e2e8f0; 6950 border-radius: 999px; 6951 padding: .44rem .7rem; 6952 font-size: .78rem; 6953 font-weight: 600; 6954 letter-spacing: .2px; 6955 white-space: nowrap; 6956 } 6957 6958 .mf-chip:active { 6959 transform: scale(.98) 6960 } 6961 6962 .mf-chip.active { 6963 background: #eaf2ff; 6964 border-color: #0d6efd; 6965 color: #0d6efd; 6966 } 6967 6968 .mf-filter-btn { 6969 position: relative; 6970 flex: 0 0 auto; 6971 width: 38px; 6972 height: 38px; 6973 border-radius: 50%; 6974 border: 1.5px solid #0d6efd; 6975 background: #fff; 6976 display: inline-flex; 6977 align-items: center; 6978 justify-content: center; 6979 color: #0d6efd; 6980 cursor: pointer; 6981 } 6982 6983 .mf-filter-btn:active { 6984 transform: scale(.96) 6985 } 6986 6987 .mf-filter-btn svg { 6988 width: 18px; 6989 height: 18px; 6990 display: block 6991 } 6992 6993 .mf-filter-btn .mf-badge { 6994 position: absolute; 6995 top: 0; 6996 right: -4px; 6997 min-width: 18px; 6998 height: 18px; 6999 border-radius: 9px; 7000 background: #ef4444; 7001 color: #fff; 7002 font-size: .65rem; 7003 font-weight: 700; 7004 display: flex; 7005 align-items: center; 7006 justify-content: center; 7007 padding: 0 4px; 7008 line-height: 1; 7009 box-shadow: 0 2px 6px -2px rgba(239, 68, 68, .6); 7010 } 7011 } 7012 7013 /* Responsive */ 7014 @media (max-width: 640px) { 7015 .product-archive { 7016 padding: 0 1rem 3rem; 7017 } 7018 7019 .pa-grid { 7020 grid-template-columns: repeat(auto-fill, minmax(150px, 1fr)); 7021 } 7022 7023 .pa-search input[type=text] { 7024 min-width: 140px; 7025 } 7026 7027 .pa-toolbar { 7028 flex-direction: column; 7029 align-items: stretch; 7030 margin-bottom: 0; 7031 display: none; 7032 } 7033 7034 .pa-right { 7035 display: none; 7036 } 7037 7038 .pa-sort { 7039 width: 100%; 7040 justify-content: center; 7041 } 7042 7043 .pa-mobile-filterbar { 7044 display: flex !important; 7045 } 7046 } 7047 7048 .pa-mobile-filterbar { 7049 display: none; 7050 align-items: center; 7051 gap: 8px; 7052 padding: 8px 0 8px 12px; 7053 background: #fff; 7054 width: 100vw; 7055 } 7056 7057 .pa-mobile-filterbar .mf-scroll { 7058 display: flex; 7059 gap: 8px; 7060 overflow-x: auto; 7061 -webkit-overflow-scrolling: touch; 7062 scrollbar-width: none; 7063 /* Firefox */ 7064 flex: 1 1 auto; 7065 /* takes remaining width */ 7066 } 7067 7068 .pa-mobile-filterbar .mf-scroll::-webkit-scrollbar {
7069 display: none; 7070 } 7071 7072 /* WebKit */ 7073 .pa-mobile-filterbar .mf-chip { 7074 flex: 0 0 auto; 7075 /* prevent shrinking, keep width based on content */ 7076 white-space: nowrap; 7077 } 7078 7079 .pa-mobile-filterbar .mf-filter-btn { 7080 flex: 0 0 auto; 7081 /* do not shrink */ 7082 position: relative; 7083 /* keep in place, not inside scroller */ 7084 display: inline-flex; 7085 align-items: center; 7086 gap: 6px; 7087 } 7088 7089 /* Optional: ensure on small screens the button stays visible with min width */ 7090 @media (max-width: 768px) { 7091 .pa-mobile-filterbar .mf-filter-btn { 7092 padding: 6px 10px; 7093 } 7094 } 7095 7096 /* Product Specification Chips */ 7097 .pa-card .spec-chips { 7098 font-size: .6rem; 7099 color: #64748b; 7100 font-weight: 500; 7101 letter-spacing: .2px; 7102 margin-top: 2px; 7103 margin-bottom: 4px; 7104 line-height: 1.2; 7105 opacity: 0.9; 7106 max-width: 100%; 7107 overflow: hidden; 7108 text-overflow: ellipsis; 7109 white-space: nowrap; 7110 } 7111 7112 .pa-card .spec-chips .spec-divider { 7113 color: #94a3b8; 7114 font-weight: 400; 7115 margin: 0 1px; 7116 } 7117 7118 /** 7119 * Site Notice Banner - Reusable Notification System 7120 * Dismissible top bar for announcements, holidays, maintenance, etc. 7121 */ 7122 7123 .holiday-notice { 7124 position: fixed; 7125 top: 0; 7126 left: 0; 7127 right: 0; 7128 z-index: 9999; 7129 background: linear-gradient(135deg, #d32f2f 0%, #f57c00 100%); 7130 border-bottom: 2px solid rgba(255, 255, 255, 0.2); 7131 box-shadow: 0 2px 8px rgba(0, 0, 0, 0.15); 7132 animation: slideDown 0.4s cubic-bezier(0.4, 0, 0.2, 1); 7133 transform-origin: top; 7134 } 7135 7136 .holiday-notice.hidden { 7137 animation: slideUp 0.3s cubic-bezier(0.4, 0, 0.2, 1) forwards; 7138 } 7139 7140 @keyframes slideDown { 7141 from { 7142 transform: translateY(-100%); 7143 opacity: 0; 7144 } 7145 7146 to { 7147 transform: translateY(0); 7148 opacity: 1; 7149 } 7150 } 7151 7152 @keyframes slideUp { 7153 from { 7154 transform: translateY(0); 7155 opacity: 1; 7156 } 7157 7158 to { 7159 transform: translateY(-100%); 7160 opacity: 0; 7161 } 7162 } 7163 7164 .holiday-notice-container { 7165 max-width: 1400px; 7166 margin: 0 auto; 7167 padding: 12px 20px; 7168 display: flex; 7169 align-items: center; 7170 justify-content: space-between; 7171 gap: 16px; 7172 } 7173 7174 .holiday-notice-content { 7175 display: flex; 7176 align-items: center; 7177 gap: 12px; 7178 flex: 1; 7179 } 7180 7181 .holiday-notice-icon { 7182 font-size: 20px; 7183 line-height: 1; 7184 flex-shrink: 0; 7185 } 7186 7187 .holiday-notice-text { 7188 color: #ffffff; 7189 font-size: 14px; 7190 font-weight: 500; 7191 line-height: 1.5; 7192 margin: 0; 7193 text-shadow: 0 1px 2px rgba(0, 0, 0, 0.2); 7194 } 7195 7196 .holiday-notice-emoji { 7197 display: inline-block; 7198 animation: bounce 2s ease-in-out infinite; 7199 } 7200 7201 @keyframes bounce { 7202 7203 0%, 7204 100% { 7205 transform: translateY(0); 7206 } 7207 7208 50% { 7209 transform: translateY(-4px); 7210 } 7211 } 7212 7213 .holiday-notice-close { 7214 background: rgba(255, 255, 255, 0.2); 7215 border: 1px solid rgba(255, 255, 255, 0.3); 7216 border-radius: 6px; 7217 padding: 6px; 7218 cursor: pointer; 7219 color: #ffffff; 7220 transition: all 0.2s ease; 7221 flex-shrink: 0; 7222 display: flex; 7223 align-items: center; 7224 justify-content: center; 7225 width: 32px; 7226 height: 32px; 7227 } 7228 7229 .holiday-notice-close:hover { 7230 background: rgba(255, 255, 255, 0.3); 7231 transform: scale(1.05); 7232 } 7233 7234 .holiday-notice-close:active { 7235 transform: scale(0.95); 7236 } 7237 7238 .holiday-notice-close:focus { 7239 outline: 2px solid rgba(255, 255, 255, 0.5); 7240 outline-offset: 2px; 7241 } 7242 7243 /* Body padding adjustment when banner is visible */ 7244 body.has-holiday-notice { 7245 padding-top: 52px; 7246 } 7247 7248 /* Tablet Styles */ 7249 @media (max-width: 1024px) { 7250 .holiday-notice-container { 7251 padding: 10px 16px; 7252 } 7253 7254 .holiday-notice-text { 7255 font-size: 13px; 7256 } 7257 7258 .holiday-notice-icon { 7259 font-size: 18px; 7260 } 7261 7262 body.has-holiday-notice { 7263 padding-top: 48px; 7264 } 7265 } 7266 7267 /* Mobile Styles */ 7268 @media (max-width: 640px) { 7269 .holiday-notice-container { 7270 padding: 10px 12px; 7271 gap: 8px; 7272 } 7273 7274 .holiday-notice-content { 7275 gap: 8px; 7276 } 7277 7278 .holiday-notice-text { 7279 font-size: 12px; 7280 line-height: 1.4; 7281 } 7282 7283 .holiday-notice-icon { 7284 font-size: 16px; 7285 } 7286 7287 .holiday-notice-close { 7288 width: 28px; 7289 height: 28px; 7290 } 7291 7292 .holiday-notice-close svg { 7293 width: 16px; 7294 height: 16px; 7295 } 7296 7297 body.has-holiday-notice { 7298 padding-top: 44px; 7299 } 7300 } 7301 7302 /* Ensure header doesn't get covered - removed z-index as it conflicts with dropdown stacking */ 7303 /* .header, 7304.navbar, 7305header { 7306 position: relative; 7307 z-index: 100; 7308} */ 7309 7310 /** 7311 * Benchmark Section Styles 7312 * For product detail page benchmark display 7313 */ 7314 7315 .pd-benchmark-section { 7316 background: #fff; 7317 border-radius: 12px; 7318 padding: 24px; 7319 margin: 32px 0; 7320 box-shadow: 0 2px 8px rgba(0, 0, 0, 0.06); 7321 border: 1px solid #e5e7eb; 7322 } 7323 7324 .benchmark-header { 7325 margin-bottom: 20px; 7326 } 7327 7328 .benchmark-title { 7329 font-size: 22px; 7330 font-weight: 700; 7331 color: #1a1a1a; 7332 margin: 0 0 12px 0; 7333 display: flex; 7334 align-items: center; 7335 gap: 8px; 7336 } 7337 7338 .benchmark-hint { 7339 font-size: 14px; 7340 color: #6b7280; 7341 margin: 0; 7342 } 7343 7344 /* Preview Badges */ 7345 .benchmark-preview-badges { 7346 display: flex; 7347 flex-wrap: wrap; 7348 gap: 10px; 7349 margin-top: 12px; 7350 } 7351 7352 .benchmark-badge { 7353 display: inline-flex; 7354 align-items: center; 7355 gap: 6px; 7356 background: linear-gradient(135deg, #667eea 0%, #764ba2 100%); 7357 color: #fff; 7358 padding: 8px 16px; 7359 border-radius: 20px; 7360 font-size: 13px; 7361 font-weight: 500; 7362 box-shadow: 0 2px 6px rgba(102, 126, 234, 0.25); 7363 transition: all 0.2s ease; 7364 } 7365 7366 .benchmark-badge:hover { 7367 transform: translateY(-2px); 7368 box-shadow: 0 4px 12px rgba(102, 126, 234, 0.35); 7369 } 7370 7371 .benchmark-badge strong { 7372 font-weight: 600; 7373 opacity: 0.9; 7374 } 7375 7376 /* Load Button */ 7377 .btn-load-benchmark { 7378 display: flex; 7379 align-items: center; 7380 justify-content: center; 7381 gap: 10px; 7382 width: 100%; 7383 max-width: 420px; 7384 padding: 14px 24px; 7385 background: linear-gradient(135deg, #667eea 0%, #764ba2 100%); 7386 color: #fff; 7387 border: none; 7388 border-radius: 8px; 7389 font-size: 15px; 7390 font-weight: 600; 7391 cursor: pointer; 7392 transition: all 0.3s ease; 7393 box-shadow: 0 4px 12px rgba(102, 126, 234, 0.3); 7394 margin: 0 auto; 7395 } 7396 7397 .btn-load-benchmark:hover:not(:disabled) { 7398 transform: translateY(-2px); 7399 box-shadow: 0 6px 16px rgba(102, 126, 234, 0.4); 7400 } 7401 7402 .btn-load-benchmark:disabled { 7403 opacity: 0.6;
7404 cursor: not-allowed; 7405 } 7406 7407 .btn-load-benchmark .btn-icon { 7408 font-size: 20px; 7409 } 7410 7411 .btn-load-benchmark.loading .btn-icon { 7412 animation: spin 1s linear infinite; 7413 } 7414 7415 @keyframes spin { 7416 from { 7417 transform: rotate(0deg); 7418 } 7419 7420 to { 7421 transform: rotate(360deg); 7422 } 7423 } 7424 7425 /* Benchmark Content */ 7426 .benchmark-content { 7427 margin-top: 24px; 7428 padding-top: 24px; 7429 border-top: 2px solid #f3f4f6; 7430 } 7431 7432 .benchmark-loading { 7433 text-align: center; 7434 padding: 40px 20px; 7435 color: #6b7280; 7436 } 7437 7438 .benchmark-loading-spinner { 7439 width: 48px; 7440 height: 48px; 7441 margin: 0 auto 16px; 7442 border: 4px solid #f3f4f6; 7443 border-top-color: #667eea; 7444 border-radius: 50%; 7445 animation: spin 1s linear infinite; 7446 } 7447 7448 .benchmark-error { 7449 text-align: center; 7450 padding: 32px 20px; 7451 color: #ef4444; 7452 background: #fee2e2; 7453 border-radius: 8px; 7454 } 7455 7456 /* Benchmark Data Display */ 7457 .benchmark-data-grid { 7458 display: grid; 7459 grid-template-columns: repeat(auto-fit, minmax(200px, 1fr)); 7460 gap: 16px; 7461 margin-bottom: 24px; 7462 } 7463 7464 .benchmark-card { 7465 background: linear-gradient(135deg, #667eea15 0%, #764ba215 100%); 7466 border: 1px solid #e5e7eb; 7467 border-radius: 10px; 7468 padding: 18px; 7469 text-align: center; 7470 transition: all 0.2s ease; 7471 } 7472 7473 .benchmark-card:hover { 7474 transform: translateY(-3px); 7475 box-shadow: 0 6px 16px rgba(102, 126, 234, 0.15); 7476 } 7477 7478 .benchmark-card-label { 7479 font-size: 13px; 7480 color: #6b7280; 7481 font-weight: 500; 7482 margin-bottom: 8px; 7483 text-transform: uppercase; 7484 letter-spacing: 0.5px; 7485 } 7486 7487 .benchmark-card-value { 7488 font-size: 24px; 7489 font-weight: 700; 7490 color: #1a1a1a; 7491 line-height: 1.2; 7492 } 7493 7494 .benchmark-card-value.large { 7495 font-size: 28px; 7496 } 7497 7498 .benchmark-card-subtitle { 7499 font-size: 12px; 7500 color: #9ca3af; 7501 margin-top: 4px; 7502 } 7503 7504 /* Spec Details */ 7505 .benchmark-specs { 7506 background: #f9fafb; 7507 border-radius: 10px; 7508 padding: 20px; 7509 margin-top: 20px; 7510 } 7511 7512 .benchmark-specs-title { 7513 font-size: 16px; 7514 font-weight: 600; 7515 color: #1a1a1a; 7516 margin: 0 0 16px 0; 7517 } 7518 7519 .benchmark-spec-row { 7520 display: flex; 7521 justify-content: space-between; 7522 padding: 10px 0; 7523 border-bottom: 1px solid #e5e7eb; 7524 } 7525 7526 .benchmark-spec-row:last-child { 7527 border-bottom: none; 7528 } 7529 7530 .benchmark-spec-label { 7531 font-size: 14px; 7532 color: #6b7280; 7533 font-weight: 500; 7534 } 7535 7536 .benchmark-spec-value { 7537 font-size: 14px; 7538 color: #1a1a1a; 7539 font-weight: 600; 7540 text-align: right; 7541 } 7542 7543 /* Score Badges */ 7544 .benchmark-score-badge { 7545 display: inline-block; 7546 padding: 6px 14px; 7547 border-radius: 20px; 7548 font-size: 13px; 7549 font-weight: 600; 7550 margin-top: 8px; 7551 } 7552 7553 .benchmark-score-badge.excellent { 7554 background: #10b981; 7555 color: #fff; 7556 } 7557 7558 .benchmark-score-badge.good { 7559 background: #3b82f6; 7560 color: #fff; 7561 } 7562 7563 .benchmark-score-badge.average { 7564 background: #f59e0b; 7565 color: #fff; 7566 } 7567 7568 .benchmark-score-badge.poor { 7569 background: #ef4444; 7570 color: #fff; 7571 } 7572 7573 /* Attribution */ 7574 .benchmark-attribution { 7575 text-align: center; 7576 margin-top: 24px; 7577 padding-top: 20px; 7578 border-top: 1px solid #e5e7eb; 7579 font-size: 13px; 7580 color: #9ca3af; 7581 } 7582 7583 .benchmark-attribution a { 7584 color: #667eea; 7585 text-decoration: none; 7586 font-weight: 500; 7587 } 7588 7589 .benchmark-attribution a:hover { 7590 text-decoration: underline; 7591 } 7592 7593 /* Responsive */ 7594 @media (max-width: 768px) { 7595 .pd-benchmark-section { 7596 padding: 16px; 7597 margin: 20px 0; 7598 } 7599 7600 .benchmark-title { 7601 font-size: 18px; 7602 } 7603 7604 .benchmark-preview-badges { 7605 flex-direction: column; 7606 gap: 8px; 7607 } 7608 7609 .benchmark-badge { 7610 justify-content: center; 7611 } 7612 7613 .btn-load-benchmark { 7614 font-size: 14px; 7615 padding: 12px 20px; 7616 } 7617 7618 .benchmark-data-grid { 7619 grid-template-columns: 1fr 1fr; 7620 gap: 12px; 7621 } 7622 7623 .benchmark-card { 7624 padding: 14px; 7625 } 7626 7627 .benchmark-card-value { 7628 font-size: 20px; 7629 } 7630 7631 .benchmark-spec-row { 7632 flex-direction: column; 7633 gap: 4px; 7634 } 7635 7636 .benchmark-spec-value { 7637 text-align: left; 7638 } 7639 } 7640 7641 @media (max-width: 480px) { 7642 .benchmark-data-grid { 7643 grid-template-columns: 1fr; 7644 } 7645 } 7646 7647 /* Tile Mega Menu â Modern E-commerce Enhanced (2025) */ 7648 7649 /* Design Tokens */ 7650 :root { 7651 --mm2-bg: #ffffff; 7652 --mm2-surface: #ffffff; 7653 --mm2-surface-elevated: rgba(255, 255, 255, 0.98); 7654 --mm2-muted: #f8fafc; 7655 --mm2-border: #e2e8f0; 7656 --mm2-border-strong: #cbd5e1; 7657 --mm2-accent: #6366f1; 7658 --mm2-accent-hover: #4f46e5; 7659 --mm2-accent-10: rgba(99, 102, 241, .10); 7660 --mm2-accent-20: rgba(99, 102, 241, .20); 7661 --mm2-fg: #0f172a; 7662 --mm2-fg-muted: #64748b; 7663 --mm2-fg-light: #94a3b8; 7664 7665 /* Enhanced Shadows - Multi-layer elevation */ 7666 --mm2-shadow-sm: 0 2px 8px rgba(15, 23, 42, .06), 0 1px 2px rgba(15, 23, 42, .04); 7667 --mm2-shadow-md: 0 8px 24px rgba(15, 23, 42, .10), 0 2px 8px rgba(15, 23, 42, .06); 7668 --mm2-shadow-lg: 0 20px 60px rgba(15, 23, 42, .14), 0 8px 24px rgba(15, 23, 42, .08); 7669 --mm2-shadow-xl: 0 32px 80px rgba(15, 23, 42, .18), 0 12px 32px rgba(15, 23, 42, .10); 7670 --mm2-shadow-hover: 0 16px 40px rgba(15, 23, 42, .16), 0 6px 16px rgba(15, 23, 42, .08); 7671 7672 /* Border Radius */ 7673 --mm2-radius-xl: 20px; 7674 --mm2-radius-lg: 16px; 7675 --mm2-radius-md: 12px; 7676 --mm2-radius-sm: 10px; 7677 7678 --mm2-z: 60; 7679 7680 /* Animation Timing */ 7681 --mm2-transition-fast: 150ms cubic-bezier(0.4, 0, 0.2, 1); 7682 --mm2-transition-base: 250ms cubic-bezier(0.4, 0, 0.2, 1); 7683 --mm2-transition-slow: 350ms cubic-bezier(0.4, 0, 0.2, 1); 7684 } 7685 7686 .navbar { 7687 position: relative; 7688 z-index: var(--mm2-z); 7689 } 7690 7691 /* Trigger Button - Enhanced */ 7692 .mm2-trigger { 7693 display: inline-flex; 7694 align-items: center; 7695 gap: 8px; 7696 padding: 10px 14px; 7697 border-radius: var(--mm2-radius-md); 7698 border: 1.5px solid var(--mm2-border); 7699 background: var(--mm2-surface); 7700 color: var(--mm2-fg); 7701 cursor: pointer; 7702 user-select: none; 7703 transition: all var(--mm2-transition-fast); 7704 text-decoration: none; 7705 font-weight: 600; 7706 box-shadow: var(--mm2-shadow-sm); 7707 } 7708 7709 .mm2-trigger:hover { 7710 border-color: var(--mm2-accent); 7711 background: var(--mm2-muted); 7712 box-shadow: var(--mm2-shadow-md); 7713 transform: translateY(-1px); 7714 } 7715 7716 .mm2-trigger:active { 7717 transform: translateY(0); 7718 } 7719 7720 .mm2-trigger svg { 7721 max-width: unset !important; 7722 transition: transform var(--mm2-transition-fast); 7723 } 7724 7725 .mm2-trigger:hover svg { 7726 transform: scale(1.05); 7727 } 7728 7729 /* Backdrop - Enhanced Glassmorphism */ 7730 .mm2-backdrop { 7731 position: fixed; 7732 inset: 0; 7733 top: 0; 7734 left: 0; 7735 right: 0; 7736 bottom: 0; 7737 background: rgba(15, 23, 42, .40); 7738 backdrop-filter: blur(8px) saturate(1.2); 7739 -webkit-backdrop-filter: blur(8px) saturate(1.2); 7740 opacity: 0; 7741 pointer-events: none; 7742 z-index: 499; 7743 transition: opacity var(--mm2-transition-base); 7744 } 7745 7746 .mm2-open .mm2-backdrop { 7747 opacity: 1; 7748 pointer-events: auto; 7749 } 7750 7751 /* Panel - Glassmorphism Enhanced */ 7752 .mm2-panel { 7753 position: fixed; 7754 left: 50%; 7755 top: 120px; 7756 transform: translateX(-50%) translateY(-16px); 7757 width: min(1200px, 95vw); 7758 background: var(--mm2-surface-elevated); 7759 backdrop-filter: blur(20px) saturate(1.8); 7760 -webkit-backdrop-filter: blur(20px) saturate(1.8); 7761 border: 1.5px solid var(--mm2-border-strong); 7762 border-radius: var(--mm2-radius-xl); 7763 box-shadow: var(--mm2-shadow-xl); 7764 display: none; 7765 overflow: hidden; 7766 opacity: 0; 7767 z-index: 500; 7768 transition: transform var(--mm2-transition-slow), opacity var(--mm2-transition-base); 7769 } 7770 7771 .mm2-open .mm2-panel { 7772 display: block; 7773 opacity: 1; 7774 transform: translateX(-50%) translateY(0); 7775 } 7776 7777 /* View switcher */ 7778 .mm2-view { 7779 display: none; 7780 } 7781 7782 .mm2-open .mm2-view.is-active { 7783 display: block; 7784 } 7785 7786 /* Top grid (level-1 tiles) - Enhanced */ 7787 .mm2-top { 7788 padding: 24px; 7789 max-height: 75vh; 7790 overflow: auto; 7791 } 7792 7793 .mm2-grid { 7794 display: grid; 7795 grid-template-columns: repeat(4, minmax(0, 1fr)); 7796 gap: 14px; 7797 } 7798 7799 @media (max-width: 1200px) { 7800 .mm2-grid { 7801 grid-template-columns: repeat(3, minmax(0, 1fr)); 7802 } 7803 } 7804 7805 @media (max-width: 960px) { 7806 .mm2-grid { 7807 grid-template-columns: repeat(2, minmax(0, 1fr)); 7808 gap: 12px; 7809 } 7810 } 7811 7812 /* Stagger animation for cards */ 7813 .mm2-open .mm2-card { 7814 animation: slideInUp 0.3s cubic-bezier(0.4, 0, 0.2, 1) backwards; 7815 } 7816 7817 .mm2-open .mm2-card:nth-child(1) { 7818 animation-delay: 0.02s; 7819 } 7820 7821 .mm2-open .mm2-card:nth-child(2) { 7822 animation-delay: 0.04s; 7823 } 7824 7825 .mm2-open .mm2-card:nth-child(3) { 7826 animation-delay: 0.06s; 7827 } 7828 7829 .mm2-open .mm2-card:nth-child(4) { 7830 animation-delay: 0.08s; 7831 } 7832 7833 .mm2-open .mm2-card:nth-child(5) { 7834 animation-delay: 0.10s; 7835 } 7836 7837 .mm2-open .mm2-card:nth-child(6) { 7838 animation-delay: 0.12s; 7839 } 7840 7841 .mm2-open .mm2-card:nth-child(7) { 7842 animation-delay: 0.14s; 7843 } 7844 7845 .mm2-open .mm2-card:nth-child(8) { 7846 animation-delay: 0.16s; 7847 } 7848 7849 .mm2-open .mm2-card:nth-child(9) { 7850 animation-delay: 0.18s; 7851 } 7852 7853 .mm2-open .mm2-card:nth-child(10) { 7854 animation-delay: 0.20s; 7855 } 7856 7857 .mm2-open .mm2-card:nth-child(11) { 7858 animation-delay: 0.22s; 7859 } 7860 7861 .mm2-open .mm2-card:nth-child(12) { 7862 animation-delay: 0.24s; 7863 } 7864 7865 .mm2-open .mm2-card:nth-child(n+13) { 7866 animation-delay: 0.26s; 7867 } 7868
7869 @keyframes slideInUp { 7870 from { 7871 opacity: 0; 7872 transform: translateY(12px); 7873 } 7874 7875 to { 7876 opacity: 1; 7877 transform: translateY(0); 7878 } 7879 } 7880 7881 .mm2-card { 7882 position: relative; 7883 display: flex; 7884 gap: 14px; 7885 align-items: center; 7886 padding: 16px; 7887 border-radius: var(--mm2-radius-md); 7888 background: var(--mm2-surface); 7889 border: 1.5px solid var(--mm2-border); 7890 text-decoration: none; 7891 color: var(--mm2-fg); 7892 transition: all var(--mm2-transition-fast); 7893 min-height: 72px; 7894 box-shadow: var(--mm2-shadow-sm); 7895 } 7896 7897 .mm2-card:hover { 7898 border-color: var(--mm2-accent); 7899 background: linear-gradient(135deg, rgba(255, 255, 255, 1), rgba(248, 250, 252, 1)); 7900 box-shadow: var(--mm2-shadow-hover); 7901 transform: translateY(-3px); 7902 } 7903 7904 .mm2-card:active { 7905 transform: translateY(-1px); 7906 } 7907 7908 /* Icon with category-specific gradients */ 7909 .mm2-card .mm2-ico { 7910 width: 48px; 7911 height: 48px; 7912 border-radius: 12px; 7913 display: inline-flex; 7914 align-items: center; 7915 justify-content: center; 7916 background: linear-gradient(135deg, #e0e7ff, #fff); 7917 border: 1.5px solid #c7d2fe; 7918 color: #4f46e5; 7919 flex-shrink: 0; 7920 transition: all var(--mm2-transition-fast); 7921 box-shadow: 0 2px 8px rgba(99, 102, 241, 0.1); 7922 } 7923 7924 .mm2-card:hover .mm2-ico { 7925 transform: scale(1.08) rotate(2deg); 7926 box-shadow: 0 4px 16px rgba(99, 102, 241, 0.2); 7927 } 7928 7929 .mm2-card .mm2-ico svg { 7930 transition: transform var(--mm2-transition-fast); 7931 } 7932 7933 .mm2-card:hover .mm2-ico svg { 7934 transform: scale(1.1); 7935 } 7936 7937 .mm2-card .mm2-title { 7938 font-weight: 700; 7939 font-size: 15px; 7940 letter-spacing: -0.01em; 7941 line-height: 1.3; 7942 } 7943 7944 .mm2-card .mm2-sub { 7945 color: var(--mm2-fg-muted); 7946 font-size: 12.5px; 7947 margin-top: 3px; 7948 display: flex; 7949 align-items: center; 7950 gap: 4px; 7951 white-space: nowrap; 7952 overflow: hidden; 7953 text-overflow: ellipsis; 7954 } 7955 7956 .mm2-card .mm2-count { 7957 display: inline-flex; 7958 padding: 2px 8px; 7959 border-radius: 6px; 7960 background: var(--mm2-accent-10); 7961 color: var(--mm2-accent); 7962 font-weight: 600; 7963 font-size: 11px; 7964 margin-left: 4px; 7965 } 7966 7967 /* Detail view (level-2 + level-3) - Enhanced */ 7968 .mm2-detail { 7969 position: relative; 7970 padding: 16px 24px 24px; 7971 max-height: 70vh; 7972 overflow: auto; 7973 } 7974 7975 .mm2-detail-header { 7976 display: flex; 7977 align-items: center; 7978 gap: 14px; 7979 padding: 10px 0 16px; 7980 border-bottom: 2px solid var(--mm2-muted); 7981 margin-bottom: 16px; 7982 } 7983 7984 .mm2-back { 7985 display: inline-flex; 7986 align-items: center; 7987 justify-content: center; 7988 width: 40px; 7989 height: 40px; 7990 border-radius: 12px; 7991 border: 1.5px solid var(--mm2-border); 7992 background: #fff; 7993 color: var(--mm2-fg); 7994 cursor: pointer; 7995 transition: all var(--mm2-transition-fast); 7996 box-shadow: var(--mm2-shadow-sm); 7997 } 7998 7999 .mm2-back:hover { 8000 border-color: var(--mm2-accent); 8001 background: var(--mm2-muted); 8002 transform: translateX(-3px); 8003 box-shadow: var(--mm2-shadow-md); 8004 } 8005 8006 .mm2-detail-title { 8007 font-weight: 800; 8008 font-size: 18px; 8009 letter-spacing: -0.02em; 8010 } 8011 8012 /* Two-pane layout (desktop) - Enhanced */ 8013 .mm2-detail-layout { 8014 display: grid; 8015 grid-template-columns: 280px 1fr; 8016 gap: 20px; 8017 } 8018 8019 /* Left: subnav (level-2 list) - Enhanced */ 8020 .mm2-subnav { 8021 position: sticky; 8022 top: 8px; 8023 align-self: start; 8024 max-height: calc(70vh - 56px); 8025 overflow: auto; 8026 padding-right: 6px; 8027 } 8028 8029 .mm2-subnav::-webkit-scrollbar {
8030 width: 8px; 8031 height: 8px; 8032 } 8033 8034 .mm2-subnav::-webkit-scrollbar-track { 8035 background: transparent; 8036 } 8037 8038 .mm2-subnav::-webkit-scrollbar-thumb { 8039 background: #cbd5e1; 8040 border-radius: 8px; 8041 } 8042 8043 .mm2-subnav::-webkit-scrollbar-thumb:hover { 8044 background: #94a3b8; 8045 } 8046 8047 .mm2-subitem { 8048 display: flex; 8049 align-items: center; 8050 justify-content: flex-start; 8051 gap: 10px; 8052 width: 100%; 8053 padding: 12px 14px; 8054 border-radius: 12px; 8055 border: 1.5px solid transparent; 8056 background: transparent; 8057 color: var(--mm2-fg); 8058 cursor: pointer; 8059 text-align: left; 8060 transition: all var(--mm2-transition-fast); 8061 margin-bottom: 6px; 8062 font-weight: 600; 8063 font-size: 14px; 8064 position: relative; 8065 } 8066 8067 .mm2-subitem::before { 8068 content: ''; 8069 position: absolute; 8070 left: 0; 8071 top: 50%; 8072 transform: translateY(-50%); 8073 width: 3px; 8074 height: 0; 8075 background: var(--mm2-accent); 8076 border-radius: 0 2px 2px 0; 8077 transition: height var(--mm2-transition-fast); 8078 } 8079 8080 .mm2-subitem:hover { 8081 background: var(--mm2-muted); 8082 color: var(--mm2-accent-hover); 8083 } 8084 8085 .mm2-subitem.active { 8086 background: linear-gradient(135deg, rgba(99, 102, 241, 0.08), rgba(99, 102, 241, 0.04)); 8087 border-color: var(--mm2-accent-20); 8088 color: var(--mm2-accent-hover); 8089 box-shadow: inset 0 0 0 1px rgba(99, 102, 241, 0.1); 8090 } 8091 8092 .mm2-subitem.active::before { 8093 height: 24px; 8094 } 8095 8096 /* Right: subcontent (level-3 grid) - Enhanced */ 8097 .mm2-subcontent { 8098 min-height: 240px; 8099 } 8100 8101 .mm2-links { 8102 display: grid; 8103 gap: 12px 14px; 8104 grid-template-columns: repeat(3, minmax(0, 1fr)); 8105 } 8106 8107 @media (max-width: 1200px) { 8108 .mm2-links { 8109 grid-template-columns: repeat(2, minmax(0, 1fr)); 8110 } 8111 } 8112 8113 .mm2-link { 8114 display: flex; 8115 align-items: center; 8116 gap: 12px; 8117 padding: 14px; 8118 border: 1.5px solid var(--mm2-border); 8119 border-radius: var(--mm2-radius-md); 8120 background: var(--mm2-surface); 8121 color: var(--mm2-fg); 8122 text-decoration: none; 8123 min-height: 52px; 8124 font-weight: 500; 8125 font-size: 14px; 8126 transition: all var(--mm2-transition-fast); 8127 box-shadow: var(--mm2-shadow-sm); 8128 position: relative; 8129 justify-content: space-between; 8130 } 8131 8132 .mm2-link:hover { 8133 background: var(--mm2-muted); 8134 border-color: var(--mm2-accent); 8135 transform: translateX(4px); 8136 box-shadow: var(--mm2-shadow-md); 8137 } 8138 8139 .mm2-link-text { 8140 flex: 1; 8141 } 8142 8143 /* Product Thumbnails */ 8144 .mm2-thumbs { 8145 display: flex; 8146 gap: 6px; 8147 align-items: center; 8148 margin-left: auto; 8149 flex-shrink: 0; 8150 } 8151 8152 .mm2-thumb { 8153 width: 36px; 8154 height: 36px; 8155 border-radius: 8px; 8156 object-fit: cover; 8157 border: 1.5px solid var(--mm2-border); 8158 box-shadow: 0 2px 6px rgba(0, 0, 0, 0.08); 8159 transition: all var(--mm2-transition-fast); 8160 background: var(--mm2-muted); 8161 } 8162 8163 .mm2-link:hover .mm2-thumb { 8164 border-color: var(--mm2-accent); 8165 box-shadow: 0 4px 10px rgba(99, 102, 241, 0.15); 8166 transform: scale(1.08); 8167 } 8168 8169 /* Thumbnail Skeleton Loader */ 8170 .mm2-thumb-skeleton { 8171 width: 36px; 8172 height: 36px; 8173 border-radius: 8px; 8174 background: linear-gradient(90deg, #f1f5f9 25%, #e2e8f0 50%, #f1f5f9 75%); 8175 background-size: 200% 100%; 8176 animation: shimmer 1.5s infinite; 8177 border: 1.5px solid var(--mm2-border); 8178 } 8179 8180 .mm2-badge { 8181 font-size: 11px; 8182 padding: 3px 10px; 8183 margin-left: auto; 8184 border-radius: 12px; 8185 background: var(--mm2-accent-10); 8186 color: var(--mm2-accent); 8187 font-weight: 700; 8188 border: 1px solid var(--mm2-accent-20); 8189 } 8190 8191 /* "See all" highlight card - Enhanced */ 8192 .mm2-seeall { 8193 border: 2px dashed var(--mm2-accent); 8194 background: linear-gradient(135deg, rgba(99, 102, 241, .08), rgba(99, 102, 241, .02)); 8195 font-weight: 700; 8196 } 8197 8198 .mm2-seeall:hover { 8199 background: linear-gradient(135deg, rgba(99, 102, 241, .14), rgba(99, 102, 241, .06)); 8200 border-style: solid; 8201 transform: translateX(6px) scale(1.02); 8202 } 8203 8204 /* Mobile panel styles - Enhanced with drag handle & better touch targets */ 8205 @media (max-width: 960px) { 8206 .mm2-panel { 8207 position: fixed; 8208 left: 0; 8209 right: 0; 8210 bottom: 0; 8211 top: auto; 8212 width: 100%; 8213 max-height: 88vh; 8214 transform: translateX(0) translateY(100%); 8215 border-radius: var(--mm2-radius-xl) var(--mm2-radius-xl) 0 0; 8216 border-bottom: none; 8217 } 8218 8219 .mm2-open .mm2-panel { 8220 transform: translateX(0) translateY(0); 8221 z-index: 9999; 8222 } 8223 8224 /* Enhanced backdrop for mobile */ 8225 .mm2-backdrop { 8226 backdrop-filter: blur(6px) saturate(1.2); 8227 -webkit-backdrop-filter: blur(6px) saturate(1.2); 8228 } 8229 8230 /* Mobile close button - Soft glassmorphism */ 8231 .mm2-mobile-close { 8232 position: absolute; 8233 top: 4px; 8234 right: 8px; 8235 width: 28px; 8236 height: 28px; 8237 border-radius: 50%; 8238 border: 1px solid rgba(226, 232, 240, 0.6); 8239 background: rgba(255, 255, 255, 0.85); 8240 backdrop-filter: blur(12px) saturate(1.8); 8241 -webkit-backdrop-filter: blur(12px) saturate(1.8); 8242 color: var(--mm2-fg-muted); 8243 display: inline-flex; 8244 align-items: center; 8245 justify-content: center; 8246 cursor: pointer; 8247 transition: all var(--mm2-transition-fast); 8248 box-shadow: 0 2px 8px rgba(15, 23, 42, 0.08); 8249 z-index: 20; 8250 } 8251 8252 .mm2-mobile-close:hover { 8253 background: rgba(254, 242, 242, 0.95); 8254 border-color: rgba(252, 165, 165, 0.8); 8255 color: #dc2626; 8256 box-shadow: 0 4px 12px rgba(220, 38, 38, 0.15); 8257 } 8258 8259 .mm2-mobile-close:active { 8260 transform: scale(0.92); 8261 } 8262 8263 /* Drag handle indicator */ 8264 .mm2-top::before, 8265 .mm2-detail::before { 8266 content: ''; 8267 position: sticky; 8268 top: 0; 8269 left: 50%; 8270 transform: translateX(-50%); 8271 width: 40px; 8272 height: 4px; 8273 background: var(--mm2-border-strong); 8274 border-radius: 999px; 8275 margin: 12px auto 20px; 8276 display: block; 8277 z-index: 10; 8278 transition: background var(--mm2-transition-fast); 8279 } 8280 8281 .mm2-panel:active .mm2-top::before, 8282 .mm2-panel:active .mm2-detail::before { 8283 background: #94a3b8; 8284 } 8285 8286 .mm2-top { 8287 padding: 10px; 8288 } 8289 8290 .mm2-top, 8291 .mm2-detail { 8292 max-height: min(82vh, 720px); 8293 padding-top: 8px; 8294 } 8295 8296 /* Two-pane collapses: subnav becomes GRID (no horizontal scroll) */ 8297 .mm2-detail-layout { 8298 display: block; 8299 } 8300 8301 .mm2-subnav { 8302 position: static; 8303 max-height: none; 8304 overflow: visible; 8305 display: grid; 8306 gap: 10px; 8307 padding: 10px 4px 16px; 8308 margin-bottom: 16px; 8309 grid-template-columns: repeat(2, minmax(0, 1fr)); 8310 border-bottom: 2px solid var(--mm2-muted); 8311 } 8312 8313 .mm2-subitem { 8314 margin: 0; 8315 width: 100%; 8316 text-align: center; 8317 border-radius: 14px; 8318 background: #fff; 8319 border: 1.5px solid var(--mm2-border); 8320 white-space: normal; 8321 line-height: 1.3; 8322 min-height: 48px; 8323 justify-content: center; 8324 padding: 12px 10px; 8325 font-size: 13.5px; 8326 box-shadow: var(--mm2-shadow-sm); 8327 } 8328 8329 .mm2-subitem::before { 8330 display: none; 8331 } 8332 8333 .mm2-subitem:hover { 8334 transform: scale(1.02); 8335 } 8336 8337 .mm2-subitem.active { 8338 background: linear-gradient(135deg, var(--mm2-accent), var(--mm2-accent-hover)); 8339 border-color: var(--mm2-accent-hover); 8340 color: white; 8341 box-shadow: 0 4px 12px rgba(99, 102, 241, 0.3); 8342 font-weight: 700; 8343 } 8344 8345 /* Level-3 grid tetap 2 kolom dengan spacing lebih baik */ 8346 .mm2-links { 8347 grid-template-columns: repeat(2, minmax(0, 1fr)); 8348 gap: 10px; 8349 } 8350
8351 /* Mobile: hide thumbnails untuk save space */ 8352 .mm2-thumbs { 8353 display: none; 8354 } 8355 8356 /* Larger touch targets for mobile */ 8357 .mm2-card { 8358 min-height: 80px; 8359 padding: 18px 14px; 8360 } 8361 8362 .mm2-card .mm2-ico { 8363 width: 50px; 8364 height: 50px; 8365 } 8366 8367 .mm2-card .mm2-title { 8368 font-size: 14px; 8369 } 8370 8371 .mm2-card .mm2-sub { 8372 font-size: 11.5px; 8373 } 8374 8375 .mm2-link { 8376 min-height: 56px; 8377 padding: 16px; 8378 } 8379 8380 .mm2-back { 8381 width: 44px; 8382 height: 44px; 8383 } 8384 8385 /* Grid spacing */ 8386 .mm2-grid { 8387 gap: 10px; 8388 } 8389 } 8390 8391 /* Product Compare Feature Styles */ 8392 8393 /* Compare Button in Product Detail - Modern Chip Style */ 8394 .pd-compare-section { 8395 margin: 0.5rem 0; 8396 display: flex; 8397 align-items: center; 8398 gap: 0.5rem; 8399 } 8400 8401 .pd-compare-btn { 8402 display: inline-flex; 8403 align-items: center; 8404 gap: 0.4rem; 8405 padding: 0.5rem 0.85rem; 8406 border: 1px solid #cbd5e1; 8407 border-radius: 20px; 8408 background: #fff; 8409 color: #64748b; 8410 font-weight: 600; 8411 font-size: 0.8rem; 8412 cursor: pointer; 8413 transition: all 0.2s ease; 8414 position: relative; 8415 white-space: nowrap; 8416 } 8417 8418 .pd-compare-btn:hover { 8419 border-color: #3b82f6; 8420 color: #3b82f6; 8421 background: #f0f9ff; 8422 transform: translateY(-1px); 8423 box-shadow: 0 2px 6px rgba(59, 130, 246, 0.15); 8424 } 8425 8426 .pd-compare-btn.added { 8427 border-color: #16a34a; 8428 color: #16a34a; 8429 background: #f0fdf4; 8430 } 8431 8432 .pd-compare-btn .compare-remove { 8433 display: none; 8434 } 8435 8436 .pd-compare-btn.added .compare-text { 8437 display: none; 8438 } 8439 8440 .pd-compare-btn.added .compare-remove { 8441 display: flex !important; 8442 align-items: center; 8443 gap: 0.25rem; 8444 font-weight: 600; 8445 font-size: 0.9rem; 8446 color: #dc2626 !important; 8447 opacity: 1 !important; 8448 visibility: visible !important; 8449 z-index: 1; 8450 position: relative; 8451 } 8452 8453 .pd-compare-btn.added .compare-remove[hidden] { 8454 display: flex !important; 8455 } 8456 8457 /* Force visibility for added state */ 8458 .pd-compare-btn.added .compare-remove { 8459 display: flex !important; 8460 } 8461 8462 [hidden].compare-remove { 8463 display: none !important; 8464 } 8465 8466 .pd-compare-btn.added [hidden].compare-remove { 8467 display: flex !important; 8468 } 8469 8470 /* Ensure the added state text is always visible */ 8471 .pd-compare-btn.added { 8472 border-color: #dc2626 !important; 8473 color: #dc2626 !important; 8474 background: #fef2f2 !important; 8475 } 8476 8477 .pd-compare-btn.added .compare-remove svg { 8478 color: #dc2626 !important; 8479 } 8480 8481 .pd-compare-btn.added:hover { 8482 border-color: #15803d; 8483 color: #15803d; 8484 background: #dcfce7; 8485 transform: translateY(-1px); 8486 box-shadow: 0 2px 6px rgba(22, 163, 74, 0.2); 8487 } 8488 8489 .pd-compare-btn .compare-icon { 8490 width: 16px; 8491 height: 16px; 8492 flex-shrink: 0; 8493 } 8494 8495 .pd-compare-info { 8496 display: inline-flex; 8497 align-items: center; 8498 } 8499 8500 .compare-note { 8501 color: #94a3b8; 8502 font-size: 0.7rem; 8503 font-weight: 500; 8504 transition: color 0.2s ease; 8505 } 8506 8507 .pd-compare-btn.added+.pd-compare-info .compare-note { 8508 color: #16a34a; 8509 font-weight: 600; 8510 } 8511 8512 /* Compare Badge in Navigation */ 8513 .compare-indicator { 8514 position: relative; 8515 } 8516 8517 .compare-indicator .badge { 8518 position: absolute; 8519 top: -8px; 8520 right: -8px; 8521 min-width: 18px; 8522 height: 18px; 8523 padding: 0 5px; 8524 background: #ef4444; 8525 color: white; 8526 border-radius: 9px; 8527 font-size: 11px; 8528 8529 8530 /* Floating Compare Badge (Sticky) */ 8531 .compare-floating-badge { 8532 position: fixed; 8533 right: 16px;
8534 bottom: calc(20px + 60px); 8535 /* Above scroll-to-top button */ 8536 width: auto; 8537 min-width: 56px; 8538 height: 56px; 8539 padding: 0 16px; 8540 border-radius: 28px; 8541 background: linear-gradient(135deg, #3b82f6 0%, #2563eb 100%); 8542 color: #fff; 8543 box-shadow: 0 8px 24px -8px rgba(59, 130, 246, 0.5); 8544 cursor: pointer; 8545 z-index: 1104; 8546 opacity: 0; 8547 transform: translateY(8px) scale(0.9); 8548 transition: opacity 0.3s ease, transform 0.3s ease, box-shadow 0.2s ease; 8549 display: flex; 8550 align-items: center; 8551 justify-content: center; 8552 gap: 8px; 8553 font-weight: 600; 8554 font-size: 0.85rem; 8555 pointer-events: none; 8556 } 8557 8558 .compare-floating-badge.visible { 8559 opacity: 1; 8560 transform: translateY(0) scale(1); 8561 pointer-events: auto; 8562 } 8563 8564 .compare-floating-badge:hover { 8565 box-shadow: 0 12px 32px -10px rgba(59, 130, 246, 0.6); 8566 transform: translateY(-2px) scale(1.02); 8567 } 8568 8569 .compare-floating-badge:active { 8570 transform: translateY(0) scale(0.98); 8571 } 8572 8573 .compare-floating-badge .cfb-icon { 8574 width: 20px; 8575 height: 20px; 8576 flex-shrink: 0; 8577 } 8578 8579 .compare-floating-badge .cfb-count { 8580 font-size: 0.9rem; 8581 font-weight: 700; 8582 min-width: 20px; 8583 text-align: center; 8584 background: rgba(255, 255, 255, 0.25); 8585 padding: 2px 8px; 8586 border-radius: 12px; 8587 line-height: 1; 8588 display: flex; 8589 align-items: center; 8590 justify-content: center; 8591 height: 24px; 8592 } 8593 8594 .compare-floating-badge .cfb-text { 8595 display: none; 8596 } 8597 8598 @media (min-width: 641px) { 8599 .compare-floating-badge .cfb-text { 8600 display: block; 8601 white-space: nowrap; 8602 } 8603 } 8604 8605 @media (max-width: 640px) { 8606 .compare-floating-badge { 8607 right: 14px; 8608 bottom: calc(var(--scroll-top-bottom, calc(68px + 18px + env(safe-area-inset-bottom))) + 60px); 8609 min-width: 48px; 8610 height: 48px; 8611 padding: 0 12px; 8612 border-radius: 24px; 8613 } 8614 8615 .compare-floating-badge .cfb-icon { 8616 width: 18px; 8617 height: 18px; 8618 } 8619 8620 .compare-floating-badge .cfb-count { 8621 font-size: 0.8rem; 8622 padding: 2px 6px; 8623 height: 20px; 8624 } 8625 } 8626 8627 font-weight: 600; 8628 display: flex; 8629 align-items: center; 8630 justify-content: center; 8631 transform: scale(0); 8632 transition: transform 0.2s ease; 8633 } 8634 8635 .compare-indicator .badge.active { 8636 transform: scale(1); 8637 } 8638 8639 /* Compare Sidebar */ 8640 .compare-sidebar { 8641 position: fixed; 8642 top: 0; 8643 right: -400px; 8644 width: 400px; 8645 height: 100vh; 8646 background: #ffffff; 8647 box-shadow: -4px 0 20px rgba(0, 0, 0, 0.1); 8648 z-index: 9999; 8649 display: flex; 8650 flex-direction: column; 8651 transition: right 0.3s ease; 8652 } 8653 8654 .compare-sidebar.open { 8655 right: 0; 8656 } 8657 8658 .compare-overlay { 8659 position: fixed; 8660 top: 0; 8661 left: 0; 8662 width: 100%; 8663 height: 100%; 8664 background: rgba(0, 0, 0, 0.5); 8665 z-index: 9998; 8666 opacity: 0; 8667 visibility: hidden; 8668 transition: all 0.3s ease; 8669 } 8670 8671 .compare-overlay.active { 8672 opacity: 1; 8673 visibility: visible; 8674 } 8675 8676 .compare-header { 8677 display: flex; 8678 align-items: center; 8679 justify-content: space-between; 8680 padding: 1.25rem; 8681 border-bottom: 1px solid #e2e8f0; 8682 background: #f8fafc; 8683 } 8684 8685 .compare-title { 8686 display: flex; 8687 align-items: center; 8688 gap: 0.5rem; 8689 font-size: 1rem; 8690 font-weight: 600; 8691 color: #1e293b; 8692 margin: 0; 8693 } 8694 8695 .compare-count { 8696 color: #64748b; 8697 font-weight: 400; 8698 } 8699 8700 .compare-close { 8701 display: flex; 8702 align-items: center; 8703 justify-content: center; 8704 width: 32px; 8705 height: 32px; 8706 border: none; 8707 border-radius: 6px; 8708 background: transparent; 8709 color: #64748b; 8710 cursor: pointer; 8711 transition: all 0.2s ease; 8712 } 8713 8714 .compare-close:hover { 8715 background: #e2e8f0; 8716 color: #374151; 8717 } 8718 8719 .compare-content { 8720 flex: 1; 8721 overflow-y: auto; 8722 padding: 1rem; 8723 } 8724 8725 .compare-empty { 8726 display: flex; 8727 flex-direction: column; 8728 align-items: center; 8729 justify-content: center; 8730 height: 100%; 8731 text-align: center; 8732 padding: 2rem 1rem; 8733 } 8734 8735 .compare-empty h5 { 8736 margin: 1rem 0 0.5rem; 8737 color: #374151; 8738 } 8739 8740 .compare-empty p { 8741 color: #64748b; 8742 font-size: 0.875rem; 8743 line-height: 1.5; 8744 } 8745 8746 .compare-list { 8747 display: flex; 8748 flex-direction: column; 8749 gap: 0.75rem; 8750 } 8751 8752 .compare-item { 8753 display: flex; 8754 align-items: center; 8755 gap: 0.75rem; 8756 padding: 0.75rem; 8757 border: 1px solid #e2e8f0; 8758 border-radius: 8px; 8759 background: #ffffff; 8760 transition: all 0.2s ease; 8761 } 8762 8763 .compare-item:hover { 8764 border-color: #cbd5e1; 8765 box-shadow: 0 2px 8px rgba(0, 0, 0, 0.05); 8766 } 8767 8768 .compare-item-image { 8769 flex-shrink: 0; 8770 width: 48px; 8771 height: 48px; 8772 border-radius: 6px; 8773 overflow: hidden; 8774 border: 1px solid #e2e8f0; 8775 } 8776 8777 .compare-item-image img { 8778 width: 100%; 8779 height: 100%; 8780 object-fit: cover; 8781 } 8782 8783 .compare-item-info { 8784 flex: 1; 8785 min-width: 0; 8786 } 8787 8788 .compare-item-name { 8789 font-weight: 500; 8790 font-size: 0.875rem; 8791 color: #1e293b; 8792 margin-bottom: 0.25rem; 8793 line-height: 1.3; 8794 display: -webkit-box; 8795 -webkit-line-clamp: 2; 8796 -webkit-box-orient: vertical; 8797 overflow: hidden; 8798 } 8799 8800 .compare-item-price { 8801 font-weight: 600; 8802 font-size: 0.8rem; 8803 color: #059669; 8804 } 8805 8806 .compare-item-remove { 8807 flex-shrink: 0; 8808 display: flex; 8809 align-items: center; 8810 justify-content: center; 8811 width: 28px; 8812 height: 28px; 8813 border: none; 8814 border-radius: 4px; 8815 background: transparent; 8816 color: #dc2626; 8817 cursor: pointer; 8818 transition: all 0.2s ease; 8819 } 8820 8821 .compare-item-remove:hover { 8822 background: #fef2f2; 8823 color: #991b1b; 8824 } 8825 8826 .compare-actions { 8827 padding: 1rem; 8828 border-top: 1px solid #e2e8f0; 8829 display: flex; 8830 gap: 0.75rem; 8831 } 8832 8833 .compare-actions .btn { 8834 flex: 1; 8835 padding: 0.75rem 1rem; 8836 border-radius: 6px; 8837 font-weight: 600; 8838 font-size: 0.875rem; 8839 display: flex; 8840 align-items: center; 8841 justify-content: center; 8842 gap: 0.5rem; 8843 cursor: pointer; 8844 transition: all 0.2s ease; 8845 } 8846 8847 .btn-outline-danger { 8848 border: 1px solid #dc2626; 8849 background: transparent; 8850 color: #dc2626; 8851 } 8852 8853 .btn-outline-danger:hover { 8854 background: #dc2626; 8855 color: white; 8856 } 8857 8858 .btn-primary { 8859 border: 1px solid #3b82f6; 8860 background: #3b82f6; 8861 color: white; 8862 } 8863 8864 .btn-primary:hover { 8865 background: #2563eb; 8866 border-color: #2563eb; 8867 } 8868 8869 .btn-primary:disabled { 8870 opacity: 0.5;
8871 cursor: not-allowed; 8872 } 8873 8874 .btn-primary:disabled:hover { 8875 background: #3b82f6; 8876 border-color: #3b82f6; 8877 } 8878 8879 /* AI Comparison Modal */ 8880 .ai-compare-modal { 8881 position: fixed; 8882 top: 0; 8883 left: 0; 8884 width: 100%; 8885 height: 100%; 8886 z-index: 10000; 8887 display: none; 8888 align-items: center; 8889 justify-content: center; 8890 } 8891 8892 .ai-compare-modal.open { 8893 display: flex; 8894 } 8895 8896 .ai-compare-modal .modal-backdrop { 8897 position: absolute; 8898 top: 0; 8899 left: 0; 8900 width: 100%; 8901 height: 100%; 8902 background: rgba(0, 0, 0, 0.6); 8903 backdrop-filter: blur(4px); 8904 } 8905 8906 .modal-container { 8907 position: relative; 8908 width: 90%; 8909 max-width: 1000px; 8910 max-height: 90vh; 8911 background: #ffffff; 8912 border-radius: 12px; 8913 box-shadow: 0 20px 40px rgba(0, 0, 0, 0.15); 8914 display: flex; 8915 flex-direction: column; 8916 overflow: hidden; 8917 } 8918 8919 .modal-header { 8920 display: flex; 8921 align-items: center; 8922 justify-content: space-between; 8923 padding: 1.5rem 2rem; 8924 border-bottom: 1px solid #e2e8f0; 8925 background: #f8fafc; 8926 } 8927 8928 .modal-title { 8929 display: flex; 8930 align-items: center; 8931 gap: 0.75rem; 8932 font-size: 1.25rem; 8933 font-weight: 600; 8934 color: #1e293b; 8935 margin: 0; 8936 } 8937 8938 .modal-close { 8939 display: flex; 8940 align-items: center; 8941 justify-content: center; 8942 width: 36px; 8943 height: 36px; 8944 border: none; 8945 border-radius: 8px; 8946 background: transparent; 8947 color: #64748b; 8948 cursor: pointer; 8949 transition: all 0.2s ease; 8950 } 8951
8952 .modal-close:hover { 8953 background: #e2e8f0; 8954 color: #374151; 8955 } 8956 8957 .modal-content { 8958 flex: 1; 8959 overflow-y: auto; 8960 padding: 2rem; 8961 } 8962 8963 /* AI Loading State */ 8964 .ai-loading { 8965 display: flex; 8966 flex-direction: column; 8967 align-items: center; 8968 justify-content: center; 8969 padding: 3rem 2rem; 8970 text-align: center; 8971 } 8972 8973 .loading-animation { 8974 margin-bottom: 1rem; 8975 } 8976 8977 .typing-indicator { 8978 display: flex; 8979 align-items: center; 8980 justify-content: center; 8981 gap: 4px; 8982 margin-bottom: 1rem; 8983 } 8984 8985 .typing-indicator span { 8986 width: 8px; 8987 height: 8px; 8988 background: #3b82f6; 8989 border-radius: 50%; 8990 animation: typing 1.4s infinite ease-in-out; 8991 } 8992 8993 .typing-indicator span:nth-child(2) { 8994 animation-delay: 0.2s; 8995 } 8996 8997 .typing-indicator span:nth-child(3) { 8998 animation-delay: 0.4s; 8999 } 9000 9001 @keyframes typing { 9002 9003 0%, 9004 80%, 9005 100% { 9006 opacity: 0.3; 9007 transform: scale(0.8); 9008 } 9009 9010 40% { 9011 opacity: 1; 9012 transform: scale(1); 9013 } 9014 } 9015 9016 .ai-loading p { 9017 font-weight: 500; 9018 color: #1e293b; 9019 margin-bottom: 0.5rem; 9020 } 9021 9022 .ai-loading small { 9023 color: #64748b; 9024 } 9025 9026 /* AI Error State */ 9027 .ai-error { 9028 display: flex; 9029 flex-direction: column; 9030 align-items: center; 9031 justify-content: center; 9032 padding: 3rem 2rem; 9033 text-align: center; 9034 } 9035 9036 .ai-error h4 { 9037 margin: 1rem 0 0.5rem; 9038 color: #dc2626; 9039 } 9040 9041 .ai-error p { 9042 color: #64748b; 9043 margin-bottom: 1.5rem; 9044 } 9045 9046 /* AI Results */ 9047 .ai-results>div { 9048 margin-bottom: 2rem; 9049 } 9050 9051 .ai-summary-card, 9052 .ai-comparison-table, 9053 .ai-detailed-analysis, 9054 .ai-recommendations, 9055 .ai-tips { 9056 background: #f8fafc; 9057 border: 1px solid #e2e8f0; 9058 border-radius: 12px; 9059 padding: 1.5rem; 9060 } 9061 9062 .ai-results h4 { 9063 display: flex; 9064 align-items: center; 9065 gap: 0.5rem; 9066 font-size: 1.1rem; 9067 font-weight: 600; 9068 color: #1e293b; 9069 margin-bottom: 1rem; 9070 } 9071 9072 .summary-text { 9073 font-size: 1rem; 9074 line-height: 1.6; 9075 color: #374151; 9076 margin-bottom: 1rem; 9077 } 9078 9079 .winner-badge { 9080 padding: 1rem; 9081 background: linear-gradient(135deg, #10b981 0%, #059669 100%); 9082 color: white; 9083 border-radius: 8px; 9084 } 9085 9086 .winner-badge strong { 9087 display: block; 9088 margin-bottom: 0.25rem; 9089 } 9090 9091 .winner-badge small { 9092 opacity: 0.9; 9093 font-size: 0.875rem; 9094 } 9095 9096 /* Comparison Table */ 9097 .comparison-grid { 9098 display: grid; 9099 gap: 1rem; 9100 margin-top: 1rem; 9101 } 9102 9103 .comparison-category { 9104 background: white; 9105 border: 1px solid #e2e8f0; 9106 border-radius: 8px; 9107 overflow: hidden; 9108 } 9109 9110 .category-header { 9111 background: #f1f5f9; 9112 padding: 0.75rem 1rem; 9113 font-weight: 600; 9114 color: #1e293b; 9115 border-bottom: 1px solid #e2e8f0; 9116 } 9117 9118 .category-products { 9119 display: grid; 9120 grid-template-columns: repeat(auto-fit, minmax(200px, 1fr)); 9121 gap: 1px; 9122 background: #e2e8f0; 9123 } 9124 9125 .product-score { 9126 background: white; 9127 padding: 1rem; 9128 text-align: center; 9129 } 9130 9131 .score-value { 9132 display: inline-flex; 9133 align-items: center; 9134 gap: 0.25rem; 9135 margin-bottom: 0.5rem; 9136 } 9137 9138 .score-stars { 9139 color: #fbbf24; 9140 } 9141 9142 .score-note { 9143 font-size: 0.8rem; 9144 color: #64748b; 9145 line-height: 1.3; 9146 } 9147 9148 /* Product name header in comparison table */ 9149 .product-name-header { 9150 margin-bottom: 0.5rem; 9151 } 9152 9153 .product-name-header strong { 9154 font-size: .8rem; 9155 /* h5 size (18px) */ 9156 font-weight: 600; 9157 color: #1e293b; 9158 line-height: 1.3; 9159 display: block; 9160 word-break: break-word; 9161 } 9162 9163 .product-price { 9164 font-size: 0.8rem; 9165 font-weight: 600; 9166 color: #059669; 9167 } 9168 9169 /* Detailed Analysis */ 9170 .products-analysis { 9171 display: grid; 9172 gap: 1rem; 9173 margin-top: 1rem; 9174 } 9175 9176 .product-analysis { 9177 background: white; 9178 border: 1px solid #e2e8f0; 9179 border-radius: 8px; 9180 padding: 1rem; 9181 } 9182 9183 .product-analysis h5 { 9184 color: #1e293b; 9185 margin-bottom: 0.75rem; 9186 font-weight: 600; 9187 } 9188 9189 .analysis-section { 9190 margin-bottom: 0.75rem; 9191 } 9192 9193 .analysis-section:last-child { 9194 margin-bottom: 0; 9195 } 9196 9197 .analysis-section h6 { 9198 font-size: 0.875rem; 9199 font-weight: 600; 9200 margin-bottom: 0.5rem; 9201 } 9202 9203 .analysis-section h6.strengths { 9204 color: #059669; 9205 } 9206 9207 .analysis-section h6.weaknesses { 9208 color: #dc2626; 9209 } 9210 9211 .analysis-section h6.best-for { 9212 color: #7c3aed; 9213 } 9214 9215 .analysis-section ul { 9216 list-style: none; 9217 padding: 0; 9218 margin: 0; 9219 } 9220 9221 .analysis-section li { 9222 display: flex; 9223 align-items: flex-start; 9224 gap: 0.5rem; 9225 margin-bottom: 0.25rem; 9226 font-size: 0.875rem; 9227 line-height: 1.4; 9228 } 9229 9230 .analysis-section li:before { 9231 content: "â¢"; 9232 color: #64748b; 9233 font-weight: bold; 9234 margin-top: 0.1rem; 9235 } 9236 9237 .best-for-text { 9238 font-size: 0.875rem; 9239 color: #374151; 9240 font-style: italic; 9241 } 9242 9243 /* Recommendations */ 9244 .recommendations-grid { 9245 display: grid; 9246 grid-template-columns: repeat(auto-fit, minmax(250px, 1fr)); 9247 gap: 1rem; 9248 margin-top: 1rem; 9249 } 9250 9251 .recommendation-card { 9252 background: white; 9253 border: 1px solid #e2e8f0; 9254 border-radius: 8px; 9255 padding: 1rem; 9256 text-align: center; 9257 } 9258 9259 .recommendation-card h5 { 9260 font-size: 1rem; 9261 margin-bottom: 0.75rem; 9262 color: #1e293b; 9263 } 9264 9265 .recommendation-card p { 9266 font-size: 0.875rem; 9267 color: #374151; 9268 line-height: 1.5; 9269 } 9270 9271 /* Tips */ 9272 .tips-list { 9273 list-style: none; 9274 padding: 0; 9275 margin: 1rem 0 0 0; 9276 } 9277 9278 .tips-list li { 9279 display: flex; 9280 align-items: flex-start; 9281 gap: 0.75rem; 9282 margin-bottom: 0.75rem; 9283 font-size: 0.9rem; 9284 line-height: 1.5; 9285 color: #374151; 9286 } 9287 9288 .tips-list li:before { 9289 content: "ð¡"; 9290 font-size: 1rem; 9291 margin-top: 0.1rem; 9292 } 9293 9294 /* Modal Footer */
9295 .modal-footer { 9296 display: flex; 9297 justify-content: space-between; 9298 align-items: center; 9299 padding: 1.5rem 2rem; 9300 border-top: 1px solid #e2e8f0; 9301 background: #f8fafc; 9302 } 9303 9304 .btn-outline-secondary { 9305 border: 1px solid #64748b; 9306 background: transparent; 9307 color: #64748b; 9308 padding: 0.75rem 1.5rem; 9309 border-radius: 6px; 9310 font-weight: 600; 9311 display: flex; 9312 align-items: center; 9313 gap: 0.5rem; 9314 cursor: pointer; 9315 transition: all 0.2s ease; 9316 } 9317 9318 .btn-outline-secondary:hover { 9319 background: #64748b; 9320 color: white; 9321 } 9322 9323 /* Responsive for chip button */ 9324 @media (max-width: 880px) { 9325 .pd-compare-section { 9326 margin: 1rem 0; 9327 display: block; 9328 } 9329 9330 .pd-compare-btn { 9331 width: 100%; 9332 font-size: 0.85rem; 9333 padding: 0.65rem 1rem; 9334 border-radius: 10px; 9335 justify-content: center; 9336 min-height: 44px; 9337 } 9338 9339 .pd-compare-btn .compare-icon { 9340 width: 16px; 9341 height: 16px; 9342 } 9343 9344 .pd-compare-info { 9345 margin-top: 0.5rem; 9346 display: block; 9347 text-align: center; 9348 } 9349 9350 .compare-note { 9351 font-size: 0.7rem; 9352 display: block; 9353 } 9354 } 9355 9356 /* Responsive Design */ 9357 @media (max-width: 768px) { 9358 .compare-sidebar { 9359 width: 100%; 9360 right: -100%; 9361 /* Fix for mobile viewport height changes */ 9362 height: 100vh; 9363 height: 100dvh; 9364 /* Dynamic viewport height for modern browsers */ 9365 } 9366 9367 .compare-actions { 9368 /* Ensure actions are always visible */ 9369 position: sticky; 9370 bottom: 0; 9371 background: white; 9372 border-top: 2px solid #e2e8f0; 9373 box-shadow: 0 -2px 10px rgba(0, 0, 0, 0.1); 9374 z-index: 10; 9375 } 9376 9377 .compare-actions .btn { 9378 /* Larger touch targets for mobile */ 9379 min-height: 48px; 9380 font-size: 0.9rem; 9381 font-weight: 700; 9382 } 9383
9384 .modal-container { 9385 width: 95%; 9386 max-height: 95vh; 9387 max-height: 95dvh; 9388 /* Dynamic viewport height */ 9389 } 9390 9391 .modal-header, 9392 .modal-content, 9393 .modal-footer { 9394 padding: 1rem; 9395 } 9396 9397 .recommendations-grid { 9398 grid-template-columns: 1fr; 9399 } 9400 9401 .category-products { 9402 grid-template-columns: 1fr; 9403 } 9404 9405 .modal-footer { 9406 flex-direction: column; 9407 gap: 0.75rem; 9408 } 9409 9410 .modal-footer .btn { 9411 width: 100%; 9412 } 9413 9414 /* Ensure compare button is visible on mobile */ 9415 .pd-compare-section { 9416 display: block !important; 9417 visibility: visible !important; 9418 opacity: 1 !important; 9419 margin: 1rem 0; 9420 padding: 0; 9421 position: relative !important; 9422 z-index: 1 !important; 9423 max-width: 100%; 9424 overflow: hidden; 9425 } 9426 9427 .pd-compare-btn { 9428 display: flex !important; 9429 visibility: visible !important; 9430 opacity: 1 !important; 9431 width: 100%; 9432 padding: 0.75rem 1rem; 9433 font-size: 0.9rem; 9434 min-height: 48px; 9435 /* Minimum touch target for mobile */ 9436 border: 2px solid #e2e8f0 !important; 9437 background: #fff !important; 9438 position: relative !important; 9439 z-index: 2 !important; 9440 box-sizing: border-box; 9441 white-space: normal !important; 9442 /* Allow text wrapping on mobile */ 9443 flex-wrap: wrap; 9444 gap: 0.5rem; 9445 } 9446 9447 .pd-compare-btn .compare-text { 9448 display: inline !important; 9449 visibility: visible !important; 9450 font-weight: 600; 9451 color: #475569 !important; 9452 } 9453 9454 .pd-compare-btn .compare-remove { 9455 display: none !important; 9456 /* Hidden by default */ 9457 } 9458 9459 .pd-compare-btn.added .compare-remove { 9460 display: flex !important; 9461 /* Only show when added */ 9462 flex-wrap: wrap; 9463 align-items: center; 9464 gap: 0.4rem; 9465 white-space: normal !important; 9466 word-break: break-word; 9467 } 9468 9469 .pd-compare-btn .compare-icon { 9470 display: inline-block !important; 9471 width: 18px; 9472 height: 18px; 9473 flex-shrink: 0; 9474 } 9475 9476 .pd-compare-info { 9477 margin-top: 0.5rem; 9478 } 9479 9480 .compare-note { 9481 font-size: 0.85rem !important; 9482 display: block !important; 9483 visibility: visible !important; 9484 color: #64748b !important; 9485 } 9486 } 9487 9488 /* iOS Safari specific fixes */ 9489 @media (max-width: 480px) { 9490 #compareBtn { 9491 width: 46px; 9492 height: 46px; 9493 } 9494 9495 .pd-compare-section { 9496 -webkit-transform: translateZ(0); 9497 transform: translateZ(0); 9498 } 9499 9500 .pd-compare-btn { 9501 -webkit-appearance: none !important; 9502 appearance: none !important; 9503 -webkit-tap-highlight-color: transparent; 9504 touch-action: manipulation; 9505 } 9506 9507 /* Fix sidebar height for iOS address bar */ 9508 .compare-sidebar { 9509 /* Use fixed positioning that accounts for iOS address bar */ 9510 height: 100vh; 9511 height: -webkit-fill-available; 9512 /* iOS Safari compatibility */ 9513 min-height: 100vh; 9514 min-height: -webkit-fill-available; 9515 } 9516 9517 /* Ensure compare actions stay at bottom */ 9518 .compare-actions { 9519 position: sticky; 9520 bottom: 0; 9521 background: white; 9522 border-top: 2px solid #e2e8f0; 9523 box-shadow: 0 -4px 12px rgba(0, 0, 0, 0.15); 9524 padding: 1.25rem 1rem; 9525 z-index: 20; 9526 } 9527 9528 .compare-actions .btn { 9529 min-height: 52px; 9530 /* Larger for easier tapping */ 9531 font-size: 1rem; 9532 font-weight: 700; 9533 border-radius: 8px; 9534 } 9535 9536 /* Adjust content padding to account for sticky actions */ 9537 .compare-content { 9538 padding-bottom: 6rem; 9539 /* Extra space for sticky actions */ 9540 } 9541 } 9542 9543 /* High-resolution mobile devices (iPhone 12 Pro, etc.) */ 9544 @media (-webkit-min-device-pixel-ratio: 2) and (max-width: 430px) { 9545 .pd-compare-section { 9546 display: block !important; 9547 } 9548 9549 .pd-compare-btn { 9550 display: flex !important; 9551 min-height: 44px; 9552 font-size: 16px; 9553 /* Prevent zoom on iOS */ 9554 } 9555 9556 /* Enhanced fixes for iPhone 12 Pro and similar devices */ 9557 .compare-sidebar { 9558 /* Ensure full height coverage */ 9559 height: 100vh; 9560 height: 100dvh; 9561 /* Dynamic viewport height */ 9562 height: -webkit-fill-available; 9563 /* iOS fallback */ 9564 max-height: 100vh; 9565 max-height: 100dvh; 9566 max-height: -webkit-fill-available; 9567 overflow: hidden; 9568 /* Prevent scroll issues */ 9569 } 9570 9571 .compare-content { 9572 /* Flexible content area */ 9573 flex: 1; 9574 overflow-y: auto; 9575 -webkit-overflow-scrolling: touch; 9576 padding: 1rem 1rem 8rem 1rem; 9577 /* Extra bottom padding */ 9578 } 9579 9580 .compare-actions { 9581 /* Force actions to stay visible */ 9582 position: fixed; 9583 bottom: 0; 9584 left: 0; 9585 right: 0; 9586 width: 100%; 9587 background: white; 9588 border-top: 2px solid #e2e8f0; 9589 box-shadow: 0 -4px 20px rgba(0, 0, 0, 0.2); 9590 padding: 1rem; 9591 z-index: 9999; 9592 display: flex !important; 9593 gap: 0.75rem; 9594 } 9595 9596 .compare-actions .btn { 9597 flex: 1; 9598 min-height: 30px; 9599 /* Extra large for high-DPI screens */ 9600 font-size: .8rem; 9601 font-weight: 600; 9602 border-radius: 12px; 9603 display: flex !important; 9604 align-items: center; 9605 justify-content: center; 9606 gap: 0.5rem; 9607 } 9608 9609 /* Ensure AI analyze button is always visible and prominent */ 9610 #compareAnalyze { 9611 background: #3b82f6 !important; 9612 border-color: #3b82f6 !important; 9613 color: white !important; 9614 box-shadow: 0 4px 12px rgba(59, 130, 246, 0.3); 9615 } 9616 9617 #compareAnalyze:not(:disabled) { 9618 background: #2563eb !important; 9619 border-color: #2563eb !important; 9620 transform: scale(1.02); 9621 } 9622 9623 #compareAnalyze:disabled { 9624 opacity: 0.6 !important; 9625 background: #9ca3af !important; 9626 border-color: #9ca3af !important; 9627 } 9628 } 9629 9630 /* AI Disclaimer Styles */ 9631 .ai-disclaimer { 9632 display: flex; 9633 align-items: flex-start; 9634 gap: 0.75rem; 9635 padding: 1rem; 9636 background: #fef3c7; 9637 border: 1px solid #fbbf24; 9638 border-radius: 8px; 9639 margin: 0; 9640 } 9641 9642 .disclaimer-icon { 9643 font-size: 1.25rem; 9644 flex-shrink: 0; 9645 margin-top: 0.125rem; 9646 } 9647 9648 .disclaimer-text { 9649 font-size: 0.85rem; 9650 line-height: 1.4; 9651 color: #92400e; 9652 } 9653 9654 .disclaimer-text strong { 9655 color: #78350f; 9656 font-weight: 600; 9657 } 9658 9659 /* Compare Disclaimer in Sidebar */ 9660 .compare-disclaimer { 9661 margin-top: 1rem; 9662 padding: 1rem; 9663 background: #f0f9ff; 9664 border: 1px solid #0ea5e9; 9665 border-radius: 8px; 9666 } 9667 9668 .compare-disclaimer h6 { 9669 display: flex; 9670 align-items: center; 9671 gap: 0.5rem; 9672 font-size: 0.875rem; 9673 font-weight: 600; 9674 color: #0c4a6e; 9675 margin-bottom: 0.5rem; 9676 } 9677 9678 .compare-disclaimer p { 9679 font-size: 0.8rem; 9680 line-height: 1.4; 9681 color: #075985; 9682 margin-bottom: 0.5rem; 9683 } 9684 9685 .compare-disclaimer p:last-child { 9686 margin-bottom: 0; 9687 } 9688 9689 .compare-disclaimer ul { 9690 list-style: none; 9691 padding: 0; 9692 margin: 0.5rem 0 0 0; 9693 } 9694 9695 .compare-disclaimer li { 9696 display: flex; 9697 align-items: flex-start; 9698 gap: 0.5rem; 9699 margin-bottom: 0.25rem; 9700 font-size: 0.75rem; 9701 line-height: 1.3; 9702 color: #075985; 9703 } 9704 9705 .compare-disclaimer li:before { 9706 content: "â¢"; 9707 color: #0ea5e9; 9708 font-weight: bold; 9709 margin-top: 0.1rem; 9710 flex-shrink: 0; 9711 } 9712 9713 /* Mobile Browser Address Bar Fixes */ 9714 @supports (height: 100dvh) { 9715 /* Modern browsers with dynamic viewport support */ 9716 @media (max-width: 768px) { 9717 .compare-sidebar { 9718 height: 100dvh !important; 9719 max-height: 100dvh !important; 9720 } 9721
9722 .modal-container { 9723 max-height: 95dvh !important; 9724 } 9725 } 9726 } 9727 9728 @supports (height: -webkit-fill-available) { 9729 /* iOS Safari specific support */ 9730 @media (max-width: 768px) { 9731 .compare-sidebar { 9732 height: -webkit-fill-available !important; 9733 max-height: -webkit-fill-available !important; 9734 } 9735 } 9736 } 9737 9738 /* Fallback for older browsers */ 9739 @media (max-width: 768px) and (orientation: portrait) { 9740 .compare-sidebar { 9741 /* Fixed height that works across different mobile browsers */ 9742 min-height: 600px; 9743 height: calc(100vh - env(keyboard-inset-height, 0px)); 9744 height: calc(100vh - env(safe-area-inset-bottom, 0px)); 9745 } 9746 9747 /* Ensure actions are always accessible */ 9748 .compare-actions { 9749 position: sticky !important; 9750 bottom: env(safe-area-inset-bottom, 0px) !important; 9751 margin-bottom: 0 !important; 9752 padding-bottom: calc(1rem + env(safe-area-inset-bottom, 0px)) !important; 9753 } 9754 } 9755 9756 /* PWA and fullscreen app support */ 9757 @media (display-mode: standalone) { 9758 .compare-sidebar { 9759 height: 100vh !important; 9760 height: 100dvh !important; 9761 } 9762 } 9763 9764 /* Utilities */ 9765 .btn-sm { 9766 padding: 0.5rem 0.75rem; 9767 font-size: 0.8rem; 9768 } 9769 9770 [hidden] { 9771 display: none !important; 9772 } 9773 9774 /* ===== UX ENHANCEMENTS ===== */ 9775 9776 /* Compare Button Highlight Animation */ 9777 .pulse-highlight { 9778 animation: pulse-glow 2s ease-in-out 3; 9779 box-shadow: 0 0 0 0 rgba(59, 130, 246, 0.7); 9780 } 9781 9782 @keyframes pulse-glow { 9783 0% { 9784 box-shadow: 0 0 0 0 rgba(59, 130, 246, 0.7); 9785 } 9786 9787 50% { 9788 box-shadow: 0 0 0 10px rgba(59, 130, 246, 0); 9789 } 9790 9791 100% { 9792 box-shadow: 0 0 0 0 rgba(59, 130, 246, 0); 9793 } 9794 } 9795 9796 /* Flying Product Animation */ 9797 .flying-product { 9798 position: fixed; 9799 z-index: 9999; 9800 pointer-events: none; 9801 } 9802 9803 .flying-product img { 9804 border-radius: 8px; 9805 box-shadow: 0 4px 12px rgba(0, 0, 0, 0.3); 9806 } 9807 9808 /* Sticky Compare Bar - REMOVED (using only fly-to-navbar animation) */ 9809 9810 /* Inline Compare Preview - REMOVED (keeping it simple and clean) */ 9811 /** 9812 * Product Card Quick Actions - 3 Dot Menu + Bottom Sheet 9813 * Tokopedia-inspired design 9814 */ 9815 9816 /* ===== 3 Dot Button on Product Card ===== */ 9817 .prod-card { 9818 position: relative; 9819 } 9820 9821 .prod-card-actions-btn { 9822 position: absolute; 9823 top: 8px; 9824 right: 8px; 9825 width: 32px; 9826 height: 32px; 9827 border-radius: 50%; 9828 background: rgba(255, 255, 255, 0.95); 9829 border: 1px solid rgba(0, 0, 0, 0.08); 9830 display: inline-flex; 9831 align-items: center; 9832 justify-content: center; 9833 cursor: pointer; 9834 z-index: 3; 9835 transition: all 0.2s ease; 9836 box-shadow: 0 2px 8px rgba(0, 0, 0, 0.1); 9837 -webkit-tap-highlight-color: transparent; 9838 } 9839 9840 .prod-card-actions-btn:hover { 9841 background: #fff; 9842 border-color: rgba(0, 0, 0, 0.15); 9843 box-shadow: 0 4px 12px rgba(0, 0, 0, 0.15); 9844 transform: scale(1.05); 9845 } 9846 9847 .prod-card-actions-btn:active { 9848 transform: scale(0.95); 9849 } 9850 9851 .prod-card-actions-btn svg { 9852 width: 20px; 9853 height: 20px; 9854 color: #64748b; 9855 display: block; 9856 } 9857 9858 /* Desktop: Show on hover */ 9859 @media (min-width: 641px) { 9860 .prod-card-actions-btn { 9861 opacity: 0; 9862 pointer-events: none; 9863 } 9864 9865 .prod-card:hover .prod-card-actions-btn { 9866 opacity: 1; 9867 pointer-events: auto; 9868 } 9869 } 9870 9871 /* Mobile: Always visible but smaller */ 9872 @media (max-width: 640px) { 9873 .prod-card-actions-btn { 9874 width: 28px; 9875 height: 28px; 9876 top: 6px; 9877 right: 6px; 9878 opacity: 95%; 9879 } 9880 9881 .prod-card-actions-btn svg { 9882 width: 18px; 9883 height: 18px; 9884 } 9885 } 9886 9887 /* ===== Bottom Sheet Overlay ===== */ 9888 .pca-overlay { 9889 position: fixed; 9890 inset: 0; 9891 background: rgba(15, 23, 42, 0.6); 9892 backdrop-filter: blur(4px); 9893 z-index: 99998; 9894 opacity: 0; 9895 visibility: hidden; 9896 transition: all 0.3s ease; 9897 } 9898 9899 .pca-overlay.active { 9900 opacity: 1; 9901 visibility: visible; 9902 } 9903 9904 /* ===== Bottom Sheet Container ===== */ 9905 .pca-bottom-sheet { 9906 position: fixed; 9907 bottom: 0; 9908 left: 0; 9909 right: 0; 9910 background: #fff; 9911 border-radius: 20px 20px 0 0; 9912 box-shadow: 0 -4px 24px rgba(0, 0, 0, 0.15); 9913 z-index: 99999; 9914 max-width: 600px; 9915 margin: 0 auto; 9916 transform: translateY(100%); 9917 transition: transform 0.3s cubic-bezier(0.25, 0.46, 0.45, 0.94); 9918 } 9919 9920 .pca-bottom-sheet.active { 9921 transform: translateY(0); 9922 } 9923 9924 /* Drag Handle */ 9925 .pca-sheet-handle { 9926 width: 40px; 9927 height: 4px; 9928 background: #cbd5e1; 9929 border-radius: 999px; 9930 margin: 12px auto 8px; 9931 } 9932 9933 /* Product Preview */ 9934 .pca-sheet-product { 9935 display: flex; 9936 gap: 12px; 9937 padding: 12px 20px; 9938 border-bottom: 1px solid #f1f5f9; 9939 } 9940 9941 .pca-product-image { 9942 width: 60px; 9943 height: 60px; 9944 border-radius: 8px; 9945 object-fit: cover; 9946 flex-shrink: 0; 9947 border: 1px solid #e2e8f0; 9948 } 9949 9950 .pca-product-info { 9951 flex: 1; 9952 min-width: 0; 9953 } 9954 9955 .pca-product-name { 9956 font-size: 14px; 9957 font-weight: 600; 9958 color: #0f172a; 9959 margin: 0 0 4px 0; 9960 display: -webkit-box; 9961 -webkit-line-clamp: 2; 9962 -webkit-box-orient: vertical; 9963 overflow: hidden; 9964 line-height: 1.3; 9965 } 9966 9967 .pca-product-price { 9968 font-size: 15px; 9969 font-weight: 700; 9970 color: #0ea5e9; 9971 margin: 0; 9972 } 9973 9974 .pca-product-stock { 9975 font-size: 12px; 9976 color: #64748b; 9977 margin: 2px 0 0 0; 9978 } 9979 9980 .pca-product-stock.in { 9981 color: #16a34a; 9982 } 9983 9984 .pca-product-stock.low { 9985 color: #ea580c; 9986 } 9987 9988 .pca-product-stock.out { 9989 color: #dc2626; 9990 } 9991 9992 /* Action Menu */ 9993 .pca-sheet-actions { 9994 padding: 8px 0 20px; 9995 } 9996 9997 .pca-action-item { 9998 display: flex; 9999 align-items: center; 10000 gap: 16px; 10001 padding: 16px 20px; 10002 background: transparent; 10003 border: 0; 10004 width: 100%; 10005 cursor: pointer; 10006 transition: background-color 0.15s ease; 10007 -webkit-tap-highlight-color: transparent; 10008 } 10009 10010 .pca-action-item:hover { 10011 background: #f8fafc; 10012 } 10013 10014 .pca-action-item:active { 10015 background: #f1f5f9; 10016 } 10017 10018 .pca-action-item:disabled { 10019 opacity: 0.4;
10020 cursor: not-allowed; 10021 } 10022 10023 .pca-action-item:disabled:hover { 10024 background: transparent; 10025 } 10026 10027 .pca-action-icon { 10028 width: 24px; 10029 height: 24px; 10030 color: #475569; 10031 flex-shrink: 0; 10032 } 10033 10034 .pca-action-content { 10035 flex: 1; 10036 text-align: left; 10037 } 10038 10039 .pca-action-label { 10040 font-size: 15px; 10041 font-weight: 600; 10042 color: #0f172a; 10043 margin: 0 0 2px 0; 10044 } 10045 10046 .pca-action-desc { 10047 font-size: 12px; 10048 color: #64748b; 10049 margin: 0; 10050 } 10051 10052 .pca-action-badge { 10053 display: inline-flex; 10054 align-items: center; 10055 justify-content: center; 10056 min-width: 20px; 10057 height: 20px; 10058 padding: 0 6px; 10059 background: #0ea5e9; 10060 color: #fff; 10061 font-size: 11px; 10062 font-weight: 700; 10063 border-radius: 999px; 10064 margin-left: auto; 10065 } 10066 10067 .pca-action-badge.compare { 10068 background: #8b5cf6; 10069 } 10070 10071 /* Action Item Colors */ 10072 .pca-action-item.cart .pca-action-icon { 10073 color: #0ea5e9; 10074 } 10075 10076 .pca-action-item.compare .pca-action-icon { 10077 color: #8b5cf6; 10078 } 10079 10080 .pca-action-item.compare.active { 10081 background: rgba(139, 92, 246, 0.05); 10082 } 10083 10084 .pca-action-item.compare.active .pca-action-label { 10085 color: #8b5cf6; 10086 } 10087 10088 .pca-action-item.compare.active .pca-action-icon { 10089 color: #8b5cf6; 10090 } 10091 10092 .pca-action-item.share .pca-action-icon { 10093 color: #64748b; 10094 } 10095 10096 /* Loading State */ 10097 .pca-action-item.loading { 10098 pointer-events: none; 10099 } 10100 10101 .pca-action-item.loading .pca-action-icon { 10102 animation: spin 1s linear infinite; 10103 } 10104 10105 @keyframes spin { 10106 from { 10107 transform: rotate(0deg); 10108 } 10109 10110 to { 10111 transform: rotate(360deg); 10112 } 10113 } 10114 10115 /* Success State Animation */ 10116 .pca-action-item.success .pca-action-icon { 10117 animation: checkmark 0.5s ease; 10118 } 10119 10120 @keyframes checkmark { 10121 0% { 10122 transform: scale(0); 10123 } 10124 10125 50% { 10126 transform: scale(1.2); 10127 } 10128 10129 100% { 10130 transform: scale(1); 10131 } 10132 } 10133 10134 /* ===== Safe Area for Mobile Devices ===== */ 10135 @supports (padding-bottom: env(safe-area-inset-bottom)) { 10136 .pca-sheet-actions { 10137 padding-bottom: calc(20px + env(safe-area-inset-bottom)); 10138 } 10139 } 10140 10141 /* ===== Responsive Tweaks ===== */ 10142 @media (max-width: 640px) { 10143 .pca-bottom-sheet { 10144 border-radius: 16px 16px 0 0; 10145 } 10146 10147 .pca-sheet-product { 10148 padding: 10px 16px; 10149 } 10150 10151 .pca-product-image { 10152 width: 50px; 10153 height: 50px; 10154 } 10155 10156 .pca-product-name { 10157 font-size: 13px; 10158 } 10159 10160 .pca-product-price { 10161 font-size: 14px; 10162 } 10163 10164 .pca-action-item { 10165 padding: 14px 16px; 10166 gap: 12px; 10167 } 10168 10169 .pca-action-icon { 10170 width: 22px; 10171 height: 22px; 10172 } 10173 10174 .pca-action-label { 10175 font-size: 14px; 10176 } 10177 } 10178 10179 /* ===== Animation for Flying Product ===== */ 10180 .flying-product { 10181 position: fixed; 10182 pointer-events: none; 10183 z-index: 99999; 10184 animation: fadeOut 0.8s ease forwards; 10185 } 10186 10187 @keyframes fadeOut { 10188 to { 10189 opacity: 0; 10190 transform: scale(0.5); 10191 } 10192 } 10193 10194 /* ===== Desktop Dropdown (Alternative) ===== */ 10195 @media (min-width: 1024px) { 10196 /* Optional: Could add desktop dropdown menu here */ 10197 /* For now, using bottom sheet for consistency */ 10198 } 10199 10200 /* ===== Print Styles ===== */ 10201 @media print { 10202 10203 .prod-card-actions-btn, 10204 .pca-overlay, 10205 .pca-bottom-sheet { 10206 display: none !important; 10207 } 10208 } 10209 10210 /* Modern Modal Dialog for Cart Operations */ 10211 .modal-overlay { 10212 position: fixed; 10213 top: 0; 10214 left: 0; 10215 right: 0; 10216 bottom: 0; 10217 background: rgba(0, 0, 0, 0.5); 10218 backdrop-filter: blur(4px); 10219 display: flex; 10220 align-items: center; 10221 justify-content: center; 10222 z-index: 9999; 10223 opacity: 0; 10224 visibility: hidden; 10225 transition: all 0.2s ease; 10226 } 10227
10228 .modal-overlay.show { 10229 opacity: 1; 10230 visibility: visible; 10231 } 10232 10233 .modal-dialog { 10234 background: white; 10235 border-radius: 16px; 10236 box-shadow: 0 25px 50px rgba(0, 0, 0, 0.15); 10237 max-width: 400px; 10238 width: 90%; 10239 max-height: 90vh; 10240 overflow-y: auto; 10241 transform: scale(0.95); 10242 transition: transform 0.2s ease; 10243 } 10244 10245 .modal-overlay.show .modal-dialog { 10246 transform: scale(1); 10247 } 10248 10249 .modal-header { 10250 padding: 24px 24px 16px; 10251 border-bottom: 1px solid #f1f5f9; 10252 } 10253 10254 .modal-title { 10255 font-size: 20px; 10256 font-weight: 700; 10257 color: #0f172a; 10258 margin: 0; 10259 display: flex; 10260 align-items: center; 10261 gap: 12px; 10262 } 10263 10264 .modal-body { 10265 padding: 16px 24px 24px; 10266 } 10267 10268 .modal-message { 10269 font-size: 16px; 10270 line-height: 1.5; 10271 color: #475569; 10272 margin: 0; 10273 } 10274 10275 .modal-actions { 10276 display: flex; 10277 gap: 12px; 10278 margin-top: 24px; 10279 } 10280 10281 .modal-btn { 10282 flex: 1; 10283 padding: 12px 16px; 10284 border: none; 10285 border-radius: 8px; 10286 font-size: 14px; 10287 font-weight: 600; 10288 cursor: pointer; 10289 transition: all 0.2s ease; 10290 text-align: center; 10291 } 10292 10293 .modal-btn-secondary { 10294 background: #f8fafc; 10295 color: #64748b; 10296 border: 1px solid #e2e8f0; 10297 } 10298 10299 .modal-btn-secondary:hover { 10300 background: #f1f5f9; 10301 border-color: #cbd5e1; 10302 } 10303 10304 .modal-btn-danger { 10305 background: #ef4444; 10306 color: white; 10307 } 10308 10309 .modal-btn-danger:hover { 10310 background: #dc2626; 10311 } 10312 10313 .modal-btn-primary { 10314 background: #3b82f6; 10315 color: white; 10316 } 10317 10318 .modal-btn-primary:hover { 10319 background: #2563eb; 10320 } 10321 10322 .modal-icon { 10323 font-size: 24px; 10324 width: 32px; 10325 height: 32px; 10326 display: flex; 10327 align-items: center; 10328 justify-content: center; 10329 border-radius: 8px; 10330 } 10331 10332 .modal-icon.danger { 10333 background: #fef2f2; 10334 color: #ef4444; 10335 } 10336 10337 .modal-icon.warning { 10338 background: #fffbeb; 10339 color: #f59e0b; 10340 } 10341 10342 .modal-icon.success { 10343 background: #f0fdf4; 10344 color: #22c55e; 10345 } 10346 10347 .modal-icon.info { 10348 background: #eff6ff; 10349 color: #3b82f6; 10350 } 10351 10352 /* Mobile responsive */ 10353 @media (max-width: 640px) {
10354 .modal-dialog { 10355 margin: 16px; 10356 max-width: none; 10357 width: auto; 10358 } 10359 10360 .modal-header, 10361 .modal-body { 10362 padding-left: 20px; 10363 padding-right: 20px; 10364 } 10365 10366 .modal-actions { 10367 flex-direction: column; 10368 } 10369 10370 .modal-btn { 10371 flex: none; 10372 } 10373 } 10374 10375 /** 10376 * Reviews & Points System - Styles 10377 * Product reviews, rating display, and point redemption UI 10378 */ 10379 10380 /* =================================== 10381 PRODUCT REVIEWS 10382 =================================== */ 10383 10384 .product-tabs { 10385 display: flex; 10386 border-bottom: 2px solid #e5e7eb; 10387 margin: 24px 0 16px; 10388 gap: 8px; 10389 } 10390 10391 .tab-btn { 10392 padding: 12px 20px; 10393 border: none; 10394 background: none; 10395 cursor: pointer; 10396 font-size: 15px; 10397 font-weight: 500; 10398 color: #6b7280; 10399 border-bottom: 3px solid transparent; 10400 transition: all 0.2s ease; 10401 position: relative; 10402 top: 2px; 10403 } 10404 10405 .tab-btn:hover { 10406 color: #009688; 10407 } 10408 10409 .tab-btn.active { 10410 color: #2563eb; 10411 border-bottom-color: #2563eb; 10412 } 10413 10414 .tab-content { 10415 padding: 20px 0; 10416 } 10417 10418 /* Review Statistics */ 10419 .review-stats { 10420 display: grid; 10421 grid-template-columns: 200px 1fr; 10422 gap: 32px; 10423 padding: 24px; 10424 background: #f9fafb; 10425 border-radius: 12px; 10426 margin-bottom: 24px; 10427 } 10428 10429 .rating-summary { 10430 text-align: center; 10431 } 10432 10433 .avg-rating { 10434 display: block; 10435 font-size: 48px; 10436 font-weight: 700; 10437 color: #009688; 10438 line-height: 1; 10439 } 10440 10441 .rating-summary .stars { 10442 font-size: 24px; 10443 color: #fbbf24; 10444 margin: 8px 0; 10445 } 10446 10447 .total-reviews { 10448 display: block; 10449 font-size: 14px; 10450 color: #6b7280; 10451 margin-top: 4px; 10452 } 10453 10454 .rating-breakdown { 10455 display: flex; 10456 flex-direction: column; 10457 gap: 8px; 10458 } 10459 10460 .rating-bar { 10461 display: flex; 10462 align-items: center; 10463 gap: 12px; 10464 } 10465 10466 .rating-label { 10467 font-size: 14px; 10468 color: #374151; 10469 width: 32px; 10470 text-align: right; 10471 } 10472 10473 .bar-container { 10474 flex: 1; 10475 height: 8px; 10476 background: #e5e7eb; 10477 border-radius: 4px; 10478 overflow: hidden; 10479 } 10480 10481 .bar-fill { 10482 height: 100%; 10483 background: linear-gradient(90deg, #fbbf24 0%, #f59e0b 100%); 10484 transition: width 0.3s ease; 10485 } 10486 10487 .rating-count { 10488 font-size: 14px; 10489 color: #6b7280; 10490 width: 40px; 10491 text-align: right; 10492 } 10493 10494 /* Review Filters */ 10495 .review-filters { 10496 display: flex; 10497 justify-content: space-between; 10498 align-items: center; 10499 margin-bottom: 20px; 10500 } 10501 10502 .review-sort { 10503 padding: 8px 12px; 10504 border: 1px solid #d1d5db; 10505 border-radius: 8px; 10506 font-size: 14px; 10507 background: white; 10508 } 10509 10510 .write-review-btn { 10511 padding: 10px 20px; 10512 background: #2563eb; 10513 color: white; 10514 border: none; 10515 border-radius: 8px; 10516 font-weight: 500; 10517 cursor: pointer; 10518 transition: background 0.2s; 10519 } 10520 10521 .write-review-btn:hover { 10522 background: #1d4ed8; 10523 } 10524 10525 /* Review List */ 10526 .reviews-list { 10527 display: flex; 10528 flex-direction: column; 10529 gap: 16px; 10530 } 10531 10532 .review-item { 10533 padding: 20px; 10534 background: white; 10535 border: 1px solid #e5e7eb; 10536 border-radius: 12px; 10537 transition: box-shadow 0.2s; 10538 } 10539 10540 .review-item:hover { 10541 box-shadow: 0 4px 12px rgba(0, 0, 0, 0.05); 10542 } 10543 10544 .review-header { 10545 display: flex; 10546 justify-content: space-between; 10547 align-items: flex-start; 10548 margin-bottom: 8px; 10549 } 10550 10551 .review-author { 10552 display: flex; 10553 align-items: center; 10554 gap: 8px; 10555 } 10556 10557 .review-author strong { 10558 font-size: 15px; 10559 color: #009688; 10560 } 10561 10562 .verified-badge { 10563 display: inline-flex; 10564 align-items: center; 10565 gap: 4px; 10566 font-size: 12px; 10567 color: #059669; 10568 background: #d1fae5; 10569 padding: 2px 8px; 10570 border-radius: 4px; 10571 font-weight: 500; 10572 } 10573 10574 .anonymous-badge { 10575 display: inline-flex; 10576 align-items: center; 10577 font-size: 12px; 10578 color: #6b7280; 10579 background: #f3f4f6; 10580 padding: 2px 6px; 10581 border-radius: 4px; 10582 margin-left: 4px; 10583 cursor: help; 10584 } 10585 10586 .review-rating .stars { 10587 font-size: 16px; 10588 color: #fbbf24; 10589 } 10590 10591 .review-date { 10592 font-size: 13px; 10593 color: #9ca3af; 10594 margin-bottom: 12px; 10595 } 10596 10597 .review-text { 10598 font-size: 15px; 10599 line-height: 1.6; 10600 color: #374151; 10601 margin-bottom: 12px; 10602 } 10603 10604 .review-images { 10605 display: flex; 10606 gap: 8px; 10607 margin-bottom: 12px; 10608 flex-wrap: wrap; 10609 } 10610 10611 .review-img { 10612 width: 80px; 10613 height: 80px; 10614 object-fit: cover; 10615 border-radius: 8px; 10616 cursor: pointer; 10617 transition: transform 0.2s; 10618 } 10619 10620 .review-img:hover { 10621 transform: scale(1.05); 10622 } 10623 10624 .review-actions { 10625 display: flex; 10626 gap: 12px; 10627 padding-top: 12px; 10628 border-top: 1px solid #f3f4f6; 10629 } 10630 10631 .btn-helpful { 10632 display: flex; 10633 align-items: center; 10634 gap: 6px; 10635 padding: 6px 12px; 10636 background: #f9fafb; 10637 border: 1px solid #e5e7eb; 10638 border-radius: 6px; 10639 font-size: 13px; 10640 color: #6b7280; 10641 cursor: pointer; 10642 transition: all 0.2s; 10643 } 10644 10645 .btn-helpful:hover { 10646 background: #f3f4f6; 10647 color: #009688; 10648 border-color: #d1d5db; 10649 } 10650 10651 .btn-helpful.voted { 10652 background: #dbeafe; 10653 color: #1d4ed8; 10654 border-color: #93c5fd; 10655 } 10656 10657 .helpful-icon { 10658 font-size: 14px; 10659 } 10660 10661 .no-reviews { 10662 text-align: center; 10663 padding: 60px 20px; 10664 color: #9ca3af; 10665 font-size: 15px; 10666 } 10667 10668 .load-more-btn { 10669 display: block; 10670 margin: 24px auto 0; 10671 padding: 12px 32px; 10672 background: white; 10673 border: 1px solid #d1d5db; 10674 border-radius: 8px; 10675 font-size: 14px; 10676 font-weight: 500; 10677 color: #374151; 10678 cursor: pointer; 10679 transition: all 0.2s; 10680 } 10681 10682 .load-more-btn:hover { 10683 background: #f9fafb; 10684 border-color: #9ca3af; 10685 } 10686 10687 /* =================================== 10688 POINT BALANCE WIDGET (LEGACY - kept for backward compatibility) 10689 =================================== */ 10690 10691 .point-balance-card { 10692 background: linear-gradient(135deg, #667eea 0%, #764ba2 100%); 10693 color: white; 10694 padding: 24px; 10695 border-radius: 16px; 10696 margin-bottom: 24px; 10697 box-shadow: 0 10px 25px rgba(102, 126, 234, 0.3); 10698 } 10699 10700 .point-header { 10701 display: flex; 10702 justify-content: space-between; 10703 align-items: center; 10704 margin-bottom: 12px; 10705 } 10706 10707 .point-header h3 { 10708 font-size: 18px; 10709 font-weight: 600; 10710 margin: 0; 10711 display: flex; 10712 align-items: center; 10713 gap: 8px; 10714 } 10715 10716 .point-header .balance { 10717 font-size: 32px; 10718 font-weight: 700; 10719 } 10720 10721 .point-value { 10722 font-size: 14px; 10723 opacity: 0.9; 10724 margin: 8px 0 16px; 10725 } 10726 10727 .point-stats { 10728 display: flex; 10729 gap: 20px; 10730 font-size: 13px; 10731 opacity: 0.85; 10732 margin-bottom: 16px; 10733 } 10734 10735 .btn-view-history { 10736 display: inline-block; 10737 padding: 10px 20px; 10738 background: rgba(255, 255, 255, 0.2); 10739 color: white; 10740 text-decoration: none; 10741 border-radius: 8px; 10742 font-size: 14px; 10743 font-weight: 500; 10744 transition: background 0.2s; 10745 } 10746 10747 .btn-view-history:hover { 10748 background: rgba(255, 255, 255, 0.3); 10749 } 10750 10751 /* =================================== 10752 CHECKOUT POINT REDEMPTION 10753 =================================== */ 10754 10755 .checkout-points { 10756 padding: 16px; 10757 background: #fef3c7; 10758 border: 2px solid #fbbf24; 10759 border-radius: 12px; 10760 margin-bottom: 16px; 10761 } 10762 10763 .points-header { 10764 display: flex; 10765 align-items: center; 10766 gap: 10px; 10767 margin-bottom: 12px; 10768 } 10769 10770 .points-header input[type="checkbox"] { 10771 width: 18px; 10772 height: 18px; 10773 cursor: pointer; 10774 } 10775 10776 .points-header label { 10777 font-size: 15px; 10778 color: #78350f; 10779 cursor: pointer; 10780 margin: 0; 10781 } 10782 10783 #points-slider { 10784 padding: 16px; 10785 background: white; 10786 border-radius: 8px; 10787 margin-top: 12px; 10788 } 10789 10790 #points-slider label { 10791 display: block; 10792 font-size: 14px; 10793 color: #374151; 10794 margin-bottom: 8px; 10795 font-weight: 500; 10796 } 10797 10798 #points-amount { 10799 width: 100%; 10800 margin-bottom: 8px; 10801 } 10802 10803 #points-display { 10804 display: flex; 10805 justify-content: space-between; 10806 font-size: 14px; 10807 color: #009688; 10808 margin-top: 8px; 10809 } 10810 10811 #points-display .discount-amount { 10812 color: #059669; 10813 font-weight: 600; 10814 } 10815 10816 .price-row.point-discount { 10817 color: #059669; 10818 font-weight: 500; 10819 } 10820 10821 /* =================================== 10822 REVIEWABLE ORDERS 10823 =================================== */ 10824 10825 .reviewable-orders { 10826 background: white; 10827 border: 1px solid #e5e7eb; 10828 border-radius: 12px; 10829 padding: 20px; 10830 margin-bottom: 24px; 10831 } 10832 10833 .reviewable-orders h3 { 10834 font-size: 18px; 10835 margin-bottom: 16px; 10836 color: #009688; 10837 } 10838 10839 .order-card { 10840 display: flex; 10841 gap: 16px; 10842 padding: 16px; 10843 background: #f9fafb; 10844 border-radius: 8px; 10845 margin-bottom: 12px; 10846 } 10847 10848 .order-card:last-child { 10849 margin-bottom: 0; 10850 } 10851 10852 .order-card img { 10853 width: 80px; 10854 height: 80px; 10855 object-fit: cover; 10856 border-radius: 8px; 10857 } 10858 10859 .order-info { 10860 flex: 1; 10861 } 10862 10863 .order-info h4 { 10864 font-size: 15px; 10865 margin: 0 0 4px; 10866 color: #009688; 10867 } 10868 10869 .order-info p { 10870 font-size: 13px; 10871 color: #6b7280; 10872 margin: 0 0 12px; 10873 } 10874 10875 .btn-review { 10876 padding: 8px 16px; 10877 background: #059669; 10878 color: white; 10879 border: none; 10880 border-radius: 6px; 10881 font-size: 14px; 10882 font-weight: 500; 10883 cursor: pointer; 10884 transition: background 0.2s; 10885 } 10886 10887 .btn-review:hover { 10888 background: #047857; 10889 } 10890 10891 /* =================================== 10892 TOAST NOTIFICATIONS 10893 =================================== */ 10894 10895 .review-toast { 10896 position: fixed; 10897 bottom: 24px; 10898 right: 24px; 10899 padding: 14px 20px; 10900 background: #009688; 10901 color: white; 10902 border-radius: 8px; 10903 font-size: 14px; 10904 line-height: 1.4; 10905 box-shadow: 0 10px 25px rgba(0, 0, 0, 0.2); 10906 transform: translateY(100px); 10907 opacity: 0; 10908 transition: all 0.3s ease; 10909 z-index: 10000; 10910 max-width: 400px; 10911 word-wrap: break-word; 10912 } 10913 10914 .review-toast.show { 10915 transform: translateY(0); 10916 opacity: 1; 10917 } 10918 10919 /* Mobile: Position above bottom-nav */ 10920 @media (max-width: 768px) { 10921 .review-toast { 10922 bottom: 80px; 10923 /* Above bottom-nav (50px height + padding + safe margin) */ 10924 right: 16px; 10925 left: 16px; 10926 max-width: calc(100% - 32px); 10927 } 10928 } 10929 10930 .review-toast.toast-success { 10931 background: #059669; 10932 } 10933 10934 .review-toast.toast-error { 10935 background: #dc2626; 10936 } 10937 10938 .review-toast.toast-info { 10939 background: #2563eb; 10940 } 10941 10942 /* =================================== 10943 RESPONSIVE 10944 =================================== */ 10945 10946 @media (max-width: 768px) { 10947 .point-balance-card { 10948 border-radius: 0; 10949 } 10950 10951 .review-stats { 10952 grid-template-columns: 70px 1fr; 10953 gap: 20px; 10954 padding: 16px; 10955 } 10956 10957 .rating-summary { 10958 text-align: center; 10959 } 10960 10961 .rating-summary .avg-rating { 10962 font-size: 32px; 10963 } 10964 10965 .rating-summary .stars { 10966 font-size: 18px; 10967 margin: 4px 0; 10968 } 10969 10970 .total-reviews { 10971 font-size: 11px; 10972 } 10973 10974 /* Rating breakdown - more compact */ 10975 .rating-breakdown { 10976 gap: 2px; 10977 } 10978 10979 .rating-breakdown .rating-bar { 10980 gap: 4px; 10981 } 10982 10983 .rating-breakdown .rating-label { 10984 font-size: 11px; 10985 width: 16px; 10986 min-width: 16px; 10987 text-align: left; 10988 } 10989 10990 .rating-breakdown .bar-container { 10991 height: 6px; 10992 } 10993 10994 .rating-breakdown .rating-count { 10995 font-size: 11px; 10996 width: 16px; 10997 min-width: 16px; 10998 } 10999 11000 .review-header { 11001 flex-direction: column; 11002 gap: 8px; 11003 align-items: flex-start; 11004 } 11005 11006 .review-rating { 11007 order: -1; 11008 margin-bottom: 4px; 11009 } 11010 11011 .review-rating .stars { 11012 font-size: 14px; 11013 } 11014 11015 .review-filters { 11016 flex-direction: column; 11017 gap: 12px; 11018 align-items: stretch; 11019 } 11020 11021 .review-sort { 11022 width: 100%; 11023 } 11024 11025 .point-header .balance { 11026 font-size: 24px; 11027 } 11028 11029 .point-stats { 11030 flex-direction: column; 11031 gap: 8px; 11032 } 11033 11034 .order-card { 11035 flex-direction: column; 11036 } 11037 11038 .order-card img { 11039 width: 100%; 11040 height: 200px; 11041 } 11042 } 11043 11044 /* =================================== 11045 LOADING & ERROR STATES 11046 =================================== */ 11047 11048 .review-loading { 11049 text-align: center; 11050 padding: 40px; 11051 color: #9ca3af; 11052 font-size: 14px; 11053 } 11054 11055 .review-error { 11056 text-align: center; 11057 padding: 40px; 11058 color: #dc2626; 11059 font-size: 14px; 11060 background: #fee2e2; 11061 border-radius: 8px; 11062 } 11063 11064 .review-empty { 11065 text-align: center; 11066 padding: 10px; 11067 color: #6b7280; 11068 font-size: 14px; 11069 } 11070 11071 /* =================================== 11072 REVIEWABLE ORDERS LIST 11073 =================================== */ 11074 11075 .reviewable-orders-list { 11076 display: flex; 11077 flex-direction: column; 11078 gap: 16px; 11079 } 11080 11081 .reviewable-order-item { 11082 display: grid; 11083 grid-template-columns: 80px 1fr auto; 11084 gap: 16px; 11085 padding: 16px; 11086 background: #fff; 11087 border: 1px solid #e5e7eb; 11088 border-radius: 12px; 11089 align-items: center; 11090 transition: box-shadow 0.2s; 11091 } 11092 11093 .reviewable-order-item:hover { 11094 box-shadow: 0 4px 12px rgba(0, 0, 0, 0.08); 11095 } 11096 11097 .reviewable-order-item .roi-image { 11098 width: 80px; 11099 height: 80px; 11100 object-fit: cover; 11101 border-radius: 8px; 11102 border: 1px solid #e5e7eb; 11103 } 11104 11105 .reviewable-order-item .roi-info { 11106 display: flex; 11107 flex-direction: column; 11108 gap: 4px; 11109 } 11110 11111 .reviewable-order-item .roi-info h4 { 11112 margin: 0; 11113 font-size: 15px; 11114 font-weight: 600; 11115 color: #009688; 11116 line-height: 1.4; 11117 } 11118 11119 .reviewable-order-item .roi-meta { 11120 margin: 0; 11121 font-size: 13px; 11122 color: #6b7280; 11123 } 11124 11125 .reviewable-order-item .btn-write-review { 11126 white-space: nowrap; 11127 padding: 10px 20px; 11128 font-size: 14px; 11129 } 11130 11131 @media (max-width: 640px) { 11132 .reviewable-order-item { 11133 grid-template-columns: 60px 1fr; 11134 gap: 12px; 11135 } 11136 11137 .reviewable-order-item .roi-image { 11138 width: 60px; 11139 height: 60px; 11140 } 11141 11142 .reviewable-order-item .btn-write-review { 11143 grid-column: 1 / -1; 11144 width: 100%; 11145 } 11146 } 11147 11148 /* =================================== 11149 REVIEW SUBMISSION MODAL 11150 =================================== */ 11151
11152 /* Modal Overlay Background */ 11153 #review-modal-overlay { 11154 position: fixed; 11155 top: 0; 11156 left: 0; 11157 right: 0; 11158 bottom: 0; 11159 background: rgba(0, 0, 0, 0.6) !important; 11160 backdrop-filter: blur(8px); 11161 display: flex; 11162 align-items: center; 11163 justify-content: center; 11164 z-index: 99999 !important; 11165 padding: 20px; 11166 } 11167 11168 .review-modal { 11169 max-width: 600px !important; 11170 width: 90% !important; 11171 background: white; 11172 border-radius: 16px !important; 11173 box-shadow: 0 25px 50px rgba(0, 0, 0, 0.25); 11174 max-height: 90vh; 11175 display: flex; 11176 flex-direction: column; 11177 overflow: hidden !important; 11178 } 11179 11180 #review-modal-overlay .modal-content, 11181 .review-modal .modal-content { 11182 padding: 0 !important; 11183 flex: initial !important; 11184 overflow-y: visible !important; 11185 } 11186 11187 .review-modal .modal-header { 11188 display: flex; 11189 justify-content: space-between; 11190 align-items: center; 11191 padding: 20px 24px; 11192 border-bottom: 1px solid #e5e7eb; 11193 } 11194 11195 .review-modal .modal-title { 11196 margin: 0; 11197 font-size: 20px; 11198 font-weight: 700; 11199 color: #009688; 11200 } 11201 11202 .review-modal .modal-close { 11203 background: none; 11204 border: none; 11205 cursor: pointer; 11206 padding: 4px; 11207 color: #6b7280; 11208 transition: color 0.2s; 11209 display: flex; 11210 align-items: center; 11211 justify-content: center; 11212 } 11213
11214 .review-modal .modal-close:hover { 11215 color: #009688; 11216 } 11217 11218 .review-modal .modal-body { 11219 padding: 24px; 11220 max-height: calc(90vh - 140px); 11221 overflow-y: auto; 11222 } 11223 11224 /* Custom Scrollbar for Modal */ 11225 .review-modal .modal-body::-webkit-scrollbar { 11226 width: 8px; 11227 } 11228 11229 .review-modal .modal-body::-webkit-scrollbar-track { 11230 background: #f1f5f9; 11231 border-radius: 4px; 11232 } 11233 11234 .review-modal .modal-body::-webkit-scrollbar-thumb { 11235 background: linear-gradient(180deg, #3b82f6 0%, #2563eb 100%); 11236 border-radius: 4px; 11237 } 11238 11239 .review-modal .modal-body::-webkit-scrollbar-thumb:hover { 11240 background: linear-gradient(180deg, #2563eb 0%, #1d4ed8 100%); 11241 } 11242 11243 /* Firefox Scrollbar */ 11244 .review-modal .modal-body { 11245 scrollbar-width: thin; 11246 scrollbar-color: #3b82f6 #f1f5f9; 11247 } 11248 11249 .review-modal .modal-footer { 11250 display: flex; 11251 gap: 12px; 11252 margin-top: 24px; 11253 padding-top: 20px; 11254 border-top: 1px solid #f1f5f9; 11255 } 11256 11257 .review-product-info { 11258 display: flex; 11259 gap: 16px; 11260 padding: 16px; 11261 background: #f9fafb; 11262 border-radius: 8px; 11263 margin-bottom: 24px; 11264 } 11265 11266 .review-product-thumb { 11267 width: 80px; 11268 height: 80px; 11269 object-fit: cover; 11270 border-radius: 6px; 11271 border: 1px solid #e5e7eb; 11272 } 11273 11274 .review-product-details h4 { 11275 margin: 0 0 8px 0; 11276 font-size: 16px; 11277 font-weight: 600; 11278 color: #009688; 11279 } 11280 11281 .review-product-details p { 11282 margin: 0; 11283 font-size: 13px; 11284 color: #6b7280; 11285 } 11286 11287 /* Star Rating Input */ 11288 .star-rating-input { 11289 display: inline-flex; 11290 gap: 8px; 11291 margin-right: 12px; 11292 vertical-align: middle; 11293 } 11294 11295 .star-btn { 11296 background: none; 11297 border: none; 11298 font-size: 32px; 11299 color: #d1d5db; 11300 cursor: pointer; 11301 transition: all 0.2s; 11302 padding: 0; 11303 line-height: 1; 11304 } 11305 11306 .star-btn:hover, 11307 .star-btn.active { 11308 color: #fbbf24; 11309 transform: scale(1.1); 11310 } 11311 11312 .rating-label { 11313 display: inline-block; 11314 font-size: 15px; 11315 color: #6b7280; 11316 margin: 0; 11317 vertical-align: middle; 11318 min-width: 150px; 11319 } 11320 11321 /* Form Elements */ 11322 .review-form .form-group { 11323 margin-bottom: 20px; 11324 } 11325 11326 .review-form .form-label { 11327 display: block; 11328 font-size: 14px; 11329 font-weight: 600; 11330 color: #374151; 11331 margin-bottom: 8px; 11332 } 11333 11334 .review-form .form-control { 11335 width: 100%; 11336 padding: 12px; 11337 border: 1px solid #d1d5db; 11338 border-radius: 8px; 11339 font-size: 14px; 11340 font-family: inherit; 11341 transition: border-color 0.2s; 11342 } 11343 11344 .review-form .form-control:focus { 11345 outline: none; 11346 border-color: #2563eb; 11347 box-shadow: 0 0 0 3px rgba(37, 99, 235, 0.1); 11348 } 11349 11350 .review-form .form-hint { 11351 font-size: 13px; 11352 color: #6b7280; 11353 margin-top: 8px; 11354 } 11355 11356 /* Image Upload */ 11357 .btn-upload-trigger { 11358 display: inline-flex; 11359 align-items: center; 11360 gap: 8px; 11361 padding: 10px 16px; 11362 background: #f9fafb; 11363 border: 2px dashed #d1d5db; 11364 border-radius: 8px; 11365 color: #374151; 11366 cursor: pointer; 11367 font-size: 14px; 11368 font-weight: 500; 11369 transition: all 0.2s; 11370 } 11371 11372 .btn-upload-trigger:hover { 11373 background: #f3f4f6; 11374 border-color: #2563eb; 11375 color: #2563eb; 11376 } 11377 11378 .image-preview-grid { 11379 display: grid; 11380 grid-template-columns: repeat(auto-fill, minmax(100px, 1fr)); 11381 gap: 12px; 11382 margin-top: 16px; 11383 } 11384 11385 .image-preview-item { 11386 position: relative; 11387 aspect-ratio: 1; 11388 border-radius: 8px; 11389 overflow: hidden; 11390 border: 1px solid #e5e7eb; 11391 } 11392 11393 .image-preview-item img { 11394 width: 100%; 11395 height: 100%; 11396 object-fit: cover; 11397 } 11398 11399 .remove-image { 11400 position: absolute; 11401 top: 4px; 11402 right: 4px; 11403 background: rgba(0, 0, 0, 0.7); 11404 border: none; 11405 color: white; 11406 width: 24px; 11407 height: 24px; 11408 border-radius: 50%; 11409 cursor: pointer; 11410 display: flex; 11411 align-items: center; 11412 justify-content: center; 11413 transition: background 0.2s; 11414 } 11415 11416 .remove-image:hover { 11417 background: rgba(0, 0, 0, 0.9); 11418 } 11419 11420 /* Point Reward Info */ 11421 .point-reward-info { 11422 background: linear-gradient(135deg, #fef3c7 0%, #fde68a 100%); 11423 border: 2px solid #fbbf24; 11424 border-radius: 12px; 11425 padding: 16px; 11426 margin: 20px 0; 11427 } 11428 11429 .pri-header { 11430 display: flex; 11431 align-items: center; 11432 gap: 8px; 11433 font-size: 16px; 11434 font-weight: 700; 11435 color: #92400e; 11436 margin-bottom: 12px; 11437 } 11438 11439 .pri-list { 11440 list-style: none; 11441 padding: 0; 11442 margin: 0 0 12px 0; 11443 } 11444 11445 .pri-list li { 11446 padding: 6px 0; 11447 font-size: 14px; 11448 color: #78350f; 11449 transition: opacity 0.2s; 11450 } 11451 11452 .pri-total { 11453 padding-top: 12px; 11454 border-top: 2px solid rgba(251, 191, 36, 0.3); 11455 font-size: 16px; 11456 color: #92400e; 11457 font-weight: 600; 11458 } 11459 11460 .form-error { 11461 background: #fee2e2; 11462 border: 1px solid #f87171; 11463 color: #991b1b; 11464 padding: 12px; 11465 border-radius: 8px; 11466 font-size: 14px; 11467 margin-top: 16px; 11468 } 11469 11470 /* Buttons */ 11471 .review-form .btn { 11472 padding: 12px 24px; 11473 border: none; 11474 border-radius: 8px; 11475 font-size: 15px; 11476 font-weight: 600; 11477 cursor: pointer; 11478 transition: all 0.2s; 11479 } 11480 11481 .review-form .btn-primary { 11482 background: #2563eb; 11483 color: white; 11484 } 11485 11486 .review-form .btn-primary:hover { 11487 background: #1d4ed8; 11488 } 11489 11490 .review-form .btn-primary:disabled { 11491 background: #94a3b8;
11492 cursor: not-allowed; 11493 } 11494 11495 .review-form .btn-secondary { 11496 background: #f1f5f9; 11497 color: #64748b; 11498 } 11499 11500 .review-form .btn-secondary:hover { 11501 background: #e2e8f0; 11502 color: #475569; 11503 } 11504 11505 @media (max-width: 768px) { 11506 #review-modal-overlay { 11507 padding: 0; 11508 } 11509 11510 .review-modal { 11511 max-width: 100%; 11512 width: 100% !important; 11513 } 11514 } 11515 11516 /* =================================== 11517 POINT SUMMARY GRID (Profile Page) 11518 =================================== */ 11519 11520 .point-summary-grid { 11521 display: grid; 11522 grid-template-columns: repeat(auto-fit, minmax(200px, 1fr)); 11523 gap: 16px; 11524 margin-bottom: 32px; 11525 } 11526 11527 .point-summary-card { 11528 background: linear-gradient(135deg, #f9fafb 0%, #ffffff 100%); 11529 border: 1px solid #e5e7eb; 11530 border-radius: 12px; 11531 padding: 20px; 11532 text-align: center; 11533 transition: all 0.2s; 11534 } 11535 11536 .point-summary-card:hover { 11537 box-shadow: 0 4px 12px rgba(0, 0, 0, 0.08); 11538 transform: translateY(-2px); 11539 } 11540 11541 .point-summary-card .psc-icon { 11542 font-size: 32px; 11543 margin-bottom: 8px; 11544 } 11545 11546 .point-summary-card .psc-label { 11547 font-size: 13px; 11548 color: #6b7280; 11549 margin-bottom: 8px; 11550 font-weight: 500; 11551 text-transform: uppercase; 11552 letter-spacing: 0.5px; 11553 } 11554 11555 .point-summary-card .psc-value { 11556 font-size: 28px; 11557 font-weight: 700; 11558 color: #009688; 11559 } 11560 11561 /* Point History Section */ 11562 .point-history-section { 11563 margin-top: 32px; 11564 } 11565 11566 .point-history-section h3 { 11567 font-size: 18px; 11568 font-weight: 600; 11569 color: #009688; 11570 margin-bottom: 16px; 11571 } 11572 11573 .point-history-list { 11574 display: flex; 11575 flex-direction: column; 11576 gap: 12px; 11577 } 11578 11579 .point-history-item { 11580 display: grid; 11581 grid-template-columns: 40px 1fr auto; 11582 gap: 16px; 11583 padding: 16px; 11584 background: white; 11585 border: 1px solid #e5e7eb; 11586 border-radius: 10px; 11587 align-items: center; 11588 transition: all 0.2s; 11589 } 11590 11591 .point-history-item:hover { 11592 box-shadow: 0 2px 8px rgba(0, 0, 0, 0.06); 11593 } 11594 11595 .point-history-item.credit { 11596 border-left: 3px solid #10b981; 11597 } 11598 11599 .point-history-item.debit { 11600 border-left: 3px solid #f59e0b; 11601 } 11602 11603 .point-history-item .phi-icon { 11604 width: 40px; 11605 height: 40px; 11606 display: flex; 11607 align-items: center; 11608 justify-content: center; 11609 font-size: 20px; 11610 border-radius: 50%; 11611 background: #f9fafb; 11612 } 11613 11614 .point-history-item.credit .phi-icon { 11615 background: #d1fae5; 11616 } 11617 11618 .point-history-item.debit .phi-icon { 11619 background: #fef3c7; 11620 } 11621
11622 .point-history-item .phi-details { 11623 display: flex; 11624 flex-direction: column; 11625 gap: 4px; 11626 } 11627 11628 .point-history-item .phi-desc { 11629 font-size: 15px; 11630 font-weight: 500; 11631 color: #009688; 11632 } 11633 11634 .point-history-item .phi-date { 11635 font-size: 13px; 11636 color: #9ca3af; 11637 } 11638 11639 .point-history-item .phi-amount { 11640 font-size: 18px; 11641 font-weight: 700; 11642 } 11643 11644 .point-history-item .phi-amount.credit { 11645 color: #10b981; 11646 } 11647 11648 .point-history-item .phi-amount.debit { 11649 color: #f59e0b; 11650 } 11651 11652 @media (max-width: 640px) { 11653 .point-summary-grid { 11654 grid-template-columns: 1fr; 11655 } 11656 11657 .point-history-item { 11658 grid-template-columns: 36px 1fr; 11659 gap: 12px; 11660 } 11661 11662 .point-history-item .phi-amount { 11663 grid-column: 2; 11664 text-align: right; 11665 margin-top: 8px; 11666 } 11667 } 11668</style> 11669 11670<body> 11671 <header class="topbar"> 11672 <div class="container topbar-inner"> 11673 <div class="topbar-left"> 11674 11675 </div> 11676 <div class="topbar-right"> 11677 <a href="https://murdochfinance.com/">SEMUAJP</a> 11678 <a href="https://murdochfinance.com/">Slot Online</a> 11679 <a href="https://finance.murdochfinance.com/">Slot Gacor</a> 11680 <a href="https://sekut.dev/daftar2">Slot Jackpot</a> 11681 </div> 11682 </div> 11683 </header> 11684 <nav class="navbar"> 11685 <nav class="navbar-logo" style="width: 100%;"> 11686 <div class="container nav-inner" style="justify-items: center; justify-content: center;"> 11687 <a href="https://murdochfinance.com/" class="logo-mobile"> 11688 <img src="https://project-cdn-semuajp.pages.dev/logo.gif" alt="SEMUAJP" height="40"> 11689 </a> 11690 </div> 11691 </nav> 11692 <div class="container nav-inner"> 11693 <a href="https://murdochfinance.com/" class="logo"> 11694 <img src="https://project-cdn-semuajp.pages.dev/logo.gif" alt="SEMUAJP" height="40"> 11695 </a> 11696 11697 11698 <form class="search" method="get" action="#"> 11699 <input type="hidden" name="page" value="produk"> 11700 11701 <!-- Search Icon (Desktop) --> 11702 <button type="submit" class="search-icon-btn" id="searchBtn" aria-label="Cari"> 11703 <svg width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5" 11704 stroke-linecap="round" stroke-linejoin="round"> 11705 <circle cx="11" cy="11" r="8" /> 11706 <path d="m21 21-4.35-4.35" /> 11707 </svg> 11708 </button> 11709 11710 <input type="text" name="q" id="searchInput" placeholder="Cari apa di SEMUAJP?" value="" 11711 autocomplete="off"> 11712 11713 <div class="search-suggest" id="searchSuggest" hidden></div> 11714 </form> 11715 11716 <div class="nav-actions"> 11717 <!--<button class="icon-btn" id="notifBtn" title="Notifikasi">ð</button>--> 11718 11719 11720 11721 11722 <a class="login-btn" href="https://finance.murdochfinance.com/">DAFTAR</a> 11723 11724 11725 11726 <!-- Dynamic login/logout button --> 11727 <a class="login-btn" href="https://finance.murdochfinance.com/">LOGIN</a> 11728 </div> 11729 </div> 11730 11731 <div class="container" style="display: flex; align-items: center;"> 11732 11733 11734 <div class="mega-cats-wrapper"> 11735 <div class="mega-cats container" id="megaCatsScroll" style="padding-left: 5px !important;"> 11736 <a class="" href="https://murdochfinance.com/"> 11737 SEMUAJP </a> 11738 <a class="" href="https://murdochfinance.com/"> 11739 Slot Online </a> 11740 <a class="" href="https://murdochfinance.com/"> 11741 Slot Gacor </a> 11742 <a class="" href="https://murdochfinance.com/"> 11743 Slot Jackpot </a> 11744 <a class="" href="https://murdochfinance.com/"> 11745 Slot Hari Ini </a> 11746 <a class="" href="https://murdochfinance.com/"> 11747 SEMUAJP Login </a> 11748 <a class="" href="https://murdochfinance.com/"> 11749 SEMUAJP Resmi </a> 11750 </div> 11751 <div class="mega-cats-fade" id="megaCatsFade"></div> 11752 </div> 11753 </div> 11754 </nav> 11755 11756 <!-- Panel Mega Menu - Outside navbar for full-screen --> 11757 <div class="mm2-panel" data-mm2="panel" role="dialog" aria-label="Kategori"> 11758 <div class="mm2-view is-active" data-mm2="top"></div> 11759 <div class="mm2-view" data-mm2="detail"></div> 11760 </div> 11761 11762 <!-- Backdrop - Outside navbar for full-screen --> 11763 <div class="mm2-backdrop" data-mm2="backdrop"></div> 11764 11765 <!-- Mobile Bottom Navigation --> 11766 <nav class="bottom-nav"> 11767 <div class="bottom-nav-inner"> 11768 <!-- Home --> 11769 <a href="https://murdochfinance.com/" class="bottom-nav-item" id="bottomHomeBtn" data-page="home"> 11770 <div class="bottom-nav-item-icon"> 11771 <!-- Outlined icon (default) -->
11772 <svg class="icon-outlined" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" 11773 stroke-linecap="round" stroke-linejoin="round"> 11774 <path d="M3 9l9-7 9 7v11a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2z" /> 11775 <polyline points="9 22 9 12 15 12 15 22" /> 11776 </svg> 11777 <!-- Filled icon (active) --> 11778 <svg class="icon-filled" viewBox="0 0 24 24" fill="currentColor"> 11779 <path 11780 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" /> 11781 <path 11782 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" /> 11783 </svg> 11784 </div> 11785 <span class="bottom-nav-item-label">Home</span> 11786 </a> 11787 11788 <!-- Kategori --> 11789 <button class="bottom-nav-item" id="bottomCategoryBtn" data-mm2="trigger" aria-label="Kategori"> 11790 <div class="bottom-nav-item-icon"> 11791 <!-- Outlined icon (default) --> 11792 <svg class="icon-outlined" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" 11793 stroke-linecap="round" stroke-linejoin="round"> 11794 <line x1="3" y1="12" x2="21" y2="12" /> 11795 <line x1="3" y1="6" x2="21" y2="6" /> 11796 <line x1="3" y1="18" x2="21" y2="18" /> 11797 </svg> 11798 <!-- Filled icon (active) --> 11799 <svg class="icon-filled" viewBox="0 0 24 24" fill="currentColor"> 11800 <path 11801 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" /> 11802 </svg> 11803 </div> 11804 <span class="bottom-nav-item-label">Kategori</span> 11805 </button> 11806 11807 <!-- Keranjang --> 11808 <button class="bottom-nav-item" id="bottomCartBtn"> 11809 <div class="bottom-nav-item-icon"> 11810 <!-- Outlined icon (default) --> 11811 <svg class="icon-outlined" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" 11812 stroke-linecap="round" stroke-linejoin="round"> 11813 <circle cx="9" cy="21" r="1" /> 11814 <circle cx="20" cy="21" r="1" /> 11815 <path d="M1 1h4l2.68 13.39a2 2 0 0 0 2 1.61h9.72a2 2 0 0 0 2-1.61L23 6H6" /> 11816 </svg> 11817 <!-- Filled icon (active) --> 11818 <svg class="icon-filled" viewBox="0 0 24 24" fill="currentColor"> 11819 <path 11820 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" /> 11821 </svg> 11822 <span class="bottom-nav-item-badge" id="bottomCartCount">0</span> 11823 </div> 11824 <span class="bottom-nav-item-label">Keranjang</span> 11825 </button> 11826 11827 <!-- Compare --> 11828 <button class="bottom-nav-item" id="bottomCompareBtn"> 11829 <div class="bottom-nav-item-icon"> 11830 <!-- Outlined icon (default) --> 11831 <svg class="icon-outlined" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" 11832 stroke-linecap="round" stroke-linejoin="round"> 11833 <polyline points="17 11 21 7 17 3" /> 11834 <path d="M21 7H9" /> 11835 <polyline points="7 21 3 17 7 13" /> 11836 <path d="M15 17H3" /> 11837 </svg> 11838 <!-- Filled icon (active) -->
11839 <svg class="icon-filled" viewBox="0 0 24 24" fill="currentColor"> 11840 <path 11841 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" /> 11842 </svg> 11843 <span class="bottom-nav-item-badge" id="bottomCompareCount" style="display:none;">0</span> 11844 </div> 11845 <span class="bottom-nav-item-label">Compare</span> 11846 </button> 11847 11848 <!-- Chat - Always show, check login in JavaScript --> 11849 <button class="bottom-nav-item" id="bottomChatBtn" data-page="chat"> 11850 <div class="bottom-nav-item-icon"> 11851 <!-- Outlined icon (default) --> 11852 <svg class="icon-outlined" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" 11853 opacity="0.85"> 11854 <path d="M21 15a2 2 0 0 1-2 2H7l-4 4V5a2 2 0 0 1 2-2h14a2 2 0 0 1 2 2z" /> 11855 </svg> 11856 <!-- Filled icon (active) --> 11857 <svg class="icon-filled" viewBox="0 0 24 24" fill="currentColor"> 11858 <path d="M20 2H4c-1.1 0-2 .9-2 2v18l4-4h14c1.1 0 2-.9 2-2V4c0-1.1-.9-2-2-2z" /> 11859 </svg> 11860 <span class="bottom-nav-item-badge" id="bottomChatCount" style="display:none;">0</span> 11861 </div> 11862 <span class="bottom-nav-item-label">Chat</span> 11863 </button> 11864 11865 <!-- Akun --> 11866 <button class="bottom-nav-item" id="bottomLoginBtn"> 11867 <div class="bottom-nav-item-icon"> 11868 <!-- Outlined icon (default) --> 11869 <svg class="icon-outlined" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" 11870 stroke-linecap="round" stroke-linejoin="round"> 11871 <path d="M20 21v-2a4 4 0 0 0-4-4H8a4 4 0 0 0-4 4v2" /> 11872 <circle cx="12" cy="7" r="4" /> 11873 </svg> 11874 <!-- Filled icon (active) --> 11875 <svg class="icon-filled" viewBox="0 0 24 24" fill="currentColor"> 11876 <path fill-rule="evenodd" 11877 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" 11878 clip-rule="evenodd" /> 11879 </svg> 11880 </div> 11881 <span class="bottom-nav-item-label">Login</span> 11882 </button> 11883 </svg> 11884 </div> 11885 </button> 11886 </div> 11887 </nav> 11888 11889 <!-- Mobile User Menu Bottom Sheet --> 11890 11891
11891<script nonce="se3iyzEHMc9FQEB4wSyd0w=="> 11892 (function () { 11893 const btn = document.getElementById('megaMoreBtn'); 11894 const dd = document.getElementById('megaMoreDropdown'); 11895 if (!btn || !dd) return; 11896 11897 function openDD() { 11898 dd.hidden = false; 11899 btn.setAttribute('aria-expanded', 'true'); 11900 document.addEventListener('click', outside, { capture: true }); 11901 document.addEventListener('keydown', esc); 11902 } 11903 function closeDD() { 11904 if (dd.hidden) return; 11905 dd.hidden = true; 11906 btn.setAttribute('aria-expanded', 'false'); 11907 document.removeEventListener('click', outside, { capture: true }); 11908 document.removeEventListener('keydown', esc); 11909 } 11910 function toggle() { dd.hidden ? openDD() : closeDD(); } 11911 function outside(e) { 11912 if (!dd.contains(e.target) && e.target !== btn) { 11913 closeDD(); 11914 } 11915 } 11916 function esc(e) { 11917 if (e.key === 'Escape') { 11918 closeDD(); 11919 btn.focus(); 11920 } 11921 } 11922 btn.addEventListener('click', toggle); 11923 })(); 11924 11925 // ========== HORIZONTAL SCROLL FADE INDICATOR ========== 11926 (function () { 11927 const megaCats = document.getElementById('megaCatsScroll'); 11928 const fade = document.getElementById('megaCatsFade'); 11929 if (!megaCats || !fade) return; 11930 11931 function updateFade() { 11932 const scrollLeft = megaCats.scrollLeft; 11933 const scrollWidth = megaCats.scrollWidth; 11934 const clientWidth = megaCats.clientWidth; 11935 const maxScroll = scrollWidth - clientWidth; 11936 11937 // Hide fade when scrolled to end (within 10px tolerance) 11938 if (maxScroll - scrollLeft <= 10) { 11939 fade.style.opacity = '0'; 11940 } else { 11941 fade.style.opacity = '1'; 11942 } 11943 } 11944 11945 // Update on scroll 11946 megaCats.addEventListener('scroll', updateFade, { passive: true }); 11947 11948 // Update on resize 11949 window.addEventListener('resize', updateFade, { passive: true }); 11950 11951 // Initial check 11952 setTimeout(updateFade, 100); 11953 })(); 11954 11955 document.addEventListener('DOMContentLoaded', function () { 11956 var input = document.getElementById('searchInput'); 11957 if (!input) return; 11958 input.addEventListener('keydown', function (e) { 11959 if (e.key === 'Enter') { 11960 e.preventDefault(); 11961 var form = input.form; 11962 if (!form) return; 11963 if (typeof form.requestSubmit === 'function') form.requestSubmit(); 11964 else form.submit(); 11965 } 11966 }); 11967 }); 11968 11969 11970 (function () { 11971 const cartBtn = document.getElementById('cartBtn'); 11972 if (cartBtn) { 11973 cartBtn.addEventListener('click', function (e) { 11974 e.preventDefault(); 11975 11976 const checkLogin = () => { 11977 return window.isUserLoggedIn ? window.isUserLoggedIn() : false; 11978 }; 11979 11980 if (checkLogin()) { 11981 window.location.href = '/keranjang'; 11982 } else { 11983 showCartLoginModal(); 11984 } 11985 }); 11986 } 11987 11988 const loginBtn = document.getElementById('loginBtn'); 11989 if (loginBtn) { 11990 loginBtn.addEventListener('click', function (e) { 11991 e.preventDefault(); 11992 window.location.href = 'https://murdochfinance.com/'; 11993 }); 11994 } 11995 11996 const userMenuBtn = document.getElementById('userMenuBtn'); 11997 const userDropdown = document.getElementById('userDropdown'); 11998 11999 if (userMenuBtn && userDropdown) { 12000 function openDropdown() { 12001 userDropdown.hidden = false;
12002 userMenuBtn.setAttribute('aria-expanded', 'true'); 12003 document.addEventListener('click', closeOnOutside, { capture: true }); 12004 document.addEventListener('keydown', closeOnEscape); 12005 } 12006 12007 function closeDropdown() { 12008 if (userDropdown.hidden) return; 12009 userDropdown.hidden = true; 12010 userMenuBtn.setAttribute('aria-expanded', 'false'); 12011 document.removeEventListener('click', closeOnOutside, { capture: true }); 12012 document.removeEventListener('keydown', closeOnEscape); 12013 } 12014 12015 function closeOnOutside(e) { 12016 if (!userDropdown.contains(e.target) && e.target !== userMenuBtn) { 12017 closeDropdown(); 12018 } 12019 } 12020 12021 function closeOnEscape(e) { 12022 if (e.key === 'Escape') { 12023 closeDropdown(); 12024 userMenuBtn.focus(); 12025 } 12026 } 12027 12028 userMenuBtn.addEventListener('click', function (e) { 12029 e.preventDefault(); 12030 userDropdown.hidden ? openDropdown() : closeDropdown(); 12031 }); 12032 12033 // Close dropdown when clicking profile links 12034 userDropdown.querySelectorAll('[data-close-dropdown]').forEach(link => { 12035 link.addEventListener('click', function () { 12036 closeDropdown(); 12037 }); 12038 }); 12039 } 12040 12041 // Bottom nav profile button - toggle mobile bottom sheet 12042 const bottomProfileBtn = document.getElementById('bottomProfileBtn'); 12043 const mobileUserSheet = document.getElementById('mobileUserSheet'); 12044 const mobileUserSheetBackdrop = document.getElementById('mobileUserSheetBackdrop'); 12045 12046 if (bottomProfileBtn && mobileUserSheet) { 12047 function openMobileSheet() { 12048 mobileUserSheet.hidden = false; 12049 document.body.style.overflow = 'hidden'; 12050 // Trigger animation 12051 requestAnimationFrame(() => { 12052 mobileUserSheet.classList.add('active'); 12053 }); 12054 } 12055 12056 function closeMobileSheet() { 12057 mobileUserSheet.classList.remove('active'); 12058 document.body.style.overflow = ''; 12059 setTimeout(() => { 12060 mobileUserSheet.hidden = true; 12061 }, 300); 12062 } 12063 12064 bottomProfileBtn.addEventListener('click', function (e) { 12065 e.preventDefault(); 12066 openMobileSheet(); 12067 }); 12068 12069 if (mobileUserSheetBackdrop) { 12070 mobileUserSheetBackdrop.addEventListener('click', closeMobileSheet); 12071 } 12072 12073 // Close on escape key 12074 document.addEventListener('keydown', function (e) { 12075 if (e.key === 'Escape' && !mobileUserSheet.hidden) { 12076 closeMobileSheet(); 12077 } 12078 }); 12079 12080 // Close sheet when clicking profile links 12081 mobileUserSheet.querySelectorAll('[data-close-sheet]').forEach(link => { 12082 link.addEventListener('click', function () { 12083 closeMobileSheet(); 12084 }); 12085 }); 12086 } 12087 12088 // Handle Google avatar error in bottom-nav (fallback to initials) 12089 const bottomNavAvatar = document.querySelector('.bottom-nav-avatar-img'); 12090 if (bottomNavAvatar) { 12091 bottomNavAvatar.addEventListener('error', function () { 12092 const initials = this.getAttribute('data-fallback-initials') || 'U'; 12093 const initialsDiv = document.createElement('div'); 12094 initialsDiv.className = 'bottom-nav-avatar-initials'; 12095 initialsDiv.textContent = initials; 12096 this.parentNode.replaceChild(initialsDiv, this); 12097 }); 12098 } 12099 12100 // Mobile logout button 12101 const mobileLogoutBtn = document.getElementById('mobileLogoutBtn'); 12102 if (mobileLogoutBtn) { 12103 mobileLogoutBtn.addEventListener('click', async function (e) { 12104 e.preventDefault(); 12105 12106 // Check push notification before logout 12107 if (window.ChatNotification && typeof window.ChatNotification.confirmLogoutWithPushNotification === 'function') { 12108 const confirmLogout = await window.ChatNotification.confirmLogoutWithPushNotification(); 12109 if (!confirmLogout) { 12110 return; // User cancelled logout 12111 } 12112 } 12113 12114 const getCsrfToken = () => document.querySelector('meta[name="csrf-token"]')?.getAttribute('content') || ''; 12115 12116 try { 12117 const response = await fetch('/auth/logout', { 12118 method: 'POST', 12119 credentials: 'same-origin', 12120 headers: { 12121 'Content-Type': 'application/json', 12122 'X-CSRF-Token': getCsrfToken() 12123 }, 12124 body: JSON.stringify({ 12125 csrf_token: getCsrfToken() 12126 }) 12127 }); 12128 12129 if (response.ok) { 12130 if (window.guestCart && typeof window.guestCart.clear === 'function') { 12131 window.guestCart.clear(); 12132 } 12133 window.location.href = '/login?logged_out=1'; 12134 } else { 12135 console.error('Logout failed'); 12136 window.location.href = '/logout'; 12137 } 12138 } catch (error) { 12139 console.error('Logout error:', error); 12140 window.location.href = '/logout'; 12141 } 12142 }); 12143 } 12144 12145 const logoutBtn = document.getElementById('logoutBtn'); 12146 if (logoutBtn) { 12147 logoutBtn.addEventListener('click', async function (e) { 12148 e.preventDefault(); 12149 12150 // Check push notification before logout 12151 if (window.ChatNotification && typeof window.ChatNotification.confirmLogoutWithPushNotification === 'function') { 12152 const confirmLogout = await window.ChatNotification.confirmLogoutWithPushNotification(); 12153 if (!confirmLogout) { 12154 return; // User cancelled logout 12155 } 12156 } 12157 12158 const getCsrfToken = () => document.querySelector('meta[name="csrf-token"]')?.getAttribute('content') || ''; 12159 12160 try { 12161 const response = await fetch('/auth/logout', { 12162 method: 'POST', 12163 credentials: 'same-origin', 12164 headers: { 12165 'Content-Type': 'application/json', 12166 'X-CSRF-Token': getCsrfToken() 12167 }, 12168 body: JSON.stringify({ 12169 csrf_token: getCsrfToken() 12170 }) 12171 }); 12172 12173 if (response.ok) { 12174 if (window.guestCart && typeof window.guestCart.clear === 'function') { 12175 window.guestCart.clear(); 12176 } 12177 12178 window.location.href = '/login?logged_out=1'; 12179 } else { 12180 console.error('Logout failed'); 12181 window.location.href = '/logout'; 12182 } 12183 } catch (error) { 12184 console.error('Logout error:', error); 12185 window.location.href = '/logout'; 12186 } 12187 }); 12188 } 12189 12190 const wishlistBtn = document.getElementById('wishlistBtn'); 12191 const notifBtn = document.getElementById('notifBtn'); 12192 12193 if (wishlistBtn) { 12194 wishlistBtn.addEventListener('click', function (e) { 12195 e.preventDefault(); 12196 alert('Fitur wishlist akan segera tersedia!'); 12197 }); 12198 } 12199 12200 if (notifBtn) { 12201 notifBtn.addEventListener('click', function (e) { 12202 e.preventDefault(); 12203 alert('Fitur notifikasi akan segera tersedia!'); 12204 }); 12205 } 12206 })(); 12207 12208 // ========== MOBILE BOTTOM NAVIGATION ========== 12209 (function initBottomNav() { 12210 // Sync cart badge with bottom nav 12211 function syncBottomCartBadge() { 12212 const mainBadge = document.getElementById('cartCount'); 12213 const bottomBadge = document.getElementById('bottomCartCount'); 12214 if (mainBadge && bottomBadge) { 12215 const count = mainBadge.textContent; 12216 bottomBadge.textContent = count; 12217 bottomBadge.style.display = parseInt(count) > 0 ? 'flex' : 'none'; 12218 } 12219 } 12220 12221 // Sync compare badge with bottom nav 12222 function syncBottomCompareBadge() { 12223 const mainBadge = document.getElementById('compareCount'); 12224 const bottomBadge = document.getElementById('bottomCompareCount'); 12225 if (mainBadge && bottomBadge) { 12226 const count = mainBadge.textContent; 12227 bottomBadge.textContent = count; 12228 bottomBadge.style.display = parseInt(count) > 0 ? 'flex' : 'none'; 12229 } 12230 } 12231 12232 // Initial sync 12233 syncBottomCartBadge(); 12234 syncBottomCompareBadge(); 12235 12236 // Observe badge changes 12237 const observer = new MutationObserver(function () { 12238 syncBottomCartBadge(); 12239 syncBottomCompareBadge(); 12240 }); 12241 12242 const cartBadge = document.getElementById('cartCount'); 12243 const compareBadge = document.getElementById('compareCount'); 12244 12245 if (cartBadge) observer.observe(cartBadge, { childList: true, characterData: true, subtree: true }); 12246 if (compareBadge) observer.observe(compareBadge, { childList: true, characterData: true, subtree: true }); 12247 12248 // Bottom Cart Button 12249 const bottomCartBtn = document.getElementById('bottomCartBtn'); 12250 if (bottomCartBtn) { 12251 bottomCartBtn.addEventListener('click', function (e) { 12252 e.preventDefault(); 12253 12254 const checkLogin = () => { 12255 return window.isUserLoggedIn ? window.isUserLoggedIn() : false;
12256 }; 12257 12258 if (checkLogin()) { 12259 window.location.href = '/keranjang'; 12260 } else { 12261 showCartLoginModal(); 12262 } 12263 }); 12264 } 12265 12266 // Bottom Compare Button 12267 const bottomCompareBtn = document.getElementById('bottomCompareBtn'); 12268 if (bottomCompareBtn) { 12269 bottomCompareBtn.addEventListener('click', function (e) { 12270 e.preventDefault(); 12271 12272 // Close chat widget if open 12273 if (window.plazaChat && window.plazaChat.isWidgetOpen) { 12274 window.plazaChat.closeWidget(); 12275 } 12276 12277 const mainCompareBtn = document.getElementById('compareBtn'); 12278 if (mainCompareBtn) { 12279 mainCompareBtn.click(); 12280 } 12281 }); 12282 } 12283 12284 // Bottom Category Button - triggers mega menu 12285 const bottomCategoryBtn = document.getElementById('bottomCategoryBtn'); 12286 if (bottomCategoryBtn) { 12287 bottomCategoryBtn.addEventListener('click', function (e) { 12288 e.preventDefault(); 12289 // Trigger desktop mega menu 12290 const desktopTrigger = document.querySelector('.mm2-trigger:not(#bottomCategoryBtn)'); 12291 if (desktopTrigger) { 12292 desktopTrigger.click(); 12293 } 12294 }); 12295 } 12296 12297 // Bottom Login Button 12298 const bottomLoginBtn = document.getElementById('bottomLoginBtn'); 12299 if (bottomLoginBtn) { 12300 bottomLoginBtn.addEventListener('click', function (e) { 12301 e.preventDefault(); 12302 window.location.href = '/login'; 12303 }); 12304 } 12305 12306 // Bottom Chat Button 12307 const bottomChatBtn = document.getElementById('bottomChatBtn'); 12308 if (bottomChatBtn) { 12309 bottomChatBtn.addEventListener('click', function (e) { 12310 e.preventDefault(); 12311 12312 // Trigger chat widget (try multiple times if needed) 12313 const triggerChat = () => { 12314 const chatToggle = document.getElementById('chat-toggle-btn'); 12315 if (chatToggle) { 12316 chatToggle.click(); 12317 return true; 12318 } 12319 return false; 12320 }; 12321 12322 // Immediate attempt 12323 if (!triggerChat()) { 12324 // Retry after 100ms if not found 12325 setTimeout(() => { 12326 if (!triggerChat()) { 12327 // Last resort: manually show popup 12328 const popup = document.getElementById('chat-popup'); 12329 if (popup) { 12330 popup.style.display = 'block'; 12331 } 12332 } 12333 }, 100); 12334 } 12335 }); 12336 } 12337 12338 // Sync chat unread badge 12339 function syncBottomChatBadge() { 12340 const chatBadge = document.getElementById('chat-unread-badge'); 12341 const bottomChatBadge = document.getElementById('bottomChatCount'); 12342 if (chatBadge && bottomChatBadge) { 12343 const count = chatBadge.textContent; 12344 bottomChatBadge.textContent = count; 12345 bottomChatBadge.style.display = chatBadge.style.display; 12346 } 12347 } 12348 12349 // Observe chat badge changes 12350 const chatBadge = document.getElementById('chat-unread-badge'); 12351 if (chatBadge) { 12352 observer.observe(chatBadge, { attributes: true, childList: true, characterData: true, subtree: true }); 12353 syncBottomChatBadge(); 12354 } 12355 12356 // Active state management based on current page 12357 function updateActiveState() { 12358 const currentPath = window.location.pathname; 12359 const bottomNavItems = document.querySelectorAll('.bottom-nav-item'); 12360
12361 bottomNavItems.forEach(item => { 12362 item.classList.remove('active'); 12363 12364 const itemId = item.id; 12365 const page = item.getAttribute('data-page'); 12366 const href = item.getAttribute('href'); 12367 12368 // Check by ID for specific pages 12369 if (itemId === 'bottomHomeBtn' && currentPath === '/') { 12370 item.classList.add('active'); 12371 } else if (itemId === 'bottomCartBtn' && (currentPath === '/keranjang' || currentPath === '/cart')) { 12372 item.classList.add('active'); 12373 } else if (itemId === 'bottomProfileBtn' && currentPath.startsWith('/profile')) { 12374 item.classList.add('active'); 12375 } else if (itemId === 'bottomCategoryBtn' && currentPath.startsWith('/kategori')) { 12376 item.classList.add('active'); 12377 } else if (itemId === 'bottomCompareBtn' && currentPath === '/compare') { 12378 item.classList.add('active'); 12379 } else if (itemId === 'bottomChatBtn' && currentPath === '/chat') { 12380 item.classList.add('active'); 12381 } 12382 // Fallback: check by data-page attribute 12383 else if (page === 'home' && currentPath === '/') { 12384 item.classList.add('active'); 12385 } else if (page === 'profile' && currentPath.startsWith('/profile')) { 12386 item.classList.add('active'); 12387 } 12388 // Fallback: check by href 12389 else if (href && currentPath === href) { 12390 item.classList.add('active'); 12391 } 12392 }); 12393 } 12394 12395 // Update active state on load 12396 updateActiveState(); 12397 12398 // Bottom nav always visible - auto-hide disabled for better UX 12399 // const bottomNav = document.querySelector('.bottom-nav'); 12400 // if (bottomNav && window.innerWidth <= 640) { 12401 // // Auto-hide feature disabled 12402 // } 12403 })(); 12404 // Cart Login Modal Handler (Global scope) 12405 function showCartLoginModal() { 12406 const modal = document.getElementById('cartLoginModal'); 12407 if (!modal) return; 12408 12409 modal.classList.add('show'); 12410 12411 const confirmBtn = document.getElementById('cartLoginConfirm'); 12412 const registerBtn = document.getElementById('cartRegisterBtn'); 12413 const cancelBtn = document.getElementById('cartLoginCancel'); 12414 12415 const handleLogin = () => { 12416 window.location.href = '/login?return=' + encodeURIComponent('/keranjang'); 12417 }; 12418 12419 const handleRegister = () => { 12420 window.location.href = '/register?return=' + encodeURIComponent('/keranjang'); 12421 }; 12422 12423 const handleCancel = () => { 12424 modal.classList.remove('show'); 12425 confirmBtn.removeEventListener('click', handleLogin); 12426 registerBtn.removeEventListener('click', handleRegister); 12427 cancelBtn.removeEventListener('click', handleCancel); 12428 }; 12429 12430 confirmBtn.removeEventListener('click', handleLogin); 12431 registerBtn.removeEventListener('click', handleRegister); 12432 cancelBtn.removeEventListener('click', handleCancel); 12433 12434 confirmBtn.addEventListener('click', handleLogin); 12435 registerBtn.addEventListener('click', handleRegister); 12436 cancelBtn.addEventListener('click', handleCancel); 12437 12438 modal.addEventListener('click', (e) => { 12439 if (e.target === modal) { 12440 handleCancel(); 12441 } 12442 }); 12443 } 12444 </script>
12444 12445
12445<script src="https://plazaitdotid.pages.dev/assets/js/cart-badge.js" defer 12446 nonce="se3iyzEHMc9FQEB4wSyd0w=="></script>
12446 12447 12448 <!-- Product Compare Sidebar --> 12449 <div class="compare-sidebar" id="compareSidebar"> 12450 <div class="compare-header"> 12451 <h4 class="compare-title"> 12452 <svg width="20" height="20" viewBox="0 0 24 24" fill="currentColor"> 12453 <path 12454 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" /> 12455 </svg> 12456 Bandingkan Produk 12457 <span class="compare-count" id="compareCountSidebar">(0)</span> 12458 </h4> 12459 <button class="compare-close" id="compareClose" aria-label="Tutup"> 12460 <svg width="18" height="18" viewBox="0 0 24 24" fill="currentColor"> 12461 <path 12462 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" /> 12463 </svg> 12464 </button> 12465 </div> 12466 12467 <div class="compare-content"> 12468 <div class="compare-empty" id="compareEmpty"> 12469 <div class="empty-icon"> 12470 <svg width="48" height="48" viewBox="0 0 24 24" fill="currentColor" opacity="0.3"> 12471 <path 12472 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" /> 12473 </svg> 12474 </div> 12475 <h5>Belum ada produk dipilih</h5> 12476 <p>Pilih produk yang ingin dibandingkan dengan klik tombol "Bandingkan Produk" di halaman produk.</p> 12477 </div> 12478 12479 <div class="compare-list" id="compareList"> 12480 <!-- Products will be populated here --> 12481 </div> 12482 </div> 12483 12484 <div class="compare-actions" id="compareActions"> 12485 <button class="btn btn-outline-danger btn-sm" id="compareClearAll"> 12486 <svg width="16" height="16" viewBox="0 0 24 24" fill="currentColor"> 12487 <path 12488 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" /> 12489 </svg> 12490 Hapus Semua 12491 </button> 12492 <button class="btn btn-primary btn-sm" id="compareAnalyze" disabled> 12493 <svg width="16" height="16" viewBox="0 0 24 24" fill="currentColor"> 12494 <path 12495 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" /> 12496 </svg> 12497 Analisis AI 12498 </button> 12499 </div> 12500 12501 <!-- AI Disclaimer in Sidebar --> 12502 <div class="compare-disclaimer"> 12503 <div class="ai-disclaimer"> 12504 <div class="disclaimer-text"> 12505 <strong>ð¡ Catatan:</strong> Analisis ini dihasilkan secara otomatis dan dapat memiliki 12506 keterbatasan. 12507 Gunakan sebagai referensi tambahan dengan tetap mempertimbangkan kebutuhan Anda. 12508 Untuk informasi lebih lanjut, silakan hubungi tim SEMUAJP. 12509 </div> 12510 </div> 12511 </div> 12512 </div> 12513 12514 <style> 12515 .paylater-promo { 12516 display: inline-flex; 12517 align-items: center; 12518 gap: 8px; 12519 background: radial-gradient(circle, rgba(0, 150, 136, 1) 0%, rgba(0, 0, 0, 0.63) 100%); 12520 border: 1px solid #009688; 12521 border-radius: 8px; 12522 padding: 8px 12px; 12523 font-size: 13px; 12524 line-height: 1.4; 12525 margin: 8px 0 12526 } 12527 12528 .paylater-promo-sm { 12529 padding: 6px 10px; 12530 font-size: 11px; 12531 gap: 6px 12532 } 12533 12534 .paylater-promo-md { 12535 padding: 8px 12px; 12536 font-size: 13px; 12537 gap: 8px 12538 } 12539 12540 .paylater-promo-lg { 12541 padding: 10px 16px; 12542 font-size: 14px; 12543 gap: 10px 12544 } 12545 12546 .paylater-icon { 12547 font-size: 1.2em; 12548 flex-shrink: 0 12549 } 12550 12551 .paylater-text { 12552 display: flex; 12553 flex-direction: column; 12554 gap: 2px 12555 } 12556 12557 .paylater-text strong { 12558 color: #000000; 12559 font-weight: 600 12560 } 12561 12562 .paylater-text small { 12563 color: #000000; 12564 font-size: .85em; 12565 opacity: .9 12566 } 12567 12568 .paylater-desktop-only { 12569 display: none 12570 } 12571 12572 .paylater-mobile-only { 12573 display: flex 12574 } 12575 12576 @media (min-width:641px) { 12577 .paylater-desktop-only { 12578 display: flex 12579 } 12580 12581 .paylater-mobile-only { 12582 display: none 12583 } 12584 } 12585 12586 @media (max-width:640px) { 12587 .paylater-promo { 12588 font-size: 12px; 12589 padding: 7px 10px 12590 } 12591 12592 .paylater-promo-lg { 12593 font-size: 13px; 12594 padding: 8px 12px 12595 } 12596 } 12597 12598 @media print { 12599 .paylater-promo { 12600 display: none !important 12601 } 12602 } 12603 12604 .paylater-compact { 12605 display: inline-block; 12606 font-size: 11px; 12607 font-weight: 600; 12608 color: #059669; 12609 background: #d1fae5; 12610 padding: 3px 8px; 12611 border-radius: 4px; 12612 margin: 6px 0 4px; 12613 line-height: 1.3 12614 } 12615 12616 @media (max-width:640px) { 12617 .paylater-compact { 12618 font-size: 10px; 12619 padding: 2px 6px; 12620 margin: 5px 0 3px 12621 } 12622 } 12623 12624 @media print { 12625 .paylater-compact { 12626 display: none !important 12627 } 12628 } 12629 </style> 12630 <style nonce="se3iyzEHMc9FQEB4wSyd0w=="> 12631 .pd-voucher-minimal { 12632 margin: 10px 0; 12633 display: flex; 12634 flex-direction: column; 12635 gap: 6px 12636 } 12637 12638 .pdv-min-item { 12639 display: flex; 12640 align-items: center; 12641 gap: 8px; 12642 padding: 0; 12643 height: 32px; 12644 transition: all .2s ease 12645 } 12646 12647 .pdv-min-hidden { 12648 display: none 12649 } 12650 12651 .pdv-min-disabled { 12652 opacity: .5 12653 } 12654 12655 .pdv-badge-btn { 12656 display: inline-flex; 12657 align-items: center; 12658 gap: 8px; 12659 background: linear-gradient(135deg, #667eea 0, #764ba2 100%); 12660 border: none; 12661 border-radius: 8px; 12662 padding: 3px; 12663 cursor: pointer; 12664 transition: all .2s ease; 12665 width: auto 12666 } 12667 12668 .pdv-badge-btn:hover:not(:disabled) { 12669 transform: translateY(-1px); 12670 box-shadow: 0 4px 12px rgba(102, 126, 234, .3) 12671 } 12672 12673 .pdv-badge-btn:disabled { 12674 opacity: .6;
12675 cursor: not-allowed 12676 } 12677 12678 .pdv-badge-icon { 12679 color: #fff; 12680 flex-shrink: 0 12681 } 12682 12683 .pdv-badge-text { 12684 font-size: 14px; 12685 font-weight: 700; 12686 color: #fff; 12687 white-space: nowrap 12688 } 12689 12690 .pdv-badge-code { 12691 font-family: 'Courier New', monospace; 12692 font-size: 13px; 12693 font-weight: 700; 12694 color: #fff; 12695 background: rgba(255, 255, 255, .2); 12696 padding: 4px 8px; 12697 border-radius: 4px; 12698 border: none; 12699 white-space: nowrap 12700 } 12701 12702 .pdv-min-copy, 12703 .pdv-min-more { 12704 padding: 4px 12px; 12705 font-size: 12px; 12706 font-weight: 600; 12707 border-radius: 5px; 12708 border: 1px solid #e2e8f0; 12709 background: #fff; 12710 color: #667eea; 12711 cursor: pointer; 12712 transition: all .2s ease; 12713 white-space: nowrap 12714 } 12715 12716 .pdv-min-copy:hover:not(:disabled), 12717 .pdv-min-more:hover { 12718 background: #667eea; 12719 color: #fff; 12720 border-color: #667eea 12721 } 12722 12723 .pdv-min-copy:disabled { 12724 opacity: .4; 12725 cursor: not-allowed 12726 } 12727 12728 .pdv-min-copy.copied { 12729 background: #22c55e; 12730 color: #fff; 12731 border-color: #22c55e 12732 } 12733 12734 .pdv-min-more { 12735 margin-left: auto 12736 } 12737
12738 .modal-close { 12739 position: absolute; 12740 top: 20px; 12741 right: 20px; 12742 background: none; 12743 border: none; 12744 cursor: pointer; 12745 color: #64748b; 12746 padding: 4px; 12747 transition: color .2s ease 12748 } 12749 12750 .modal-close:hover { 12751 color: #1e293b 12752 } 12753 12754 .modal-body { 12755 margin-bottom: 8px 12756 } 12757 12758 .voucher-modal-content { 12759 text-align: center 12760 } 12761 12762 .voucher-modal-badge { 12763 display: inline-flex; 12764 flex-direction: row; 12765 align-items: center; 12766 gap: 6px; 12767 background: linear-gradient(135deg, #667eea 0, #764ba2 100%); 12768 border-radius: 10px; 12769 padding: 8px 16px; 12770 margin-bottom: 12px 12771 } 12772 12773 .vmb-value { 12774 font-size: 18px; 12775 font-weight: 700; 12776 color: #fff; 12777 line-height: 1 12778 } 12779 12780 .vmb-label { 12781 font-size: 18px; 12782 font-weight: 700; 12783 color: #fff; 12784 text-transform: uppercase; 12785 letter-spacing: .5px 12786 } 12787 12788 .voucher-modal-code { 12789 font-family: 'Courier New', monospace; 12790 font-size: 14px; 12791 font-weight: 700; 12792 color: #667eea; 12793 background: rgba(102, 126, 234, .1); 12794 padding: 6px 12px; 12795 border-radius: 6px; 12796 border: 2px dashed rgba(102, 126, 234, .3); 12797 display: inline-block; 12798 margin-bottom: 10px 12799 } 12800 12801 .voucher-modal-name { 12802 font-size: 14px; 12803 font-weight: 600; 12804 color: #1e293b; 12805 margin-bottom: 16px 12806 } 12807 12808 .voucher-modal-details { 12809 text-align: left; 12810 background: #f8fafc; 12811 border-radius: 8px; 12812 padding: 12px; 12813 margin-bottom: 16px 12814 } 12815 12816 .vmd-item { 12817 display: flex; 12818 align-items: flex-start; 12819 gap: 8px; 12820 padding: 6px 0; 12821 font-size: 13px; 12822 color: #64748b; 12823 border-bottom: 1px solid #e2e8f0 12824 } 12825 12826 .vmd-item:last-child { 12827 border-bottom: none 12828 } 12829 12830 .vmd-item svg { 12831 color: #667eea; 12832 flex-shrink: 0; 12833 margin-top: 2px 12834 } 12835 12836 .vmd-item strong { 12837 color: #1e293b 12838 } 12839
12840 .modal-actions { 12841 padding: 20px 12842 } 12843 12844 .modal-btn-primary { 12845 background: linear-gradient(135deg, #667eea 0, #764ba2 100%); 12846 color: #fff 12847 } 12848 12849 .modal-btn-primary:hover { 12850 opacity: .9; 12851 transform: translateY(-1px) 12852 } 12853 12854 @media (max-width:640px) { 12855 .pdv-min-item { 12856 gap: 6px 12857 } 12858 12859 .pdv-badge-btn { 12860 padding: 3px; 12861 gap: 6px 12862 } 12863 12864 .pdv-badge-text { 12865 font-size: 13px 12866 } 12867 12868 .pdv-badge-code { 12869 font-size: 12px; 12870 padding: 3px 6px 12871 } 12872 12873 .pdv-min-copy, 12874 .pdv-min-more { 12875 padding: 3px 10px; 12876 font-size: 11px 12877 } 12878 12879 .modal-dialog { 12880 max-width: 95%; 12881 margin: 20px 12882 } 12883 12884 .vmb-value { 12885 font-size: 16px 12886 } 12887 12888 .vmb-label { 12889 font-size: 16px 12890 } 12891 12892 .voucher-modal-code { 12893 font-size: 13px; 12894 padding: 5px 10px 12895 } 12896 } 12897 </style> 12898 <style nonce="se3iyzEHMc9FQEB4wSyd0w=="> 12899 .promo-endyear-mini-banner { 12900 display: flex; 12901 align-items: center; 12902 gap: 12px; 12903 padding: 12px 16px; 12904 background: rgba(255, 255, 255, .8); 12905 backdrop-filter: blur(10px); 12906 -webkit-backdrop-filter: blur(10px); 12907 border: 2px solid rgba(242, 140, 26, .2); 12908 border-radius: 12px; 12909 margin: 16px 0; 12910 box-shadow: 0 4px 16px rgba(0, 0, 0, .08); 12911 transition: all .3s ease 12912 } 12913 12914 .promo-endyear-mini-banner:hover { 12915 transform: translateY(-2px); 12916 box-shadow: 0 6px 20px rgba(0, 0, 0, .12); 12917 border-color: rgba(242, 140, 26, .4) 12918 } 12919 12920 .pey-icon { 12921 font-size: 32px; 12922 line-height: 1; 12923 flex-shrink: 0 12924 } 12925 12926 .pey-content { 12927 flex: 1; 12928 min-width: 0 12929 } 12930 12931 .pey-content strong { 12932 display: block; 12933 font-size: 14px; 12934 font-weight: 700; 12935 color: #F28C1A; 12936 margin-bottom: 2px 12937 } 12938 12939 .pey-content span { 12940 display: block; 12941 font-size: 13px; 12942 color: #64748b; 12943 line-height: 1.4 12944 } 12945 12946 .pey-link { 12947 flex-shrink: 0; 12948 padding: 8px 16px; 12949 background: linear-gradient(135deg, #F28C1A, #FFB84D); 12950 color: #fff; 12951 text-decoration: none; 12952 font-size: 13px; 12953 font-weight: 700; 12954 border-radius: 8px; 12955 white-space: nowrap; 12956 transition: all .2s ease; 12957 box-shadow: 0 2px 8px rgba(242, 140, 26, .25) 12958 } 12959 12960 .pey-link:hover { 12961 transform: translateX(2px); 12962 box-shadow: 0 4px 12px rgba(242, 140, 26, .35) 12963 } 12964 12965 @media(max-width:640px) { 12966 .promo-endyear-mini-banner { 12967 flex-wrap: wrap; 12968 gap: 8px; 12969 padding: 10px 12px 12970 } 12971 12972 .pey-icon { 12973 font-size: 28px; 12974 align-self: flex-start 12975 } 12976 12977 .pey-content { 12978 flex: 1; 12979 min-width: 0 12980 } 12981 12982 .pey-content strong { 12983 font-size: 12px 12984 } 12985 12986 .pey-content span { 12987 font-size: 11px; 12988 line-height: 1.3 12989 } 12990 12991 .pey-link { 12992 width: 100%; 12993 flex-basis: 100%; 12994 font-size: 11px; 12995 padding: 6px 12px; 12996 text-align: center 12997 } 12998 } 12999 13000 @media print { 13001 .promo-endyear-mini-banner { 13002 display: none !important 13003 } 13004 } 13005 </style> 13006 <style nonce="se3iyzEHMc9FQEB4wSyd0w=="> 13007 .pd-title-row { 13008 position: relative; 13009 margin-bottom: 12px; 13010 padding-right: 52px 13011 } 13012 13013 .pd-title { 13014 margin: 0 !important 13015 } 13016 13017 .pd-share-btn { 13018 position: absolute; 13019 top: 0; 13020 right: 0; 13021 width: 40px; 13022 height: 40px; 13023 display: inline-flex; 13024 align-items: center; 13025 justify-content: center; 13026 border-radius: 10px; 13027 border: 1px solid #e2e8f0; 13028 background: #fff; 13029 color: #64748b; 13030 cursor: pointer; 13031 transition: all .2s ease; 13032 -webkit-tap-highlight-color: transparent 13033 } 13034 13035 .pd-share-btn:hover { 13036 background: #f8fafc; 13037 border-color: #cbd5e1; 13038 color: #0f172a; 13039 transform: translateY(-1px) 13040 } 13041 13042 .pd-share-btn:active { 13043 transform: translateY(0) 13044 } 13045 13046 .pd-share-btn svg { 13047 display: block 13048 } 13049 13050 .pd-share-modal-overlay { 13051 position: fixed; 13052 inset: 0; 13053 background: rgba(15, 23, 42, .75); 13054 backdrop-filter: blur(4px); 13055 z-index: 99999; 13056 display: none; 13057 align-items: center; 13058 justify-content: center; 13059 padding: 0; 13060 animation: fadeIn .2s ease 13061 } 13062 13063 .pd-share-modal-overlay.show { 13064 display: flex 13065 } 13066 13067 .pd-share-modal { 13068 background: #fff; 13069 border-radius: 20px; 13070 box-shadow: 0 25px 50px -12px rgba(0, 0, 0, .25); 13071 max-width: 480px; 13072 width: 100%; 13073 max-height: 90vh; 13074 overflow: hidden; 13075 display: flex; 13076 flex-direction: column; 13077 animation: slideUp .3s cubic-bezier(.16, 1, .3, 1) 13078 } 13079 13080 @keyframes fadeIn { 13081 from { 13082 opacity: 0 13083 } 13084 13085 to { 13086 opacity: 1 13087 } 13088 } 13089 13090 @keyframes slideUp { 13091 from { 13092 opacity: 0; 13093 transform: translateY(20px) scale(.95) 13094 } 13095 13096 to { 13097 opacity: 1; 13098 transform: translateY(0) scale(1) 13099 } 13100 } 13101 13102 .pd-share-header { 13103 display: flex; 13104 align-items: center; 13105 justify-content: space-between; 13106 padding: 20px 24px; 13107 border-bottom: 1px solid #f1f5f9 13108 } 13109 13110 .pd-share-title { 13111 font-size: 18px; 13112 font-weight: 700; 13113 color: #0f172a; 13114 margin: 0 13115 } 13116 13117 .pd-share-close { 13118 width: 32px; 13119 height: 32px; 13120 border-radius: 8px; 13121 border: 0; 13122 background: transparent; 13123 color: #64748b; 13124 display: inline-flex; 13125 align-items: center; 13126 justify-content: center; 13127 cursor: pointer; 13128 transition: all .15s ease 13129 } 13130 13131 .pd-share-close:hover { 13132 background: #f1f5f9; 13133 color: #0f172a 13134 } 13135 13136 .pd-share-body { 13137 padding: 24px; 13138 overflow-y: auto 13139 } 13140 13141 .pd-share-preview { 13142 display: flex; 13143 gap: 12px; 13144 padding: 16px; 13145 background: #f8fafc; 13146 border-radius: 12px; 13147 margin-bottom: 24px 13148 } 13149 13150 .pd-share-preview-img { 13151 width: 64px; 13152 height: 64px; 13153 border-radius: 8px; 13154 object-fit: cover; 13155 flex-shrink: 0; 13156 border: 1px solid #e2e8f0 13157 } 13158 13159 .pd-share-preview-info { 13160 flex: 1; 13161 min-width: 0 13162 } 13163 13164 .pd-share-preview-name { 13165 font-size: 14px; 13166 font-weight: 600; 13167 color: #0f172a; 13168 margin: 0 0 4px 0; 13169 display: -webkit-box; 13170 -webkit-line-clamp: 2; 13171 -webkit-box-orient: vertical; 13172 overflow: hidden 13173 } 13174 13175 .pd-share-preview-price { 13176 font-size: 16px; 13177 font-weight: 700; 13178 color: #0ea5e9; 13179 margin: 0 13180 } 13181 13182 .pd-share-label { 13183 font-size: 13px; 13184 font-weight: 600; 13185 color: #475569; 13186 margin: 0 0 12px 0; 13187 text-transform: uppercase; 13188 letter-spacing: .5px 13189 } 13190 13191 .pd-share-grid { 13192 display: grid; 13193 grid-template-columns: repeat(4, 1fr); 13194 gap: 12px; 13195 margin-bottom: 24px 13196 } 13197 13198 .pd-share-option { 13199 display: flex; 13200 flex-direction: column; 13201 align-items: center; 13202 gap: 8px; 13203 padding: 16px 8px; 13204 border: 1.5px solid #e2e8f0; 13205 border-radius: 12px; 13206 background: #fff; 13207 cursor: pointer; 13208 transition: all .2s ease; 13209 text-decoration: none; 13210 color: inherit 13211 } 13212 13213 .pd-share-option:hover { 13214 border-color: #94a3b8; 13215 background: #f8fafc; 13216 transform: translateY(-2px) 13217 } 13218 13219 .pd-share-option:active { 13220 transform: translateY(0) 13221 } 13222 13223 .pd-share-icon { 13224 width: 40px; 13225 height: 40px; 13226 border-radius: 10px; 13227 display: inline-flex; 13228 align-items: center; 13229 justify-content: center; 13230 position: relative 13231 } 13232 13233 .pd-share-icon svg { 13234 width: 24px; 13235 height: 24px; 13236 display: block 13237 } 13238 13239 .pd-share-icon-whatsapp { 13240 background: linear-gradient(135deg, #25D366 0%, #128C7E 100%); 13241 color: #fff 13242 } 13243 13244 .pd-share-icon-facebook { 13245 background: linear-gradient(135deg, #1877F2 0%, #0c63d4 100%); 13246 color: #fff 13247 } 13248 13249 .pd-share-icon-twitter { 13250 background: linear-gradient(135deg, #1DA1F2 0%, #0d8bd9 100%); 13251 color: #fff 13252 } 13253 13254 .pd-share-icon-telegram { 13255 background: linear-gradient(135deg, #0088cc 0%, #0077b3 100%); 13256 color: #fff 13257 } 13258 13259 .pd-share-icon-email { 13260 background: linear-gradient(135deg, #EA4335 0%, #c5331f 100%); 13261 color: #fff 13262 } 13263 13264 .pd-share-icon-copy { 13265 background: linear-gradient(135deg, #f1db63 0%, #e5d146 100%); 13266 color: #fff 13267 } 13268 13269 .pd-share-icon-pdf {
13270 background: linear-gradient(135deg, #ef4444 0%, #dc2626 100%); 13271 color: #fff 13272 } 13273 13274 .pd-share-name { 13275 font-size: 12px; 13276 font-weight: 600; 13277 color: #475569; 13278 text-align: center 13279 } 13280 13281 .pd-share-copy-section { 13282 background: #f8fafc; 13283 padding: 16px; 13284 border-radius: 12px 13285 } 13286 13287 .pd-share-copy-input-wrap { 13288 display: flex; 13289 gap: 8px 13290 } 13291 13292 .pd-share-copy-input { 13293 flex: 1; 13294 padding: 12px 14px; 13295 border: 1px solid #e2e8f0; 13296 border-radius: 10px; 13297 font-size: 14px; 13298 color: #0f172a; 13299 background: #fff; 13300 font-family: 'Segoe UI', system-ui, sans-serif 13301 } 13302 13303 .pd-share-copy-input:focus { 13304 outline: 0; 13305 border-color: #0ea5e9; 13306 box-shadow: 0 0 0 3px rgba(14, 165, 233, .1) 13307 } 13308 13309 .pd-share-copy-btn { 13310 padding: 12px 20px; 13311 border: 0; 13312 border-radius: 10px; 13313 background: linear-gradient(135deg, #0ea5e9 0%, #0284c7 100%); 13314 color: #fff; 13315 font-size: 14px; 13316 font-weight: 600; 13317 cursor: pointer; 13318 transition: all .2s ease; 13319 white-space: nowrap; 13320 display: inline-flex; 13321 align-items: center; 13322 gap: 6px 13323 } 13324 13325 .pd-share-copy-btn:hover { 13326 background: linear-gradient(135deg, #0284c7 0%, #0369a1 100%); 13327 transform: translateY(-1px); 13328 box-shadow: 0 4px 12px rgba(14, 165, 233, .3) 13329 } 13330 13331 .pd-share-copy-btn:active { 13332 transform: translateY(0) 13333 } 13334 13335 .pd-share-copy-btn svg { 13336 width: 16px; 13337 height: 16px 13338 } 13339 13340 .pd-share-copy-btn.copied { 13341 background: linear-gradient(135deg, #22c55e 0%, #16a34a 100%); 13342 pointer-events: none 13343 } 13344 13345 @media(max-width:640px) { 13346 .pd-share-modal { 13347 border-radius: 20px 20px 0 0; 13348 margin-top: auto; 13349 max-height: 85vh 13350 } 13351 13352 .pd-share-grid { 13353 grid-template-columns: repeat(3, 1fr) 13354 } 13355 13356 .pd-share-header { 13357 padding: 16px 20px 13358 } 13359 13360 .pd-share-body { 13361 padding: 20px 13362 } 13363 13364 .pd-share-btn { 13365 width: 36px; 13366 height: 36px 13367 } 13368 13369 .pd-share-btn svg { 13370 width: 18px; 13371 height: 18px 13372 } 13373 } 13374 13375 @media(max-width:480px) { 13376 .pd-share-grid { 13377 grid-template-columns: repeat(3, 1fr); 13378 gap: 10px 13379 } 13380 13381 .pd-share-option { 13382 padding: 12px 6px 13383 } 13384 13385 .pd-share-icon { 13386 width: 36px; 13387 height: 36px 13388 } 13389 13390 .pd-share-icon svg { 13391 width: 20px; 13392 height: 20px 13393 } 13394 13395 .pd-share-name { 13396 font-size: 11px 13397 } 13398 } 13399 13400 .mf-share { 13401 background: #fff; 13402 color: #fb923c; 13403 border: 2px solid #fb923c; 13404 display: inline-flex; 13405 align-items: center; 13406 justify-content: center 13407 } 13408 13409 .mf-share:active { 13410 transform: scale(.95) 13411 } 13412 13413 .mf-share svg { 13414 display: block 13415 } 13416 13417 @media(max-width:640px) { 13418 .pd-share-btn { 13419 display: none !important 13420 } 13421 } 13422 13423 .stock-badge.in { 13424 background: #e6f9ec; 13425 color: #15803d; 13426 border-radius: 999px; 13427 padding: 4px 10px; 13428 font-weight: 700 13429 } 13430 13431 .stock-badge.out { 13432 background: #fee2e2; 13433 color: #b91c1c; 13434 border-radius: 999px; 13435 padding: 4px 10px; 13436 font-weight: 700 13437 } 13438 13439 .stock-info-btn { 13440 --c: #0ea5e9; 13441 --b: #bae6fd; 13442 --bg: #f0f9ff; 13443 --bg-h: #e0f2fe; 13444 --b-h: #0ea5e9; 13445 margin-left: 0; 13446 display: inline-flex; 13447 align-items: center; 13448 justify-content: center; 13449 gap: 0.5rem; 13450 padding: 4px 10px; 13451 border-radius: 999px; 13452 border: 1.5px solid var(--b); 13453 background: var(--bg); 13454 color: var(--c); 13455 cursor: pointer; 13456 font-size: 12px; 13457 font-weight: 600; 13458 transition: all .2s ease; 13459 -webkit-tap-highlight-color: transparent 13460 } 13461 13462 .stock-info-btn:hover { 13463 background: var(--bg-h); 13464 border-color: var(--b-h); 13465 color: #0284c7; 13466 transform: translateY(-1px); 13467 box-shadow: 0 2px 8px rgba(14, 165, 233, .15) 13468 } 13469 13470 .stock-info-btn:active { 13471 transform: translateY(0) 13472 } 13473 13474 .stock-info-btn:focus-visible { 13475 outline: 0; 13476 box-shadow: 0 0 0 3px rgba(14, 165, 233, .2) 13477 } 13478 13479 .stock-info-btn svg { 13480 width: 14px; 13481 height: 14px; 13482 flex-shrink: 0 13483 } 13484 13485 .stock-info-btn .btn-text { 13486 white-space: nowrap 13487 } 13488 13489 .stock-popover { 13490 position: absolute; 13491 z-index: 9999; 13492 min-width: 280px; 13493 max-width: 92vw; 13494 background: #0b1220; 13495 color: #eef3ff; 13496 border: 1px solid rgba(255, 255, 255, .08); 13497 border-radius: 14px; 13498 box-shadow: 0 20px 40px rgba(12, 12, 20, .45); 13499 padding: 12px 12px 8px; 13500 display: none 13501 } 13502 13503 .stock-popover.show { 13504 display: block 13505 } 13506 13507 .stock-popover::before { 13508 content: ""; 13509 position: absolute; 13510 top: -8px; 13511 left: 24px; 13512 width: 14px; 13513 height: 14px; 13514 background: #0b1220; 13515 border-left: 1px solid rgba(255, 255, 255, .08); 13516 border-top: 1px solid rgba(255, 255, 255, .08); 13517 transform: rotate(45deg) 13518 } 13519 13520 .sp-head { 13521 display: flex; 13522 align-items: center; 13523 justify-content: space-between; 13524 margin-bottom: 8px 13525 } 13526 13527 .sp-title { 13528 font-weight: 800; 13529 font-size: 14px 13530 } 13531 13532 .sp-close { 13533 background: transparent; 13534 border: 0; 13535 color: #98a2b3; 13536 cursor: pointer 13537 } 13538 13539 .sp-list { 13540 list-style: none; 13541 margin: 0; 13542 padding: 0; 13543 display: flex; 13544 flex-direction: column; 13545 gap: 8px 13546 } 13547 13548 .sp-item { 13549 display: grid; 13550 grid-template-columns: 1fr auto 32px; 13551 column-gap: 12px; 13552 align-items: center; 13553 padding: 10px 10px; 13554 min-height: 44px; 13555 border-radius: 10px; 13556 background: rgba(255, 255, 255, .03) 13557 } 13558 13559 .sp-left { 13560 display: flex; 13561 align-items: center; 13562 gap: 10px 13563 } 13564 13565 .sp-dot { 13566 width: 10px; 13567 height: 10px; 13568 border-radius: 999px; 13569 background: var(--dot, #60a5fa); 13570 display: inline-block 13571 } 13572 13573 .sp-label { 13574 font-weight: 600; 13575 font-size: 13px 13576 } 13577 13578 13579 .sp-qty { 13580 grid-column: 2; 13581 justify-self: end; 13582 min-width: 40px; 13583 text-align: right; 13584 font-weight: 800; 13585 font-size: 13px; 13586 color: #cfe4ff; 13587 font-variant-numeric: tabular-nums 13588 } 13589 13590 .sp-wa { 13591 grid-column: 3; 13592 justify-self: end; 13593 width: 32px; 13594 height: 32px; 13595 min-width: 32px; 13596 min-height: 32px; 13597 box-sizing: border-box; 13598 padding: 0; 13599 line-height: 0; 13600 text-decoration: none; 13601 outline: 0; 13602 display: inline-flex; 13603 align-items: center; 13604 justify-content: center; 13605 border-radius: 999px; 13606 border: 1px solid rgba(37, 211, 102, .60);
13607 /* 1px untuk hasil âcrispâ */ 13608 background: rgba(37, 211, 102, .08); 13609 color: #25D366; 13610 transition: background-color .15s ease, border-color .15s ease, transform .05s ease; 13611 -webkit-tap-highlight-color: transparent; 13612 } 13613 13614 .sp-wa:hover { 13615 background: rgba(37, 211, 102, .16); 13616 border-color: rgba(37, 211, 102, .75) 13617 } 13618 13619 .sp-wa:active { 13620 transform: translateY(.5px) scale(.98) 13621 } 13622 13623 .sp-wa svg { 13624 width: 18px; 13625 height: 18px; 13626 display: block; 13627 vertical-align: middle 13628 } 13629 13630 .stock-popover a { 13631 text-decoration: none 13632 } 13633 13634 #deskripsi img { 13635 max-width: 450px !important; 13636 height: unset !important 13637 } 13638 13639 @media(max-width:640px) { 13640 .stock-popover { 13641 position: fixed; 13642 left: 0; 13643 right: 0; 13644 bottom: max(12px, env(safe-area-inset-bottom, 12px)); 13645 margin: 0 10px; 13646 padding: 14px 12px 10px; 13647 border-radius: 16px 13648 } 13649 13650 .stock-popover::before { 13651 display: none 13652 } 13653 13654 .stock-info-btn { 13655 padding: 4px 8px; 13656 gap: 4px; 13657 border: 0; 13658 background: transparent 13659 } 13660 13661 .stock-info-btn:hover { 13662 background: transparent; 13663 box-shadow: none; 13664 transform: none 13665 } 13666 13667 .stock-info-btn .btn-text { 13668 display: none 13669 } 13670 13671 .stock-info-btn svg { 13672 width: 16px; 13673 height: 16px 13674 } 13675 13676 .sp-item { 13677 grid-template-columns: 1fr auto 36px 13678 } 13679 13680 .sp-wa { 13681 width: 36px; 13682 height: 36px; 13683 min-width: 36px; 13684 min-height: 36px 13685 } 13686 13687 .sp-wa svg { 13688 width: 19px; 13689 height: 19px 13690 } 13691 } 13692 13693 .stock-dot { 13694 position: absolute; 13695 bottom: 8px; 13696 right: 8px; 13697 width: 8px; 13698 height: 8px; 13699 border-radius: 50%; 13700 box-shadow: 0 1px 3px rgba(0, 0, 0, 0.4); 13701 z-index: 2; 13702 cursor: help 13703 } 13704 13705 .stock-dot.ready { 13706 background: #10b981 13707 } 13708 13709 .stock-dot.low { 13710 background: #f59e0b 13711 } 13712 13713 .stock-dot.out { 13714 background: #ef4444 13715 } 13716 13717 .stock-dot:hover { 13718 transform: scale(1.2); 13719 transition: transform 0.2s ease 13720 } 13721 13722 @media(max-width:640px) { 13723 .stock-dot { 13724 width: 7px; 13725 height: 7px; 13726 bottom: 6px; 13727 right: 6px 13728 } 13729 } 13730 13731 .pd-related-card .spec-chips { 13732 font-size: 11px; 13733 color: #64748b; 13734 margin: 4px 0 6px 0; 13735 line-height: 1.3; 13736 font-weight: 500 13737 } 13738 13739 .pd-related-card .spec-chips .spec-divider { 13740 margin: 0 4px; 13741 opacity: 0.6 13742 } 13743 13744 @media(max-width:640px) { 13745 .pd-related-card .spec-chips { 13746 font-size: 10px; 13747 margin: 3px 0 5px 0 13748 } 13749 13750 #deskripsi img { 13751 max-width: 300px !important; 13752 height: unset !important; 13753 justify-self: center !important 13754 } 13755 } 13756 13757 .pwp-trigger-badge { 13758 display: inline-flex; 13759 align-items: center; 13760 gap: 4px; 13761 padding: 3px 8px 4px; 13762 background: linear-gradient(135deg, #fbbf24 0%, #f59e0b 100%); 13763 color: #78350f; 13764 border-radius: 6px; 13765 font-size: .65rem; 13766 font-weight: 600; 13767 border: 0 13768 } 13769 13770 .pwp-trigger-badge svg { 13771 flex-shrink: 0; 13772 width: 12px; 13773 height: 12px 13774 } 13775 13776 .pwp-deals-section { 13777 margin: 0; 13778 padding: 12px; 13779 background: linear-gradient(135deg, #fef3c7 0%, #fde68a 100%); 13780 border-radius: 12px; 13781 border: 2px solid #fbbf24 13782 } 13783 13784 .pwp-deals-header { 13785 display: flex; 13786 gap: 10px; 13787 margin-bottom: 10px 13788 } 13789 13790 .pwp-icon { 13791 flex-shrink: 0; 13792 color: #f59e0b; 13793 width: 18px; 13794 height: 18px 13795 } 13796 13797 .pwp-text .pwp-title { 13798 margin: 0 0 2px 0; 13799 font-size: 14px; 13800 font-weight: 700; 13801 color: #78350f 13802 } 13803 13804 .pwp-text .pwp-subtitle { 13805 margin: 0; 13806 font-size: 11px; 13807 color: #92400e; 13808 opacity: 0.9 13809 } 13810 13811 .pwp-deals-loading { 13812 text-align: center; 13813 padding: 40px 0; 13814 color: #92400e 13815 } 13816 13817 .pwp-spinner { 13818 width: 40px; 13819 height: 40px; 13820 border: 3px solid #fbbf24; 13821 border-top-color: #f59e0b; 13822 border-radius: 50%; 13823 animation: spin 0.8s linear infinite; 13824 margin: 0 auto 12px 13825 } 13826 13827 @keyframes spin { 13828 to { 13829 transform: rotate(360deg) 13830 } 13831 } 13832 13833 .pwp-deals-grid { 13834 display: flex; 13835 flex-direction: column; 13836 gap: 6px 13837 } 13838 13839 .pwp-deal-card { 13840 background: #fff; 13841 border-radius: 6px; 13842 overflow: hidden; 13843 border: 1px solid #fbbf24; 13844 display: flex; 13845 align-items: center; 13846 padding: 8px; 13847 gap: 10px 13848 } 13849 13850 .pwp-deal-card:hover { 13851 background: #fef3c7 13852 } 13853 13854 .pwp-deal-thumb { 13855 flex-shrink: 0; 13856 width: 50px; 13857 height: 50px; 13858 background: #f8fafc; 13859 overflow: hidden; 13860 border-radius: 4px 13861 } 13862 13863 .pwp-deal-thumb img { 13864 width: 100%; 13865 height: 100%; 13866 object-fit: cover 13867 } 13868 13869 .pwp-deal-badge { 13870 background: #dc2626; 13871 color: #fff; 13872 padding: 2px 5px; 13873 border-radius: 3px; 13874 font-size: 9px; 13875 font-weight: 700; 13876 margin-left: auto 13877 } 13878 13879 .pwp-deal-info { 13880 flex: 1; 13881 display: flex; 13882 flex-direction: column; 13883 gap: 4px 13884 } 13885 13886 .pwp-deal-name { 13887 font-size: 12px; 13888 font-weight: 600; 13889 color: #0f172a; 13890 margin: 0; 13891 line-height: 1.2 13892 } 13893 13894 .pwp-deal-prices { 13895 display: flex; 13896 align-items: center; 13897 gap: 6px; 13898 flex-wrap: wrap 13899 } 13900 13901 .pwp-deal-price { 13902 font-size: 14px; 13903 font-weight: 800; 13904 color: #dc2626; 13905 white-space: nowrap 13906 } 13907 13908 .pwp-deal-original { 13909 font-size: 11px; 13910 color: #64748b; 13911 text-decoration: line-through; 13912 white-space: nowrap 13913 } 13914 13915 .pwp-cart-note { 13916 margin-top: 8px; 13917 padding: 6px 10px; 13918 background: #e0f2fe; 13919 border-left: 2px solid#0ea5e9; 13920 font-size: 11px; 13921 color: #0c4a6e; 13922 border-radius: 4px 13923 } 13924 13925 @media(max-width:640px) { 13926 .pwp-deals-section { 13927 margin: 12px 0; 13928 padding: 10px; 13929 border-radius: 10px 13930 } 13931 13932 .pwp-deals-header { 13933 gap: 8px 13934 } 13935 13936 .pwp-text .pwp-title { 13937 font-size: 13px 13938 } 13939 13940 .pwp-text .pwp-subtitle { 13941 font-size: 10px 13942 } 13943 13944 .pwp-deal-card { 13945 padding: 6px; 13946 gap: 8px 13947 } 13948 13949 .pwp-deal-thumb { 13950 width: 45px; 13951 height: 45px 13952 } 13953 13954 .pwp-deal-name { 13955 font-size: 11px 13956 } 13957 13958 .pwp-deal-price { 13959 font-size: 13px 13960 } 13961 13962 .pwp-deal-original { 13963 font-size: 10px 13964 } 13965 } 13966 13967 .preorder-badge { 13968 display: inline-flex; 13969 align-items: center; 13970 gap: 5px; 13971 padding: 6px 12px; 13972 background: linear-gradient(135deg, #8b5cf6 0%, #7c3aed 100%); 13973 color: #fff; 13974 border-radius: 8px; 13975 font-size: 13px; 13976 font-weight: 700; 13977 border: 0; 13978 box-shadow: 0 2px 8px rgba(139, 92, 246, .25) 13979 } 13980 13981 .preorder-badge svg { 13982 width: 16px; 13983 height: 16px; 13984 flex-shrink: 0 13985 } 13986 13987 .preorder-info { 13988 margin: 12px 0; 13989 padding: 14px; 13990 background: linear-gradient(135deg, #f5f3ff 0%, #ede9fe 100%); 13991 border: 1.5px solid #c4b5fd; 13992 border-radius: 12px 13993 } 13994 13995 .preorder-info-header { 13996 display: flex; 13997 align-items: center; 13998 gap: 8px; 13999 margin-bottom: 10px 14000 } 14001 14002 .preorder-info-icon {
14003 width: 20px; 14004 height: 20px; 14005 color: #7c3aed; 14006 flex-shrink: 0 14007 } 14008 14009 .preorder-info-title { 14010 font-size: 14px; 14011 font-weight: 700; 14012 color: #5b21b6; 14013 margin: 0 14014 } 14015 14016 .preorder-info-items { 14017 display: flex; 14018 flex-direction: column; 14019 gap: 8px 14020 } 14021 14022 .preorder-info-row { 14023 display: flex; 14024 align-items: center; 14025 justify-content: space-between; 14026 font-size: 13px 14027 } 14028 14029 .preorder-info-label { 14030 color: #6b21a8; 14031 font-weight: 600 14032 } 14033 14034 .preorder-info-value { 14035 color: #5b21b6; 14036 font-weight: 700 14037 } 14038 14039 .preorder-info-value.highlight { 14040 color: #dc2626; 14041 font-size: 14px 14042 } 14043 14044 .preorder-info-note { 14045 margin-top: 10px; 14046 padding: 8px 10px; 14047 background: #fef3c7; 14048 border-left: 2px solid #f59e0b; 14049 font-size: 12px; 14050 color: #78350f; 14051 border-radius: 6px; 14052 line-height: 1.4 14053 } 14054 14055 @media(max-width:640px) { 14056 .preorder-badge { 14057 font-size: 12px; 14058 padding: 5px 10px 14059 } 14060 14061 .preorder-info { 14062 margin: 10px 0; 14063 padding: 12px 14064 } 14065 14066 .preorder-info-title { 14067 font-size: 13px 14068 } 14069 14070 .preorder-info-row { 14071 font-size: 12px 14072 } 14073 14074 .preorder-info-note { 14075 font-size: 11px; 14076 padding: 6px 8px 14077 } 14078 } 14079 </style> 14080 14081 <div class="pd-sticky-header" id="pd-sticky-header"> 14082 <div class="pd-sticky-header-container"> 14083 <div class="pd-sticky-thumb"><img src="https://finance.murdochfinance.com/brand.webp" 14084 alt="SEMUAJP" id="pd-sticky-thumb-img"></div> 14085 <div class="pd-sticky-info"> 14086 <h2 class="pd-sticky-title" id="pd-sticky-title">SEMUAJP: Kita Kasih Link Daftar Terbaik Situs Online Slot Gacor Gampang jackpot </h2> 14087 <div class="pd-sticky-price-row"><span class="pd-sticky-price" id="pd-sticky-price">Rp 14088 5.000,-</span><span class="pd-sticky-price-original" id="pd-sticky-price-original">Rp 14089 1.000.000</span><span class="pd-sticky-discount" id="pd-sticky-discount">-99.5%</span></div> 14090 </div> 14091 <div class="pd-sticky-actions"><button type="button" class="pd-sticky-share-btn" id="pd-sticky-share-btn" 14092 aria-label="Bagikan produk" title="Bagikan"><svg viewBox="0 0 24 24" width="16" height="16" 14093 aria-hidden="true"> 14094 <path fill="currentColor" 14095 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" /> 14096 </svg></button><button type="button" class="pd-sticky-btn pd-sticky-btn-chat" 14097 id="pd-sticky-chat"><svg viewBox="0 0 640 640" fill="currentColor" aria-hidden="true"> 14098 <path 14099 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" /> 14100 </svg>Tanya</button><button type="button" class="pd-sticky-btn pd-sticky-btn-cart" 14101 id="pd-sticky-add-cart" disabled>+ Keranjang</button><button type="button" 14102 class="pd-sticky-btn pd-sticky-btn-buy" id="pd-sticky-buy" disabled>Beli Sekarang</button></div> 14103 </div> 14104 </div> 14105 14106 <main class="product-single product-single--v3"> 14107 <nav class="pd-breadcrumb" aria-label="breadcrumb"><a 14108 href="https://murdochfinance.com/">Semuajp</a><span>/</span><a 14109 href="https://murdochfinance.com/">Slot Online</a><span>/</span><a 14110 href="https://murdochfinance.com/">Slot Gacor</a><span>/</span><a 14111 href="https://murdochfinance.com/">Slot Jackpot</a><span>/</span><a 14112 href="https://murdochfinance.com/">Slot Hari Ini</a><span>/</span><span class="current"> 14113 SEMUAJP Login 14114 14115 </span></nav> 14116 14117 <div class="pd-top-layout"> 14118 <section class="pd-media-card"> 14119 <figure class="pd-main-image" id="pd-main-figure"><img id="pd-main-img" 14120 src="https://finance.murdochfinance.com/brand.webp" alt="SEMUAJP" data-slug="" 14121 loading="eager"> 14122 </figure> 14123 14124 <div class="pd-mobile-slider-wrapper"> 14125 <div class="pd-mobile-slider" id="pd-mobile-slider" aria-label="Galeri gambar (geser)"> 14126 <div class="pd-mslide"><img src="https://finance.murdochfinance.com/brand.webp" 14127 alt="SEMUAJP" loading="eager"></div> 14128 <div class="pd-mslide"><img src="https://finance.murdochfinance.com/brand.webp" 14129 alt="SEMUAJP" loading="lazy"></div> 14130 <div class="pd-mslide"><img src="https://finance.murdochfinance.com/brand.webp" 14131 alt="SEMUAJP" loading="lazy"></div> 14132 <div class="pd-mslide"><img src="https://finance.murdochfinance.com/brand.webp" 14133 alt="SEMUAJP" loading="lazy"></div> 14134 <div class="pd-mslide"><img src="https://finance.murdochfinance.com/brand.webp" 14135 alt="SEMUAJP" loading="lazy"></div> 14136 <div class="pd-mslide"><img src="https://finance.murdochfinance.com/brand.webp" 14137 alt="SEMUAJP" loading="lazy"></div> 14138 </div> 14139 <div class="pd-gallery-counter" id="pd-gallery-counter">1/6</div> 14140 </div> 14141 <div class="pd-thumb-gallery" id="pd-thumb-gallery" aria-label="Galeri gambar produk"><button 14142 type="button" class="pd-thumb-btn active" 14143 data-full="https://finance.murdochfinance.com/brand.webp" data-alt
14143="SEMUAJP" 14144 data-slug="" aria-label="Gambar 1"><img 14145 src="https://finance.murdochfinance.com/brand.webp" alt="SEMUAJP" 14146 loading="lazy"></button><button type="button" class="pd-thumb-btn " 14147 data-full="https://finance.murdochfinance.com/brand.webp" data-alt="SEMUAJP" 14148 data-slug="https://finance.murdochfinance.com/brand.webp" aria-label="Gambar 2"><img 14149 src="https://finance.murdochfinance.com/brand.webp" alt="SEMUAJP" 14150 loading="lazy"></button><button type="button" class="pd-thumb-btn " 14151 data-full="https://finance.murdochfinance.com/brand.webp" data-alt="SEMUAJP" 14152 data-slug="lenovo-legion-go-8asp2-83n0000rid-ryzen-z2-extreme-amd-radeon-graphics-eclipse-b-1761796941-223.webp" 14153 aria-label="Gambar 3"><img src="https://finance.murdochfinance.com/brand.webp" 14154 alt="SEMUAJP" loading="lazy"></button><button type="button" class="pd-thumb-btn " 14155 data-full="https://finance.murdochfinance.com/brand.webp" data-alt="SEMUAJP" 14156 data-slug="lenovo-legion-go-8asp2-83n0000rid-ryzen-z2-extreme-amd-radeon-graphics-eclipse-b-1761796941-776.webp" 14157 aria-label="Gambar 4"><img src="https://finance.murdochfinance.com/brand.webp" 14158 alt="SEMUAJP" loading="lazy"></button><button type="button" class="pd-thumb-btn " 14159 data-full="https://finance.murdochfinance.com/brand.webp" data-alt="SEMUAJP" 14160 data-slug="lenovo-legion-go-8asp2-83n0000rid-ryzen-z2-extreme-amd-radeon-graphics-eclipse-b-1761796941-634.webp" 14161 aria-label="Gambar 5"><img src="https://finance.murdochfinance.com/brand.webp" 14162 alt="SEMUAJP" loading="lazy"></button><button type="button" class="pd-thumb-btn " 14163 data-full="https://finance.murdochfinance.com/brand.webp" data-alt="SEMUAJP" 14164 data-slug="lenovo-legion-go-8asp2-83n0000rid-ryzen-z2-extreme-amd-radeon-graphics-eclipse-b-1761796941-892.webp" 14165 aria-label="Gambar 6"><img src="https://finance.murdochfinance.com/brand.webp" 14166 alt="SEMUAJP" loading="lazy"></button></div> 14167 </section> 14168 <section class="pd-info-card"> 14169 <div id="pd-variant-combined" class="pd-variant-combined" hidden></div> 14170 <div class="pd-title-row"> 14171 <h2 class="pd-title" id="pd-title">SEMUAJP | LINK DAFTAR SITUS GAMPANG JACKPOT 14172 </h2><button type="button" class="pd-share-btn" id="pd-share-btn" 14173 aria-label="Bagikan produk" title="Bagikan"><svg viewBox="0 0 24 24" width="20" height="20" 14174 aria-hidden="true"> 14175 <path fill="currentColor" 14176 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" /> 14177 </svg></button> 14178 </div> 14179 <div id="pd-price-anchor"> 14180 </div> 14181 <div class="pd-price-qr-container"> 14182 <div class="pd-price-block" id="pd-price-block"> 14183 <div class="pd-price-row"> 14184 <span class="pd-price-current" id="pd-price-current">Rp 5.000</span> 14185 <span class="pd-price-original" id="pd-price-original">Rp 50.000</span> 14186 <span class="pd-discount-badge" id="pd-discount-badge">-95%</span> 14187 </div> 14188 <div class="pd-meta-row">
14189 <span class="sold-inline" id="pd-sold-inline" data-role="sold-chip">Terjual Terjual 2</span> 14190 <span class="pwp-trigger-badge" id="pwp-trigger-badge" hidden> 14191 <svg width="14" height="14" viewBox="0 0 24 24" fill="currentColor"> 14192 <path 14193 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" /> 14194 </svg>Bisa PWP</span> 14195 </div> 14196 <div class="pd-meta-inline"><span class="stock-badge out" id="pd-stock-badge">SEMUAJP</span> 14197 <span class="sku">SKU: <span id="pd-sku">1S83N0880RID</span></span> 14198 </div> 14199 <div class="paylater-promo paylater-promo-sm paylater-mobile-only"> 14200 <span class="paylater-icon">ð³</span> 14201 <span class="paylater-text"> 14202 <strong>Autorized Situs Gacor</strong> 14203 <small>Situs Gacor SEMUAJP</small> 14204 </span> 14205 </div> 14206 14207 <div class="stock-popover" id="pd-stock-popover" role="dialog" aria-hidden="true" 14208 aria-label="Informasi stok cabang"> 14209 <div class="sp-head"> 14210 <div class="sp-title">Stok Cabang</div><button type="button" class="sp-close" 14211 id="pd-stock-popover-close" aria-label="Tutup"><svg width="18" height="18"
14212 viewBox="0 0 24 24"> 14213 <path fill="currentColor" 14214 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" /> 14215 </svg></button> 14216 </div> 14217 <ul class="sp-list"> 14218 <li class="sp-item"> 14219 <div class="sp-left"><span class="sp-dot" style="--dot:#60a5fa;"></span><span 14220 class="sp-label">Asia Mega Mas</span></div><span class="sp-qty" 14221 id="sp-qty-meg">0</span><a class="sp-wa" 14222 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" 14223 target="_blank" rel="noopener" aria-label="WhatsApp Asia Mega Mas"><svg 14224 class="ico-wa" viewBox="0 0 24 24" aria-hidden="true" focusable="false"> 14225 <path fill="currentColor" 14226 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" /> 14227 </svg></a> 14228 </li> 14229 14230 <li class="sp-item"> 14231 <div class="sp-left"> 14232 <span class="sp-dot" style="--dot:#34d399;"></span> 14233 <span class="sp-label">Medan Fair</span> 14234 </div> 14235 <span class="sp-qty" id="sp-qty-mdf">0</span> 14236 <a class="sp-wa" 14237 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" 14238 target="_blank" rel="noopener" aria-label="WhatsApp Medan Fair"> 14239 <svg class="ico-wa" viewBox="0 0 24 24" aria-hidden="true" focusable="false"> 14240 <path fill="currentColor" 14241 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" /> 14242 </svg> 14243 </a> 14244 </li> 14245 14246 <li class="sp-item"> 14247 <div class="sp-left">
14248 <span class="sp-dot" style="--dot:#f59e0b;"></span> 14249 <span class="sp-label">Banda Aceh</span> 14250 </div> 14251 <span class="sp-qty" id="sp-qty-bda">0</span> 14252 <a class="sp-wa" 14253 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" 14254 target="_blank" rel="noopener" aria-label="WhatsApp Banda Aceh"> 14255 <svg class="ico-wa" viewBox="0 0 24 24" aria-hidden="true" focusable="false"> 14256 <path fill="currentColor" 14257 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" /> 14258 </svg> 14259 </a> 14260 </li> 14261 </ul> 14262 </div> 14263 14264 </div> 14265 <div class="pd-qr-print" style="display:none;"> 14266 <div class="pd-qr-label">Scan untuk lihat produk:</div><img 14267 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" 14268 alt="QR Code" class="pd-qr-image"> 14269 </div> 14270 </div> 14271 <div id="pd-variants-anchor"></div> 14272 14273 14274 14275 <div class="pd-compare-section"> 14276 <button type="button" class="pd-compare-btn" id="pd-compare-btn" data-product-id="325"> 14277 <svg class="compare-icon" width="18" height="18" viewBox="0 0 24 24" fill="currentColor"> 14278 <path d="M21,9L17,5V8H10V10H17V13M7,11L3,15L7,19V16H14V14H7V11Z" /> 14279 </svg> 14280 <span class="compare-text">Bandingkan Produk</span> 14281 <span class="compare-remove" hidden> 14282 <svg width="18" height="18" viewBox="0 0 24 24" fill="currentColor"> 14283 <path 14284 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" /> 14285 </svg> 14286 Hapus dari Perbandingan 14287 </span> 14288 </button> 14289 <div class="pd-compare-info"> 14290 <small class="compare-note" id="compare-note">Bandingkan hingga 5 produk dengan bantuan 14291 AI</small> 14292 </div> 14293 </div> 14294 14295 <div class="pd-short-desc"> 14296 <p><strong>Informasi SEMUAJP:</strong></p> 14297 <ul> 14298 <li>Minimal Deposit: Rp.5.000,-</li> 14299 <li>Jenis Permainan: Game Online</li> 14300 <li>Metode Pembayaran: Bank, QRIS, E-Wallet</li> 14301 <li>Mata Uang: IDR (Indonesian Rupiah)</li> 14302 <li>Jam Operasional: 24 Jam Nonstop</li> 14303 <li>Total Rating: 998.988.999</li> 14304 <li>Rating: âââââ</li> 14305 <li>Daftar Sekarang: <a href="https://finance.murdochfinance.com/">Klik 14306 Disini</a></li> 14307 </ul> 14308 </div> 14309 14310
14310<script> 14311 /* =============================== 14312 DATASET TOGEL (SIMULASI) 14313 ================================ */ 14314 const TOGEL_MARKETS = [ 14315 { market: "Singapore", code: "SGP", open: "17:45", zone: "WIB" }, 14316 { market: "Hongkong", code: "HK", open: "22:45", zone: "WIB" }, 14317 { market: "Sydney", code: "SDY", open: "13:45", zone: "WIB" }, 14318 { market: "Macau", code: "MC", open: "16:00", zone: "WIB" }, 14319 { market: "Cambodia", code: "KHM", open: "10:45", zone: "WIB" }, 14320 { market: "Japan", code: "JP", open: "11:30", zone: "WIB" } 14321 ]; 14322 14323 const SHIO = ["Tikus", "Kerbau", "Macan", "Kelinci", "Naga", "Ular", "Kuda", "Kambing", "Monyet", "Ayam", "Anjing", "Babi"]; 14324 14325 const $ = (q) => document.querySelector(q); 14326 const randInt = (min, max) => Math.floor(Math.random() * (max - min + 1)) + min; 14327 14328 function uniqueMarkets() { 14329 return TOGEL_MARKETS.map(m => m.market); 14330 } 14331 14332 function genDigits(len) { 14333 let s = ""; 14334 for (let i = 0; i < len; i++) s += String(randInt(0, 9)); 14335 return s; 14336 } 14337 14338 function genBBFS() { 14339 const pool = [...Array(10)].map((_, i) => i); 14340 const out = []; 14341 for (let i = 0; i < 7; i++) { 14342 const idx = randInt(0, pool.length - 1); 14343 out.push(pool.splice(idx, 1)[0]); 14344 } 14345 return out.join(""); 14346 } 14347 14348 function genIkut() { 14349 const pool = [...Array(10)].map((_, i) => i); 14350 const out = []; 14351 for (let i = 0; i < 4; i++) { 14352 const idx = randInt(0, pool.length - 1); 14353 out.push(pool.splice(idx, 1)[0]); 14354 } 14355 return out.join(" ⢠"); 14356 } 14357 14358 function simulateConfidence() { 14359 return randInt(60, 96); 14360 } 14361 14362 function applyFilters() { 14363 const m = $("#marketFilter").value; 14364 const minC = parseFloat($("#minConf").value || "0"); 14365 14366 return TOGEL_MARKETS 14367 .filter(x => (m === "ALL" || x.market === m)) 14368 .map(x => ({ ...x, conf: simulateConfidence() })) 14369 .filter(x => x.conf >= minC); 14370 } 14371 14372 function pickRandom(arr, n = 1) { 14373 const copy = [...arr]; 14374 const out = []; 14375 for (let i = 0; i < n && copy.length; i++) { 14376 const idx = randInt(0, copy.length - 1); 14377 out.push(copy.splice(idx, 1)[0]); 14378 } 14379 return out; 14380 } 14381 14382 function formatAngka(type) { 14383 if (type === "4D") return genDigits(4); 14384 if (type === "3D") return genDigits(3); 14385 return genDigits(2); 14386 } 14387 14388 function renderMain(item, type) { 14389 $("#rMarket").textContent = `${item.market} (${item.code}) ⢠Open ${item.open} ${item.zone}`; 14390 $("#rType").textContent = type; 14391 $("#rConf").textContent = `${item.conf}%`; 14392 14393 $("#rAngka").textContent = formatAngka(type); 14394 $("#rBBFS").textContent = genBBFS(); 14395 $("#rIkut").textContent = genIkut(); 14396 $("#rShio").textContent = SHIO[randInt(0, SHIO.length - 1)]; 14397 $("#rTip").textContent = "Tips: Ini simulasi hiburan. Tetap bijak & disiplin."; 14398 } 14399 14400 function renderAlts(list, type) { 14401 const wrap = $("#togelAltList"); 14402 wrap.innerHTML = ""; 14403 list.forEach(x => { 14404 const el = document.createElement("div"); 14405 el.className = "togel-alt-item"; 14406 el.innerHTML = ` 14407 <div class="g">${x.market} (${x.code})</div> 14408 <div class="p">Tipe ${type} ⢠Conf <strong>${x.conf}%</strong></div> 14409 <div class="r">Angka: <strong>${formatAngka(type)}</strong></div> 14410 `; 14411 wrap.appendChild(el); 14412 }); 14413 } 14414 14415 function spinButton(btn, on) { 14416 if (on) { 14417 btn.disabled = true; 14418 btn.dataset.text = btn.innerHTML; 14419 btn.innerHTML = `<span class="icon">ð</span> PROCESS...`; 14420 } else { 14421 btn.disabled = false;
14422 btn.innerHTML = btn.dataset.text || `<span class="icon">ð²</span> GENERATE`; 14423 } 14424 } 14425 14426 /* =============================== 14427 INIT 14428 ================================ */ 14429 (function init() { 14430 const sel = $("#marketFilter"); 14431 uniqueMarkets().forEach(m => { 14432 const o = document.createElement("option"); 14433 o.value = m; o.textContent = m; 14434 sel.appendChild(o); 14435 }); 14436 14437 $("#btnTogelRandom").addEventListener("click", (e) => { 14438 const btn = e.currentTarget; 14439 const type = $("#typeFilter").value; 14440 const filtered = applyFilters(); 14441 const st = $("#togelStatus"); 14442 14443 if (!filtered.length) { 14444 st.textContent = "â NO MATCH â"; 14445 st.style.color = "white"; 14446 renderAlts([], type); 14447 $("#rMarket").textContent = "-"; 14448 $("#rType").textContent = type; 14449 $("#rConf").textContent = "-"; 14450 $("#rAngka").textContent = "-"; 14451 $("#rBBFS").textContent = "-"; 14452 $("#rIkut").textContent = "-"; 14453 $("#rShio").textContent = "-"; 14454 return; 14455 } 14456 14457 spinButton(btn, true); 14458 st.textContent = "â GENERATING â"; 14459 st.style.animation = "pulse .6s linear infinite"; 14460 st.style.color = "white"; 14461 14462 const t0 = setInterval(() => { 14463 const temp = pickRandom(filtered, 1)[0]; 14464 $("#rMarket").textContent = `${temp.market} (${temp.code}) ⢠Open ${temp.open} ${temp.zone}`; 14465 $("#rType").textContent = type; 14466 $("#rConf").textContent = `${temp.conf}%`; 14467 $("#rAngka").textContent = formatAngka(type); 14468 $("#rBBFS").textContent = genBBFS(); 14469 $("#rIkut").textContent = genIkut(); 14470 $("#rShio").textContent = SHIO[randInt(0, SHIO.length - 1)]; 14471 }, 85); 14472 14473 setTimeout(() => { 14474 clearInterval(t0); 14475 14476 const picks = pickRandom(filtered, 4); 14477 renderMain(picks[0], type); 14478 renderAlts(picks.slice(1), type); 14479 14480 st.textContent = "â READY â"; 14481 st.style.animation = ""; 14482 st.style.color = "gold"; 14483 spinButton(btn, false); 14484 }, 1200); 14485 }); 14486 14487 renderAlts([], "4D"); 14488 })(); 14489 </script>
14489 14490 14491 14492 14493 <div class="pwp-deals-section" id="pwp-deals-section" hidden data-product-id="325" data-variant-id="0" 14494 data-category-path="Komputer & Laptop/Laptop/Gaming"> 14495 <div class="pwp-deals-header"><svg class="pwp-icon" width="20" height="20" viewBox="0 0 24 24" 14496 fill="currentColor"> 14497 <path 14498 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" /> 14499 </svg> 14500 <div class="pwp-text"> 14501 <h3 class="pwp-title">Penawaran Spesial PWP (Purchase with Purchase)</h3> 14502 <p class="pwp-subtitle">Beli produk ini dan dapatkan produk pilihan dengan harga spesial</p> 14503 </div> 14504 </div> 14505 <div class="pwp-deals-loading"> 14506 <div class="pwp-spinner"></div> 14507 <p>Memuat penawaran...</p> 14508 </div> 14509 <div class="pwp-deals-grid" id="pwp-deals-grid"></div> 14510 <p class="pwp-cart-note">ð¡ Produk PWP dapat ditambahkan di halaman keranjang setelah produk ini 14511 dimasukkan</p> 14512 </div> 14513 </section> 14514 14515 <aside class="pd-sidebar"> 14516 <div class="pd-side-card pd-buy-card"> 14517 <form class="pd-buy-form" id="pd-buy-form" data-pid="325"> 14518 <input type="hidden" name="variant_id" id="pd-variant-id" value="0"> 14519 <div> 14520 <label for="qty" class="qty-label">Qty</label> 14521 <input type="number" id="qty" name="qty" value="0" min="1" max="0" disabled> 14522 </div> 14523 <div class="pd-actions"> 14524 <button type="submit" class="btn-add-cart" id="btn-add-cart" disabled>+ Keranjang</button> 14525 <button type="button" class="btn-buy" id="btn-buy" data-id="278426" disabled>Beli</button> 14526 <button type="button" class="btn-chat-icon" id="btn-chat-icon" aria-label="Tanya Produk" 14527 title="Tanya Produk"><svg viewBox="0 0 640 640" fill="currentColor"> 14528 <path 14529 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" /> 14530 </svg></button> 14531 </div> 14532 </form> 14533 <div class="paylater-promo paylater-promo-md paylater-desktop-only"> 14534 <span class="paylater-icon">ð³</span> 14535 <span class="paylater-text"> 14536 <strong>Autorized Link Daftar</strong> 14537 <small>Link Login SEMUAJP</small> 14538 </span> 14539 </div> 14540 </div> 14541 14542 14543 <div class="pd-side-card qoala-banner-card"> 14544 <div class="qoala-banner"> 14545 <div class="qoala-banner-content"> 14546 <div class="qoala-icon"> 14547 <center><img src="https://project-cdn-semuajp.pages.dev/favicon.png" 14548 alt="SEMUAJP" class="qoala-shield-img"></center> 14549 </div> 14550 <div class="qoala-text"> 14551 <div class="qoala-title">Login SEMUAJP</div> 14552 <div class="qoala-subtitle">Verified</div> 14553 </div> 14554 </div> 14555 <a href="https://murdochfinance.com/" class="qoala-cta" 14556 data-ga-event="qoala_banner_click" data-product-id="325" data-product-name="SEMUAJP" 14557 data-category-path="Komputer & Laptop/Laptop/Gaming" target="_blank">Info</a> 14558 </div> 14559 <style> 14560 .qoala-banner-card { 14561 padding: 0; 14562 overflow: hidden 14563 } 14564 14565 .qoala-banner { 14566 background: radial-gradient(circle, rgba(0, 150, 136, 1) 0%, rgba(0, 0, 0, 0.63) 100%); 14567 padding: 12px 16px; 14568 display: flex; 14569 align-items: center; 14570 justify-content: space-between; 14571 color: white; 14572 text-decoration: none; 14573 min-height: 60px; 14574 } 14575 14576 .qoala-banner-content { 14577 display: flex; 14578 align-items: center; 14579 gap: 12px; 14580 } 14581 14582 .qoala-icon { 14583 display: flex; 14584 align-items: center; 14585 justify-content: center; 14586 } 14587 14588 .qoala-shield-img { 14589 width: 36px; 14590 height: 36px; 14591 object-fit: contain; 14592 opacity: 0.9; 14593 } 14594 14595 .qoala-title { 14596 font-weight: 600; 14597 font-size: 14px; 14598 line-height: 1.2; 14599 } 14600 14601 .qoala-subtitle { 14602 font-size: 12px; 14603 opacity: 0.9; 14604 line-height: 1.2; 14605 } 14606 14607 .qoala-cta { 14608 background: rgba(255, 255, 255, 0.15); 14609 color: white; 14610 padding: 6px 12px; 14611 border-radius: 6px; 14612 font-size: 12px; 14613 font-weight: 600; 14614 text-decoration: none; 14615 transition: background 0.2s ease; 14616 border: 1px solid rgba(0, 150, 136, 1); 14617 } 14618 14619 .qoala-cta:hover { 14620 background: rgba(255, 60, 60, 0.25); 14621 color: white; 14622 } 14623 14624 @media(max-width:768px) { 14625 .qoala-banner { 14626 padding: 10px 12px 14627 } 14628 14629 .qoala-title { 14630 font-size: 17px 14631 } 14632 14633 .qoala-subtitle { 14634 font-size: 11px 14635 } 14636 } 14637 </style> 14638 </div> 14639 <!-- MECHA BLUE FINAL BOSS REVIEW SLIDER --> 14640 <div class="tnt-review-mecha"> 14641 <div class="tnt-header"> 14642 <h2>SEMUAJP: Kita Kasih Link Daftar Terbaik Situs Online Slot Gacor Gampang jackpot</h2> 14643 <p>Review & Komentar Member Situs Resmi SEMUAJP</p> 14644 </div> 14645 <div class="tnt-slider" id="tntSlider"> 14646 <div class="tnt-slide active"> 14647 <div class="tnt-name">Andi</div> 14648 <div class="tnt-comment">Sejak bergabung melalui SEMUAJP, saya lebih mudah menemukan permainan slot gacor yang sedang ramai dimainkan. Beberapa kali mendapatkan kemenangan menarik dan pengalaman bermain terasa lebih seru.</div> 14649 </div> 14650 <div class="tnt-slide"> 14651 <div class="tnt-name">Uden</div> 14652 <div class="tnt-comment">Link daftar yang disediakan SEMUAJP sangat mudah diakses. Saya suka karena banyak rekomendasi permainan slot gacor gampang jackpot yang sedang populer setiap harinya</div> 14653 </div> 14654 <div class="tnt-slide"> 14655 <div class="tnt-name">Ujang</div> 14656 <div class="tnt-comment">Sudah cukup lama menggunakan SEMUAJP dan sejauh ini sangat puas. Banyak pilihan permainan populer yang sering menjadi favorit para pemain online.</div> 14657 </div> 14658 <div class="tnt-slide"> 14659 <div class="tnt-name">Imam</div> 14660 <div class="tnt-comment">Pelayanannya responsif dan aksesnya lancar. Tidak heran jika SEMUAJP menjadi pilihan banyak pemain yang mencari situs online slot gacor gampang jackpot.</div> 14661 </div> 14662 <div class="tnt-slide"> 14663 <div class="tnt-name">Fahmi</div> 14664 <div class="tnt-comment">Sebagai pemain yang sering mencoba berbagai permainan, saya merasa SEMUAJP membantu menemukan game yang sedang gacor dengan lebih mudah.</div> 14665 </div> 14666 <div class="tnt-slide"> 14667 <div class="tnt-name">Intan</div> 14668 <div class="tnt-comment">Sebagai pemain yang sering mencoba berbagai permainan, saya merasa SEMUAJP membantu menemukan game yang sedang gacor dengan lebih mudah."</div> 14669 </div> 14670 14671 14672 14673 </div> 14674 </div> 14675 </div> 14676 </div> 14677 14678 <style> 14679 .tnt-review-mecha { 14680 background: radial-gradient(circle, rgba(0, 150, 136, 1) 0%, rgba(0, 0, 0, 0.63) 100%); 14681 border: 2px solid #009688; 14682 border-radius: 14px; 14683 padding: 20px; 14684 color: #FFFFFF; 14685 font-family: 'Orbitron', sans-serif; 14686 position: relative; 14687 overflow: hidden; 14688 box-shadow: 0 0 25px #009688, inset 0 0 20px rgba(239, 191, 4, 0.2); 14689 } 14690 14691 /* scanline */ 14692 .tnt-review-mecha::before { 14693 content: ""; 14694 position: absolute; 14695 inset: 0; 14696 background: repeating-linear-gradient(to bottom, 14697 rgba(255, 0, 0, 0.08), 14698 rgba(255, 0, 0, 0.08) 1px, 14699 transparent 2px, 14700 transparent 4px); 14701 pointer-events: none; 14702 } 14703 14704 .tnt-header h2 { 14705 font-size: 18px; 14706 color: #000000; 14707 text-shadow: 0 0 10px #000000, 0 0 20px #000000; 14708 margin-bottom: 5px; 14709 } 14710 14711 .tnt-header p { 14712 font-size: 12px; 14713 opacity: 0.85; 14714 margin-bottom: 15px; 14715 } 14716 14717 .tnt-slider { 14718 position: relative; 14719 height: 90px; 14720 } 14721 14722 .tnt-slide { 14723 position: absolute; 14724 width: 100%; 14725 opacity: 0; 14726 transform: translateX(40px); 14727 transition: all .6s ease; 14728 } 14729 14730 .tnt-slide.active { 14731 opacity: 1; 14732 transform: translateX(0); 14733 } 14734 14735 .tnt-name { 14736 font-size: 14px; 14737 color: #000000; 14738 margin-bottom: 5px; 14739 text-shadow: 0 0 6px #000000; 14740 } 14741 14742 .tnt-comment {
14743 font-size: 13px; 14744 line-height: 1.5; 14745 } 14746 14747 /* glowing border animation */ 14748 @keyframes pulseGlow { 14749 0% { 14750 box-shadow: 0 0 10px #000000; 14751 } 14752 14753 50% { 14754 box-shadow: 0 0 25px #000000; 14755 } 14756 14757 100% { 14758 box-shadow: 0 0 10px #000000; 14759 } 14760 } 14761 14762 .tnt-review-mecha { 14763 animation: pulseGlow 2.5s infinite; 14764 } 14765 </style> 14766 14767
14767<script> 14768 let slides = document.querySelectorAll('.tnt-slide'); 14769 let index = 0; 14770 14771 setInterval(() => { 14772 slides[index].classList.remove('active'); 14773 index = (index + 1) % slides.length; 14774 slides[index].classList.add('active'); 14775 }, 3000); 14776 </script>
14776 14777 14778 <section class="pd-full-description cyber-mecha" id="deskripsi"> 14779 <h2 class="pd-full-desc-title"></h2> 14780 14781 <div class="pd-full-desc-body"> 14782 14783 14784 <div class="mecha-header"> 14785 <h1 class="pd-title" id="pd-title">SEMUAJP: Kita Kasih Link Daftar Terbaik Situs Online Slot Gacor Gampang jackpot</h1> 14786 14787 <div class="mecha-content"> 14788 <p>Raih kemenangan besar di <strong>SEMUAJP</strong>! hadir sebagai pilihan terbaik bagi para pecinta permainan online yang sedang mencari link daftar situs slot gacor dengan peluang gampang jackpot. Dengan akses yang cepat, proses registrasi yang praktis, serta informasi yang selalu diperbarui, SEMUAJP menjadi tempat favorit bagi banyak pemain yang ingin menikmati pengalaman bermain yang lebih nyaman setiap hari.</p> 14789 14790 <p>Keunggulan utama SEMUAJP terletak pada kemudahan akses yang diberikan kepada seluruh pengguna. Tim SEMUAJP selalu berupaya menyediakan link alternatif dan jalur pendaftaran yang stabil sehingga pemain dapat masuk kapan saja dengan lebih lancar. Hal ini menjadi nilai tambah bagi mereka yang ingin fokus menikmati permainan tanpa gangguan. 14791 </p> 14792 14793 <h2>Mengapa banyak pemain memilih SEMUAJP?</h2> 14794 <p>SEMUAJP dikenal karena menyediakan link daftar yang mudah diakses, proses registrasi cepat, serta informasi yang selalu diperbarui sehingga pemain dapat menikmati pengalaman bermain dengan lebih nyaman.</p> 14795 14796 <h3>1. Apakah proses daftar di SEMUAJP cepat?</h3> 14797 <p>Ya, proses pendaftaran dirancang sederhana dan praktis sehingga pemain baru dapat membuat akun dalam waktu singkat tanpa langkah yang rumit.</p> 14798 14799 <h3>2. Minimal Deposit Murah & Transaksi Cepat</h3> 14800 <p>Hanya dengan modal receh minimal deposit 5 ribu rupiah, Anda sudah bisa bertaruh di situs 14801 SEMUAJP. Proses deposit via bank, Dana, OVO, QRIS, dan Gopay diproses otomatis dalam 14802 hitungan menit.</p> 14803 14804 <h3>3. Bagaimana cara menemukan permainan slot gacor melalui SEMUAJP?</h3> 14805 <p>Pengguna dapat melihat berbagai rekomendasi permainan populer yang banyak diminati pemain dan dikenal memiliki fitur menarik serta pengalaman bermain yang seru.</p> 14806 14807 <h2>Provider Slot Gacor Paling Viral di SEMUAJP</h2> 14808 <p>Nikmati pilihan provider judi slot online gampang jackpot yang sedang populer di link 14809 alternatif SEMUAJP:</p> 14810 <ul> 14811 <li><strong>Pragmatic Play:</strong> Rajanya slot gacor gampang maxwin seperti Gates of 14812 Olympus dan Sweet Bonanza.</li> 14813 <li><strong>PG Soft:</strong> Game slot online dengan tampilan modern dan peluang menang 14814 jackpot besar harian.</li> 14815 <li><strong>Habanero:</strong> Terkenal memberikan fitur free spin melimpah dengan modal 14816 taruhan kecil.</li> 14817 <li><strong>Joker Gaming:</strong> Provider slot online terpercaya yang sangat ringan 14818 dimainkan lewat HP Android atau iOS.</li> 14819 </ul> 14820 14821 <h2>Cara Daftar & Login Resmi SEMUAJP</h2> 14822 <p>Proses bergabung dengan situs slot online gacor SEMUAJP sangatlah mudah:</p> 14823 <div class="white"> 14824 <ol> 14825 <li>Kunjungi link alternatif resmi <strong>SEMUAJP</strong>.</li> 14826 <li>Klik tombol daftar lalu isi data username dan rekening dengan benar.</li> 14827 <li>Setelah akun aktif, lakukan login resmi menggunakan username Anda.</li> 14828 <li>Lakukan deposit dan klaim bonus new member untuk mulai bermain slot online gacor. 14829 </li> 14830 </ol> 14831 </div> 14832 14833 <h2>Bonus dan Promo Terbesar Setiap Hari</h2> 14834 <p>
14834Bergabung bersama situs slot gacor SEMUAJP memberikan keuntungan melimpah melalui bonus 14835 new member, cashback harian, bonus rollingan, hingga komisi referral seumur hidup.</p> 14836 14837 <p>Jangan tunggu lagi, akses link login resmi <strong>SEMUAJP</strong> sekarang juga. 14838 Daftarkan diri Anda di situs slot online gacor gampang jackpot hari ini dan rasakan sensasi 14839 menang maxwin dengan aman dan tepercaya!</p> 14840 </div> 14841 14842 <p class="final-line"> 14843 <span class="glow-strong">FINAL STATUS:</span> 14844 Seluruh kemenangan di situs slot online <strong>SEMUAJP</strong> diproses <strong>CEPAT, AMAN 14845 & DIBAYAR LUNAS</strong> tanpa potongan! 14846 </p> 14847 </div> 14848 14849 </div> 14850 </div> 14851 </section> 14852 14853 <style> 14854 @import url('https://fonts.googleapis.com/css2?family=Orbitron:wght@400;600;800&display=swap'); 14855 14856 .cyber-mecha a { 14857 color: black; 14858 } 14859 14860 14861 .cyber-mecha { 14862 font-family: 'Orbitron', sans-serif; 14863 max-width: 900px; 14864 margin: 40px auto; 14865 padding: 25px; 14866 border-radius: 18px; 14867 14868 /* deep elegant red */ 14869 background: radial-gradient(circle at top, #3a0a0a, #0a0000 70%); 14870 14871 border: 1px solid rgba(255, 90, 90, 0.35); 14872 14873 box-shadow: 14874 0 0 22px rgba(140, 20, 20, 0.35), 14875 inset 0 0 20px rgba(255, 70, 70, 0.08); 14876 14877 position: relative; 14878 overflow: hidden; 14879 } 14880 14881 /* scanline effect */ 14882 .cyber-mecha::before { 14883 content: ""; 14884 position: absolute; 14885 inset: 0; 14886 background: repeating-linear-gradient(to bottom, 14887 rgba(255, 90, 90, 0.03), 14888 rgba(255, 90, 90, 0.03) 1px, 14889 transparent 1px, 14890 transparent 3px); 14891 pointer-events: none; 14892 } 14893 14894 .pd-full-desc-title { 14895 text-align: center; 14896 font-size: 22px; 14897 font-weight: 800; 14898 14899 /* elegant red (not neon) */ 14900 color: #d46a6a; 14901 14902 margin-bottom: 25px; 14903 text-shadow: 0 0 8px rgba(212, 106, 106, 0.5); 14904 letter-spacing: 1px; 14905 } 14906 14907 /* FAQ BOX */ 14908 .faq-item { 14909 margin-bottom: 15px; 14910 border-radius: 12px; 14911 14912 border: 1px solid rgba(255, 100, 100, 0.18); 14913 background: rgba(60, 10, 10, 0.35); 14914 backdrop-filter: blur(8px); 14915 14916 transition: all 0.3s ease; 14917 overflow: hidden; 14918 } 14919 14920 .faq-item:hover { 14921 border-color: rgba(255, 120, 120, 0.45); 14922 box-shadow: 0 0 14px rgba(120, 30, 30, 0.25); 14923 } 14924 14925 /* QUESTION */ 14926 .faq-question { 14927 padding: 14px 18px; 14928 cursor: pointer; 14929 font-size: 14px; 14930 color: #f2c6c6; 14931 position: relative; 14932 } 14933 14934 .faq-question::after { 14935 content: "ï¼"; 14936 position: absolute; 14937 right: 15px; 14938 color: #c97a7a; 14939 font-weight: bold; 14940 transition: 0.3s; 14941 } 14942 14943 /* ACTIVE */ 14944 .faq-item.active .faq-question::after { 14945 content: "â"; 14946 } 14947 14948 /* ANSWER */ 14949 .faq-answer { 14950 max-height: 0; 14951 overflow: hidden; 14952 padding: 0 18px; 14953 font-size: 13px; 14954 color: #f7e6e6; 14955 line-height: 1.6; 14956 transition: all 0.35s ease; 14957 } 14958 14959 .faq-item.active .faq-answer { 14960 max-height: 200px; 14961 padding: 10px 18px 18px; 14962 } 14963 14964 /* glow text (soft luxury, not neon) */ 14965 .glow { 14966 color: #d46a6a; 14967 text-shadow: 0 0 6px rgba(212, 106, 106, 0.4); 14968 } 14969 14970 .glow-strong { 14971 color: #000000; 14972 text-shadow: 0 0 10px rgba(212, 106, 106, 0.5); 14973 } 14974 </style> 14975 14976 <section class="pd-full-description cyber-mecha" id="deskripsi"> 14977 14978 <h2 class="pd-full-desc-title">FAQ</h2> 14979 14980 <div class="pd-full-desc-body"> 14981 14982 <div class="faq-item"> 14983 <div class="faq-item"> 14984 <div class="faq-question">Apa yang membuat SEMUAJP berbeda dari situs online lainnya?</div> 14985 <div class="faq-answer">SEMUAJP menghadirkan akses yang praktis, navigasi yang mudah digunakan, serta rek
14985omendasi permainan yang selalu mengikuti tren pemain online terkini.</div> 14986 </div> 14987 <div class="faq-item"> 14988 <div class="faq-question">Apakah SEMUAJP cocok untuk pemain baru?</div> 14989 <div class="faq-answer">Tentu. Tampilan yang sederhana dan proses registrasi yang mudah membuat SEMUAJP cocok digunakan baik oleh pemain baru maupun pemain yang sudah berpengalaman.</div> 14990 </div> 14991 <div class="faq-item"> 14992 <div class="faq-question">Bagaimana cara menemukan permainan slot gacor melalui SEMUAJP?</div> 14993 <div class="faq-answer">Pengguna dapat melihat berbagai rekomendasi permainan populer yang banyak diminati pemain dan dikenal memiliki fitur menarik serta pengalaman bermain yang seru.</div> 14994 </div> 14995 <div class="faq-item"> 14996 <div class="faq-question">Apa keunggulan utama SEMUAJP dibandingkan platform lain?</div> 14997 <div class="faq-answer">Keunggulan SEMUAJP terletak pada akses yang stabil, layanan responsif, rekomendasi permainan populer, serta kemudahan menemukan link daftar yang aktif setiap hari.</div> 14998 </div> 14999 <div class="faq-item"> 15000 <div class="faq-question">Berapa minimal deposit di situs judi online SEMUAJP?</div> 15001 <div class="faq-answer">Minimal deposit di SEMUAJP sangat murah mulai dari 5 ribu rupiah. 15002 Situs slot gacor terpercaya ini mendukung transaksi menggunakan bank lokal, Dana, OVO, QRIS, 15003 Gopay, LinkAja, dan berbagai metode pembayaran online lainnya.</div> 15004 </div> 15005 <div class="faq-item"> 15006 <div class="faq-question">Apakah SEMUAJP menyediakan layanan bantuan pengguna?</div> 15007 <div class="faq-answer">Ya, tersedia layanan bantuan yang siap memberikan panduan terkait pendaftaran, akses akun, maupun informasi umum yang dibutuhkan pengguna.</div> 15008 </div> 15009 <div class="faq-item"> 15010 <div class="faq-question">Apa tujuan SEMUAJP menyediakan link daftar terbaik?</div> 15011 <div class="faq-answer">Semua kemenangan main slot online gacor gampang jackpot di SEMUAJP 15012 dibayar penuh tanpa potongan. Withdraw diproses cepat menggunakan sistem transaksi otomatis 15013 selama 24 jam.</div> 15014 </div> 15015 <div class="faq-item"> 15016 <div class="faq-question">Kenapa SEMUAJP disebut situs slot gacor terpercaya?</div> 15017 <div class="faq-answer">Tujuannya adalah membantu pengguna mendapatkan akses yang lebih cepat, stabil, dan praktis menuju berbagai permainan online populer tanpa harus mencari dari banyak sumber berbeda.</div> 15018 </div> 15019 <div class="faq-item"> 15020 <div class="faq-question">Apa yang membuat SEMUAJP menjadi pilihan favorit banyak pemain?</div> 15021 <div class="faq-answer">Kombinasi antara akses mudah, proses daftar cepat, layanan responsif, rekomendasi slot gacor populer, dan pengalaman pengguna yang nyaman menjadikan SEMUAJP banyak dipilih oleh pemain online.</div> 15022 </div> 15023 <div class="faq-item"> 15024 <div class="faq-question">Apa keuntungan bermain di situs resmi SEMUAJP?</div> 15025 <div class="faq-answer">Keuntungan bermain di SEMUAJP adalah link resmi mudah akses, slot 15026 gacor RTP tinggi, bonus besar, minimal deposit murah, transaksi cepat, link alternatif 15027 stabil, dan keamanan akun terbaik gampang jackpot hari ini untuk seluruh member.</div> 15028 </div> 15029 </div> 15030 </section> 15031 15032
15032<script> 15033 document.querySelectorAll(".faq-question").forEach(q => { 15034 q.addEventListener("click", () => { 15035 const item = q.parentElement; 15036 item.classList.toggle("active"); 15037 }); 15038 }); 15039 </script>
15039 15040 <style> 15041 @import url('https://fonts.googleapis.com/css2?family=Orbitron:wght@500;700;900&display=swap'); 15042 15043 .cyber-mecha { 15044 max-width: 800px; 15045 margin: 40px auto; 15046 background: radial-gradient(circle, rgba(0, 150, 136, 1) 0%, rgba(0, 0, 0, 0.63) 100%); 15047 border-radius: 16px; 15048 border: 1px solid rgba(0, 150, 136, 1); 15049 box-shadow: 0 0 25px rgba(239, 191, 4, 0.35), inset 0 0 20px rgba(239, 191, 4, 0.10); 15050 padding: 25px; 15051 font-family: 'Orbitron', sans-serif; 15052 color: #f7e6e6; 15053 position: relative; 15054 overflow: hidden; 15055 } 15056 15057 /* scanline overlay */ 15058 .cyber-mecha::before { 15059 content: ""; 15060 position: absolute; 15061 inset: 0; 15062 background: repeating-linear-gradient(to bottom, 15063 rgba(255, 90, 90, 0.03), 15064 rgba(255, 90, 90, 0.03) 1px, 15065 transparent 1px, 15066 transparent 3px); 15067 pointer-events: none; 15068 } 15069 15070 .pd-full-desc-title { 15071 text-align: center; 15072 font-size: 22px; 15073 15074 /* elegant muted red */ 15075 color: #000000; 15076 15077 letter-spacing: 2px; 15078 text-shadow: 0 0 10px rgba(224, 139, 139, 0.4); 15079 margin-bottom: 20px; 15080 } 15081 15082 .mecha-header h3 { 15083 text-align: center; 15084 font-size: 18px; 15085 color: #000000; 15086 text-shadow: 0 0 8px rgba(255, 90, 90, 0.5); 15087 margin-bottom: 15px; 15088 } 15089 15090 .mecha-image img { 15091 width: 100%; 15092 border-radius: 10px; 15093 border: 1px solid rgba(255, 90, 90, 0.4); 15094 box-shadow: 0 0 20px rgba(255, 60, 60, 0.25); 15095 margin-bottom: 20px; 15096 } 15097 15098 .mecha-content h2, 15099 ul, 15100 li { 15101 color: black; 15102 } 15103 15104 .mecha-content p { 15105 font-size: 14px; 15106 line-height: 1.8; 15107 margin-bottom: 14px; 15108 color: black; 15109 } 15110 15111 .glow { 15112 color: #000000; 15113 text-shadow: 0 0 6px rgba(224, 139, 139, 0.5); 15114 font-weight: 600; 15115 } 15116 15117 .glow-strong { 15118 color: #ff6b6b; 15119 text-shadow: 15120 0 0 10px rgba(255, 90, 90, 0.6), 15121 0 0 20px rgba(255, 60, 60, 0.4); 15122 font-weight: 700; 15123 } 15124 15125 .final-line { 15126 margin-top: 18px; 15127 padding: 10px; 15128 border: 1px solid rgba(255, 90, 90, 0.35); 15129 background: rgba(60, 0, 0, 0.25); 15130 border-radius: 8px; 15131 text-align: center; 15132 color: #ffd0d0; 15133 } 15134 </style> 15135 15136 15137 15138 <section class="pd-related-full"> 15139 <h2 class="pd-related-title">Produk Terkait</h2> 15140 <div class="pd-related-grid pd-related-grid--full"> 15141 <a class="pd-related-card" href="https://murdochfinance.com/"> 15142 <div class="thumb"> 15143 <img src="https://finance.murdochfinance.com/brand.webp" alt="SEMUAJP"> 15144 <span class="mini-disc">-2%</span> 15145 </div> 15146 <div class="info"> 15147 <h3>SEMUAJP</h3> 15148 <div class="spec-chips">I5 <span class="spec-divider">|</span> 16GB <span 15149 class="spec-divider">|</span> 512GB <span class="spec-divider">|</span> RTX3050 15150 </div> 15151 <span class="price"> 15152 <span class="final">Rp 11.500.000</span> 15153 <span class="ori">Rp 12.799.000</span> 15154 </span> 15155 <span class="sold">Terjual 200+</span> <span class="stock-dot low" title="Stok Terbatas"></span> 15156 </div> 15157 </a> 15158 <a class="pd-related-card" href="https://murdochfinance.com/"> 15159 <div class="thumb"> 15160 <img src="https://finance.murdochfinance.com/brand.webp" alt="Slot Online">
15161 <span class="mini-disc">-1%</span> 15162 </div> 15163 <div class="info"> 15164 <h3>Slot Online</h3> 15165 <div class="spec-chips">I7 <span class="spec-divider">|</span> 16GB <span 15166 class="spec-divider">|</span> 512GB <span class="spec-divider">|</span> RTX5050 15167 </div> 15168 <span class="price"> 15169 <span class="final">Rp 22.887.000</span> 15170 <span class="ori">Rp 21.999.000</span> 15171 </span> 15172 <span class="sold">Terjual 20+</span> <span class="stock-dot out" title="Habis"></span> 15173 </div> 15174 </a> 15175 <a class="pd-related-card" href="https://murdochfinance.com/"> 15176 <div class="thumb"> 15177 <img src="https://finance.murdochfinance.com/brand.webp" alt="Slot Gacor"> 15178 <span class="mini-disc">-1%</span> 15179 </div> 15180 <div class="info"> 15181 <h3>Slot Gacor</h3> 15182 <div class="spec-chips">R7AI <span class="spec-divider">|</span> 16GB <span 15183 class="spec-divider">|</span> 1TB <span class="spec-divider">|</span> RTX5060 15184 </div> 15185 <span class="price"> 15186 <span class="final">Rp 23.600.000</span> 15187 <span class="ori">Rp 21.399.000</span> 15188 </span> 15189 <span class="sold">Terjual 6</span> <span class="stock-dot ready" title="Ready"></span> 15190 </div> 15191 </a> 15192 <a class="pd-related-card" href="https://murdochfinance.com/"> 15193 <div class="thumb"> 15194 <img src="https://finance.murdochfinance.com/brand.webp" alt="Slot Jackpot"> 15195 <span class="mini-disc">-1%</span> 15196 </div> 15197 <div class="info"> 15198 <h3>Slot Jackpot</h3> 15199 <div class="spec-chips">R5AI <span class="spec-divider">|</span> 16GB <span 15200 class="spec-divider">|</span> 1TB <span class="spec-divider">|</span> RTX5060 15201 </div> 15202 <span class="price"> 15203 <span class="final">Rp 18.800.000</span> 15204 <span class="ori">Rp 19.799.000</span> 15205 </span> 15206 <span class="sold">Terjual 5</span> <span class="stock-dot ready" title="Ready"></span> 15207 </div> 15208 </a> 15209 <a class="pd-related-card" href="https://murdochfinance.com/"> 15210 <div class="thumb"> 15211 <img src="https://finance.murdochfinance.com/brand.webp" alt="Slot Hari Ini"> 15212 <span class="mini-disc">-1%</span> 15213 </div> 15214 <div class="info"> 15215 <h3>Slot Hari Ini</h3> 15216 <div class="spec-chips">I7 <span class="spec-divider">|</span> 16GB <span 15217 class="spec-divider">|</span> 512GB <span class="spec-divider">|</span> RTX5050 15218 </div> 15219 <span class="price"> 15220 <span class="final">Rp 28.600.080</span> 15221 <span class="ori">Rp 27.999.000</span> 15222 </span> 15223 <span class="sold">Terjual 6</span> <span class="stock-dot low" title="Stok Terbatas"></span> 15224 </div> 15225 </a> 15226 <a class="pd-related-card" href="https://murdochfinance.com/"> 15227 <div class="thumb"> 15228 <img src="https://finance.murdochfinance.com/brand.webp" alt="SEMUAJP Login"> 15229 <span class="mini-disc">-1%</span> 15230 </div> 15231 <div class="info"> 15232 <h3>SEMUAJP Login</h3> 15233 <div class="spec-chips">CORE5 <span class="spec-divider">|</span> 16GB <span 15234 class="spec-divider">|</span> 512GB <span class="spec-divider">|</span> RTX4050 15235 </div>
15236 <span class="price"> 15237 <span class="final">Rp 17.888.000</span> 15238 <span class="ori">Rp 18.499.000</span> 15239 </span> 15240 <span class="stock-dot low" title="Stok Terbatas"></span> 15241 </div> 15242 </a> 15243 15244 </div> 15245 </section> 15246 15247 <div class="pd-mobile-fab" id="pd-mobile-fab" data-pid="325" data-price="20789000" data-voucher-code="" 15248 data-voucher-value="0"> 15249 <div class="mf-actions"><button type="button" class="mf-btn mf-share" id="mf-share" 15250 aria-label="Bagikan"><svg viewBox="0 0 24 24" width="18" height="18" aria-hidden="true"> 15251 <path fill="currentColor" 15252 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" /> 15253 </svg></button><button type="button" class="mf-btn mf-chat" id="mf-chat" 15254 aria-label="Tanya Produk"><svg viewBox="0 0 640 640" fill="currentColor"> 15255 <path 15256 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" /> 15257 </svg></button><button type="button" class="mf-btn mf-cart" id="mf-cart" disabled 15258 aria-label="Tambah ke keranjang"><svg viewBox="0 0 24 24" width="18" height="18" aria-hidden="true"> 15259 <path fill="currentColor" 15260 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" /> 15261 </svg></button><button type="button" class="mf-btn mf-buy" id="mf-buy" disabled><span 15262 class="mf-buy-text">Beli Sekarang</span><span class="mf-buy-price">Rp 15263 20.789.000</span></button> 15264 </div> 15265 </div> 15266 15267 <button type="button" class="pd-scroll-top" id="pd-scroll-top" aria-label="Kembali ke atas" 15268 title="Kembali ke atas"> 15269 <svg viewBox="0 0 24 24" width="20" height="20" aria-hidden="true"> 15270 <path fill="currentColor" d="M7.41 14.59 12 10l4.59 4.59L18 13.17l-6-6-6 6z" /> 15271 </svg> 15272 </button> 15273 </main> 15274 15275 <div class="pd-share-modal-overlay" id="pd-share-modal-overlay"> 15276 <div class="pd-share-modal"> 15277 <div class="pd-share-header"> 15278 <h2 class="pd-share-title">Bagikan Produk</h2><button type="button" class="pd-share-close" 15279 id="pd-share-close" aria-label="Tutup"><svg width="20" height="20" viewBox="0 0 24 24"> 15280 <path fill="currentColor" 15281 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" /> 15282 </svg></button> 15283 </div> 15284 <div class="pd-share-body"> 15285 <div class="pd-share-preview"><img src="https://finance.murdochfinance.com/brand.webp" 15286 alt="SEMUAJP Resmi" class="pd-share-preview-img"> 15287 <div class="pd-share-preview-info"> 15288 <h3 class="pd-share-preview-name">SEMUAJP Resmi</h3> 15289 <p class="pd-share-preview-price">Rp 20.789.000</p> 15290 </div> 15291 </div> 15292 <p class="pd-share-label">Bagikan ke</p> 15293 <div class="pd-share-grid"><a href="#" class="pd-share-option" data-share="whatsapp" target="_blank" 15294 rel="noopener"><span class="pd-share-icon pd-share-icon-whatsapp"><svg viewBox="0 0 24 24">
15295 <path fill="currentColor" 15296 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" /> 15297 </svg></span><span class="pd-share-name">WhatsApp</span></a><a href="#" 15298 class="pd-share-option" data-share="facebook" target="_blank" rel="noopener"><span 15299 class="pd-share-icon pd-share-icon-facebook"><svg viewBox="0 0 24 24"> 15300 <path fill="currentColor" 15301 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" /> 15302 </svg></span><span class="pd-share-name">Facebook</span></a><a href="#" 15303 class="pd-share-option" data-share="twitter" target="_blank" rel="noopener"><span 15304 class="pd-share-icon pd-share-icon-twitter"><svg viewBox="0 0 24 24"> 15305 <path fill="currentColor" 15306 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" /> 15307 </svg></span><span class="pd-share-name">Twitter</span></a><a href="#" 15308 class="pd-share-option" data-share="telegram" target="_blank" rel="noopener"><span 15309 class="pd-share-icon pd-share-icon-telegram"><svg viewBox="0 0 24 24"> 15310 <path fill="currentColor" 15311 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" /> 15312 </svg></span><span class="pd-share-name">Telegram</span></a><a href="#" 15313 class="pd-share-option" data-share="email"><span class="pd-share-icon pd-share-icon-email"><svg
15314 viewBox="0 0 24 24"> 15315 <path fill="currentColor" 15316 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" /> 15317 </svg></span><span class="pd-share-name">Email</span></a><button type="button" 15318 class="pd-share-option" data-share="copy"><span class="pd-share-icon pd-share-icon-copy"><svg 15319 viewBox="0 0 24 24"> 15320 <path fill="currentColor" 15321 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" /> 15322 </svg></span><span class="pd-share-name">Salin Link</span></button><button type="button" 15323 class="pd-share-option" data-share="pdf"><span class="pd-share-icon pd-share-icon-pdf"><svg 15324 viewB
15324ox="0 0 24 24"> 15325 <path fill="currentColor" 15326 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" /> 15327 </svg></span><span class="pd-share-name">Export PDF</span></button></div> 15328 <div class="pd-share-copy-section"> 15329 <div class="pd-share-copy-input-wrap"><input type="text" class="pd-share-copy-input" 15330 id="pd-share-url-input" value="https://murdochfinance.com/" readonly><button 15331 type="button" class="pd-share-copy-btn" id="pd-share-copy-url-btn"><svg viewBox="0 0 24 24" 15332 width="16" height="16"> 15333 <path fill="currentColor" 15334 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" /> 15335 </svg><span class="pd-share-copy-text">Salin</span></button></div> 15336 </div> 15337 </div> 15338 </div> 15339 </div> 15340 15341 <style> 15342 .toast-root { 15343 position: fixed; 15344 left: 50%; 15345 bottom: 18px; 15346 transform: translateX(-50%); 15347 display: flex; 15348 flex-direction: column; 15349 gap: 10px; 15350 z-index: 99999; 15351 pointer-events: none; 15352 max-width: min(92vw, 540px) 15353 } 15354 15355 .toast { 15356 display: grid; 15357 grid-template-columns: 28px 1fr auto; 15358 gap: 12px; 15359 background: #0b1220; 15360 color: #eef3ff; 15361 border: 1px solid rgba(255, 255, 255, .08); 15362 padding: 12px 14px; 15363 border-radius: 12px; 15364 box-shadow: 0 10px 30px rgba(10, 10, 20, .35); 15365 pointer-events: auto; 15366 overflow: hidden 15367 } 15368 15369 .toast .ico { 15370 align-self: start; 15371 margin-top: 2px 15372 } 15373 15374 .toast .ttl { 15375 font-weight: 700; 15376 line-height: 1.25; 15377 font-size: 14px; 15378 margin-bottom: 4px 15379 } 15380 15381 .toast .msg { 15382 opacity: .95; 15383 line-height: 1.45; 15384 font-size: 13px 15385 } 15386 15387 .toast .actions { 15388 display: flex; 15389 gap: 8px; 15390 align-self: center 15391 } 15392 15393 .toast .btn { 15394 background: #0ea5e9; 15395 color: #fff; 15396 border: 0; 15397 border-radius: 999px; 15398 padding: 8px 12px; 15399 font-size: 12px; 15400 font-weight: 700; 15401 cursor: pointer 15402 } 15403 15404 .toast .btn.alt { 15405 background: transparent; 15406 color: #8fb5ff; 15407 border: 1px solid rgba(143, 181, 255, .35) 15408 } 15409 15410 .toast .close { 15411 background: transparent; 15412 border: 0; 15413 color: #98a2b3; 15414 cursor: pointer; 15415 padding: 4px; 15416 margin-left: 6px 15417 } 15418 15419 .toast.success { 15420 border-left: 4px solid #22c55e 15421 } 15422 15423 .toast.info { 15424 border-left: 4px solid #0ea5e9 15425 } 15426 15427 .toast.warn { 15428 border-left: 4px solid #f59e0b 15429 } 15430 15431 .toast .progress { 15432 position: absolute; 15433 left: 0; 15434 bottom: 0; 15435 height: 3px; 15436 background: linear-gradient(90deg, #60a5fa, #22c55e); 15437 width: 100%; 15438 transform-origin: left; 15439 animation: toastBar linear forwards 15440 } 15441 15442 @keyframes toastBar { 15443 from { 15444 transform: scaleX(1) 15445 } 15446 15447 to { 15448 transform: scaleX(0) 15449 } 15450 } 15451 15452 @media(max-width:640px) { 15453 .toast { 15454 grid-template-columns: 24px 1fr auto; 15455 padding: 12px 15456 } 15457 15458 .toast .btn { 15459 padding: 7px 10px 15460 } 15461 } 15462 </style> 15463 <style> 15464 .toast .msg { 15465 word-break: break-word;
15466 overflow-wrap: anywhere; 15467 } 15468 15469 .toast-root { 15470 bottom: max(12px, env(safe-area-inset-bottom, 12px)); 15471 } 15472 15473 @media (max-width: 540px) { 15474 .toast-root { 15475 left: 0; 15476 right: 0; 15477 transform: none; 15478 padding: 0 12px; 15479 bottom: calc(max(12px, env(safe-area-inset-bottom, 12px)) + var(--fab-offset, 72px)); 15480 max-width: none; 15481 } 15482 15483 .toast { 15484 grid-template-columns: 1fr; 15485 /* 1 kolom */ 15486 position: relative; 15487 padding: 14px 14px 12px 14px; 15488 border-radius: 16px; 15489 } 15490 15491 .toast .ico { 15492 position: absolute; 15493 left: 14px; 15494 top: 14px; 15495 margin: 0; 15496 transform: translateY(1px); 15497 } 15498 15499 .toast .cnt { 15500 padding-left: 34px; 15501 } 15502 15503 .toast .ttl { 15504 font-size: 15px; 15505 margin-bottom: 6px; 15506 } 15507 15508 .toast .msg { 15509 font-size: 13px; 15510 opacity: .96; 15511 } 15512 15513 .toast .actions { 15514 margin-top: 12px; 15515 gap: 10px; 15516 width: 100%; 15517 display: grid; 15518 grid-template-columns: 1fr 1fr; 15519 } 15520 15521 .toast .btn { 15522 width: 100%; 15523 min-width: 0; 15524 padding: 10px 0; 15525 } 15526 15527 .toast .close { 15528 position: absolute; 15529 right: 6px; 15530 top: 6px; 15531 } 15532 } 15533 </style> 15534 15535
15535<script nonce="se3iyzEHMc9FQEB4wSyd0w=="> 15536 (function adjustToastFabOffset() { 15537 const root = document.getElementById('toastRoot'); 15538 if (!root) return; 15539 15540 function isVisible(el) { 15541 if (!el) return false; 15542 const cs = getComputedStyle(el); 15543 if (cs.display === 'none' || cs.visibility === 'hidden' || cs.opacity === '0') return false; 15544 const r = el.getBoundingClientRect(); 15545 return r.width > 0 && r.height > 0; 15546 } 15547 15548 function update() { 15549 const fab = document.getElementById('pd-mobile-fab'); 15550 let extra = 16; 15551 if (isVisible(fab)) { 15552 const h = Math.round(fab.getBoundingClientRect().height) || 56; 15553 extra = h + 16; // FAB height + margin 15554 } 15555 root.style.setProperty('--fab-offset', extra + 'px'); 15556 } 15557 15558 window.addEventListener('resize', update, { passive: true }); 15559 const fab = document.getElementById('pd-mobile-fab'); 15560 if (window.ResizeObserver && fab) { 15561 const ro = new ResizeObserver(update); 15562 ro.observe(fab); 15563 } 15564 15565 update(); 15566 })(); 15567 </script>
15567 15568 <div class="toast-root" id="toastRoot" aria-live="polite" aria-atomic="true"></div> 15569 15570
15570<script nonce="se3iyzEHMc9FQEB4wSyd0w==">(function () { 15571 const root = document.getElementById('toastRoot'); function svgIcon(kind) { if (kind === 'success') return '<svg width="24" height="24" viewBox="0 0 24 24" fill="#22c55e"><path d="M9 16.2l-3.5-3.5 1.4-1.4L9 13.4l7.7-7.7 1.4 1.4z"/></svg>'; if (kind === 'warn') return '<svg width="24" height="24" viewBox="0 0 24 24" fill="#f59e0b"><path d="M1 21h22L12 2 1 21zm12-3h-2v-2h2v2zm0-4h-2v-4h2v4z"/></svg>'; return '<svg width="24" height="24" viewBox="0 0 24 24" fill="#0ea5e9"><path d="M11 7h2v2h-2zm0 4h2v6h-2z"/><path d="M12 2C6.5 2 2 6.5 2 12s4.5 10 10 10 10-4.5 10-10S17.5 2 12 2z" fill="none" stroke="#0ea5e9"/></svg>' } 15572 window.showToast = function (opts) { 15573 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>`; 15574 15575 const close = () => { 15576 if (!el.parentNode) return; 15577 el.style.transition = 'transform .2s ease, opacity .2s ease'; 15578 el.style.opacity = '0'; el.style.transform = 'translateY(10px)'; 15579 setTimeout(() => { if (el.parentNode) el.parentNode.removeChild(el); }, 220); 15580 }; 15581 15582 el.querySelector('.close').addEventListener('click', close); 15583 el.querySelectorAll('.actions .btn').forEach(btn => { 15584 btn.addEventListener('click', () => { 15585 const lab = btn.getAttribute('data-act'); 15586 try { 15587 (o.actions || []).forEach(a => { if (a.label === lab && typeof a.onClick === 'function') a.onClick(); }); 15588 } catch (_) { } 15589 close(); 15590 }); 15591 }); 15592 15593 root.appendChild(el); 15594 setTimeout(close, o.duration); 15595 return el; 15596 }; 15597 })(); 15598 15599 const _0x1a2b = [{ "url": "https://finance.murdochfinance.com/brand.webp", "alt": "Lenovo Legion Go 8ASP2 - 83N0000RID /AMD Ryzen Z2 Extreme/32GB/1TB SSD/AMD Radeon Graphics/8.8\" WUXGA OLED Touch/Win 11 Home/Eclipse Black/3Y", "slug": "" }, { "url": "https://finance.murdochfinance.com/brand.webp", "alt": "Lenovo Lenovo Legion Go 8ASP2 - 83N0000RID /AMD Ryzen Z2 Extreme/32GB/1TB SSD/AMD Radeon Graphics/8.8\" WUXGA OLED Touch/Wi...", "slug": "https://finance.murdochfinance.com/brand.webp" }, { "url": "https://finance.murdochfinance.com/brand.webp", "alt": "Lenovo Lenovo Legion Go 8ASP2 - 83N0000RID /AMD Ryzen Z2 Extreme/32GB/1TB SSD/AMD Radeon Graphics/8.8\" WUXGA OLED Touch/Wi...", "slug": "lenovo-legion-go-8asp2-83n0000rid-ryzen-z2-extreme-amd-radeon-graphics-eclipse-b-1761796941-223.webp" }, { "url": "https://finance.murdochfinance.com/brand.webp", "alt": "Lenovo Lenovo Legion Go 8ASP2 - 83N0000RID /AMD Ryzen Z2 Extreme/32GB/1TB SSD/AMD Radeon Graphics/8.8\" WUXGA OLED Touch/Wi...", "slug": "lenovo-legion-go-8asp2-83n0000rid-ryzen-z2-extreme-amd-radeon-graphics-eclipse-b-1761796941-776.webp" }, { "url": "https://finance.murdochfinance.com/brand.webp", "alt": "Lenovo Lenovo Legion Go 8ASP2 - 83N0000RID /AMD Ryzen Z2 Extreme/32GB/1TB SSD/AMD Radeon Graphics/8.8\" WUXGA OLED Touch/Wi...", "slug": "lenovo-legion-go-8as
15599p2-83n0000rid-ryzen-z2-extreme-amd-radeon-graphics-eclipse-b-1761796941-634.webp" }, { "url": "https://finance.murdochfinance.com/brand.webp", "alt": "Lenovo Lenovo Legion Go 8ASP2 - 83N0000RID /AMD Ryzen Z2 Extreme/32GB/1TB SSD/AMD Radeon Graphics/8.8\" WUXGA OLED Touch/Wi...", "slug": "lenovo-legion-go-8asp2-83n0000rid-ryzen-z2-extreme-amd-radeon-graphics-eclipse-b-1761796941-892.webp" }], _0x3c4d = "Lenovo Legion Go 8ASP2 - 83N0000RID /AMD Ryzen Z2 Extreme/32GB/1TB SSD/AMD Radeon Graphics/8.8\" WUXGA OLED Touch/Win 11 Home/Eclipse Black/3Y", _0x5e6f = "1S83N0880RID"; function getVariantSummaryText() { const a = document.getElementById('pd-variant-summary'); if (!a) return ''; const b = Array.from(a.querySelectorAll('.vs-item strong')).map(c => c.textContent.trim()).filter(Boolean); return b.length ? b.join(' / ') : '' } 15600 function encodeVariantHash(id) { if (!id || id <= 0) return ''; const xor = id ^ 0x4A5D; return xor.toString(36) } 15601 function decodeVariantHash(hash) { if (!hash) return 0; const xor = parseInt(hash, 36); return isNaN(xor) ? 0 : xor ^ 0x4A5D } 15602 15603 function showSuccessToast(productId, qty, variantId) { const variantText = getVariantSummaryText(); const skuText = (function () { const el = document.getElementById('pd-sku'); return el ? el.textContent.trim() : PD_SKU })(); showToast({ type: 'warn', title: 'Fitur Segera Hadir', message: `<strong>${escapeHtml(PD_NAME)}</strong>${variantText ? ` · <em>${escapeHtml(variantText)}</em>` : ''}<br>SKU: ${escapeHtml(skuText)} · Qty: ${qty}`, duration: 5000, actions: [{ label: 'Lihat Keranjang', onClick: () => { } }, { label: 'Lanjut Belanja', variant: 'alt', onClick: () => { } }] }); try { if (window.ga4Ecomm) { const qtySend = qty || 1; window.ga4Ecomm.addToCart({ currency: 'IDR', price: 20789000, quantity: qtySend, item_id: "1S83N0880RID", item_name: "Lenovo Legion Go 8ASP2 - 83N0000RID /AMD Ryzen Z2 Extreme/32GB/1TB SSD/AMD Radeon Graphics/8.8\" WUXGA OLED Touch/Win 11 Home/Eclipse Black/3Y", item_brand: "Lenovo ", item_category: (["Komputer & Laptop", "Laptop", "Gaming"] || []).join(' / ') }) } } catch (_) { } return false } function showErrorToast() { showToast({ type: 'error', title: 'Gagal Menambah ke Keranjang', message: 'Terjadi kesalahan saat memproses permintaan. Silakan coba lagi.', duration: 5000 }) } 15604 15605 function executeBuyNowLegacy(id, variantId) { 15606 const a = getVariantSummaryText(), b = (function () { const c = document.getElementById('pd-sku'); return c ? c.textContent.trim() : _0x5e6f })(); 15607 15608 let willRedirect = false; 15609 try { 15610 if (window.addToCart) { 15611 window.addToCart(id, 1, variantId); 15612 willRedirect = false; 15613 } 15614 } catch (_) { } 15615 15616 if (willRedirect) { 15617 showToast({ 15618 type: 'info', 15619 title: 'Menuju Keranjang', 15620 message: `<strong>${escapeHtml(PD_NAME)}</strong>${variantText ? ` · <em>${escapeHtml(variantText)}</em>` : ''}<br>SKU: ${escapeHtml(skuText)} · Qty: 1`, 15621 duration: 1800 15622 }); 15623 setTimeout(() => { window.location.href = '/keranjang'; }, 1200); 15624 } else { 15625 showToast({ 15626 type: 'warn', 15627 title: 'Fitur Beli Langsung Segera Hadir', 15628 message: `Sementara ini Anda bisa menambahkan produk ke keranjang terlebih dahulu.<br><strong>${escapeHtml(PD_NAME)}</strong>${variantText ? ` · <em>${escapeHtml(variantText)}</em>` : ''}`, 15629 duration: 6000, 15630 actions: [ 15631 { label: '+ Keranjang', onClick: () => { try { if (window.addToCart) window.addToCart(id, 1, variantId); } catch (_) { } } }, 15632 { label: 'Hubungi CS', variant: 'alt', onClick: () => { window.open('https://wa.me/6281380009898', '_blank'); } } 15633 ] 15634 }); 15635 } 15636 } 15637 15638 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) }) } }); 15639 15640 function _0x2m3n(s) { return String(s || '').replace(/[&<>"']/g, m => ({ '&': '&', '<': '<', '>': '>', '"': '"', "'": ''' }[m])) } 15641 15642 (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') } }) })(); 15643 15644 (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;
15644 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 }) })(); 15645 15646 /* ================= Simulasi Cicilan ================= */ 15647 (function initInstallmentList() { 15648 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' } 15649 15650 function _0x4o5p(bank) { const a = getBasePrice(); listEl.innerHTML = '';
15650 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' } 15651 15652 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) }); 15653 15654 window.instSetBasePrice = function (newPrice) { setBasePrice(newPrice); _0x4o5p(activeBank()) }; _0x4o5p(activeBank()); 15655 })(); 15656 15657 /* ====== Fokus gambar varian ====== */ 15658 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 '' } } } 15659 function _0xau1v(url, altOpt) { 15660 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 } } 15661 if (c) { 15662 const targetName = _0x8s9t(url); 15663 const slideImg = Array.from(c.querySelectorAll('img')).find(im => _0x8s9t(im.src) === targetName); 15664 if (slideImg) { 15665 15666 try { 15667 const container = c; 15668 const imgRect = slideImg.getBoundingClientRect(); 15669 const contRect = container.getBoundingClientRect(); 15670 const offsetLeft = slideImg.offsetLeft - container.offsetLeft; 15671 const center = offsetLeft - (container.clientWidth - slideImg.clientWidth) / 2; 15672 container.scrollTo({ left: Math.max(0, center), behavior: 'smooth' }); 15673 } catch (_) { 15674 15675 slideImg.scrollIntoView({ behavior: 'smooth', inline: 'center', block: 'nearest' }); 15676 } 15677 } 15678 } 15679 } 15680 function findImageForVariant(variant) { 15681 if (!variant || !variant.attrs) return null; 15682 const tokens = []; 15683 try { 15684 Object.values(variant.attrs).forEach(v => { 15685 if (!v) return; 15686 const raw = String(v); 15687 tokens.push(raw); 15688 tokens.push(normalize(raw)); 15689 }); 15690 } catch (_) { } 15691 if (variant.sku) { 15692 tokens.push(String(variant.sku)); 15693 tokens.push(normalize(String(variant.sku))); 15694 } 15695 if (variant.image_url) { 15696 tokens.push(String(variant.image_url)); 15697 } 15698 let best = null; 15699 let bestScore = -1; 15700 15701 for (const g of (galleryData || [])) { 15702 const slugN = normalize(g.slug || ''); 15703 const altN = normalize(g.alt || ''); 15704 const file = _0x8s9t(g.url || ''); 15705 const fileN = normalize(file); 15706 const imgU = g.url; 15707 15708 for (const t of tokens) { 15709 const tN = normalize(t); 15710 if (!tN) continue; 15711 15712 let score = -1; 15713 if (imgU === tN) score = 300; 15714 if (slugN && slugN === tN) score = 300; 15715 else if (fileN && fileN.includes(tN)) score = 200; 15716 else if (altN && altN.includes(tN)) score = 120; 15717 15718 if (score > bestScore) { 15719 bestScore = score; 15720 best = g; 15721 } 15722 if (bestScore >= 300) break; 15723 } 15724 if (bestScore >= 300) break; 15725 } 15726 return bestScore >= 120 ? best : null; 15727 } 15728 function _0xey3z(variant) { const a = _0xcw2x(variant); if (a && a.url) { _0xau1v(a.url, a.alt || '') } } 15729 15730 /* ====== Layout mobile ====== */ 15731 (function _0xg04h() { 15732 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
15732ompareSection = document.querySelector('.pd-compare-section'); if (!a || !b || !c || !d || !e) return; 15733 15734 let pricePlaced = false; 15735 let varPlaced = false; 15736 let titlePlaced = false; 15737 let promoPlaced = false; 15738 const mq = window.matchMedia('(max-width: 640px)'); 15739 15740 function apply() { 15741 if (mq.matches) { 15742 if (!titlePlaced && a && titleRow && d.contains(titleRow)) { try { a.appendChild(titleRow); titlePlaced = true; } catch (_) { } } 15743 if (!pricePlaced && a && b) { try { a.appendChild(b); pricePlaced = true; } catch (_) { } } 15744 if (!varPlaced && f && d && e) { 15745 try { 15746 f.hidden = false; 15747 if (i && !f.contains(i)) f.appendChild(i); 15748 if (g && !f.contains(g)) f.appendChild(g); 15749 if (d.contains(e)) d.insertBefore(f, e); 15750 varPlaced = true; 15751 } catch (_) { } 15752 } 15753 if (!promoPlaced && promoBanner && compareSection && compareSection.parentNode) { 15754 try { 15755 compareSection.parentNode.insertBefore(promoBanner, compareSection); 15756 promoPlaced = true; 15757 } catch (_) { } 15758 } 15759 } else { 15760 if (titlePlaced && titleRow && d) { 15761 try { 15762 const vcombined = document.getElementById('pd-variant-combined'); 15763 if (vcombined && d.contains(vcombined)) { 15764 d.insertBefore(titleRow, vcombined); 15765 } else { 15766 d.insertBefore(titleRow, d.firstChild); 15767 } 15768 titlePlaced = false; 15769 } catch (_) { } 15770 } 15771 if (pricePlaced && b && c && c.parentNode) { 15772 try { c.parentNode.insertBefore(b, c.nextSibling); pricePlaced = false; } catch (_) { } 15773 } 15774 if (varPlaced) { 15775 try { 15776 if (i && j && j.parentNode && !j.parentNode.contains(i)) j.parentNode.insertBefore(i, j.nextSibling); 15777 if (g && h && h.parentNode && !h.parentNode.contains(g)) h.parentNode.insertBefore(g, h.nextSibling); 15778 if (f) { f.hidden = true; f.innerHTML = ''; } 15779 varPlaced = false; 15780 } catch (_) { } 15781 } 15782 if (promoPlaced && promoBanner && b) { 15783 try { 15784 b.appendChild(promoBanner); 15785 promoPlaced = false; 15786 } catch (_) { } 15787 } 15788 } 15789 } 15790 15791 mq.addEventListener ? mq.addEventListener('change', apply) : mq.addListener(apply); 15792 apply(); 15793 15794 const fab = document.getElementById('pd-mobile-fab'); 15795 if (fab) { 15796 const pid = parseInt(fab.getAttribute('data-pid') || '0', 10) || 325; 15797 const btnCart = document.getElementById('mf-cart'); 15798 15799 if (btnCart) btnCart.addEventListener('click', function () { 15800 const varInput = document.getElementById('pd-variant-id'); 15801 const variantId = varInput ? parseInt(varInput.value || '0', 10) : 0; 15802 try { if (window.addToCart) addToCart(pid, 1, variantId); } catch (_) { } 15803 const variantText = getVariantSummaryText(); 15804 const skuText = (function () { const el = document.getElementById('pd-sku'); return el ? el.textContent.trim() : PD_SKU; })(); 15805 showToast({ 15806 type: 'success', 15807 title: 'Berhasil ditambahkan ke Keranjang', 15808 message: `<strong>${escapeHtml(PD_NAME)}</strong>${variantText ? ` · <em>${escapeHtml(variantText)}</em>` : ''}<br>SKU: ${escapeHtml(skuText)} · Qty: 1`, 15809 duration: 5000, 15810 actions: [ 15811 { label: 'Lihat Keranjang', onClick: () => { window.location.href = '/keranjang'; } }, 15812 { label: 'Lanjut Belanja', variant: 'alt', onClick: () => { } } 15813 ] 15814 }); 15815 }); 15816 } 15817 })(); 15818 15819 /* ====== Auto-hide installment banner if sidebar too tall (Desktop only) ====== */ 15820 (function () { 15821 function adjustSidebarBanner() { 15822 if (window.innerWidth <= 768) return; 15823 const sidebar = document.querySelector('.pd-sidebar'); 15824 const infoCard = document.querySelector('.pd-info-card'); 15825 const banner = document.querySelector('.pd-side-card.inst-alt-banner.inst-alt-banner--compact'); 15826 if (!sidebar || !infoCard || !banner) return; 15827 const sidebarHeight = sidebar.offsetHeight; 15828 const infoCardHeight = infoCard.offsetHeight; 15829 if (sidebarHeight > infoCardHeight) { 15830 banner.style.display = 'none'; 15831 } else { 15832 banner.style.display = ''; 15833 } 15834 } 15835 if (document.readyState === 'loading') { 15836 document.addEventListener('DOMContentLoaded', adjustSidebarBanner); 15837 } else { 15838 adjustSidebarBanner(); 15839 } 15840 let resizeTimer; 15841 window.addEventListener('resize', function () { 15842 clearTimeout(resizeTimer); 15843 resizeTimer = setTimeout(adjustSidebarBanner, 250); 15844 }); 15845 const pwpSection = document.getElementById('pwp-deals-section'); 15846 if (pwpSection) { 15847 const observer = new MutationObserver(function (mutations) {
15848 let shouldRecheck = false; 15849 mutations.forEach(function (mutation) { 15850 if (mutation.type === 'attributes' && mutation.attributeName === 'hidden') { 15851 shouldRecheck = true; 15852 } else if (mutation.type === 'childList' && mutation.addedNodes.length > 0) { 15853 shouldRecheck = true; 15854 } 15855 }); 15856 if (shouldRecheck) { 15857 setTimeout(adjustSidebarBanner, 100); 15858 } 15859 }); 15860 observer.observe(pwpSection, { 15861 attributes: true, 15862 childList: true, 15863 subtree: true 15864 }); 15865 } 15866 window.adjustSidebarBanner = adjustSidebarBanner; 15867 })(); 15868 15869 /* ====== Global constants ====== */ 15870 const IS_DIGITAL = false; 15871 const IS_PREORDER = false; 15872 15873 /* ====== Variants state (REVISED) ====== */ 15874 (function initVariants() { 15875 const _0x7g8h = []; window.variants = _0x7g8h; 15876 window.isPreorderProduct = false; 15877 const attrOrder = []; 15878 15879 if (!variants.length || !attrOrder.length) return; 15880 15881 function comboKey(sel) { 15882 return attrOrder.map(a => a + '=' + (sel[a] ?? '')).join('|'); 15883 } 15884 15885 const variantMap = {};
15886 variants.forEach(v => { 15887 const key = comboKey(v.attrs); 15888 variantMap[key] = v; 15889 }); 15890 15891 function readSelection() { 15892 const sel = {}; 15893 attrOrder.forEach(a => { 15894 const r = document.querySelector(`.v-group[data-attr="${CSS.escape(a)}"] input[type=radio]:checked`); 15895 sel[a] = r ? r.value : ''; 15896 }); 15897 return sel; 15898 } 15899 15900 function findVariant(sel) { 15901 return variantMap[comboKey(sel)] || null; 15902 } 15903 15904 function autoFillMissing(sel) { 15905 let changed = false; 15906 for (const a of attrOrder) { 15907 if (sel[a]) continue; 15908 const possible = []; 15909 const seen = new Set(); 15910 variants.forEach(v => { 15911 let ok = true; 15912 for (const a2 of attrOrder) { 15913 if (a2 === a) continue; 15914 if (sel[a2] && v.attrs[a2] !== sel[a2]) { ok = false; break; } 15915 } 15916 if (ok) { 15917 const val = v.attrs[a]; 15918 if (!seen.has(val)) { seen.add(val); possible.push(val); } 15919 } 15920 }); 15921 if (possible.length === 1) { 15922 const val = possible[0]; 15923 const input = document.querySelector(`.v-group[data-attr="${CSS.escape(a)}"] input[type=radio][value="${CSS.escape(val)}"]`); 15924 if (input && !input.checked) { input.checked = true; sel[a] = val; changed = true; } 15925 } 15926 } 15927 return changed; 15928 } 15929 15930 function rupiah(n) { 15931 n = parseInt(n || 0, 10) || 0; 15932 return 'Rp ' + n.toString().replace(/\B(?=(\d{3})+(?!\d))/g, '.'); 15933 } 15934 15935 function focusGalleryByUrl(imageUrl) { 15936 const isMobile = window.matchMedia && window.matchMedia('(max-width: 640px)').matches; 15937 if (isMobile) { 15938 _0xau1v(imageUrl); 15939 return; 15940 } 15941 15942 const gallery = document.getElementById('pd-thumb-gallery'); 15943 const targetName = _0x8s9t(imageUrl); 15944 15945 if (gallery) { 15946 const btns = Array.from(gallery.querySelectorAll('.pd-thumb-btn')); 15947 const btn = btns.find(b => _0x8s9t(b.getAttribute('data-full') || '') === targetName); 15948 if (btn) { btn.click(); return; } 15949 } 15950 15951 _0xau1v(imageUrl); 15952 } 15953 15954 15955 function formatStockLabel(n) { n = parseInt(n || 0, 10) || 0; return (n > 10) ? '10+' : String(n) } 15956 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 (_) { } } 15957 15958 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) } 15959 15960 function applyVariant(v, focusImage = true) { 15961 const elCur = document.getElementById('pd-price-current'); 15962 const elOri = document.getElementById('pd-price-original'); 15963 const elDisc = document.getElementById('pd-discount-badge'); 15964 const elSku = document.getElementById('pd-sku'); 15965 const elStock = document.getElementById('pd-stock-badge'); 15966 const elQty = document.getElementById('qty'); 15967 const btnAdd = document.getElementById('btn-add-cart'); 15968 const btnBuy = document.getElementById('btn-buy'); 15969 const hidVar = document.getElementById('pd-variant-id'); 15970 15971 const mfCart = document.getElementById('mf-cart'); 15972 const mfBuy = document.getElementById('mf-buy'); 15973 const fab = document.getElementById('pd-mobile-fab'); 15974 15975 if (hidVar) hidVar.value = v ? v.id : 0; 15976 if (elCur) elCur.textContent = rupiah(v ? v.final : 0); 15977 if (elSku && v && v.sku) elSku.textContent = v.sku; 15978 15979 if (v && v.ori > v.final) { 15980 if (elOri) { elOri.style.display = 'inline'; elOri.textContent = rupiah(v.ori); } 15981 if (elDisc) { elDisc.style.display = 'inline'; elDisc.textContent = '-' + (v.disc || 0) + '%'; } 15982 } else { 15983 if (elOri) elOri.style.display = 'none'; 15984 if (elDisc) elDisc.style.display = 'none'; 15985 } 15986 15987 const stock = v ? (parseInt(v.stock || 0, 10) || 0) : 0; 15988 let effectiveStock = stock; 15989 let isActivePreorder = false;
15990 if (window.isPreorderProduct && v && 'preorder_remaining' in v && v.preorder_remaining !== null) { 15991 effectiveStock = parseInt(v.preorder_remaining, 10); 15992 if (isNaN(effectiveStock)) effectiveStock = 0; 15993 isActivePreorder = true; 15994 } 15995 if (elStock) { 15996 elStock.classList.remove('in', 'out'); 15997 if (effectiveStock > 0) { 15998 elStock.classList.add('in'); 15999 elStock.textContent = IS_DIGITAL ? 'Tersedia' : (isActivePreorder ? 'Sisa Slot: ' + effectiveStock : 'Stok: ' + formatStockLabel(effectiveStock)); 16000 } else { 16001 elStock.classList.add('out'); 16002 elStock.textContent = 'Habis'; 16003 } 16004 } 16005 if (elQty) { 16006 elQty.max = String(effectiveStock > 0 ? effectiveStock : 0); 16007 if (effectiveStock <= 0) { elQty.value = '0'; elQty.disabled = true; } 16008 else { if (parseInt(elQty.value || '1', 10) < 1) elQty.value = '1'; elQty.disabled = false; } 16009 } 16010 16011 const shouldDisable = !(v && effectiveStock > 0); 16012 const updateButtons = () => { 16013 const btnAddCart = document.getElementById('btn-add-cart'); 16014 const btnBuyNow = document.getElementById('btn-buy'); 16015 const mobileCart = document.getElementById('mf-cart'); 16016 const mobileBuy = document.getElementById('mf-buy'); 16017 [btnAddCart, btnBuyNow, mobileCart, mobileBuy].forEach(btn => { 16018 if (!btn) return; 16019 if (shouldDisable) { 16020 btn.disabled = true; 16021 btn.setAttribute('disabled', 'disabled'); 16022 btn.classList.add('stock-disabled'); 16023 btn.setAttribute('data-stock-blocked', 'true'); 16024 btn.setAttribute('data-stock-reason', window.isPreorderProduct ? 'Pre-order habis' : 'Stok habis'); 16025 } else { 16026 btn.disabled = false; 16027 btn.removeAttribute('disabled'); 16028 btn.classList.remove('stock-disabled'); 16029 btn.removeAttribute('data-stock-blocked'); 16030 btn.removeAttribute('data-stock-reason'); 16031 } 16032 }); 16033 }; 16034 updateButtons(); 16035 setTimeout(updateButtons, 10); 16036 setTimeout(updateButtons, 50); 16037 setTimeout(updateButtons, 100); 16038 if (mfBuy && v) { 16039 const voucherBtn = document.getElementById('btn-buy-voucher'); 16040 const voucherCode = fab ? fab.dataset.voucherCode : ''; 16041 let voucherDiscount = 0; 16042 16043 if (voucherBtn && voucherCode) { 16044 const vType = voucherBtn.dataset.voucherType; 16045 const vValue = parseFloat(voucherBtn.dataset.voucherValue) || 0; 16046 const vMax = parseFloat(voucherBtn.dataset.voucherMax) || 0; 16047 const finalPrice = v.final || 0; 16048 if (vType && vValue > 0) { 16049 voucherDiscount = calcVoucherDisc(vType, vValue, finalPrice, vMax); 16050 if (fab) fab.dataset.voucherValue = voucherDiscount.toString(); 16051 } 16052 } 16053 16054 const finalPrice = v.final || 0; 16055 const textEl = mfBuy.querySelector('.mf-buy-text'); 16056 const priceEl = mfBuy.querySelector('.mf-buy-price'); 16057 16058 if (effectiveStock > 0) { 16059 if (IS_PREORDER) { 16060 if (textEl) textEl.textContent = 'Pre Order Sekarang'; 16061 if (priceEl) priceEl.textContent = rupiah(finalPrice); 16062 } else if (voucherCode && voucherDiscount > 0) { 16063 if (textEl) textEl.textContent = 'Beli dengan Voucher'; 16064 if (priceEl) priceEl.textContent = rupiah(Math.max(0, finalPrice - voucherDiscount)); 16065 } else { 16066 if (textEl) textEl.textContent = 'Beli Sekarang'; 16067 if (priceEl) priceEl.textContent = rupiah(finalPrice); 16068 } 16069 } else { 16070 if (textEl) textEl.textContent = 'Stok Habis'; 16071 if (priceEl) priceEl.textContent = rupiah(finalPrice); 16072 } 16073 } 16074 16075 const isMobile = window.initMobile ?? 0; 16076 if (window.instSetBasePrice) window.instSetBasePrice(v ? (isMobile == '1' ? v.ori : v.final) : 0); 16077 if (window.updateSoldBySku) window.updateSoldBySku(v.sku); 16078 updateBranchPopover(v); 16079 if (v && v.image_url && focusImage) focusGalleryByUrl(v.image_url); 16080 if (v) { 16081 window.dispatchEvent(new CustomEvent('pd-variant-changed', { 16082 detail: { 16083 price: v.final,
16084 originalPrice: v.ori, 16085 discount: v.disc, 16086 stock: effectiveStock, 16087 sku: v.sku, 16088 variant_id: v.id 16089 } 16090 })); 16091 16092 const encodedHash = encodeVariantHash(v.id); 16093 if (encodedHash && window.history && window.history.replaceState) { 16094 const newHash = '#v=' + encodedHash; 16095 const newUrl = window.location.pathname + window.location.search + newHash; 16096 window.history.replaceState(null, '', newUrl); 16097 } 16098 } 16099 } 16100 16101 let sel = readSelection(); 16102 if (autoFillMissing(sel)) sel = readSelection(); 16103 16104 let v = findVariant(sel); 16105 if (!v) { 16106 const candidates = variants.filter(variant => { 16107 return attrOrder.every(a => { 16108 if (!sel[a]) return true; 16109 return variant.attrs[a] === sel[a]; 16110 }); 16111 }); 16112 if (candidates.length >= 1) { 16113 v = candidates[0]; 16114 attrOrder.forEach(a => sel[a] = v.attrs[a]); 16115 attrOrder.forEach(a => { 16116 const val = sel[a]; 16117 const input = document.querySelector(`.v-group[data-attr="${CSS.escape(a)}"] input[type=radio][value="${CSS.escape(val)}"]`); 16118 if (input) input.checked = true; 16119 }); 16120 } 16121 } 16122 16123 const initSel = readSelection(); 16124 const initVar = findVariant(initSel) || variants[0] || null; 16125 if (document.readyState === 'loading') { 16126 document.addEventListener('DOMContentLoaded', () => applyVariant(initVar, false)); 16127 } else { 16128 applyVariant(initVar, false); 16129 } 16130 16131 function updateSummary(sel) { Object.entries(sel).forEach(([a, val]) => { const el = document.getElementById('vs-' + a); if (el) el.textContent = val || '-' }) } 16132 function refreshOptions(sel) { 16133 attrOrder.forEach(a => { 16134 const group = document.querySelector(`.v-group[data-attr="${CSS.escape(a)}"]`); 16135 if (!group) return; 16136 const chips = group.querySelectorAll('.v-chip'); 16137 chips.forEach(ch => { 16138 const val = ch.getAttribute('data-value'); 16139 const possible = variants.some(v => { 16140 if (v.attrs[a] !== val) return false; 16141 for (const a2 of attrOrder) { 16142 if (a2 === a) continue; 16143 if (sel[a2] && v.attrs[a2] !== sel[a2]) return false; 16144 } 16145 return true; 16146 }); 16147 const input = ch.querySelector('input[type=radio]'); 16148 const disabled = !possible; 16149 if (input) input.disabled = disabled; 16150 ch.classList.toggle('disabled', disabled); 16151 16152 let candidateVariant = null; 16153 if (possible) { 16154 candidateVariant = variants.find(v => { 16155 if (v.attrs[a] !== val) return false; 16156 for (const a2 of attrOrder) { 16157 if (a2 === a) continue; 16158 if (sel[a2] && v.attrs[a2] !== sel[a2]) return false; 16159 } 16160 return true; 16161 }); 16162 } 16163 const outOfStock = candidateVariant ? (window.isPreorderProduct && candidateVariant.preorder_remaining !== null ? candidateVariant.preorder_remaining <= 0 : candidateVariant.stock <= 0) : false; 16164 ch.classList.toggle('out', !disabled && outOfStock); 16165 const badge = ch.querySelector('.chip-badge'); 16166 if (badge) badge.hidden = !(candidateVariant && outOfStock); 16167 }); 16168 group.querySelectorAll('.v-chip').forEach(ch => { 16169 const input = ch.querySelector('input[type=radio]'); 16170 ch.classList.toggle('selected', input && input.checked); 16171 }); 16172 }); 16173 } 16174 updateSummary(sel); 16175 refreshOptions(sel); 16176 document.querySelectorAll('.v-chip').forEach(chip => { const input = chip.querySelector('input[type=radio]'); if (input && input.checked) { chip.classList.add('selected'); } }); 16177 16178 const container = document.getElementById('pd-variants'); 16179 container && container.addEventListener('change', function (ev) { 16180 const radio = ev.target.closest('input[type=radio]'); 16181 if (!radio) return; 16182 sel = readSelection(); 16183 if (autoFillMissing(sel)) sel = readSelection(); 16184 const chosen = findVariant(sel); 16185 applyVariant(chosen || null, true); 16186 16187 updateSummary(sel); 16188 refreshOptions(sel); 16189 }); 16190 16191 window.applyVariant = applyVariant; 16192 })(); 16193 16194 (function cleanBrokenDescImages() { 16195 const containers = [ 16196 document.querySelector('.pd-full-desc-body'), 16197 document.querySelector('.pd-short-desc')
16198 ].filter(Boolean); 16199 16200 containers.forEach(root => { 16201 const imgs = root.querySelectorAll('img'); 16202 imgs.forEach(img => { 16203 if (img.complete && img.naturalWidth === 0) { 16204 img.remove(); 16205 return; 16206 } 16207 img.addEventListener('error', () => { 16208 img.remove(); 16209 }, { once: true }); 16210 }); 16211 }); 16212 })(); 16213 16214 /* ====== Scroll To Top ====== */ 16215 (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' }) }) })(); 16216 16217 /* Format stok 10+ */ 16218 function _0xk67l(n) { n = parseInt(n || 0, 10) || 0; return n > 10 ? '10+' : String(n) } 16219 16220 /* Toggle popover stok per cabang */ 16221 (function _0xm89n() { 16222 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 = '' } } 16223 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() } 16224 a.addEventListener('click', function (h) { h.preventDefault(); b.classList.contains('show') ? f() : e() }); if (c) c.addEventListener('click', f) 16225 })(); 16226 16227 /* ===== Share Product Modal ===== */ 16228 (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://murdochfinance.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
16228= encodeURIComponent(i), q = encodeURIComponent(g); let r = ''; switch (n) { case 'whatsapp': r = `https://wa.me/?text=${p}${o}`; break; case 'facebook': r = `https://www.facebook.com/sharer/sharer.php?u=${o}`; break; case 'twitter': r = `https://twitter.com/intent/tweet?text=${p}${o}`; break; case 'telegram': r = `https://t.me/share/url?url=${o}&text=${p}`; break; case 'email': r = `mailto:?subject=${encodeURIComponent('ð¥ Cek Produk Keren Ini!')}&body=${p}${o}`; window.location.href = r; k(); return; case 'copy': s(); return; case 'pdf': const ps = document.querySelector('.product-single'); if (ps) { ps.setAttribute('data-print-date', new Date().toLocaleDateString('id-ID', { year: 'numeric', month: 'long', day: 'numeric' })) } k(); setTimeout(function () { window.print(); try { if (window.ga4Ecomm && window.ga4Ecomm.trackEvent) window.ga4Ecomm.trackEvent('share', { method: 'pdf_export', content_type: 'product', item_id: "1S83N0880RID" }) } catch (_) { } }, 300); return }if (r) { window.open(r, '_blank', 'noopener,noreferrer'); try { if (window.ga4Ecomm && window.ga4Ecomm.trackEvent) window.ga4Ecomm.trackEvent('share', { method: n, content_type: 'product', item_id: "1S83N0880RID" }) } catch (_) { } } }); function s() { if (!e) return; e.select(); e.setSelectionRange(0, 99999); try { if (navigator.clipboard && navigator.clipboard.writeText) { navigator.clipboard.writeText(f).then(function () { t() }).catch(function () { document.execCommand('copy'); t() }) } else { document.execCommand('copy'); t() } } catch (u) { console.error('Failed to copy:', u) } } function t() { if (!d) return; const v = d.innerHTML; d.classList.add('copied'); d.innerHTML = '<svg viewBox="0 0 24 24" width="16" height="16"><path fill="currentColor" d="M9 16.17L4.83 12l-1.42 1.41L9 19 21 7l-1.41-1.41z"/></svg><span class="pd-share-copy-text">Tersalin!</span>'; if (window.showToast) showToast({ type: 'success', title: '⨠Link Tersalin!', message: 'Link produk berhasil disalin. Yuk bagikan ke teman!', duration: 3000 }); setTimeout(function () { d.classList.remove('copied'); d.innerHTML = v }, 2000) } if (d) d.addEventListener('click', s); if (navigator.share) { const shareHandler = function (w) { w.preventDefault(); navigator.share({ title: g, text: i + f, url: f }).catch(function (x) { console.log('Native share cancelled or failed:', x) }) }; if (a) a.addEventListener('dblclick', shareHandler); if (z) z.addEventListener('dblclick', shareHandler) } })(); 16229 16230 /* ===== Embedding variants (server â client) ===== */ 16231 (function () { 16232 window.__PD_VARIANTS_WITH_BRANCH__ = []; 16233 })(); 16234 16235 /* ===== Helper: update angka popover ===== */ 16236 function updateStockPopoverForVariant(v) { 16237 try { 16238 const elMeg = document.getElementById('sp-qty-meg'); 16239 const elMdf = document.getElementById('sp-qty-mdf'); 16240 const elBda = document.getElementById('sp-qty-bda'); 16241 16242 if (typeof v?.smm === 'number' && elMeg) elMeg.textContent = formatStockLabel(Math.max(0, v.smm | 0)); 16243 if (typeof v?.smf === 'number' && elMdf) elMdf.textContent = formatStockLabel(Math.max(0, v.smf | 0)); 16244 if (typeof v?.sba === 'number' && elBda) elBda.textContent = formatStockLabel(Math.max(0, v.sba | 0)); 16245 } catch (_) { } 16246 } 16247 16248 /* ===== applyVariant: 10+ dan update popover ===== */ 16249 (function patchApplyVariant() { 16250 if (typeof applyVariant !== 'function') return; 16251 const original = applyVariant; 16252 window.applyVariant = function (v) { 16253 original(v); 16254 16255 try { 16256 const elStock = document.getElementById('pd-stock-badge'); 16257 if (elStock) { 16258 let txt = elStock.textContent || ''; 16259 let m = txt.match(/\d+/); 16260 if (m) { 16261 const n = parseInt(m[0] || '0', 10) || 0; 16262 elStock.textContent = (n > 0) ? ('Stok: ' + formatStockLabel(n)) : 'Habis'; 16263 } 16264 } 16265 } catch (_) { } 16266 if (window.__PD_VARIANTS_WITH_BRANCH__ && v) { const vv = window.__PD_VARIANTS_WITH_BRANCH__.find(x => x.id === v.id) || v; updateStockPopoverForVariant(vv) } 16267 }; 16268 })(); 16269 16270 (function initCurrentVariantBranch() { 16271 const list = window.__PD_VARIANTS_WITH_BRANCH__ || []; 16272 if (!list.length) return; 16273 const hid = document.getElementById('pd-variant-id'); 16274 const vid = hid ? parseInt(hid.value || '0', 10) : 0; 16275 const current = list.find(x => x.id === vid) || list[0] || null; 16276 if (current) updateStockPopoverForVariant(current); 16277 })(); 16278 16279 (function () { 16280 if (!window.ga4Ecomm) return; 16281 const catSegs = ["Komputer & Laptop", "Laptop", "Gaming"]; 16282 window.ga4Ecomm.viewItem({ 16283 currency: 'IDR', 16284 value: 20789000, 16285 item_id: "1S83N0880RID", 16286 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", 16287 item_brand: "Lenovo ",
16288 item_category: catSegs && catSegs.length ? catSegs.join(' / ') : '' 16289 }); 16290 })(); 16291 16292 (function patchApplyVariantFocus() { 16293 if (typeof applyVariant !== 'function') return; 16294 const original = applyVariant; 16295 window.applyVariant = function (v, focusImage = true) { 16296 16297 original(v, focusImage); 16298 16299 if (focusImage && v && v.image_url) { 16300 _0xau1v(v.image_url); 16301 } 16302 }; 16303 })(); 16304 16305 (function () { 16306 var soldMap = []; 16307 var soldTotalLabel = "Terjual 2"; 16308 16309 function formatSoldLabel(qty) { 16310 if (qty >= 1000000) { 16311 var v = Math.floor((qty / 100000)) / 10; 16312 return 'Terjual ' + (String(v).replace('.', ',')) + 'jt+'; 16313 } 16314 if (qty >= 1000) { 16315 var v2 = Math.floor((qty / 100)) / 10; 16316 return 'Terjual ' + (String(v2).replace('.', ',')) + 'rb+'; 16317 } 16318 if (qty >= 100) { 16319 var v2 = Math.floor((qty / 100)) * 100; 16320 return 'Terjual ' + (String(v2).replace('.', ',')) + '+'; 16321 } 16322 if (qty >= 10) { 16323 var v2 = Math.floor((qty / 10)) * 10; 16324 return 'Terjual ' + (String(v2).replace('.', ',')) + '+'; 16325 } 16326 return 'Terjual ' + (qty.toLocaleString('id-ID')); 16327 } 16328 16329 function updateSoldLabel(labelText) { 16330 var el = document.querySelector('#pd-sold-inline, [data-role="sold-chip"]'); 16331 if (el) el.textContent = labelText; 16332 } 16333 16334 window.updateSoldBySku = function (sku) { 16335 if (!sku || typeof sku !== 'string') { 16336 updateSoldLabel(soldTotalLabel); 16337 return; 16338 } 16339 var qty = soldMap[sku] || 0; 16340 updateSoldLabel(formatSoldLabel(qty)); 16341 }; 16342 16343 updateSoldLabel(soldTotalLabel); 16344 })(); 16345 16346 (function () { 16347 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) } }) } 16348 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
16348ipse 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 } 16349 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') } 16350 })(); 16351 16352 (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 = '#22c55e'; setTimeout(function () { mcp.textContent = o; mcp.style.background = '' }, 2000) }
16352 function fr(a) { return 'Rp' + Math.floor(a).toLocaleString('id-ID') } })(); 16353 </script>
16353 16354
16354<script nonce="se3iyzEHMc9FQEB4wSyd0w=="> 16355 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; 16356 window.IS_DIGITAL = IS_DIGITAL; 16357 window.isPreorderProduct = false; 16358 window.PD_PREORDER_DATA = null; 16359 </script>
16359 16360 16361
16361<script src="https://plazaitdotid.pages.dev/assets/js/pd-lightbox.js" nonce="se3iyzEHMc9FQEB4wSyd0w=="></script>
16361 16362
16362<script src="https://plazaitdotid.pages.dev/assets/js/cart.js" defer nonce="se3iyzEHMc9FQEB4wSyd0w=="></script>
16362 16363
16363<script src="https://plazaitdotid.pages.dev/assets/js/stock-validator-vanilla.js" 16364 nonce="se3iyzEHMc9FQEB4wSyd0w=="></script>
16364 16365
16365<script src="https://plazaitdotid.pages.dev/assets/js/pd-addtocart.js" defer 16366 nonce="se3iyzEHMc9FQEB4wSyd0w=="></script>
16366 16367
16367<script src="https://plazaitdotid.pages.dev/assets/js/pd-buynow.js" defer nonce="se3iyzEHMc9FQEB4wSyd0w=="></script>
16367 16368
16368<script src="https://plazaitdotid.pages.dev/assets/js/pd-voucher-recalc.js" defer 16369 nonce="se3iyzEHMc9FQEB4wSyd0w=="></script>
16369 16370
16370<script 16371 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>
16371 16372 16373
16373<script nonce="se3iyzEHMc9FQEB4wSyd0w=="> 16374 (function () { 16375 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' } }) } } 16376 16377 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() } 16378 })(); 16379 16380 (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 >
16380 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() } }) })(); 16381 </script>
16381 16382 <footer class="site-footer footer-compact variant-stripes" role="contentinfo"> 16383 <div class="ft-top ft-collapsible" id="ftTop"> 16384 <div class="container ft-grid"> 16385 16386 <div class="ft-col ft-help"> 16387 <h4 class="ft-title">Butuh Bantuan?</h4> 16388 <p class="ft-desc">Hubungi kami melalui Official WhatsApp interaktif sekarang.</p> 16389 <a class="ft-wa-btn" href="#" target="_blank" rel="nofollow noopener"> 16390 <span class="ico" aria-hidden="true"> 16391 <svg viewBox="0 0 24 24" width="18" height="18"> 16392 <path fill="#25D366" 16393 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" /> 16394 </svg> 16395 </span> 16396 Kirim Pesan 16397 </a> 16398 16399 <p class="ft-desc sm-gap">Ikuti kami:</p> 16400 <div class="ft-social"> 16401 <a aria-label="Facebook" href="https://facebook.com/PlazaIt/"><svg viewBox="0 0 24 24" 16402 width="18" height="18"> 16403 <path fill="currentColor" 16404 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" /> 16405 </svg></a> 16406 <a aria-label="Instagram" href="https://www.instagram.com/plazait"><svg viewBox="0 0 24 24" 16407 width="18" height="18"> 16408 <path fill="currentColor" 16409 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
16409V7.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" /> 16410 </svg></a> 16411 <a aria-label="TikTok" href="https://www.tiktok.com/@plazait"><svg viewBox="0 0 24 24" 16412 width="18" height="18"> 16413 <path fill="currentColor" 16414 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" /> 16415 </svg></a> 16416 </div> 16417 </div> 16418 16419 <!-- Collapsible Content Wrapper (Non-Homepage Only) --> 16420 <div class="ft-collapsible-content" id="ftCollapsible"> 16421 16422 <div class="ft-col"> 16423 <h4 class="ft-title">Tentang SEMUAJP</h4> 16424 <ul class="ft-links"> 16425 <li><a href="/tentang-kami">Tentang Kami</a></li> 16426 <li><a href="/kontak-kami">Kontak Kami</a></li> 16427 <li><a href="/lokasi-toko">Lokasi Toko</a></li> 16428 <li><a href="/faq">FAQ</a></li> 16429 </ul> 16430 <div class="ft-address"> 16431 <p class="company">PT TISU-AJAIB</p> 16432 <p>JL. Asia Raya Blok BB No. 12-A, Kel. Sukaramai II,</p> 16433 <p>Kec. Medan Area, Kota Medan, Sumatera Utara, 20216</p> 16434 </div> 16435 </div> 16436 16437 <div class="ft-col"> 16438 <h4 class="ft-title">Informasi</h4> 16439 <ul class="ft-links"> 16440 <li><a href="/syarat-dan-ketentuan">Syarat & Ketentuan</a></li> 16441 <li><a href="/kebijakan-privasi">Kebijakan Privasi</a></li> 16442 <li><a href="/kebijakan-cookie">Kebijakan Cookie</a></li> 16443 <li><a href="/pengiriman-dan-pengembalian">Pengiriman & Pengembalian</a></li> 16444 <li><a href="/pembayaran-dan-cicilan">Pembayaran & Cicilan</a></li> 16445 <li><a href="/garansi-dan-layanan">Garansi & Layanan</a></li> 16446 </ul> 16447 16448 <div class="ft-payments payments-small" aria-label="Metode Pembayaran"> 16449 <div class="pay-row"> 16450 <img src="https://plazaitdotid.pages.dev/assets/img/payments/mandiri.svg" alt="Mandiri" 16451 loading="lazy"> 16452 <img src="https://plazaitdotid.pages.dev/assets/img/payments/bni.svg" alt="BNI" 16453 loading="lazy"> 16454 <img src="https://plazaitdotid.pages.dev/assets/img/payments/bri.svg" alt="BRI" 16455 loading="lazy"> 16456 <img src="https://plazaitdotid.pages.dev/assets/img/payments/bsi.svg" alt="BSI" 16457 loading="lazy"> 16458 <img src="https://plazaitdotid.pages.dev/assets/img/payments/cimb-logo.svg" 16459 alt="ShopeePay" loading="lazy"> 16460 </div> 16461 </div> 16462 </div> 16463 16464 </div> 16465 <!-- End Collapsible Content --> 16466 16467 <!-- Expand Button (Mobile Only) --> 16468 <button class="ft-expand-btn" id="ftExpandBtn" aria-label="Lihat semua informasi footer"> 16469 <span class="expand-text">Selengkapnya</span> 16470 <svg viewBox="0 0 24 24" width="18" height="18" fill="currentColor"> 16471 <path d="M7.41 8.59L12 13.17l4.59-4.58L18 10l-6 6-6-6 1.41-1.41z" /> 16472 </svg> 16473 </button> 16474 16475 </div> 16476 </div> 16477 <div class="ft-bottom"> 16478 <div class="container ft-bottom-inner"> 16479 <div class="ft-copy">
16480 <span>TISU-AJAIB © <span id="yearNow">2026</span></span> 16481 <span>PT TISU-AJAIB. All rights reserved.</span> 16482 </div> 16483 </div> 16484 </div> 16485 16486 <style nonce="se3iyzEHMc9FQEB4wSyd0w=="> 16487 /* Chat Widget Styles - Lightweight & Minimal */ 16488 .chat-widget { 16489 position: fixed; 16490 bottom: 20px; 16491 right: 20px; 16492 z-index: 9999; 16493 font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, sans-serif; 16494 } 16495 16496 /* Hide floating button on mobile - use bottom nav instead */ 16497 @media (max-width: 640px) { 16498 .chat-toggle-btn { 16499 display: none !important; 16500 } 16501 16502 /* Ensure popup is still visible on mobile even when button is hidden */ 16503 .chat-widget { 16504 display: block !important; 16505 } 16506 16507 .chat-popup { 16508 display: none; 16509 /* Hidden by default, shown via JS */ 16510 } 16511 16512 .chat-popup[style*="display: block"], 16513 .chat-popup[style*="display:block"] { 16514 display: block !important; 16515 } 16516 } 16517 16518 .chat-toggle-btn { 16519 width: 60px; 16520 height: 60px; 16521 border-radius: 50%; 16522 background: linear-gradient(135deg, #F28C1A 0%, #D97809 100%); 16523 border: none; 16524 color: white; 16525 cursor: pointer; 16526 box-shadow: 0 4px 12px rgba(242, 140, 26, 0.3); 16527 position: relative; 16528 transition: transform 0.2s, box-shadow 0.2s; 16529 } 16530 16531 .chat-toggle-btn:hover { 16532 transform: scale(1.05); 16533 box-shadow: 0 6px 20px rgba(242, 140, 26, 0.4); 16534 } 16535 16536 #chat-toggle-btn .chat-icon { 16537 position: absolute; 16538 top: 50%; 16539 left: 50%; 16540 transform: translate(-50%, -50%); 16541 width: 28px !important; 16542 height: 28px !important; 16543 } 16544 16545 .chat-unread-badge { 16546 position: absolute; 16547 top: -5px; 16548 right: -5px; 16549 background: #ef4444; 16550 color: white; 16551 border-radius: 12px; 16552 padding: 2px 6px; 16553 font-size: 11px; 16554 font-weight: 600; 16555 min-width: 20px; 16556 text-align: center; 16557 } 16558 16559 .chat-popup { 16560 position: absolute; 16561 bottom: 80px; 16562 right: 0; 16563 width: 380px; 16564 max-width: calc(100vw - 40px); 16565 height: 500px; 16566 max-height: calc(100vh - 120px); 16567 background: white; 16568 border-radius: 12px; 16569 box-shadow: 0 10px 40px rgba(0, 0, 0, 0.2); 16570 display: flex; 16571 flex-direction: column; 16572 overflow: hidden; 16573 } 16574 16575 .chat-popup-header { 16576 background: linear-gradient(135deg, #F28C1A 0%, #D97809 100%); 16577 color: white; 16578 padding: 16px 20px; 16579 display: flex; 16580 justify-content: space-between; 16581 align-items: center; 16582 flex-shrink: 0; 16583 } 16584 16585 .chat-header-title { 16586 display: flex; 16587 flex-direction: column; 16588 gap: 2px; 16589 min-height: 0; 16590 } 16591 16592 .chat-popup-header h3 { 16593 margin: 0; 16594 font-size: 18px; 16595 font-weight: 600; 16596 line-height: 1.2; 16597 } 16598 16599 .chat-operating-hours { 16600 font-size: 11px; 16601 opacity: 0.9; 16602 font-weight: 400; 16603 display: flex; 16604 align-items: center; 16605 gap: 4px; 16606 line-height: 1.2; 16607 } 16608 16609 .chat-operating-hours svg { 16610 width: 12px; 16611 height: 12px; 16612 opacity: 0.8; 16613 flex-shrink: 0; 16614 } 16615 16616 .chat-header-actions { 16617 display: flex; 16618 align-items: center; 16619 gap: 8px; 16620 } 16621 16622 /* Notification Toggle Button */ 16623 .btn-notif-toggle { 16624 background: none; 16625 border: none; 16626 color: white; 16627 font-size: 18px; 16628 cursor: pointer; 16629 padding: 4px 8px; 16630 transition: all 0.2s; 16631 opacity: 0.8; 16632 } 16633 16634 .btn-notif-toggle:hover { 16635 opacity: 1; 16636 transform: scale(1.1); 16637 } 16638 16639 /* Icon states */ 16640 .btn-notif-toggle[data-status="not-subscribed"] svg { 16641 opacity: 0.7; 16642 } 16643 16644 .btn-notif-toggle[data-status="not-subscribed"]:hover svg { 16645 opacity: 1; 16646 } 16647 16648 .btn-notif-toggle[data-status="subscribed"] svg { 16649 opacity: 1; 16650 animation: bellRing 2s ease-in-out; 16651 } 16652 16653 .btn-notif-toggle[data-status="blocked"] svg { 16654 color: #ff6b6b; 16655 } 16656 16657 .btn-notif-toggle[data-status="not-supported"] { 16658 display: none !important; 16659 } 16660 16661 @keyframes bellRing { 16662 16663 0%, 16664 100% { 16665 transform: rotate(0deg); 16666 } 16667 16668 10%, 16669 30% { 16670 transform: rotate(-10deg); 16671 } 16672 16673 20%, 16674 40% { 16675 transform: rotate(10deg); 16676 } 16677 } 16678 16679 /* Notification Info Bar */ 16680 .chat-notif-info-bar { 16681 position: absolute; 16682 top: 64px; 16683 left: 0; 16684 right: 0; 16685 background: linear-gradient(to right, #e3f2fd, #f5f5f5); 16686 border-bottom: 1px solid #bbdefb; 16687 padding: 8px 12px; 16688 display: flex; 16689 align-items: center; 16690 gap: 8px; 16691 font-size: 12px; 16692 color: #616161; 16693 z-index: 10; 16694 animation: slideDown 0.3s ease; 16695 } 16696 16697 .chat-notif-info-bar svg { 16698 flex-shrink: 0; 16699 } 16700 16701 .chat-notif-info-bar .small { 16702 flex: 1; 16703 line-height: 1.4; 16704 } 16705 16706 .chat-notif-info-bar .btn-dismiss { 16707 background: none; 16708 border: none; 16709 color: #9e9e9e; 16710 cursor: pointer; 16711 padding: 0 4px; 16712 font-size: 16px; 16713 transition: color 0.2s; 16714 } 16715 16716 .chat-notif-info-bar .btn-dismiss:hover { 16717 color: #616161; 16718 } 16719 16720 @keyframes slideDown { 16721 from { 16722 max-height: 0; 16723 opacity: 0; 16724 } 16725 16726 to { 16727 max-height: 50px; 16728 opacity: 1; 16729 } 16730 } 16731 16732 .chat-close-btn { 16733 background: none; 16734 border: none; 16735 color: white; 16736 font-size: 28px; 16737 line-height: 1; 16738 cursor: pointer; 16739 padding: 0; 16740 width: 30px; 16741 height: 30px; 16742 } 16743 16744 .chat-popup-body { 16745 flex: 1 1 auto; 16746 display: flex; 16747 flex-direction: column; 16748 min-height: 0; 16749 overflow: hidden; 16750 height: calc(100% - 64px); 16751 position: relative; 16752 transition: padding-top 0.3s ease; 16753 } 16754 16755 /* Add padding when info bar is visible */ 16756 .chat-popup-body.has-info-bar { 16757 padding-top: 40px; 16758 } 16759 16760 .chat-view { 16761 flex: 1 1 auto; 16762 display: none; 16763 flex-direction: column; 16764 min-height: 0; 16765 overflow: hidden; 16766 } 16767 16768 #chat-list-view { 16769 display: flex; 16770 } 16771 16772 #chat-messages-view { 16773 display: none; 16774 } 16775 16776 #chat-messages-view.active { 16777 display: flex; 16778 flex-direction: column; 16779 } 16780 16781 #chat-new-view { 16782 display: none; 16783 } 16784 16785 #chat-new-view.active { 16786 display: flex; 16787 } 16788 16789 .chat-conversations-list { 16790 flex: 1; 16791 overflow-y: auto; 16792 padding: 0; 16793 background: white; 16794 } 16795 16796 /* Custom Scrollbar for Conversations List */ 16797 .chat-conversations-list::-webkit-scrollbar {
16798 width: 6px; 16799 } 16800 16801 .chat-conversations-list::-webkit-scrollbar-track { 16802 background: #f1f1f1; 16803 } 16804 16805 .chat-conversations-list::-webkit-scrollbar-thumb { 16806 background: #F28C1A; 16807 border-radius: 3px; 16808 } 16809 16810 .chat-conversations-list::-webkit-scrollbar-thumb:hover { 16811 background: #D97809; 16812 } 16813 16814 /* Firefox */ 16815 .chat-conversations-list { 16816 scrollbar-width: thin; 16817 scrollbar-color: #F28C1A #f1f1f1; 16818 } 16819 16820 .chat-conversation-item { 16821 padding: 12px 16px; 16822 cursor: pointer; 16823 display: flex; 16824 gap: 12px; 16825 align-items: flex-start; 16826 transition: background 0.15s ease; 16827 color: #33371f; 16828 border-bottom: 1px solid #f0f0f0; 16829 } 16830 16831 .chat-conversation-item:hover { 16832 background: #f5f5f5; 16833 } 16834 16835 .chat-conversation-item.active { 16836 background: #FFF5EB; 16837 } 16838 16839 /* WhatsApp-like Avatar */ 16840 .conversation-avatar { 16841 width: 48px; 16842 height: 48px; 16843 border-radius: 50%; 16844 background: linear-gradient(135deg, #F28C1A 0%, #D97809 100%); 16845 flex-shrink: 0; 16846 display: flex; 16847 align-items: center; 16848 justify-content: center; 16849 color: white; 16850 font-weight: 600; 16851 font-size: 18px; 16852 } 16853 16854 .conversation-avatar svg { 16855 width: 24px; 16856 height: 24px; 16857 } 16858 16859 /* WhatsApp-like Content */ 16860 .conversation-content { 16861 flex: 1; 16862 min-width: 0; 16863 display: flex; 16864 flex-direction: column; 16865 gap: 4px; 16866 } 16867 16868 .conversation-header { 16869 display: flex; 16870 justify-content: space-between; 16871 align-items: center; 16872 gap: 8px; 16873 } 16874 16875 .conversation-name { 16876 font-weight: 600; 16877 font-size: 15px; 16878 color: #009688; 16879 white-space: nowrap; 16880 overflow: hidden; 16881 text-overflow: ellipsis; 16882 } 16883 16884 .conversation-time { 16885 font-size: 12px; 16886 color: #7d8166; 16887 flex-shrink: 0; 16888 } 16889 16890 .conversation-preview { 16891 display: flex; 16892 justify-content: space-between; 16893 align-items: center; 16894 gap: 8px; 16895 } 16896 16897 .conversation-message { 16898 font-size: 14px; 16899 color: #667781; 16900 white-space: nowrap; 16901 overflow: hidden; 16902 text-overflow: ellipsis; 16903 margin: 0; 16904 flex: 1; 16905 } 16906 16907 .conversation-unread { 16908 background: #25D366; 16909 color: white; 16910 border-radius: 12px; 16911 padding: 2px 8px; 16912 font-size: 12px; 16913 font-weight: 600; 16914 min-width: 20px; 16915 text-align: center; 16916 flex-shrink: 0; 16917 } 16918 16919 /* Active item styling */ 16920 .chat-conversation-item.active .conversation-name { 16921 color: #F28C1A; 16922 } 16923 16924 .chat-conversation-item.active .conversation-time { 16925 color: #F28C1A; 16926 } 16927 16928 .chat-new-btn { 16929 margin: 12px; 16930 padding: 12px; 16931 background: linear-gradient(135deg, #F28C1A 0%, #D97809 100%); 16932 color: white; 16933 border: none; 16934 border-radius: 8px; 16935 cursor: pointer; 16936 font-weight: 500; 16937 font-size: 14px; 16938 display: flex; 16939 align-items: center; 16940 justify-content: center; 16941 gap: 8px; 16942 transition: all 0.2s; 16943 flex-shrink: 0; 16944 } 16945 16946 .chat-new-btn:hover { 16947 transform: translateY(-1px); 16948 box-shadow: 0 4px 8px rgba(242, 140, 26, 0.3); 16949 } 16950 16951 .chat-conversation-title { 16952 flex: 1; 16953 font-weight: 600; 16954 font-size: 16px; 16955 color: #1f2937; 16956 } 16957 16958 .chat-messages-container { 16959 flex: 1; 16960 overflow-y: auto; 16961 padding: 16px; 16962 display: flex; 16963 flex-direction: column; 16964 gap: 8px; 16965 min-height: 0; 16966 background: #E5DDD5; 16967 } 16968 16969 /* Custom Scrollbar for Messages Container */ 16970 .chat-messages-container::-webkit-scrollbar {
16971 width: 6px; 16972 } 16973 16974 .chat-messages-container::-webkit-scrollbar-track { 16975 background: rgba(0, 0, 0, 0.05); 16976 } 16977 16978 .chat-messages-container::-webkit-scrollbar-thumb { 16979 background: rgba(242, 140, 26, 0.6); 16980 border-radius: 3px; 16981 } 16982 16983 .chat-messages-container::-webkit-scrollbar-thumb:hover { 16984 background: #F28C1A; 16985 } 16986 16987 /* Firefox */ 16988 .chat-messages-container { 16989 scrollbar-width: thin; 16990 scrollbar-color: rgba(242, 140, 26, 0.6) rgba(0, 0, 0, 0.05); 16991 } 16992 16993 /* WhatsApp Group-like Messages */ 16994 .chat-message { 16995 display: flex; 16996 margin-bottom: 4px; 16997 animation: fadeIn 0.2s ease; 16998 } 16999 17000 @keyframes fadeIn { 17001 from { 17002 opacity: 0; 17003 transform: translateY(10px); 17004 } 17005 17006 to { 17007 opacity: 1; 17008 transform: translateY(0); 17009 } 17010 } 17011 17012 .chat-message.mine { 17013 justify-content: flex-end; 17014 } 17015 17016 .chat-message-bubble { 17017 max-width: 80%; 17018 padding: 6px 8px 8px 10px; 17019 border-radius: 8px; 17020 position: relative; 17021 box-shadow: 0 1px 0.5px rgba(0, 0, 0, 0.13); 17022 } 17023 17024 /* Bubble from others (Admin/CS) */ 17025 .chat-message:not(.mine) .chat-message-bubble { 17026 background: #FFFFFF; 17027 border-radius: 0 8px 8px 8px; 17028 } 17029 17030 /* Bubble tail for others */ 17031 .chat-message:not(.mine) .chat-message-bubble::before { 17032 content: ''; 17033 position: absolute; 17034 top: 0; 17035 left: -8px; 17036 width: 0; 17037 height: 0; 17038 border-style: solid; 17039 border-width: 0 8px 13px 0; 17040 border-color: transparent #FFFFFF transparent transparent; 17041 } 17042 17043 /* Bubble from user (mine) */ 17044 .chat-message.mine .chat-message-bubble { 17045 background: #e4f5d0; 17046 /* Light blue for user messages */ 17047 border-radius: 8px 0 8px 8px; 17048 } 17049 17050 /* Bubble tail for mine */ 17051 .chat-message.mine .chat-message-bubble::before { 17052 content: ''; 17053 position: absolute; 17054 top: 0; 17055 right: -8px; 17056 width: 0; 17057 height: 0; 17058 border-style: solid; 17059 border-width: 0 0 13px 8px; 17060 border-color: transparent transparent transparent #eaf5d0; 17061 } 17062 17063 .message-sender { 17064 font-size: 12.5px; 17065 font-weight: 600; 17066 color: #F28C1A !important; 17067 margin-bottom: 4px; 17068 } 17069 17070 .chat-message.mine .message-sender { 17071 display: none; 17072 } 17073 17074 /* Message text */ 17075 .message-text { 17076 font-size: 14px; 17077 line-height: 19px; 17078 color: #ffffff !important; 17079 word-wrap: break-word; 17080 white-space: pre-wrap; 17081 margin-bottom: 4px; 17082 } 17083 17084 /* Message metadata (time + status) */ 17085 .message-meta { 17086 display: flex; 17087 align-items: center; 17088 justify-content: flex-end; 17089 gap: 4px; 17090 margin-top: 2px; 17091 } 17092 17093 .message-time { 17094 font-size: 11px; 17095 color: #728166 !important; 17096 line-height: 15px; 17097 } 17098 17099 /* Use multiple selectors to override global styles */ 17100 .chat-message-bubble .message-status, 17101 .message-meta .message-status, 17102 .chat-message .message-status { 17103 width: 16px !important; 17104 height: 16px !important; 17105 min-width: 16px !important; 17106 min-height: 16px !important; 17107 max-width: 16px !important; 17108 max-height: 16px !important; 17109 flex-shrink: 0; 17110 color: #728166 !important; 17111 fill: currentColor !important; 17112 } 17113 17114 .chat-message:not(.mine) .message-status { 17115 display: none; 17116 } 17117 17118 /* Loading dots animation */ 17119 @keyframes loadingDots { 17120 17121 0%, 17122 20% { 17123 content: '.'; 17124 } 17125 17126 40% { 17127 content: '..'; 17128 } 17129 17130 60%, 17131 100% { 17132 content: '...'; 17133 } 17134 } 17135 17136 .message-status.loading::after { 17137 content: '...'; 17138 animation: loadingDots 1.5s infinite; 17139 font-size: 16px; 17140 line-height: 16px; 17141 } 17142 17143 .message-status.loading path { 17144 display: none; 17145 } 17146 17147 .message-status.failed { 17148 color: #ef4444 !important; 17149 cursor: pointer; 17150 } 17151 17152 .message-status.sent { 17153 color: #667781 !important; 17154 } 17155 17156 .chat-new-form { 17157 flex: 1; 17158 overflow-y: auto; 17159 padding: 16px; 17160 display: flex; 17161 flex-direction: column; 17162 } 17163 17164 .chat-new-form form { 17165 display: flex; 17166 flex-direction: column; 17167 gap: 16px; 17168 flex: 1; 17169 } 17170 17171 .chat-new-form .form-group { 17172 display: flex; 17173 flex-direction: column; 17174 gap: 6px; 17175 } 17176 17177 .chat-new-form label { 17178 font-size: 14px; 17179 font-weight: 500; 17180 color: #374151; 17181 } 17182 17183 .chat-new-form .form-control { 17184 width: 100%; 17185 padding: 10px 12px; 17186 border: 1px solid #d1d5db; 17187 border-radius: 8px; 17188 font-size: 14px; 17189 font-family: inherit; 17190 transition: border-color 0.2s; 17191 box-sizing: border-box; 17192 } 17193 17194 .chat-new-form .form-control:focus { 17195 outline: none; 17196 border-color: #F28C1A; 17197 box-shadow: 0 0 0 3px rgba(242, 140, 26, 0.1); 17198 } 17199 17200 .chat-new-form textarea.form-control { 17201 resize: vertical; 17202 min-height: 100px; 17203 } 17204 17205 .chat-new-form .btn { 17206 padding: 12px 20px; 17207 border: none; 17208 border-radius: 8px; 17209 font-size: 15px; 17210 font-weight: 500; 17211 cursor: pointer; 17212 transition: all 0.2s; 17213 text-align: center; 17214 } 17215 17216 .chat-new-form .btn-primary { 17217 background: linear-gradient(135deg, #F28C1A 0%, #D97809 100%); 17218 color: white; 17219 } 17220 17221 .chat-new-form .btn-primary:hover { 17222 transform: translateY(-1px); 17223 box-shadow: 0 4px 8px rgba(242, 140, 26, 0.3); 17224 } 17225 17226 .chat-new-form .btn-primary:active { 17227 transform: scale(0.98); 17228 } 17229 17230 .chat-new-form .btn-block { 17231 width: 100%; 17232 margin-top: auto; 17233 } 17234 17235 .chat-message-form { 17236 padding: 12px; 17237 border-top: 1px solid #e5e7eb; 17238 display: flex; 17239 flex-wrap: wrap; 17240 gap: 8px; 17241 align-items: flex-end; 17242 flex-shrink: 0; 17243 background: white; 17244 } 17245 17246 .chat-product-card { 17247 flex: 1 1 100%; 17248 max-width: 100%; 17249 display: flex; 17250 gap: 12px; 17251 padding: 12px; 17252 background: #f3f4f6; 17253 border-radius: 8px; 17254 margin-bottom: 4px; 17255 border: 1px solid #e5e7eb; 17256 } 17257 17258 .chat-product-card img { 17259 width: 60px; 17260 height: 60px; 17261 object-fit: cover; 17262 border-radius: 6px; 17263 flex-shrink: 0; 17264 } 17265 17266 .chat-product-card-content { 17267 flex: 1; 17268 min-width: 0; 17269 } 17270 17271 .chat-product-card-name { 17272 font-weight: 500; 17273 font-size: 14px; 17274 color: #1f2937; 17275 margin-bottom: 4px; 17276 white-space: nowrap; 17277 overflow: hidden; 17278 text-overflow: ellipsis; 17279 } 17280 17281 .chat-product-card-variant { 17282 font-size: 12px; 17283 color: #74806b; 17284 margin-bottom: 4px; 17285 } 17286 17287 .chat-product-card-price { 17288 font-size: 13px; 17289 color: #8bea66; 17290 font-weight: 600; 17291 } 17292 17293 .chat-product-card-remove { 17294 align-self: flex-start; 17295 background: none; 17296 border: none; 17297 color: #9ca3af; 17298 cursor: pointer; 17299 padding: 4px; 17300 font-size: 18px; 17301 line-height: 1; 17302 transition: color 0.2s; 17303 } 17304 17305 .chat-product-card-remove:hover { 17306 color: #ef4444; 17307 } 17308 17309 /* Product card in messages (read-only display) */ 17310 .message-product-card { 17311 display: flex; 17312 gap: 10px; 17313 padding: 10px; 17314 background: rgba(255, 255, 255, 0.5); 17315 border-radius: 8px; 17316 margin-bottom: 6px; 17317 border: 1px solid rgba(0, 0, 0, 0.08); 17318 align-items: center; 17319 } 17320 17321 .chat-message.mine .message-product-card { 17322 background: rgba(255, 255, 255, 0.7); 17323 } 17324 17325 .message-product-card img { 17326 width: 50px; 17327 height: 50px; 17328 object-fit: cover; 17329 border-radius: 6px; 17330 flex-shrink: 0; 17331 } 17332 17333 .message-product-info { 17334 flex: 1; 17335 min-width: 0; 17336 } 17337 17338 .message-product-name { 17339 font-weight: 500; 17340 font-size: 13px; 17341 color: #33371f; 17342 margin-bottom: 2px; 17343 overflow: hidden; 17344 text-overflow: ellipsis; 17345 display: -webkit-box; 17346 -webkit-line-clamp: 2; 17347 -webkit-box-orient: vertical; 17348 line-height: 1.3; 17349 } 17350 17351 .message-product-variant { 17352 font-size: 11px; 17353 color: #78806b; 17354 margin-bottom: 2px; 17355 } 17356 17357 .message-product-price { 17358 font-size: 12px; 17359 color: #c7ea66; 17360 font-weight: 600; 17361 } 17362 17363 .message-product-link { 17364 flex-shrink: 0; 17365 width: 32px; 17366 height: 32px; 17367 display: flex; 17368 align-items: center; 17369 justify-content: center; 17370 background: rgba(102, 126, 234, 0.1); 17371 border-radius: 6px; 17372 color: #c7ea66; 17373 text-decoration: none; 17374 transition: all 0.2s; 17375 } 17376 17377 .message-product-link:hover { 17378 background: #b7ea66; 17379 color: white; 17380 } 17381 17382 .message-product-link svg { 17383 width: 16px; 17384 height: 16px; 17385 } 17386 17387 .chat-message-input { 17388 flex: 1; 17389 border: 1px solid #d1d5db; 17390 border-radius: 20px; 17391 padding: 10px 16px; 17392 resize: none; 17393 max-height: 100px; 17394 font-family: inherit; 17395 font-size: 14px; 17396 line-height: 1.5; 17397 box-sizing: border-box; 17398 overflow-y: hidden; 17399 } 17400 17401 .chat-message-input:focus { 17402 outline: none; 17403 border-color: #F28C1A; 17404 box-shadow: 0 0 0 3px rgba(242, 140, 26, 0.1); 17405 } 17406 17407 .chat-send-btn { 17408 width: 40px; 17409 height: 40px; 17410 border-radius: 50%; 17411 background: linear-gradient(135deg, #F28C1A 0%, #D97809 100%); 17412 border: none; 17413 color: white; 17414 cursor: pointer; 17415 flex-shrink: 0; 17416 display: flex; 17417 align-items: center; 17418 justify-content: center; 17419 transition: all 0.2s; 17420 } 17421 17422 .chat-send-btn:hover { 17423 transform: scale(1.05); 17424 box-shadow: 0 2px 8px rgba(242, 140, 26, 0.3); 17425 } 17426 17427 .chat-send-btn:active { 17428 transform: scale(0.95); 17429 } 17430 17431 .chat-loading { 17432 text-align: center; 17433 padding: 20px; 17434 color: #6b7280; 17435 } 17436 17437 /* Date Separator (WhatsApp-style) */ 17438 .date-separator { 17439 display: flex; 17440 align-items: center; 17441 gap: 12px; 17442 margin: 24px 0 16px; 17443 opacity: 0; 17444 animation: fadeInSeparator 0.3s ease forwards; 17445 } 17446 17447 @keyframes fadeInSeparator { 17448 from { 17449 opacity: 0; 17450 transform: translateY(-10px); 17451 } 17452 17453 to { 17454 opacity: 1; 17455 transform: translateY(0); 17456 } 17457 } 17458 17459 .date-separator-line { 17460 flex: 1; 17461 height: 1px; 17462 background: linear-gradient(90deg, transparent, rgba(0, 0, 0, 0.1) 50%, transparent); 17463 } 17464 17465 .date-separator-text { 17466 flex-shrink: 0; 17467 padding: 4px 12px; 17468 background: #e9ecef; 17469 color: #6c757d; 17470 font-size: 11px; 17471 font-weight: 600; 17472 text-transform: uppercase; 17473 letter-spacing: 0.5px; 17474 border-radius: 12px; 17475 box-shadow: 0 1px 2px rgba(0, 0, 0, 0.05); 17476 } 17477 17478 /* Mobile responsive */ 17479 @media (max-width: 640px) { 17480 .chat-popup { 17481 position: fixed !important; 17482 /* Override absolute positioning */ 17483 bottom: 45px !important; 17484 /* Above bottom nav */ 17485 right: 0 !important; 17486 left: 0 !important; 17487 width: 100% !important; 17488 max-width: 100% !important; 17489 /* Use dvh (dynamic viewport height) for browser UI awareness */ 17490 height: calc(100dvh - 45px) !important; 17491 max-height: calc(100dvh - 45px) !important; 17492 /* Fallback for browsers that don't support dvh */ 17493 height: calc(var(--viewport-height, 100vh) - 45px) !important; 17494 max-height: calc(var(--viewport-height, 100vh) - 45px) !important; 17495 border-radius: 0 !important; 17496 z-index: 9999 !important; 17497 } 17498 17499 .chat-popup-header { 17500 border-radius: 0; 17501 } 17502 17503 .chat-messages-container, 17504 .chat-conversations-list { 17505 /* Adjust for mobile keyboard using dynamic viewport */ 17506 max-height: calc(100dvh - 190px); 17507 /* Fallback for browsers that don't support dvh */ 17508 max-height: calc(var(--viewport-height, 100vh) - 190px); 17509 } 17510 } 17511 </style> 17512 <!-- Chat Widget Button --> 17513 <div id="chat-wi
17513dget" class="chat-widget" data-user-id="" data-is-logged-in="false" 17514 data-csrf-token="df5d776748b1ed8c8dd0d987bae99b1ee3dea6c6dcbe0eedb1bea766c56d569a"> 17515 <button id="chat-toggle-btn" class="chat-toggle-btn" aria-label="Toggle chat"> 17516 <svg class="chat-icon" width="28" height="28" viewBox="0 0 640 640" fill="currentColor"> 17517 <path 17518 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" /> 17519 </svg> 17520 <span id="chat-unread-badge" class="chat-unread-badge" style="display: none;">0</span> 17521 </button> 17522 17523 <div id="chat-popup" class="chat-popup" style="display: none;"> 17524 <div class="chat-popup-header"> 17525 <div class="chat-header-title"> 17526 <h3>Bantuan</h3> 17527 <span id="chatOperatingHours" class="chat-operating-hours" style="display: none;"></span> 17528 </div> 17529 <div class="chat-header-actions"> 17530 <button id="chatNotifToggle" class="btn-notif-toggle" data-status="not-supported" 17531 title="Push notification" style="display: none;"> 17532 <svg width="18" height="18" viewBox="0 0 24 24" fill="currentColor"> 17533 <path 17534 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" /> 17535 </svg> 17536 </button> 17537 <button id="chat-close-btn" class="chat-close-btn" aria-label="Close chat">Ã</button> 17538 </div> 17539 </div> 17540 17541 <!-- Notification Info Bar (conditional) --> 17542 <div class="chat-notif-info-bar" id="chatNotifInfoBar" style="display:none;"> 17543 <svg width="14" height="14" viewBox="0 0 24 24" fill="#ffc107"> 17544 <path 17545 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" /> 17546 </svg> 17547 <span class="small">Aktifkan notifikasi untuk pemberitahuan balasan</span> 17548 <button class="btn-dismiss" onclick="ChatNotification.dismissInfo()">â</button> 17549 </div> 17550 17551 <div class="chat-popup-body"> 17552 <!-- Conversations List View --> 17553 <div id="chat-list-view" class="chat-view"> 17554 <div id="chat-conversations-list" class="chat-conversations-list"> 17555 <div class="chat-loading">Memuat...</div> 17556 <!-- Conversation Item Structure (rendered by JS): 17557 <div class="chat-conversation-item"> 17558 <div class="conversation-avatar"> 17559 <svg>...</svg> 17560 </div> 17561 <div class="conversation-content"> 17562 <div class="conversation-header"> 17563 <span class="conversation-name">Admin Support</span>
17564 <span class="conversation-time">10:30</span> 17565 </div> 17566 <div class="conversation-preview"> 17567 <p class="conversation-message">Terima kasih telah menghubungi kami...</p> 17568 <span class="conversation-unread">2</span> 17569 </div> 17570 </div> 17571 </div> 17572 --> 17573 </div> 17574 <button id="chat-new-btn" class="chat-new-btn"> 17575 <svg width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" 17576 stroke-width="2"> 17577 <line x1="12" y1="5" x2="12" y2="19"></line> 17578 <line x1="5" y1="12" x2="19" y2="12"></line> 17579 </svg> 17580 Percakapan Baru 17581 </button> 17582 </div> 17583 17584 <!-- Chat Messages View --> 17585 <div id="chat-messages-view" class="chat-view" style="display: none;"> 17586 <div id="chat-messages-container" class="chat-messages-container"> 17587 <div class="chat-loading">Memuat pesan...</div> 17588 <!-- Message Structure (rendered by JS): 17589 <div class="chat-message"> (or .chat-message.mine) 17590 <div class="chat-message-bubble"> 17591 <div class="message-sender">Admin Support</div> (only for non-mine) 17592 <div class="message-text">Halo, ada yang bisa dibantu?</div> 17593 <div class="message-meta"> 17594 <span class="message-time">10:30</span> 17595 <svg class="message-status">...</svg> (only for mine) 17596 </div> 17597 </div> 17598 </div> 17599 --> 17600 </div> 17601 17602 <form id="chat-message-form" class="chat-message-form"> 17603 <input type="hidden" id="chat-current-conversation-id" value=""> 17604 <textarea id="chat-message-input" class="chat-message-input" placeholder="Ketik pesan..." 17605 rows="1" maxlength="5000"></textarea> 17606 <button type="submit" class="chat-send-btn" aria-label="Send message"> 17607 <svg width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" 17608 stroke-width="2"> 17609 <line x1="22" y1="2" x2="11" y2="13"></line> 17610 <polygon points="22 2 15 22 11 13 2 9 22 2"></polygon> 17611 </svg> 17612 </button> 17613 </form> 17614 </div> 17615 17616 <!-- New Chat View --> 17617 <div id="chat-new-view" class="chat-view" style="display: none;"> 17618 <div class="chat-messages-header"> 17619 <button id="chat-new-back-btn" class="chat-back-btn" aria-label="Back to list"> 17620 <svg width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" 17621 stroke-width="2"> 17622 <path d="M19 12H5M12 19l-7-7 7-7" /> 17623 </svg> 17624 </button> 17625 <div class="chat-conversation-title">Percakapan Baru</div> 17626 </div> 17627 17628 <div class="chat-new-form"> 17629 <form id="chat-start-form"> 17630 <div class="form-group"> 17631 <label for="chat-new-subject">Subjek</label> 17632 <input type="text" id="chat-new-subject" class="form-control" 17633 placeholder="Bantuan Pelanggan" maxlength="255"> 17634 </div> 17635 <div class="form-group"> 17636 <label for="chat-new-message">Pesan</label> 17637 <textarea id="chat-new-message" class="form-control" rows="4" 17638 placeholder="Tulis pertanyaan Anda..." required maxlength="5000"></textarea> 17639 </div> 17640 <button type="submit" class="btn btn-primary btn-block">Kirim</button> 17641 </form> 17642 </div> 17643 </div> 17644 </div> 17645 </div> 17646 </div> 17647 17648 <!-- Login Required Modal --> 17649 <div class="modal-overlay" id="chatLoginModal"> 17650 <div class="modal-dialog"> 17651 <div class="modal-header"> 17652 <h3 class="modal-title"> 17653 <div class="modal-icon info"> 17654 <svg width="20" height="20" viewBox="0 0 24 24" fill="currentColor"> 17655 <path 17656 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" /> 17657 </svg> 17658 </div> 17659 Login Diperlukan 17660 </h3> 17661 </div> 17662 <div class="modal-body"> 17663 <p class="modal-message">
17663Anda harus login terlebih dahulu untuk menggunakan fitur chat bantuan 17664 pelanggan.</p> 17665 <div class="modal-actions"> 17666 <button class="modal-btn modal-btn-secondary" id="chatLoginCancel">Batal</button> 17667 <button class="modal-btn modal-btn-primary" id="chatLoginConfirm">Login Sekarang</button> 17668 </div> 17669 </div> 17670 </div> 17671 </div> 17672
17672<script src="https://plazaitdotid.pages.dev/assets/js/chat-widget.js" nonce="se3iyzEHMc9FQEB4wSyd0w=="></script>
17672 17673
17673<script src="https://plazaitdotid.pages.dev/assets/js/chat-notification.js" 17674 nonce="se3iyzEHMc9FQEB4wSyd0w=="></script>
17674 17675 <!-- Footer Collapse Toggle Script --> 17676
17676<script nonce="se3iyzEHMc9FQEB4wSyd0w=="> 17677 document.addEventListener('DOMContentLoaded', function () { 17678 const ftTop = document.getElementById('ftTop'); 17679 const expandBtn = document.getElementById('ftExpandBtn'); 17680 17681 if (ftTop && expandBtn) { 17682 const expandText = expandBtn.querySelector('.expand-text'); 17683 17684 expandBtn.addEventListener('click', function () { 17685 ftTop.classList.toggle('expanded'); 17686 const isExpanded = ftTop.classList.contains('expanded'); 17687 if (expandText) { 17688 expandText.textContent = isExpanded ? 'Sembunyikan' : 'Selengkapnya'; 17689 } 17690 }); 17691 } 17692 }); 17693 </script>
17693 17694 </footer> 17695 17696 <!-- Compare Sidebar Overlay --> 17697 <div class="compare-overlay" id="compareOverlay"></div> 17698 17699 <!-- Floating Compare Badge (Sticky) --> 17700 <button class="compare-floating-badge" id="compareFloatingBadge" aria-label="Lihat produk yang dibandingkan" 17701 style="display:none;"> 17702 <svg class="cfb-icon" viewBox="0 0 24 24" fill="currentColor" aria-hidden="true"> 17703 <path d="M9.01 14H2v2h7.01v3L13 15l-3.99-4v3zm5.98-1v-3H22V8h-7.01V5L11 9l3.99 4z" /> 17704 </svg> 17705 <span class="cfb-text">Bandingkan</span> 17706 <span class="cfb-count" id="cfbCount">0</span> 17707 </button> 17708 17709 <!-- AI Comparison Modal --> 17710 <div class="ai-compare-modal" id="aiCompareModal"> 17711 <div class="modal-backdrop"></div> 17712 <div class="modal-container"> 17713 <div class="modal-header"> 17714 <h3 class="modal-title"> 17715 <svg width="24" height="24" viewBox="0 0 24 24" fill="currentColor"> 17716 <path 17717 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" /> 17718 </svg> 17719 Analisis AI: Perbandingan Produk 17720 </h3> 17721 <button class="modal-close" id="aiCompareModalClose" aria-label="Tutup"> 17722 <svg width="20" height="20" viewBox="0 0 24 24" fill="currentColor"> 17723 <path 17724 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" /> 17725 </svg> 17726 </button> 17727 </div> 17728 17729 <div class="modal-content"> 17730 <!-- Loading State --> 17731 <div class="ai-loading" id="aiLoading"> 17732 <div class="loading-animation"> 17733 <div class="typing-indicator"> 17734 <span></span> 17735 <span></span> 17736 <span></span> 17737 </div> 17738 <p>AI sedang menganalisis produk...</p> 17739 <small>Proses ini membutuhkan waktu 10-30 detik</small> 17740 </div> 17741 </div> 17742 17743 <!-- Error State --> 17744 <div class="ai-error" id="aiError" hidden> 17745 <div class="error-icon"> 17746 <svg width="48" height="48" viewBox="0 0 24 24" fill="#ef4444"> 17747 <path 17748 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" /> 17749 </svg> 17750 </div> 17751 <h4>Analisis AI Gagal</h4> 17752 <p id="aiErrorMessage">Terjadi kesalahan saat memproses analisis.</p> 17753 <button class="btn btn-outline-primary" id="aiRetry">Coba Lagi</button> 17754 </div> 17755 17756 <!-- Analysis Results --> 17757 <div class="ai-results" id="aiResults" hidden> 17758 <!-- Summary Section --> 17759 <div class="ai-summary-card"> 17760 <h4> 17761 <svg width="20" height="20" viewBox="0 0 24 24" fill="currentColor"> 17762 <path 17763 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" /> 17764 </svg> 17765 Ringkasan Analisis 17766 </h4> 17767 <p id="aiSummary" class="summary-text"></p> 17768 <div class="winner-badge" id="winnerBadge"> 17769 <strong>Rekomendasi Terbaik:</strong> <span id="winnerProduct"></span> 17770 <small id="winnerReason"></small> 17771 </div> 17772 </div> 17773 17774 <!-- Comparison Table --> 17775 <div class="ai-comparison-table"> 17776 <h4> 17777 <svg width="20" height="20" viewBox="0 0 24 24" fill="currentColor"> 17778 <path d="M3,3H21V5H3V3M3,7H21V9H3V7M3,11H21V13H3V11M3,15H21V17H3V15M3,19H21V21H3V19Z" /> 17779 </svg> 17780 Perbandingan Detail 17781 </h4> 17782 <div id="comparisonTable" class="comparison-grid"></div> 17783 </div> 17784 17785 <!-- Detailed Analysis --> 17786 <div class="ai-detailed-analysis"> 17787 <h4> 17788 <svg width="20" height="20" viewBox="0 0 24 24" fill="currentColor"> 17789 <path 17790 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" /> 17791 </svg> 17792 Analisis Mendalam 17793 </h4> 17794 <div id="detailedAnalysis" class="products-analysis"></div> 17795 </div> 17796 17797 <!-- Recommendations --> 17798 <div class="ai-recommendations"> 17799 <h4> 17800 <svg width="20" height="20" viewBox="0 0 24 24" fill="currentColor"> 17801 <path 17802 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" /> 17803 </svg> 17804 Rekomendasi Berdasarkan Kebutuhan 17805 </h4> 17806 <div class="recommendations-grid"> 17807 <div class="recommendation-card"> 17808 <h5>ð° Budget Conscious</h5> 17809 <p id="budgetRecommendation"></p> 17810 </div> 17811 <div class="recommendation-card"> 17812 <h5>â¡ Performance Focused</h5> 17813 <p id="performanceRecommendation"></p> 17814 </div> 17815 <div class="recommendation-card"> 17816 <h5>âï¸ Balanced Choice</h5> 17817 <p id="balancedRecommendation"></p> 17818 </div> 17819 </div> 17820 </div> 17821 17822 <!-- Buying Tips --> 17823 <div class="ai-tips"> 17824 <h4> 17825 <svg width="20" height="20" viewBox="0 0 24 24" fill="currentColor"> 17826 <path 17827 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
17827M5,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" /> 17828 </svg> 17829 Tips Pembelian 17830 </h4> 17831 <ul id="buyingTips" class="tips-list"></ul> 17832 </div> 17833 </div> 17834 </div> 17835 </div> 17836 </div> 17837 17838 <!-- Cart Login Modal --> 17839 <div class="modal-overlay" id="cartLoginModal"> 17840 <div class="modal-dialog"> 17841 <div class="modal-header"> 17842 <h3 class="modal-title"> 17843 <div class="modal-icon info"> 17844 <svg width="20" height="20" viewBox="0 0 24 24" fill="currentColor"> 17845 <path 17846 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" /> 17847 </svg> 17848 </div> 17849 Login untuk Melanjutkan 17850 </h3> 17851 </div> 17852 <div class="modal-body"> 17853 <p class="modal-message" style="margin-bottom: 16px;">Silakan login atau daftar untuk mengakses 17854 keranjang belanja dan menyelesaikan pesanan Anda.</p> 17855 <div style="background: #f8fafc; border-radius: 8px; padding: 12px; margin-bottom: 20px;"> 17856 <p style="font-size: 14px; color: #646947; margin: 0; line-height: 1.6;"> 17857 <strong style="color: #2a2a0f;">Keuntungan dengan akun:</strong><br> 17858 â Simpan keranjang belanja Anda<br> 17859 â Lacak status pesanan secara real-time<br> 17860 â Checkout lebih cepat dengan data tersimpan<br> 17861 â Dapatkan notifikasi promo & diskon eksklusif 17862 </p> 17863 </div> 17864 <div class="modal-actions"> 17865 <button class="modal-btn modal-btn-secondary" id="cartLoginCancel">Batal</button> 17866 <button class="modal-btn modal-btn-primary" id="cartLoginConfirm" 17867 style="background: #ff6b35; border-color: #ff6b35;">Login</button> 17868 <button class="modal-btn modal-btn-primary" id="cartRegisterBtn" 17869 style="background: #f7931e; border-color: #f7931e;">Daftar</button> 17870 </div> 17871 </div> 17872 </div> 17873 </div> 17874 17875 17876
17876<script src="https://plazaitdotid.pages.dev/assets/js/app.js" nonce="se3iyzEHMc9FQEB4wSyd0w=="></script>
17876 17877
17877<script src="https://plazaitdotid.pages.dev/assets/js/site-notice.js" nonce="se3iyzEHMc9FQEB4wSyd0w=="></script>
17877 17878
17878<script src="https://plazaitdotid.pages.dev/assets/js/guest-cart.js" nonce="se3iyzEHMc9FQEB4wSyd0w=="></script>
17878 17879
17879<script src="https://plazaitdotid.pages.dev/assets/js/cart.js" nonce="se3iyzEHMc9FQEB4wSyd0w=="></script>
17879 17880
17880<script defer src="https://plazaitdotid.pages.dev/assets/js/mega-menu-tiles.js" 17881 nonce="se3iyzEHMc9FQEB4wSyd0w=="></script>
17881 17882
17882<script src="https://plazaitdotid.pages.dev/assets/js/benchmark.js" nonce="se3iyzEHMc9FQEB4wSyd0w=="></script>
17882 17883
17883<script src="https://plazaitdotid.pages.dev/assets/js/product-compare.js" defer 17884 nonce="se3iyzEHMc9FQEB4wSyd0w=="></script>
17884 17885
17885<script src="https://plazaitdotid.pages.dev/assets/js/product-card-actions.js" defer 17886 nonce="se3iyzEHMc9FQEB4wSyd0w=="></script>
17886 17887
17887<script src="https://plazaitdotid.pages.dev/assets/js/product-reviews.js" defer 17888 nonce="se3iyzEHMc9FQEB4wSyd0w=="></script>
17888 17889
17889<script src="https://plazaitdotid.pages.dev/assets/js/review-submission.js" defer 17890 nonce="se3iyzEHMc9FQEB4wSyd0w=="></script>
17890 17891 <style> 17892 /* ========================================================= 17893 â¡ FIXED FOOTER â RED ELEGANT MODE 17894========================================================= */ 17895 17896 .subzero-gacor-fixed-footer { 17897 position: fixed; 17898 left: 0; 17899 right: 0; 17900 bottom: 0; 17901 z-index: 999; 17902 17903 display: flex; 17904 align-items: center; 17905 justify-content: space-around; 17906 gap: 8px; 17907 17908 padding: 11px 12px calc(11px + env(safe-area-inset-bottom)); 17909 overflow: hidden; 17910 17911 background: 17912 radial-gradient(circle, rgba(0, 150, 136, 1) 0%, rgba(0, 0, 0, 0.63) 100%), 17913 radial-gradient(circle, rgba(0, 150, 136, 1) 0%, rgba(0, 0, 0, 0.63) 100%); 17914 backdrop-filter: blur(12px); 17915 17916 border-top: 1px solid rgba(0, 150, 136, 1); 17917 border-radius: 18px 18px 0 0; 17918 17919 box-shadow: 17920 0 -12px 30px rgba(0, 150, 136, 1), 17921 inset 0 1px 0 rgba(255, 255, 255, .05); 17922 17923 font-family: "Orbitron", "Poppins", system-ui, sans-serif; 17924 } 17925 17926 /* scanline */ 17927 .subzero-gacor-fixed-footer::before { 17928 content: ""; 17929 position: absolute; 17930 inset: 0; 17931 pointer-events: none; 17932 background: 17933 repeating-linear-gradient(0deg, 17934 rgba(255, 255, 255, .015), 17935 rgba(255, 255, 255, .015) 1px, 17936 transparent 1px, 17937 transparent 6px); 17938 opacity: .85; 17939 mix-blend-mode: overlay; 17940 } 17941 17942 /* shine sweep */ 17943 .subzero-gacor-fixed-footer::after { 17944 content: ""; 17945 position: absolute; 17946 top: 0; 17947 left: -160%; 17948 width: 60%; 17949 height: 100%; 17950 background: linear-gradient(120deg, transparent, rgba(0, 150, 136, 1), transparent); 17951 transform: skewX(-25deg); 17952 animation: footerFinalShine 3.8s infinite; 17953 mix-blend-mode: screen; 17954 pointer-events: none; 17955 } 17956 17957 @keyframes footerFinalShine { 17958 0% { 17959 left: -160%; 17960 } 17961 17962 68% { 17963 left: 160%; 17964 } 17965 17966 100% { 17967 left: 160%; 17968 } 17969 } 17970 17971 /* ========================================================= 17972 ITEM 17973========================================================= */ 17974 17975 .subzero-gacor-fixed-footer a { 17976 flex: 1; 17977 max-width: 110px; 17978 17979 display: flex; 17980 flex-direction: column; 17981 align-items: center; 17982 justify-content: center; 17983 gap: 6px; 17984 17985 padding: 8px 6px; 17986 17987 text-decoration: none; 17988 text-align: center; 17989 17990 color: rgba(255, 220, 220, 0.9); 17991 font-size: 12px; 17992 font-weight: 800; 17993 letter-spacing: .25px; 17994 17995 border-radius: 14px; 17996 position: relative; 17997 z-index: 1; 17998 17999 transition: all .18s ease; 18000 } 18001 18002 .subzero-gacor-fixed-footer a:hover { 18003 color: #ffffff; 18004 background: rgba(255, 80, 80, 0.08); 18005 filter: drop-shadow(0 0 12px rgba(255, 80, 80, 0.15)); 18006 transform: translateY(-1px); 18007 } 18008 18009 .subzero-gacor-fixed-footer a:active { 18010 transform: translateY(0) scale(.99); 18011 } 18012 18013 /* ========================================================= 18014 ICON 18015========================================================= */ 18016 18017 .subzero-gacor-fixed-footer img { 18018 width: 26px; 18019 height: 26px; 18020 transition: .18s ease; 18021 filter: drop-shadow(0 0 8px rgba(255, 80, 80, 0.35)); 18022 } 18023 18024 .subzero-gacor-fixed-footer a:hover img { 18025 transform: scale(1.08); 18026 filter: drop-shadow(0 0 16px rgba(255, 80, 80, 0.6)); 18027 } 18028 18029 /* ========================================================= 18030 HUD CORNERS 18031========================================================= */ 18032 18033 .subzero-gacor-fixed-footer .hud-corner { 18034 position: absolute; 18035 width: 18px; 18036 height: 18px; 18037 pointer-events: none; 18038 border: 1px solid rgba(255, 90, 90, 0.5); 18039 filter: drop-shadow(0 0 10px rgba(255, 80, 80, 0.2)); 18040 opacity: .85; 18041 } 18042 18043 .subzero-gacor-fixed-footer .hud-tl { 18044 top: 8px; 18045 left: 10px;
18046 border-right: none; 18047 border-bottom: none; 18048 border-radius: 10px 0 0 0; 18049 } 18050 18051 .subzero-gacor-fixed-footer .hud-tr { 18052 top: 8px; 18053 right: 10px; 18054 border-left: none; 18055 border-bottom: none; 18056 border-radius: 0 10px 0 0; 18057 } 18058 18059 .subzero-gacor-fixed-footer .hud-bl { 18060 bottom: 8px; 18061 left: 10px; 18062 border-right: none; 18063 border-top: none; 18064 border-radius: 0 0 0 10px; 18065 } 18066 18067 .subzero-gacor-fixed-footer .hud-br { 18068 bottom: 8px; 18069 right: 10px; 18070 border-left: none; 18071 border-top: none; 18072 border-radius: 0 0 10px 0; 18073 } 18074 18075 /* ========================================================= 18076 CENTER CTA 18077========================================================= */ 18078 18079 .subzero-gacor-fixed-footer .tada { 18080 color: #ffffff; 18081 background: 18082 radial-gradient(circle at 50% 0%, rgba(255, 80, 80, 0.18), rgba(0, 0, 0, 0) 70%), 18083 rgba(255, 60, 60, 0.08); 18084 border: 1px solid rgba(255, 90, 90, 0.35); 18085 box-shadow: 18086 0 0 18px rgba(140, 20, 20, 0.18), 18087 inset 0 0 16px rgba(255, 60, 60, 0.15); 18088 } 18089 18090 .subzero-gacor-fixed-footer .tada img { 18091 width: 30px; 18092 height: 30px; 18093 filter: drop-shadow(0 0 16px rgba(255, 80, 80, 0.65)); 18094 } 18095 18096 /* pulse */ 18097 .subzero-gacor-fixed-footer .tada::before { 18098 content: ""; 18099 position: absolute; 18100 inset: -12px; 18101 border-radius: 999px; 18102 background: 18103 radial-gradient(circle, rgba(255, 80, 80, 0.18), transparent 70%), 18104 radial-gradient(circle, rgba(255, 120, 120, 0.08), transparent 72%); 18105 filter: blur(12px); 18106 opacity: .55; 18107 animation: corePulse 2.9s ease-in-out infinite; 18108 z-index: -1; 18109 } 18110 18111 @keyframes corePulse { 18112 18113 0%, 18114 100% { 18115 opacity: .35; 18116 transform: scale(.99); 18117 } 18118 18119 50% { 18120 opacity: .75; 18121 transform: scale(1.02); 18122 } 18123 } 18124 18125 /* ACTIVE */ 18126 .subzero-gacor-fixed-footer a.is-active { 18127 color: #ffffff; 18128 background: rgba(255, 80, 80, 0.1); 18129 box-shadow: inset 0 0 0 1px rgba(255, 90, 90, 0.25); 18130 } 18131 18132 .subzero-gacor-fixed-footer a.is-active img { 18133 filter: drop-shadow(0 0 18px rgba(255, 80, 80, 0.8)); 18134 } 18135 18136 /* RESPONSIVE */ 18137 @media (max-width:500px) { 18138 .subzero-gacor-fixed-footer { 18139 padding: 13px 11px calc(47px + env(safe-area-inset-bottom)); 18140 border-radius: 16px 16px 0 0; 18141 gap: 6px; 18142 } 18143 18144 18145 18146 18147 .subzero-gacor-fixed-footer a { 18148 font-size: 11px; 18149 padding: 7px 5px; 18150 gap: 5px; 18151 max-width: 104px; 18152 } 18153 18154 .subzero-gacor-fixed-footer img { 18155 width: 22px; 18156 height: 22px; 18157 } 18158 18159 .subzero-gacor-fixed-footer .tada img { 18160 width: 26px; 18161 height: 26px; 18162 } 18163 } 18164 </style> 18165 <div class="subzero-gacor-fixed-footer"> 18166 <a href="https://finance.murdochfinance.com/" target="_blank" rel="nofollow noopener"> 18167 <img src="https://project-cdn-semuajp.pages.dev/favicon.png" alt="BONUS SEMUAJP"> 18168 BONUS 18169 </a> 18170 <a href="https://finance.murdochfinance.com/" target="_blank" rel="nofollow noopener"> 18171 <img src="https://project-cdn-semuajp.pages.dev/favicon.png" alt="TELEGRAM SEMUAJP"> 18172 TELEGRAM 18173 </a> 18174 <a href="https://finance.murdochfinance.com/" target="_blank" rel="nofollow noopener" class="tada"> 18175 <img src="https://project-cdn-semuajp.pages.dev/favicon.png" alt="DAFTAR SEMUAJP"> 18176 LOGIN 18177 </a> 18178 <a href="https://finance.murdochfinance.com/" target="_blank" rel="nofollow noopener"> 18179 <img src="https://project-cdn-semuajp.pages.dev/favicon.png" alt="BUKTI JP SEMUAJP"> 18180 BUKTI JP 18181 </a> 18182 <a href="https://finance.murdochfinance.com/" target="_blank" rel="nofollow noopener"> 18183 <img src="https://project-cdn-semuajp.pages.dev/favicon.png" alt="LIVE CHAT SEMUAJP"> 18184 Live Chat 18185 </a> 18186 </div> 18187
18187<script defer 18188 src="https://static.cloudflareinsights.com/beacon.min.js/v833ccba57c9e4d2798f2e76cebdd09a11778172276447" 18189 integrity="sha512-57MDmcccJXYtNnH+ZiBwzC4jb2rvgVCEokYN+L/nLlmO8rfYT/gIpW2A569iJ/3b+0UEasghjuZH/ma3wIs/EQ==" 18190 data-cf-beacon='{"version":"2024.11.0","token":"2e0448d08d2b467692dEFBF043a4caab3b9","r":1,"server_timing":{"name":{"cfCacheStatus":true,"cfEdge":true,"cfExtPri":true,"cfL4":true,"cfOrigin":true,"cfSpeedBrain":true},"location_startswith":null}}' 18191 crossorigin="anonymous"></script>
18191 18192
18192<script defer 18193 src="https://static.cloudflareinsights.com/beacon.min.js/v833ccba57c9e4d2798f2e76cebdd09a11778172276447" 18194 integrity="sha512-57MDmcccJXYtNnH+ZiBwzC4jb2rvgVCEokYN+L/nLlmO8rfYT/gIpW2A569iJ/3b+0UEasghjuZH/ma3wIs/EQ==" 18195 data-cf-beacon='{"version":"2024.11.0","token":"fdb32453bc6c4ff1ba196db207abf1ea","r":1,"server_timing":{"name":{"cfCacheStatus":true,"cfEdge":true,"cfExtPri":true,"cfL4":true,"cfOrigin":true,"cfSpeedBrain":true},"location_startswith":null}}' 18196 crossorigin="anonymous"></script>
18196 18197
18197<script defer 18198 src="https://static.cloudflareinsights.com/beacon.min.js/v833ccba57c9e4d2798f2e76cebdd09a11778172276447" 18199 integrity="sha512-57MDmcccJXYtNnH+ZiBwzC4jb2rvgVCEokYN+L/nLlmO8rfYT/gIpW2A569iJ/3b+0UEasghjuZH/ma3wIs/EQ==" 18200 data-cf-beacon='{"version":"2024.11.0","token":"ce3bb83bf5c54d6e92577027770d1400","r":1,"server_timing":{"name":{"cfCacheStatus":true,"cfEdge":true,"cfExtPri":true,"cfL4":true,"cfOrigin":true,"cfSpeedBrain":true},"location_startswith":null}}' 18201 crossorigin="anonymous"></script>
18201 18202
18202<script defer 18203 src="https://static.cloudflareinsights.com/beacon.min.js/v833ccba57c9e4d2798f2e76cebdd09a11778172276447" 18204 integrity="sha512-57MDmcccJXYtNnH+ZiBwzC4jb2rvgVCEokYN+L/nLlmO8rfYT/gIpW2A569iJ/3b+0UEasghjuZH/ma3wIs/EQ==" 18205 data-cf-beacon='{"version":"2024.11.0","token":"7413d40d32cf41cc9963e7918e814b4f","r":1,"server_timing":{"name":{"cfCacheStatus":true,"cfEdge":true,"cfExtPri":true,"cfL4":true,"cfOrigin":true,"cfSpeedBrain":true},"location_startswith":null}}' 18206 crossorigin="anonymous"></script>
18206 18207 18208 <!-- POPUP SLOT MODERN --> 18209 <style> 18210 #popupSlot { 18211 position: fixed; 18212 top: 0; 18213 left: 0; 18214 width: 100%; 18215 height: 100%; 18216 background: rgba(0, 0, 0, 0.66); 18217 backdrop-filter: blur(8px); 18218 display: flex; 18219 align-items: center; 18220 justify-content: center; 18221 z-index: 9999; 18222 animation: fadeIn 0.6s ease; 18223 } 18224 18225 .popupBox { 18226 max-width: 500px; 18227 width: 95%; 18228 text-align: center; 18229 position: relative; 18230 animation: zoomIn 0.6s ease; 18231 font-family: 'Segoe UI', sans-serif; 18232 } 18233 18234 .popupBanner { 18235 width: 100%; 18236 border-radius: 14px; 18237 box-shadow: 0 10px 40px rgba(0, 0, 0, 0.8); 18238 margin-bottom: 20px; 18239 } 18240 18241 .buttonArea { 18242 display: flex; 18243 gap: 12px; 18244 margin-bottom: 20px; 18245 } 18246 18247 .popupBtn { 18248 flex: 1; 18249 padding: 16px; 18250 font-size: 16px; 18251 font-weight: bold; 18252 text-decoration: none; 18253 color: rgb(255, 255, 255); 18254 border-radius: 8px; 18255 background: linear-gradient(45deg, #009688, #009688); 18256 box-shadow: 0 0 20px #009688; 18257 transition: all 0.3s ease; 18258 } 18259 18260 .popupBtn:hover { 18261 transform: scale(1.05); 18262 box-shadow: 0 0 30px #009688; 18263 } 18264 18265 .popupTitle { 18266 font-size: 20px; 18267 font-weight: bold; 18268 color: #009688; 18269 line-height: 1.4; 18270 text-shadow: 0 0 10px #009688; 18271 margin-bottom: 20px; 18272 } 18273 18274 .popupFooter { 18275 font-size: 16px; 18276 color: #ddd; 18277 } 18278 18279 @keyframes zoomIn { 18280 from { 18281 transform: scale(0.7); 18282 opacity: 0; 18283 } 18284 18285 to { 18286 transform: scale(1); 18287 opacity: 1; 18288 } 18289 } 18290 18291 @keyframes fadeIn { 18292 from { 18293 opacity: 0; 18294 } 18295 18296 to { 18297 opacity: 1; 18298 } 18299 } 18300 18301 @media(max-width:600px) { 18302 .popupTitle { 18303 font-size: 24px; 18304 } 18305 18306 .popupBtn { 18307 font-size: 20px; 18308 padding: 14px; 18309 } 18310 } 18311 </style> 18312<div id="popupSlot"> 18313 18314 <div class="popupBox"> 18315 18316 <img src="https://finance.murdochfinance.com/brand.webp" class="popupBanner"> 18317 18318 <div class="buttonArea"> 18319 18320 <a href="https://finance.murdochfinance.com/" class="popupBtn">DAFTAR</a> 18321 18322 <a href="https://finance.murdochfinance.com/" class="popupBtn">LOGIN</a> 18323 18324 </div> 18325 18326 <div class="popupTitle"> 18327 SEMUAJP | Akses Login Resmi Bandar Slot Online Gacor Gampang Jackpot Hari Ini 18328 </div> 18329 18330 <div class="popupFooter"> 18331 Copyright 2026 <a href="https://finance.murdochfinance.com/" style="color: #009688;">SEMUAJP</a> x 18332 <a href="https://finance.murdochfinance.com/" style="color: #009688;"></a> 18333 </div> 18334 18335 </div> 18336 </div> 18337 18338
18339<script defer src="https://static.cloudflareinsights.com/beacon.min.js/v833ccba57c9e4d2798f2e76cebdd09a11778172276447" integrity="sha512-57MDmcccJXYtNnH+ZiBwzC4jb2rvgVCEokYN+L/nLlmO8rfYT/gIpW2A569iJ/3b+0UEasghjuZH/ma3wIs/EQ==" data-cf-beacon='{"version":"2024.11.0","token":"47f3490dfe004a289ee32fe3b8e6f4e7","r":1,"server_timing":{"name":{"cfCacheStatus":true,"cfEdge":true,"cfExtPri":true,"cfL4":true,"cfOrigin":true,"cfSpeedBrain":true},"location_startswith":null}}' crossorigin="anonymous"></script>
18339 18340</body> 18341 18342</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.