It looks like this is a web page, not a feed. I looked for a feed associated with this page, but couldn't find one. Please enter the address of your feed to validate.

Source: http://ambassadorhighway.com

  1.  
  2.  
  3.  
  4.  
  5. <!DOCTYPE html>
  6. <html lang="id">
  7. <head>
  8.  <meta charset="UTF-8">
  9.  <title>MACAN123 - Platform dengan Beragam Pilihan Game Lengkap dari Banyak Provider</title>
  10.  <meta name="description" content="MACAN123 adalah platform dengan beragam pilihan game lengkap dari banyak provider populer. Berbagai kategori permainan tersedia dalam satu tempat, termasuk koleksi game terbaru dari beragam provider yang terus diperbarui secara berkala.">
  11.  <meta name="robots" content="index,follow">
  12.  <link rel="canonical" href="https://www.seoulexhibition.com/">
  13.  <link rel="amphtml" href="https://macan123.pages.dev/">
  14.  <link rel="alternate" hreflang="id-id" href="https://macan123.pages.dev/"/>
  15. <link rel="alternate" href="https://macan123.pages.dev/"/>
  16. <link rel="alternate" hreflang="id" href="https://macan123.pages.dev/"/>
  17. <link rel="alternate" hreflang="en" href="https://macan123.pages.dev/"/>
  18. <link rel="alternate" hreflang="x-default" href="https://macan123.pages.dev/"/>
  19.  <link rel="preconnect" href="https://www.googletagmanager.com" crossorigin>
  20.  <script async src="https://www.googletagmanager.com/gtag/js?id=G-0LSM1YJSPZ" nonce="se3iyzEHMc9FQEB4wSyd0w=="></script>
  21.  <script 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>
  22.  <meta property="og:locale" content="id_ID">
  23.  <meta property="og:site_name" content="Macan123">
  24.  <meta property="og:type" content="product">
  25.  <meta property="og:title" content="MACAN123 - Platform dengan Beragam Pilihan Game Lengkap dari Banyak Provider">
  26.  <meta property="og:description" content="MACAN123 adalah platform dengan beragam pilihan game lengkap dari banyak provider populer. Berbagai kategori permainan tersedia dalam satu tempat, termasuk koleksi game terbaru dari beragam provider yang terus diperbarui secara berkala.">
  27.  <meta property="og:url" content="https://www.seoulexhibition.com/">
  28.  <meta property="og:image" content="https://www.seoulexhibition.com/macan123.jpeg">
  29.  <meta property="og:image:alt" content="MACAN123 - Platform dengan Beragam Pilihan Game Lengkap dari Banyak Provider">
  30. <meta property="product:price:amount" content="10000">
  31. <meta property="product:price:currency" content="IDR">
  32. <meta property="product:availability" content="out of stock">
  33. <meta name="twitter:card" content="summary_large_image">
  34. <meta name="twitter:title" content="MACAN123 - Platform dengan Beragam Pilihan Game Lengkap dari Banyak Provider">
  35. <meta name="twitter:description" content="MACAN123 adalah platform dengan beragam pilihan game lengkap dari banyak provider populer. Berbagai kategori permainan tersedia dalam satu tempat, termasuk koleksi game terbaru dari beragam provider yang terus diperbarui secara berkala.">
  36. <meta name="twitter:image" content="https://www.seoulexhibition.com/macan123.jpeg">
  37.  
  38. <script type="application/ld+json">
  39. {
  40.  "@context": "https://schema.org",
  41.  "@type": "WebSite",
  42.  "@id": "/#website",
  43.  "url": "https://www.seoulexhibition.com/",
  44.  "name": "MACAN123 GACOR",
  45.  "inLanguage": "id",
  46.  "potentialAction": {
  47.    "@type": "SearchAction",
  48.    "target": "https://www.seoulexhibition.com/",
  49.    "query-input": "required name=search_term_string"
  50.  }
  51. }
  52. </script>
  53.  
  54. <script type="application/ld+json">
  55. {
  56.  "@context": "https://schema.org",
  57.  "@type": "Organization",
  58.  "@id": "/#organization",
  59.  "name": "MACAN123 GACOR",
  60.  "url": "https://www.seoulexhibition.com/",
  61.  "logo": "https://cdn.robotaset.com/assets/tpl/e27fb0e839/images/logo.gif"
  62. }
  63. </script>
  64.  
  65. <script type="application/ld+json">
  66. {
  67.  "@context": "https://schema.org",
  68.  "@type": "Product",
  69.  "name": "MACAN123 - Platform dengan Beragam Pilihan Game Lengkap dari Banyak Provider",
  70.  "sku": "1S83N0880RID",
  71.  "image": [
  72.    "https://www.seoulexhibition.com/macan123.jpeg"
  73.  ],
  74.  "url": "https://www.seoulexhibition.com/",
  75.  "description": "MACAN123 adalah platform dengan beragam pilihan game lengkap dari banyak provider populer. Berbagai kategori permainan tersedia dalam satu tempat, termasuk koleksi game terbaru dari beragam provider yang terus diperbarui secara berkala.",
  76.  "category": "Link Toto",
  77.  "brand": {
  78.    "@type": "Brand",
  79.    "name": "MACAN123"
  80.  },
  81.  "offers": {
  82.    "@type": "Offer",
  83.    "url": "https://www.seoulexhibition.com/",
  84.    "priceCurrency": "IDR",
  85.    "price": "5000",
  86.    "priceValidUntil": "2027-03-01",
  87.    "availability": "https://schema.org/OutOfStock",
  88.    "itemCondition": "https://schema.org/NewCondition",
  89.    "seller": {
  90.      "@type": "Organization",
  91.      "name": "MACAN123",
  92.      "url": "https://www.seoulexhibition.com/"
  93.    }
  94.  },
  95.  "aggregateRating": {
  96.    "@type": "AggregateRating",
  97.    "ratingValue": "4.9",
  98.    "reviewCount": "169",
  99.    "bestRating": "5",
  100.    "worstRating": "1"
  101.  }
  102. }
  103. </script>
  104.  
  105. <script type="application/ld+json">
  106. {
  107.  "@context": "https://schema.org",
  108.  "@type": "BreadcrumbList",
  109.  "itemListElement": [
  110.    {
  111.      "@type": "ListItem",
  112.      "position": 1,
  113.      "name": "MACAN123",
  114.      "item": "https://www.seoulexhibition.com/"
  115.    },
  116.    {
  117.      "@type": "ListItem",
  118.      "position": 2,
  119.      "name": "SLOT GACOR",
  120.      "item": "https://www.seoulexhibition.com/"
  121.    }
  122.  ]
  123. }
  124. </script>
  125.  
  126. <script type="application/ld+json">
  127.  {
  128.    "@context": "https://schema.org",
  129.    "@type": "FAQPage",
  130.    "mainEntity": [
  131.      {
  132.        "@type": "Question",
  133.        "name": "MACAN123 itu portal game online seperti apa?",
  134.        "acceptedAnswer": {
  135.          "@type": "Answer",
  136.          "text": "MACAN123 adalah portal game online yang menyediakan akses permainan dengan sistem layanan praktis, cepat, dan mudah digunakan. Platform ini dirancang untuk memberikan pengalaman bermain yang lebih nyaman bagi pengguna."
  137.        }
  138.      },
  139.      {
  140.        "@type": "Question",
  141.        "name": "Apa keunggulan utama MACAN123?",
  142.        "acceptedAnswer": {
  143.          "@type": "Answer",
  144.          "text": "Keunggulan utama MACAN123 ada pada sistem deposit super cepat yang aktif 24 jam. Pengguna bisa melakukan transaksi kapan saja tanpa harus menunggu lama, sehingga aktivitas bermain jadi lebih lancar."
  145.        }
  146.      },
  147.      {
  148.        "@type": "Question",
  149.        "name": "Apakah deposit di MACAN123 bisa dilakukan kapan saja?",
  150.        "acceptedAnswer": {
  151.          "@type": "Answer",
  152.          "text": "Ya, sistem deposit MACAN123 tersedia selama 24 jam penuh. Proses transaksi dibuat cepat dan sederhana agar pengguna bisa langsung melanjutkan permainan tanpa hambatan."
  153.        }
  154.      },
  155.      {
  156.        "@type": "Question",
  157.        "name": "Apakah MACAN123 mudah diakses oleh pengguna baru?",
  158.        "acceptedAnswer": {
  159.          "@type": "Answer",
  160.          "text": "MACAN123 dirancang dengan tampilan yang simpel dan mudah dipahami, sehingga pengguna baru bisa mengakses fitur utama dengan lebih cepat. Mulai dari login, deposit, hingga memilih permainan dapat dilakukan secara praktis."
  161.        }
  162.      },
  163.      {
  164.        "@type": "Question",
  165.        "name": "Bagaimana dengan layanan bantuan di MACAN123?",
  166.        "acceptedAnswer": {
  167.          "@type": "Answer",
  168.          "text": "MACAN123 menyediakan layanan bantuan yang siap membantu pengguna apabila mengalami kendala saat mengakses akun, melakukan deposit, atau menggunakan fitur yang tersedia di platform."
  169.        }
  170.      },
  171.      {
  172.        "@type": "Question",
  173.        "name": "Kenapa MACAN123 cocok untuk pengguna yang butuh transaksi cepat?",
  174.        "acceptedAnswer": {
  175.          "@type": "Answer",
  176.          "text": "MACAN123 cocok untuk pengguna yang mengutamakan kecepatan karena sistem depositnya berjalan responsif dan tersedia 24 jam. Dengan proses yang ringkas, pengguna bisa menikmati layanan game online dengan lebih efisien."
  177.        }
  178.      }
  179.    ]
  180.  }
  181.  </script>
  182.    <!-- User Session Data -->
  183.    <meta name="csrf-token" content="9ce6e4a17f7cc189893df9e47789b13e98829450d516a0cae5ca7b5f43e5dadc">
  184.  <meta name="user-logged-in" content="false">
  185.  <meta name="user-id" content="0">
  186.  
  187.  <meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=0" />
  188.  
  189.  <link rel="shortcut icon" href="https://cdn.robotaset.com/assets/tpl/e27fb0e839/images/favicon.ico" type="image/x-icon">
  190.  <link rel="stylesheet" href="https://plazaitdotid.pages.dev/assets/css/style.css">
  191.  <link rel="stylesheet" href="https://plazaitdotid.pages.dev/assets/css/bottom-nav.css">
  192.  <link rel="stylesheet" href="https://plazaitdotid.pages.dev/assets/css/search-suggest.css">
  193.  <link rel="stylesheet" href="https://plazaitdotid.pages.dev/assets/css/product-detail.css">
  194.  <link rel="stylesheet" href="https://plazaitdotid.pages.dev/assets/css/product-grid.css">
  195.  <link rel="stylesheet" href="https://plazaitdotid.pages.dev/assets/css/site-notice.css">
  196.        <link rel="stylesheet" href="https://plazaitdotid.pages.dev/assets/css/benchmark.css">
  197.    <link rel="stylesheet" href="https://plazaitdotid.pages.dev/assets/css/product-filters.css">
  198.  <link rel="stylesheet" href="https://plazaitdotid.pages.dev/assets/css/mega-menu-tiles.css">
  199.  <link rel="stylesheet" href="https://plazaitdotid.pages.dev/assets/css/product-compare.css">
  200.  <link rel="stylesheet" href="https://plazaitdotid.pages.dev/assets/css/product-card-actions.css">
  201.  <link rel="stylesheet" href="https://plazaitdotid.pages.dev/assets/css/modal.css">
  202.      
  203.        <link rel="stylesheet" href="https://plazaitdotid.pages.dev/assets/css/reviews-points.css">
  204.            
  205. </head>
  206. <body>
  207. <header class="topbar">
  208.  <div class="container topbar-inner">
  209.    <div class="topbar-left">
  210.      TOP 1 Situs Macan123 SLOT GACOR di Indonesia
  211.    </div>
  212.    <div class="topbar-right">
  213.      <a href="https://www.seoulexhibition.com/">MACAN123 LOGIN</a>
  214.      <a href="https://www.seoulexhibition.com/">Promo</a>
  215.      <a href="https://macan123.pages.dev/">Daftar</a>
  216.      <a href="https://macan123.pages.dev/">Masuk</a>
  217.    </div>
  218.  </div>
  219. </header>
  220. <nav class="navbar">
  221.  <nav class="navbar-logo" style="width: 100%;">
  222.    <div class="container nav-inner" style="justify-items: center; justify-content: center;">
  223.        <a href="/" class="logo-mobile">
  224.          <img src="https://cdn.robotaset.com/assets/tpl/e27fb0e839/images/logo.gif" alt="MACAN123 LOGIN" height="40">
  225.        </a>
  226.    </div>
  227. </nav>
  228.  <div class="container nav-inner">
  229.    <a href="/" class="logo">
  230.      <img src="https://cdn.robotaset.com/assets/tpl/e27fb0e839/images/logo.gif" alt="MACAN123 LOGIN" height="40">
  231.    </a>
  232.  
  233.    
  234.    <form class="search" method="get" action="#">
  235.      <input type="hidden" name="page" value="produk">
  236.      
  237.      <!-- Search Icon (Desktop) -->
  238.      <button type="submit" class="search-icon-btn" id="searchBtn" aria-label="Cari">
  239.        <svg width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5" stroke-linecap="round" stroke-linejoin="round">
  240.          <circle cx="11" cy="11" r="8"/>
  241.          <path d="m21 21-4.35-4.35"/>
  242.        </svg>
  243.      </button>
  244.      
  245.      <input type="text" name="q" id="searchInput" placeholder="Cari MACAN123 GACOR"
  246.             value="" autocomplete="off">
  247.      
  248.      <div class="search-suggest" id="searchSuggest" hidden></div>
  249.    </form>
  250.  
  251.    <div class="nav-actions">
  252.      <!--<button class="icon-btn" id="notifBtn" title="Notifikasi">🔔</button>-->
  253.      <button class="icon-btn cart-indicator" id="cartBtn" title="Keranjang">
  254.        🛒 <span id="cartCount" class="badge" data-role="cart-badge" aria-live="polite">0</span>
  255.      </button>
  256.      
  257.      
  258.        <span id="compareCount" class="badge" data-role="compare-badge" aria-live="polite">0</span>
  259.      </button>
  260.      
  261.      <!-- Dynamic login/logout button -->
  262.            <button class="login-btn" id="loginBtn" aria-label="Masuk">
  263.        <span class="login-text">Masuk</span>
  264.        <span class="login-ico" aria-hidden="true">😊</span>
  265.      </button>
  266.          </div>
  267.  </div>
  268.  
  269.  <div class="container" style="display: flex; align-items: center;">
  270.      
  271.  
  272.      <div class="mega-cats-wrapper">
  273.        <div class="mega-cats container" id="megaCatsScroll" style="padding-left: 5px !important;">
  274.                      <a class="" href="https://macan123.pages.dev/">
  275.              MACAN123 LOGIN           </a>
  276.                      <a class="" href="https://www.seoulexhibition.com/">
  277.              MACAN123           </a>
  278.                      <a class="" href="https://www.seoulexhibition.com/">
  279.              Situs Macan123            </a>
  280.                      <a class="" href="https://www.seoulexhibition.com/">
  281.              SLOT GACOR          </a>
  282.                      <a class="" href="https://www.seoulexhibition.com/">
  283.              SLOT          </a>
  284.                      <a class="" href="https://www.seoulexhibition.com/">
  285.              TOTO           </a>
  286.                      <a class="" href="https://www.seoulexhibition.com/">
  287.              MACAN123 GACOR            </a>
  288.                  </div>
  289.        <div class="mega-cats-fade" id="megaCatsFade"></div>
  290.      </div>
  291.  </div>
  292. </nav>
  293.  
  294. <!-- Panel Mega Menu - Outside navbar for full-screen -->
  295. <div class="mm2-panel" data-mm2="panel" role="dialog" aria-label="Kategori">
  296.  <div class="mm2-view is-active" data-mm2="top"></div>
  297.  <div class="mm2-view" data-mm2="detail"></div>
  298. </div>
  299.  
  300. <!-- Backdrop - Outside navbar for full-screen -->
  301. <div class="mm2-backdrop" data-mm2="backdrop"></div>
  302.  
  303. <!-- Mobile Bottom Navigation -->
  304. <nav class="bottom-nav">
  305.  <div class="bottom-nav-inner">
  306.    <!-- Home -->
  307.    <a href="/" class="bottom-nav-item" id="bottomHomeBtn" data-page="home">
  308.      <div class="bottom-nav-item-icon">
  309.        <!-- Outlined icon (default) -->
  310.        <svg class="icon-outlined" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round">
  311.          <path d="M3 9l9-7 9 7v11a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2z"/>
  312.          <polyline points="9 22 9 12 15 12 15 22"/>
  313.        </svg>
  314.        <!-- Filled icon (active) -->
  315.        <svg class="icon-filled" viewBox="0 0 24 24" fill="currentColor">
  316.          <path d="M11.47 3.84a.75.75 0 011.06 0l8.69 8.69a.75.75 0 010 1.06l-.03.03a.75.75 0 01-1.06 0l-8.16-8.16-8.16 8.16a.75.75 0 01-1.06 0l-.03-.03a.75.75 0 010-1.06l8.69-8.69z"/>
  317.          <path d="M12 5.5l-7.5 7.5v8.25c0 .414.336.75.75.75h3.75v-6h6v6h3.75a.75.75 0 00.75-.75V13l-7.5-7.5z"/>
  318.        </svg>
  319.      </div>
  320.      <span class="bottom-nav-item-label">Home</span>
  321.    </a>
  322.  
  323.    <!-- Kategori -->
  324.    <button class="bottom-nav-item" id="bottomCategoryBtn" data-mm2="trigger" aria-label="Kategori">
  325.      <div class="bottom-nav-item-icon">
  326.        <!-- Outlined icon (default) -->
  327.        <svg class="icon-outlined" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round">
  328.          <line x1="3" y1="12" x2="21" y2="12"/>
  329.          <line x1="3" y1="6" x2="21" y2="6"/>
  330.          <line x1="3" y1="18" x2="21" y2="18"/>
  331.        </svg>
  332.        <!-- Filled icon (active) -->
  333.        <svg class="icon-filled" viewBox="0 0 24 24" fill="currentColor">
  334.          <path d="M3 5.25A.75.75 0 013.75 4.5h16.5a.75.75 0 010 1.5H3.75A.75.75 0 013 5.25zM3 12a.75.75 0 01.75-.75h16.5a.75.75 0 010 1.5H3.75A.75.75 0 013 12zm0 6.75a.75.75 0 01.75-.75h16.5a.75.75 0 010 1.5H3.75a.75.75 0 01-.75-.75z"/>
  335.        </svg>
  336.      </div>
  337.      <span class="bottom-nav-item-label">Kategori</span>
  338.    </button>
  339.  
  340.    <!-- Keranjang -->
  341.    <button class="bottom-nav-item" id="bottomCartBtn">
  342.      <div class="bottom-nav-item-icon">
  343.        <!-- Outlined icon (default) -->
  344.        <svg class="icon-outlined" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round">
  345.          <circle cx="9" cy="21" r="1"/>
  346.          <circle cx="20" cy="21" r="1"/>
  347.          <path d="M1 1h4l2.68 13.39a2 2 0 0 0 2 1.61h9.72a2 2 0 0 0 2-1.61L23 6H6"/>
  348.        </svg>
  349.        <!-- Filled icon (active) -->
  350.        <svg class="icon-filled" viewBox="0 0 24 24" fill="currentColor">
  351.          <path d="M2.25 2.25a.75.75 0 000 1.5h1.386c.17 0 .318.114.362.278l2.558 9.592a3.752 3.752 0 00-2.806 3.63c0 .414.336.75.75.75h15.75a.75.75 0 000-1.5H5.378A2.25 2.25 0 017.5 15h11.218a.75.75 0 00.674-.421 60.358 60.358 0 002.96-7.228.75.75 0 00-.525-.965A60.864 60.864 0 005.68 4.509l-.232-.867A1.875 1.875 0 003.636 2.25H2.25zM3.75 20.25a1.5 1.5 0 113 0 1.5 1.5 0 01-3 0zM16.5 20.25a1.5 1.5 0 113 0 1.5 1.5 0 01-3 0z"/>
  352.        </svg>
  353.        <span class="bottom-nav-item-badge" id="bottomCartCount">0</span>
  354.      </div>
  355.      <span class="bottom-nav-item-label">Keranjang</span>
  356.    </button>
  357.  
  358.    <!-- Compare -->
  359.    <button class="bottom-nav-item" id="bottomCompareBtn">
  360.      <div class="bottom-nav-item-icon">
  361.        <!-- Outlined icon (default) -->
  362.        <svg class="icon-outlined" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round">
  363.          <polyline points="17 11 21 7 17 3"/>
  364.          <path d="M21 7H9"/>
  365.          <polyline points="7 21 3 17 7 13"/>
  366.          <path d="M15 17H3"/>
  367.        </svg>
  368.        <!-- Filled icon (active) -->
  369.        <svg class="icon-filled" viewBox="0 0 24 24" fill="currentColor">
  370.          <path d="M21.75 6.75a.75.75 0 00-.75-.75H9a.75.75 0 000 1.5h10.19L15.22 11.47a.75.75 0 001.06 1.06l4.5-4.5a.75.75 0 00.22-.53.75.75 0 00-.22-.53l-.03-.03zM8.78 12.47L4.28 16.97a.75.75 0 000 1.06l4.5 4.5a.75.75 0 001.06-1.06L6.06 18H15a.75.75 0 000-1.5H4.81l3.97-3.97a.75.75 0 00-1.06-1.06z"/>
  371.        </svg>
  372.        <span class="bottom-nav-item-badge" id="bottomCompareCount" style="display:none;">0</span>
  373.      </div>
  374.      <span class="bottom-nav-item-label">Compare</span>
  375.    </button>
  376.  
  377.    <!-- Chat - Always show, check login in JavaScript -->
  378.    <button class="bottom-nav-item" id="bottomChatBtn" data-page="chat">
  379.      <div class="bottom-nav-item-icon">
  380.        <!-- Outlined icon (default) -->
  381.        <svg class="icon-outlined" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" opacity="0.85">
  382.          <path d="M21 15a2 2 0 0 1-2 2H7l-4 4V5a2 2 0 0 1 2-2h14a2 2 0 0 1 2 2z"/>
  383.        </svg>
  384.        <!-- Filled icon (active) -->
  385.        <svg class="icon-filled" viewBox="0 0 24 24" fill="currentColor">
  386.          <path d="M20 2H4c-1.1 0-2 .9-2 2v18l4-4h14c1.1 0 2-.9 2-2V4c0-1.1-.9-2-2-2z"/>
  387.        </svg>
  388.        <span class="bottom-nav-item-badge" id="bottomChatCount" style="display:none;">0</span>
  389.      </div>
  390.      <span class="bottom-nav-item-label">Chat</span>
  391.    </button>
  392.  
  393.    <!-- Akun -->
  394.        <button class="bottom-nav-item" id="bottomLoginBtn">
  395.      <div class="bottom-nav-item-icon">
  396.        <!-- Outlined icon (default) -->
  397.        <svg class="icon-outlined" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round">
  398.          <path d="M20 21v-2a4 4 0 0 0-4-4H8a4 4 0 0 0-4 4v2"/>
  399.          <circle cx="12" cy="7" r="4"/>
  400.        </svg>
  401.        <!-- Filled icon (active) -->
  402.        <svg class="icon-filled" viewBox="0 0 24 24" fill="currentColor">
  403.          <path fill-rule="evenodd" d="M7.5 6a4.5 4.5 0 119 0 4.5 4.5 0 01-9 0zM3.751 20.105a8.25 8.25 0 0116.498 0 .75.75 0 01-.437.695A18.683 18.683 0 0112 22.5c-2.786 0-5.433-.608-7.812-1.7a.75.75 0 01-.437-.695z" clip-rule="evenodd"/>
  404.        </svg>
  405.      </div>
  406.      <span class="bottom-nav-item-label">Login</span>
  407.    </button>
  408.        </svg>
  409.      </div>
  410.    </button>
  411.      </div>
  412. </nav>
  413.  
  414. <!-- Mobile User Menu Bottom Sheet -->
  415.  
  416. <script nonce="se3iyzEHMc9FQEB4wSyd0w==">
  417. (function(){
  418.  const btn = document.getElementById('megaMoreBtn');
  419.  const dd  = document.getElementById('megaMoreDropdown');
  420.  if(!btn || !dd) return;
  421.  
  422.  function openDD(){
  423.    dd.hidden = false;
  424.    btn.setAttribute('aria-expanded','true');
  425.    document.addEventListener('click', outside, {capture:true});
  426.    document.addEventListener('keydown', esc);
  427.  }
  428.  function closeDD(){
  429.    if(dd.hidden) return;
  430.    dd.hidden = true;
  431.    btn.setAttribute('aria-expanded','false');
  432.    document.removeEventListener('click', outside, {capture:true});
  433.    document.removeEventListener('keydown', esc);
  434.  }
  435.  function toggle(){ dd.hidden ? openDD() : closeDD(); }
  436.  function outside(e){
  437.    if(!dd.contains(e.target) && e.target !== btn){
  438.      closeDD();
  439.    }
  440.  }
  441.  function esc(e){
  442.    if(e.key === 'Escape'){
  443.      closeDD();
  444.      btn.focus();
  445.    }
  446.  }
  447.  btn.addEventListener('click', toggle);
  448. })();
  449.  
  450. // ========== HORIZONTAL SCROLL FADE INDICATOR ==========
  451. (function(){
  452.  const megaCats = document.getElementById('megaCatsScroll');
  453.  const fade = document.getElementById('megaCatsFade');
  454.  if (!megaCats || !fade) return;
  455.  
  456.  function updateFade() {
  457.    const scrollLeft = megaCats.scrollLeft;
  458.    const scrollWidth = megaCats.scrollWidth;
  459.    const clientWidth = megaCats.clientWidth;
  460.    const maxScroll = scrollWidth - clientWidth;
  461.    
  462.    // Hide fade when scrolled to end (within 10px tolerance)
  463.    if (maxScroll - scrollLeft <= 10) {
  464.      fade.style.opacity = '0';
  465.    } else {
  466.      fade.style.opacity = '1';
  467.    }
  468.  }
  469.  
  470.  // Update on scroll
  471.  megaCats.addEventListener('scroll', updateFade, { passive: true });
  472.  
  473.  // Update on resize
  474.  window.addEventListener('resize', updateFade, { passive: true });
  475.  
  476.  // Initial check
  477.  setTimeout(updateFade, 100);
  478. })();
  479.  
  480. document.addEventListener('DOMContentLoaded', function () {
  481.  var input = document.getElementById('searchInput');
  482.  if (!input) return;
  483.  input.addEventListener('keydown', function (e) {
  484.    if (e.key === 'Enter') {
  485.      e.preventDefault();
  486.      var form = input.form;
  487.      if (!form) return;
  488.      if (typeof form.requestSubmit === 'function') form.requestSubmit();
  489.      else form.submit();
  490.    }
  491.  });
  492. });
  493.  
  494.  
  495. (function(){
  496.  const cartBtn = document.getElementById('cartBtn');
  497.  if (cartBtn) {
  498.    cartBtn.addEventListener('click', function(e) {
  499.      e.preventDefault();
  500.      
  501.      const checkLogin = () => {
  502.        return window.isUserLoggedIn ? window.isUserLoggedIn() : false;
  503.      };
  504.      
  505.      if (checkLogin()) {
  506.        window.location.href = '/keranjang';
  507.      } else {
  508.        showCartLoginModal();
  509.      }
  510.    });
  511.  }
  512.  
  513.  const loginBtn = document.getElementById('loginBtn');
  514.  if (loginBtn) {
  515.    loginBtn.addEventListener('click', function(e) {
  516.      e.preventDefault();
  517.      window.location.href = 'https://www.seoulexhibition.com/';
  518.    });
  519.  }
  520.  
  521.  const userMenuBtn = document.getElementById('userMenuBtn');
  522.  const userDropdown = document.getElementById('userDropdown');
  523.  
  524.  if (userMenuBtn && userDropdown) {
  525.    function openDropdown() {
  526.      userDropdown.hidden = false;
  527.      userMenuBtn.setAttribute('aria-expanded', 'true');
  528.      document.addEventListener('click', closeOnOutside, { capture: true });
  529.      document.addEventListener('keydown', closeOnEscape);
  530.    }
  531.    
  532.    function closeDropdown() {
  533.      if (userDropdown.hidden) return;
  534.      userDropdown.hidden = true;
  535.      userMenuBtn.setAttribute('aria-expanded', 'false');
  536.      document.removeEventListener('click', closeOnOutside, { capture: true });
  537.      document.removeEventListener('keydown', closeOnEscape);
  538.    }
  539.    
  540.    function closeOnOutside(e) {
  541.      if (!userDropdown.contains(e.target) && e.target !== userMenuBtn) {
  542.        closeDropdown();
  543.      }
  544.    }
  545.    
  546.    function closeOnEscape(e) {
  547.      if (e.key === 'Escape') {
  548.        closeDropdown();
  549.        userMenuBtn.focus();
  550.      }
  551.    }
  552.    
  553.    userMenuBtn.addEventListener('click', function(e) {
  554.      e.preventDefault();
  555.      userDropdown.hidden ? openDropdown() : closeDropdown();
  556.    });
  557.    
  558.    // Close dropdown when clicking profile links
  559.    userDropdown.querySelectorAll('[data-close-dropdown]').forEach(link => {
  560.      link.addEventListener('click', function() {
  561.        closeDropdown();
  562.      });
  563.    });
  564.  }
  565.  
  566.  // Bottom nav profile button - toggle mobile bottom sheet
  567.  const bottomProfileBtn = document.getElementById('bottomProfileBtn');
  568.  const mobileUserSheet = document.getElementById('mobileUserSheet');
  569.  const mobileUserSheetBackdrop = document.getElementById('mobileUserSheetBackdrop');
  570.  
  571.  if (bottomProfileBtn && mobileUserSheet) {
  572.    function openMobileSheet() {
  573.      mobileUserSheet.hidden = false;
  574.      document.body.style.overflow = 'hidden';
  575.      // Trigger animation
  576.      requestAnimationFrame(() => {
  577.        mobileUserSheet.classList.add('active');
  578.      });
  579.    }
  580.    
  581.    function closeMobileSheet() {
  582.      mobileUserSheet.classList.remove('active');
  583.      document.body.style.overflow = '';
  584.      setTimeout(() => {
  585.        mobileUserSheet.hidden = true;
  586.      }, 300);
  587.    }
  588.    
  589.    bottomProfileBtn.addEventListener('click', function(e) {
  590.      e.preventDefault();
  591.      openMobileSheet();
  592.    });
  593.    
  594.    if (mobileUserSheetBackdrop) {
  595.      mobileUserSheetBackdrop.addEventListener('click', closeMobileSheet);
  596.    }
  597.    
  598.    // Close on escape key
  599.    document.addEventListener('keydown', function(e) {
  600.      if (e.key === 'Escape' && !mobileUserSheet.hidden) {
  601.        closeMobileSheet();
  602.      }
  603.    });
  604.    
  605.    // Close sheet when clicking profile links
  606.    mobileUserSheet.querySelectorAll('[data-close-sheet]').forEach(link => {
  607.      link.addEventListener('click', function() {
  608.        closeMobileSheet();
  609.      });
  610.    });
  611.  }
  612.  
  613.  // Handle Google avatar error in bottom-nav (fallback to initials)
  614.  const bottomNavAvatar = document.querySelector('.bottom-nav-avatar-img');
  615.  if (bottomNavAvatar) {
  616.    bottomNavAvatar.addEventListener('error', function() {
  617.      const initials = this.getAttribute('data-fallback-initials') || 'U';
  618.      const initialsDiv = document.createElement('div');
  619.      initialsDiv.className = 'bottom-nav-avatar-initials';
  620.      initialsDiv.textContent = initials;
  621.      this.parentNode.replaceChild(initialsDiv, this);
  622.    });
  623.  }
  624.  
  625.  // Mobile logout button
  626.  const mobileLogoutBtn = document.getElementById('mobileLogoutBtn');
  627.  if (mobileLogoutBtn) {
  628.    mobileLogoutBtn.addEventListener('click', async function(e) {
  629.      e.preventDefault();
  630.      
  631.      // Check push notification before logout
  632.      if (window.ChatNotification && typeof window.ChatNotification.confirmLogoutWithPushNotification === 'function') {
  633.        const confirmLogout = await window.ChatNotification.confirmLogoutWithPushNotification();
  634.        if (!confirmLogout) {
  635.          return; // User cancelled logout
  636.        }
  637.      }
  638.      
  639.      const getCsrfToken = () => document.querySelector('meta[name="csrf-token"]')?.getAttribute('content') || '';
  640.      
  641.      try {
  642.        const response = await fetch('/auth/logout', {
  643.          method: 'POST',
  644.          credentials: 'same-origin',
  645.          headers: {
  646.            'Content-Type': 'application/json',
  647.            'X-CSRF-Token': getCsrfToken()
  648.          },
  649.          body: JSON.stringify({
  650.            csrf_token: getCsrfToken()
  651.          })
  652.        });
  653.        
  654.        if (response.ok) {
  655.          if (window.guestCart && typeof window.guestCart.clear === 'function') {
  656.            window.guestCart.clear();
  657.          }
  658.          window.location.href = '/login?logged_out=1';
  659.        } else {
  660.          console.error('Logout failed');
  661.          window.location.href = '/logout';
  662.        }
  663.      } catch (error) {
  664.        console.error('Logout error:', error);
  665.        window.location.href = '/logout';
  666.      }
  667.    });
  668.  }
  669.  
  670.  const logoutBtn = document.getElementById('logoutBtn');
  671.  if (logoutBtn) {
  672.    logoutBtn.addEventListener('click', async function(e) {
  673.      e.preventDefault();
  674.      
  675.      // Check push notification before logout
  676.      if (window.ChatNotification && typeof window.ChatNotification.confirmLogoutWithPushNotification === 'function') {
  677.        const confirmLogout = await window.ChatNotification.confirmLogoutWithPushNotification();
  678.        if (!confirmLogout) {
  679.          return; // User cancelled logout
  680.        }
  681.      }
  682.      
  683.      const getCsrfToken = () => document.querySelector('meta[name="csrf-token"]')?.getAttribute('content') || '';
  684.      
  685.      try {
  686.        const response = await fetch('/auth/logout', {
  687.          method: 'POST',
  688.          credentials: 'same-origin',
  689.          headers: {
  690.            'Content-Type': 'application/json',
  691.            'X-CSRF-Token': getCsrfToken()
  692.          },
  693.          body: JSON.stringify({
  694.            csrf_token: getCsrfToken()
  695.          })
  696.        });
  697.        
  698.        if (response.ok) {
  699.          if (window.guestCart && typeof window.guestCart.clear === 'function') {
  700.            window.guestCart.clear();
  701.          }
  702.          
  703.          window.location.href = '/login?logged_out=1';
  704.        } else {
  705.          console.error('Logout failed');
  706.          window.location.href = '/logout';
  707.        }
  708.      } catch (error) {
  709.        console.error('Logout error:', error);
  710.        window.location.href = '/logout';
  711.      }
  712.    });
  713.  }
  714.  
  715.  const wishlistBtn = document.getElementById('wishlistBtn');
  716.  const notifBtn = document.getElementById('notifBtn');
  717.  
  718.  if (wishlistBtn) {
  719.    wishlistBtn.addEventListener('click', function(e) {
  720.      e.preventDefault();
  721.      alert('Fitur wishlist akan segera tersedia!');
  722.    });
  723.  }
  724.  
  725.  if (notifBtn) {
  726.    notifBtn.addEventListener('click', function(e) {
  727.      e.preventDefault();
  728.      alert('Fitur notifikasi akan segera tersedia!');
  729.    });
  730.  }
  731. })();
  732.  
  733. // ========== MOBILE BOTTOM NAVIGATION ==========
  734. (function initBottomNav() {
  735.  // Sync cart badge with bottom nav
  736.  function syncBottomCartBadge() {
  737.    const mainBadge = document.getElementById('cartCount');
  738.    const bottomBadge = document.getElementById('bottomCartCount');
  739.    if (mainBadge && bottomBadge) {
  740.      const count = mainBadge.textContent;
  741.      bottomBadge.textContent = count;
  742.      bottomBadge.style.display = parseInt(count) > 0 ? 'flex' : 'none';
  743.    }
  744.  }
  745.  
  746.  // Sync compare badge with bottom nav
  747.  function syncBottomCompareBadge() {
  748.    const mainBadge = document.getElementById('compareCount');
  749.    const bottomBadge = document.getElementById('bottomCompareCount');
  750.    if (mainBadge && bottomBadge) {
  751.      const count = mainBadge.textContent;
  752.      bottomBadge.textContent = count;
  753.      bottomBadge.style.display = parseInt(count) > 0 ? 'flex' : 'none';
  754.    }
  755.  }
  756.  
  757.  // Initial sync
  758.  syncBottomCartBadge();
  759.  syncBottomCompareBadge();
  760.  
  761.  // Observe badge changes
  762.  const observer = new MutationObserver(function() {
  763.    syncBottomCartBadge();
  764.    syncBottomCompareBadge();
  765.  });
  766.  
  767.  const cartBadge = document.getElementById('cartCount');
  768.  const compareBadge = document.getElementById('compareCount');
  769.  
  770.  if (cartBadge) observer.observe(cartBadge, { childList: true, characterData: true, subtree: true });
  771.  if (compareBadge) observer.observe(compareBadge, { childList: true, characterData: true, subtree: true });
  772.  
  773.  // Bottom Cart Button
  774.  const bottomCartBtn = document.getElementById('bottomCartBtn');
  775.  if (bottomCartBtn) {
  776.    bottomCartBtn.addEventListener('click', function(e) {
  777.      e.preventDefault();
  778.      
  779.      const checkLogin = () => {
  780.        return window.isUserLoggedIn ? window.isUserLoggedIn() : false;
  781.      };
  782.      
  783.      if (checkLogin()) {
  784.        window.location.href = '/keranjang';
  785.      } else {
  786.        showCartLoginModal();
  787.      }
  788.    });
  789.  }
  790.  
  791.  // Bottom Compare Button
  792.  const bottomCompareBtn = document.getElementById('bottomCompareBtn');
  793.  if (bottomCompareBtn) {
  794.    bottomCompareBtn.addEventListener('click', function(e) {
  795.      e.preventDefault();
  796.      
  797.      // Close chat widget if open
  798.      if (window.plazaChat && window.plazaChat.isWidgetOpen) {
  799.        window.plazaChat.closeWidget();
  800.      }
  801.      
  802.      const mainCompareBtn = document.getElementById('compareBtn');
  803.      if (mainCompareBtn) {
  804.        mainCompareBtn.click();
  805.      }
  806.    });
  807.  }
  808.  
  809.  // Bottom Category Button - triggers mega menu
  810.  const bottomCategoryBtn = document.getElementById('bottomCategoryBtn');
  811.  if (bottomCategoryBtn) {
  812.    bottomCategoryBtn.addEventListener('click', function(e) {
  813.      e.preventDefault();
  814.      // Trigger desktop mega menu
  815.      const desktopTrigger = document.querySelector('.mm2-trigger:not(#bottomCategoryBtn)');
  816.      if (desktopTrigger) {
  817.        desktopTrigger.click();
  818.      }
  819.    });
  820.  }
  821.  
  822.  // Bottom Login Button
  823.  const bottomLoginBtn = document.getElementById('bottomLoginBtn');
  824.  if (bottomLoginBtn) {
  825.    bottomLoginBtn.addEventListener('click', function(e) {
  826.      e.preventDefault();
  827.      window.location.href = '/login';
  828.    });
  829.  }
  830.  
  831.  // Bottom Chat Button
  832.  const bottomChatBtn = document.getElementById('bottomChatBtn');
  833.  if (bottomChatBtn) {
  834.    bottomChatBtn.addEventListener('click', function(e) {
  835.      e.preventDefault();
  836.      
  837.      // Trigger chat widget (try multiple times if needed)
  838.      const triggerChat = () => {
  839.        const chatToggle = document.getElementById('chat-toggle-btn');
  840.        if (chatToggle) {
  841.          chatToggle.click();
  842.          return true;
  843.        }
  844.        return false;
  845.      };
  846.      
  847.      // Immediate attempt
  848.      if (!triggerChat()) {
  849.        // Retry after 100ms if not found
  850.        setTimeout(() => {
  851.          if (!triggerChat()) {
  852.            // Last resort: manually show popup
  853.            const popup = document.getElementById('chat-popup');
  854.            if (popup) {
  855.              popup.style.display = 'block';
  856.            }
  857.          }
  858.        }, 100);
  859.      }
  860.    });
  861.  }
  862.  
  863.  // Sync chat unread badge
  864.  function syncBottomChatBadge() {
  865.    const chatBadge = document.getElementById('chat-unread-badge');
  866.    const bottomChatBadge = document.getElementById('bottomChatCount');
  867.    if (chatBadge && bottomChatBadge) {
  868.      const count = chatBadge.textContent;
  869.      bottomChatBadge.textContent = count;
  870.      bottomChatBadge.style.display = chatBadge.style.display;
  871.    }
  872.  }
  873.  
  874.  // Observe chat badge changes
  875.  const chatBadge = document.getElementById('chat-unread-badge');
  876.  if (chatBadge) {
  877.    observer.observe(chatBadge, { attributes: true, childList: true, characterData: true, subtree: true });
  878.    syncBottomChatBadge();
  879.  }
  880.  
  881.  // Active state management based on current page
  882.  function updateActiveState() {
  883.    const currentPath = window.location.pathname;
  884.    const bottomNavItems = document.querySelectorAll('.bottom-nav-item');
  885.    
  886.    bottomNavItems.forEach(item => {
  887.      item.classList.remove('active');
  888.      
  889.      const itemId = item.id;
  890.      const page = item.getAttribute('data-page');
  891.      const href = item.getAttribute('href');
  892.      
  893.      // Check by ID for specific pages
  894.      if (itemId === 'bottomHomeBtn' && currentPath === '/') {
  895.        item.classList.add('active');
  896.      } else if (itemId === 'bottomCartBtn' && (currentPath === '/keranjang' || currentPath === '/cart')) {
  897.        item.classList.add('active');
  898.      } else if (itemId === 'bottomProfileBtn' && currentPath.startsWith('/profile')) {
  899.        item.classList.add('active');
  900.      } else if (itemId === 'bottomCategoryBtn' && currentPath.startsWith('/kategori')) {
  901.        item.classList.add('active');
  902.      } else if (itemId === 'bottomCompareBtn' && currentPath === '/compare') {
  903.        item.classList.add('active');
  904.      } else if (itemId === 'bottomChatBtn' && currentPath === '/chat') {
  905.        item.classList.add('active');
  906.      }
  907.      // Fallback: check by data-page attribute
  908.      else if (page === 'home' && currentPath === '/') {
  909.        item.classList.add('active');
  910.      } else if (page === 'profile' && currentPath.startsWith('/profile')) {
  911.        item.classList.add('active');
  912.      }
  913.      // Fallback: check by href
  914.      else if (href && currentPath === href) {
  915.        item.classList.add('active');
  916.      }
  917.    });
  918.  }
  919.  
  920.  // Update active state on load
  921.  updateActiveState();
  922.  
  923.  // Bottom nav always visible - auto-hide disabled for better UX
  924.  // const bottomNav = document.querySelector('.bottom-nav');
  925.  // if (bottomNav && window.innerWidth <= 640) {
  926.  //   // Auto-hide feature disabled
  927.  // }
  928. })();
  929. // Cart Login Modal Handler (Global scope)
  930. function showCartLoginModal() {
  931.  const modal = document.getElementById('cartLoginModal');
  932.  if (!modal) return;
  933.  
  934.  modal.classList.add('show');
  935.  
  936.  const confirmBtn = document.getElementById('cartLoginConfirm');
  937.  const registerBtn = document.getElementById('cartRegisterBtn');
  938.  const cancelBtn = document.getElementById('cartLoginCancel');
  939.  
  940.  const handleLogin = () => {
  941.    window.location.href = '/login?return=' + encodeURIComponent('/keranjang');
  942.  };
  943.  
  944.  const handleRegister = () => {
  945.    window.location.href = '/register?return=' + encodeURIComponent('/keranjang');
  946.  };
  947.  
  948.  const handleCancel = () => {
  949.    modal.classList.remove('show');
  950.    confirmBtn.removeEventListener('click', handleLogin);
  951.    registerBtn.removeEventListener('click', handleRegister);
  952.    cancelBtn.removeEventListener('click', handleCancel);
  953.  };
  954.  
  955.  confirmBtn.removeEventListener('click', handleLogin);
  956.  registerBtn.removeEventListener('click', handleRegister);
  957.  cancelBtn.removeEventListener('click', handleCancel);
  958.  
  959.  confirmBtn.addEventListener('click', handleLogin);
  960.  registerBtn.addEventListener('click', handleRegister);
  961.  cancelBtn.addEventListener('click', handleCancel);
  962.  
  963.  modal.addEventListener('click', (e) => {
  964.    if (e.target === modal) {
  965.      handleCancel();
  966.    }
  967.  });
  968. }
  969. </script>
  970. <script src="https://plazaitdotid.pages.dev/assets/js/cart-badge.js" defer nonce="se3iyzEHMc9FQEB4wSyd0w=="></script>
  971.  
  972. <!-- Product Compare Sidebar -->
  973. <div class="compare-sidebar" id="compareSidebar">
  974.  <div class="compare-header">
  975.    <h4 class="compare-title">
  976.      <svg width="20" height="20" viewBox="0 0 24 24" fill="currentColor">
  977.        <path d="M9.5,3A6.5,6.5 0 0,1 16,9.5C16,11.11 15.41,12.59 14.44,13.73L14.71,14H15.5L20.5,19L19,20.5L14,15.5V14.71L13.73,14.44C12.59,15.41 11.11,16 9.5,16A6.5,6.5 0 0,1 3,9.5A6.5,6.5 0 0,1 9.5,3M9.5,5C7,5 5,7 5,9.5C5,12 7,14 9.5,14C12,14 14,12 14,9.5C14,7 12,5 9.5,5Z"/>
  978.      </svg>
  979.      Bandingkan Produk
  980.      <span class="compare-count" id="compareCountSidebar">(0)</span>
  981.    </h4>
  982.    <button class="compare-close" id="compareClose" aria-label="Tutup">
  983.      <svg width="18" height="18" viewBox="0 0 24 24" fill="currentColor">
  984.        <path d="M18.3 5.7a1 1 0 0 0-1.4 0L12 10.6 7.1 5.7a1 1 0 1 0-1.4 1.4L10.6 12l-4.9 4.9a1 1 0 0 0 1.4 1.4L12 13.4l4.9 4.9a1 1 0 0 0 1.4-1.4L13.4 12l4.9-4.9a1 1 0 0 0 0-1.4z"/>
  985.      </svg>
  986.    </button>
  987.  </div>
  988.  
  989.  <div class="compare-content">
  990.    <div class="compare-empty" id="compareEmpty">
  991.      <div class="empty-icon">
  992.        <svg width="48" height="48" viewBox="0 0 24 24" fill="currentColor" opacity="0.3">
  993.          <path d="M9.5,3A6.5,6.5 0 0,1 16,9.5C16,11.11 15.41,12.59 14.44,13.73L14.71,14H15.5L20.5,19L19,20.5L14,15.5V14.71L13.73,14.44C12.59,15.41 11.11,16 9.5,16A6.5,6.5 0 0,1 3,9.5A6.5,6.5 0 0,1 9.5,3M9.5,5C7,5 5,7 5,9.5C5,12 7,14 9.5,14C12,14 14,12 14,9.5C14,7 12,5 9.5,5Z"/>
  994.        </svg>
  995.      </div>
  996.      <h5>Belum ada produk dipilih</h5>
  997.      <p>Pilih produk yang ingin dibandingkan dengan klik tombol "Bandingkan Produk" di halaman produk.</p>
  998.    </div>
  999.    
  1000.    <div class="compare-list" id="compareList">
  1001.      <!-- Products will be populated here -->
  1002.    </div>
  1003.  </div>
  1004.  
  1005.  <div class="compare-actions" id="compareActions">
  1006.    <button class="btn btn-outline-danger btn-sm" id="compareClearAll">
  1007.      <svg width="16" height="16" viewBox="0 0 24 24" fill="currentColor">
  1008.        <path d="M19,6.41L17.59,5L12,10.59L6.41,5L5,6.41L10.59,12L5,17.59L6.41,19L12,13.41L17.59,19L19,17.59L13.41,12L19,6.41Z"/>
  1009.      </svg>
  1010.      Hapus Semua
  1011.    </button>
  1012.    <button class="btn btn-primary btn-sm" id="compareAnalyze" disabled>
  1013.      <svg width="16" height="16" viewBox="0 0 24 24" fill="currentColor">
  1014.        <path d="M12,2A10,10 0 0,0 2,12A10,10 0 0,0 12,22A10,10 0 0,0 22,12A10,10 0 0,0 12,2M12,4A8,8 0 0,1 20,12A8,8 0 0,1 12,20A8,8 0 0,1 4,12A8,8 0 0,1 12,4M11,16.5L18,9.5L16.59,8.09L11,13.67L7.91,10.59L6.5,12L11,16.5Z"/>
  1015.      </svg>
  1016.      Analisis AI
  1017.    </button>
  1018.  </div>
  1019.  
  1020.  <!-- AI Disclaimer in Sidebar -->
  1021.  <div class="compare-disclaimer">
  1022.    <div class="ai-disclaimer">
  1023.      <div class="disclaimer-text">
  1024.        <strong>💡 Catatan:</strong> Analisis ini dihasilkan secara otomatis dan dapat memiliki keterbatasan.
  1025.        Gunakan sebagai referensi tambahan dengan tetap mempertimbangkan kebutuhan Anda.
  1026.        Untuk informasi lebih lanjut, silakan hubungi tim MACAN123 LOGIN.
  1027.      </div>
  1028.    </div>
  1029.  </div>
  1030. </div><link rel="stylesheet" href="https://plazaitdotid.pages.dev/assets/css/pd-lightbox.css">
  1031. <style>.paylater-promo{display:inline-flex;align-items:center;gap:8px;background:linear-gradient(135deg,#f0fdf4 0,#dcfce7 100%);border:1px solid #86efac;border-radius:8px;padding:8px 12px;font-size:13px;line-height:1.4;margin:8px 0}.paylater-promo-sm{padding:6px 10px;font-size:11px;gap:6px}.paylater-promo-md{padding:8px 12px;font-size:13px;gap:8px}.paylater-promo-lg{padding:10px 16px;font-size:14px;gap:10px}.paylater-icon{font-size:1.2em;flex-shrink:0}.paylater-text{display:flex;flex-direction:column;gap:2px}.paylater-text strong{color:#15803d;font-weight:600}.paylater-text small{color:#16a34a;font-size:.85em;opacity:.9}.paylater-desktop-only{display:none}.paylater-mobile-only{display:flex}@media (min-width:641px){.paylater-desktop-only{display:flex}.paylater-mobile-only{display:none}}@media (max-width:640px){.paylater-promo{font-size:12px;padding:7px 10px}.paylater-promo-lg{font-size:13px;padding:8px 12px}}@media print{.paylater-promo{display:none!important}}.paylater-compact{display:inline-block;font-size:11px;font-weight:600;color:#059669;background:#d1fae5;padding:3px 8px;border-radius:4px;margin:6px 0 4px;line-height:1.3}@media (max-width:640px){.paylater-compact{font-size:10px;padding:2px 6px;margin:5px 0 3px}}@media print{.paylater-compact{display:none!important}}</style><style nonce="se3iyzEHMc9FQEB4wSyd0w==">.pd-voucher-minimal{margin:10px 0;display:flex;flex-direction:column;gap:6px}.pdv-min-item{display:flex;align-items:center;gap:8px;padding:0;height:32px;transition:all .2s ease}.pdv-min-hidden{display:none}.pdv-min-disabled{opacity:.5}.pdv-badge-btn{display:inline-flex;align-items:center;gap:8px;background:linear-gradient(135deg,#667eea 0,#764ba2 100%);border:none;border-radius:8px;padding:3px;cursor:pointer;transition:all .2s ease;width:auto}.pdv-badge-btn:hover:not(:disabled){transform:translateY(-1px);box-shadow:0 4px 12px rgba(102,126,234,.3)}.pdv-badge-btn:disabled{opacity:.6;cursor:not-allowed}.pdv-badge-icon{color:#fff;flex-shrink:0}.pdv-badge-text{font-size:14px;font-weight:700;color:#fff;white-space:nowrap}.pdv-badge-code{font-family:'Courier New',monospace;font-size:13px;font-weight:700;color:#fff;background:rgba(255,255,255,.2);padding:4px 8px;border-radius:4px;border:none;white-space:nowrap}.pdv-min-copy,.pdv-min-more{padding:4px 12px;font-size:12px;font-weight:600;border-radius:5px;border:1px solid #e2e8f0;background:#fff;color:#667eea;cursor:pointer;transition:all .2s ease;white-space:nowrap}.pdv-min-copy:hover:not(:disabled),.pdv-min-more:hover{background:#667eea;color:#fff;border-color:#667eea}.pdv-min-copy:disabled{opacity:.4;cursor:not-allowed}.pdv-min-copy.copied{background:#22c55e;color:#fff;border-color:#22c55e}.pdv-min-more{margin-left:auto}.modal-close{position:absolute;top:20px;right:20px;background:none;border:none;cursor:pointer;color:#64748b;padding:4px;transition:color .2s ease}.modal-close:hover{color:#1e293b}.modal-body{margin-bottom:8px}.voucher-modal-content{text-align:center}.voucher-modal-badge{display:inline-flex;flex-direction:row;align-items:center;gap:6px;background:linear-gradient(135deg,#667eea 0,#764ba2 100%);border-radius:10px;padding:8px 16px;margin-bottom:12px}.vmb-value{font-size:18px;font-weight:700;color:#fff;line-height:1}.vmb-label{font-size:18px;font-weight:700;color:#fff;text-transform:uppercase;letter-spacing:.5px}.voucher-modal-code{font-family:'Courier New',monospace;font-size:14px;font-weight:700;color:#667eea;background:rgba(102,126,234,.1);padding:6px 12px;border-radius:6px;border:2px dashed rgba(102,126,234,.3);display:inline-block;margin-bottom:10px}.voucher-modal-name{font-size:14px;font-weight:600;color:#1e293b;margin-bottom:16px}.voucher-modal-details{text-align:left;background:#f8fafc;border-radius:8px;padding:12px;margin-bottom:16px}.vmd-item{display:flex;align-items:flex-start;gap:8px;padding:6px 0;font-size:13px;color:#64748b;border-bottom:1px solid #e2e8f0}.vmd-item:last-child{border-bottom:none}.vmd-item svg{color:#667eea;flex-shrink:0;margin-top:2px}.vmd-item strong{color:#1e293b}.modal-actions{padding:20px}.modal-btn-primary{background:linear-gradient(135deg,#667eea 0,#764ba2 100%);color:#fff}.modal-btn-primary:hover{opacity:.9;transform:translateY(-1px)}@media (max-width:640px){.pdv-min-item{gap:6px}.pdv-badge-btn{padding:3px;gap:6px}.pdv-badge-text{font-size:13px}.pdv-badge-code{font-size:12px;padding:3px 6px}.pdv-min-copy,.pdv-min-more{padding:3px 10px;font-size:11px}.modal-dialog{max-width:95%;margin:20px}.vmb-value{font-size:16px}.vmb-label{font-size:16px}.voucher-modal-code{font-size:13px;padding:5px 10px}}</style><style nonce="se3iyzEHMc9FQEB4wSyd0w==">.promo-endyear-mini-banner{display:flex;align-items:center;gap:12px;padding:12px 16px;background:rgba(255,255,255,.8);backdrop-filter:blur(10px);-webkit-backdrop-filter:blur(10px);border:2px solid rgba(242,140,26,.2);border-radius:12px;margin:16px 0;box-shadow:0 4px 16px rgba(0,0,0,.08);transition:all .3s ease}.promo-endyear-mini-banner:hover{transform:translateY(-2px);box-shadow:0 6px 20px rgba(0,0,0,.12);border-color:rgba(242,140,26,.4)}.pey-icon{font-size:32px;line-height:1;flex-shrink:0}.pey-content{flex:1;min-width:0}.pey-content strong{display:block;font-size:14px;font-weight:700;color:#F28C1A;margin-bottom:2px}.pey-content span{display:block;font-size:13px;color:#64748b;line-height:1.4}.pey-link{flex-shrink:0;padding:8px 16px;background:linear-gradient(135deg,#F28C1A,#FFB84D);color:#fff;text-decoration:none;font-size:13px;font-weight:700;border-radius:8px;white-space:nowrap;transition:all .2s ease;box-shadow:0 2px 8px rgba(242,140,26,.25)}.pey-link:hover{transform:translateX(2px);box-shadow:0 4px 12px rgba(242,140,26,.35)}@media(max-width:640px){.promo-endyear-mini-banner{flex-wrap:wrap;gap:8px;padding:10px 12px}.pey-icon{font-size:28px;align-self:flex-start}.pey-content{flex:1;min-width:0}.pey-content strong{font-size:12px}.pey-content span{font-size:11px;line-height:1.3}.pey-link{width:100%;flex-basis:100%;font-size:11px;padding:6px 12px;text-align:center}}@media print{.promo-endyear-mini-banner{display:none!important}}</style>
  1032. <style nonce="se3iyzEHMc9FQEB4wSyd0w==">
  1033. .pd-title-row{position:relative;margin-bottom:12px;padding-right:52px}.pd-title{margin:0!important}.pd-share-btn{position:absolute;top:0;right:0;width:40px;height:40px;display:inline-flex;align-items:center;justify-content:center;border-radius:10px;border:1px solid #e2e8f0;background:#fff;color:#64748b;cursor:pointer;transition:all .2s ease;-webkit-tap-highlight-color:transparent}.pd-share-btn:hover{background:#f8fafc;border-color:#cbd5e1;color:#0f172a;transform:translateY(-1px)}.pd-share-btn:active{transform:translateY(0)}.pd-share-btn svg{display:block}
  1034.  
  1035. .pd-share-modal-overlay{position:fixed;inset:0;background:rgba(15,23,42,.75);backdrop-filter:blur(4px);z-index:99999;display:none;align-items:center;justify-content:center;padding:0;animation:fadeIn .2s ease}.pd-share-modal-overlay.show{display:flex}.pd-share-modal{background:#fff;border-radius:20px;box-shadow:0 25px 50px -12px rgba(0,0,0,.25);max-width:480px;width:100%;max-height:90vh;overflow:hidden;display:flex;flex-direction:column;animation:slideUp .3s cubic-bezier(.16,1,.3,1)}@keyframes fadeIn{from{opacity:0}to{opacity:1}}@keyframes slideUp{from{opacity:0;transform:translateY(20px) scale(.95)}to{opacity:1;transform:translateY(0) scale(1)}}
  1036.  
  1037. .pd-share-header{display:flex;align-items:center;justify-content:space-between;padding:20px 24px;border-bottom:1px solid #f1f5f9}.pd-share-title{font-size:18px;font-weight:700;color:#0f172a;margin:0}.pd-share-close{width:32px;height:32px;border-radius:8px;border:0;background:transparent;color:#64748b;display:inline-flex;align-items:center;justify-content:center;cursor:pointer;transition:all .15s ease}.pd-share-close:hover{background:#f1f5f9;color:#0f172a}.pd-share-body{padding:24px;overflow-y:auto}
  1038.  
  1039. .pd-share-preview{display:flex;gap:12px;padding:16px;background:#f8fafc;border-radius:12px;margin-bottom:24px}.pd-share-preview-img{width:64px;height:64px;border-radius:8px;object-fit:cover;flex-shrink:0;border:1px solid #e2e8f0}.pd-share-preview-info{flex:1;min-width:0}.pd-share-preview-name{font-size:14px;font-weight:600;color:#0f172a;margin:0 0 4px 0;display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;overflow:hidden}.pd-share-preview-price{font-size:16px;font-weight:700;color:#0ea5e9;margin:0}
  1040.  
  1041. .pd-share-label{font-size:13px;font-weight:600;color:#475569;margin:0 0 12px 0;text-transform:uppercase;letter-spacing:.5px}.pd-share-grid{display:grid;grid-template-columns:repeat(4,1fr);gap:12px;margin-bottom:24px}.pd-share-option{display:flex;flex-direction:column;align-items:center;gap:8px;padding:16px 8px;border:1.5px solid #e2e8f0;border-radius:12px;background:#fff;cursor:pointer;transition:all .2s ease;text-decoration:none;color:inherit}.pd-share-option:hover{border-color:#94a3b8;background:#f8fafc;transform:translateY(-2px)}.pd-share-option:active{transform:translateY(0)}
  1042.  
  1043. .pd-share-icon{width:40px;height:40px;border-radius:10px;display:inline-flex;align-items:center;justify-content:center;position:relative}.pd-share-icon svg{width:24px;height:24px;display:block}.pd-share-icon-whatsapp{background:linear-gradient(135deg,#25D366 0%,#128C7E 100%);color:#fff}.pd-share-icon-facebook{background:linear-gradient(135deg,#1877F2 0%,#0c63d4 100%);color:#fff}.pd-share-icon-twitter{background:linear-gradient(135deg,#1DA1F2 0%,#0d8bd9 100%);color:#fff}.pd-share-icon-telegram{background:linear-gradient(135deg,#0088cc 0%,#0077b3 100%);color:#fff}.pd-share-icon-email{background:linear-gradient(135deg,#EA4335 0%,#c5331f 100%);color:#fff}.pd-share-icon-copy{background:linear-gradient(135deg,#f1db63 0%,#e5d146 100%);color:#fff}.pd-share-icon-pdf{background:linear-gradient(135deg,#ef4444 0%,#dc2626 100%);color:#fff}.pd-share-name{font-size:12px;font-weight:600;color:#475569;text-align:center}
  1044.  
  1045. .pd-share-copy-section{background:#f8fafc;padding:16px;border-radius:12px}.pd-share-copy-input-wrap{display:flex;gap:8px}.pd-share-copy-input{flex:1;padding:12px 14px;border:1px solid #e2e8f0;border-radius:10px;font-size:14px;color:#0f172a;background:#fff;font-family:'Segoe UI',system-ui,sans-serif}.pd-share-copy-input:focus{outline:0;border-color:#0ea5e9;box-shadow:0 0 0 3px rgba(14,165,233,.1)}.pd-share-copy-btn{padding:12px 20px;border:0;border-radius:10px;background:linear-gradient(135deg,#0ea5e9 0%,#0284c7 100%);color:#fff;font-size:14px;font-weight:600;cursor:pointer;transition:all .2s ease;white-space:nowrap;display:inline-flex;align-items:center;gap:6px}.pd-share-copy-btn:hover{background:linear-gradient(135deg,#0284c7 0%,#0369a1 100%);transform:translateY(-1px);box-shadow:0 4px 12px rgba(14,165,233,.3)}.pd-share-copy-btn:active{transform:translateY(0)}.pd-share-copy-btn svg{width:16px;height:16px}.pd-share-copy-btn.copied{background:linear-gradient(135deg,#22c55e 0%,#16a34a 100%);pointer-events:none}
  1046.  
  1047. @media(max-width:640px){.pd-share-modal{border-radius:20px 20px 0 0;margin-top:auto;max-height:85vh}.pd-share-grid{grid-template-columns:repeat(3,1fr)}.pd-share-header{padding:16px 20px}.pd-share-body{padding:20px}.pd-share-btn{width:36px;height:36px}.pd-share-btn svg{width:18px;height:18px}}@media(max-width:480px){.pd-share-grid{grid-template-columns:repeat(3,1fr);gap:10px}.pd-share-option{padding:12px 6px}.pd-share-icon{width:36px;height:36px}.pd-share-icon svg{width:20px;height:20px}.pd-share-name{font-size:11px}}
  1048.  
  1049. .mf-share{background:#fff;color:#fb923c;border:2px solid #fb923c;display:inline-flex;align-items:center;justify-content:center}.mf-share:active{transform:scale(.95)}.mf-share svg{display:block}
  1050.  
  1051. @media(max-width:640px){.pd-share-btn{display:none!important}}
  1052.  
  1053. .stock-badge.in{background:#e6f9ec;color:#15803d;border-radius:999px;padding:4px 10px;font-weight:700}.stock-badge.out{background:#fee2e2;color:#b91c1c;border-radius:999px;padding:4px 10px;font-weight:700}
  1054.  
  1055. .stock-info-btn{--c:#0ea5e9;--b:#bae6fd;--bg:#f0f9ff;--bg-h:#e0f2fe;--b-h:#0ea5e9;margin-left:0;display:inline-flex;align-items:center;justify-content:center;gap:0.5rem;padding:4px 10px;border-radius:999px;border:1.5px solid var(--b);background:var(--bg);color:var(--c);cursor:pointer;font-size:12px;font-weight:600;transition:all .2s ease;-webkit-tap-highlight-color:transparent}.stock-info-btn:hover{background:var(--bg-h);border-color:var(--b-h);color:#0284c7;transform:translateY(-1px);box-shadow:0 2px 8px rgba(14,165,233,.15)}.stock-info-btn:active{transform:translateY(0)}.stock-info-btn:focus-visible{outline:0;box-shadow:0 0 0 3px rgba(14,165,233,.2)}.stock-info-btn svg{width:14px;height:14px;flex-shrink:0}.stock-info-btn .btn-text{white-space:nowrap}
  1056.  
  1057. .stock-popover{position:absolute;z-index:9999;min-width:280px;max-width:92vw;background:#0b1220;color:#eef3ff;border:1px solid rgba(255,255,255,.08);border-radius:14px;box-shadow:0 20px 40px rgba(12,12,20,.45);padding:12px 12px 8px;display:none}.stock-popover.show{display:block}.stock-popover::before{content:"";position:absolute;top:-8px;left:24px;width:14px;height:14px;background:#0b1220;border-left:1px solid rgba(255,255,255,.08);border-top:1px solid rgba(255,255,255,.08);transform:rotate(45deg)}.sp-head{display:flex;align-items:center;justify-content:space-between;margin-bottom:8px}.sp-title{font-weight:800;font-size:14px}.sp-close{background:transparent;border:0;color:#98a2b3;cursor:pointer}
  1058.  
  1059. .sp-list{list-style:none;margin:0;padding:0;display:flex;flex-direction:column;gap:8px}.sp-item{display:grid;grid-template-columns:1fr auto 32px;column-gap:12px;align-items:center;padding:10px 10px;min-height:44px;border-radius:10px;background:rgba(255,255,255,.03)}.sp-left{display:flex;align-items:center;gap:10px}.sp-dot{width:10px;height:10px;border-radius:999px;background:var(--dot,#60a5fa);display:inline-block}.sp-label{font-weight:600;font-size:13px}
  1060.  
  1061.  
  1062. .sp-qty{grid-column:2;justify-self:end;min-width:40px;text-align:right;font-weight:800;font-size:13px;color:#cfe4ff;font-variant-numeric:tabular-nums}
  1063.  
  1064. .sp-wa{
  1065.  grid-column:3; justify-self:end;
  1066.  width:32px; height:32px; min-width:32px; min-height:32px;
  1067.  box-sizing:border-box;
  1068.  padding:0; line-height:0; text-decoration:none; outline:0;
  1069.  display:inline-flex; align-items:center; justify-content:center;
  1070.  border-radius:999px; border:1px solid rgba(37,211,102,.60);  /* 1px untuk hasil “crisp” */
  1071.  background:rgba(37,211,102,.08); color:#25D366;
  1072.  transition:background-color .15s ease, border-color .15s ease, transform .05s ease;
  1073.  -webkit-tap-highlight-color:transparent;
  1074. }
  1075. .sp-wa:hover{background:rgba(37,211,102,.16);border-color:rgba(37,211,102,.75)}
  1076. .sp-wa:active{transform:translateY(.5px) scale(.98)}
  1077.  
  1078. .sp-wa svg{width:18px;height:18px;display:block;vertical-align:middle}
  1079. .stock-popover a{text-decoration:none}
  1080.  
  1081. #deskripsi img{max-width:450px!important;height:unset!important}@media(max-width:640px){.stock-popover{position:fixed;left:0;right:0;bottom:max(12px,env(safe-area-inset-bottom,12px));margin:0 10px;padding:14px 12px 10px;border-radius:16px}.stock-popover::before{display:none}.stock-info-btn{padding:4px 8px;gap:4px;border:0;background:transparent}.stock-info-btn:hover{background:transparent;box-shadow:none;transform:none}.stock-info-btn .btn-text{display:none}.stock-info-btn svg{width:16px;height:16px}.sp-item{grid-template-columns:1fr auto 36px}.sp-wa{width:36px;height:36px;min-width:36px;min-height:36px}.sp-wa svg{width:19px;height:19px}}
  1082.  
  1083. .stock-dot{position:absolute;bottom:8px;right:8px;width:8px;height:8px;border-radius:50%;box-shadow:0 1px 3px rgba(0,0,0,0.4);z-index:2;cursor:help}.stock-dot.ready{background:#10b981}.stock-dot.low{background:#f59e0b}.stock-dot.out{background:#ef4444}.stock-dot:hover{transform:scale(1.2);transition:transform 0.2s ease}@media(max-width:640px){.stock-dot{width:7px;height:7px;bottom:6px;right:6px}}
  1084.  
  1085. .pd-related-card .spec-chips{font-size:11px;color:#64748b;margin:4px 0 6px 0;line-height:1.3;font-weight:500}.pd-related-card .spec-chips .spec-divider{margin:0 4px;opacity:0.6}@media(max-width:640px){.pd-related-card .spec-chips{font-size:10px;margin:3px 0 5px 0}#deskripsi img{max-width:300px!important;height:unset!important;justify-self:center!important}}
  1086.  
  1087. .pwp-trigger-badge{display:inline-flex;align-items:center;gap:4px;padding:3px 8px 4px;background:linear-gradient(135deg,#fbbf24 0%,#f59e0b 100%);color:#78350f;border-radius:6px;font-size:.65rem;font-weight:600;border:0}.pwp-trigger-badge svg{flex-shrink:0;width:12px;height:12px}
  1088. .pwp-deals-section{margin:0;padding:12px;background:linear-gradient(135deg,#fef3c7 0%,#fde68a 100%);border-radius:12px;border:2px solid #fbbf24}.pwp-deals-header{display:flex;gap:10px;margin-bottom:10px}.pwp-icon{flex-shrink:0;color:#f59e0b;width:18px;height:18px}.pwp-text .pwp-title{margin:0 0 2px 0;font-size:14px;font-weight:700;color:#78350f}.pwp-text .pwp-subtitle{margin:0;font-size:11px;color:#92400e;opacity:0.9}.pwp-deals-loading{text-align:center;padding:40px 0;color:#92400e}.pwp-spinner{width:40px;height:40px;border:3px solid #fbbf24;border-top-color:#f59e0b;border-radius:50%;animation:spin 0.8s linear infinite;margin:0 auto 12px}@keyframes spin{to{transform:rotate(360deg)}}
  1089. .pwp-deals-grid{display:flex;flex-direction:column;gap:6px}.pwp-deal-card{background:#fff;border-radius:6px;overflow:hidden;border:1px solid #fbbf24;display:flex;align-items:center;padding:8px;gap:10px}.pwp-deal-card:hover{background:#fef3c7}.pwp-deal-thumb{flex-shrink:0;width:50px;height:50px;background:#f8fafc;overflow:hidden;border-radius:4px}.pwp-deal-thumb img{width:100%;height:100%;object-fit:cover}.pwp-deal-badge{background:#dc2626;color:#fff;padding:2px 5px;border-radius:3px;font-size:9px;font-weight:700;margin-left:auto}.pwp-deal-info{flex:1;display:flex;flex-direction:column;gap:4px}.pwp-deal-name{font-size:12px;font-weight:600;color:#0f172a;margin:0;line-height:1.2}.pwp-deal-prices{display:flex;align-items:center;gap:6px;flex-wrap:wrap}.pwp-deal-price{font-size:14px;font-weight:800;color:#dc2626;white-space:nowrap}.pwp-deal-original{font-size:11px;color:#64748b;text-decoration:line-through;white-space:nowrap}.pwp-cart-note{margin-top:8px;padding:6px 10px;background:#e0f2fe;border-left:2px solid#0ea5e9;font-size:11px;color:#0c4a6e;border-radius:4px}
  1090. @media(max-width:640px){.pwp-deals-section{margin:12px 0;padding:10px;border-radius:10px}.pwp-deals-header{gap:8px}.pwp-text .pwp-title{font-size:13px}.pwp-text .pwp-subtitle{font-size:10px}.pwp-deal-card{padding:6px;gap:8px}.pwp-deal-thumb{width:45px;height:45px}.pwp-deal-name{font-size:11px}.pwp-deal-price{font-size:13px}.pwp-deal-original{font-size:10px}}
  1091.  
  1092. .preorder-badge{display:inline-flex;align-items:center;gap:5px;padding:6px 12px;background:linear-gradient(135deg,#8b5cf6 0%,#7c3aed 100%);color:#fff;border-radius:8px;font-size:13px;font-weight:700;border:0;box-shadow:0 2px 8px rgba(139,92,246,.25)}.preorder-badge svg{width:16px;height:16px;flex-shrink:0}.preorder-info{margin:12px 0;padding:14px;background:linear-gradient(135deg,#f5f3ff 0%,#ede9fe 100%);border:1.5px solid #c4b5fd;border-radius:12px}.preorder-info-header{display:flex;align-items:center;gap:8px;margin-bottom:10px}.preorder-info-icon{width:20px;height:20px;color:#7c3aed;flex-shrink:0}.preorder-info-title{font-size:14px;font-weight:700;color:#5b21b6;margin:0}.preorder-info-items{display:flex;flex-direction:column;gap:8px}.preorder-info-row{display:flex;align-items:center;justify-content:space-between;font-size:13px}.preorder-info-label{color:#6b21a8;font-weight:600}.preorder-info-value{color:#5b21b6;font-weight:700}.preorder-info-value.highlight{color:#dc2626;font-size:14px}.preorder-info-note{margin-top:10px;padding:8px 10px;background:#fef3c7;border-left:2px solid #f59e0b;font-size:12px;color:#78350f;border-radius:6px;line-height:1.4}@media(max-width:640px){.preorder-badge{font-size:12px;padding:5px 10px}.preorder-info{margin:10px 0;padding:12px}.preorder-info-title{font-size:13px}.preorder-info-row{font-size:12px}.preorder-info-note{font-size:11px;padding:6px 8px}}
  1093. </style>
  1094.  
  1095. <div class="pd-sticky-header" id="pd-sticky-header"><div class="pd-sticky-header-container"><div class="pd-sticky-thumb"><img src="https://www.seoulexhibition.com/macan123.jpeg" alt="MACAN123 LOGIN" id="pd-sticky-thumb-img"></div><div class="pd-sticky-info"><h2 class="pd-sticky-title" id="pd-sticky-title">MACAN123 - Platform dengan Beragam Pilihan Game Lengkap dari Banyak Provider</h2><div class="pd-sticky-price-row"><span class="pd-sticky-price" id="pd-sticky-price">Rp 10.000,-</span><span class="pd-sticky-price-original" id="pd-sticky-price-original">Rp 1.000.000</span><span class="pd-sticky-discount" id="pd-sticky-discount">-99.5%</span></div></div><div class="pd-sticky-actions"><button type="button" class="pd-sticky-share-btn" id="pd-sticky-share-btn" aria-label="Bagikan produk" title="Bagikan"><svg viewBox="0 0 24 24" width="16" height="16" aria-hidden="true"><path fill="currentColor" d="M18 16.08c-.76 0-1.44.3-1.96.77L8.91 12.7c.05-.23.09-.46.09-.7s-.04-.47-.09-.7l7.05-4.11c.54.5 1.25.81 2.04.81 1.66 0 3-1.34 3-3s-1.34-3-3-3-3 1.34-3 3c0 .24.04.47.09.7L8.04 9.81C7.5 9.31 6.79 9 6 9c-1.66 0-3 1.34-3 3s1.34 3 3 3c.79 0 1.5-.31 2.04-.81l7.12 4.16c-.05.21-.08.43-.08.65 0 1.61 1.31 2.92 2.92 2.92s2.92-1.31 2.92-2.92-1.31-2.92-2.92-2.92z"/></svg></button><button type="button" class="pd-sticky-btn pd-sticky-btn-chat" id="pd-sticky-chat"><svg viewBox="0 0 640 640" fill="currentColor" aria-hidden="true"><path d="M320 128C241 128 175.3 185.3 162.3 260.7C171.6 257.7 181.6 256 192 256L208 256C234.5 256 256 277.5 256 304L256 400C256 426.5 234.5 448 208 448L192 448C139 448 96 405 96 352L96 288C96 164.3 196.3 64 320 64C443.7 64 544 164.3 544 288L544 456.1C544 522.4 490.2 576.1 423.9 576.1L336 576L304 576C277.5 576 256 554.5 256 528C256 501.5 277.5 480 304 480L336 480C362.5 480 384 501.5 384 528L384 528L424 528C463.8 528 496 495.8 496 456L496 435.1C481.9 443.3 465.5 447.9 448 447.9L432 447.9C405.5 447.9 384 426.4 384 399.9L384 303.9C384 277.4 405.5 255.9 432 255.9L448 255.9C458.4 255.9 468.3 257.5 477.7 260.6C464.7 185.3 399.1 127.9 320 127.9z"/></svg>Tanya</button><button type="button" class="pd-sticky-btn pd-sticky-btn-cart" id="pd-sticky-add-cart" disabled>+ Keranjang</button><button type="button" class="pd-sticky-btn pd-sticky-btn-buy" id="pd-sticky-buy" disabled>Beli Sekarang</button></div></div></div>
  1096.  
  1097. <main class="product-single product-single--v3"><nav class="pd-breadcrumb" aria-label="breadcrumb"><a href="https://macan123.pages.dev/">MACAN123 LOGIN</a><span>/</span><a href="https://www.seoulexhibition.com/">MACAN123</a><span>/</span><a href="https://www.seoulexhibition.com/">Situs Macan123</a><span>/</span><a href="https://www.seoulexhibition.com/">SLOT GACOR</a><span>/</span><a href="https://www.seoulexhibition.com/">TOTO </a><span>/</span><span class="current">MACAN123 - Platform dengan Beragam Pilihan Game Lengkap dari Banyak Provider
  1098. </span></nav>
  1099.  
  1100. <div class="pd-top-layout"><section class="pd-media-card"><figure class="pd-main-image" id="pd-main-figure"><img id="pd-main-img" src="https://www.seoulexhibition.com/macan123.jpeg" alt="MACAN123 GACOR" data-slug="" loading="eager">
  1101. </figure>
  1102.  
  1103. <div class="pd-mobile-slider-wrapper">
  1104. <div class="pd-mobile-slider" id="pd-mobile-slider" aria-label="Galeri gambar (geser)"><div class="pd-mslide"><img src="https://www.seoulexhibition.com/macan123.jpeg" alt="MACAN123 GACOR" loading="eager"></div><div class="pd-mslide"><img src="https://www.seoulexhibition.com/macan123.jpeg" alt="MACAN123 GACOR" loading="lazy"></div><div class="pd-mslide"><img src="https://www.seoulexhibition.com/macan123.jpeg" alt="MACAN123 GACOR" loading="lazy"></div><div class="pd-mslide"><img src="https://www.seoulexhibition.com/macan123.jpeg" alt="MACAN123 GACOR" loading="lazy"></div><div class="pd-mslide"><img src="https://www.seoulexhibition.com/macan123.jpeg" alt="MACAN123 GACOR" loading="lazy"></div><div class="pd-mslide"><img src="https://www.seoulexhibition.com/macan123.jpeg" alt="MACAN123 GACOR" loading="lazy"></div></div><div class="pd-gallery-counter" id="pd-gallery-counter">1/6</div></div>
  1105. <div class="pd-thumb-gallery" id="pd-thumb-gallery" aria-label="Galeri gambar produk"><button type="button" class="pd-thumb-btn active" data-full="https://www.seoulexhibition.com/macan123.jpeg" data-alt="MACAN123 GACOR" data-slug="" aria-label="Gambar 1"><img src="https://www.seoulexhibition.com/macan123.jpeg" alt="MACAN123 GACOR" loading="lazy"></button><button type="button" class="pd-thumb-btn " data-full="https://www.seoulexhibition.com/macan123.jpeg" data-alt="MACAN123 GACOR" data-slug="https://www.seoulexhibition.com/macan123.jpeg" aria-label="Gambar 2"><img src="https://www.seoulexhibition.com/macan123.jpeg" alt="MACAN123 GACOR" loading="lazy"></button><button type="button" class="pd-thumb-btn " data-full="https://www.seoulexhibition.com/macan123.jpeg" data-alt="MACAN123 GACOR" data-slug="lenovo-legion-go-8asp2-83n0000rid-ryzen-z2-extreme-amd-radeon-graphics-eclipse-b-1761796941-223.webp" aria-label="Gambar 3"><img src="https://www.seoulexhibition.com/macan123.jpeg" alt="MACAN123 GACOR" loading="lazy"></button><button type="button" class="pd-thumb-btn " data-full="https://www.seoulexhibition.com/macan123.jpeg" data-alt="MACAN123 GACOR" data-slug="lenovo-legion-go-8asp2-83n0000rid-ryzen-z2-extreme-amd-radeon-graphics-eclipse-b-1761796941-776.webp" aria-label="Gambar 4"><img src="https://www.seoulexhibition.com/macan123.jpeg" alt="MACAN123 GACOR" loading="lazy"></button><button type="button" class="pd-thumb-btn " data-full="https://www.seoulexhibition.com/macan123.jpeg" data-alt="MACAN123 GACOR" data-slug="lenovo-legion-go-8asp2-83n0000rid-ryzen-z2-extreme-amd-radeon-graphics-eclipse-b-1761796941-634.webp" aria-label="Gambar 5"><img src="https://www.seoulexhibition.com/macan123.jpeg" alt="MACAN123 GACOR" loading="lazy"></button><button type="button" class="pd-thumb-btn " data-full="https://www.seoulexhibition.com/macan123.jpeg" data-alt="MACAN123 GACOR" data-slug="lenovo-legion-go-8asp2-83n0000rid-ryzen-z2-extreme-amd-radeon-graphics-eclipse-b-1761796941-892.webp" aria-label="Gambar 6"><img src="https://www.seoulexhibition.com/macan123.jpeg" alt="MACAN123 GACOR" loading="lazy"></button></div></section><section class="pd-info-card"><div id="pd-variant-combined" class="pd-variant-combined" hidden></div><div class="pd-title-row">
  1106.        <h1 class="pd-title" id="pd-title">MACAN123 - Platform dengan Beragam Pilihan Game Lengkap dari Banyak Provider</h1><button type="button" class="pd-share-btn" id="pd-share-btn" aria-label="Bagikan produk" title="Bagikan"><svg viewBox="0 0 24 24" width="20" height="20" aria-hidden="true"><path fill="currentColor" d="M18 16.08c-.76 0-1.44.3-1.96.77L8.91 12.7c.05-.23.09-.46.09-.7s-.04-.47-.09-.7l7.05-4.11c.54.5 1.25.81 2.04.81 1.66 0 3-1.34 3-3s-1.34-3-3-3-3 1.34-3 3c0 .24.04.47.09.7L8.04 9.81C7.5 9.31 6.79 9 6 9c-1.66 0-3 1.34-3 3s1.34 3 3 3c.79 0 1.5-.31 2.04-.81l7.12 4.16c-.05.21-.08.43-.08.65 0 1.61 1.31 2.92 2.92 2.92s2.92-1.31 2.92-2.92-1.31-2.92-2.92-2.92z"/></svg></button></div>
  1107. <div id="pd-price-anchor">
  1108. </div>
  1109. <div class="pd-price-qr-container">
  1110.        <div class="pd-price-block" id="pd-price-block">
  1111.                <div class="pd-price-row">
  1112.                        <span class="pd-price-current" id="pd-price-current" >Rp 10.000</span>
  1113.                        <span class="pd-price-original" id="pd-price-original">Rp 100.000</span>
  1114.                        <span class="pd-discount-badge" id="pd-discount-badge">-95%</span></div>
  1115.                        <div class="pd-meta-row">
  1116.                                <span class="sold-inline" id="pd-sold-inline" data-role="sold-chip">Terjual Terjual 2</span>
  1117.                                <span class="pwp-trigger-badge" id="pwp-trigger-badge" hidden>
  1118.                                        <svg width="14" height="14" viewBox="0 0 24 24" fill="currentColor">
  1119.                                                <path d="M21.41 11.58l-9-9C12.05 2.22 11.55 2 11 2H4c-1.1 0-2 .9-2 2v7c0 .55.22 1.05.59 1.42l9 9c.36.36.86.58 1.41.58.55 0 1.05-.22 1.41-.59l7-7c.37-.36.59-.86.59-1.41 0-.55-.23-1.06-.59-1.42zM5.5 7C4.67 7 4 6.33 4 5.5S4.67 4 5.5 4 7 4.67 7 5.5 6.33 7 5.5 7z"/></svg>Bisa PWP</span></div>
  1120.                                                <div class="pd-meta-inline"><span class="stock-badge out" id="pd-stock-badge">MACAN123 LOGIN</span>
  1121.                                                        <span class="sku">SKU: <span id="pd-sku">1S83N0880RID</span></span></div>
  1122. <div class="paylater-promo paylater-promo-sm paylater-mobile-only">
  1123.    <span class="paylater-icon">💳</span>
  1124.    <span class="paylater-text">
  1125.        <strong>Autorized Situs Macan123</strong>
  1126.        <small>Situs Macan123 Slot Gacor</small>
  1127.    </span>
  1128. </div>
  1129.  
  1130. <div class="stock-popover" id="pd-stock-popover" role="dialog" aria-hidden="true" aria-label="Informasi stok cabang"><div class="sp-head"><div class="sp-title">Stok Cabang</div><button type="button" class="sp-close" id="pd-stock-popover-close" aria-label="Tutup"><svg width="18" height="18" viewBox="0 0 24 24"><path fill="currentColor" d="M18.3 5.71L12 12.01l-6.3-6.3-1.4 1.41 6.3 6.3-6.3 6.3 1.4 1.41 6.3-6.3 6.3 6.3 1.41-1.41-6.3-6.3 6.3-6.3z"/></svg></button></div><ul class="sp-list">
  1131. <li class="sp-item"><div class="sp-left"><span class="sp-dot" style="--dot:#60a5fa;"></span><span class="sp-label">Asia Mega Mas</span></div><span class="sp-qty" id="sp-qty-meg">0</span><a class="sp-wa" href="https://wa.me/6281380009898?text=Halo%2C%20saya%20ingin%20tanya%20stok%20di%20Asia%20Mega%20Mas%20untuk%20produk%20https%3A%2F%2Fplazait.co.id%2Fproduct%2Flenovo-legion-go-8asp2-83n0000rid-ryzen-z2-extreme-amd-radeon-graphics-eclipse-black" target="_blank" rel="noopener" aria-label="WhatsApp Asia Mega Mas"><svg class="ico-wa" viewBox="0 0 24 24" aria-hidden="true" focusable="false"><path fill="currentColor" d="M17.472 14.382c-.297-.149-1.758-.867-2.029-.967-.273-.099-.471-.148-.669.149-.198.297-.767.966-.94 1.164-.173.198-.347.223-.644.074-.297-.149-1.255-.463-2.39-1.475-.883-.788-1.48-1.761-1.653-2.059-.173-.297-.018-.458.13-.606.134-.133.297-.347.446-.52.149-.173.198-.297.298-.495.099-.198.05-.372-.025-.521-.075-.149-.669-1.612-.916-2.206-.242-.579-.487-.5-.669-.51l-.57-.01c-.198 0-.52.074-.792.372s-1.04 1.016-1.04 2.479 1.065 2.876 1.213 3.074c.149.198 2.095 3.2 5.076 4.487.709.306 1.262.489 1.694.626.712.226 1.36.194 1.872.118.571-.085 1.758-.718 2.006-1.411.248-.694.248-1.29.173-1.411-.074-.123-.272-.198-.57-.347m-5.421 7.403h-.002a9.87 9.87 0 01-5.031-1.378l-.361-.214-3.741.982.998-3.648-.235-.374a9.86 9.86 0 01-1.51-5.263c.001-5.45 4.436-9.884 9.888-9.884 2.64 0 5.122 1.03 6.988 2.898a9.825 9.825 0 012.893 6.994c-.003 5.45-4.437 9.884-9.887 9.884m8.413-18.297A11.815 11.815 0 0012.05 0C5.495 0 .16 5.335.158 11.892c0 2.096.547 4.142 1.588 5.945L0 24l6.305-1.654a11.86 11.86 0 005.67 1.448h.005c6.554 0 11.89-5.335 11.893-11.893a11.821 11.821 0 00-3.485-8.413"/></svg></a></li>
  1132.                
  1133.                    <li class="sp-item">
  1134.                      <div class="sp-left">
  1135.                        <span class="sp-dot" style="--dot:#34d399;"></span>
  1136.                        <span class="sp-label">Medan Fair</span>
  1137.                      </div>
  1138.                      <span class="sp-qty" id="sp-qty-mdf">0</span>
  1139.                      <a class="sp-wa"
  1140.                         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"
  1141.                         target="_blank" rel="noopener" aria-label="WhatsApp Medan Fair">
  1142.                        <svg class="ico-wa" viewBox="0 0 24 24" aria-hidden="true" focusable="false">
  1143.                            <path fill="currentColor" d="M17.472 14.382c-.297-.149-1.758-.867-2.029-.967-.273-.099-.471-.148-.669.149-.198.297-.767.966-.94 1.164-.173.198-.347.223-.644.074-.297-.149-1.255-.463-2.39-1.475-.883-.788-1.48-1.761-1.653-2.059-.173-.297-.018-.458.13-.606.134-.133.297-.347.446-.52.149-.173.198-.297.298-.495.099-.198.05-.372-.025-.521-.075-.149-.669-1.612-.916-2.206-.242-.579-.487-.5-.669-.51l-.57-.01c-.198 0-.52.074-.792.372s-1.04 1.016-1.04 2.479 1.065 2.876 1.213 3.074c.149.198 2.095 3.2 5.076 4.487.709.306 1.262.489 1.694.626.712.226 1.36.194 1.872.118.571-.085 1.758-.718 2.006-1.411.248-.694.248-1.29.173-1.411-.074-.123-.272-.198-.57-.347m-5.421 7.403h-.002a9.87 9.87 0 01-5.031-1.378l-.361-.214-3.741.982.998-3.648-.235-.374a9.86 9.86 0 01-1.51-5.263c.001-5.45 4.436-9.884 9.888-9.884 2.64 0 5.122 1.03 6.988 2.898a9.825 9.825 0 012.893 6.994c-.003 5.45-4.437 9.884-9.887 9.884m8.413-18.297A11.815 11.815 0 0012.05 0C5.495 0 .16 5.335.158 11.892c0 2.096.547 4.142 1.588 5.945L0 24l6.305-1.654a11.86 11.86 0 005.67 1.448h.005c6.554 0 11.89-5.335 11.893-11.893a11.821 11.821 0 00-3.485-8.413"/>
  1144.                          </svg>
  1145.                      </a>
  1146.                    </li>
  1147.                
  1148.                    <li class="sp-item">
  1149.                      <div class="sp-left">
  1150.                        <span class="sp-dot" style="--dot:#f59e0b;"></span>
  1151.                        <span class="sp-label">Banda Aceh</span>
  1152.                      </div>
  1153.                      <span class="sp-qty" id="sp-qty-bda">0</span>
  1154.                      <a class="sp-wa"
  1155.                         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"
  1156.                         target="_blank" rel="noopener" aria-label="WhatsApp Banda Aceh">
  1157.                        <svg class="ico-wa" viewBox="0 0 24 24" aria-hidden="true" focusable="false">
  1158.                            <path fill="currentColor" d="M17.472 14.382c-.297-.149-1.758-.867-2.029-.967-.273-.099-.471-.148-.669.149-.198.297-.767.966-.94 1.164-.173.198-.347.223-.644.074-.297-.149-1.255-.463-2.39-1.475-.883-.788-1.48-1.761-1.653-2.059-.173-.297-.018-.458.13-.606.134-.133.297-.347.446-.52.149-.173.198-.297.298-.495.099-.198.05-.372-.025-.521-.075-.149-.669-1.612-.916-2.206-.242-.579-.487-.5-.669-.51l-.57-.01c-.198 0-.52.074-.792.372s-1.04 1.016-1.04 2.479 1.065 2.876 1.213 3.074c.149.198 2.095 3.2 5.076 4.487.709.306 1.262.489 1.694.626.712.226 1.36.194 1.872.118.571-.085 1.758-.718 2.006-1.411.248-.694.248-1.29.173-1.411-.074-.123-.272-.198-.57-.347m-5.421 7.403h-.002a9.87 9.87 0 01-5.031-1.378l-.361-.214-3.741.982.998-3.648-.235-.374a9.86 9.86 0 01-1.51-5.263c.001-5.45 4.436-9.884 9.888-9.884 2.64 0 5.122 1.03 6.988 2.898a9.825 9.825 0 012.893 6.994c-.003 5.45-4.437 9.884-9.887 9.884m8.413-18.297A11.815 11.815 0 0012.05 0C5.495 0 .16 5.335.158 11.892c0 2.096.547 4.142 1.588 5.945L0 24l6.305-1.654a11.86 11.86 0 005.67 1.448h.005c6.554 0 11.89-5.335 11.893-11.893a11.821 11.821 0 00-3.485-8.413"/>
  1159.                          </svg>
  1160.                      </a>
  1161.                    </li>
  1162.                  </ul>
  1163.                </div>
  1164.  
  1165.                            </div>
  1166.            <div class="pd-qr-print" style="display:none;"><div class="pd-qr-label">Scan untuk lihat produk:</div><img src="https://api.qrserver.com/v1/create-qr-code/?size=120x120&data=https%3A%2F%2Fplazait.co.id%2Fproduct%2Flenovo-legion-go-8asp2-83n0000rid-ryzen-z2-extreme-amd-radeon-graphics-eclipse-black" alt="QR Code" class="pd-qr-image"></div>
  1167.            </div>
  1168.                                    <div id="pd-variants-anchor"></div>
  1169.  
  1170.                        
  1171.  
  1172.            <div class="pd-compare-section">
  1173.                <button type="button" class="pd-compare-btn" id="pd-compare-btn" data-product-id="325">
  1174.                    <svg class="compare-icon" width="18" height="18" viewBox="0 0 24 24" fill="currentColor">
  1175.                        <path d="M21,9L17,5V8H10V10H17V13M7,11L3,15L7,19V16H14V14H7V11Z"/>
  1176.                    </svg>
  1177.                    <span class="compare-text">Bandingkan Produk</span>
  1178.                    <span class="compare-remove" hidden>
  1179.                        <svg width="18" height="18" viewBox="0 0 24 24" fill="currentColor">
  1180.                            <path d="M19,6.41L17.59,5L12,10.59L6.41,5L5,6.41L10.59,12L5,17.59L6.41,19L12,13.41L17.59,19L19,17.59L13.41,12L19,6.41Z"/>
  1181.                        </svg>
  1182.                        Hapus dari Perbandingan
  1183.                    </span>
  1184.                </button>
  1185.                <div class="pd-compare-info">
  1186.                    <small class="compare-note" id="compare-note">Bandingkan hingga 5 produk dengan bantuan AI</small>
  1187.                </div>
  1188.            </div>
  1189.            
  1190.            <div class="pd-short-desc"><p><strong>Informasi MACAN123 LOGIN:</strong></p><ul><li>Minimal Deposit: Rp.10.000,-</li><li>Jenis Permainan: Slot Gacor, Slot Online, Live Casino</li><li>Metode Pembayaran: Bank, QRIS, E-Wallet</li><li>Mata Uang: IDR (Indonesian Rupiah)</li><li>Jam Operasional: 24 Jam Nonstop</li><li>Total Rating: 6.458.321</li><li>Rating: ⭐⭐⭐⭐⭐</li><li>Daftar Sekarang: <a href="https://macan123.pages.dev/">Klik Disini</a></li></ul></div><div class="togel-container-v3 mini">
  1191. <div class="rtp-container-v3">
  1192.  <div class="rtp-machine-v3">
  1193.    <h2 class="rtp-title-v3">⚡ SLOT GACOR HARI INI⚡</h2>
  1194.  
  1195.    <div class="rtp-controls-v3">
  1196.      <label>
  1197.        PROVIDER
  1198.        <select id="providerFilter">
  1199.          <option value="ALL">ALL PROVIDER</option>
  1200.        </select>
  1201.      </label>
  1202.  
  1203.      <label>
  1204.        TIPE
  1205.        <select id="slotTypeFilter">
  1206.          <option value="HIGH">HIGH RTP</option>
  1207.          <option value="MEDIUM">MEDIUM RTP</option>
  1208.          <option value="BOOST">BOOST MODE</option>
  1209.        </select>
  1210.      </label>
  1211.  
  1212.      <label>
  1213.        MIN RTP
  1214.        <input id="minRtp" type="number" min="70" max="99" step="1" value="88">
  1215.      </label>
  1216.  
  1217.      <button id="btnRtpRandom" type="button">
  1218.        <span class="icon">🎰</span> GENERATE RTP
  1219.      </button>
  1220.    </div>
  1221.  
  1222.    <div class="rtp-main-result-v3" id="rtpResult">
  1223.      <div class="rtp-status-v3" id="rtpStatus">— READY —</div>
  1224.  
  1225.      <div class="rtp-highlight-box">
  1226.        <div class="rtp-col-left">
  1227.          <div class="k">Provider Rekomendasi</div>
  1228.          <div class="v-game" id="rProvider">-</div>
  1229.  
  1230.          <div class="provider-info">
  1231.            <span class="k-small">Mode:</span>
  1232.            <span class="v-small" id="rSlotType">-</span>
  1233.            <span class="k-small" style="margin-left:10px;">RTP:</span>
  1234.            <span class="v-small" id="rPercent">-</span>
  1235.          </div>
  1236.        </div>
  1237.  
  1238.        <div class="rtp-col-right">
  1239.          <div class="k-rtp">RTP SLOT</div>
  1240.          <div class="v-rtp-huge" id="rRtpValue">-</div>
  1241.        </div>
  1242.      </div>
  1243.  
  1244.      <div class="rtp-details-v3">
  1245.        <div class="rtp-detail-item">
  1246.          <div class="k-detail">Jam Ramai</div>
  1247.          <div class="v-detail" id="rJam">-</div>
  1248.        </div>
  1249.        <div class="rtp-detail-item">
  1250.          <div class="k-detail">Pola Main</div>
  1251.          <div class="v-detail" id="rPola">-</div>
  1252.        </div>
  1253.        <div class="rtp-detail-item">
  1254.          <div class="k-detail">Status</div>
  1255.          <div class="v-detail" id="rStatusText">-</div>
  1256.        </div>
  1257.      </div>
  1258.  
  1259.      <div class="rtp-tip-v3" id="rTip">
  1260.        Tips: Ini simulasi hiburan. Gunakan dengan bijak.
  1261.      </div>
  1262.    </div>
  1263.  
  1264.    <div class="rtp-alts-v3">
  1265.      <div class="rtp-alts-title-v3">3 Alternatif Provider RTP</div>
  1266.      <div class="rtp-alt-list-v3" id="rtpAltList"></div>
  1267.    </div>
  1268.  
  1269.    <div class="rtp-note-v3">
  1270.       Copyright- Seo Gopal
  1271.    </div>
  1272.  </div>
  1273. </div>
  1274.  
  1275. <style>
  1276. @import url("https://fonts.googleapis.com/css2?family=Orbitron:wght@600;700;800&display=swap");
  1277.  
  1278. /* ===============================
  1279.   WRAPPER
  1280. ================================ */
  1281. .rtp-container-v3{
  1282.  display:flex;
  1283.  justify-content:center;
  1284.  padding:16px 10px;
  1285.  font-family:"Orbitron","Poppins",system-ui,sans-serif;
  1286. }
  1287.  
  1288. /* ===============================
  1289.   MACHINE CORE
  1290. ================================ */
  1291. .rtp-machine-v3{
  1292.  position:relative;
  1293.  width:100%;
  1294.  max-width:520px;
  1295.  padding:16px;
  1296.  border-radius:16px;
  1297.  overflow:hidden;
  1298.  isolation:isolate;
  1299.  
  1300.  background:
  1301.    radial-gradient(circle at 15% 0%, rgba(0, 153, 255, 0.16), transparent 48%),
  1302.    radial-gradient(circle at 85% 100%, rgba(0, 89, 255, 0.16), transparent 55%),
  1303.    linear-gradient(145deg,#08111f,#02050c);
  1304.  
  1305.  border:1px solid rgba(0, 174, 255, 0.45);
  1306.  
  1307.  box-shadow:
  1308.    inset 0 0 18px rgba(0, 174, 255, 0.20),
  1309.    0 0 18px rgba(0, 140, 255, 0.28);
  1310.  
  1311.  color:#e8faff;
  1312. }
  1313.  
  1314. /* HUD SWEEP */
  1315. .rtp-machine-v3::before{
  1316.  content:"";
  1317.  position:absolute;
  1318.  inset:0;
  1319.  background:linear-gradient(120deg, transparent 40%, rgba(0,255,255,.08), transparent 65%);
  1320.  animation:hudSweep 7s linear infinite;
  1321.  pointer-events:none;
  1322.  opacity:.8;
  1323. }
  1324.  
  1325. /* ===============================
  1326.   TITLE
  1327. ================================ */
  1328. .rtp-title-v3{
  1329.  text-align:center;
  1330.  margin:0 0 12px;
  1331.  font-size:15px;
  1332.  font-weight:900;
  1333.  letter-spacing:1px;
  1334.  color:#9edfff;
  1335.  text-shadow:0 0 8px rgba(0, 174, 255, 0.9);
  1336. }
  1337.  
  1338. /* ===============================
  1339.   CONTROLS
  1340. ================================ */
  1341. .rtp-controls-v3{
  1342.  display:grid;
  1343.  grid-template-columns:1fr 1fr;
  1344.  gap:10px;
  1345.  padding:12px;
  1346.  border-radius:14px;
  1347.  
  1348.  background:rgba(0, 8, 24, 0.55);
  1349.  border:1px solid rgba(0, 174, 255, 0.35);
  1350.  box-shadow: inset 0 0 14px rgba(0, 174, 255, 0.15);
  1351. }
  1352.  
  1353. .rtp-controls-v3 label{
  1354.  display:grid;
  1355.  gap:6px;
  1356.  font-size:10px;
  1357.  letter-spacing:.8px;
  1358.  text-transform:uppercase;
  1359.  color:#8fd8ff;
  1360. }
  1361.  
  1362. .rtp-controls-v3 select,
  1363. .rtp-controls-v3 input{
  1364.  background:rgba(4, 14, 35, 0.92);
  1365.  color:#eaffff;
  1366.  border:1px solid rgba(0, 174, 255, 0.45);
  1367.  border-radius:10px;
  1368.  padding:7px 9px;
  1369.  font-weight:700;
  1370.  font-size:12px;
  1371.  outline:none;
  1372.  box-shadow: inset 0 0 10px rgba(0,200,255,.18);
  1373. }
  1374.  
  1375. /* BUTTON */
  1376. #btnRtpRandom{
  1377.  grid-column:span 2;
  1378.  display:flex;
  1379.  align-items:center;
  1380.  justify-content:center;
  1381.  gap:8px;
  1382.  
  1383.  background:linear-gradient(145deg,#0099ff,#004dff);
  1384.  border:none;
  1385.  color:#eaf9ff;
  1386.  font-weight:900;
  1387.  letter-spacing:.8px;
  1388.  border-radius:14px;
  1389.  cursor:pointer;
  1390.  padding:10px 12px;
  1391.  font-size:12px;
  1392.  
  1393.  box-shadow:0 0 16px rgba(0, 140, 255, 0.55);
  1394.  transition:.2s ease;
  1395. }
  1396.  
  1397. #btnRtpRandom:active{ transform:scale(.98); }
  1398. #btnRtpRandom:disabled{ opacity:.75; cursor:not-allowed; }
  1399.  
  1400. /* ===============================
  1401.   MAIN RESULT
  1402. ================================ */
  1403. .rtp-main-result-v3{
  1404.  margin-top:12px;
  1405.  padding:12px;
  1406.  border-radius:14px;
  1407.  
  1408.  background:rgba(3, 12, 30, 0.78);
  1409.  border:1px solid rgba(0, 174, 255, 0.28);
  1410.  box-shadow: inset 0 0 16px rgba(0, 174, 255, 0.16);
  1411. }
  1412.  
  1413. .rtp-status-v3{
  1414.  text-align:center;
  1415.  font-weight:800;
  1416.  letter-spacing:.8px;
  1417.  color:#b5ecff;
  1418.  margin-bottom:10px;
  1419.  font-size:11px;
  1420. }
  1421.  
  1422. .rtp-highlight-box{
  1423.  display:flex;
  1424.  justify-content:space-between;
  1425.  gap:12px;
  1426.  padding-bottom:10px;
  1427.  margin-bottom:10px;
  1428.  border-bottom:1px dashed rgba(0, 174, 255, 0.25);
  1429. }
  1430.  
  1431. .k, .k-rtp{
  1432.  font-size:10px;
  1433.  color:#8ce3ff;
  1434.  text-transform:uppercase;
  1435. }
  1436.  
  1437. .v-game{
  1438.  font-size:14px;
  1439.  font-weight:900;
  1440.  color:#ffffff;
  1441.  margin-top:6px;
  1442.  line-height:1.2;
  1443. }
  1444.  
  1445. .provider-info{
  1446.  margin-top:8px;
  1447.  font-size:11px;
  1448.  color:#d8f5ff;
  1449.  opacity:.95;
  1450. }
  1451.  
  1452. .k-small{
  1453.  color:#7fd7ff;
  1454.  font-size:10px;
  1455. }
  1456.  
  1457. .v-small{
  1458.  color:#f3fcff;
  1459.  font-weight:900;
  1460. }
  1461.  
  1462. .v-rtp-huge{
  1463.  font-size:2.4em;
  1464.  font-weight:900;
  1465.  color:#00bfff;
  1466.  text-shadow:0 0 10px rgba(0, 174, 255, 0.7);
  1467.  line-height:1;
  1468.  letter-spacing:1px;
  1469. }
  1470.  
  1471. /* DETAILS */
  1472. .rtp-details-v3{
  1473.  display:grid;
  1474.  grid-template-columns:repeat(3,1fr);
  1475.  gap:8px;
  1476.  background:rgba(0,8,22,.32);
  1477.  padding:10px;
  1478.  border-radius:12px;
  1479. }
  1480.  
  1481. .k-detail{
  1482.  font-size:9px;
  1483.  color:#7ed8ff;
  1484.  text-transform:uppercase;
  1485. }
  1486.  
  1487. .v-detail{
  1488.  font-size:12px;
  1489.  font-weight:800;
  1490.  color:#ffffff;
  1491.  margin-top:4px;
  1492.  letter-spacing:.8px;
  1493. }
  1494.  
  1495. .rtp-tip-v3{
  1496.  margin-top:10px;
  1497.  font-size:10px;
  1498.  color:#d2f4ff;
  1499.  opacity:.9;
  1500.  text-align:center;
  1501. }
  1502.  
  1503. /* ALTS */
  1504. .rtp-alts-v3{
  1505.  margin-top:12px;
  1506.  padding:12px;
  1507.  border-radius:14px;
  1508.  background:rgba(0, 8, 24, .42);
  1509.  border:1px solid rgba(0, 174, 255, 0.26);
  1510. }
  1511.  
  1512. .rtp-alts-title-v3{
  1513.  font-weight:900;
  1514.  color:#8fdfff;
  1515.  margin-bottom:10px;
  1516.  font-size:12px;
  1517. }
  1518.  
  1519. .rtp-alt-list-v3{
  1520.  display:grid;
  1521.  grid-template-columns:1fr;
  1522.  gap:8px;
  1523. }
  1524.  
  1525. .rtp-alt-item{
  1526.  background:rgba(0, 18, 44, .88);
  1527.  border-radius:12px;
  1528.  padding:10px;
  1529.  border-left:3px solid rgba(0,174,255,0.9);
  1530. }
  1531.  
  1532. .rtp-alt-item .g{
  1533.  font-weight:900;
  1534.  color:#eaffff;
  1535.  font-size:12px;
  1536. }
  1537.  
  1538. .rtp-alt-item .p{
  1539.  font-size:10px;
  1540.  color:#9bdfff;
  1541.  margin-top:4px;
  1542. }
  1543.  
  1544. .rtp-alt-item .r{
  1545.  margin-top:6px;
  1546.  font-weight:900;
  1547.  color:#00c8ff;
  1548.  letter-spacing:.8px;
  1549.  font-size:12px;
  1550. }
  1551.  
  1552. .rtp-note-v3{
  1553.  margin-top:10px;
  1554.  font-size:10px;
  1555.  color:#c8efff;
  1556.  opacity:.85;
  1557.  text-align:center;
  1558. }
  1559.  
  1560. /* MOBILE */
  1561. @media(max-width:420px){
  1562.  .rtp-highlight-box{flex-direction:column}
  1563.  .rtp-details-v3{grid-template-columns:1fr}
  1564. }
  1565.  
  1566. /* ANIM */
  1567. @keyframes hudSweep{
  1568.  0%{transform:translateX(-110%)}
  1569.  100%{transform:translateX(110%)}
  1570. }
  1571. @keyframes pulse{
  1572.  0%{opacity:.55}
  1573.  50%{opacity:1}
  1574.  100%{opacity:.55}
  1575. }
  1576. </style>
  1577.  
  1578. <script>
  1579. /* ===============================
  1580.   DATASET RTP SLOT (SIMULASI)
  1581. ================================ */
  1582. const SLOT_PROVIDERS = [
  1583.  { provider:"Pragmatic Play", code:"PP", jam:"00:00 - 06:00", status:"HOT" },
  1584.  { provider:"PG Soft", code:"PG", jam:"13:00 - 18:00", status:"STABLE" },
  1585.  { provider:"Habanero", code:"HB", jam:"19:00 - 23:00", status:"BOOST" },
  1586.  { provider:"Joker Gaming", code:"JK", jam:"10:00 - 14:00", status:"TRENDING" },
  1587.  { provider:"Spadegaming", code:"SG", jam:"15:00 - 20:00", status:"HOT" },
  1588.  { provider:"Microgaming", code:"MG", jam:"21:00 - 01:00", status:"UP" }
  1589. ];
  1590.  
  1591. const SLOT_PATTERNS = [
  1592.  "AUTO SPIN 20x",
  1593.  "MANUAL 10x",
  1594.  "TURBO 30x",
  1595.  "BUY FEATURE",
  1596.  "SPIN CEPAT",
  1597.  "BET SELANG"
  1598. ];
  1599.  
  1600. const SLOT_STATUS = [
  1601.  "GACOR",
  1602.  "PANAS",
  1603.  "STABIL",
  1604.  "NAIK",
  1605.  "RAME",
  1606.  "MAXWIN MODE"
  1607. ];
  1608.  
  1609. const $ = (q) => document.querySelector(q);
  1610. const randInt = (min,max) => Math.floor(Math.random()*(max-min+1))+min;
  1611.  
  1612. function uniqueProviders(){
  1613.  return SLOT_PROVIDERS.map(p => p.provider);
  1614. }
  1615.  
  1616. function simulateRtp(){
  1617.  return randInt(80, 98);
  1618. }
  1619.  
  1620. function getRtpText(value){
  1621.  return value + "%";
  1622. }
  1623.  
  1624. function getSpinMeter(){
  1625.  return randInt(120, 980) + " SPIN";
  1626. }
  1627.  
  1628. function getRandomPattern(){
  1629.  return SLOT_PATTERNS[randInt(0, SLOT_PATTERNS.length - 1)];
  1630. }
  1631.  
  1632. function getRandomStatus(){
  1633.  return SLOT_STATUS[randInt(0, SLOT_STATUS.length - 1)];
  1634. }
  1635.  
  1636. function applyFilters(){
  1637.  const provider = $("#providerFilter").value;
  1638.  const minRtp = parseFloat($("#minRtp").value || "0");
  1639.  
  1640.  return SLOT_PROVIDERS
  1641.    .filter(x => (provider === "ALL" || x.provider === provider))
  1642.    .map(x => ({ ...x, rtp: simulateRtp() }))
  1643.    .filter(x => x.rtp >= minRtp);
  1644. }
  1645.  
  1646. function pickRandom(arr, n=1){
  1647.  const copy = [...arr];
  1648.  const out = [];
  1649.  for(let i=0;i<n && copy.length;i++){
  1650.    const idx = randInt(0, copy.length - 1);
  1651.    out.push(copy.splice(idx,1)[0]);
  1652.  }
  1653.  return out;
  1654. }
  1655.  
  1656. function renderMain(item, type){
  1657.  $("#rProvider").textContent = `${item.provider} (${item.code}) • Jam Ramai ${item.jam}`;
  1658.  $("#rSlotType").textContent = type;
  1659.  $("#rPercent").textContent = `${item.rtp}%`;
  1660.  
  1661.  $("#rRtpValue").textContent = getRtpText(item.rtp);
  1662.  $("#rJam").textContent = item.jam;
  1663.  $("#rPola").textContent = getRandomPattern();
  1664.  $("#rStatusText").textContent = getRandomStatus();
  1665.  $("#rTip").textContent = "Tips: Ini simulasi hiburan. Gunakan dengan bijak.";
  1666. }
  1667.  
  1668. function renderAlts(list, type){
  1669.  const wrap = $("#rtpAltList");
  1670.  wrap.innerHTML = "";
  1671.  
  1672.  list.forEach(x => {
  1673.    const el = document.createElement("div");
  1674.    el.className = "rtp-alt-item";
  1675.    el.innerHTML = `
  1676.      <div class="g">${x.provider} (${x.code})</div>
  1677.      <div class="p">Mode ${type} • RTP <strong>${x.rtp}%</strong></div>
  1678.      <div class="r">Spin Meter: <strong>${getSpinMeter()}</strong></div>
  1679.    `;
  1680.    wrap.appendChild(el);
  1681.  });
  1682. }
  1683.  
  1684. function spinButton(btn, on){
  1685.  if(on){
  1686.    btn.disabled = true;
  1687.    btn.dataset.text = btn.innerHTML;
  1688.    btn.innerHTML = '<span class="icon">🔄</span> PROCESSING...';
  1689.  }else{
  1690.    btn.disabled = false;
  1691.    btn.innerHTML = btn.dataset.text || '<span class="icon">🎰</span> GENERATE RTP';
  1692.  }
  1693. }
  1694.  
  1695. /* ===============================
  1696.   INIT
  1697. ================================ */
  1698. (function init(){
  1699.  const sel = $("#providerFilter");
  1700.  
  1701.  uniqueProviders().forEach(p => {
  1702.    const option = document.createElement("option");
  1703.    option.value = p;
  1704.    option.textContent = p;
  1705.    sel.appendChild(option);
  1706.  });
  1707.  
  1708.  $("#btnRtpRandom").addEventListener("click", (e) => {
  1709.    const btn = e.currentTarget;
  1710.    const type = $("#slotTypeFilter").value;
  1711.    const filtered = applyFilters();
  1712.    const st = $("#rtpStatus");
  1713.  
  1714.    if(!filtered.length){
  1715.      st.textContent = "— NO MATCH —";
  1716.      st.style.color = "#ffffff";
  1717.      renderAlts([], type);
  1718.      $("#rProvider").textContent = "-";
  1719.      $("#rSlotType").textContent = type;
  1720.      $("#rPercent").textContent = "-";
  1721.      $("#rRtpValue").textContent = "-";
  1722.      $("#rJam").textContent = "-";
  1723.      $("#rPola").textContent = "-";
  1724.      $("#rStatusText").textContent = "-";
  1725.      return;
  1726.    }
  1727.  
  1728.    spinButton(btn, true);
  1729.    st.textContent = "— SCANNING RTP —";
  1730.    st.style.animation = "pulse .6s linear infinite";
  1731.    st.style.color = "#ffffff";
  1732.  
  1733.    const t0 = setInterval(() => {
  1734.      const temp = pickRandom(filtered, 1)[0];
  1735.      $("#rProvider").textContent = `${temp.provider} (${temp.code}) • Jam Ramai ${temp.jam}`;
  1736.      $("#rSlotType").textContent = type;
  1737.      $("#rPercent").textContent = `${temp.rtp}%`;
  1738.      $("#rRtpValue").textContent = getRtpText(temp.rtp);
  1739.      $("#rJam").textContent = temp.jam;
  1740.      $("#rPola").textContent = getRandomPattern();
  1741.      $("#rStatusText").textContent = getRandomStatus();
  1742.    }, 85);
  1743.  
  1744.    setTimeout(() => {
  1745.      clearInterval(t0);
  1746.  
  1747.      const picks = pickRandom(filtered, 4);
  1748.      renderMain(picks[0], type);
  1749.      renderAlts(picks.slice(1), type);
  1750.  
  1751.      st.textContent = "— READY —";
  1752.      st.style.animation = "";
  1753.      st.style.color = "#6fd6ff";
  1754.      spinButton(btn, false);
  1755.    }, 1200);
  1756.  });
  1757.  
  1758.  renderAlts([], "HIGH");
  1759. })();
  1760. </script>
  1761.  
  1762.  
  1763.                        
  1764.            <div class="pwp-deals-section" id="pwp-deals-section" hidden data-product-id="325" data-variant-id="0" data-category-path="Komputer &amp; Laptop/Laptop/Gaming"><div class="pwp-deals-header"><svg class="pwp-icon" width="20" height="20" viewBox="0 0 24 24" fill="currentColor"><path d="M21.41 11.58l-9-9C12.05 2.22 11.55 2 11 2H4c-1.1 0-2 .9-2 2v7c0 .55.22 1.05.59 1.42l9 9c.36.36.86.58 1.41.58.55 0 1.05-.22 1.41-.59l7-7c.37-.36.59-.86.59-1.41 0-.55-.23-1.06-.59-1.42zM5.5 7C4.67 7 4 6.33 4 5.5S4.67 4 5.5 4 7 4.67 7 5.5 6.33 7 5.5 7z"/></svg><div class="pwp-text"><h3 class="pwp-title">Penawaran Spesial PWP (Purchase with Purchase)</h3><p class="pwp-subtitle">Beli produk ini dan dapatkan produk pilihan dengan harga spesial</p></div></div><div class="pwp-deals-loading"><div class="pwp-spinner"></div><p>Memuat penawaran...</p></div><div class="pwp-deals-grid" id="pwp-deals-grid"></div><p class="pwp-cart-note">💡 Produk PWP dapat ditambahkan di halaman keranjang setelah produk ini dimasukkan</p></div>
  1765.        </section>
  1766.  
  1767.        <aside class="pd-sidebar">
  1768.            <div class="pd-side-card pd-buy-card">
  1769.                <form class="pd-buy-form" id="pd-buy-form" data-pid="325">
  1770.                    <input type="hidden" name="variant_id" id="pd-variant-id" value="0">
  1771.                    <div>
  1772.                        <label for="qty" class="qty-label">Qty</label>
  1773.                        <input type="number" id="qty" name="qty" value="0" min="1"
  1774.                               max="0"
  1775.                               disabled>
  1776.                    </div>
  1777.                    <div class="pd-actions">
  1778.                        <button type="submit" class="btn-add-cart" id="btn-add-cart" disabled>+ Keranjang</button>
  1779.                        <button type="button" class="btn-buy" id="btn-buy" data-id="278426" disabled >Beli</button>
  1780.                        <button type="button" class="btn-chat-icon" id="btn-chat-icon" aria-label="Tanya Produk" title="Tanya Produk"><svg viewBox="0 0 640 640" fill="currentColor"><path d="M320 128C241 128 175.3 185.3 162.3 260.7C171.6 257.7 181.6 256 192 256L208 256C234.5 256 256 277.5 256 304L256 400C256 426.5 234.5 448 208 448L192 448C139 448 96 405 96 352L96 288C96 164.3 196.3 64 320 64C443.7 64 544 164.3 544 288L544 456.1C544 522.4 490.2 576.1 423.9 576.1L336 576L304 576C277.5 576 256 554.5 256 528C256 501.5 277.5 480 304 480L336 480C362.5 480 384 501.5 384 528L384 528L424 528C463.8 528 496 495.8 496 456L496 435.1C481.9 443.3 465.5 447.9 448 447.9L432 447.9C405.5 447.9 384 426.4 384 399.9L384 303.9C384 277.4 405.5 255.9 432 255.9L448 255.9C458.4 255.9 468.3 257.5 477.7 260.6C464.7 185.3 399.1 127.9 320 127.9z"/></svg></button>
  1781.                                            </div>
  1782.                </form>
  1783.                <div class="paylater-promo paylater-promo-md paylater-desktop-only">
  1784.    <span class="paylater-icon">💳</span>
  1785.    <span class="paylater-text">
  1786.        <strong>Autorized Link Togel</strong>
  1787.        <small>Link Login MACAN123 LOGIN</small>
  1788.    </span>
  1789. </div>            </div>
  1790.  
  1791.                        
  1792.                        <div class="pd-side-card qoala-banner-card">
  1793.                <div class="qoala-banner">
  1794.                    <div class="qoala-banner-content">
  1795.                        <div class="qoala-icon">
  1796.                            <center><img src="https://cdn.robotaset.com/assets/tpl/e27fb0e839/images/favicon.ico" alt="MACAN123 LOGIN" class="qoala-shield-img"></center>
  1797.                        </div>
  1798.                        <div class="qoala-text">
  1799.                            <div class="qoala-title">Login MACAN123 LOGIN</div>
  1800.                            <div class="qoala-subtitle">Verified</div>
  1801.                        </div>
  1802.                    </div>
  1803.                    <a href="https://www.seoulexhibition.com/" class="qoala-cta"
  1804.                       data-ga-event="qoala_banner_click"
  1805.                       data-product-id="325"
  1806.                       data-product-name="MACAN123 LOGIN"
  1807.                       data-category-path="Komputer &amp; Laptop/Laptop/Gaming" target="_blank">Info</a>
  1808.                </div>
  1809. <style>
  1810. .qoala-banner-card{
  1811.  padding:0;
  1812.  overflow:hidden;
  1813. }
  1814.  
  1815. /* MAIN BANNER */
  1816. .qoala-banner{
  1817.  background: linear-gradient(135deg,#020617 0%, #001a33 50%, #003366 100%);
  1818.  padding:12px 16px;
  1819.  display:flex;
  1820.  align-items:center;
  1821.  justify-content:space-between;
  1822.  color:#e6f6ff;
  1823.  text-decoration:none;
  1824.  min-height:60px;
  1825.  
  1826.  border:1px solid rgba(0,170,255,0.4);
  1827.  box-shadow:
  1828.    0 0 15px rgba(0,150,255,0.3),
  1829.    inset 0 0 15px rgba(0,120,255,0.15);
  1830. }
  1831.  
  1832. /* CONTENT */
  1833. .qoala-banner-content{
  1834.  display:flex;
  1835.  align-items:center;
  1836.  gap:12px;
  1837. }
  1838.  
  1839. .qoala-icon{
  1840.  display:flex;
  1841.  align-items:center;
  1842.  justify-content:center;
  1843. }
  1844.  
  1845. .qoala-shield-img{
  1846.  width:36px;
  1847.  height:36px;
  1848.  object-fit:contain;
  1849.  opacity:0.9;
  1850.  filter: drop-shadow(0 0 8px rgba(0,170,255,0.6));
  1851. }
  1852.  
  1853. /* TEXT */
  1854. .qoala-title{
  1855.  font-weight:600;
  1856.  font-size:14px;
  1857.  line-height:1.2;
  1858.  color:#9fe4ff;
  1859.  text-shadow:0 0 8px rgba(0,170,255,0.6);
  1860. }
  1861.  
  1862. .qoala-subtitle{
  1863.  font-size:12px;
  1864.  opacity:0.9;
  1865.  line-height:1.2;
  1866.  color:#ccefff;
  1867. }
  1868.  
  1869. /* BUTTON */
  1870. .qoala-cta{
  1871.  background:rgba(0,170,255,0.2);
  1872.  color:#ffffff;
  1873.  padding:6px 12px;
  1874.  border-radius:6px;
  1875.  font-size:12px;
  1876.  font-weight:600;
  1877.  text-decoration:none;
  1878.  transition:all 0.2s ease;
  1879.  border:1px solid rgba(0,200,255,0.5);
  1880.  box-shadow:0 0 10px rgba(0,170,255,0.3);
  1881. }
  1882.  
  1883. .qoala-cta:hover{
  1884.  background:rgba(0,170,255,0.35);
  1885.  color:white;
  1886.  box-shadow:0 0 15px rgba(0,200,255,0.6);
  1887. }
  1888.  
  1889. /* MOBILE */
  1890. @media(max-width:768px){
  1891.  .qoala-banner{padding:10px 12px}
  1892.  .qoala-title{font-size:17px}
  1893.  .qoala-subtitle{font-size:11px}
  1894. }
  1895. </style>            </div>
  1896.            
  1897.                        <div class="pd-side-card pd-installment-card2"
  1898.                 id="inst-card"
  1899.                 data-base-price="20789000"
  1900.                 data-zero-smart="0">
  1901.                <div class="inst-head">
  1902.                    <h3>Promo & Fitur MACAN123 LOGIN</h3>
  1903.                                    </div>
  1904.  
  1905.                <div class="inst-bank-tabs" role="tablist" aria-label="Bank">
  1906.                    <button type="button" class="bank-tab active" data-bank="Lucky Draw" aria-selected="true">Lucky Draw</button>
  1907.                    <button type="button" class="bank-tab" data-bank="Lomba Panjat Turnover" aria-selected="false">Lomba Panjat Turnover</button>
  1908.                    <button type="button" class="bank-tab" data-bank="Bocoran Slot Gacor" aria-selected="false">Bocoran Slot Gacor</button>
  1909.                </div>
  1910.  
  1911.                <ul class="inst-month-list" id="inst-month-list" aria-label="Daftar cicilan per bulan"></ul>
  1912.                <div class="inst-note" id="inst-zero-note" style="display:none;">0% Cicilan khusus bank terpilih*</div>
  1913.                <div class="inst-disclaimer">Angka estimasi. Bisa berhttps://macan123.pages.dev/ sesuai kebijakan bank / penyedia.</div>
  1914.            </div>
  1915.            
  1916.            <!-- MECHA BLUE FINAL BOSS REVIEW SLIDER -->
  1917.            <div class="tnt-review-mecha">
  1918.  
  1919.              <div class="tnt-header">
  1920.                <h2>MACAN123</h2>
  1921.                <p>Portal Game Online dengan Sistem Deposit Super Cepat 24 Jam</p>
  1922.              </div>
  1923.            
  1924.              <div class="tnt-slider" id="tntSlider">
  1925.            
  1926.                <div class="tnt-slide active">
  1927.                  <div class="tnt-name">Rian Pratama</div>
  1928.                  <div class="tnt-comment">
  1929.                    "MACAN123 menurut gue portal game online yang praktis banget. Aksesnya mudah, tampilannya simpel, dan proses depositnya cepat jadi gak perlu nunggu lama."
  1930.                  </div>
  1931.                </div>
  1932.            
  1933.                <div class="tnt-slide">
  1934.                  <div class="tnt-name">Dika Saputra</div>
  1935.                  <div class="tnt-comment">
  1936.                    "Yang paling gue suka dari MACAN123 itu sistem deposit 24 jamnya. Mau transaksi kapan aja tetap bisa diproses dengan cepat dan lancar."
  1937.                  </div>
  1938.                </div>
  1939.            
  1940.                <div class="tnt-slide">
  1941.                  <div class="tnt-name">Bima Anggara</div>
  1942.                  <div class="tnt-comment">
  1943.                    "MACAN123 punya sistem yang responsif dan mudah dipakai. Buat pengguna baru juga gak bikin bingung karena semua menu tersusun jelas."
  1944.                  </div>
  1945.                </div>
  1946.            
  1947.                <div class="tnt-slide">
  1948.                  <div class="tnt-name">Aldi Firmansyah</div>
  1949.                  <div class="tnt-comment">
  1950.                    "Deposit di MACAN123 terasa cepat dan praktis. Layanan 24 jamnya bikin lebih fleksibel karena bisa digunakan kapan pun dibutuhkan."
  1951.                  </div>
  1952.                </div>
  1953.            
  1954.                <div class="tnt-slide">
  1955.                  <div class="tnt-name">Raka Mahendra</div>
  1956.                  <div class="tnt-comment">
  1957.                    "Sebagai portal game online, MACAN123 cukup nyaman digunakan. Akses stabil, transaksi cepat, dan layanan bantuannya juga responsif."
  1958.                  </div>
  1959.                </div>
  1960.              </div>
  1961.            </div>
  1962. </div>
  1963. </div>
  1964. <a href="https://macan123.pages.dev/" target="_blank">
  1965.                             <img style="display:block;margin-left:auto;margin-right:auto;height: 250px;border: 2px solid rgb(0, 0, 0);border-radius: 20px;box-shadow: 1px 1px 1px black;" alt="MACAN123 LOGIN" src="https://www.seoulexhibition.com/macan123.jpeg" width="250" height="300"/>
  1966.                             </a>
  1967.  
  1968. </div>
  1969.  
  1970. <style>
  1971. .tnt-review-mecha{
  1972.  background: radial-gradient(circle at center, #020617, #000000);
  1973.  border: 2px solid rgba(0,170,255,0.6);
  1974.  border-radius: 14px;
  1975.  padding: 20px;
  1976.  color: #eaffff;
  1977.  font-family: 'Orbitron', sans-serif;
  1978.  position: relative;
  1979.  overflow: hidden;
  1980.  box-shadow:
  1981.    0 0 25px rgba(0,170,255,0.5),
  1982.    inset 0 0 20px rgba(0,120,255,0.2);
  1983. }
  1984.  
  1985. /* scanline */
  1986. .tnt-review-mecha::before{
  1987.  content:"";
  1988.  position:absolute;
  1989.  inset:0;
  1990.  background: repeating-linear-gradient(
  1991.    to bottom,
  1992.    rgba(0,180,255,0.06),
  1993.    rgba(0,180,255,0.06) 1px,
  1994.    transparent 2px,
  1995.    transparent 4px
  1996.  );
  1997.  pointer-events:none;
  1998. }
  1999.  
  2000. /* HEADER */
  2001. .tnt-header h2{
  2002.  font-size: 18px;
  2003.  color:#6fd6ff;
  2004.  text-shadow:0 0 10px #00bfff,0 0 20px #007bff;
  2005.  margin-bottom:5px;
  2006. }
  2007.  
  2008. .tnt-header p{
  2009.  font-size:12px;
  2010.  opacity:0.8;
  2011.  margin-bottom:15px;
  2012.  color:#bfe9ff;
  2013. }
  2014.  
  2015. /* SLIDER */
  2016. .tnt-slider{
  2017.  position:relative;
  2018.  height:90px;
  2019. }
  2020.  
  2021. .tnt-slide{
  2022.  position:absolute;
  2023.  width:100%;
  2024.  opacity:0;
  2025.  transform:translateX(40px);
  2026.  transition:all .6s ease;
  2027. }
  2028.  
  2029. .tnt-slide.active{
  2030.  opacity:1;
  2031.  transform:translateX(0);
  2032. }
  2033.  
  2034. /* NAME */
  2035. .tnt-name{
  2036.  font-size:14px;
  2037.  color:#00bfff;
  2038.  margin-bottom:5px;
  2039.  text-shadow:0 0 6px #00bfff;
  2040. }
  2041.  
  2042. /* COMMENT */
  2043. .tnt-comment{
  2044.  font-size:13px;
  2045.  line-height:1.5;
  2046.  color:#d9f4ff;
  2047. }
  2048.  
  2049. /* glowing border animation */
  2050. @keyframes pulseGlow{
  2051.  0%{box-shadow:0 0 10px rgba(0,170,255,0.4);}
  2052.  50%{box-shadow:0 0 25px rgba(0,170,255,0.7);}
  2053.  100%{box-shadow:0 0 10px rgba(0,170,255,0.4);}
  2054. }
  2055.  
  2056. .tnt-review-mecha{
  2057.  animation:pulseGlow 2.8s infinite;
  2058. }
  2059. </style>
  2060.  
  2061. <script>
  2062. let slides = document.querySelectorAll('.tnt-slide');
  2063. let index = 0;
  2064.  
  2065. setInterval(()=>{
  2066.  slides[index].classList.remove('active');
  2067.  index = (index + 1) % slides.length;
  2068.  slides[index].classList.add('active');
  2069. }, 3000);
  2070. </script>
  2071.  
  2072.        <section class="pd-full-description cyber-mecha" id="deskripsi">
  2073.  <h2 class="pd-full-desc-title"></h2>
  2074.  
  2075.  <div class="pd-full-desc-body">
  2076.    
  2077.    <div class="mecha-header">
  2078.      <h3>MACAN123 LOGIN</h3>
  2079.    </div>
  2080.  
  2081.    <div class="mecha-image">
  2082.      <center><img src="https://cdn.robotaset.com/assets/tpl/e27fb0e839/images/logo.gif" alt="MACAN123 LOGINSystem" /></center>
  2083.    </div>
  2084.  
  2085.    <div class="mecha-content">
  2086.  
  2087.      <div class="article-content">
  2088.        <p>
  2089.          <a style="text-decoration: none; color: rgb(241, 235, 235); font-weight: 600;" href="https://www.seoulexhibition.com/" target="_blank" rel="noopener noreferrer">MACAN123</a>
  2090.          hadir sebagai <strong>platform</strong> yang menyediakan beragam pilihan game online dari banyak provider dalam satu akses praktis.
  2091.          Bagi pengguna yang mencari situs dengan koleksi permainan lengkap, tampilan mudah digunakan, dan pilihan provider yang bervariasi,
  2092.          MACAN123 menjadi salah satu nama yang relevan untuk dibahas.
  2093.        </p>
  2094.    
  2095.        <p>
  2096.          Title <strong>MACAN123 - Platform dengan Beragam Pilihan Game Lengkap dari Banyak Provider</strong> menggambarkan kebutuhan
  2097.          pengguna yang ingin menemukan platform game dengan katalog luas, bukan hanya satu jenis permainan saja. Di dalamnya, pengguna dapat
  2098.          menjelajahi berbagai kategori game, mulai dari slot bertema klasik, slot modern, game dengan fitur bonus, hingga permainan dari provider
  2099.          populer yang sudah dikenal di komunitas game online.
  2100.        </p>
  2101.    
  2102.        <p>
  2103.          Salah satu alasan MACAN123 banyak dicari adalah karena konsep yang lebih sederhana untuk dipahami. Pengguna tidak perlu berpindah
  2104.          ke banyak halaman berbeda hanya untuk mencari game favorit. Semua pilihan game disusun dalam satu sistem yang lebih rapi, sehingga proses
  2105.          pencarian provider, tema game, dan fitur permainan terasa lebih cepat.
  2106.        </p>
  2107.    
  2108.        <p>
  2109.          Platform ini juga dirancang agar nyaman digunakan melalui berbagai perangkat. Pengguna desktop bisa menikmati tampilan yang luas,
  2110.          sementara pengguna smartphone tetap mendapatkan layout responsif dengan tombol dan menu yang mudah diakses. Hal ini penting karena mayoritas
  2111.          pengguna saat ini lebih sering membuka platform game melalui perangkat mobile.
  2112.        </p>
  2113.    
  2114.        <p>
  2115.          Selain menyediakan banyak pilihan game, MACAN123 juga mengutamakan navigasi yang jelas. Pengguna baru dapat menemukan menu utama,
  2116.          pilihan provider, informasi akun, dan fitur pendukung tanpa harus melewati alur yang membingungkan. Pendekatan seperti ini membuat
  2117.          pengalaman eksplor terasa lebih efisien.
  2118.        </p>
  2119.    
  2120.        <h2>🎯 Keunggulan MACAN123 sebagai Platform </h2>
  2121.        <p>
  2122.          MACAN123 tidak hanya menonjol dari sisi jumlah game, tetapi juga dari cara platform menyusun pengalaman pengguna. Setiap bagian dibuat
  2123.          agar pengunjung bisa memahami pilihan permainan dengan lebih mudah sebelum menentukan game yang ingin dimainkan.
  2124.        </p>
  2125.    
  2126.        <ul>
  2127.          <li>✔️ Menyediakan banyak pilihan game dari berbagai provider</li>
  2128.          <li>✔️ Konsep yang praktis dan mudah dipahami</li>
  2129.          <li>✔️ Tampilan responsif untuk desktop dan smartphone</li>
  2130.          <li>✔️ Navigasi sederhana untuk pengguna baru</li>
  2131.          <li>✔️ Kategori game lebih rapi dan mudah ditemukan</li>
  2132.          <li>✔️ Cocok untuk pengguna yang ingin eksplor banyak tema permainan</li>
  2133.          <li>✔️ Akses cepat tanpa struktur halaman yang terlalu rumit</li>
  2134.        </ul>
  2135.    
  2136.        <p>
  2137.          Dengan kombinasi tersebut, MACAN123 dapat menjadi pilihan bagi pengguna yang ingin mencari platform dengan katalog game lebih luas,
  2138.          tampilan nyaman, dan pilihan provider yang lebih lengkap.
  2139.        </p>
  2140.    
  2141.        <h2>🌐 Pilihan Game Lengkap dari Banyak Provider</h2>
  2142.        <p>
  2143.          Salah satu daya tarik utama <strong>MACAN123</strong> adalah variasi provider yang tersedia. Dalam dunia game online, provider memiliki
  2144.          peran penting karena setiap penyedia game biasanya membawa gaya visual, fitur bonus, tema, dan mekanisme permainan yang berbeda.
  2145.        </p>
  2146.    
  2147.        <p>
  2148.          Ada provider yang dikenal dengan tampilan modern dan animasi halus, ada juga yang fokus pada game ringan dengan ritme permainan cepat.
  2149.          Beberapa provider menghadirkan fitur seperti free spin, scatter, wild, multiplier, hingga bonus round yang membuat pengalaman bermain
  2150.          terasa lebih variatif.
  2151.        </p>
  2152.    
  2153.        <p>
  2154.          Dengan pilihan provider yang banyak, pengguna MACAN123 bisa menyesuaikan permainan berdasarkan preferensi masing-masing. Jika menyukai
  2155.          tema petualangan, pengguna dapat mencari game dengan visual naratif. Jika menyukai game yang sederhana, tersedia juga pilihan dengan
  2156.          tampilan klasik dan mekanisme yang lebih mudah dipahami.
  2157.        </p>
  2158.    
  2159.        <h2>⚙️ Apa Itu di MACAN123?</h2>
  2160.        <p>
  2161.          Istilah <strong></strong> pada MACAN123 mengarah pada konsep akses permainan slot online yang dibuat lebih ringkas, mudah dicari,
  2162.          dan tersusun dalam kategori yang jelas. Pengguna tidak perlu bingung memilih karena daftar game bisa ditelusuri berdasarkan provider,
  2163.          tema, fitur, atau popularitas.
  2164.        </p>
  2165.    
  2166.        <p>
  2167.          Konsep ini sangat membantu pengguna baru yang belum familiar dengan banyak nama provider. Dengan tampilan yang lebih tertata, pengguna
  2168.          bisa memulai dari kategori yang paling mudah, lalu perlahan mengeksplor pilihan game lain sesuai minat.
  2169.        </p>
  2170.    
  2171.        <p>
  2172.          Bagi pengguna lama, juga membantu mempercepat pencarian game favorit. Tidak perlu mengetik ulang atau membuka banyak halaman,
  2173.          karena pilihan utama sudah tersedia dalam satu sistem yang lebih praktis.
  2174.        </p>
  2175.    
  2176.        <h2>🧩 Cara Memilih Game yang Tepat di MACAN123</h2>
  2177.        <p>
  2178.          Banyaknya pilihan game tentu menjadi nilai tambah, tetapi pengguna juga perlu memahami cara memilih permainan yang sesuai. Tidak semua
  2179.          game memiliki karakter yang sama. Ada game dengan ritme cepat, ada yang lebih santai, dan ada juga yang memiliki fitur bonus lebih kompleks.
  2180.        </p>
  2181.    
  2182.        <p>
  2183.          Untuk pengguna baru, disarankan memulai dari game dengan tampilan sederhana dan fitur yang mudah dipahami. Setelah mulai mengenal simbol,
  2184.          pola fitur, dan mekanisme permainan, barulah pengguna dapat mencoba game dari provider lain yang memiliki fitur lebih beragam.
  2185.        </p>
  2186.    
  2187.        <ul>
  2188.          <li>Kenali provider game terlebih dahulu</li>
  2189.          <li>Pilih tema permainan yang nyaman dilihat</li>
  2190.          <li>Pahami fitur seperti wild, scatter, dan multiplier</li>
  2191.          <li>Gunakan perangkat dengan koneksi stabil</li>
  2192.          <li>Jangan langsung memilih game hanya karena sedang ramai dibahas</li>
  2193.          <li>Atur batas bermain agar aktivitas tetap terkontrol</li>
  2194.        </ul>
  2195.    
  2196.        <h2>🔐 Keamanan dan Kenyamanan Pengguna</h2>
  2197.        <p>
  2198.          MACAN123 juga memperhatikan kenyamanan pengguna dalam mengakses platform. Tampilan yang rapi, halaman yang responsif, dan navigasi yang
  2199.          mudah dipahami menjadi bagian penting dari pengalaman pengguna.
  2200.        </p>
  2201.    
  2202.        <p>
  2203.          Pengguna disarankan selalu mengakses halaman resmi agar terhindar dari link tiruan atau halaman yang tidak jelas sumbernya. Pastikan
  2204.          alamat website benar sebelum melakukan login, pendaftaran, atau aktivitas lain di dalam platform.
  2205.        </p>
  2206.    
  2207.        <p>
  2208.          Selain itu, penting juga bagi pengguna untuk menjaga data akun masing-masing. Jangan membagikan username, password, atau informasi pribadi
  2209.          kepada pihak lain. Keamanan akun tetap menjadi tanggung jawab bersama antara platform dan pengguna.
  2210.        </p>
  2211.    
  2212.        <h2>📱 Akses Mobile yang Lebih Praktis</h2>
  2213.        <p>
  2214.          Saat ini, banyak pengguna lebih sering mengakses platform game melalui smartphone. Karena itu, MACAN123 dibuat agar tetap nyaman digunakan
  2215.          pada layar kecil. Menu, tombol, teks, dan daftar game disusun agar mudah dibaca tanpa membuat pengguna kesulitan saat berpindah halaman.
  2216.        </p>
  2217.    
  2218.        <p>
  2219.          Tampilan mobile yang baik membantu pengguna melakukan pencarian game dengan lebih cepat. Baik menggunakan Android maupun iOS, platform yang
  2220.          responsif akan membuat pengalaman eksplor terasa lebih lancar.
  2221.        </p>
  2222.    
  2223.        <h2>🚀 Kesimpulan</h2>
  2224.        <p>
  2225.          <strong>MACAN123</strong> adalah <strong>platform dengan beragam pilihan game lengkap dari banyak provider</strong> yang cocok
  2226.          untuk pengguna yang ingin mengeksplor permainan online dalam satu akses praktis. Dengan katalog game yang luas, tampilan responsif,
  2227.          navigasi mudah, dan pilihan provider yang bervariasi, MACAN123 memberikan pengalaman yang lebih terarah bagi pengguna baru maupun lama.
  2228.        </p>
  2229.    
  2230.        <p>
  2231.          Platform ini tidak hanya mengandalkan banyaknya pilihan game, tetapi juga memberikan kemudahan dalam menemukan permainan sesuai minat.
  2232.          Mulai dari game bertema klasik, modern, hingga game dengan fitur bonus lengkap, semuanya dapat dijelajahi melalui sistem yang lebih rapi.
  2233.        </p>
  2234.    
  2235.        <p class="final-line">
  2236.          ⚔️ <strong>FINAL STATUS:</strong>
  2237.          MACAN123 hadir sebagai platform yang <strong>LENGKAP, PRAKTIS, RESPONSIF, dan MUDAH DIAKSES</strong> — cocok untuk pengguna
  2238.          yang mencari banyak pilihan game dari berbagai provider dalam satu tempat.
  2239.        </p>
  2240.      </div>
  2241.    
  2242.    </div>
  2243.    
  2244.    <section class="tutorial-wrapper" id="tutorial-daftar">
  2245.      <h2>📝 Tutorial Daftar MACAN123</h2>
  2246.    
  2247.      <div class="tutorial-item">
  2248.        <div class="tutorial-question">01. Buka Link Resmi <span></span></div>
  2249.        <div class="tutorial-answer">
  2250.          Akses terlebih dahulu link resmi MACAN123 agar pengguna tidak salah masuk ke halaman lain. Pastikan alamat website benar sebelum melanjutkan proses pendaftaran.
  2251.        </div>
  2252.      </div>
  2253.    
  2254.      <div class="tutorial-item">
  2255.        <div class="tutorial-question">02. Pilih Menu Daftar <span></span></div>
  2256.        <div class="tutorial-answer">
  2257.          Pada halaman utama, cari tombol daftar atau register. Klik tombol tersebut untuk memulai proses pembuatan akun baru di platform MACAN123.
  2258.        </div>
  2259.      </div>
  2260.    
  2261.      <div class="tutorial-item">
  2262.        <div class="tutorial-question">03. Lengkapi Data Akun <span></span></div>
  2263.        <div class="tutorial-answer">
  2264.          Isi formulir pendaftaran dengan data yang benar, seperti username, password, nomor aktif, dan informasi lain sesuai instruksi yang tersedia.
  2265.        </div>
  2266.      </div>
  2267.    
  2268.      <div class="tutorial-item">
  2269.        <div class="tutorial-question">04. Verifikasi dan Simpan Data Login <span></span></div>
  2270.        <div class="tutorial-answer">
  2271.          Periksa kembali data yang sudah dimasukkan. Setelah akun berhasil dibuat, simpan username dan password dengan aman agar mudah digunakan saat login berikutnya.
  2272.        </div>
  2273.      </div>
  2274.    
  2275.      <div class="tutorial-item">
  2276.        <div class="tutorial-question">05. Pilih Provider dan Game Favorit <span></span></div>
  2277.        <div class="tutorial-answer">
  2278.          Setelah login, pengguna dapat mulai menjelajahi pilihan game berdasarkan provider, tema, atau fitur yang tersedia di dalam platform MACAN123.
  2279.        </div>
  2280.      </div>
  2281.    </section>
  2282.    <style>
  2283. /* CONTAINER SAMA PERSIS KAYAK FAQ */
  2284. .tutorial-wrapper {
  2285.  max-width: 720px; /* SAMAIN */
  2286.  margin: 40px auto;
  2287.  padding: 22px;
  2288.  
  2289.  border-radius: 18px;
  2290.  background: #020b14;
  2291.  
  2292.  border: 1px solid rgba(0,150,255,0.35);
  2293.  box-shadow: 0 0 20px rgba(0,150,255,0.35);
  2294.  
  2295.  font-family: Arial, sans-serif;
  2296. }
  2297.  
  2298. /* TITLE */
  2299. .tutorial-wrapper h2 {
  2300.  text-align: center;
  2301.  color: #7bdcff;
  2302.  font-size: 20px;
  2303.  margin-bottom: 20px;
  2304.  text-shadow: 0 0 10px rgba(0,180,255,0.9);
  2305. }
  2306.  
  2307. /* ITEM SAMA PERSIS FAQ STYLE */
  2308. .tutorial-item {
  2309.  margin-bottom: 12px;
  2310.  border-radius: 10px;
  2311.  
  2312.  border: 1px solid rgba(0,150,255,0.45);
  2313.  background: rgba(0,20,50,0.55);
  2314.  
  2315.  overflow: hidden;
  2316.  transition: 0.3s;
  2317. }
  2318.  
  2319. .tutorial-item:hover {
  2320.  border-color: rgba(0,200,255,0.9);
  2321.  box-shadow: 0 0 12px rgba(0,180,255,0.45);
  2322. }
  2323.  
  2324. /* HEADER */
  2325. .tutorial-question {
  2326.  padding: 12px 16px;
  2327.  color: #d8f3ff;
  2328.  font-size: 13px;
  2329.  font-weight: 700;
  2330.  
  2331.  display: flex;
  2332.  justify-content: space-between;
  2333.  align-items: center;
  2334. }
  2335.  
  2336. /* ICON */
  2337. .tutorial-question span {
  2338.  color: #00d9ff;
  2339.  font-weight: 800;
  2340. }
  2341.  
  2342. /* CONTENT */
  2343. .tutorial-answer {
  2344.  padding: 0 16px 12px;
  2345.  color: #bfeaff;
  2346.  font-size: 13px;
  2347.  line-height: 1.6;
  2348. }
  2349. </style>
  2350. <style>
  2351. @import url('https://fonts.googleapis.com/css2?family=Orbitron:wght@400;600;800&display=swap');
  2352.  
  2353. .cyber-mecha {
  2354.  font-family: 'Orbitron', sans-serif;
  2355.  max-width: 900px;
  2356.  margin: 40px auto;
  2357.  padding: 25px;
  2358.  border-radius: 18px;
  2359.  background: radial-gradient(circle at top, #020617, #000000 70%);
  2360.  border: 1px solid rgba(0,150,255,0.45);
  2361.  box-shadow: 0 0 25px rgba(0,150,255,0.35),
  2362.              inset 0 0 25px rgba(0,90,255,0.15);
  2363.  position: relative;
  2364.  overflow: hidden;
  2365. }
  2366.  
  2367. /* scanline effect */
  2368. .cyber-mecha::before {
  2369.  content: "";
  2370.  position: absolute;
  2371.  inset: 0;
  2372.  background: repeating-linear-gradient(
  2373.    to bottom,
  2374.    rgba(0,180,255,0.04),
  2375.    rgba(0,180,255,0.04) 1px,
  2376.    transparent 1px,
  2377.    transparent 3px
  2378.  );
  2379.  pointer-events: none;
  2380. }
  2381.  
  2382. /* TITLE */
  2383. .pd-full-desc-title {
  2384.  text-align: center;
  2385.  font-size: 22px;
  2386.  font-weight: 800;
  2387.  color: #6fd6ff;
  2388.  margin-bottom: 25px;
  2389.  text-shadow: 0 0 10px #00bfff, 0 0 25px #007bff;
  2390.  letter-spacing: 1px;
  2391. }
  2392.  
  2393. /* FAQ BOX */
  2394. .faq-item {
  2395.  margin-bottom: 15px;
  2396.  border-radius: 12px;
  2397.  border: 1px solid rgba(0,150,255,0.3);
  2398.  background: rgba(0,20,50,0.45);
  2399.  backdrop-filter: blur(8px);
  2400.  transition: all 0.3s ease;
  2401.  overflow: hidden;
  2402. }
  2403.  
  2404. .faq-item:hover {
  2405.  border-color: rgba(0,180,255,0.8);
  2406.  box-shadow: 0 0 15px rgba(0,150,255,0.5);
  2407. }
  2408.  
  2409. /* QUESTION */
  2410. .faq-question {
  2411.  padding: 14px 18px;
  2412.  cursor: pointer;
  2413.  font-size: 14px;
  2414.  color: #bfe9ff;
  2415.  position: relative;
  2416. }
  2417.  
  2418. .faq-question::after {
  2419.  content: "+";
  2420.  position: absolute;
  2421.  right: 15px;
  2422.  color: #00bfff;
  2423.  font-weight: bold;
  2424.  transition: 0.3s;
  2425. }
  2426.  
  2427. /* ACTIVE */
  2428. .faq-item.active .faq-question::after {
  2429.  content: "−";
  2430. }
  2431.  
  2432. /* ANSWER */
  2433. .faq-answer {
  2434.  max-height: 0;
  2435.  overflow: hidden;
  2436.  padding: 0 18px;
  2437.  font-size: 13px;
  2438.  color: #d9f4ff;
  2439.  line-height: 1.6;
  2440.  transition: all 0.35s ease;
  2441. }
  2442.  
  2443. .faq-item.active .faq-answer {
  2444.  max-height: 200px;
  2445.  padding: 10px 18px 18px;
  2446. }
  2447.  
  2448. /* glow text */
  2449. .glow {
  2450.  color: #00bfff;
  2451.  text-shadow: 0 0 8px #00bfff, 0 0 18px #007bff;
  2452. }
  2453.  
  2454. .glow-strong {
  2455.  color: #66e0ff;
  2456.  text-shadow: 0 0 10px #00eaff, 0 0 25px #0099ff;
  2457. }
  2458. </style>
  2459.    
  2460. <section class="pd-full-description cyber-mecha" id="deskripsi">
  2461.  
  2462.    
  2463.  <h2 class="pd-full-desc-title">
  2464.    FAQ
  2465.  </h2>
  2466.  
  2467.  <div class="pd-full-desc-body">
  2468.  
  2469.    <div class="faq-item">
  2470.      <div class="faq-question">MACAN123 itu platform seperti apa?</div>
  2471.      <div class="faq-answer">
  2472.        <strong>MACAN123</strong> adalah <span class="glow">platform </span> yang menyediakan akses ke beragam pilihan game online dari banyak provider. Platform ini dibuat untuk memudahkan pengguna menemukan game favorit berdasarkan kategori, tema, fitur, dan penyedia permainan.
  2473.      </div>
  2474.    </div>
  2475.  
  2476.    <div class="faq-item">
  2477.      <div class="faq-question">Apa yang membuat MACAN123 cocok untuk pencarian?</div>
  2478.      <div class="faq-answer">
  2479.        MACAN123 cocok untuk pengguna yang mencari <span class="glow"> dengan pilihan game lengkap</span> karena menyediakan banyak variasi permainan dalam satu tempat. Pengguna tidak perlu berpindah-pindah platform untuk mencari game dari provider berbeda.
  2480.      </div>
  2481.    </div>
  2482.  
  2483.    <div class="faq-item">
  2484.      <div class="faq-question">Apakah MACAN123 menyediakan game dari banyak provider?</div>
  2485.      <div class="faq-answer">
  2486.        Ya, <strong>MACAN123</strong> menghadirkan pilihan game dari berbagai provider populer. Setiap provider biasanya memiliki karakter berbeda, mulai dari tampilan visual, fitur bonus, tema permainan, hingga mekanisme seperti wild, scatter, free spin, dan multiplier.
  2487.      </div>
  2488.    </div>
  2489.  
  2490.    <div class="faq-item">
  2491.      <div class="faq-question">Apa keuntungan punya banyak pilihan provider di MACAN123?</div>
  2492.      <div class="faq-answer">
  2493.        Keuntungan utamanya adalah pengguna bisa lebih bebas memilih game sesuai selera. Ada game dengan ritme cepat, game bertema klasik, game modern, hingga permainan dengan fitur bonus lengkap. Variasi ini membuat pengalaman eksplor di <strong>MACAN123</strong> terasa lebih luas dan tidak monoton.
  2494.      </div>
  2495.    </div>
  2496.  
  2497.    <div class="faq-item">
  2498.      <div class="faq-question">Apakah MACAN123 mudah digunakan oleh pengguna baru?</div>
  2499.      <div class="faq-answer">
  2500.        Cocok untuk pengguna baru, karena <strong>MACAN123</strong> memiliki tampilan yang sederhana dan navigasi yang mudah dipahami. Pengguna bisa mencari game berdasarkan provider, kategori, atau tema tanpa harus bingung membuka banyak menu.
  2501.      </div>
  2502.    </div>
  2503.  
  2504.    <div class="faq-item">
  2505.      <div class="faq-question">Apakah  di MACAN123 bisa diakses lewat HP?</div>
  2506.      <div class="faq-answer">
  2507.        Bisa. <strong>MACAN123</strong> mendukung akses melalui <span class="glow">smartphone, tablet, laptop, dan desktop</span>. Tampilan platform dibuat responsif agar daftar game, tombol menu, dan halaman provider tetap nyaman digunakan di berbagai ukuran layar.
  2508.      </div>
  2509.    </div>
  2510.  
  2511.    <div class="faq-item">
  2512.      <div class="faq-question">Bagaimana cara memilih game yang tepat di MACAN123?</div>
  2513.      <div class="faq-answer">
  2514.        Pengguna bisa mulai dengan melihat provider, tema permainan, dan fitur yang tersedia. Untuk pemula, sebaiknya pilih game yang tampilannya sederhana dan fiturnya mudah dipahami. Setelah itu, pengguna dapat mencoba game lain dari provider berbeda sesuai preferensi masing-masing.
  2515.      </div>
  2516.    </div>
  2517.  
  2518.    <div class="faq-item">
  2519.      <div class="faq-question">Kenapa MACAN123 disebut platform  yang lengkap?</div>
  2520.      <div class="faq-answer">
  2521.        Karena <strong>MACAN123</strong> tidak hanya menyediakan satu jenis game, tetapi menghadirkan banyak pilihan permainan dari berbagai provider dalam satu akses. Mulai dari slot klasik, slot modern, game bertema petualangan, hingga game dengan fitur bonus dapat ditemukan lebih praktis.
  2522.      </div>
  2523.    </div>
  2524.  
  2525.    <div class="faq-item">
  2526.      <div class="faq-question">Apakah banyaknya pilihan game menjamin kemenangan?</div>
  2527.      <div class="faq-answer">
  2528.        Tidak. Banyaknya pilihan game di <strong>MACAN123</strong> memberikan variasi dan kenyamanan eksplor, tetapi hasil permainan tetap bergantung pada sistem masing-masing game. Pengguna disarankan bermain secara bijak, memahami fitur permainan, dan mengatur batas bermain sesuai kemampuan.
  2529.      </div>
  2530.    </div>
  2531.  
  2532.  </div>
  2533.  </section>
  2534. <script>
  2535. document.querySelectorAll(".faq-question").forEach(q => {
  2536.  q.addEventListener("click", () => {
  2537.    const item = q.parentElement;
  2538.    item.classList.toggle("active");
  2539.  });
  2540. });
  2541. </script>
  2542. <style>
  2543. @import url('https://fonts.googleapis.com/css2?family=Orbitron:wght@500;700;900&display=swap');
  2544.  
  2545. .cyber-mecha {
  2546.  max-width: 800px;
  2547.  margin: 40px auto;
  2548.  background: radial-gradient(circle at top, #020617, #000000 70%);
  2549.  border-radius: 16px;
  2550.  border: 1px solid rgba(0,150,255,0.5);
  2551.  box-shadow:
  2552.    0 0 25px rgba(0,150,255,0.4),
  2553.    inset 0 0 20px rgba(0,90,255,0.2);
  2554.  padding: 25px;
  2555.  font-family: 'Orbitron', sans-serif;
  2556.  color: #d8f6ff;
  2557.  position: relative;
  2558.  overflow: hidden;
  2559. }
  2560.  
  2561. /* scanline overlay */
  2562. .cyber-mecha::before {
  2563.  content: "";
  2564.  position: absolute;
  2565.  inset: 0;
  2566.  background: repeating-linear-gradient(
  2567.    to bottom,
  2568.    rgba(0,180,255,0.05),
  2569.    rgba(0,180,255,0.05) 1px,
  2570.    transparent 1px,
  2571.    transparent 3px
  2572.  );
  2573.  pointer-events: none;
  2574. }
  2575.  
  2576. /* TITLE */
  2577. .pd-full-desc-title {
  2578.  text-align: center;
  2579.  font-size: 22px;
  2580.  color: #6fd6ff;
  2581.  letter-spacing: 2px;
  2582.  text-shadow: 0 0 12px #00bfff, 0 0 25px #007bff;
  2583.  margin-bottom: 20px;
  2584. }
  2585.  
  2586. /* SUB HEADER */
  2587. .mecha-header h3 {
  2588.  text-align: center;
  2589.  font-size: 18px;
  2590.  color: #8fdfff;
  2591.  text-shadow: 0 0 10px #00bfff;
  2592.  margin-bottom: 15px;
  2593. }
  2594.  
  2595. /* IMAGE */
  2596. .mecha-image img {
  2597.  width: 100%;
  2598.  border-radius: 10px;
  2599.  border: 1px solid rgba(0,150,255,0.6);
  2600.  box-shadow: 0 0 20px rgba(0,150,255,0.4);
  2601.  margin-bottom: 20px;
  2602. }
  2603.  
  2604. /* CONTENT */
  2605. .mecha-content p {
  2606.  font-size: 14px;
  2607.  line-height: 1.8;
  2608.  margin-bottom: 14px;
  2609.  color: #d9f4ff;
  2610. }
  2611.  
  2612. /* GLOW TEXT */
  2613. .glow {
  2614.  color: #00bfff;
  2615.  text-shadow: 0 0 8px #00bfff, 0 0 18px #007bff;
  2616.  font-weight: 600;
  2617. }
  2618.  
  2619. .glow-strong {
  2620.  color: #66e0ff;
  2621.  text-shadow:
  2622.    0 0 10px #00eaff,
  2623.    0 0 25px #0099ff;
  2624.  font-weight: 700;
  2625. }
  2626.  
  2627. /* FINAL LINE */
  2628. .final-line {
  2629.  margin-top: 18px;
  2630.  padding: 10px;
  2631.  border: 1px solid rgba(0,150,255,0.5);
  2632.  background: rgba(0,80,255,0.08);
  2633.  border-radius: 8px;
  2634.  text-align: center;
  2635.  box-shadow: 0 0 12px rgba(0,150,255,0.25);
  2636. }
  2637. </style>
  2638.    
  2639.    
  2640.    
  2641. <section class="pd-related-full">
  2642.  <h2 class="pd-related-title">Pilihan Game & Provider Terkait</h2>
  2643.  
  2644.  <div class="pd-related-grid pd-related-grid--full">
  2645.  
  2646.    <a class="pd-related-card" href="https://www.seoulexhibition.com/">
  2647.      <div class="thumb">
  2648.        <img src="https://www.seoulexhibition.com/macan123.jpeg" alt="MACAN123 Platform ">
  2649.        <span class="mini-disc">HOT</span>
  2650.      </div>
  2651.      <div class="info">
  2652.        <h3>MACAN123 </h3>
  2653.        <div class="spec-chips">
  2654.           <span class="spec-divider">|</span> Multi Provider <span class="spec-divider">|</span> Mobile Friendly
  2655.        </div>
  2656.        <span class="price">
  2657.          <span class="final">Akses Game Lengkap</span>
  2658.          <span class="ori">Banyak Provider</span>
  2659.        </span>
  2660.        <span class="sold">Banyak dicari pengguna</span>
  2661.        <span class="stock-dot ready" title="Aktif"></span>
  2662.      </div>
  2663.    </a>
  2664.  
  2665.    <a class="pd-related-card" href="https://www.seoulexhibition.com/">
  2666.      <div class="thumb">
  2667.        <img src="https://www.seoulexhibition.com/macan123.jpeg" alt="MACAN123 Provider Slot Online">
  2668.        <span class="mini-disc">NEW</span>
  2669.      </div>
  2670.      <div class="info">
  2671.        <h3>Provider Slot Lengkap</h3>
  2672.        <div class="spec-chips">
  2673.          Pragmatic <span class="spec-divider">|</span> PG Soft <span class="spec-divider">|</span> Habanero
  2674.        </div>
  2675.        <span class="price">
  2676.          <span class="final">Pilihan Provider</span>
  2677.          <span class="ori">Update Berkala</span>
  2678.        </span>
  2679.        <span class="sold">Kategori favorit</span>
  2680.        <span class="stock-dot ready" title="Ready"></span>
  2681.      </div>
  2682.    </a>
  2683.  
  2684.    <a class="pd-related-card" href="https://www.seoulexhibition.com/">
  2685.      <div class="thumb">
  2686.        <img src="https://www.seoulexhibition.com/macan123.jpeg" alt=" Game Populer MACAN123">
  2687.        <span class="mini-disc">TOP</span>
  2688.      </div>
  2689.      <div class="info">
  2690.        <h3>Game Slot Populer</h3>
  2691.        <div class="spec-chips">
  2692.          Wild <span class="spec-divider">|</span> Scatter <span class="spec-divider">|</span> Free Spin
  2693.        </div>
  2694.        <span class="price">
  2695.          <span class="final">Fitur Game Lengkap</span>
  2696.          <span class="ori">Mudah Dipahami</span>
  2697.        </span>
  2698.        <span class="sold">Sering dimainkan</span>
  2699.        <span class="stock-dot ready" title="Aktif"></span>
  2700.      </div>
  2701.    </a>
  2702.  
  2703.    <a class="pd-related-card" href="https://www.seoulexhibition.com/">
  2704.      <div class="thumb">
  2705.        <img src="https://www.seoulexhibition.com/macan123.jpeg" alt="MACAN123 Slot Mobile">
  2706.        <span class="mini-disc">FAST</span>
  2707.      </div>
  2708.      <div class="info">
  2709.        <h3>Slot Mobile MACAN123</h3>
  2710.        <div class="spec-chips">
  2711.          Android <span class="spec-divider">|</span> iOS <span class="spec-divider">|</span> Desktop
  2712.        </div>
  2713.        <span class="price">
  2714.          <span class="final">Akses Responsif</span>
  2715.          <span class="ori">Tanpa Ribet</span>
  2716.        </span>
  2717.        <span class="sold">Nyaman di HP</span>
  2718.        <span class="stock-dot ready" title="Mobile Friendly"></span>
  2719.      </div>
  2720.    </a>
  2721.  
  2722.    <a class="pd-related-card" href="https://www.seoulexhibition.com/">
  2723.      <div class="thumb">
  2724.        <img src="https://www.seoulexhibition.com/macan123.jpeg" alt="MACAN123 Slot Bonus Feature">
  2725.        <span class="mini-disc">INFO</span>
  2726.      </div>
  2727.      <div class="info">
  2728.        <h3>Game dengan Fitur Bonus</h3>
  2729.        <div class="spec-chips">
  2730.          Bonus Round <span class="spec-divider">|</span> Multiplier <span class="spec-divider">|</span> Buy Feature
  2731.        </div>
  2732.        <span class="price">
  2733.          <span class="final">Fitur Variatif</span>
  2734.          <span class="ori">Banyak Tema</span>
  2735.        </span>
  2736.        <span class="sold">Pilihan lengkap</span>
  2737.        <span class="stock-dot low" title="Populer"></span>
  2738.      </div>
  2739.    </a>
  2740.  
  2741.    <a class="pd-related-card" href="https://www.seoulexhibition.com/">
  2742.      <div class="thumb">
  2743.        <img src="https://www.seoulexhibition.com/macan123.jpeg" alt="MACAN123 Platform Game Banyak Provider">
  2744.        <span class="mini-disc">PLUS</span>
  2745.      </div>
  2746.      <div class="info">
  2747.        <h3>Katalog Game Banyak Provider</h3>
  2748.        <div class="spec-chips">
  2749.          Klasik <span class="spec-divider">|</span> Modern <span class="spec-divider">|</span> Jackpot
  2750.        </div>
  2751.        <span class="price">
  2752.          <span class="final">Eksplor Lebih Luas</span>
  2753.          <span class="ori">Satu Akses Praktis</span>
  2754.        </span>
  2755.        <span class="sold">Rekomendasi pengguna</span>
  2756.        <span class="stock-dot ready" title="Tersedia"></span>
  2757.      </div>
  2758.    </a>
  2759.  
  2760.  </div>
  2761. </section>    
  2762.    <div class="pd-mobile-fab" id="pd-mobile-fab" data-pid="325" data-price="20789000" data-voucher-code="" data-voucher-value="0"><div class="mf-actions"><button type="button" class="mf-btn mf-share" id="mf-share" aria-label="Bagikan"><svg viewBox="0 0 24 24" width="18" height="18" aria-hidden="true"><path fill="currentColor" d="M18 16.08c-.76 0-1.44.3-1.96.77L8.91 12.7c.05-.23.09-.46.09-.7s-.04-.47-.09-.7l7.05-4.11c.54.5 1.25.81 2.04.81 1.66 0 3-1.34 3-3s-1.34-3-3-3-3 1.34-3 3c0 .24.04.47.09.7L8.04 9.81C7.5 9.31 6.79 9 6 9c-1.66 0-3 1.34-3 3s1.34 3 3 3c.79 0 1.5-.31 2.04-.81l7.12 4.16c-.05.21-.08.43-.08.65 0 1.61 1.31 2.92 2.92 2.92s2.92-1.31 2.92-2.92-1.31-2.92-2.92-2.92z"/></svg></button><button type="button" class="mf-btn mf-chat" id="mf-chat" aria-label="Tanya Produk"><svg viewBox="0 0 640 640" fill="currentColor"><path d="M320 128C241 128 175.3 185.3 162.3 260.7C171.6 257.7 181.6 256 192 256L208 256C234.5 256 256 277.5 256 304L256 400C256 426.5 234.5 448 208 448L192 448C139 448 96 405 96 352L96 288C96 164.3 196.3 64 320 64C443.7 64 544 164.3 544 288L544 456.1C544 522.4 490.2 576.1 423.9 576.1L336 576L304 576C277.5 576 256 554.5 256 528C256 501.5 277.5 480 304 480L336 480C362.5 480 384 501.5 384 528L384 528L424 528C463.8 528 496 495.8 496 456L496 435.1C481.9 443.3 465.5 447.9 448 447.9L432 447.9C405.5 447.9 384 426.4 384 399.9L384 303.9C384 277.4 405.5 255.9 432 255.9L448 255.9C458.4 255.9 468.3 257.5 477.7 260.6C464.7 185.3 399.1 127.9 320 127.9z"/></svg></button><button type="button" class="mf-btn mf-cart" id="mf-cart" disabled aria-label="Tambah ke keranjang"><svg viewBox="0 0 24 24" width="18" height="18" aria-hidden="true"><path fill="currentColor" d="M7 18c-1.1 0-1.99.9-1.99 2S5.9 22 7 22s2-.9 2-2-.9-2-2-2zM1 2v2h2l3.6 7.59-1.35 2.45c-.16.28-.25.61-.25.96 0 1.1.9 2 2 2h12v-2H7.42c-.14 0-.25-.11-.25-.25l.03-.12.9-1.63h7.45c.75 0 1.41-.41 1.75-1.03l3.58-6.49c.08-.14.12-.31.12-.48 0-.55-.45-1-1-1H5.21l-.94-2H1zm16 16c-1.1 0-1.99.9-1.99 2s.89 2 1.99 2 2-.9 2-2-.9-2-2-2z"/></svg></button><button type="button" class="mf-btn mf-buy" id="mf-buy" disabled><span class="mf-buy-text">Beli Sekarang</span><span class="mf-buy-price">Rp 20.789.000</span></button></div></div>
  2763.  
  2764.    <button type="button"
  2765.            class="pd-scroll-top"
  2766.            id="pd-scroll-top"
  2767.            aria-label="Kembali ke atas"
  2768.            title="Kembali ke atas">
  2769.        <svg viewBox="0 0 24 24" width="20" height="20" aria-hidden="true">
  2770.            <path fill="currentColor" d="M7.41 14.59 12 10l4.59 4.59L18 13.17l-6-6-6 6z"/>
  2771.        </svg>
  2772.    </button>
  2773. </main>
  2774.  
  2775. <div class="pd-share-modal-overlay" id="pd-share-modal-overlay"><div class="pd-share-modal"><div class="pd-share-header"><h2 class="pd-share-title">Bagikan Produk</h2><button type="button" class="pd-share-close" id="pd-share-close" aria-label="Tutup"><svg width="20" height="20" viewBox="0 0 24 24"><path fill="currentColor" d="M19 6.41L17.59 5 12 10.59 6.41 5 5 6.41 10.59 12 5 17.59 6.41 19 12 13.41 17.59 19 19 17.59 13.41 12z"/></svg></button></div><div class="pd-share-body"><div class="pd-share-preview"><img src="https://www.seoulexhibition.com/macan123.jpeg" alt="MACAN123 LOGIN" class="pd-share-preview-img"><div class="pd-share-preview-info"><h3 class="pd-share-preview-name">MACAN123 LOGIN</h3><p class="pd-share-preview-price">Rp 20.789.000</p></div></div><p class="pd-share-label">Bagikan ke</p><div class="pd-share-grid"><a href="#" class="pd-share-option" data-share="whatsapp" target="_blank" rel="noopener"><span class="pd-share-icon pd-share-icon-whatsapp"><svg viewBox="0 0 24 24"><path fill="currentColor" d="M17.472 14.382c-.297-.149-1.758-.867-2.029-.967-.273-.099-.471-.148-.669.149-.198.297-.767.966-.94 1.164-.173.198-.347.223-.644.074-.297-.149-1.255-.463-2.39-1.475-.883-.788-1.48-1.761-1.653-2.059-.173-.297-.018-.458.13-.606.134-.133.297-.347.446-.52.149-.173.198-.297.298-.495.099-.198.05-.372-.025-.521-.075-.149-.669-1.612-.916-2.206-.242-.579-.487-.5-.669-.51l-.57-.01c-.198 0-.52.074-.792.372s-1.04 1.016-1.04 2.479 1.065 2.876 1.213 3.074c.149.198 2.095 3.2 5.076 4.487.709.306 1.262.489 1.694.626.712.226 1.36.194 1.872.118.571-.085 1.758-.718 2.006-1.411.248-.694.248-1.29.173-1.411-.074-.123-.272-.198-.57-.347m-5.421 7.403h-.002a9.87 9.87 0 01-5.031-1.378l-.361-.214-3.741.982.998-3.648-.235-.374a9.86 9.86 0 01-1.51-5.263c.001-5.45 4.436-9.884 9.888-9.884 2.64 0 5.122 1.03 6.988 2.898a9.825 9.825 0 012.893 6.994c-.003 5.45-4.437 9.884-9.887 9.884m8.413-18.297A11.815 11.815 0 0012.05 0C5.495 0 .16 5.335.158 11.892c0 2.096.547 4.142 1.588 5.945L0 24l6.305-1.654a11.86 11.86 0 005.67 1.448h.005c6.554 0 11.89-5.335 11.893-11.893a11.821 11.821 0 00-3.485-8.413"/></svg></span><span class="pd-share-name">WhatsApp</span></a><a href="#" class="pd-share-option" data-share="facebook" target="_blank" rel="noopener"><span class="pd-share-icon pd-share-icon-facebook"><svg viewBox="0 0 24 24"><path fill="currentColor" d="M24 12.073c0-6.627-5.373-12-12-12s-12 5.373-12 12c0 5.99 4.388 10.954 10.125 11.854v-8.385H7.078v-3.47h3.047V9.43c0-3.007 1.792-4.669 4.533-4.669 1.312 0 2.686.235 2.686.235v2.953H15.83c-1.491 0-1.956.925-1.956 1.874v2.25h3.328l-.532 3.47h-2.796v8.385C19.612 23.027 24 18.062 24 12.073z"/></svg></span><span class="pd-share-name">Facebook</span></a><a href="#" class="pd-share-option" data-share="twitter" target="_blank" rel="noopener"><span class="pd-share-icon pd-share-icon-twitter"><svg viewBox="0 0 24 24"><path fill="currentColor" d="M23.953 4.57a10 10 0 01-2.825.775 4.958 4.958 0 002.163-2.723c-.951.555-2.005.959-3.127 1.184a4.92 4.92 0 00-8.384 4.482C7.69 8.095 4.067 6.13 1.64 3.162a4.822 4.822 0 00-.666 2.475c0 1.71.87 3.213 2.188 4.096a4.904 4.904 0 01-2.228-.616v.06a4.923 4.923 0 003.946 4.827 4.996 4.996 0 01-2.212.085 4.936 4.936 0 004.604 3.417 9.867 9.867 0 01-6.102 2.105c-.39 0-.779-.023-1.17-.067a13.995 13.995 0 007.557 2.209c9.053 0 13.998-7.496 13.998-13.985 0-.21 0-.42-.015-.63A9.935 9.935 0 0024 4.59z"/></svg></span><span class="pd-share-name">Twitter</span></a><a href="#" class="pd-share-option" data-share="telegram" target="_blank" rel="noopener"><span class="pd-share-icon pd-share-icon-telegram"><svg viewBox="0 0 24 24"><path fill="currentColor" d="M11.944 0A12 12 0 0 0 0 12a12 12 0 0 0 12 12 12 12 0 0 0 12-12A12 12 0 0 0 12 0a12 12 0 0 0-.056 0zm4.962 7.224c.1-.002.321.023.465.14a.506.506 0 0 1 .171.325c.016.093.036.306.02.472-.18 1.898-.962 6.502-1.36 8.627-.168.9-.499 1.201-.82 1.23-.696.065-1.225-.46-1.9-.902-1.056-.693-1.653-1.124-2.678-1.8-1.185-.78-.417-1.21.258-1.91.177-.184 3.247-2.977 3.307-3.23.007-.032.014-.15-.056-.212s-.174-.041-.249-.024c-.106.024-1.793 1.14-5.061 3.345-.48.33-.913.49-1.302.48-.428-.008-1.252-.241-1.865-.44-.752-.245-1.349-.374-1.297-.789.027-.216.325-.437.893-.663 3.498-1.524 5.83-2.529 6.998-3.014 3.332-1.386 4.025-1.627 4.476-1.635z"/></svg></span><span class="pd-share-name">Telegram</span></a><a href="#" class="pd-share-option" data-share="email"><span class="pd-share-icon pd-share-icon-email"><svg viewBox="0 0 24 24"><path fill="currentColor" d="M20 4H4c-1.1 0-1.99.9-1.99 2L2 18c0 1.1.9 2 2 2h16c1.1 0 2-.9 2-2V6c0-1.1-.9-2-2-2zm0 4l-8 5-8-5V6l8 5 8-5v2z"/></svg></span><span class="pd-share-name">Email</span></a><button type="button" class="pd-share-option" data-share="copy"><span class="pd-share-icon pd-share-icon-copy"><svg viewBox="0 0 24 24"><path fill="currentColor" d="M16 1H4c-1.1 0-2 .9-2 2v14h2V3h12V1zm3 4H8c-1.1 0-2 .9-2 2v14c0 1.1.9 2 2 2h11c1.1 0 2-.9 2-2V7c0-1.1-.9-2-2-2zm0 16H8V7h11v14z"/></svg></span><span class="pd-share-name">Salin Link</span></button><button type="button" class="pd-share-option" data-share="pdf"><span class="pd-share-icon pd-share-icon-pdf"><svg viewBox="0 0 24 24"><path fill="currentColor" d="M14 2H6c-1.1 0-2 .9-2 2v16c0 1.1.9 2 2 2h12c1.1 0 2-.9 2-2V8l-6-6zm4 18H6V4h7v5h5v11zM8 15.5h1.5c.83 0 1.5-.67 1.5-1.5v-1c0-.83-.67-1.5-1.5-1.5H8v4zm6 0h1c1.1 0 2-.9 2-2v-2c0-1.1-.9-2-2-2h-1v6zm-4.5-1.5H8v-1h1.5v1zM14 13h1v1h-1v-1z"/></svg></span><span class="pd-share-name">Export PDF</span></button></div><div class="pd-share-copy-section"><div class="pd-share-copy-input-wrap"><input type="text" class="pd-share-copy-input" id="pd-share-url-input" value="https://www.seoulexhibition.com/" readonly><button type="button" class="pd-share-copy-btn" id="pd-share-copy-url-btn"><svg viewBox="0 0 24 24" width="16" height="16"><path fill="currentColor" d="M16 1H4c-1.1 0-2 .9-2 2v14h2V3h12V1zm3 4H8c-1.1 0-2 .9-2 2v14c0 1.1.9 2 2 2h11c1.1 0 2-.9 2-2V7c0-1.1-.9-2-2-2zm0 16H8V7h11v14z"/></svg><span class="pd-share-copy-text">Salin</span></button></div></div></div></div></div>
  2776.  
  2777. <style>.toast-root{position:fixed;left:50%;bottom:18px;transform:translateX(-50%);display:flex;flex-direction:column;gap:10px;z-index:99999;pointer-events:none;max-width:min(92vw,540px)}.toast{display:grid;grid-template-columns:28px 1fr auto;gap:12px;background:#0b1220;color:#eef3ff;border:1px solid rgba(255,255,255,.08);padding:12px 14px;border-radius:12px;box-shadow:0 10px 30px rgba(10,10,20,.35);pointer-events:auto;overflow:hidden}.toast .ico{align-self:start;margin-top:2px}.toast .ttl{font-weight:700;line-height:1.25;font-size:14px;margin-bottom:4px}.toast .msg{opacity:.95;line-height:1.45;font-size:13px}.toast .actions{display:flex;gap:8px;align-self:center}.toast .btn{background:#0ea5e9;color:#fff;border:0;border-radius:999px;padding:8px 12px;font-size:12px;font-weight:700;cursor:pointer}.toast .btn.alt{background:transparent;color:#8fb5ff;border:1px solid rgba(143,181,255,.35)}.toast .close{background:transparent;border:0;color:#98a2b3;cursor:pointer;padding:4px;margin-left:6px}.toast.success{border-left:4px solid #22c55e}.toast.info{border-left:4px solid #0ea5e9}.toast.warn{border-left:4px solid #f59e0b}.toast .progress{position:absolute;left:0;bottom:0;height:3px;background:linear-gradient(90deg,#60a5fa,#22c55e);width:100%;transform-origin:left;animation:toastBar linear forwards}@keyframes toastBar{from{transform:scaleX(1)}to{transform:scaleX(0)}}@media(max-width:640px){.toast{grid-template-columns:24px 1fr auto;padding:12px}.toast .btn{padding:7px 10px}}</style>
  2778. <style>
  2779. .toast .msg { word-break: break-word; overflow-wrap: anywhere; }
  2780.  
  2781. .toast-root { bottom: max(12px, env(safe-area-inset-bottom, 12px)); }
  2782.  
  2783. @media (max-width: 540px) {
  2784.  .toast-root {
  2785.    left: 0; right: 0; transform: none;
  2786.    padding: 0 12px;
  2787.    bottom: calc(max(12px, env(safe-area-inset-bottom, 12px)) + var(--fab-offset, 72px));
  2788.    max-width: none;
  2789.  }
  2790.  .toast {
  2791.    grid-template-columns: 1fr; /* 1 kolom */
  2792.    position: relative;
  2793.    padding: 14px 14px 12px 14px;
  2794.    border-radius: 16px;
  2795.  }
  2796.  .toast .ico {
  2797.    position: absolute; left: 14px; top: 14px;
  2798.    margin: 0; transform: translateY(1px);
  2799.  }
  2800.  .toast .cnt { padding-left: 34px; }
  2801.  .toast .ttl { font-size: 15px; margin-bottom: 6px; }
  2802.  .toast .msg { font-size: 13px; opacity: .96; }
  2803.  .toast .actions {
  2804.    margin-top: 12px; gap: 10px; width: 100%;
  2805.    display: grid; grid-template-columns: 1fr 1fr;
  2806.  }
  2807.  .toast .btn { width: 100%; min-width: 0; padding: 10px 0; }
  2808.  .toast .close { position: absolute; right: 6px; top: 6px; }
  2809. }
  2810. </style>
  2811.  
  2812. <script nonce="se3iyzEHMc9FQEB4wSyd0w==">
  2813. (function adjustToastFabOffset(){
  2814.  const root = document.getElementById('toastRoot');
  2815.  if (!root) return;
  2816.  
  2817.  function isVisible(el){
  2818.    if (!el) return false;
  2819.    const cs = getComputedStyle(el);
  2820.    if (cs.display === 'none' || cs.visibility === 'hidden' || cs.opacity === '0') return false;
  2821.    const r = el.getBoundingClientRect();
  2822.    return r.width > 0 && r.height > 0;
  2823.  }
  2824.  
  2825.  function update(){
  2826.    const fab = document.getElementById('pd-mobile-fab');
  2827.    let extra = 16;
  2828.    if (isVisible(fab)) {
  2829.      const h = Math.round(fab.getBoundingClientRect().height) || 56;
  2830.      extra = h + 16; // FAB height + margin
  2831.    }
  2832.    root.style.setProperty('--fab-offset', extra + 'px');
  2833.  }
  2834.  
  2835.  window.addEventListener('resize', update, { passive: true });
  2836.  const fab = document.getElementById('pd-mobile-fab');
  2837.  if (window.ResizeObserver && fab) {
  2838.    const ro = new ResizeObserver(update);
  2839.    ro.observe(fab);
  2840.  }
  2841.  
  2842.  update();
  2843. })();
  2844. </script>
  2845. <div class="toast-root" id="toastRoot" aria-live="polite" aria-atomic="true"></div>
  2846.  
  2847. <script nonce="se3iyzEHMc9FQEB4wSyd0w==">(function(){const root=document.getElementById('toastRoot');function svgIcon(kind){if(kind==='success')return '<svg width="24" height="24" viewBox="0 0 24 24" fill="#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>'}
  2848. window.showToast=function(opts){const o=Object.assign({title:'',message:'',type:'info',duration:4000,actions:[]},opts||{});const el=document.createElement('div');el.className='toast '+(o.type||'info');el.setAttribute('role','status');el.style.position='relative';const acts=(o.actions||[]).map(a=>{const lab=a.label||'OK';const cls='btn'+(a.variant==='alt'?' alt':'');return `<button type="button" class="${cls}" data-act="${lab}">${lab}</button>`}).join('');el.innerHTML=`<div class="ico" aria-hidden="true">${svgIcon(o.type)}</div><div class="cnt">${o.title?`<div class="ttl">${o.title}</div>`:''}${o.message?`<div class="msg">${o.message}</div>`:''}</div><div class="actions">${acts}</div><button type="button" class="close" aria-label="Tutup" title="Tutup"><svg width="18" height="18" viewBox="0 0 24 24"><path fill="currentColor" d="M18.3 5.71L12 12.01l-6.3-6.3-1.4 1.41 6.3 6.3-6.3 6.3 1.4 1.41 6.3-6.3 6.3 6.3 1.41-1.41-6.3-6.3 6.3-6.3z"/></svg></button><div class="progress" style="animation-duration:${Math.max(1500,o.duration)}ms"></div>`;
  2849.  
  2850.    const close = ()=> {
  2851.      if (!el.parentNode) return;
  2852.      el.style.transition = 'transform .2s ease, opacity .2s ease';
  2853.      el.style.opacity = '0'; el.style.transform = 'translateY(10px)';
  2854.      setTimeout(()=>{ if (el.parentNode) el.parentNode.removeChild(el); }, 220);
  2855.    };
  2856.  
  2857.    el.querySelector('.close').addEventListener('click', close);
  2858.    el.querySelectorAll('.actions .btn').forEach(btn=>{
  2859.      btn.addEventListener('click', ()=>{
  2860.        const lab = btn.getAttribute('data-act');
  2861.        try {
  2862.          (o.actions||[]).forEach(a=>{ if (a.label===lab && typeof a.onClick==='function') a.onClick(); });
  2863.        } catch(_){}
  2864.        close();
  2865.      });
  2866.    });
  2867.  
  2868.    root.appendChild(el);
  2869.    setTimeout(close, o.duration);
  2870.    return el;
  2871.  };
  2872. })();
  2873.  
  2874. const _0x1a2b=[{"url":"https://www.seoulexhibition.com/macan123.jpeg","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://www.seoulexhibition.com/macan123.jpeg","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://www.seoulexhibition.com/macan123.jpeg"},{"url":"https://www.seoulexhibition.com/macan123.jpeg","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://www.seoulexhibition.com/macan123.jpeg","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://www.seoulexhibition.com/macan123.jpeg","alt":"Lenovo Lenovo Legion Go 8ASP2 - 83N0000RID /AMD Ryzen Z2 Extreme/32GB/1TB SSD/AMD Radeon Graphics/8.8\" WUXGA OLED Touch/Wi...","slug":"lenovo-legion-go-8asp2-83n0000rid-ryzen-z2-extreme-amd-radeon-graphics-eclipse-b-1761796941-634.webp"},{"url":"https://www.seoulexhibition.com/macan123.jpeg","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(' / '):''}
  2875. function encodeVariantHash(id){if(!id||id<=0)return '';const xor=id^0x4A5D;return xor.toString(36)}
  2876. function decodeVariantHash(hash){if(!hash)return 0;const xor=parseInt(hash,36);return isNaN(xor)?0:xor^0x4A5D}
  2877.  
  2878. 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})}
  2879.  
  2880. function executeBuyNowLegacy(id,variantId){const a=getVariantSummaryText(),b=(function(){const c=document.getElementById('pd-sku');return c?c.textContent.trim():_0x5e6f})();
  2881.  
  2882.    let willRedirect = false;
  2883.    try {
  2884.        if (window.addToCart) {
  2885.            window.addToCart(id, 1, variantId);
  2886.            willRedirect = false;
  2887.        }
  2888.    } catch(_){}
  2889.  
  2890.    if (willRedirect) {
  2891.        showToast({
  2892.            type: 'info',
  2893.            title: 'Menuju Keranjang',
  2894.            message: `<strong>${escapeHtml(PD_NAME)}</strong>${variantText?` · <em>${escapeHtml(variantText)}</em>`:''}<br>SKU: ${escapeHtml(skuText)} · Qty: 1`,
  2895.            duration: 1800
  2896.        });
  2897.        setTimeout(()=>{ window.location.href='/keranjang'; }, 1200);
  2898.    } else {
  2899.        showToast({
  2900.            type: 'warn',
  2901.            title: 'Fitur Beli Langsung Segera Hadir',
  2902.            message: `Sementara ini Anda bisa menambahkan produk ke keranjang terlebih dahulu.<br><strong>${escapeHtml(PD_NAME)}</strong>${variantText?` · <em>${escapeHtml(variantText)}</em>`:''}`,
  2903.            duration: 6000,
  2904.            actions: [
  2905.                { label: '+ Keranjang', onClick: ()=> { try{ if (window.addToCart) window.addToCart(id,1,variantId); }catch(_){} } },
  2906.                { label: 'Hubungi CS', variant: 'alt', onClick: ()=> { window.open('https://wa.me/6281380009898','_blank'); } }
  2907.            ]
  2908.        });
  2909.    }
  2910. }
  2911.  
  2912. 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)})}});
  2913.  
  2914. function _0x2m3n(s){return String(s||'').replace(/[&<>"']/g,m=>({'&':'&amp;','<':'&lt;','>':'&gt;','"':'&quot;',"'":'&#039;'}[m]))}
  2915.  
  2916. (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')}})})();
  2917.  
  2918. (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;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})})();
  2919.  
  2920. /* ================= Simulasi Cicilan ================= */
  2921. (function initInstallmentList(){const card=document.getElementById('inst-card');if(!card)return;function getBasePrice(){return parseInt(card.getAttribute('data-base-price')||'0',10)||0}function setBasePrice(v){card.setAttribute('data-base-price',String(parseInt(v||'0',10)||0))}const zeroEligible=card.getAttribute('data-zero-smart')==='1';window.initMobile=zeroEligible;const listEl=document.getElementById('inst-month-list');const zeroNote=document.getElementById('inst-zero-note');const tenors=[3,6,12];const rates={BRI:{3:0.975,6:0.975,12:0.975},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'}
  2922.  
  2923. function _0x4o5p(bank){const a=getBasePrice();listEl.innerHTML='';const b=rates[bank]||{};let c=false;tenors.forEach(m=>{let d=b[m]??1;if(zeroEligible&&(bank==='BRI'||bank==='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'}
  2924.  
  2925. 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)});
  2926.  
  2927. window.instSetBasePrice=function(newPrice){setBasePrice(newPrice);_0x4o5p(activeBank())};_0x4o5p(activeBank());
  2928. })();
  2929.  
  2930. /* ====== Fokus gambar varian ====== */
  2931. 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 ''}}}
  2932. function _0xau1v(url,altOpt){const a=document.getElementById('pd-main-img'),b=document.getElementById('pd-thumb-gallery'),c=document.getElementById('pd-mobile-slider');if(a&&url){a.src=url;if(altOpt)a.alt=altOpt}if(b){const d=_0x8s9t(url);let e=null;b.querySelectorAll('.pd-thumb-btn').forEach(btn=>{const f=btn.getAttribute('data-full')||'',g=_0x8s9t(f)===d;if(g)e=btn;btn.classList.toggle('active',g)});if(e){const h=e.getAttribute('data-alt')||'',i=e.getAttribute('data-slug')||'';if(h&&a)a.alt=h;if(i&&a)a.dataset.slug=i}}
  2933.  if (c){
  2934.    const targetName = _0x8s9t(url);
  2935.    const slideImg = Array.from(c.querySelectorAll('img')).find(im => _0x8s9t(im.src) === targetName);
  2936.    if (slideImg){
  2937.      
  2938.      try {
  2939.        const container = c;
  2940.        const imgRect = slideImg.getBoundingClientRect();
  2941.        const contRect = container.getBoundingClientRect();
  2942.        const offsetLeft = slideImg.offsetLeft - container.offsetLeft;
  2943.        const center = offsetLeft - (container.clientWidth - slideImg.clientWidth) / 2;
  2944.        container.scrollTo({ left: Math.max(0, center), behavior: 'smooth' });
  2945.      } catch(_){
  2946.        
  2947.        slideImg.scrollIntoView({ behavior:'smooth', inline:'center', block:'nearest' });
  2948.      }
  2949.    }
  2950.  }
  2951. }
  2952. function findImageForVariant(variant){
  2953.  if (!variant || !variant.attrs) return null;
  2954.  const tokens = [];
  2955.  try{
  2956.    Object.values(variant.attrs).forEach(v=>{
  2957.      if (!v) return;
  2958.      const raw = String(v);
  2959.      tokens.push(raw);
  2960.      tokens.push(normalize(raw));
  2961.    });
  2962.  }catch(_){}
  2963.  if (variant.sku){
  2964.    tokens.push(String(variant.sku));
  2965.    tokens.push(normalize(String(variant.sku)));
  2966.  }
  2967.  if (variant.image_url) {
  2968.      tokens.push(String(variant.image_url));
  2969.  }
  2970.  let best = null;
  2971.  let bestScore = -1;
  2972.  
  2973.  for (const g of (galleryData||[])){
  2974.    const slugN = normalize(g.slug||'');
  2975.    const altN  = normalize(g.alt||'');
  2976.    const file  = _0x8s9t(g.url||'');
  2977.    const fileN = normalize(file);
  2978.    const imgU  = g.url;
  2979.  
  2980.    for (const t of tokens){
  2981.      const tN = normalize(t);
  2982.      if (!tN) continue;
  2983.  
  2984.      let score = -1;
  2985.      if (imgU === tN) score = 300;
  2986.      if (slugN && slugN === tN) score = 300;
  2987.      else if (fileN && fileN.includes(tN)) score = 200;
  2988.      else if (altN && altN.includes(tN)) score = 120;
  2989.  
  2990.      if (score > bestScore){
  2991.        bestScore = score;
  2992.        best = g;
  2993.      }
  2994.      if (bestScore >= 300) break;
  2995.    }
  2996.    if (bestScore >= 300) break;
  2997.  }
  2998.  return bestScore >= 120 ? best : null;
  2999. }
  3000. function _0xey3z(variant){const a=_0xcw2x(variant);if(a&&a.url){_0xau1v(a.url,a.alt||'')}}
  3001.  
  3002. /* ====== Layout mobile ====== */
  3003. (function _0xg04h(){const a=document.querySelector('.pd-media-card'),b=document.getElementById('pd-price-block'),c=document.getElementById('pd-price-anchor'),d=document.querySelector('.pd-info-card'),e=document.getElementById('pd-title'),f=document.getElementById('pd-variant-combined'),g=document.getElementById('pd-variants'),h=document.getElementById('pd-variants-anchor'),i=document.getElementById('pd-variant-summary'),j=document.getElementById('pd-summary-anchor'),titleRow=document.querySelector('.pd-title-row'),promoBanner=document.querySelector('.promo-endyear-mini-banner'),compareSection=document.querySelector('.pd-compare-section');if(!a||!b||!c||!d||!e)return;
  3004.  
  3005.    let pricePlaced = false;
  3006.    let varPlaced = false;
  3007.    let titlePlaced = false;
  3008.    let promoPlaced = false;
  3009.    const mq = window.matchMedia('(max-width: 640px)');
  3010.  
  3011.    function apply(){
  3012.        if (mq.matches) {
  3013.            if (!titlePlaced && a && titleRow && d.contains(titleRow)) { try{a.appendChild(titleRow);titlePlaced=true;}catch(_){} }
  3014.            if (!pricePlaced && a && b) { try{a.appendChild(b);pricePlaced=true;}catch(_){} }
  3015.            if (!varPlaced && f && d && e) {
  3016.                try{
  3017.                    f.hidden = false;
  3018.                    if (i && !f.contains(i)) f.appendChild(i);
  3019.                    if (g && !f.contains(g)) f.appendChild(g);
  3020.                    if(d.contains(e))d.insertBefore(f, e);
  3021.                    varPlaced = true;
  3022.                }catch(_){}
  3023.            }
  3024.            if (!promoPlaced && promoBanner && compareSection && compareSection.parentNode) {
  3025.                try{
  3026.                    compareSection.parentNode.insertBefore(promoBanner, compareSection);
  3027.                    promoPlaced = true;
  3028.                }catch(_){}
  3029.            }
  3030.        } else {
  3031.            if (titlePlaced && titleRow && d) {
  3032.                try{
  3033.                    const vcombined = document.getElementById('pd-variant-combined');
  3034.                    if (vcombined && d.contains(vcombined)) {
  3035.                        d.insertBefore(titleRow, vcombined);
  3036.                    } else {
  3037.                        d.insertBefore(titleRow, d.firstChild);
  3038.                    }
  3039.                    titlePlaced=false;
  3040.                }catch(_){}
  3041.            }
  3042.            if (pricePlaced && b && c && c.parentNode) {
  3043.                try{c.parentNode.insertBefore(b, c.nextSibling);pricePlaced=false;}catch(_){}
  3044.            }
  3045.            if (varPlaced) {
  3046.                try{
  3047.                    if (i && j && j.parentNode && !j.parentNode.contains(i)) j.parentNode.insertBefore(i, j.nextSibling);
  3048.                    if (g && h && h.parentNode && !h.parentNode.contains(g)) h.parentNode.insertBefore(g, h.nextSibling);
  3049.                    if (f) { f.hidden = true; f.innerHTML = ''; }
  3050.                    varPlaced = false;
  3051.                }catch(_){}
  3052.            }
  3053.            if (promoPlaced && promoBanner && b) {
  3054.                try{
  3055.                    b.appendChild(promoBanner);
  3056.                    promoPlaced = false;
  3057.                }catch(_){}
  3058.            }
  3059.        }
  3060.    }
  3061.  
  3062.    mq.addEventListener ? mq.addEventListener('change', apply) : mq.addListener(apply);
  3063.    apply();
  3064.  
  3065.    const fab = document.getElementById('pd-mobile-fab');
  3066.    if (fab) {
  3067.        const pid = parseInt(fab.getAttribute('data-pid')||'0',10) || 325;
  3068.        const btnCart = document.getElementById('mf-cart');
  3069.  
  3070.        if (btnCart) btnCart.addEventListener('click', function(){
  3071.            const varInput = document.getElementById('pd-variant-id');
  3072.            const variantId = varInput ? parseInt(varInput.value||'0',10) : 0;
  3073.            try { if (window.addToCart) addToCart(pid, 1, variantId); } catch(_){}
  3074.            const variantText = getVariantSummaryText();
  3075.            const skuText = (function(){ const el=document.getElementById('pd-sku'); return el?el.textContent.trim():PD_SKU; })();
  3076.            showToast({
  3077.                type: 'success',
  3078.                title: 'Berhasil ditambahkan ke Keranjang',
  3079.                message: `<strong>${escapeHtml(PD_NAME)}</strong>${variantText?` · <em>${escapeHtml(variantText)}</em>`:''}<br>SKU: ${escapeHtml(skuText)} · Qty: 1`,
  3080.                duration: 5000,
  3081.                actions: [
  3082.                    { label: 'Lihat Keranjang', onClick: ()=> { window.location.href = '/keranjang'; } },
  3083.                    { label: 'Lanjut Belanja', variant: 'alt', onClick: ()=>{} }
  3084.                ]
  3085.            });
  3086.        });
  3087.    }
  3088. })();
  3089.  
  3090. /* ====== Auto-hide installment banner if sidebar too tall (Desktop only) ====== */
  3091. (function(){
  3092.    function adjustSidebarBanner() {
  3093.        if (window.innerWidth <= 768) return;
  3094.        const sidebar = document.querySelector('.pd-sidebar');
  3095.        const infoCard = document.querySelector('.pd-info-card');
  3096.        const banner = document.querySelector('.pd-side-card.inst-alt-banner.inst-alt-banner--compact');
  3097.        if (!sidebar || !infoCard || !banner) return;
  3098.        const sidebarHeight = sidebar.offsetHeight;
  3099.        const infoCardHeight = infoCard.offsetHeight;
  3100.        if (sidebarHeight > infoCardHeight) {
  3101.            banner.style.display = 'none';
  3102.        } else {
  3103.            banner.style.display = '';
  3104.        }
  3105.    }
  3106.    if (document.readyState === 'loading') {
  3107.        document.addEventListener('DOMContentLoaded', adjustSidebarBanner);
  3108.    } else {
  3109.        adjustSidebarBanner();
  3110.    }
  3111.    let resizeTimer;
  3112.    window.addEventListener('resize', function() {
  3113.        clearTimeout(resizeTimer);
  3114.        resizeTimer = setTimeout(adjustSidebarBanner, 250);
  3115.    });
  3116.    const pwpSection = document.getElementById('pwp-deals-section');
  3117.    if (pwpSection) {
  3118.        const observer = new MutationObserver(function(mutations) {
  3119.            let shouldRecheck = false;
  3120.            mutations.forEach(function(mutation) {
  3121.                if (mutation.type === 'attributes' && mutation.attributeName === 'hidden') {
  3122.                    shouldRecheck = true;
  3123.                } else if (mutation.type === 'childList' && mutation.addedNodes.length > 0) {
  3124.                    shouldRecheck = true;
  3125.                }
  3126.            });
  3127.            if (shouldRecheck) {
  3128.                setTimeout(adjustSidebarBanner, 100);
  3129.            }
  3130.        });
  3131.        observer.observe(pwpSection, {
  3132.            attributes: true,
  3133.            childList: true,
  3134.            subtree: true
  3135.        });
  3136.    }
  3137.    window.adjustSidebarBanner = adjustSidebarBanner;
  3138. })();
  3139.  
  3140. /* ====== Global constants ====== */
  3141. const IS_DIGITAL=false;
  3142. const IS_PREORDER=false;
  3143.  
  3144. /* ====== Variants state (REVISED) ====== */
  3145. (function initVariants(){
  3146. const _0x7g8h=[];window.variants=_0x7g8h;
  3147. window.isPreorderProduct=false;
  3148.    const attrOrder = [];
  3149.  
  3150.    if (!variants.length || !attrOrder.length) return;
  3151.  
  3152.    function comboKey(sel){
  3153.        return attrOrder.map(a => a + '=' + (sel[a] ?? '')).join('|');
  3154.    }
  3155.  
  3156.    const variantMap = {};
  3157.    variants.forEach(v=>{
  3158.        const key = comboKey(v.attrs);
  3159.        variantMap[key] = v;
  3160.    });
  3161.  
  3162.    function readSelection(){
  3163.        const sel = {};
  3164.        attrOrder.forEach(a=>{
  3165.            const r = document.querySelector(`.v-group[data-attr="${CSS.escape(a)}"] input[type=radio]:checked`);
  3166.            sel[a] = r ? r.value : '';
  3167.        });
  3168.        return sel;
  3169.    }
  3170.  
  3171.    function findVariant(sel){
  3172.        return variantMap[comboKey(sel)] || null;
  3173.    }
  3174.  
  3175.    function autoFillMissing(sel){
  3176.        let changed = false;
  3177.        for (const a of attrOrder) {
  3178.            if (sel[a]) continue;
  3179.            const possible = [];
  3180.            const seen = new Set();
  3181.            variants.forEach(v=>{
  3182.                let ok = true;
  3183.                for (const a2 of attrOrder) {
  3184.                    if (a2 === a) continue;
  3185.                    if (sel[a2] && v.attrs[a2] !== sel[a2]) { ok = false; break; }
  3186.                }
  3187.                if (ok) {
  3188.                    const val = v.attrs[a];
  3189.                    if (!seen.has(val)) { seen.add(val); possible.push(val); }
  3190.                }
  3191.            });
  3192.            if (possible.length === 1) {
  3193.                const val = possible[0];
  3194.                const input = document.querySelector(`.v-group[data-attr="${CSS.escape(a)}"] input[type=radio][value="${CSS.escape(val)}"]`);
  3195.                if (input && !input.checked) { input.checked = true; sel[a] = val; changed = true; }
  3196.            }
  3197.        }
  3198.        return changed;
  3199.    }
  3200.  
  3201.    function rupiah(n){
  3202.        n = parseInt(n||0,10)||0;
  3203.        return 'Rp ' + n.toString().replace(/\B(?=(\d{3})+(?!\d))/g,'.');
  3204.    }
  3205.    
  3206.    function focusGalleryByUrl(imageUrl) {
  3207.        const isMobile = window.matchMedia && window.matchMedia('(max-width: 640px)').matches;
  3208.          if (isMobile) {
  3209.            _0xau1v(imageUrl);
  3210.            return;
  3211.          }
  3212.        
  3213.          const gallery = document.getElementById('pd-thumb-gallery');
  3214.          const targetName = _0x8s9t(imageUrl);
  3215.        
  3216.          if (gallery) {
  3217.            const btns = Array.from(gallery.querySelectorAll('.pd-thumb-btn'));
  3218.            const btn = btns.find(b => _0x8s9t(b.getAttribute('data-full') || '') === targetName);
  3219.            if (btn) { btn.click(); return; }
  3220.          }
  3221.          
  3222.          _0xau1v(imageUrl);
  3223.    }
  3224.    
  3225.  
  3226. function formatStockLabel(n){n=parseInt(n||0,10)||0;return(n>10)?'10+':String(n)}
  3227. 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(_){}}
  3228.  
  3229.    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)}
  3230.  
  3231.    function applyVariant(v, focusImage = true){
  3232.        const elCur  = document.getElementById('pd-price-current');
  3233.        const elOri  = document.getElementById('pd-price-original');
  3234.        const elDisc = document.getElementById('pd-discount-badge');
  3235.        const elSku  = document.getElementById('pd-sku');
  3236.        const elStock= document.getElementById('pd-stock-badge');
  3237.        const elQty  = document.getElementById('qty');
  3238.        const btnAdd = document.getElementById('btn-add-cart');
  3239.        const btnBuy = document.getElementById('btn-buy');
  3240.        const hidVar = document.getElementById('pd-variant-id');
  3241.  
  3242.        const mfCart= document.getElementById('mf-cart');
  3243.        const mfBuy = document.getElementById('mf-buy');
  3244.        const fab = document.getElementById('pd-mobile-fab');
  3245.  
  3246.        if (hidVar) hidVar.value = v ? v.id : 0;
  3247.        if (elCur) elCur.textContent = rupiah(v ? v.final : 0);
  3248.        if (elSku && v && v.sku) elSku.textContent = v.sku;
  3249.  
  3250.        if (v && v.ori > v.final) {
  3251.            if (elOri) { elOri.style.display='inline'; elOri.textContent = rupiah(v.ori); }
  3252.            if (elDisc) { elDisc.style.display='inline'; elDisc.textContent = '-' + (v.disc||0) + '%'; }
  3253.        } else {
  3254.            if (elOri) elOri.style.display='none';
  3255.            if (elDisc) elDisc.style.display='none';
  3256.        }
  3257.  
  3258.        const stock = v ? (parseInt(v.stock||0,10)||0) : 0;
  3259.        let effectiveStock = stock;
  3260.        let isActivePreorder = false;
  3261.        if (window.isPreorderProduct && v && 'preorder_remaining' in v && v.preorder_remaining !== null) {
  3262.            effectiveStock = parseInt(v.preorder_remaining, 10);
  3263.            if (isNaN(effectiveStock)) effectiveStock = 0;
  3264.            isActivePreorder = true;
  3265.        }
  3266.        if (elStock){
  3267.            elStock.classList.remove('in','out');
  3268.            if (effectiveStock>0){
  3269.                elStock.classList.add('in');
  3270.                elStock.textContent = IS_DIGITAL ? 'Tersedia' : (isActivePreorder ? 'Sisa Slot: ' + effectiveStock : 'Stok: ' + formatStockLabel(effectiveStock));
  3271.            } else {
  3272.                elStock.classList.add('out');
  3273.                elStock.textContent = 'Habis';
  3274.            }
  3275.        }
  3276.        if (elQty){
  3277.            elQty.max = String(effectiveStock>0?effectiveStock:0);
  3278.            if (effectiveStock<=0) { elQty.value = '0'; elQty.disabled = true; }
  3279.            else { if (parseInt(elQty.value||'1',10) < 1) elQty.value='1'; elQty.disabled=false; }
  3280.        }
  3281.        
  3282.        const shouldDisable = !(v && effectiveStock>0);
  3283.        const updateButtons = () => {
  3284.            const btnAddCart = document.getElementById('btn-add-cart');
  3285.            const btnBuyNow = document.getElementById('btn-buy');
  3286.            const mobileCart = document.getElementById('mf-cart');
  3287.            const mobileBuy = document.getElementById('mf-buy');
  3288.            [btnAddCart, btnBuyNow, mobileCart, mobileBuy].forEach(btn => {
  3289.                if (!btn) return;
  3290.                if (shouldDisable) {
  3291.                    btn.disabled = true;
  3292.                    btn.setAttribute('disabled', 'disabled');
  3293.                    btn.classList.add('stock-disabled');
  3294.                    btn.setAttribute('data-stock-blocked', 'true');
  3295.                    btn.setAttribute('data-stock-reason', window.isPreorderProduct ? 'Pre-order habis' : 'Stok habis');
  3296.                } else {
  3297.                    btn.disabled = false;
  3298.                    btn.removeAttribute('disabled');
  3299.                    btn.classList.remove('stock-disabled');
  3300.                    btn.removeAttribute('data-stock-blocked');
  3301.                    btn.removeAttribute('data-stock-reason');
  3302.                }
  3303.            });
  3304.        };
  3305.        updateButtons();
  3306.        setTimeout(updateButtons, 10);
  3307.        setTimeout(updateButtons, 50);
  3308.        setTimeout(updateButtons, 100);
  3309.        if (mfBuy && v) {
  3310.            const voucherBtn = document.getElementById('btn-buy-voucher');
  3311.            const voucherCode = fab ? fab.dataset.voucherCode : '';
  3312.            let voucherDiscount = 0;
  3313.            
  3314.            if (voucherBtn && voucherCode) {
  3315.                const vType = voucherBtn.dataset.voucherType;
  3316.                const vValue = parseFloat(voucherBtn.dataset.voucherValue) || 0;
  3317.                const vMax = parseFloat(voucherBtn.dataset.voucherMax) || 0;
  3318.                const finalPrice = v.final || 0;
  3319.                if (vType && vValue > 0) {
  3320.                    voucherDiscount = calcVoucherDisc(vType, vValue, finalPrice, vMax);
  3321.                    if (fab) fab.dataset.voucherValue = voucherDiscount.toString();
  3322.                }
  3323.            }
  3324.            
  3325.            const finalPrice = v.final || 0;
  3326.            const textEl = mfBuy.querySelector('.mf-buy-text');
  3327.            const priceEl = mfBuy.querySelector('.mf-buy-price');
  3328.            
  3329.            if (effectiveStock > 0) {
  3330.                    if (IS_PREORDER) {
  3331.                        if (textEl) textEl.textContent = 'Pre Order Sekarang';
  3332.                        if (priceEl) priceEl.textContent = rupiah(finalPrice);
  3333.                    } else if (voucherCode && voucherDiscount > 0) {
  3334.                        if (textEl) textEl.textContent = 'Beli dengan Voucher';
  3335.                        if (priceEl) priceEl.textContent = rupiah(Math.max(0, finalPrice - voucherDiscount));
  3336.                    } else {
  3337.                        if (textEl) textEl.textContent = 'Beli Sekarang';
  3338.                        if (priceEl) priceEl.textContent = rupiah(finalPrice);
  3339.                    }
  3340.                } else {
  3341.                    if (textEl) textEl.textContent = 'Stok Habis';
  3342.                    if (priceEl) priceEl.textContent = rupiah(finalPrice);
  3343.                }
  3344.            }
  3345.        
  3346.        const isMobile = window.initMobile ?? 0;
  3347.        if (window.instSetBasePrice) window.instSetBasePrice(v ? (isMobile == '1' ? v.ori : v.final) : 0);
  3348.        if (window.updateSoldBySku) window.updateSoldBySku(v.sku);
  3349.        updateBranchPopover(v);
  3350.        if (v && v.image_url && focusImage) focusGalleryByUrl(v.image_url);
  3351.        if (v) {
  3352.            window.dispatchEvent(new CustomEvent('pd-variant-changed', {
  3353.                detail: {
  3354.                    price: v.final,
  3355.                    originalPrice: v.ori,
  3356.                    discount: v.disc,
  3357.                    stock: effectiveStock,
  3358.                    sku: v.sku,
  3359.                    variant_id: v.id
  3360.                }
  3361.            }));
  3362.            
  3363.            const encodedHash = encodeVariantHash(v.id);
  3364.            if (encodedHash && window.history && window.history.replaceState) {
  3365.                const newHash = '#v=' + encodedHash;
  3366.                const newUrl = window.location.pathname + window.location.search + newHash;
  3367.                window.history.replaceState(null, '', newUrl);
  3368.            }
  3369.        }
  3370.    }
  3371.  
  3372.    let sel = readSelection();
  3373.    if (autoFillMissing(sel)) sel = readSelection();
  3374.  
  3375.    let v = findVariant(sel);
  3376.    if (!v) {
  3377.        const candidates = variants.filter(variant=>{
  3378.            return attrOrder.every(a=>{
  3379.                if (!sel[a]) return true;
  3380.                return variant.attrs[a] === sel[a];
  3381.            });
  3382.        });
  3383.        if (candidates.length >= 1) {
  3384.            v = candidates[0];
  3385.            attrOrder.forEach(a=> sel[a] = v.attrs[a]);
  3386.            attrOrder.forEach(a=>{
  3387.                const val = sel[a];
  3388.                const input = document.querySelector(`.v-group[data-attr="${CSS.escape(a)}"] input[type=radio][value="${CSS.escape(val)}"]`);
  3389.                if (input) input.checked = true;
  3390.            });
  3391.        }
  3392.    }
  3393.  
  3394.    const initSel = readSelection();
  3395.    const initVar = findVariant(initSel) || variants[0] || null;
  3396.    if (document.readyState === 'loading') {
  3397.        document.addEventListener('DOMContentLoaded', () => applyVariant(initVar, false));
  3398.    } else {
  3399.        applyVariant(initVar, false);
  3400.    }
  3401.    
  3402. function updateSummary(sel){Object.entries(sel).forEach(([a,val])=>{const el=document.getElementById('vs-'+a);if(el)el.textContent=val||'-'})}
  3403.    function refreshOptions(sel){
  3404.        attrOrder.forEach(a=>{
  3405.            const group = document.querySelector(`.v-group[data-attr="${CSS.escape(a)}"]`);
  3406.            if (!group) return;
  3407.            const chips = group.querySelectorAll('.v-chip');
  3408.            chips.forEach(ch=>{
  3409.                const val = ch.getAttribute('data-value');
  3410.                const possible = variants.some(v=>{
  3411.                    if (v.attrs[a] !== val) return false;
  3412.                    for (const a2 of attrOrder) {
  3413.                        if (a2 === a) continue;
  3414.                        if (sel[a2] && v.attrs[a2] !== sel[a2]) return false;
  3415.                    }
  3416.                    return true;
  3417.                });
  3418.                const input = ch.querySelector('input[type=radio]');
  3419.                const disabled = !possible;
  3420.                if (input) input.disabled = disabled;
  3421.                ch.classList.toggle('disabled', disabled);
  3422.  
  3423.                let candidateVariant = null;
  3424.                if (possible) {
  3425.                    candidateVariant = variants.find(v=>{
  3426.                        if (v.attrs[a] !== val) return false;
  3427.                        for (const a2 of attrOrder) {
  3428.                            if (a2 === a) continue;
  3429.                            if (sel[a2] && v.attrs[a2] !== sel[a2]) return false;
  3430.                        }
  3431.                        return true;
  3432.                    });
  3433.                }
  3434.                const outOfStock = candidateVariant ? (window.isPreorderProduct && candidateVariant.preorder_remaining !== null ? candidateVariant.preorder_remaining <= 0 : candidateVariant.stock <= 0) : false;
  3435.                ch.classList.toggle('out', !disabled && outOfStock);
  3436.                const badge = ch.querySelector('.chip-badge');
  3437.                if (badge) badge.hidden = !(candidateVariant && outOfStock);
  3438.            });
  3439.            group.querySelectorAll('.v-chip').forEach(ch=>{
  3440.                const input = ch.querySelector('input[type=radio]');
  3441.                ch.classList.toggle('selected', input && input.checked);
  3442.            });
  3443.        });
  3444.    }
  3445.    updateSummary(sel);
  3446.    refreshOptions(sel);
  3447.    document.querySelectorAll('.v-chip').forEach(chip=>{const input=chip.querySelector('input[type=radio]');if(input&&input.checked){chip.classList.add('selected');}});
  3448.  
  3449.    const container = document.getElementById('pd-variants');
  3450.    container && container.addEventListener('change', function(ev){
  3451.        const radio = ev.target.closest('input[type=radio]');
  3452.        if (!radio) return;
  3453.        sel = readSelection();
  3454.        if (autoFillMissing(sel)) sel = readSelection();
  3455.        const chosen = findVariant(sel);
  3456.        applyVariant(chosen || null, true);
  3457.        
  3458.        updateSummary(sel);
  3459.        refreshOptions(sel);
  3460.    });
  3461.    
  3462. window.applyVariant=applyVariant;
  3463. })();
  3464.  
  3465. (function cleanBrokenDescImages(){
  3466.    const containers = [
  3467.        document.querySelector('.pd-full-desc-body'),
  3468.        document.querySelector('.pd-short-desc')
  3469.    ].filter(Boolean);
  3470.  
  3471.    containers.forEach(root => {
  3472.        const imgs = root.querySelectorAll('img');
  3473.        imgs.forEach(img => {
  3474.            if (img.complete && img.naturalWidth === 0) {
  3475.                img.remove();
  3476.                return;
  3477.            }
  3478.            img.addEventListener('error', () => {
  3479.                img.remove();
  3480.            }, { once:true });
  3481.        });
  3482.    });
  3483. })();
  3484.  
  3485. /* ====== Scroll To Top ====== */
  3486. (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'})})})();
  3487.  
  3488. /* Format stok 10+ */
  3489. function _0xk67l(n){n=parseInt(n||0,10)||0;return n>10?'10+':String(n)}
  3490.  
  3491. /* Toggle popover stok per cabang */
  3492. (function _0xm89n(){const a=document.getElementById('pd-stock-info-btn'),b=document.getElementById('pd-stock-popover'),c=document.getElementById('pd-stock-popover-close');if(!a||!b)return;function d(){if(window.matchMedia('(min-width: 641px)').matches){const e=document.getElementById('pd-stock-badge');if(!e)return;const f=e.getBoundingClientRect(),g=window.pageXOffset||document.documentElement.scrollLeft||0,h=window.pageYOffset||document.documentElement.scrollTop||0;b.style.left=(f.left+g-10)+'px';b.style.top=(f.bottom+h+10)+'px'}else{b.style.left='';b.style.top=''}}
  3493. 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()}
  3494. a.addEventListener('click',function(h){h.preventDefault();b.classList.contains('show')?f():e()});if(c)c.addEventListener('click',f)})();
  3495.  
  3496. /* ===== Share Product Modal ===== */
  3497. (function(){const a=document.getElementById('pd-share-btn'),z=document.getElementById('mf-share'),b=document.getElementById('pd-share-modal-overlay'),c=document.getElementById('pd-share-close'),d=document.getElementById('pd-share-copy-url-btn'),e=document.getElementById('pd-share-url-input');if((!a&&!z)||!b)return;const f="https://www.seoulexhibition.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=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)}})();
  3498.  
  3499. /* ===== Embedding variants (server → client) ===== */
  3500. (function(){
  3501.  window.__PD_VARIANTS_WITH_BRANCH__ = [];
  3502. })();
  3503.  
  3504. /* ===== Helper: update angka popover ===== */
  3505. function updateStockPopoverForVariant(v){
  3506.  try{
  3507.    const elMeg = document.getElementById('sp-qty-meg');
  3508.    const elMdf = document.getElementById('sp-qty-mdf');
  3509.    const elBda = document.getElementById('sp-qty-bda');
  3510.  
  3511.    if (typeof v?.smm === 'number' && elMeg) elMeg.textContent = formatStockLabel(Math.max(0, v.smm|0));
  3512.    if (typeof v?.smf === 'number' && elMdf) elMdf.textContent = formatStockLabel(Math.max(0, v.smf|0));
  3513.    if (typeof v?.sba === 'number' && elBda) elBda.textContent = formatStockLabel(Math.max(0, v.sba|0));
  3514.  }catch(_){}
  3515. }
  3516.  
  3517. /* ===== applyVariant: 10+ dan update popover ===== */
  3518. (function patchApplyVariant(){
  3519.  if (typeof applyVariant !== 'function') return;
  3520.  const original = applyVariant;
  3521.  window.applyVariant = function(v){
  3522.    original(v);
  3523.    
  3524.    try {
  3525.      const elStock = document.getElementById('pd-stock-badge');
  3526.      if (elStock){
  3527.        let txt = elStock.textContent || '';
  3528.        let m = txt.match(/\d+/);
  3529.        if (m) {
  3530.          const n = parseInt(m[0]||'0',10)||0;
  3531.          elStock.textContent = (n>0) ? ('Stok: ' + formatStockLabel(n)) : 'Habis';
  3532.        }
  3533.      }
  3534.    } catch(_){}
  3535. if(window.__PD_VARIANTS_WITH_BRANCH__&&v){const vv=window.__PD_VARIANTS_WITH_BRANCH__.find(x=>x.id===v.id)||v;updateStockPopoverForVariant(vv)}
  3536.  };
  3537. })();
  3538.  
  3539. (function initCurrentVariantBranch(){
  3540.  const list = window.__PD_VARIANTS_WITH_BRANCH__ || [];
  3541.  if (!list.length) return;
  3542.  const hid = document.getElementById('pd-variant-id');
  3543.  const vid = hid ? parseInt(hid.value||'0',10) : 0;
  3544.  const current = list.find(x => x.id === vid) || list[0] || null;
  3545.  if (current) updateStockPopoverForVariant(current);
  3546. })();
  3547.  
  3548. (function(){
  3549.    if (!window.ga4Ecomm) return;
  3550.    const catSegs = ["Komputer & Laptop","Laptop","Gaming"];
  3551.    window.ga4Ecomm.viewItem({
  3552.      currency: 'IDR',
  3553.      value: 20789000,
  3554.      item_id: "1S83N0880RID",
  3555.      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",
  3556.      item_brand: "Lenovo ",
  3557.      item_category: catSegs && catSegs.length ? catSegs.join(' / ') : ''
  3558.    });
  3559.  })();
  3560.  
  3561. (function patchApplyVariantFocus(){
  3562.  if (typeof applyVariant !== 'function') return;
  3563.  const original = applyVariant;
  3564.  window.applyVariant = function(v, focusImage = true){
  3565.    
  3566.    original(v, focusImage);
  3567.    
  3568.    if (focusImage && v && v.image_url) {
  3569.      _0xau1v(v.image_url);
  3570.    }
  3571.  };
  3572. })();
  3573.  
  3574. (function() {
  3575.  var soldMap = [];
  3576.  var soldTotalLabel = "Terjual 2";
  3577.  
  3578.  function formatSoldLabel(qty) {
  3579.    if (qty >= 1000000) {
  3580.      var v = Math.floor((qty / 100000) ) / 10;
  3581.      return 'Terjual ' + (String(v).replace('.', ',')) + 'jt+';
  3582.    }
  3583.    if (qty >= 1000) {
  3584.      var v2 = Math.floor((qty / 100) ) / 10;
  3585.      return 'Terjual ' + (String(v2).replace('.', ',')) + 'rb+';
  3586.    }
  3587.    if (qty >= 100) {
  3588.      var v2 = Math.floor((qty / 100) ) * 100;
  3589.      return 'Terjual ' + (String(v2).replace('.', ',')) + '+';
  3590.    }
  3591.    if (qty >= 10) {
  3592.      var v2 = Math.floor((qty / 10) ) * 10;
  3593.      return 'Terjual ' + (String(v2).replace('.', ',')) + '+';
  3594.    }
  3595.    return 'Terjual ' + (qty.toLocaleString('id-ID'));
  3596.  }
  3597.  
  3598.  function updateSoldLabel(labelText) {
  3599.    var el = document.querySelector('#pd-sold-inline, [data-role="sold-chip"]');
  3600.    if (el) el.textContent = labelText;
  3601.  }
  3602.  
  3603.  window.updateSoldBySku = function(sku) {
  3604.    if (!sku || typeof sku !== 'string') {
  3605.      updateSoldLabel(soldTotalLabel);
  3606.      return;
  3607.    }
  3608.    var qty = soldMap[sku] || 0;
  3609.    updateSoldLabel(formatSoldLabel(qty));
  3610.  };
  3611.  
  3612.    updateSoldLabel(soldTotalLabel);
  3613.  })();
  3614.  
  3615. (function(){const h=document.getElementById('pd-sticky-header');if(!h)return;const p=document.getElementById('pd-price-anchor');const ac=document.getElementById('pd-sticky-add-cart');const by=document.getElementById('pd-sticky-buy');let lt=window.scrollY;let tk=false;function u(){if(!p)return;const r=p.getBoundingClientRect();const s=window.scrollY;if(r.top<0){h.classList.add('visible')}else{h.classList.remove('visible')}lt=s;tk=false}function rt(){if(!tk){window.requestAnimationFrame(u);tk=true}}window.addEventListener('scroll',rt,{passive:true});u();function sy(){const ma=document.getElementById('btn-add-cart');const mb=document.getElementById('btn-buy');if(ac&&ma){ac.disabled=ma.disabled}if(by&&mb){by.disabled=mb.disabled}}sy();const ob=new MutationObserver(sy);const ma=document.getElementById('btn-add-cart');const mb=document.getElementById('btn-buy');if(ma)ob.observe(ma,{attributes:true,attributeFilter:['disabled']});if(mb)ob.observe(mb,{attributes:true,attributeFilter:['disabled']});const ss=document.getElementById('pd-sticky-share-btn');const ms=document.getElementById('pd-share-btn');if(ss&&ms){ss.addEventListener('click',function(e){e.preventDefault();ms.click()})}if(ac){ac.addEventListener('click',function(e){e.preventDefault();if(ac.disabled)return;const m=document.getElementById('btn-add-cart');if(m&&!m.disabled){m.click()}})}if(by){by.addEventListener('click',function(e){e.preventDefault();if(by.disabled)return;const m=document.getElementById('btn-buy');if(m&&!m.disabled&&window.buyNow){window.buyNow(e)}})}
  3616. function getChatProductData(){const varInput=document.getElementById('pd-variant-id');const variantId=varInput?parseInt(varInput.value||'0',10):0;const variantSummary=getVariantSummaryText();const priceEl=document.getElementById('pd-price-current');const currentPrice=priceEl?priceEl.textContent.trim():'Rp 20.789.000';const pd={id:325,name:"Lenovo Legion Go 8ASP2 - 83N0000RID \/AMD Ryzen Z2 Extreme\/32GB\/1TB SSD\/AMD Radeon Graphics\/8.8\" WUXGA OLED Touch\/Win 11 Home\/Eclipse Black\/3Y",price:currentPrice,image:"\/uploads\/products\/lenovo-legion-go-8asp2-83n0000rid.webp",url:window.location.href};if(variantId>0){pd.variant_id=variantId}if(variantSummary){pd.variant_summary=variantSummary}return pd}
  3617. 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')}})();
  3618.  
  3619. (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)}function fr(a){return'Rp'+Math.floor(a).toLocaleString('id-ID')}})();
  3620. </script>
  3621. <script nonce="se3iyzEHMc9FQEB4wSyd0w==">
  3622. 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;
  3623. window.IS_DIGITAL=IS_DIGITAL;
  3624. window.isPreorderProduct=false;
  3625. window.PD_PREORDER_DATA=null;
  3626. </script>
  3627.  
  3628. <script src="https://plazaitdotid.pages.dev/assets/js/pd-lightbox.js" nonce="se3iyzEHMc9FQEB4wSyd0w=="></script>
  3629. <script src="https://plazaitdotid.pages.dev/assets/js/cart.js" defer nonce="se3iyzEHMc9FQEB4wSyd0w=="></script>
  3630. <script src="https://plazaitdotid.pages.dev/assets/js/stock-validator-vanilla.js" nonce="se3iyzEHMc9FQEB4wSyd0w=="></script>
  3631. <script src="https://plazaitdotid.pages.dev/assets/js/pd-addtocart.js" defer nonce="se3iyzEHMc9FQEB4wSyd0w=="></script>
  3632. <script src="https://plazaitdotid.pages.dev/assets/js/pd-buynow.js" defer nonce="se3iyzEHMc9FQEB4wSyd0w=="></script>
  3633. <script src="https://plazaitdotid.pages.dev/assets/js/pd-voucher-recalc.js" defer nonce="se3iyzEHMc9FQEB4wSyd0w=="></script>
  3634. <script nonce="se3iyzEHMc9FQEB4wSyd0w==">document.addEventListener('DOMContentLoaded',function(){if(typeof ProductReviews!=='undefined'){ProductReviews.init(325);}const r=document.getElementById('pd-rating-inline');if(r){r.addEventListener('click',function(e){e.preventDefault();const s=document.getElementById('reviews');if(s){s.scrollIntoView({behavior:'smooth',block:'start'});s.classList.add('highlight-flash');setTimeout(()=>{s.classList.remove('highlight-flash')},1500)}});}});</script>
  3635.  
  3636. <script nonce="se3iyzEHMc9FQEB4wSyd0w==">
  3637. (function(){function _0x9i0j(el){if(typeof gtag==='function'){gtag('event','qoala_insurance_click',{event_category:'Insurance',event_label:'Qoala Banner Click - Product Detail',link_url:'/plazait-protect',page_location:window.location.href,product_id:parseInt(el.getAttribute('data-product-id'))||0,product_name:el.getAttribute('data-product-name')||'',category_path:el.getAttribute('data-category-path')||'',custom_map:{custom_parameter_1:'qoala_banner_product_detail'}})}}
  3638.  
  3639. 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()}})();
  3640.  
  3641. (function(){const pwpSection=document.getElementById('pwp-deals-section');const pwpBadge=document.getElementById('pwp-trigger-badge');if(!pwpSection)return;const productId=parseInt(pwpSection.getAttribute('data-product-id'))||0;const variantId=parseInt(pwpSection.getAttribute('data-variant-id'))||0;const categoryPath=pwpSection.getAttribute('data-category-path')||'';if(!productId)return;function formatRupiah(n){return'Rp'+Math.floor(n).toLocaleString('id-ID')}function loadPWPDeals(){const url=`/api/pwp/get_by_product.php?product_id=${productId}${variantId?`&variant_id=${variantId}`:''}${categoryPath?`&category_path=${encodeURIComponent(categoryPath)}`:''}`;fetch(url).then(r=>r.json()).then(data=>{if(data.success&&data.promotions&&data.promotions.length>0){renderPWPDeals(data.promotions);pwpSection.hidden=false;if(pwpBadge)pwpBadge.hidden=false;setTimeout(function(){if(typeof window.adjustSidebarBanner==='function'){window.adjustSidebarBanner()}},150)}else{pwpSection.hidden=true;if(pwpBadge)pwpBadge.hidden=true}}).catch(err=>{console.error('PWP load error:',err);pwpSection.hidden=true;if(pwpBadge)pwpBadge.hidden=true})}function renderPWPDeals(promotions){const loading=pwpSection.querySelector('.pwp-deals-loading');const grid=document.getElementById('pwp-deals-grid');if(loading)loading.hidden=true;if(!grid)return;grid.innerHTML='';promotions.forEach(promo=>{promo.bundled_products.forEach(product=>{const card=document.createElement('div');card.className='pwp-deal-card';const discount=product.discount>0?product.discount:0;const discountPercent=product.regular_price>0?Math.round((discount/product.regular_price)*100):0;const imgUrl=product.image_url?`/uploads/products/${product.image_url}`:'/assets/img/no-image.png';card.innerHTML=`<div class="pwp-deal-thumb"><img src="${imgUrl}" alt="${escapeHtml(product.name)}" loading="lazy"></div><div class="pwp-deal-info"><h4 class="pwp-deal-name">${escapeHtml(product.name)}</h4><div class="pwp-deal-prices"><span class="pwp-deal-price">${formatRupiah(product.pwp_price)}</span>${product.regular_price>product.pwp_price?`<span class="pwp-deal-original">${formatRupiah(product.regular_price)}</span>`:''}</div></div>${discountPercent>0?`<span class="pwp-deal-badge">-${discountPercent}%</span>`:''}`;grid.appendChild(card)})})}function escapeHtml(str){const div=document.createElement('div');div.textContent=str||'';return div.innerHTML}loadPWPDeals();window.addEventListener('pd-variant-changed',function(e){const detail=e.detail||{};const newVid=detail.variant_id||0;const currentVid=parseInt(pwpSection.getAttribute('data-variant-id'))||0;if(newVid!==currentVid){pwpSection.setAttribute('data-variant-id',newVid);loadPWPDeals()}})})();
  3642. </script><footer class="site-footer footer-compact variant-stripes" role="contentinfo">
  3643.  <div class="ft-top ft-collapsible" id="ftTop">
  3644.    <div class="container ft-grid">
  3645.  
  3646.      <div class="ft-col ft-help">
  3647.        <h4 class="ft-title">Butuh Bantuan?</h4>
  3648.        <p class="ft-desc">
  3649.          Hubungi Official WhatsApp MACAN123 untuk bantuan akses, daftar akun, informasi dan pilihan game dari banyak provider.
  3650.        </p>
  3651.      
  3652.        <a class="ft-wa-btn" href="https://tinyurl.com/WA-OFFICIAL1-MACAN123" target="_blank" rel="nofollow noopener">
  3653.          <span class="ico" aria-hidden="true">
  3654.            <svg viewBox="0 0 24 24" width="18" height="18"><path fill="#25D366" d="M12.04 2c-5.52 0-10 4.43-10 9.9 0 1.75.47 3.45 1.38 4.94L2 22l5.3-1.38c1.43.78 3.05 1.19 4.7 1.19 5.52 0 10-4.43 10-9.9S17.56 2 12.04 2Zm5.86 13.9c-.25.7-1.23 1.28-1.7 1.33-.45.06-1.02.08-1.65-.1-.38-.12-.88-.29-1.52-.56-2.66-1.15-4.4-3.83-4.53-4.01-.13-.18-1.08-1.44-1.08-2.75 0-1.31.68-1.95.92-2.22.25-.27.54-.33.72-.33.18 0 .36.01.52.01.17 0 .39-.06.62.47.25.6.85 2.07.92 2.22.07.15.12.33.02.53-.1.2-.15.33-.3.5-.15.17-.32.39-.46.53-.15.15-.3.31-.13.6.18.3.8 1.31 1.73 2.12 1.19 1.03 2.17 1.36 2.48 1.5.31.14.49.12.67-.07.18-.18.77-.82.98-1.1.21-.27.42-.23.7-.14.27.09 1.72.81 2.02.95.3.14.5.22.58.35.08.13.08.72-.17 1.42Z"/></svg>
  3655.          </span>
  3656.          Kirim Pesan
  3657.        </a>
  3658.      
  3659.        <p class="ft-desc sm-gap">Ikuti kami:</p>
  3660.        <div class="ft-social">
  3661.          <a aria-label="Facebook" href="https://facebook.com/MACAN123/">
  3662.            <svg viewBox="0 0 24 24" width="18" height="18"><path fill="currentColor" d="M13.5 22v-8.2h2.7l.4-3.2h-3.1V8c0-.9.3-1.5 1.6-1.5H17V3.7c-.3 0-1.2-.1-2.2-.1-2.2 0-3.8 1.3-3.8 3.9v2.2H8v3.2h3v8.1h2.5Z"/></svg>
  3663.          </a>
  3664.          <a aria-label="Instagram" href="https://www.instagram.com/MACAN123">
  3665.            <svg viewBox="0 0 24 24" width="18" height="18"><path fill="currentColor" d="M7.8 2h8.4A5.8 5.8 0 0 1 22 7.8v8.4A5.8 5.8 0 0 1 16.2 22H7.8A5.8 5.8 0 0 1 2 16.2V7.8A5.8 5.8 0 0 1 7.8 2Zm0 2A3.8 3.8 0 0 0 4 7.8v8.4A3.8 3.8 0 0 0 7.8 20h8.4a3.8 3.8 0 0 0 3.8-3.8V7.8A3.8 3.8 0 0 0 16.2 4H7.8Zm9.9 1.7a1.1 1.1 0 1 1 0 2.3 1.1 1.1 0 0 1 0-2.3ZM12 7a5 5 0 1 1 0 10 5 5 0 0 1 0-10Zm0 2a3 3 0 1 0 0 6 3 3 0 0 0 0-6Z"/></svg>
  3666.          </a>
  3667.          <a aria-label="TikTok" href="https://www.tiktok.com/@MACAN123">
  3668.            <svg viewBox="0 0 24 24" width="18" height="18"><path fill="currentColor" d="M18.9 7.4a6.4 6.4 0 0 1-3.2-1.2v6.3a5.47 5.47 0 1 1-5.5-5.5c.2 0 .4 0 .6.02v2.37a2.92 2.92 0 0 0-.6-.07 2.8 2.8 0 1 0 2.8 2.8V2h2.3a4.6 4.6 0 0 0 4.5 4.1v2.3Z"/></svg>
  3669.          </a>
  3670.        </div>
  3671.      </div>
  3672.      
  3673.      <!-- Collapsible Content Wrapper (Non-Homepage Only) -->
  3674.      <div class="ft-collapsible-content" id="ftCollapsible">
  3675.      
  3676.        <div class="ft-col">
  3677.          <h4 class="ft-title">Tentang MACAN123 </h4>
  3678.          <ul class="ft-links">
  3679.            <li><a href="https://www.seoulexhibition.com/">Tentang MACAN123</a></li>
  3680.            <li><a href="https://www.seoulexhibition.com/">Kontak Bantuan</a></li>
  3681.            <li><a href="https://www.seoulexhibition.com/">Pilihan Provider</a></li>
  3682.            <li><a href="https://www.seoulexhibition.com/">FAQ</a></li>
  3683.          </ul>
  3684.      
  3685.          <div class="ft-address">
  3686.            <p class="company">MACAN123 ACCESS</p>
  3687.            <p>Platform dengan pilihan game lengkap dari banyak provider.</p>
  3688.            <p>Mendukung akses mobile, desktop, panduan daftar, dan informasi permainan.</p>
  3689.          </div>
  3690.        </div>
  3691.      
  3692.        <div class="ft-col">
  3693.          <h4 class="ft-title">Informasi</h4>
  3694.          <ul class="ft-links">
  3695.            <li><a href="https://tinyurl.com/TOMBOL-DAFTAR-MACAN123">Syarat &amp; Ketentuan</a></li>
  3696.            <li><a href="https://www.seoulexhibition.com/">Kebijakan Privasi</a></li>
  3697.            <li><a href="https://tinyurl.com/WA-OFFICIAL1-MACAN123">Bantuan &amp; Dukungan</a></li>
  3698.            <li><a href="https://www.seoulexhibition.com/">Panduan Provider Game</a></li>
  3699.            <li><a href="https://www.seoulexhibition.com/">Metode Transaksi</a></li>
  3700.            <li><a href="https://tinyurl.com/TOMBOL-DAFTAR-MACAN123">Daftar Akun MACAN123</a></li>
  3701.          </ul>
  3702.      
  3703.          <div class="ft-payments payments-small" aria-label="Metode Pembayaran">
  3704.            <div class="pay-row">
  3705.              <img src="https://plazaitdotid.pages.dev/assets/img/payments/mandiri.svg" alt="Mandiri" loading="lazy">
  3706.              <img src="https://plazaitdotid.pages.dev/assets/img/payments/bni.svg" alt="BNI" loading="lazy">
  3707.              <img src="https://plazaitdotid.pages.dev/assets/img/payments/bri.svg" alt="BRI" loading="lazy">
  3708.              <img src="https://plazaitdotid.pages.dev/assets/img/payments/bsi.svg" alt="BSI" loading="lazy">
  3709.              <img src="https://plazaitdotid.pages.dev/assets/img/payments/cimb-logo.svg" alt="CIMB" loading="lazy">
  3710.            </div>
  3711.          </div>
  3712.        </div>
  3713.      
  3714.      </div>
  3715.      <!-- End Collapsible Content -->
  3716.      
  3717.      <!-- Expand Button (Mobile Only) -->
  3718.      <button class="ft-expand-btn" id="ftExpandBtn" aria-label="Lihat semua informasi footer">
  3719.        <span class="expand-text">Selengkapnya</span>
  3720.        <svg viewBox="0 0 24 24" width="18" height="18" fill="currentColor">
  3721.          <path d="M7.41 8.59L12 13.17l4.59-4.58L18 10l-6 6-6-6 1.41-1.41z"/>
  3722.        </svg>
  3723.      </button>
  3724.      
  3725.      </div>
  3726.      </div>
  3727.      
  3728.      <div class="ft-bottom">
  3729.        <div class="container ft-bottom-inner">
  3730.          <div class="ft-copy">
  3731.            <span>MACAN123 &copy; <span id="yearNow">2026</span></span>
  3732.            <span>Platform dengan beragam pilihan game lengkap dari banyak provider.</span>
  3733.          </div>
  3734.        </div>
  3735.      </div>
  3736.                <style nonce="se3iyzEHMc9FQEB4wSyd0w==">
  3737.            /* Chat Widget Styles - Lightweight & Minimal */
  3738.            .chat-widget {
  3739.                position: fixed;
  3740.                bottom: 20px;
  3741.                right: 20px;
  3742.                z-index: 9999;
  3743.                font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, sans-serif;
  3744.            }
  3745.            
  3746.            /* Hide floating button on mobile - use bottom nav instead */
  3747.            @media (max-width: 640px) {
  3748.                .chat-toggle-btn {
  3749.                    display: none !important;
  3750.                }
  3751.                
  3752.                /* Ensure popup is still visible on mobile even when button is hidden */
  3753.                .chat-widget {
  3754.                    display: block !important;
  3755.                }
  3756.                
  3757.                .chat-popup {
  3758.                    display: none; /* Hidden by default, shown via JS */
  3759.                }
  3760.                
  3761.                .chat-popup[style*="display: block"],
  3762.                .chat-popup[style*="display:block"] {
  3763.                    display: block !important;
  3764.                }
  3765.            }
  3766.            
  3767.            .chat-toggle-btn {
  3768.                width: 60px;
  3769.                height: 60px;
  3770.                border-radius: 50%;
  3771.                background: linear-gradient(135deg, #F28C1A 0%, #D97809 100%);
  3772.                border: none;
  3773.                color: white;
  3774.                cursor: pointer;
  3775.                box-shadow: 0 4px 12px rgba(242, 140, 26, 0.3);
  3776.                position: relative;
  3777.                transition: transform 0.2s, box-shadow 0.2s;
  3778.            }
  3779.            
  3780.            .chat-toggle-btn:hover {
  3781.                transform: scale(1.05);
  3782.                box-shadow: 0 6px 20px rgba(242, 140, 26, 0.4);
  3783.            }
  3784.            
  3785.            #chat-toggle-btn .chat-icon {
  3786.                position: absolute;
  3787.                top: 50%;
  3788.                left: 50%;
  3789.                transform: translate(-50%, -50%);
  3790.                width: 28px !important;
  3791.                height: 28px !important;
  3792.            }
  3793.            
  3794.            .chat-unread-badge {
  3795.                position: absolute;
  3796.                top: -5px;
  3797.                right: -5px;
  3798.                background: #ef4444;
  3799.                color: white;
  3800.                border-radius: 12px;
  3801.                padding: 2px 6px;
  3802.                font-size: 11px;
  3803.                font-weight: 600;
  3804.                min-width: 20px;
  3805.                text-align: center;
  3806.            }
  3807.            
  3808.            .chat-popup {
  3809.                position: absolute;
  3810.                bottom: 80px;
  3811.                right: 0;
  3812.                width: 380px;
  3813.                max-width: calc(100vw - 40px);
  3814.                height: 500px;
  3815.                max-height: calc(100vh - 120px);
  3816.                background: white;
  3817.                border-radius: 12px;
  3818.                box-shadow: 0 10px 40px rgba(0,0,0,0.2);
  3819.                display: flex;
  3820.                flex-direction: column;
  3821.                overflow: hidden;
  3822.            }
  3823.            
  3824.            .chat-popup-header {
  3825.                background: linear-gradient(135deg, #F28C1A 0%, #D97809 100%);
  3826.                color: white;
  3827.                padding: 16px 20px;
  3828.                display: flex;
  3829.                justify-content: space-between;
  3830.                align-items: center;
  3831.                flex-shrink: 0;
  3832.            }
  3833.            
  3834.            .chat-header-title {
  3835.                display: flex;
  3836.                flex-direction: column;
  3837.                gap: 2px;
  3838.                min-height: 0;
  3839.            }
  3840.            
  3841.            .chat-popup-header h3 {
  3842.                margin: 0;
  3843.                font-size: 18px;
  3844.                font-weight: 600;
  3845.                line-height: 1.2;
  3846.            }
  3847.            
  3848.            .chat-operating-hours {
  3849.                font-size: 11px;
  3850.                opacity: 0.9;
  3851.                font-weight: 400;
  3852.                display: flex;
  3853.                align-items: center;
  3854.                gap: 4px;
  3855.                line-height: 1.2;
  3856.            }
  3857.            
  3858.            .chat-operating-hours svg {
  3859.                width: 12px;
  3860.                height: 12px;
  3861.                opacity: 0.8;
  3862.                flex-shrink: 0;
  3863.            }
  3864.            
  3865.            .chat-header-actions {
  3866.                display: flex;
  3867.                align-items: center;
  3868.                gap: 8px;
  3869.            }
  3870.            
  3871.            /* Notification Toggle Button */
  3872.            .btn-notif-toggle {
  3873.                background: none;
  3874.                border: none;
  3875.                color: white;
  3876.                font-size: 18px;
  3877.                cursor: pointer;
  3878.                padding: 4px 8px;
  3879.                transition: all 0.2s;
  3880.                opacity: 0.8;
  3881.            }
  3882.            
  3883.            .btn-notif-toggle:hover {
  3884.                opacity: 1;
  3885.                transform: scale(1.1);
  3886.            }
  3887.            
  3888.            /* Icon states */
  3889.            .btn-notif-toggle[data-status="not-subscribed"] svg {
  3890.                opacity: 0.7;
  3891.            }
  3892.            
  3893.            .btn-notif-toggle[data-status="not-subscribed"]:hover svg {
  3894.                opacity: 1;
  3895.            }
  3896.            
  3897.            .btn-notif-toggle[data-status="subscribed"] svg {
  3898.                opacity: 1;
  3899.                animation: bellRing 2s ease-in-out;
  3900.            }
  3901.            
  3902.            .btn-notif-toggle[data-status="blocked"] svg {
  3903.                color: #ff6b6b;
  3904.            }
  3905.            
  3906.            .btn-notif-toggle[data-status="not-supported"] {
  3907.                display: none !important;
  3908.            }
  3909.            
  3910.            @keyframes bellRing {
  3911.                0%, 100% { transform: rotate(0deg); }
  3912.                10%, 30% { transform: rotate(-10deg); }
  3913.                20%, 40% { transform: rotate(10deg); }
  3914.            }
  3915.            
  3916.            /* Notification Info Bar */
  3917.            .chat-notif-info-bar {
  3918.                position: absolute;
  3919.                top: 64px;
  3920.                left: 0;
  3921.                right: 0;
  3922.                background: linear-gradient(to right, #e3f2fd, #f5f5f5);
  3923.                border-bottom: 1px solid #bbdefb;
  3924.                padding: 8px 12px;
  3925.                display: flex;
  3926.                align-items: center;
  3927.                gap: 8px;
  3928.                font-size: 12px;
  3929.                color: #616161;
  3930.                z-index: 10;
  3931.                animation: slideDown 0.3s ease;
  3932.            }
  3933.            
  3934.            .chat-notif-info-bar svg {
  3935.                flex-shrink: 0;
  3936.            }
  3937.            
  3938.            .chat-notif-info-bar .small {
  3939.                flex: 1;
  3940.                line-height: 1.4;
  3941.            }
  3942.            
  3943.            .chat-notif-info-bar .btn-dismiss {
  3944.                background: none;
  3945.                border: none;
  3946.                color: #9e9e9e;
  3947.                cursor: pointer;
  3948.                padding: 0 4px;
  3949.                font-size: 16px;
  3950.                transition: color 0.2s;
  3951.            }
  3952.            
  3953.            .chat-notif-info-bar .btn-dismiss:hover {
  3954.                color: #616161;
  3955.            }
  3956.            
  3957.            @keyframes slideDown {
  3958.                from {
  3959.                    max-height: 0;
  3960.                    opacity: 0;
  3961.                }
  3962.                to {
  3963.                    max-height: 50px;
  3964.                    opacity: 1;
  3965.                }
  3966.            }
  3967.            
  3968.            .chat-close-btn {
  3969.                background: none;
  3970.                border: none;
  3971.                color: white;
  3972.                font-size: 28px;
  3973.                line-height: 1;
  3974.                cursor: pointer;
  3975.                padding: 0;
  3976.                width: 30px;
  3977.                height: 30px;
  3978.            }
  3979.            
  3980.            .chat-popup-body {
  3981.                flex: 1 1 auto;
  3982.                display: flex;
  3983.                flex-direction: column;
  3984.                min-height: 0;
  3985.                overflow: hidden;
  3986.                height: calc(100% - 64px);
  3987.                position: relative;
  3988.                transition: padding-top 0.3s ease;
  3989.            }
  3990.            
  3991.            /* Add padding when info bar is visible */
  3992.            .chat-popup-body.has-info-bar {
  3993.                padding-top: 40px;
  3994.            }
  3995.            
  3996.            .chat-view {
  3997.                flex: 1 1 auto;
  3998.                display: none;
  3999.                flex-direction: column;
  4000.                min-height: 0;
  4001.                overflow: hidden;
  4002.            }
  4003.            
  4004.            #chat-list-view {
  4005.                display: flex;
  4006.            }
  4007.            
  4008.            #chat-messages-view {
  4009.                display: none;
  4010.            }
  4011.            
  4012.            #chat-messages-view.active {
  4013.                display: flex;
  4014.                flex-direction: column;
  4015.            }
  4016.            
  4017.            #chat-new-view {
  4018.                display: none;
  4019.            }
  4020.            
  4021.            #chat-new-view.active {
  4022.                display: flex;
  4023.            }
  4024.            
  4025.            .chat-conversations-list {
  4026.                flex: 1;
  4027.                overflow-y: auto;
  4028.                padding: 0;
  4029.                background: white;
  4030.            }
  4031.            
  4032.            /* Custom Scrollbar for Conversations List */
  4033.            .chat-conversations-list::-webkit-scrollbar {
  4034.                width: 6px;
  4035.            }
  4036.            
  4037.            .chat-conversations-list::-webkit-scrollbar-track {
  4038.                background: #f1f1f1;
  4039.            }
  4040.            
  4041.            .chat-conversations-list::-webkit-scrollbar-thumb {
  4042.                background: #F28C1A;
  4043.                border-radius: 3px;
  4044.            }
  4045.            
  4046.            .chat-conversations-list::-webkit-scrollbar-thumb:hover {
  4047.                background: #D97809;
  4048.            }
  4049.            
  4050.            /* Firefox */
  4051.            .chat-conversations-list {
  4052.                scrollbar-width: thin;
  4053.                scrollbar-color: #F28C1A #f1f1f1;
  4054.            }
  4055.            
  4056.            .chat-conversation-item {
  4057.                padding: 12px 16px;
  4058.                cursor: pointer;
  4059.                display: flex;
  4060.                gap: 12px;
  4061.                align-items: flex-start;
  4062.                transition: background 0.15s ease;
  4063.                color: #33371f;
  4064.                border-bottom: 1px solid #f0f0f0;
  4065.            }
  4066.            
  4067.            .chat-conversation-item:hover {
  4068.                background: #f5f5f5;
  4069.            }
  4070.            
  4071.            .chat-conversation-item.active {
  4072.                background: #FFF5EB;
  4073.            }
  4074.            
  4075.            /* WhatsApp-like Avatar */
  4076.            .conversation-avatar {
  4077.                width: 48px;
  4078.                height: 48px;
  4079.                border-radius: 50%;
  4080.                background: linear-gradient(135deg, #F28C1A 0%, #D97809 100%);
  4081.                flex-shrink: 0;
  4082.                display: flex;
  4083.                align-items: center;
  4084.                justify-content: center;
  4085.                color: white;
  4086.                font-weight: 600;
  4087.                font-size: 18px;
  4088.            }
  4089.            
  4090.            .conversation-avatar svg {
  4091.                width: 24px;
  4092.                height: 24px;
  4093.            }
  4094.            
  4095.            /* WhatsApp-like Content */
  4096.            .conversation-content {
  4097.                flex: 1;
  4098.                min-width: 0;
  4099.                display: flex;
  4100.                flex-direction: column;
  4101.                gap: 4px;
  4102.            }
  4103.            
  4104.            .conversation-header {
  4105.                display: flex;
  4106.                justify-content: space-between;
  4107.                align-items: center;
  4108.                gap: 8px;
  4109.            }
  4110.            
  4111.            .conversation-name {
  4112.                font-weight: 600;
  4113.                font-size: 15px;
  4114.                color: #111;
  4115.                white-space: nowrap;
  4116.                overflow: hidden;
  4117.                text-overflow: ellipsis;
  4118.            }
  4119.            
  4120.            .conversation-time {
  4121.                font-size: 12px;
  4122.                color: #7d8166;
  4123.                flex-shrink: 0;
  4124.            }
  4125.            
  4126.            .conversation-preview {
  4127.                display: flex;
  4128.                justify-content: space-between;
  4129.                align-items: center;
  4130.                gap: 8px;
  4131.            }
  4132.            
  4133.            .conversation-message {
  4134.                font-size: 14px;
  4135.                color: #667781;
  4136.                white-space: nowrap;
  4137.                overflow: hidden;
  4138.                text-overflow: ellipsis;
  4139.                margin: 0;
  4140.                flex: 1;
  4141.            }
  4142.            
  4143.            .conversation-unread {
  4144.                background: #25D366;
  4145.                color: white;
  4146.                border-radius: 12px;
  4147.                padding: 2px 8px;
  4148.                font-size: 12px;
  4149.                font-weight: 600;
  4150.                min-width: 20px;
  4151.                text-align: center;
  4152.                flex-shrink: 0;
  4153.            }
  4154.            
  4155.            /* Active item styling */
  4156.            .chat-conversation-item.active .conversation-name {
  4157.                color: #F28C1A;
  4158.            }
  4159.            
  4160.            .chat-conversation-item.active .conversation-time {
  4161.                color: #F28C1A;
  4162.            }
  4163.            
  4164.            .chat-new-btn {
  4165.                margin: 12px;
  4166.                padding: 12px;
  4167.                background: linear-gradient(135deg, #F28C1A 0%, #D97809 100%);
  4168.                color: white;
  4169.                border: none;
  4170.                border-radius: 8px;
  4171.                cursor: pointer;
  4172.                font-weight: 500;
  4173.                font-size: 14px;
  4174.                display: flex;
  4175.                align-items: center;
  4176.                justify-content: center;
  4177.                gap: 8px;
  4178.                transition: all 0.2s;
  4179.                flex-shrink: 0;
  4180.            }
  4181.            
  4182.            .chat-new-btn:hover {
  4183.                transform: translateY(-1px);
  4184.                box-shadow: 0 4px 8px rgba(242, 140, 26, 0.3);
  4185.            }
  4186.            
  4187.            .chat-conversation-title {
  4188.                flex: 1;
  4189.                font-weight: 600;
  4190.                font-size: 16px;
  4191.                color: #1f2937;
  4192.            }
  4193.            
  4194.            .chat-messages-container {
  4195.                flex: 1;
  4196.                overflow-y: auto;
  4197.                padding: 16px;
  4198.                display: flex;
  4199.                flex-direction: column;
  4200.                gap: 8px;
  4201.                min-height: 0;
  4202.                background: #E5DDD5;
  4203.            }
  4204.            
  4205.            /* Custom Scrollbar for Messages Container */
  4206.            .chat-messages-container::-webkit-scrollbar {
  4207.                width: 6px;
  4208.            }
  4209.            
  4210.            .chat-messages-container::-webkit-scrollbar-track {
  4211.                background: rgba(0, 0, 0, 0.05);
  4212.            }
  4213.            
  4214.            .chat-messages-container::-webkit-scrollbar-thumb {
  4215.                background: rgba(242, 140, 26, 0.6);
  4216.                border-radius: 3px;
  4217.            }
  4218.            
  4219.            .chat-messages-container::-webkit-scrollbar-thumb:hover {
  4220.                background: #F28C1A;
  4221.            }
  4222.            
  4223.            /* Firefox */
  4224.            .chat-messages-container {
  4225.                scrollbar-width: thin;
  4226.                scrollbar-color: rgba(242, 140, 26, 0.6) rgba(0, 0, 0, 0.05);
  4227.            }
  4228.            
  4229.            /* WhatsApp Group-like Messages */
  4230.            .chat-message {
  4231.                display: flex;
  4232.                margin-bottom: 4px;
  4233.                animation: fadeIn 0.2s ease;
  4234.            }
  4235.            
  4236.            @keyframes fadeIn {
  4237.                from { opacity: 0; transform: translateY(10px); }
  4238.                to { opacity: 1; transform: translateY(0); }
  4239.            }
  4240.            
  4241.            .chat-message.mine {
  4242.                justify-content: flex-end;
  4243.            }
  4244.            
  4245.            .chat-message-bubble {
  4246.                max-width: 80%;
  4247.                padding: 6px 8px 8px 10px;
  4248.                border-radius: 8px;
  4249.                position: relative;
  4250.                box-shadow: 0 1px 0.5px rgba(0,0,0,0.13);
  4251.            }
  4252.            
  4253.            /* Bubble from others (Admin/CS) */
  4254.            .chat-message:not(.mine) .chat-message-bubble {
  4255.                background: #FFFFFF;
  4256.                border-radius: 0 8px 8px 8px;
  4257.            }
  4258.            
  4259.            /* Bubble tail for others */
  4260.            .chat-message:not(.mine) .chat-message-bubble::before {
  4261.                content: '';
  4262.                position: absolute;
  4263.                top: 0;
  4264.                left: -8px;
  4265.                width: 0;
  4266.                height: 0;
  4267.                border-style: solid;
  4268.                border-width: 0 8px 13px 0;
  4269.                border-color: transparent #FFFFFF transparent transparent;
  4270.            }
  4271.            
  4272.            /* Bubble from user (mine) */
  4273.            .chat-message.mine .chat-message-bubble {
  4274.                background: #e4f5d0; /* Light blue for user messages */
  4275.                border-radius: 8px 0 8px 8px;
  4276.            }
  4277.            
  4278.            /* Bubble tail for mine */
  4279.            .chat-message.mine .chat-message-bubble::before {
  4280.                content: '';
  4281.                position: absolute;
  4282.                top: 0;
  4283.                right: -8px;
  4284.                width: 0;
  4285.                height: 0;
  4286.                border-style: solid;
  4287.                border-width: 0 0 13px 8px;
  4288.                border-color: transparent transparent transparent #eaf5d0;
  4289.            }
  4290.            
  4291.            .message-sender {
  4292.                font-size: 12.5px;
  4293.                font-weight: 600;
  4294.                color: #F28C1A !important;
  4295.                margin-bottom: 4px;
  4296.            }
  4297.            
  4298.            .chat-message.mine .message-sender {
  4299.                display: none;
  4300.            }
  4301.            
  4302.            /* Message text */
  4303.            .message-text {
  4304.                font-size: 14px;
  4305.                line-height: 19px;
  4306.                color: #000000 !important;
  4307.                word-wrap: break-word;
  4308.                white-space: pre-wrap;
  4309.                margin-bottom: 4px;
  4310.            }
  4311.            
  4312.            /* Message metadata (time + status) */
  4313.            .message-meta {
  4314.                display: flex;
  4315.                align-items: center;
  4316.                justify-content: flex-end;
  4317.                gap: 4px;
  4318.                margin-top: 2px;
  4319.            }
  4320.            
  4321.            .message-time {
  4322.                font-size: 11px;
  4323.                color: #728166 !important;
  4324.                line-height: 15px;
  4325.            }
  4326.            
  4327.            /* Use multiple selectors to override global styles */
  4328.            .chat-message-bubble .message-status,
  4329.            .message-meta .message-status,
  4330.            .chat-message .message-status {
  4331.                width: 16px !important;
  4332.                height: 16px !important;
  4333.                min-width: 16px !important;
  4334.                min-height: 16px !important;
  4335.                max-width: 16px !important;
  4336.                max-height: 16px !important;
  4337.                flex-shrink: 0;
  4338.                color: #728166 !important;
  4339.                fill: currentColor !important;
  4340.            }
  4341.            
  4342.            .chat-message:not(.mine) .message-status {
  4343.                display: none;
  4344.            }
  4345.            
  4346.            /* Loading dots animation */
  4347.            @keyframes loadingDots {
  4348.                0%, 20% { content: '.'; }
  4349.                40% { content: '..'; }
  4350.                60%, 100% { content: '...'; }
  4351.            }
  4352.            
  4353.            .message-status.loading::after {
  4354.                content: '...';
  4355.                animation: loadingDots 1.5s infinite;
  4356.                font-size: 16px;
  4357.                line-height: 16px;
  4358.            }
  4359.            
  4360.            .message-status.loading path {
  4361.                display: none;
  4362.            }
  4363.            
  4364.            .message-status.failed {
  4365.                color: #ef4444 !important;
  4366.                cursor: pointer;
  4367.            }
  4368.            
  4369.            .message-status.sent {
  4370.                color: #667781 !important;
  4371.            }
  4372.            
  4373.            .chat-new-form {
  4374.                flex: 1;
  4375.                overflow-y: auto;
  4376.                padding: 16px;
  4377.                display: flex;
  4378.                flex-direction: column;
  4379.            }
  4380.            
  4381.            .chat-new-form form {
  4382.                display: flex;
  4383.                flex-direction: column;
  4384.                gap: 16px;
  4385.                flex: 1;
  4386.            }
  4387.            
  4388.            .chat-new-form .form-group {
  4389.                display: flex;
  4390.                flex-direction: column;
  4391.                gap: 6px;
  4392.            }
  4393.            
  4394.            .chat-new-form label {
  4395.                font-size: 14px;
  4396.                font-weight: 500;
  4397.                color: #374151;
  4398.            }
  4399.            
  4400.            .chat-new-form .form-control {
  4401.                width: 100%;
  4402.                padding: 10px 12px;
  4403.                border: 1px solid #d1d5db;
  4404.                border-radius: 8px;
  4405.                font-size: 14px;
  4406.                font-family: inherit;
  4407.                transition: border-color 0.2s;
  4408.                box-sizing: border-box;
  4409.            }
  4410.            
  4411.            .chat-new-form .form-control:focus {
  4412.                outline: none;
  4413.                border-color: #F28C1A;
  4414.                box-shadow: 0 0 0 3px rgba(242, 140, 26, 0.1);
  4415.            }
  4416.            
  4417.            .chat-new-form textarea.form-control {
  4418.                resize: vertical;
  4419.                min-height: 100px;
  4420.            }
  4421.            
  4422.            .chat-new-form .btn {
  4423.                padding: 12px 20px;
  4424.                border: none;
  4425.                border-radius: 8px;
  4426.                font-size: 15px;
  4427.                font-weight: 500;
  4428.                cursor: pointer;
  4429.                transition: all 0.2s;
  4430.                text-align: center;
  4431.            }
  4432.            
  4433.            .chat-new-form .btn-primary {
  4434.                background: linear-gradient(135deg, #F28C1A 0%, #D97809 100%);
  4435.                color: white;
  4436.            }
  4437.            
  4438.            .chat-new-form .btn-primary:hover {
  4439.                transform: translateY(-1px);
  4440.                box-shadow: 0 4px 8px rgba(242, 140, 26, 0.3);
  4441.            }
  4442.            
  4443.            .chat-new-form .btn-primary:active {
  4444.                transform: scale(0.98);
  4445.            }
  4446.            
  4447.            .chat-new-form .btn-block {
  4448.                width: 100%;
  4449.                margin-top: auto;
  4450.            }
  4451.            
  4452.            .chat-message-form {
  4453.                padding: 12px;
  4454.                border-top: 1px solid #e5e7eb;
  4455.                display: flex;
  4456.                flex-wrap: wrap;
  4457.                gap: 8px;
  4458.                align-items: flex-end;
  4459.                flex-shrink: 0;
  4460.                background: white;
  4461.            }
  4462.            
  4463.            .chat-product-card {
  4464.                flex: 1 1 100%;
  4465.                max-width: 100%;
  4466.                display: flex;
  4467.                gap: 12px;
  4468.                padding: 12px;
  4469.                background: #f3f4f6;
  4470.                border-radius: 8px;
  4471.                margin-bottom: 4px;
  4472.                border: 1px solid #e5e7eb;
  4473.            }
  4474.            
  4475.            .chat-product-card img {
  4476.                width: 60px;
  4477.                height: 60px;
  4478.                object-fit: cover;
  4479.                border-radius: 6px;
  4480.                flex-shrink: 0;
  4481.            }
  4482.            
  4483.            .chat-product-card-content {
  4484.                flex: 1;
  4485.                min-width: 0;
  4486.            }
  4487.            
  4488.            .chat-product-card-name {
  4489.                font-weight: 500;
  4490.                font-size: 14px;
  4491.                color: #1f2937;
  4492.                margin-bottom: 4px;
  4493.                white-space: nowrap;
  4494.                overflow: hidden;
  4495.                text-overflow: ellipsis;
  4496.            }
  4497.            
  4498.            .chat-product-card-variant {
  4499.                font-size: 12px;
  4500.                color: #74806b;
  4501.                margin-bottom: 4px;
  4502.            }
  4503.            
  4504.            .chat-product-card-price {
  4505.                font-size: 13px;
  4506.                color: #8bea66;
  4507.                font-weight: 600;
  4508.            }
  4509.            
  4510.            .chat-product-card-remove {
  4511.                align-self: flex-start;
  4512.                background: none;
  4513.                border: none;
  4514.                color: #9ca3af;
  4515.                cursor: pointer;
  4516.                padding: 4px;
  4517.                font-size: 18px;
  4518.                line-height: 1;
  4519.                transition: color 0.2s;
  4520.            }
  4521.            
  4522.            .chat-product-card-remove:hover {
  4523.                color: #ef4444;
  4524.            }
  4525.            
  4526.            /* Product card in messages (read-only display) */
  4527.            .message-product-card {
  4528.                display: flex;
  4529.                gap: 10px;
  4530.                padding: 10px;
  4531.                background: rgba(255, 255, 255, 0.5);
  4532.                border-radius: 8px;
  4533.                margin-bottom: 6px;
  4534.                border: 1px solid rgba(0, 0, 0, 0.08);
  4535.                align-items: center;
  4536.            }
  4537.            
  4538.            .chat-message.mine .message-product-card {
  4539.                background: rgba(255, 255, 255, 0.7);
  4540.            }
  4541.            
  4542.            .message-product-card img {
  4543.                width: 50px;
  4544.                height: 50px;
  4545.                object-fit: cover;
  4546.                border-radius: 6px;
  4547.                flex-shrink: 0;
  4548.            }
  4549.            
  4550.            .message-product-info {
  4551.                flex: 1;
  4552.                min-width: 0;
  4553.            }
  4554.            
  4555.            .message-product-name {
  4556.                font-weight: 500;
  4557.                font-size: 13px;
  4558.                color: #33371f;
  4559.                margin-bottom: 2px;
  4560.                overflow: hidden;
  4561.                text-overflow: ellipsis;
  4562.                display: -webkit-box;
  4563.                -webkit-line-clamp: 2;
  4564.                -webkit-box-orient: vertical;
  4565.                line-height: 1.3;
  4566.            }
  4567.            
  4568.            .message-product-variant {
  4569.                font-size: 11px;
  4570.                color: #78806b;
  4571.                margin-bottom: 2px;
  4572.            }
  4573.            
  4574.            .message-product-price {
  4575.                font-size: 12px;
  4576.                color: #c7ea66;
  4577.                font-weight: 600;
  4578.            }
  4579.            
  4580.            .message-product-link {
  4581.                flex-shrink: 0;
  4582.                width: 32px;
  4583.                height: 32px;
  4584.                display: flex;
  4585.                align-items: center;
  4586.                justify-content: center;
  4587.                background: rgba(102, 126, 234, 0.1);
  4588.                border-radius: 6px;
  4589.                color: #c7ea66;
  4590.                text-decoration: none;
  4591.                transition: all 0.2s;
  4592.            }
  4593.            
  4594.            .message-product-link:hover {
  4595.                background: #b7ea66;
  4596.                color: white;
  4597.            }
  4598.            
  4599.            .message-product-link svg {
  4600.                width: 16px;
  4601.                height: 16px;
  4602.            }
  4603.            
  4604.            .chat-message-input {
  4605.                flex: 1;
  4606.                border: 1px solid #d1d5db;
  4607.                border-radius: 20px;
  4608.                padding: 10px 16px;
  4609.                resize: none;
  4610.                max-height: 100px;
  4611.                font-family: inherit;
  4612.                font-size: 14px;
  4613.                line-height: 1.5;
  4614.                box-sizing: border-box;
  4615.                overflow-y: hidden;
  4616.            }
  4617.            
  4618.            .chat-message-input:focus {
  4619.                outline: none;
  4620.                border-color: #F28C1A;
  4621.                box-shadow: 0 0 0 3px rgba(242, 140, 26, 0.1);
  4622.            }
  4623.            
  4624.            .chat-send-btn {
  4625.                width: 40px;
  4626.                height: 40px;
  4627.                border-radius: 50%;
  4628.                background: linear-gradient(135deg, #F28C1A 0%, #D97809 100%);
  4629.                border: none;
  4630.                color: white;
  4631.                cursor: pointer;
  4632.                flex-shrink: 0;
  4633.                display: flex;
  4634.                align-items: center;
  4635.                justify-content: center;
  4636.                transition: all 0.2s;
  4637.            }
  4638.            
  4639.            .chat-send-btn:hover {
  4640.                transform: scale(1.05);
  4641.                box-shadow: 0 2px 8px rgba(242, 140, 26, 0.3);
  4642.            }
  4643.            
  4644.            .chat-send-btn:active {
  4645.                transform: scale(0.95);
  4646.            }
  4647.            
  4648.            .chat-loading {
  4649.                text-align: center;
  4650.                padding: 20px;
  4651.                color: #6b7280;
  4652.            }
  4653.            
  4654.            /* Date Separator (WhatsApp-style) */
  4655.            .date-separator {
  4656.                display: flex;
  4657.                align-items: center;
  4658.                gap: 12px;
  4659.                margin: 24px 0 16px;
  4660.                opacity: 0;
  4661.                animation: fadeInSeparator 0.3s ease forwards;
  4662.            }
  4663.  
  4664.            @keyframes fadeInSeparator {
  4665.                from {
  4666.                    opacity: 0;
  4667.                    transform: translateY(-10px);
  4668.                }
  4669.                to {
  4670.                    opacity: 1;
  4671.                    transform: translateY(0);
  4672.                }
  4673.            }
  4674.  
  4675.            .date-separator-line {
  4676.                flex: 1;
  4677.                height: 1px;
  4678.                background: linear-gradient(90deg, transparent, rgba(0, 0, 0, 0.1) 50%, transparent);
  4679.            }
  4680.  
  4681.            .date-separator-text {
  4682.                flex-shrink: 0;
  4683.                padding: 4px 12px;
  4684.                background: #e9ecef;
  4685.                color: #6c757d;
  4686.                font-size: 11px;
  4687.                font-weight: 600;
  4688.                text-transform: uppercase;
  4689.                letter-spacing: 0.5px;
  4690.                border-radius: 12px;
  4691.                box-shadow: 0 1px 2px rgba(0, 0, 0, 0.05);
  4692.            }
  4693.            
  4694.            /* Mobile responsive */
  4695.            @media (max-width: 640px) {
  4696.                .chat-popup {
  4697.                    position: fixed !important; /* Override absolute positioning */
  4698.                    bottom: 45px !important; /* Above bottom nav */
  4699.                    right: 0 !important;
  4700.                    left: 0 !important;
  4701.                    width: 100% !important;
  4702.                    max-width: 100% !important;
  4703.                    /* Use dvh (dynamic viewport height) for browser UI awareness */
  4704.                    height: calc(100dvh - 45px) !important;
  4705.                    max-height: calc(100dvh - 45px) !important;
  4706.                    /* Fallback for browsers that don't support dvh */
  4707.                    height: calc(var(--viewport-height, 100vh) - 45px) !important;
  4708.                    max-height: calc(var(--viewport-height, 100vh) - 45px) !important;
  4709.                    border-radius: 0 !important;
  4710.                    z-index: 9999 !important;
  4711.                }
  4712.                
  4713.                .chat-popup-header {
  4714.                    border-radius: 0;
  4715.                }
  4716.                
  4717.                .chat-messages-container,
  4718.                .chat-conversations-list {
  4719.                    /* Adjust for mobile keyboard using dynamic viewport */
  4720.                    max-height: calc(100dvh - 190px);
  4721.                    /* Fallback for browsers that don't support dvh */
  4722.                    max-height: calc(var(--viewport-height, 100vh) - 190px);
  4723.                }
  4724.            }
  4725.        </style>
  4726.                <!-- Chat Widget Button -->
  4727.        <div id="chat-widget" class="chat-widget"
  4728.             data-user-id=""
  4729.             data-is-logged-in="false"
  4730.             data-csrf-token="df5d776748b1ed8c8dd0d987bae99b1ee3dea6c6dcbe0eedb1bea766c56d569a">
  4731.            <button id="chat-toggle-btn" class="chat-toggle-btn" aria-label="Toggle chat">
  4732.                <svg class="chat-icon" width="28" height="28" viewBox="0 0 640 640" fill="currentColor">
  4733.                    <path d="M320 128C241 128 175.3 185.3 162.3 260.7C171.6 257.7 181.6 256 192 256L208 256C234.5 256 256 277.5 256 304L256 400C256 426.5 234.5 448 208 448L192 448C139 448 96 405 96 352L96 288C96 164.3 196.3 64 320 64C443.7 64 544 164.3 544 288L544 456.1C544 522.4 490.2 576.1 423.9 576.1L336 576L304 576C277.5 576 256 554.5 256 528C256 501.5 277.5 480 304 480L336 480C362.5 480 384 501.5 384 528L384 528L424 528C463.8 528 496 495.8 496 456L496 435.1C481.9 443.3 465.5 447.9 448 447.9L432 447.9C405.5 447.9 384 426.4 384 399.9L384 303.9C384 277.4 405.5 255.9 432 255.9L448 255.9C458.4 255.9 468.3 257.5 477.7 260.6C464.7 185.3 399.1 127.9 320 127.9z"/>
  4734.                </svg>
  4735.                <span id="chat-unread-badge" class="chat-unread-badge" style="display: none;">0</span>
  4736.            </button>
  4737.            
  4738.            <div id="chat-popup" class="chat-popup" style="display: none;">
  4739.                <div class="chat-popup-header">
  4740.                    <div class="chat-header-title">
  4741.                        <h3>Bantuan</h3>
  4742.                        <span id="chatOperatingHours" class="chat-operating-hours" style="display: none;"></span>
  4743.                    </div>
  4744.                    <div class="chat-header-actions">
  4745.                        <button id="chatNotifToggle" class="btn-notif-toggle" data-status="not-supported" title="Push notification" style="display: none;">
  4746.                            <svg width="18" height="18" viewBox="0 0 24 24" fill="currentColor">
  4747.                                <path d="M12 22c1.1 0 2-.9 2-2h-4c0 1.1.89 2 2 2zm6-6v-5c0-3.07-1.64-5.64-4.5-6.32V4c0-.83-.67-1.5-1.5-1.5s-1.5.67-1.5 1.5v.68C7.63 5.36 6 7.92 6 11v5l-2 2v1h16v-1l-2-2z"/>
  4748.                            </svg>
  4749.                        </button>
  4750.                        <button id="chat-close-btn" class="chat-close-btn" aria-label="Close chat">×</button>
  4751.                    </div>
  4752.                </div>
  4753.                
  4754.                <!-- Notification Info Bar (conditional) -->
  4755.                <div class="chat-notif-info-bar" id="chatNotifInfoBar" style="display:none;">
  4756.                    <svg width="14" height="14" viewBox="0 0 24 24" fill="#ffc107">
  4757.                        <path d="M9 21c0 .55.45 1 1 1h4c.55 0 1-.45 1-1v-1H9v1zm3-19C8.14 2 5 5.14 5 9c0 2.38 1.19 4.47 3 5.74V17c0 .55.45 1 1 1h6c.55 0 1-.45 1-1v-2.26c1.81-1.27 3-3.36 3-5.74 0-3.86-3.14-7-7-7zm2.85 11.1l-.85.6V16h-4v-2.3l-.85-.6C7.8 12.16 7 10.63 7 9c0-2.76 2.24-5 5-5s5 2.24 5 5c0 1.63-.8 3.16-2.15 4.1z"/>
  4758.                    </svg>
  4759.                    <span class="small">Aktifkan notifikasi untuk pemberitahuan balasan</span>
  4760.                    <button class="btn-dismiss" onclick="ChatNotification.dismissInfo()">✕</button>
  4761.                </div>
  4762.                
  4763.                <div class="chat-popup-body">
  4764.                    <!-- Conversations List View -->
  4765.                    <div id="chat-list-view" class="chat-view">
  4766.                        <div id="chat-conversations-list" class="chat-conversations-list">
  4767.                            <div class="chat-loading">Memuat...</div>
  4768.                            <!-- Conversation Item Structure (rendered by JS):
  4769.                            <div class="chat-conversation-item">
  4770.                                <div class="conversation-avatar">
  4771.                                    <svg>...</svg>
  4772.                                </div>
  4773.                                <div class="conversation-content">
  4774.                                    <div class="conversation-header">
  4775.                                        <span class="conversation-name">Admin Support</span>
  4776.                                        <span class="conversation-time">10:30</span>
  4777.                                    </div>
  4778.                                    <div class="conversation-preview">
  4779.                                        <p class="conversation-message">Terima kasih telah menghubungi kami...</p>
  4780.                                        <span class="conversation-unread">2</span>
  4781.                                    </div>
  4782.                                </div>
  4783.                            </div>
  4784.                            -->
  4785.                        </div>
  4786.                        <button id="chat-new-btn" class="chat-new-btn">
  4787.                            <svg width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2">
  4788.                                <line x1="12" y1="5" x2="12" y2="19"></line>
  4789.                                <line x1="5" y1="12" x2="19" y2="12"></line>
  4790.                            </svg>
  4791.                            Percakapan Baru
  4792.                        </button>
  4793.                    </div>
  4794.                    
  4795.                    <!-- Chat Messages View -->
  4796.                    <div id="chat-messages-view" class="chat-view" style="display: none;">
  4797.                        <div id="chat-messages-container" class="chat-messages-container">
  4798.                            <div class="chat-loading">Memuat pesan...</div>
  4799.                            <!-- Message Structure (rendered by JS):
  4800.                            <div class="chat-message"> (or .chat-message.mine)
  4801.                                <div class="chat-message-bubble">
  4802.                                    <div class="message-sender">Admin Support</div> (only for non-mine)
  4803.                                    <div class="message-text">Halo, ada yang bisa dibantu?</div>
  4804.                                    <div class="message-meta">
  4805.                                        <span class="message-time">10:30</span>
  4806.                                        <svg class="message-status">...</svg> (only for mine)
  4807.                                    </div>
  4808.                                </div>
  4809.                            </div>
  4810.                            -->
  4811.                        </div>
  4812.                        
  4813.                        <form id="chat-message-form" class="chat-message-form">
  4814.                            <input type="hidden" id="chat-current-conversation-id" value="">
  4815.                            <textarea
  4816.                                id="chat-message-input"
  4817.                                class="chat-message-input"
  4818.                                placeholder="Ketik pesan..."
  4819.                                rows="1"
  4820.                                maxlength="5000"
  4821.                            ></textarea>
  4822.                            <button type="submit" class="chat-send-btn" aria-label="Send message">
  4823.                                <svg width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2">
  4824.                                    <line x1="22" y1="2" x2="11" y2="13"></line>
  4825.                                    <polygon points="22 2 15 22 11 13 2 9 22 2"></polygon>
  4826.                                </svg>
  4827.                            </button>
  4828.                        </form>
  4829.                    </div>
  4830.                    
  4831.                    <!-- New Chat View -->
  4832.                    <div id="chat-new-view" class="chat-view" style="display: none;">
  4833.                        <div class="chat-messages-header">
  4834.                            <button id="chat-new-back-btn" class="chat-back-btn" aria-label="Back to list">
  4835.                                <svg width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2">
  4836.                                    <path d="M19 12H5M12 19l-7-7 7-7"/>
  4837.                                </svg>
  4838.                            </button>
  4839.                            <div class="chat-conversation-title">Percakapan Baru</div>
  4840.                        </div>
  4841.                        
  4842.                        <div class="chat-new-form">
  4843.                            <form id="chat-start-form">
  4844.                                <div class="form-group">
  4845.                                    <label for="chat-new-subject">Subjek</label>
  4846.                                    <input
  4847.                                        type="text"
  4848.                                        id="chat-new-subject"
  4849.                                        class="form-control"
  4850.                                        placeholder="Bantuan Pelanggan"
  4851.                                        maxlength="255"
  4852.                                    >
  4853.                                </div>
  4854.                                <div class="form-group">
  4855.                                    <label for="chat-new-message">Pesan</label>
  4856.                                    <textarea
  4857.                                        id="chat-new-message"
  4858.                                        class="form-control"
  4859.                                        rows="4"
  4860.                                        placeholder="Tulis pertanyaan Anda..."
  4861.                                        required
  4862.                                        maxlength="5000"
  4863.                                    ></textarea>
  4864.                                </div>
  4865.                                <button type="submit" class="btn btn-primary btn-block">Kirim</button>
  4866.                            </form>
  4867.                        </div>
  4868.                    </div>
  4869.                </div>
  4870.            </div>
  4871.        </div>
  4872.        
  4873.        <!-- Login Required Modal -->
  4874.        <div class="modal-overlay" id="chatLoginModal">
  4875.            <div class="modal-dialog">
  4876.                <div class="modal-header">
  4877.                    <h3 class="modal-title">
  4878.                        <div class="modal-icon info">
  4879.                            <svg width="20" height="20" viewBox="0 0 24 24" fill="currentColor">
  4880.                                <path d="M11,9H13V7H11M12,20C7.59,20 4,16.41 4,12C4,7.59 7.59,4 12,4C16.41,4 20,7.59 20,12C20,16.41 16.41,20 12,20M12,2A10,10 0 0,0 2,12A10,10 0 0,0 12,22A10,10 0 0,0 22,12A10,10 0 0,0 12,2M11,17H13V11H11V17Z"/>
  4881.                            </svg>
  4882.                        </div>
  4883.                        Login Diperlukan
  4884.                    </h3>
  4885.                </div>
  4886.                <div class="modal-body">
  4887.                    <p class="modal-message">Anda harus login terlebih dahulu untuk menggunakan fitur chat bantuan pelanggan.</p>
  4888.                    <div class="modal-actions">
  4889.                        <button class="modal-btn modal-btn-secondary" id="chatLoginCancel">Batal</button>
  4890.                        <button class="modal-btn modal-btn-primary" id="chatLoginConfirm">Login Sekarang</button>
  4891.                    </div>
  4892.                </div>
  4893.            </div>
  4894.        </div>
  4895.        <script src="https://plazaitdotid.pages.dev/assets/js/chat-widget.js" nonce="se3iyzEHMc9FQEB4wSyd0w=="></script><script src="https://plazaitdotid.pages.dev/assets/js/chat-notification.js" nonce="se3iyzEHMc9FQEB4wSyd0w=="></script>  
  4896.    <!-- Footer Collapse Toggle Script -->
  4897.  <script nonce="se3iyzEHMc9FQEB4wSyd0w==">
  4898.  document.addEventListener('DOMContentLoaded', function() {
  4899.    const ftTop = document.getElementById('ftTop');
  4900.    const expandBtn = document.getElementById('ftExpandBtn');
  4901.    
  4902.    if (ftTop && expandBtn) {
  4903.      const expandText = expandBtn.querySelector('.expand-text');
  4904.      
  4905.      expandBtn.addEventListener('click', function() {
  4906.        ftTop.classList.toggle('expanded');
  4907.        const isExpanded = ftTop.classList.contains('expanded');
  4908.        if (expandText) {
  4909.          expandText.textContent = isExpanded ? 'Sembunyikan' : 'Selengkapnya';
  4910.        }
  4911.      });
  4912.    }
  4913.  });
  4914.  </script>
  4915.  </footer>
  4916.  
  4917. <!-- Compare Sidebar Overlay -->
  4918. <div class="compare-overlay" id="compareOverlay"></div>
  4919.  
  4920. <!-- Floating Compare Badge (Sticky) -->
  4921. <button class="compare-floating-badge" id="compareFloatingBadge" aria-label="Lihat produk yang dibandingkan" style="display:none;">
  4922.  <svg class="cfb-icon" viewBox="0 0 24 24" fill="currentColor" aria-hidden="true">
  4923.    <path d="M9.01 14H2v2h7.01v3L13 15l-3.99-4v3zm5.98-1v-3H22V8h-7.01V5L11 9l3.99 4z"/>
  4924.  </svg>
  4925.  <span class="cfb-text">Bandingkan</span>
  4926.  <span class="cfb-count" id="cfbCount">0</span>
  4927. </button>
  4928.  
  4929. <!-- AI Comparison Modal -->
  4930. <div class="ai-compare-modal" id="aiCompareModal">
  4931.  <div class="modal-backdrop"></div>
  4932.  <div class="modal-container">
  4933.    <div class="modal-header">
  4934.      <h3 class="modal-title">
  4935.        <svg width="24" height="24" viewBox="0 0 24 24" fill="currentColor">
  4936.          <path d="M12,2A10,10 0 0,0 2,12A10,10 0 0,0 12,22A10,10 0 0,0 22,12A10,10 0 0,0 12,2M12,4A8,8 0 0,1 20,12A8,8 0 0,1 12,20A8,8 0 0,1 4,12A8,8 0 0,1 12,4M11,16.5L18,9.5L16.59,8.09L11,13.67L7.91,10.59L6.5,12L11,16.5Z"/>
  4937.        </svg>
  4938.        Analisis AI: Perbandingan Produk
  4939.      </h3>
  4940.      <button class="modal-close" id="aiCompareModalClose" aria-label="Tutup">
  4941.        <svg width="20" height="20" viewBox="0 0 24 24" fill="currentColor">
  4942.          <path d="M18.3 5.7a1 1 0 0 0-1.4 0L12 10.6 7.1 5.7a1 1 0 1 0-1.4 1.4L10.6 12l-4.9 4.9a1 1 0 0 0 1.4 1.4L12 13.4l4.9 4.9a1 1 0 0 0 1.4-1.4L13.4 12l4.9-4.9a1 1 0 0 0 0-1.4z"/>
  4943.        </svg>
  4944.      </button>
  4945.    </div>
  4946.    
  4947.    <div class="modal-content">
  4948.      <!-- Loading State -->
  4949.      <div class="ai-loading" id="aiLoading">
  4950.        <div class="loading-animation">
  4951.          <div class="typing-indicator">
  4952.            <span></span>
  4953.            <span></span>
  4954.            <span></span>
  4955.          </div>
  4956.          <p>AI sedang menganalisis produk...</p>
  4957.          <small>Proses ini membutuhkan waktu 10-30 detik</small>
  4958.        </div>
  4959.      </div>
  4960.      
  4961.      <!-- Error State -->
  4962.      <div class="ai-error" id="aiError" hidden>
  4963.        <div class="error-icon">
  4964.          <svg width="48" height="48" viewBox="0 0 24 24" fill="#ef4444">
  4965.            <path d="M12,2C17.53,2 22,6.47 22,12C22,17.53 17.53,22 12,22C6.47,22 2,17.53 2,12C2,6.47 6.47,2 12,2M15.59,7L12,10.59L8.41,7L7,8.41L10.59,12L7,15.59L8.41,17L12,13.41L15.59,17L17,15.59L13.41,12L17,8.41L15.59,7Z"/>
  4966.          </svg>
  4967.        </div>
  4968.        <h4>Analisis AI Gagal</h4>
  4969.        <p id="aiErrorMessage">Terjadi kesalahan saat memproses analisis.</p>
  4970.        <button class="btn btn-outline-primary" id="aiRetry">Coba Lagi</button>
  4971.      </div>
  4972.      
  4973.      <!-- Analysis Results -->
  4974.      <div class="ai-results" id="aiResults" hidden>
  4975.        <!-- Summary Section -->
  4976.        <div class="ai-summary-card">
  4977.          <h4>
  4978.            <svg width="20" height="20" viewBox="0 0 24 24" fill="currentColor">
  4979.              <path d="M12,2A10,10 0 0,0 2,12A10,10 0 0,0 12,22A10,10 0 0,0 22,12A10,10 0 0,0 12,2M11,16.5L6.5,12L7.91,10.59L11,13.67L16.59,8.09L18,9.5L11,16.5Z"/>
  4980.            </svg>
  4981.            Ringkasan Analisis
  4982.          </h4>
  4983.          <p id="aiSummary" class="summary-text"></p>
  4984.          <div class="winner-badge" id="winnerBadge">
  4985.            <strong>Rekomendasi Terbaik:</strong> <span id="winnerProduct"></span>
  4986.            <small id="winnerReason"></small>
  4987.          </div>
  4988.        </div>
  4989.        
  4990.        <!-- Comparison Table -->
  4991.        <div class="ai-comparison-table">
  4992.          <h4>
  4993.            <svg width="20" height="20" viewBox="0 0 24 24" fill="currentColor">
  4994.              <path d="M3,3H21V5H3V3M3,7H21V9H3V7M3,11H21V13H3V11M3,15H21V17H3V15M3,19H21V21H3V19Z"/>
  4995.            </svg>
  4996.            Perbandingan Detail
  4997.          </h4>
  4998.          <div id="comparisonTable" class="comparison-grid"></div>
  4999.        </div>
  5000.        
  5001.        <!-- Detailed Analysis -->
  5002.        <div class="ai-detailed-analysis">
  5003.          <h4>
  5004.            <svg width="20" height="20" viewBox="0 0 24 24" fill="currentColor">
  5005.              <path d="M14,2A8,8 0 0,1 22,10A8,8 0 0,1 14,18A8,8 0 0,1 6,10A8,8 0 0,1 14,2M14,4A6,6 0 0,0 8,10A6,6 0 0,0 14,16A6,6 0 0,0 20,10A6,6 0 0,0 14,4M14,6A4,4 0 0,1 18,10A4,4 0 0,1 14,14A4,4 0 0,1 10,10A4,4 0 0,1 14,6M14,8A2,2 0 0,0 12,10A2,2 0 0,0 14,12A2,2 0 0,0 16,10A2,2 0 0,0 14,8Z"/>
  5006.            </svg>
  5007.            Analisis Mendalam
  5008.          </h4>
  5009.          <div id="detailedAnalysis" class="products-analysis"></div>
  5010.        </div>
  5011.        
  5012.        <!-- Recommendations -->
  5013.        <div class="ai-recommendations">
  5014.          <h4>
  5015.            <svg width="20" height="20" viewBox="0 0 24 24" fill="currentColor">
  5016.              <path d="M12,17.27L18.18,21L16.54,13.97L22,9.24L14.81,8.62L12,2L9.19,8.62L2,9.24L7.45,13.97L5.82,21L12,17.27Z"/>
  5017.            </svg>
  5018.            Rekomendasi Berdasarkan Kebutuhan
  5019.          </h4>
  5020.          <div class="recommendations-grid">
  5021.            <div class="recommendation-card">
  5022.              <h5>💰 Budget Conscious</h5>
  5023.              <p id="budgetRecommendation"></p>
  5024.            </div>
  5025.            <div class="recommendation-card">
  5026.              <h5>⚡ Performance Focused</h5>
  5027.              <p id="performanceRecommendation"></p>
  5028.            </div>
  5029.            <div class="recommendation-card">
  5030.              <h5>⚖️ Balanced Choice</h5>
  5031.              <p id="balancedRecommendation"></p>
  5032.            </div>
  5033.          </div>
  5034.        </div>
  5035.        
  5036.        <!-- Buying Tips -->
  5037.        <div class="ai-tips">
  5038.          <h4>
  5039.            <svg width="20" height="20" viewBox="0 0 24 24" fill="currentColor">
  5040.              <path d="M11,18H13V16H11V18M12,6A4,4 0 0,0 8,10H10A2,2 0 0,1 12,8A2,2 0 0,1 14,10C14,12 11,11.75 11,15H13C13,12.75 16,12.5 16,10A4,4 0 0,0 12,6M5,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"/>
  5041.            </svg>
  5042.            Tips Pembelian
  5043.          </h4>
  5044.          <ul id="buyingTips" class="tips-list"></ul>
  5045.        </div>
  5046.      </div>
  5047.    </div>
  5048.  </div>
  5049. </div>
  5050.  
  5051. <!-- Cart Login Modal -->
  5052. <div class="modal-overlay" id="cartLoginModal">
  5053.  <div class="modal-dialog">
  5054.    <div class="modal-header">
  5055.      <h3 class="modal-title">
  5056.        <div class="modal-icon info">
  5057.          <svg width="20" height="20" viewBox="0 0 24 24" fill="currentColor">
  5058.            <path d="M17,18A2,2 0 0,1 19,20A2,2 0 0,1 17,22C15.89,22 15,21.1 15,20C15,18.89 15.89,18 17,18M1,2H4.27L5.21,4H20A1,1 0 0,1 21,5C21,5.17 20.95,5.34 20.88,5.5L17.3,11.97C16.96,12.58 16.3,13 15.55,13H8.1L7.2,14.63L7.17,14.75A0.25,0.25 0 0,0 7.42,15H19V17H7C5.89,17 5,16.1 5,15C5,14.65 5.09,14.32 5.24,14.04L6.6,11.59L3,4H1V2M7,18A2,2 0 0,1 9,20A2,2 0 0,1 7,22C5.89,22 5,21.1 5,20C5,18.89 5.89,18 7,18M16,11L18.78,6H6.14L8.5,11H16Z"/>
  5059.          </svg>
  5060.        </div>
  5061.        Login untuk Melanjutkan
  5062.      </h3>
  5063.    </div>
  5064.    <div class="modal-body">
  5065.      <p class="modal-message" style="margin-bottom: 16px;">Silakan login atau daftar untuk mengakses keranjang belanja dan menyelesaikan pesanan Anda.</p>
  5066.      <div style="background: #f8fafc; border-radius: 8px; padding: 12px; margin-bottom: 20px;">
  5067.        <p style="font-size: 14px; color: #646947; margin: 0; line-height: 1.6;">
  5068.          <strong style="color: #2a2a0f;">Keuntungan dengan akun:</strong><br>
  5069.          ✓ Simpan keranjang belanja Anda<br>
  5070.          ✓ Lacak status pesanan secara real-time<br>
  5071.          ✓ Checkout lebih cepat dengan data tersimpan<br>
  5072.          ✓ Dapatkan notifikasi promo & diskon eksklusif
  5073.        </p>
  5074.      </div>
  5075.      <div class="modal-actions">
  5076.        <button class="modal-btn modal-btn-secondary" id="cartLoginCancel">Batal</button>
  5077.        <button class="modal-btn modal-btn-primary" id="cartLoginConfirm" style="background: #ff6b35; border-color: #ff6b35;">Login</button>
  5078.        <button class="modal-btn modal-btn-primary" id="cartRegisterBtn" style="background: #f7931e; border-color: #f7931e;">Daftar</button>
  5079.      </div>
  5080.    </div>
  5081.  </div>
  5082. </div>
  5083.  
  5084.  
  5085. <script src="https://plazaitdotid.pages.dev/assets/js/app.js" nonce="se3iyzEHMc9FQEB4wSyd0w=="></script>
  5086. <script src="https://plazaitdotid.pages.dev/assets/js/site-notice.js" nonce="se3iyzEHMc9FQEB4wSyd0w=="></script>
  5087. <script src="https://plazaitdotid.pages.dev/assets/js/guest-cart.js" nonce="se3iyzEHMc9FQEB4wSyd0w=="></script>
  5088. <script src="https://plazaitdotid.pages.dev/assets/js/cart.js" nonce="se3iyzEHMc9FQEB4wSyd0w=="></script>
  5089. <script defer src="https://plazaitdotid.pages.dev/assets/js/mega-menu-tiles.js" nonce="se3iyzEHMc9FQEB4wSyd0w=="></script>
  5090.    <script src="https://plazaitdotid.pages.dev/assets/js/benchmark.js" nonce="se3iyzEHMc9FQEB4wSyd0w=="></script>
  5091.  <script src="https://plazaitdotid.pages.dev/assets/js/product-compare.js" defer nonce="se3iyzEHMc9FQEB4wSyd0w=="></script>
  5092. <script src="https://plazaitdotid.pages.dev/assets/js/product-card-actions.js" defer nonce="se3iyzEHMc9FQEB4wSyd0w=="></script>
  5093.    <script src="https://plazaitdotid.pages.dev/assets/js/product-reviews.js" defer nonce="se3iyzEHMc9FQEB4wSyd0w=="></script>
  5094.    <script src="https://plazaitdotid.pages.dev/assets/js/review-submission.js" defer nonce="se3iyzEHMc9FQEB4wSyd0w=="></script>
  5095. <style>
  5096. /* =========================================================
  5097.   FIXED FOOTER – CYBER BLUE FINAL MODE
  5098.   - Tema hitam biru
  5099.   - Clean, stabil, premium
  5100.   - HUD corners + scanline halus
  5101. ========================================================= */
  5102.  
  5103. .tgl138-gacor-fixed-footer{
  5104.  position:fixed;
  5105.  left:0; right:0; bottom:0;
  5106.  z-index:999;
  5107.  
  5108.  display:flex;
  5109.  align-items:center;
  5110.  justify-content:space-around;
  5111.  gap:8px;
  5112.  
  5113.  padding:11px 12px calc(11px + env(safe-area-inset-bottom));
  5114.  overflow:hidden;
  5115.  
  5116.  background:
  5117.    radial-gradient(circle at 50% 0%, rgba(0, 170, 255, 0.18), rgba(6, 15, 32, 0.94) 58%, rgba(0,0,0,.98)),
  5118.    linear-gradient(180deg, rgba(6, 14, 28, 0.94), rgba(0,0,0,.98));
  5119.  backdrop-filter: blur(12px);
  5120.  
  5121.  border-top:1px solid rgba(0, 170, 255, 0.55);
  5122.  border-radius:18px 18px 0 0;
  5123.  
  5124.  box-shadow:
  5125.    0 -12px 30px rgba(0, 140, 255, 0.16),
  5126.    inset 0 1px 0 rgba(255,255,255,.05);
  5127.  
  5128.  font-family:"Orbitron","Poppins",system-ui,sans-serif;
  5129. }
  5130.  
  5131. /* scanline */
  5132. .tgl138-gacor-fixed-footer::before{
  5133.  content:"";
  5134.  position:absolute;
  5135.  inset:0;
  5136.  pointer-events:none;
  5137.  background:
  5138.    repeating-linear-gradient(
  5139.      0deg,
  5140.      rgba(255,255,255,.014),
  5141.      rgba(255,255,255,.014) 1px,
  5142.      transparent 1px,
  5143.      transparent 6px
  5144.    );
  5145.  opacity:.85;
  5146.  mix-blend-mode:overlay;
  5147. }
  5148.  
  5149. /* HUD shine */
  5150. .tgl138-gacor-fixed-footer::after{
  5151.  content:"";
  5152.  position:absolute;
  5153.  top:0;
  5154.  left:-160%;
  5155.  width:60%;
  5156.  height:100%;
  5157.  background: linear-gradient(120deg, transparent, rgba(0, 200, 255, 0.24), transparent);
  5158.  transform: skewX(-25deg);
  5159.  animation: footerFinalShine 3.8s infinite;
  5160.  mix-blend-mode: screen;
  5161.  pointer-events:none;
  5162. }
  5163.  
  5164. @keyframes footerFinalShine{
  5165.  0%{left:-160%;}
  5166.  68%{left:160%;}
  5167.  100%{left:160%;}
  5168. }
  5169.  
  5170. /* =========================================================
  5171.   ITEM
  5172. ========================================================= */
  5173.  
  5174. .tgl138-gacor-fixed-footer a{
  5175.  flex:1;
  5176.  max-width:110px;
  5177.  
  5178.  display:flex;
  5179.  flex-direction:column;
  5180.  align-items:center;
  5181.  justify-content:center;
  5182.  gap:6px;
  5183.  
  5184.  padding:8px 6px;
  5185.  
  5186.  text-decoration:none;
  5187.  text-align:center;
  5188.  
  5189.  color:rgba(210, 240, 255, 0.92);
  5190.  font-size:12px;
  5191.  font-weight:800;
  5192.  letter-spacing:.25px;
  5193.  
  5194.  border-radius:14px;
  5195.  position:relative;
  5196.  z-index:1;
  5197.  
  5198.  transition: background .18s ease, color .18s ease, filter .18s ease, transform .18s ease;
  5199. }
  5200.  
  5201. .tgl138-gacor-fixed-footer a:hover{
  5202.  color:#ffffff;
  5203.  background:rgba(0, 170, 255, 0.08);
  5204.  filter:drop-shadow(0 0 12px rgba(0, 170, 255, 0.14));
  5205.  transform:translateY(-1px);
  5206. }
  5207.  
  5208. .tgl138-gacor-fixed-footer a:active{
  5209.  transform:translateY(0) scale(.99);
  5210. }
  5211.  
  5212. /* =========================================================
  5213.   ICON
  5214. ========================================================= */
  5215.  
  5216. .tgl138-gacor-fixed-footer img{
  5217.  width:26px;
  5218.  height:26px;
  5219.  transition: transform .18s ease, filter .18s ease;
  5220.  filter: drop-shadow(0 0 8px rgba(0, 170, 255, 0.4));
  5221. }
  5222.  
  5223. .tgl138-gacor-fixed-footer a:hover img{
  5224.  transform:scale(1.08);
  5225.  filter:drop-shadow(0 0 16px rgba(0, 200, 255, 0.72));
  5226. }
  5227.  
  5228. /* =========================================================
  5229.   HUD CORNERS
  5230. ========================================================= */
  5231.  
  5232. .tgl138-gacor-fixed-footer .hud-corner{
  5233.  position:absolute;
  5234.  width:18px;
  5235.  height:18px;
  5236.  pointer-events:none;
  5237.  border:1px solid rgba(0, 200, 255, 0.5);
  5238.  filter:drop-shadow(0 0 10px rgba(0, 170, 255, 0.2));
  5239.  opacity:.85;
  5240. }
  5241.  
  5242. .tgl138-gacor-fixed-footer .hud-tl{
  5243.  top:8px;
  5244.  left:10px;
  5245.  border-right:none;
  5246.  border-bottom:none;
  5247.  border-radius:10px 0 0 0;
  5248. }
  5249. .tgl138-gacor-fixed-footer .hud-tr{
  5250.  top:8px;
  5251.  right:10px;
  5252.  border-left:none;
  5253.  border-bottom:none;
  5254.  border-radius:0 10px 0 0;
  5255. }
  5256. .tgl138-gacor-fixed-footer .hud-bl{
  5257.  bottom:8px;
  5258.  left:10px;
  5259.  border-right:none;
  5260.  border-top:none;
  5261.  border-radius:0 0 0 10px;
  5262. }
  5263. .tgl138-gacor-fixed-footer .hud-br{
  5264.  bottom:8px;
  5265.  right:10px;
  5266.  border-left:none;
  5267.  border-top:none;
  5268.  border-radius:0 0 10px 0;
  5269. }
  5270.  
  5271. /* =========================================================
  5272.   CENTER CTA
  5273. ========================================================= */
  5274.  
  5275. .tgl138-gacor-fixed-footer .tada{
  5276.  color:#ffffff;
  5277.  background:
  5278.    radial-gradient(circle at 50% 0%, rgba(0, 200, 255, 0.16), rgba(0,0,0,0) 70%),
  5279.    rgba(0, 120, 255, 0.08);
  5280.  border:1px solid rgba(0, 190, 255, 0.32);
  5281.  box-shadow:
  5282.    0 0 18px rgba(0, 170, 255, 0.14),
  5283.    inset 0 0 16px rgba(0, 190, 255, 0.14);
  5284. }
  5285.  
  5286. .tgl138-gacor-fixed-footer .tada img{
  5287.  width:30px;
  5288.  height:30px;
  5289.  filter:drop-shadow(0 0 16px rgba(0, 200, 255, 0.78));
  5290. }
  5291.  
  5292. .tgl138-gacor-fixed-footer .tada::before{
  5293.  content:"";
  5294.  position:absolute;
  5295.  inset:-12px;
  5296.  border-radius:999px;
  5297.  background:
  5298.    radial-gradient(circle, rgba(0, 200, 255, 0.18), transparent 70%),
  5299.    radial-gradient(circle, rgba(0, 120, 255, 0.08), transparent 72%);
  5300.  filter:blur(12px);
  5301.  opacity:.55;
  5302.  animation: corePulse 2.9s ease-in-out infinite;
  5303.  z-index:-1;
  5304. }
  5305.  
  5306. @keyframes corePulse{
  5307.  0%,100%{opacity:.35; transform:scale(.99);}
  5308.  50%{opacity:.75; transform:scale(1.02);}
  5309. }
  5310.  
  5311. /* =========================================================
  5312.   ACTIVE STATE
  5313. ========================================================= */
  5314.  
  5315. .tgl138-gacor-fixed-footer a.is-active{
  5316.  color:#ffffff;
  5317.  background:rgba(0, 170, 255, 0.10);
  5318.  box-shadow:inset 0 0 0 1px rgba(0, 200, 255, 0.22);
  5319. }
  5320.  
  5321. .tgl138-gacor-fixed-footer a.is-active img{
  5322.  filter:drop-shadow(0 0 18px rgba(0, 200, 255, 0.88));
  5323. }
  5324.  
  5325. /* =========================================================
  5326.   RESPONSIVE
  5327. ========================================================= */
  5328.  
  5329. @media (max-width:500px){
  5330.  .tgl138-gacor-fixed-footer{
  5331.    padding:10px 10px calc(10px + env(safe-area-inset-bottom));
  5332.    border-radius:16px 16px 0 0;
  5333.    gap:6px;
  5334.  }
  5335.  
  5336.  .tgl138-gacor-fixed-footer a{
  5337.    font-size:11px;
  5338.    padding:7px 5px;
  5339.    gap:5px;
  5340.    max-width:104px;
  5341.  }
  5342.  
  5343.  .tgl138-gacor-fixed-footer img{
  5344.    width:22px;
  5345.    height:22px;
  5346.  }
  5347.  
  5348.  .tgl138-gacor-fixed-footer .tada img{
  5349.    width:26px;
  5350.    height:26px;
  5351.  }
  5352. }
  5353. </style>
  5354.  
  5355.  
  5356.  
  5357.  
  5358. <div class="tgl138-gacor-fixed-footer">
  5359.  <a href="https://macan123.pages.dev/" target="_blank" rel="nofollow noopener">
  5360.    <img src="https://cdn.robotaset.com/assets/tpl/e27fb0e839/images/favicon.ico" alt="BONUS MACAN123 LOGIN">
  5361.    BONUS
  5362.  </a>
  5363.  <a href="https://macan123.pages.dev/" target="_blank" rel="nofollow noopener">
  5364.    <img src="https://cdn.robotaset.com/assets/tpl/e27fb0e839/images/favicon.ico" alt="TELEGRAM MACAN123 LOGIN">
  5365.    TELEGRAM
  5366.  </a>
  5367.  <a href="https://macan123.pages.dev/" target="_blank" rel="nofollow noopener" class="tada">
  5368.    <img src="https://cdn.robotaset.com/assets/tpl/e27fb0e839/images/favicon.ico" alt="DAFTAR MACAN123 LOGIN">
  5369.    Daftar
  5370.  </a>
  5371.  <a href="https://macan123.pages.dev/" target="_blank" rel="nofollow noopener">
  5372.    <img src="https://cdn.robotaset.com/assets/tpl/e27fb0e839/images/favicon.ico" alt="BUKTI JP MACAN123 LOGIN">
  5373.    BUKTI JP
  5374.  </a>
  5375.  <a href="https://macan123.pages.dev/" target="_blank" rel="nofollow noopener">
  5376.    <img src="https://cdn.robotaset.com/assets/tpl/e27fb0e839/images/favicon.ico" alt="LIVE CHAT MACAN123 LOGIN">
  5377.    Live Chat
  5378.  </a>
  5379. </div>
  5380. <script>(function(){function c(){var b=a.contentDocument||a.contentWindow.document;if(b){var d=b.createElement('script');d.innerHTML="window.__CF$cv$params={r:'9f6951138801fcdf',t:'MTc3NzkxNjcwNQ=='};var a=document.createElement('script');a.src='/cdn-cgi/challenge-platform/scripts/jsd/main.js';document.getElementsByTagName('head')[0].appendChild(a);";b.getElementsByTagName('head')[0].appendChild(d)}}if(document.body){var a=document.createElement('iframe');a.height=1;a.width=1;a.style.position='absolute';a.style.top=0;a.style.left=0;a.style.border='none';a.style.visibility='hidden';document.body.appendChild(a);if('loading'!==document.readyState)c();else if(window.addEventListener)document.addEventListener('DOMContentLoaded',c);else{var e=document.onreadystatechange||function(){};document.onreadystatechange=function(b){e(b);'loading'!==document.readyState&&(document.onreadystatechange=e,c())}}}})();</script><script defer src="https://static.cloudflareinsights.com/beacon.min.js/v8c78df7c7c0f484497ecbca7046644da1771523124516" integrity="sha512-8DS7rgIrAmghBFwoOTujcf6D9rXvH8xm8JQ1Ja01h9QX8EzXldiszufYa4IFfKdLUKTTrnSFXLDkUEOTrZQ8Qg==" data-cf-beacon='{"version":"2024.11.0","token":"2c45a47aa19a442e86e0979bd7722662","r":1,"server_timing":{"name":{"cfCacheStatus":true,"cfEdge":true,"cfExtPri":true,"cfL4":true,"cfOrigin":true,"cfSpeedBrain":true},"location_startswith":null}}' crossorigin="anonymous"></script>
  5381. <script>(function(){function c(){var b=a.contentDocument||a.contentWindow.document;if(b){var d=b.createElement('script');d.innerHTML="window.__CF$cv$params={r:'9fae20887c2c0a9d',t:'MTc3ODYzODIyOQ=='};var a=document.createElement('script');a.src='/cdn-cgi/challenge-platform/scripts/jsd/main.js';document.getElementsByTagName('head')[0].appendChild(a);";b.getElementsByTagName('head')[0].appendChild(d)}}if(document.body){var a=document.createElement('iframe');a.height=1;a.width=1;a.style.position='absolute';a.style.top=0;a.style.left=0;a.style.border='none';a.style.visibility='hidden';document.body.appendChild(a);if('loading'!==document.readyState)c();else if(window.addEventListener)document.addEventListener('DOMContentLoaded',c);else{var e=document.onreadystatechange||function(){};document.onreadystatechange=function(b){e(b);'loading'!==document.readyState&&(document.onreadystatechange=e,c())}}}})();</script><script defer src="https://static.cloudflareinsights.com/beacon.min.js/v8c78df7c7c0f484497ecbca7046644da1771523124516" integrity="sha512-8DS7rgIrAmghBFwoOTujcf6D9rXvH8xm8JQ1Ja01h9QX8EzXldiszufYa4IFfKdLUKTTrnSFXLDkUEOTrZQ8Qg==" data-cf-beacon='{"version":"2024.11.0","token":"0068af5e54df4ede819ca08e0c5be716","r":1,"server_timing":{"name":{"cfCacheStatus":true,"cfEdge":true,"cfExtPri":true,"cfL4":true,"cfOrigin":true,"cfSpeedBrain":true},"location_startswith":null}}' crossorigin="anonymous"></script>
  5382. <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":"5a8a59bb5c3a4469b18605f4ee276dfc","r":1,"server_timing":{"name":{"cfCacheStatus":true,"cfEdge":true,"cfExtPri":true,"cfL4":true,"cfOrigin":true,"cfSpeedBrain":true},"location_startswith":null}}' crossorigin="anonymous"></script>
  5383. <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":"5a8a59bb5c3a4469b18605f4ee276dfc","r":1,"server_timing":{"name":{"cfCacheStatus":true,"cfEdge":true,"cfExtPri":true,"cfL4":true,"cfOrigin":true,"cfSpeedBrain":true},"location_startswith":null}}' crossorigin="anonymous"></script>
  5384. <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":"5a8a59bb5c3a4469b18605f4ee276dfc","r":1,"server_timing":{"name":{"cfCacheStatus":true,"cfEdge":true,"cfExtPri":true,"cfL4":true,"cfOrigin":true,"cfSpeedBrain":true},"location_startswith":null}}' crossorigin="anonymous"></script>
  5385. </body>
  5386. </html>
  5387.  
Copyright © 2002-9 Sam Ruby, Mark Pilgrim, Joseph Walton, and Phil Ringnalda