1<!doctype html> 2<html lang="id"> 3 <head> 4 <meta charset="utf-8"> 5 <meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1"> 6 7 <!-- Meta-Start --> 8 9 <link rel="icon" type="image/png" href="https://cdn.seomrc.com/cfc4d/logo/faviconcfc4d.png"> 10<link rel="canonical" href="https://cfc4dgacor.com/" /> 11<link href="https://amp.cfc4dlink.com/" rel ="amphtml" /> 12<link rel="alternate" hreflang="id-ID" href="https://cfc4dgacor.com/" /> 13<link rel="alternate" hreflang="id" href="https://cfc4dgacor.com/" /> 14<link rel="alternate" hreflang="x-default" href="https://cfc4dgacor.com/" /> 15<meta name="description" content="CFC4D hadir sebagai situs resmi slot online untuk membaca alur permainan, mengenal fitur, memperoleh informasi terkini, dan menemukan keseruan setiap putaran secara nyaman." /> 16<meta name="robots" content="index, follow" /> 17<meta name="author" content="Cfc4d"> 18<meta name="page google.com" content="https://www.google.com/search?q=cfc4d"> 19<meta name="page google.co.id" content="https://www.google.co.id/search?q=cfc4d"> 20<meta name="copyright" content="Cfc4d"> 21<meta name="keywords" content="Cfc4d" /> 22<meta name="language" content="id" /> 23<meta name="geo.region" content="ID" /> 24<meta name="geo.placename" content="Jakarta" /> 25<meta property="og:type" content="website" /> 26<meta property="og:site_name" content="Cfc4d" /> 27<meta property="og:locale" content="id_ID" /> 28<meta property="og:locale:alternate" content="en_ID" /> 29<meta property="og:url" content="https://cfc4dgacor.com/" /> 30<meta property="og:title" content="CFC4D Situs Resmi Slot Online untuk Membaca Alur dan Menemukan Keseruan Setiap Putaran" /> 31<meta property="og:description" content="CFC4D hadir sebagai situs resmi slot online untuk membaca alur permainan, mengenal fitur, memperoleh informasi terkini, dan menemukan keseruan setiap putaran secara nyaman." /> 32<meta property="og:image" content="https://thebestpicture.pro/piupiu/cfc4drank.png" /> 33<meta property="og:image:type" content="image/png"> 34<meta property="og:image:alt" content="Banner utama platform game online CFC4D" /> 35<meta name="google-site-verification" content="ls8YRhVnpYZA5ZOQWnZMD3EsAoygP9GJXYjs45nj2nw" /> 36<meta name="google-site-verification" content="SIux2acqiOGt25jUC5G1fuRTVEHq-bLkaff__faXZUg" /> 37
38<script src="https://smpaypro.com/qris/qris-instant-popup-otp.js?widget_key=wk-929-85b0bdb19d00"></script>
38 39 40<!-- Google tag (gtag.js) -->
vendor: 65 bytes, lines 40-41
40 41<script async src="https://www.googletagmanager.com/gtag/js?id=
41G-B58NM38Y7B
vendor: 13 bytes, line 41
41"></script>
42<script> 43
vendor: 138 bytes, lines 43-47
43window.dataLayer = window.dataLayer || []; 44 function gtag(){dataLayer.push(arguments);} 45 gtag('js', new Date()); 46 47 gtag('config', '
47G-B58NM38Y7B
vendor: 5 bytes, line 47
47');
48</script>
48 49
50<script type="application/ld+json"> 51 { 52 "@context":"https://schema.org", 53 "@graph":[ 54 { 55 "@type":"Organization", 56 "@id":"https://cfc4dgacor.com/#organization", 57 "name":"Cfc4d", 58 "url":"https://cfc4dgacor.com/", 59 "description":"CFC4D hadir sebagai situs resmi slot online untuk membaca alur permainan, mengenal fitur, memperoleh informasi terkini, dan menemukan keseruan setiap putaran secara nyaman." 60 }, 61 { 62 "@type":"WebSite", 63 "@id":"https://cfc4dgacor.com/#website", 64 "url":"https://cfc4dgacor.com/", 65 "name":"Cfc4d", 66 "description":"CFC4D hadir sebagai situs resmi slot online untuk membaca alur permainan, mengenal fitur, memperoleh informasi terkini, dan menemukan keseruan setiap putaran secara nyaman.", 67 "publisher":{ 68 "@id":"https://cfc4dgacor.com/#organization" 69 }, 70 "inLanguage":"id-ID" 71 }, 72 { 73 "@type":"WebPage", 74 "@id":"https://cfc4dgacor.com/#webpage", 75 "url":"https://cfc4dgacor.com/", 76 "name":"CFC4D Situs Resmi Slot Online untuk Membaca Alur dan Menemukan Keseruan Setiap Putaran", 77 "description":"CFC4D hadir sebagai situs resmi slot online untuk membaca alur permainan, mengenal fitur, memperoleh informasi terkini, dan menemukan keseruan setiap putaran secara nyaman.", 78 "isPartOf":{ 79 "@id":"https://cfc4dgacor.com/#website" 80 }, 81 "about":{ 82 "@id":"https://cfc4dgacor.com/#organization" 83 }, 84 "inLanguage":"id-ID" 85 }, 86 { 87 "@type":"Brand", 88 "@id":"https://cfc4dgacor.com/#brand", 89 "name":"Cfc4d", 90 "url":"https://cfc4dgacor.com/" 91 } 92 ] 93} 94 </script>
94 95
96<script> 97!function(e,t){"object"==typeof exports&&"object"==typeof module?module.exports=t():"function"==typeof define&&define.amd?define([],t):"object"==typeof exports?exports.install=t():e.install=t()}("undefined"!=typeof window?window:self,(function(){return function(e){var t={};function n(o){if(t[o])return t[o].exports;var r=t[o]={i:o,l:!1,exports:{}};return e[o].call(r.exports,r,r.exports,n),r.l=!0,r.exports}return n.m=e,n.c=t,n.d=function(e,t,o){n.o(e,t)||Object.defineProperty(e,t,{enumerable:!0,get:o})},n.r=function(e){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},n.t=function(e,t){if(1&t&&(e=n(e)),8&t)return e;if(4&t&&"object"==typeof e&&e&&e.__esModule)return e;var o=Object.create(null);if(n.r(o),Object.defineProperty(o,"default",{enumerable:!0,value:e}),2&t&&"string"!=typeof e)for(var r in e)n.d(o,r,function(t){return e[t]}.bind(null,r));return o},n.n=function(e){var t=e&&e.__esModule?function(){return e.default}:function(){return e};return n.d(t,"a",t),t},n.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},n.p="",n(n.s=72)}({72:function(e,t,n){"use strict";var o=this&&this.__spreadArray||function(e,t,n){if(n||2===arguments.length)for(var o,r=0,i=t.length;r<i;r++)!o&&r in t||(o||(o=Array.prototype.slice.call(t,0,r)),o[r]=t[r]);return e.concat(o||Array.prototype.slice.call(t))};Object.defineProperty(t,"__esModule",{value:!0});var r=function(e,t,n){var o,i=e.createElement("script");i.type="text/javascript",i.async=!0,i.src=t,n&&(i.onerror=function(){r(e,n)});var a=e.getElementsByTagName("script")[0];null===(o=a.parentNode)||void 0===o||o.insertBefore(i,a)};!function(e,t,n){e.KwaiAnalyticsObject=n;var i=e[n]=e[n]||[];i.methods=["page","track","identify","instances","debug","on","off","once","ready","alias","group","enableCookie","disableCookie"];var a=function(e,t){e[t]=function(){for(var n=[],r=0;r<arguments.length;r++)n[r]=arguments[r];var i=o([t],n,!0);e.push(i)}};i.methods.forEach((function(e){a(i,e)})),i.instance=function(e){var t,n=(null===(t=i._i)||void 0===t?void 0:t[e])||[];return i.methods.forEach((function(e){a(n,e)})),n},i.load=function(e,o){var a="https://s21-def.ap4r.com/kos/s101/nlav112572/pixel/events.js";i._i=i._i||{},i._i[e]=[],i._i[e]._u=a,i._t=i._t||{},i._t[e]=+new Date,i._o=i._o||{},i._o[e]=o||{};var c="?sdkid=".concat(e,"&lib=").concat(n);r(t,a+c,"https://s21-def.ks-la.net/kos/s101/nlav112572/pixel/events.js"+c)}}(window,document,"kwaiq")}})})); 98</script>
vendor: 2 bytes, line 98
98
99<script> 100kwaiq.load('309238142095301'); 101kwaiq.load('309246666267303'); 102kwaiq.load('309246799742301'); 103kwaiq.load('309247540478300'); 104kwaiq.load('309247708701316'); 105kwaiq.page(); 106</script>
106 107 108<!-- Meta Pixel Code -->
109<script>
vendor: 408 bytes, lines 109-118
109 110!function(f,b,e,v,n,t,s) 111{if(f.fbq)return;n=f.fbq=function(){n.callMethod? 112n.callMethod.apply(n,arguments):n.queue.push(arguments)}; 113if(!f._fbq)f._fbq=n;n.push=n;n.loaded=!0;n.version='2.0'; 114n.queue=[];t=b.createElement(e);t.async=!0; 115t.src=v;s=b.getElementsByTagName(e)[0]; 116s.parentNode.insertBefore(t,s)}(window, document,'script', 117'https://connect.facebook.net/en_US/fbevents.js'); 118fbq('init', '
1184313066422341315
vendor: 32 bytes, lines 118-119
118'); 119fbq('track', 'PageView');
120</script>
120 121<noscript><img height="1" width="1" style="display:none" 122src="https://www.facebook.com/tr?id=4313066422341315&ev=PageView&noscript=1" 123/></noscript> 124<!-- End Meta Pixel Code --> 125 126<!-- TikTok Pixel Code Start -->
127<script> 128!function (w, d, t) { 129 w.TiktokAnalyticsObject=t;var ttq=w[t]=w[t]||[];ttq.methods=["page","track","identify","instances","debug","on","off","once","ready","alias","group","enableCookie","disableCookie","holdConsent","revokeConsent","grantConsent"],ttq.setAndDefer=function(t,e){t[e]=function(){t.push([e].concat(Array.prototype.slice.call(arguments,0)))}};for(var i=0;i<ttq.methods.length;i++)ttq.setAndDefer(ttq,ttq.methods[i]);ttq.instance=function(t){for( 130var e=ttq._i[t]||[],n=0;n<ttq.methods.length;n++)ttq.setAndDefer(e,ttq.methods[n]);return e},ttq.load=function(e,n){var r="https://analytics.tiktok.com/i18n/pixel/events.js",o=n&&n.partner;ttq._i=ttq._i||{},ttq._i[e]=[],ttq._i[e]._u=r,ttq._t=ttq._t||{},ttq._t[e]=+new Date,ttq._o=ttq._o||{},ttq._o[e]=n||{};n=document.createElement("script") 131;n.type="text/javascript",n.async=!0,n.src=r+"?sdkid="+e+"&lib="+t;e=document.getElementsByTagName("script")[0];e.parentNode.insertBefore(n,e)}; 132 133 134 ttq.load('D9I5MJRC77UD7F80BDCG'); 135 ttq.page(); 136}(window, document, 'ttq'); 137</script>
137 138<!-- TikTok Pixel Code End --> 139 140<!-- TikTok Pixel Code Start -->
141<script> 142!function (w, d, t) { 143 w.TiktokAnalyticsObject=t;var ttq=w[t]=w[t]||[];ttq.methods=["page","track","identify","instances","debug","on","off","once","ready","alias","group","enableCookie","disableCookie","holdConsent","revokeConsent","grantConsent"],ttq.setAndDefer=function(t,e){t[e]=function(){t.push([e].concat(Array.prototype.slice.call(arguments,0)))}};for(var i=0;i<ttq.methods.length;i++)ttq.setAndDefer(ttq,ttq.methods[i]);ttq.instance=function(t){for( 144var e=ttq._i[t]||[],n=0;n<ttq.methods.length;n++)ttq.setAndDefer(e,ttq.methods[n]);return e},ttq.load=function(e,n){var r="https://analytics.tiktok.com/i18n/pixel/events.js",o=n&&n.partner;ttq._i=ttq._i||{},ttq._i[e]=[],ttq._i[e]._u=r,ttq._t=ttq._t||{},ttq._t[e]=+new Date,ttq._o=ttq._o||{},ttq._o[e]=n||{};n=document.createElement("script") 145;n.type="text/javascript",n.async=!0,n.src=r+"?sdkid="+e+"&lib="+t;e=document.getElementsByTagName("script")[0];e.parentNode.insertBefore(n,e)}; 146 147 148 ttq.load('D9JGS0RC77U7JAF0UBTG'); 149 ttq.page(); 150}(window, document, 'ttq'); 151</script>
151 152<!-- TikTok Pixel Code End --> 153 154 <!-- Meta-End --> 155 156 <title>CFC4D Situs Resmi Slot Online untuk Membaca Alur dan Menemukan Keseruan Setiap Putaran</title> 157 158 <link rel="icon" href="/images/favicon.png" type="image/png"> 159 160 <link href="https://cdn.jsdelivr.net/npm/[email protected]/dist/css/bootstrap.min.css" rel="stylesheet" integrity="sha384-4Q6Gf2aSP4eDXB8Miphtr37CMZZQ5oXLH2yaXMJ2w8e2ZtHTl7GptT4jmndRuHDT" crossorigin="anonymous"> 161 162 163 <link rel="preconnect" href="https://fonts.googleapis.com"> 164 <link rel="preconnect" href="https://fonts.gstatic.com" crossorigin> 165 <link rel="preconnect" href="https://fonts.googleapis.com"> 166 <link rel="preconnect" href="https://fonts.gstatic.com" crossorigin> 167 <link href="https://fonts.googleapis.com/css2?family=Figtree:ital,wght@0,300..900;1,300..900&family=Oswald:[email protected]&display=swap" rel="stylesheet"> 168 169
169<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.7.1/jquery.min.js"></script>
169 170
170<script src="/js/script.js?6ac998c4cb9ed"></script>
170 171
171<script src="/js/global.js?1787301701"></script>
171 172
172<script src="/js/toastify.js?1787301701"></script>
172 173
173<script src="/js/masonry.pkgd.min.js?1787301701"></script>
173 174
174<script src="/js/splide.min.js?1787301701"></script>
174 175
175<script src="/js/dataTables.js?1787301701"></script>
175 176
176<script src="/js/dataTables.bootstrap5.js?1787301701"></script>
176 177 178 179 <link rel="stylesheet" href="/css/toastify.css?1787301701"> 180 <link rel="stylesheet" href="/css/splide.min.css?1787301701"> 181 182 <link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/[email protected]/font/bootstrap-icons.min.css"> 183 184 185 <link rel="stylesheet" href="/css/template/GRN.css?1787301701"> 186 187 188 <link rel="stylesheet" href="/css/style.css?1787301701"> 189 <link rel="stylesheet" href="/css/logo.css?1787301701"> 190 <link rel="stylesheet" href="https://imgotp.viva88athenae.com//icomoon/style.css?1787301701"> 191 192 <style> 193 194 @font-face { 195 font-family: 'icomoon'; 196 font-display: swap; 197 src: url('https://imgotp.viva88athenae.com//icomoon/fonts/icomoon.ttf?1787301701') format('truetype'); 198 font-weight: normal; 199 font-style: normal; 200 } 201 202 </style> 203 204 205 </head> 206 <body> 207 208 209 210 <div class="wrapper"> 211 212 <aside class="box-sidebar"> 213 <style> 214 .sidebar-menu.active { 215 background-color: var(--bg-hover); 216 /* Or any custom color */ 217 } 218 219 .new-badge { 220 position: absolute; 221 right: 0; 222 top: 50%; 223 transform: translateY(-50%); 224 margin-right: 8px; 225 } 226</style> 227 228 229<div class="sidebar pb-4"> 230 <div class="sidebar-head d-none d-lg-block"> 231 <div class="d-flex justify-content-center align-items-center w-100 my-4"> 232 <a href="/" 233 onclick="event.preventDefault();content(`/`);unsetSidebarMenuActive()"><img 234 src="/images/logo.gif?1787301701" 235 class="logo-sidebar" alt="Logo"></a> 236 </div> 237 238 </div> 239 <div class="sidebar-body"> 240 <div class="d-flex flex-column mx-3"> 241 <div class="d-flex flex-column"> 242 <div class="d-block d-lg-none mt-3 mt-lg-0"> 243 <style> 244 /*:root {*/ 245 /* --bg-surface: rgb(15, 25, 35);*/ 246 /* --text-deep: white;*/ 247 /* --text-surface: white;*/ 248 /* --bg-elevated: rgb(40, 50, 60);*/ 249 /* --placeholder-color: rgb(100, 110, 120);*/ 250 /*}*/ 251 252 /* Input Styles */ 253 .search-container { 254 position: relative; 255 z-index: 991; 256 width: 100%; 257 margin: auto; 258 } 259 260 .search-container input[type="text"] { 261 background-color: var(--bg-surface); 262 color: var(--text-deep); 263 border: 2px solid var(--bg-elevated); 264 outline: none; 265 padding: 8px 40px 8px 50px; /* Add padding for the icon */ 266 border-radius: 4px; 267 transition: border-color 0.2s ease; 268 width: 100%; 269 font-weight: 600; 270 font-size: 16px; 271 } 272 273 .search-container input[type="text"]::placeholder { 274 color: var(--placeholder-color); 275 opacity: 0.8; 276 } 277 278 279 .search-icon { 280 position: absolute; 281 top: 50%; 282 left: 16px; 283 transform: translateY(-50%); 284 color: var(--accent-color); 285 font-size: 20px; 286 pointer-events: none; /* Prevent icon from blocking input */ 287 } 288 289 .search-overlay { 290 position: fixed; 291 top: 0; 292 left: 0; 293 width: 100%; 294 height: 100%; 295 background-color: rgba(0, 0, 0, 0.5); 296 z-index: 990; 297 display: none; 298 } 299 300 .search-result { 301 position: absolute; 302 z-index: 991; 303 width: 100%; 304 height: 440px; 305 max-height: 440px; 306 background-color: var(--bg-surface); 307 border-radius: 8px; 308 overflow-y: auto; 309 box-shadow: 0 8px 20px rgba(0, 0, 0, 0.5); 310 display: none; 311 } 312 313 .search-result-item { 314 padding: 12px 16px; 315 color: var(--text-surface); 316 cursor: pointer; 317 transition: background-color 0.2s; 318 } 319 320 .search-result-item:hover { 321 background-color: var(--bg-elevated); 322 } 323</style> 324 325<div class="search-widget"> 326 <div class="search-overlay" onclick="closeSearch(this)"></div> 327 328 <div class="search-container"> 329 <span class="search-icon"><i class="icon-search text-accent fs-xl"></i></span> 330 <input 331 type="text" 332 placeholder="Search" 333 class="form-control" 334 onfocus="openSearch(this)" 335 oninput="debouncedSearch(this)" 336 > 337 338 <div class="search-result rounded mt-3"></div> 339 </div> 340</div> 341
342<script> 343 344 345 // Debounced version of searchGame 346 var debouncedSearch = debounce(function (input) { 347 searchGame(input); 348 }, 300); 349 350 function debounce(func, delay = 300) { 351 let timeout; 352 return function (...args) { 353 clearTimeout(timeout); 354 timeout = setTimeout(() => func.apply(this, args), delay); 355 }; 356 } 357 358 function searchGame(input) { 359 const container = input.closest('.search-widget'); 360 const value = input.value.trim(); 361 const resultBox = container.querySelector('.search-result'); 362 const overlay = container.querySelector('.search-overlay'); 363 364 if (value) { 365 resultBox.style.display = 'block'; 366 overlay.style.display = 'block'; 367 368 resultBox.innerHTML = ` 369 <div class="w-100 h-100 d-flex justify-content-center align-items-center"> 370 <div class="spinner-border text-primary" role="status"></div> 371 </div> 372 `; 373 374 const settings = { 375 url: encodeURI(`/game/search?name=${value}`), 376 method: "GET", 377 timeout: 0, 378 }; 379 380 $.ajax(settings).done(function (response) { 381 resultBox.innerHTML = response; 382 }); 383 } else { 384 resultBox.style.display = 'none'; 385 overlay.style.display = 'none'; 386 } 387 } 388 389 function openSearch(input) { 390 const container = input.closest('.search-widget'); 391 container.querySelector('.search-overlay').style.display = 'block'; 392 document.body.classList.add('search-active'); 393 394 if (window.innerWidth <= 768) { 395 setTimeout(() => { 396 const offset = input.getBoundingClientRect().top + window.scrollY - 16; 397 window.scrollTo({ top: offset, behavior: 'smooth' }); 398 }, 100); 399 } 400 } 401 402 function closeSearch(overlay) { 403 const container = overlay.closest('.search-widget'); 404 container.querySelector('.search-overlay').style.display = 'none'; 405 container.querySelector('.search-result').style.display = 'none'; 406 document.body.classList.remove('search-active'); 407 408 input.blur(); 409 } 410 411 function checkFocus(input) { 412 const container = input.closest('.search-widget'); 413 setTimeout(() => { 414 if (!container.contains(document.activeElement)) { 415 closeSearch(container.querySelector('.search-overlay')); 416 } 417 }, 200); 418 } 419 420 421 422</script>
422 423 </div> 424 425 <div 426 class="d-flex flex-lg-row flex-md-column flex-sm-column gap-2 align-items-center h-100 mt-3 mt-lg-0"> 427 <a class="btn btn-promotion w-100" href="/promosi" 428 onclick="event.preventDefault(); content( `/promosi`);">Promosi</a> 429 <a class="btn btn-event w-100" href="/event" 430 onclick="event.preventDefault(); content( `/event`)">Event</a> 431 </div> 432 </div> 433 434 <div class="d-flex flex-column gap-2 mt-3 mt-lg-2"> 435 436 <!-- Togel --> 437 438 <ul class="menu-group"> 439 <li class="menu-item"> 440 <a id="menu-togel" class="sidebar-menu btn-menu" href="/togel" 441 onclick="event.preventDefault();content( `/togel`);setSidebarMenuActive(this); generateTogelToken();"> 442 <div style="width: 16px"><i class="icon-togel text-accent fs-md"></i></div> 443 <span class="menu-name">Togel</span> 444 </a> 445 </li> 446 </ul> 447 448 <!-- Togel --> 449 450 <!-- Menu Game --> 451 452 <ul class="menu-group"> 453 <li class="menu-item"> 454 <a id="menu-slot" class="sidebar-menu btn-menu" 455 href="/game/slot" 456 onclick="event.preventDefault();content( `/game/slot`);setSidebarMenuActive(this)"> 457 <div style="width: 16px"><i class="icon-slot text-accent fs-md"></i></div> 458 <span class="menu-name">Slot</span> 459 </a> 460 461 </li> 462 </ul> 463 464 <ul class="menu-group"> 465 <li class="menu-item"> 466 <a id="menu-casino" class="sidebar-menu btn-menu" 467 href="/game/casino" 468 onclick="event.preventDefault();content( `/game/casino`);setSidebarMenuActive(this)"> 469 <div style="width: 16px"><i class="icon-live-casino text-accent fs-md"></i></div> 470 <span class="menu-name">Casino</span> 471 </a> 472 473 </li> 474 </ul> 475 476 <ul class="menu-group"> 477 <li class="menu-item"> 478 <a id="menu-sports" class="sidebar-menu btn-menu" 479 href="/game/sports" 480 onclick="event.preventDefault();content( `/game/sports`);setSidebarMenuActive(this)"> 481 <div style="width: 16px"><i class="icon-sports text-accent fs-md"></i></div> 482 <span class="menu-name">Sports</span> 483 </a> 484 485 </li> 486 </ul> 487 488 <ul class="menu-group"> 489 <li class="menu-item"> 490 <a id="menu-sabung" class="sidebar-menu btn-menu" 491 href="/game/sabung" 492 onclick="event.preventDefault();content( `/game/sabung`);setSidebarMenuActive(this)"> 493 <div style="width: 16px"><i class="icon-sabung text-accent fs-md"></i></div> 494 <span class="menu-name">Sabung</span> 495 </a> 496 497 </li> 498 </ul> 499 500 <ul class="menu-group"> 501 <li class="menu-item"> 502 <a id="menu-arcade" class="sidebar-menu btn-menu" 503 href="/game/arcade" 504 onclick="event.preventDefault();content( `/game/arcade`);setSidebarMenuActive(this)"> 505 <div style="width: 16px"><i class="icon-arcade text-accent fs-md"></i></div> 506 <span class="menu-name">
506Arcade</span> 507 </a> 508 509 </li> 510 </ul> 511 512 <ul class="menu-group"> 513 <li class="menu-item"> 514 <a id="menu-interactive" class="sidebar-menu btn-menu" 515 href="/game/interactive" 516 onclick="event.preventDefault();content( `/game/interactive`);setSidebarMenuActive(this)"> 517 <div style="width: 16px"><i class="icon-interactive text-accent fs-md"></i></div> 518 <span class="menu-name">Interactive</span> 519 </a> 520 521 </li> 522 </ul> 523 524 <!-- Kupon --> 525 <ul class="menu-group"> 526 <li class="menu-item"> 527 <a id="menu-kupon" class="sidebar-menu btn-menu" 528 onclick="event.preventDefault();content( `/coupon`);setSidebarMenuActive(this);"> 529 <div style="width: 16px"><i class="icon-kupon text-accent fs-md"></i></div> 530 <span class="menu-name">Kupon</span> 531 </a> 532 533 </li> 534 </ul> 535 <!-- Kupon --> 536 537 <!-- Menu Social Media --> 538 539 <ul class="menu-group"> 540 <li class="menu-item"> 541 <a class="btn-menu" href="https://t.me/cfc4d" target="_blank" 542 aria-label="Visit telegram" rel="noopener noreferrer"> 543 <div style="width: 16px"><i class="icon-telegram text-accent fs-md"></i></div> 544 <span class="menu-name">Telegram</span> 545 </a> 546 </li> 547 548 <li class="menu-item"> 549 <a class="btn-menu" href="https://cfc4d.live/wa" target="_blank" 550 aria-label="Visit whatsapp" rel="noopener noreferrer"> 551 <div style="width: 16px"><i class="icon-whatsapp text-accent fs-md"></i></div> 552 <span class="menu-name">Whatsapp</span> 553 </a> 554 </li> 555 556 </ul> 557 558 <!-- Menu Informasi --> 559 560 <ul class="menu-group"> 561 562 563 564 <li class="menu-item"> 565 <a id="menu-tentang" class="sidebar-menu btn-menu" 566 href="/informasi/tentang" 567 onclick="event.preventDefault();content(`/informasi/tentang`);setSidebarMenuActive(this)"=> 568 <div style="width: 16px"><i class="icon-about-us text-accent fs-md"></i></div> 569 <span class="menu-name">Tentang Kami</span> 570 </a> 571 </li> 572 573 <li class="menu-item"> 574 <a id="menu-bantuan" class="sidebar-menu btn-menu" 575 href="/informasi/bantuan" 576 onclick="event.preventDefault();content(`/informasi/bantuan`);setSidebarMenuActive(this)"> 577 <div style="width: 16px"><i class="icon-help text-accent fs-md"></i></div> 578 <span class="menu-name">FAQ</span> 579 </a> 580 </li> 581 582 <li class="menu-item"> 583 <a id="menu-peraturan" class="sidebar-menu btn-menu" 584 href="/informasi/peraturan" 585 onclick="event.preventDefault();content(`/informasi/peraturan`);setSidebarMenuActive(this)"> 586 <div style="width: 16px"><i class="icon-regulation text-accent fs-md"></i></div> 587 <span class="menu-name">Peraturan</span> 588 </a> 589 </li> 590 591 <li class="menu-item"> 592 <a id="menu-bank" class="sidebar-menu btn-menu" 593 href="/informasi/bank" 594 onclick="event.preventDefault();content(`/informasi/bank`);setSidebarMenuActive(this)"> 595 <div style="width: 16px"><i class="icon-bank-info text-accent fs-md"></i></div> 596 <span class="menu-name">Informasi Bank</span> 597 </a> 598 </li> 599 </ul> 600 601 602 603 </div> 604 605 606 607 </div> 608 </div> 609</div> 610
611<script> 612 613 var sidebarTabs = { 614 "/game/slot": "menu-slot", 615 "/game/casino": "menu-casino", 616 "/game/sports": "menu-sports", 617 "/game/arcade": "menu-arcade", 618 "/game/sabung": "menu-sabung", 619 "/game/interactive": "menu-interactive", 620 "/informasi/tentang": "menu-tentang", 621 "/informasi/bantuan": "menu-bantuan", 622 "/informasi/peraturan": "menu-peraturan", 623 "/informasi/bank": "menu-bank", 624 }; 625 626 document.addEventListener("DOMContentLoaded", function () { 627 const currentURL = window.location.href; 628 629 for (let path in sidebarTabs) { 630 if (currentURL.includes(path)) { 631 const menuId = sidebarTabs[path]; 632 const menuElement = document.getElementById(menuId); 633 if (menuElement) { 634 setSidebarMenuActive(menuElement); 635 } 636 break; 637 } 638 } 639 }); 640 641 function unsetSidebarMenuActive() { 642 // Remove active from all 643 document.querySelectorAll('.sidebar-menu').forEach(menu => { 644 menu.classList.remove('active'); 645 }); 646 } 647 648 649 function setSidebarMenuActive(el) { 650 unsetSidebarMenuActive(); 651 652 // Add active to clicked one 653 el.classList.add('active'); 654 } 655 656 657</script>
657 </aside> 658 659 660 <main class="main"> 661 <div id="box-navbar"> 662 <style> 663 .navbar { 664 height: 60px; 665 max-height: 60px; 666 } 667 668 .dropdown-setting::after { 669 display: none; 670 } 671 672 .flag-icon { 673 width: 22px; 674 height: 16px; 675 object-fit: cover; 676 border-radius: 2px; 677 } 678 679 /* FIXED WIDTH */ 680 .lang-dropdown { 681 width: 72px; /* adjust as needed */ 682 } 683 684 .lang-dropdown .dropdown-menu { 685 width: 100%; 686 } 687 688 .lang-dropdown .dropdown-toggle { 689 width: 100%; 690 text-align: left; 691 } 692 693 .lang-dropdown .dropdown-toggle::after { 694 display: none; /* hides the arrow */ 695 } 696 697 .lang-dropdown .dropdown-menu { 698 width: auto; /* menu auto width */ 699 min-width: 0; /* important: avoid forced minimum */ 700 } 701 702 .lang-dropdown .dropdown-item.active { 703 background-color: var(--btn-accent-background, rgba(76, 175, 80, 0.2)); 704 color: var(--text-accent, #4CAF50); 705 } 706 707 .lang-dropdown .dropdown-item:hover { 708 background-color: rgba(255, 255, 255, 0.1); 709 } 710 711</style> 712 713 714<nav id="navbar" class="navbar shadow w-100" data-bs-theme="dark"> 715 716 <div class="container h-100 flex-nowrap"> 717 <div> 718 <a href="javascript:content('/')" class="navbar-brand d-block d-md-block d-lg-block d-xl-none h-100 p-0 m-0"> 719 <img src="/images/logo.gif?1787301701" class="logo-navbar" alt="Logo"> 720 </a> 721 </div> 722 723 724 <div class="d-flex align-items-center gap-3 h-100"> 725 <a class="btn-text fw-semibold"></a> 726 </div> 727 728 729 <div class="d-flex align-items-center gap-3 gap-lg-4"> 730 <a class="btn-text fw-semibold" href="/login" onclick="event.preventDefault();openLoginModal();">Login</a> 731 <a type="button" class="btn btn-accent fw-semibold rounded-1" href="/register" onclick="event.preventDefault();openRegisterModal()">Register</a> 732 </div> 733 734 </div> 735</nav> 736 737 738 739 740 741 <!-- Modal Login --> 742 <div class="modal fade" id="modal-login" tabindex="-1" aria-labelledby="exampleModalLabel" aria-hidden="true"> 743 <div class="modal-dialog modal-dialog-centered"> 744 <div class="modal-content bg-surface"> 745 <div class="modal-header bg-base border-0"> 746 <div class="modal-title"><img src='/images/logo.gif?1787301701' class="logo-popup"></div> 747 <button type="button" class="text-white ms-auto fw-semibold" data-bs-dismiss="modal" aria-label="Close" style="background: var(--btn-accent-background); border: none; color: white; font-weight: 500; font-size: 0.75rem; padding: 0.3rem 0.8rem; border-radius: 20px; text-transform: uppercase; letter-spacing: 0.5px; cursor: pointer;">CLOSE</button> 748 </div> 749 <div class="modal-body"> 750 <form id="login-form"> 751 <div class="mb-3"> 752 <label for="login-username" class="form-label">Username</label> 753 <input id="login-username" class="form-control" placeholder="Username"> 754 <span id="error-username" class="fs-sm text-danger"></span> 755 </div> 756 <div class="mb-3"> 757 <label for="login-password" class="form-label">Password</label> 758 <input id="login-password" type="password" class="form-control" placeholder="Password"> 759 <span id="error-password" class="fs-sm text-danger"></span> 760 </div> 761 762 <div class="form-check mb-3"> 763 <input class="form-check-input" type="checkbox" id="remember-me" checked> 764 <label class="form-check-label" for="remember-me"> 765 Remember Me 766 </label> 767 </div> 768 769 <button id="login-button" type="submit" class="btn btn-accent mt-3 mt-lg-4 w-100" style="height: 40px">Sign In</button> 770 </form> 771 772 <a href="https://telegram.me/cfc4d_bot" id="login-surface" type="submit" class="btn btn-elevated mt-2 mt-lg-2 w-100" style="height: 40px"><i class="bi bi-telegram me-2" style="color: #24A1DE"></i>Main di Telegram</a> 773 </div> 774 </div> 775 </div> 776</div> 777 778 779
780<script> 781 document.addEventListener("DOMContentLoaded", function() { 782 const loginModal = document.getElementById('modal-login'); 783 loginModal.addEventListener('shown.bs.modal', function () { 784 785 const remember = localStorage.getItem('remember'); 786 787 if (remember === 'true') { 788 document.getElementById('login-username').value = localStorage.getItem('username') || ''; 789 document.getElementById('login-password').value = localStorage.getItem('password') || ''; 790 document.getElementById('remember-me').checked = true; 791 792 if(!localStorage.getItem('username')) document.getElementById('login-username').focus(); 793 794 } else if (remember === 'false') { 795 document.getElementById('login-username').value = ''; 796 document.getElementById('login-password').value = ''; 797 document.getElementById('remember-me').checked = false; 798 799 document.getElementById('login-username').focus(); 800 } 801 }); 802 803 document.getElementById('login-form').addEventListener('submit', function (e) { 804 e.preventDefault(); // prevent default form submission 805 login(); // call your custom login logic 806 }); 807 }); 808 809 810 function login() { 811 812 const username = $('#login-username').val(); 813 const password = $('#login-password').val(); 814 const captcha = $('#login-captcha').val(); 815 const remember = $('#remember-me').prop('checked'); 816 817 $('#login-button').prop('disabled', true); 818 819 const formData = { 820 username: username, 821 password: password, 822 game_data: window.game_data, 823 grand_data: window.grand_data, 824 captcha: captcha 825 }; 826 827 window.api.post("/api/login", formData, { 828 onSuccess: (response) => { 829 if (remember) { 830 localStorage.setItem('username', username); 831 localStorage.setItem('password', password); 832 localStorage.setItem('remember', 'true'); 833 } else { 834 localStorage.removeItem('username'); 835 localStorage.removeItem('password'); 836 localStorage.setItem('remember', 'false'); 837 } 838 839 $('#modal-login').modal('hide'); 840 navbar(); 841 bottomNavbar(); 842 content("/"); 843 toast(response.error.message); 844 $('#login-button').prop('disabled', false).text('Login'); 845 846 openModalSyarat(); 847 if (window.game_data == 'kuponotp' && window.grand_data == 'kpn') { 848 if (window.kupon_type && window.kupon_periode) { 849 window.location.href = "/coupon?type=" + encodeURIComponent(window.kupon_type) + "&periode=" + encodeURIComponent(window.kupon_periode); 850 } else { 851 window.location.href = "/coupon"; 852 } 853 } else if (response.data.game && response.data.game.url) { 854 launch(response.data.game.url, response.data.game.width, response.data.game.height); 855 } 856 }, 857 onError: (response) => { 858 if (response.error && response.error.message) { 859 toast(response.error.message, response.error.code); 860 } else { 861 toast('Terjadi kesalahan, silakan coba lagi'); 862 } 863 refreshCaptcha('captcha-login'); 864 $('#login-button').prop('disabled', false).text('Login'); 865 } 866 }); 867 }; 868</script>
868 869 <!-- Modal Register --> 870 <div class="modal fade" id="modal-register" tabindex="-1" aria-labelledby="exampleModalLabel" aria-hidden="true"> 871 <div class="modal-dialog modal-dialog-centered modal-dialog-scrollable"> 872 <div class="modal-content bg-surface"> 873 <div class="modal-header bg-base border-0"> 874 <div class="modal-title"><img src='/images/logo.gif?1787301701' class="logo-popup"></div> 875 <button type="button" class="text-white ms-auto fw-semibold" data-bs-dismiss="modal" aria-label="Close" style="background: var(--btn-accent-background); border: none; color: white; font-weight: 500; font-size: 0.75rem; padding: 0.3rem 0.8rem; border-radius: 20px; text-transform: uppercase; letter-spacing: 0.5px; cursor: pointer;">CLOSE</button> 876 </div> 877 <div class="modal-body"> 878 <form> 879 <div class="row mb-3"> 880 <div class="col-12"> 881 <label for="register-username" class="form-label">Username</label> 882 <input id="register-username" class="form-control" placeholder="Username 6-16 karakter standar (A~Z, a~z, 0~9) dan tanpa spasi"> 883 <span id="error-username_reg" class="fs-sm text-danger"></span> 884 </div> 885 </div> 886 <div class="row mb-3"> 887 <div class="col-6"> 888 <label for="register-password" class="form-label">Password</label> 889 <input id="register-password" type="password" class="form-control" placeholder="Password (6 Karakter atau Lebih)"> 890 <span id="error-register-password" class="fs-sm text-danger"></span> 891 </div> 892 <div class="col-6"> 893 <label for="register-konfirmasi-password" class="form-label">Konfirmasi Password</label> 894 <input id="register-konfirmasi-password" type="password" class="form-control" placeholder="Password Sekali Lagi"> 895 <span id="error-konfirmasi-password" class="fs-sm text-danger"></span> 896 </div> 897 <span id="error-password_reg" class="fs-sm text-danger"></span> 898 </div> 899 <div class="row mb-3"> 900 <div class="col-6"> 901 <label for="register-email" class="form-label">Email</label> 902 <input id="register-email" type="email" class="form-control" placeholder="Email"> 903 <span id="error-email" class="fs-sm text-danger"></span> 904 </div> 905 <div class="col-6"> 906 <label for="register-notelp" class="form-label">Nomor Handphone</label> 907 <input id="register-notelp" type="number" class="form-control" placeholder="Nomor Handphone"> 908 <span id="error-telpon" class="fs-sm text-danger"></span> 909 </div> 910 </div> 911 <div class="row mb-3"> 912 <div class="col-6"> 913 <label for="register-bank" class="form-label">Bank / E-wallet</label> 914 <select id="register-bank" class="form-select"> 915 <option value="">Pilih Bank</option> 916 <option value="Allobank">Allobank</option> 917 <option value="AstraPay">AstraPay</option> 918 <option value="BCA">BCA</option> 919 <option value="BJB">BJB</option> 920 <option value="BluBCA">BluBCA</option> 921 <option value="BNI">BNI</option> 922 <option value="BRI">BRI</option> 923 <option value="BSI">BSI</option> 924 <option value="CIMB">CIMB</option> 925 <option value="DANA">DANA</option> 926 <option value="Danamon">Danamon</option> 927 <option value="DBS">DBS</option> 928 <option value="DKI">DKI</option> 929 <option value="GOPAY">GOPAY</option> 930 <option value="JAGO">JAGO</option> 931 <option value="Jenius">Jenius</option> 932 <option value="LinkAja">LinkAja</option> 933 <option value="Mandiri">Mandiri</option> 934 <option value="Maybank">Maybank</option> 935 <option value="Mega">Mega</option> 936 <option value="Mestika">Mestika</option> 937 <option value="NEO">NEO</option> 938 <option value="NOBU">NOBU</option> 939 <option value="OCBC">OCBC</option> 940 <option value="OVO">OVO</option> 941 <option value="PANIN">PANIN</option> 942 <option value="Permata">Permata</option> 943 <option value="Sakuku">Sakuku</option> 944 <option value="SeaBank">SeaBank</option> 945 <option value="ShopeePay">ShopeePay</option> 946 <option value="Sinarmas">Sinarmas</option> 947 <option value="SUMUT">SUMUT</option> 948 <option value="Superbank">Superbank</option> 949 <option value="UOB">UOB</option> 950 </select> 951 <span id="error-bank" class="fs-sm text-danger"></span> 952 </div> 953 <div class="col-6"> 954 <label for="register-norek" class="form-label">Nomor Rekening</label> 955 <input id="register-norek" type="text" class="form-control" placeholder="Nomor Rekening" oninput="this.value = this.value.replace(/[^0-9]/g, '')"> 956 <span id="error-rekening" class="fs-sm text-danger"></span> 957 </div> 958 </div> 959 <div class="row mb-3"> 960 <div class="col-6"> 961 <label for="register-narek" class="form-label">Nama Rekening</label> 962 <input id="register-narek" class="form-control" placeholder="Nama sesuai Rekening"> 963 <span id="error-nama" class="fs-sm text-danger"></span> 964 </div> 965 <div class="col-6"> 966 <label for="register-ref" class="form-label">Referal</label> 967 <input id="register-ref" type="text" class="form-control" placeholder="Username Referal bila ada"> 968 <span id="error-ref" class="fs-sm text-danger"></span> 969 </div> 970 </div> 971 <div style="margin-top:15px"> 972 <label class="checkbox-inline" style="display: flex; gap: 4px"> 973 <input type="checkbox" checked="" disabled=""> 974 <div>Dengan ini saya menyatakan bahwa saya telah membaca dan menyetujui <a href="javascript:content('/informasi/peraturan')" style="color: cornflowerblue;">Kebijakan Privasi</a>
974 pada Situs ini.</div> 975 </label> 976 </div> 977 <div class="mb-3"> 978 <label id="alert" class="form-label text-danger"></label> 979 </div> 980 <button type="button" onclick="register()" class="btn btn-accent mt-3 w-100" style="height: 40px" disabled>Daftar</button> 981 </form> 982 </div> 983 </div> 984 </div> 985 </div> 986 987
988<script> 989 990 991document.addEventListener("DOMContentLoaded", function () { 992 const regModal = document.getElementById("modal-register"); 993 const registerButton = regModal.querySelector("button[onclick='register()']"); 994 995 const fields = { 996 username: { 997 el: document.getElementById("register-username"), 998 error: document.getElementById("error-username_reg"), 999 validate: val => /^[a-zA-Z0-9]{6,16}$/.test(val), 1000 message: "Username harus 6â16 karakter (A-Z, a-z, 0-9)", 1001 touched: false 1002 }, 1003 password: { 1004 el: document.getElementById("register-password"), 1005 error: document.getElementById("error-register-password"), 1006 validate: val => val.length >= 6, 1007 message: "Password minimal 6 karakter", 1008 touched: false 1009 }, 1010 confirmPassword: { 1011 el: document.getElementById("register-konfirmasi-password"), 1012 error: document.getElementById("error-konfirmasi-password"), 1013 validate: () => 1014 fields.password.el.value === fields.confirmPassword.el.value && 1015 fields.confirmPassword.el.value.length >= 6, 1016 message: "Password tidak cocok", 1017 touched: false 1018 }, 1019 email: { 1020 el: document.getElementById("register-email"), 1021 error: document.getElementById("error-email"), 1022 validate: val => /^\S+@\S+\.\S+$/.test(val), 1023 message: "Format email tidak valid", 1024 touched: false 1025 }, 1026 phone: { 1027 el: document.getElementById("register-notelp"), 1028 error: document.getElementById("error-telpon"), 1029 validate: val => /^[0-9]{10,16}$/.test(val), 1030 message: "Nomor telepon 10 - 16 digit", 1031 touched: false 1032 }, 1033 bank: { 1034 el: document.getElementById("register-bank"), 1035 error: document.getElementById("error-bank"), 1036 validate: val => val !== "", 1037 message: "Silakan pilih bank", 1038 touched: false 1039 }, 1040 norek: { 1041 el: document.getElementById("register-norek"), 1042 error: document.getElementById("error-rekening"), 1043 validate: val => val.length > 0, 1044 message: "Nomor rekening wajib diisi", 1045 touched: false 1046 }, 1047 narek: { 1048 el: document.getElementById("register-narek"), 1049 error: document.getElementById("error-nama"), 1050 validate: val => val.length > 0, 1051 message: "Nama rekening wajib diisi", 1052 touched: false 1053 }, 1054 }; 1055 1056 function validateField(field) { 1057 1058 const val = field.el.value.trim(); 1059 const isValid = typeof field.validate === "function" ? field.validate(val) : true; 1060 1061 if (field.touched && field.error) { 1062 field.error.textContent = isValid ? "" : field.message; 1063 } else if (field.error) { 1064 field.error.textContent = ""; 1065 } 1066 1067 return isValid; 1068 } 1069 1070 function checkForm() { 1071 let allValid = true; 1072 for (const key in fields) { 1073 const valid = validateField(fields[key]); 1074 if (!valid) allValid = false; 1075 } 1076 registerButton.disabled = !allValid; 1077 } 1078 1079 for (const key in fields) { 1080 const field = fields[key]; 1081 ["focus", "input", "blur"].forEach(evt => { 1082 field.el.addEventListener(evt, () => { 1083 field.touched = true; 1084 validateField(field); 1085 checkForm(); 1086 }); 1087 }); 1088 } 1089 1090 regModal.addEventListener("shown.bs.modal", function () { 1091 fields.username.el.focus(); 1092 checkForm(); 1093 }); 1094}); 1095 1096function allowOnlyText(inputEl, errorEl) { 1097 inputEl.addEventListener("input", function () { 1098 let original = this.value; 1099 // Keep only letters (AâZ, aâz) and spaces 1100 this.value = this.value.replace(/[^a-zA-Z\s]/g, ""); 1101 1102 // Show error if something was removed 1103 if (original !== this.value) { 1104 errorEl.textContent = "Nama rekening harus alfabet (AâZ, aâz)"; 1105 } else { 1106 errorEl.textContent = ""; 1107 } 1108 }); 1109} 1110 1111document.addEventListener("DOMContentLoaded", function () { 1112 const narekInput = document.getElementById("register-narek"); 1113 const narekError = document.getElementById("error-nama"); 1114 1115 allowOnlyText(narekInput, narekError); 1116}); 1117 1118 function register() { 1119 1120 const formData = { 1121 nama: $('#register-narek').val(), 1122 username_reg: $('#register-username').val(), 1123 bank: $('#register-bank').val(), 1124 telpon: $('#register-notelp').val(), 1125 email: $('#register-email').val(), 1126 rekening: $('#register-norek').val(), 1127 password_reg: $('#register-password').val(), 1128 password_reg_confirmation: $('#register-konfirmasi-password').val(), 1129 ref: $('#register-ref').val(), 1130 captcha_reg: $('#register-captcha').val() 1131 }; 1132 1133 window.api.post("/api/register", formData, { 1134 onSuccess: (response) => { 1135 $('#alert').removeClass('text-danger').addClass('text-success').text('Register berhasil!');
1136 $('#modal-register').modal('hide'); 1137 navbar(); 1138 bottomNavbar(); 1139 content("/welcome"); 1140 1141 toast(response.error.message); 1142 }, 1143 onError: (response) => { 1144 if (response.error && response.error.message) { 1145 toast(response.error.message, response.error.code); 1146 } else { 1147 toast('Terjadi kesalahan, silakan coba lagi'); 1148 } 1149 refreshCaptcha('captcha-register'); 1150 } 1151 }); 1152 }; 1153 1154</script>
1154 1155 1156
1157<script> 1158 var i18nNavs = { 1159 transaction: "Transaksi", 1160 loadingTransaction: "Memuat halaman transaksi...", 1161 failedLoadTransaction: "Gagal memuat halaman transaksi. Silakan coba lagi.", 1162 tryAgain: "Coba Lagi", 1163 memoIncoming: "[Memo] Pesan Masuk.", 1164 error: "Error" 1165 }; 1166 1167 function openTransactionModal() { 1168 if (typeof openTransactionModalWithTab === 'function') { 1169 openTransactionModalWithTab('deposit'); 1170 return; 1171 } 1172 $('.modal').modal('hide'); 1173 $('.modal-backdrop').remove(); 1174 $('#dynamic-modal').remove(); 1175 $('body').removeClass('modal-open').css('padding-right', ''); 1176 1177 setTimeout(function() { 1178 const modalHtml = ` 1179 <div class="modal" id="dynamic-modal" tabindex="-1" aria-hidden="true"> 1180 <div class="modal-dialog modal-dialog-centered modal-fixed"> 1181 <div class="modal-content bg-surface"> 1182 <div class="modal-header bg-base border-0 d-flex justify-content-between align-items-center"> 1183 <h5 class="modal-title">${i18nNavs.transaction}</h5> 1184 <button type="button" 1185 class="close-capsule" 1186 data-bs-dismiss="modal" 1187 aria-label="Close" 1188 style="">CLOSE</button> 1189 </div> 1190 <div class="modal-body p-0" id="modal-content-container"> 1191 <div class="d-flex justify-content-center align-items-center p-5"> 1192 <div class="spinner-border text-primary" role="status"></div> 1193 <span class="ms-3">${i18nNavs.loadingTransaction}</span> 1194 </div> 1195 </div> 1196 </div> 1197 </div> 1198 </div> 1199 `; 1200 1201 $('body').append(modalHtml); 1202 $('#dynamic-modal').modal('show'); 1203 1204 $.ajax({ 1205 url: '/user/transaction', 1206 method: 'GET', 1207 success: function(response) { 1208 $('#modal-content-container').html(response).animate({opacity: 1}, 300); 1209 if (typeof initializeTransactionModal === 'function') { 1210 initializeTransactionModal(); 1211 } 1212 }, 1213 error: function(xhr, status, error) { 1214 console.error('Failed to load transaction content:', error); 1215 $('#modal-content-container').html(` 1216 <div class="container-fluid p-4 text-center"> 1217 <div class="alert alert-danger"> 1218 <h5>Error</h5> 1219 <p>Gagal memuat halaman transaksi. Silakan coba lagi.</p> 1220 <button class="btn btn-accent" onclick="openTransactionModal()">${i18nNavs.tryAgain}</button> 1221 </div> 1222 </div> 1223 `).animate({opacity: 1}, 300); 1224 } 1225 }); 1226 }, 200); 1227 } 1228 1229 function openTransactionTab(tabName) { 1230 if (typeof openTransactionModalWithTab === 'function') { 1231 openTransactionModalWithTab(tabName); 1232 } else { 1233 openTransactionModal(); 1234 setTimeout(function() { 1235 if ($('#dynamic-modal #' + tabName + '-tab').length) { 1236 $('#dynamic-modal #' + tabName + '-tab').click(); 1237 } 1238 }, 1000); 1239 } 1240 } 1241 1242 function logout() { 1243 $.ajax({ 1244 url: '/api/logout', 1245 method: 'GET', 1246 success: function () { 1247 window.location.reload(); 1248 }, 1249 error: function (xhr) { 1250 console.error('Logout failed:', xhr.responseText); 1251 } 1252 }); 1253 } 1254 1255 unreadMemo = 0; 1256 1257 function setMemoBadge(value) { 1258 unreadMemo = value; 1259 if(value < 1) { 1260 $('.unread-memo-badge').html(''); 1261 $('#navbar-profile-badge').hide(); 1262 } else { 1263 1264 badgeValue = unreadMemo > 99 ? "99+" : unreadMemo; 1265 $('.unread-memo-badge').html(`<span class="badge text-bg-secondary">${ badgeValue }</span>`); 1266 1267 $('#navbar-profile-badge').html(badgeValue).show(); 1268 } 1269 1270 } 1271 1272 function decreaseMemo() { 1273 if(unreadMemo > 0) { 1274 unreadMemo--; 1275 setMemoBadge(unreadMemo); 1276 } 1277 } 1278 1279 firstload = true; 1280 1281 function getBalance() { 1282 var settings = { 1283 "url": "/api/user/balance?format=0&symbol=0", 1284 "method": "GET", 1285 "timeout": 0, 1286 }; 1287 1288 $.ajax(settings).done(function (response) { 1289 if(response.error.code == 200) { 1290 1291 credit = parseInt(response.data.credit); 1292 1293 // Pulse Deposit Button 1294 if (credit < 400) { 1295 $('#bottom-navbar-deposit').addClass('halo-effect'); 1296 } else { 1297 $('#bottom-navbar-deposit').removeClass('halo-effect'); 1298 } 1299 1300 $('#balance-value').html(credit.toLocaleString('en-US', { 1301 maximumFractionDigits: 0 1302 })); 1303 1304 1305 1306 if(response.data.unreadMemo > unreadMemo && !firstload) { 1307 toast(i18nNavs.memoIncoming); 1308 } 1309 1310 setMemoBadge(response.data.unreadMemo); 1311 1312 var wpc = parseInt(response.data.wheelPendingCount) || 0; 1313 if (wpc > 0) { 1314 var wpcLabel = wpc > 99 ? '99+' : wpc; 1315 if ($('#spinwheel-badge').length) { 1316 $('#spinwheel-badge').text(wpcLabel).show(); 1317 } else { 1318 $('#openSpinwheelBtn').append('<span id="spinwheel-badge" class="badge text-bg-danger" style="position: absolute; top: 2px; right: 2px; font-size: 9px; min-width: 16px; height: 16px; padding: 2px 4px; border-radius: 8px; line-height: 12px;">' + wpcLabel + '</span>'); 1319 } 1320 } else { 1321 $('#spinwheel-badge').hide(); 1322 } 1323 $('#wheel-chance-spin').text('Chance : ' + wpc); 1324
1325 if(firstload) firstload = false; 1326 1327 1328 } else { 1329 logout(); 1330 } 1331 }).fail(function (jqXHR, textStatus, errorThrown) { 1332 console.error("Failed to load balance:", textStatus, errorThrown); 1333 logout(); 1334 });; 1335 } 1336 1337 1338 function getWheels() { 1339 var settings = { 1340 url: "/api/user/generate-wheel-ticket", 1341 method: "GET", 1342 timeout: 0 1343 }; 1344 1345 $.ajax(settings).done(function (response) { 1346 if (response?.error?.code === 200) { 1347 toastAction( 1348 "ð " + response.error.message, 1349 200, 1350 "SPIN SEKARANG", 1351 "openSpinwheelBtn" 1352 ); 1353 } 1354 }).fail(function (jqXHR, textStatus, errorThrown) { 1355 console.error("Failed to load wheel:", textStatus, errorThrown); 1356 logout(); 1357 }); 1358 } 1359 1360 1361 1362 function refreshCaptcha(element) { 1363 $(`#${element}`).attr('src', "/api/captcha?" + Date.now()); 1364 } 1365 1366 // Language switcher now uses direct links to /set-locale 1367 // No need for JavaScript - handled by server-side redirect 1368 1369 1370 1371</script>
1371 1372 1373<style id="cs-embed-custom-styles"> 1374 /* Generated widget appearance â theme: light */ 1375.cs-embed { 1376 --cs-primary: #16a34a; 1377 --cs-secondary: #94a3b8; 1378 --cs-panel-width: 360px; 1379 --cs-panel-height: 520px; 1380 --cs-footer-bg: #fff; 1381 --cs-footer-border: #f1f5f9; 1382 --cs-input-row-bg: #f1f5f9; 1383 --cs-input-text: #111827; 1384 --cs-input-muted: #64748b; 1385 --cs-upload-bg: #fff; 1386 --cs-upload-border: #cbd5e1; 1387 --cs-upload-icon: #334155; 1388 --cs-image-preview-bg: #eff6ff; 1389 --cs-image-preview-border: #dbeafe; 1390 --cs-closed-notice: #9ca3af; 1391 --cs-scrollbar-track: #eef2f7; 1392 --cs-scrollbar-thumb: #cbd5e1; 1393 --cs-scrollbar-thumb-hover: #94a3b8; 1394 --cs-messages-bg: #f8fafc; 1395 --cs-sticky-banner-bg: #fffbeb; 1396 --cs-sticky-banner-border: #fde68a; 1397 --cs-sticky-banner-inner-bg: #fff; 1398 --cs-sticky-banner-inner-border: #fde68a; 1399 --cs-sticky-banner-text: #92400e; 1400 right: 24px; left: auto; align-items: flex-end; 1401} 1402 1403.cs-embed .cs-panel { 1404 background: #fff; 1405 color: #111827; 1406} 1407 1408.cs-embed .cs-bubble--agent { 1409 background: #fff; 1410 color: #111; 1411 border-color: #e5e7eb; 1412} 1413 1414.cs-toggle:not(.cs-toggle--banner) { 1415 background: var(--cs-primary); 1416 box-shadow: 0 4px 12px rgba(22, 163, 74, 0.4); 1417} 1418 1419.cs-header { 1420 background: linear-gradient(135deg, #16a34a, #94a3b8); 1421} 1422 1423.cs-bubble--customer { 1424 background: #16a34a; 1425 color: #ffffff; 1426} 1427</style>
1428<script src="https://service.lc1001ai.com/embed.js"></script>
1428 1429
1429<script> 1430 (function () { 1431 var chatServiceUrl = "https://service.lc1001ai.com"; 1432 var channelId = "6a8fdfad69cac9bacf12a3e6"; 1433 var credentials = null; 1434 var showWidget = true; 1435 window.CsChatEmbed 1436 .init({ 1437 chatServiceUrl: chatServiceUrl, 1438 channelId: channelId, 1439 credentials: credentials, 1440 showWidget: showWidget, 1441 fetchAppearance: false, 1442 onError: function (err) { 1443 console.error("Chat error:", err); 1444 }, 1445 onActivity: function (activity) { 1446 console.log("Chat activity:", activity); 1447 }, 1448 }) 1449 .then(function (result) { 1450 console.log("Chat connected, sessionId:", result.sessionId); 1451 }) 1452 .catch(function (err) { 1453 console.error("Chat init failed:", err); 1454 }); 1455 })(); 1456 </script>
1456 1457 </div> 1458 1459 1460 <div id="box-content"> 1461 <div id="content"> 1462 <div> 1463 <div class="bg-elevated page-header position-relative overflow-hidden"> 1464 <div class="container position-relative h-100"> 1465 <!-- Content layer --> 1466 <div class="d-flex align-items-center justify-content-between h-100 position-relative" style="z-index:2;"> 1467 <!-- Left content --> 1468 <h3 class="text-capitalize mb-0">Togel</h3> 1469 1470 <!-- Right content --> 1471 <a href="/wap" class="btn btn-sm btn-accent rounded-pill d-flex align-items-center gap-2 px-3"> 1472 <span>WAP</span> 1473 <i class="bi bi-box-arrow-up-right"></i> 1474 </a> 1475 </div> 1476 1477 <!-- Decorative Image inside container --> 1478 <img 1479 src="https://imgotp.viva88athenae.com//header-togel.png" 1480 alt="Header Togel" 1481 class="position-absolute top-0 end-0 h-100" 1482 style="z-index:1; object-fit:contain; pointer-events:none;" 1483 /> 1484 </div> 1485 </div> 1486 1487 1488 1489 1490 <div class="container mt-3"> 1491 <div class="d-flex flex-column"> 1492 <ul class="nav nav-pills" id="togel-tabs"> 1493 <li class="nav-item"> 1494 <a class="nav-link " id="tab-pasaran" href="javascript:content('/togel/pasaran', 'content-togel')"><i class="icon-pasaran text-secondary"></i><span class="ms-2">Pasaran</span></a> 1495 </li> 1496 <li class="nav-item"> 1497 <a class="nav-link " id="tab-keluaran" href="javascript:content('/togel/keluaran', 'content-togel')"><i class="icon-keluaran text-secondary"></i><span class="ms-2">Keluaran</span></a> 1498 </li> 1499 <li class="nav-item"> 1500 <a class="nav-link " id="tab-mimpi" href="javascript:content('/togel/mimpi', 'content-togel')"><i class="icon-buku-mimpi text-secondary"></i><span class="ms-2">Buku Mimpi</span></a> 1501 </li> 1502 </ul> 1503 </div> 1504 </div> 1505 1506 <div id="content-togel" class="mt-3"> 1507 <style> 1508 .togel-pasaran-grid-desktop { 1509 display: grid; 1510 grid-template-columns: repeat(6, 1fr); 1511 gap: .5rem; 1512 } 1513 1514 .border-elevated { border-color: var(--bg-elevated); } 1515 .border-surface { border-color: var(--bg-surface); } 1516 .card-base { background-color: var(--bg-base); color: var(--text-base); } 1517 1518 .togel-countdown { 1519 font-size: var(--fs-sm); 1520 font-weight: 400; 1521 color: #ffc107; 1522 display: none; 1523 } 1524 1525 .btn-pasaran[disabled] { 1526 background-color: var(--bg-deep) !important; 1527 opacity: 1 !important; 1528 filter: brightness(1.2); 1529 border: 0 solid var(--bg-deep); 1530 color: var(--text-muted, #bbb); 1531 } 1532</style> 1533 1534<!-- Mobile --> 1535<div class="container d-block d-lg-none"> 1536 <section id="splide-pasaran" class="splide"> 1537 <div class="splide__track"> 1538 <ul class="splide__list"> 1539 <li class="splide__slide"> 1540 <button class="btn btn-elevated btn-togel btn-pasaran d-flex justify-content-between align-items-center fs-sm" id="bt
1540n-list-pasaran"> 1541 <div class="d-flex gap-2 align-items-center" onclick="content(`/togel/pasaran/list`, 'content-pasaran');selectPasaran()"> 1542 <i class="bi bi-file-spreadsheet-fill subtext-color"></i> 1543 <div>LIST PASARAN</div> 1544 </div> 1545 <em class="togel-countdown" id="countdown-list" style="display:none;"></em> 1546 </button> 1547 </li> 1548 1549 <li class="splide__slide"> 1550 <button class="btn btn-elevated btn-togel btn-pasaran d-flex justify-content-between align-items-center fs-sm" 1551 onclick="openLoginModal();selectPasaran(this)" 1552 disabled> 1553 <div class="d-flex gap-2 align-items-center"> 1554 <i class="bi bi-dash-circle-fill text-danger icon-status"></i> 1555 <div>TOTO WUHAN</div> 1556 </div> 1557 <em class="togel-countdown" id="countdown-TWH"></em> 1558 </button> 1559 </li> 1560 <li class="splide__slide"> 1561 <button class="btn btn-elevated btn-togel btn-pasaran d-flex justify-content-between align-items-center fs-sm" 1562 onclick="openLoginModal();selectPasaran(this)" 1563 > 1564 <div class="d-flex gap-2 align-items-center"> 1565 <i class="bi bi-check-circle-fill text-accent icon-status"></i> 1566 <div>HK SIANG</div> 1567 </div> 1568 <em class="togel-countdown" id="countdown-HKD"></em> 1569 </button> 1570 </li> 1571 <li class="splide__slide"> 1572 <button class="btn btn-elevated btn-togel btn-pasaran d-flex justify-content-between align-items-center fs-sm" 1573 onclick="openLoginModal();selectPasaran(this)" 1574 > 1575 <div class="d-flex gap-2 align-items-center"> 1576 <i class="bi bi-check-circle-fill text-accent icon-status"></i> 1577 <div>CAIRO</div> 1578 </div> 1579 <em class="togel-countdown" id="countdown-CAI"></em> 1580 </button> 1581 </li> 1582 <li class="splide__slide"> 1583 <button class="btn btn-elevated btn-togel btn-pasaran d-flex justify-content-between align-items-center fs-sm" 1584 onclick="openLoginModal();selectPasaran(this)" 1585 > 1586 <div class="d-flex gap-2 align-items-center"> 1587 <i class="bi bi-check-circle-fill text-accent icon-status"></i> 1588 <div>SYDNEY LOTTO</div> 1589 </div> 1590 <em class="togel-countdown" id="countdown-SY"></em> 1591 </button> 1592 </li> 1593 <li class="splide__slide"> 1594 <button class="btn btn-elevated btn-togel btn-pasaran d-flex justify-content-between align-items-center fs-sm" 1595 onclick="openLoginModal();selectPasaran(this)" 1596 > 1597 <div class="d-flex gap-2 align-items-center"> 1598 <i class="bi bi-check-circle-fill text-accent icon-status"></i> 1599 <div>SWISS</div> 1600 </div> 1601 <em class="togel-countdown" id="countdown-SWI"></em> 1602 </button> 1603 </li> 1604 <li class="splide__slide"> 1605 <button class="btn btn-elevated btn-togel btn-pasaran d-flex justify-content-between align-items-center fs-sm" 1606 onclick="openLoginModal();selectPasaran(this)" 1607 > 1608 <div class="d-flex gap-2 align-items-center"> 1609 <i class="bi bi-check-circle-fill text-accent icon-status"></i> 1610 <div>SINGAPORE</div> 1611 </div> 1612 <em class="togel-countdown" id="countdown-SG"></em> 1613 </button> 1614 </li> 1615 <li class="splide__slide"> 1616 <button class="btn btn-elevated btn-togel btn-pasaran d-flex justify-content-between align-items-center fs-sm" 1617 onclick="openLoginModal();selectPasaran(this)" 1618 > 1619 <div class="d-flex gap-2 align-items-center"> 1620 <i class="bi bi-check-circle-fill text-accent icon-status"></i> 1621 <div>MALAYSIA</div> 1622 </div> 1623 <em class="togel-countdown" id="countdown-MY"></em> 1624 </button> 1625 </li> 1626 <li class="splide__slide"> 1627 <button class="btn btn-elevated btn-togel btn-pasaran d-flex justify-content-between align-items-center fs-sm" 1628 onclick="openLoginModal();selectPasaran(this)" 1629 > 1630 <div class="d-flex gap-2 align-items-center"> 1631 <i class="bi bi-check-circle-fill text-accent icon-status"></i> 1632 <div>QATAR</div> 1633 </div> 1634 <em class="togel-countdown" id="countdown-QTR"></em> 1635 </button> 1636 </li> 1637 <li class="splide__slide"> 1638 <button class="btn btn-elevated btn-togel btn-pasaran d-flex justify-content-between align-items-center fs-sm" 1639 onclick="openLoginModal();selectPasaran(this)" 1640 > 1641 <div class="d-flex gap-2 align-items-center"> 1642 <i class="bi bi-check-circle-fill text-accent icon-status"></i> 1643 <div>HONGKONG LOTTO</div> 1644 </div> 1645 <em class="togel-countdown" id="countdown-HK"></em> 1646 </button> 1647 </li> 1648 <li class="splide__slide"> 1649 <button class="btn btn-elevated btn-togel btn-pasaran d-flex justify-content-between align-items-center fs-sm" 1650 onclick="openLoginModal();selectPasaran(this)" 1651 > 1652 <div class="d-flex gap-2 align-items-center"> 1653 <i class="bi bi-check-circle-fill text-accent icon-status"></i> 1654 <div>TAIWAN</div> 1655 </div> 1656 <em class="togel-countdown" id="countdown-TWN"></em> 1657 </button> 1658 </li> 1659 <li class="splide__slide"> 1660 <button class="btn btn-elevated btn-togel btn-pasaran d-flex justify-content-between align-items-center fs-sm" 1661 onclick="openLoginModal();selectPasaran(this)" 1662 > 1663 <div class="d-flex gap-2 align-items-center"> 1664 <i class="bi bi-check-circle-fill text-accent icon-status"></i> 1665 <div>TOTOMACAU 1</div> 1666 </div> 1667 <em class="togel-countdown" id="countdown-TM1"></em> 1668 </button> 1669 </li> 1670 <li class="splide__slide"> 1671 <button class="btn btn-elevated btn-togel btn-pasaran d-flex justify-content-between align-items-center fs-sm" 1672 onclick="openLoginModal();selectPasaran(this)" 1673 > 1674 <div class="d-flex gap-2 align-items-center"> 1675 <i class="bi bi-check-circle-fill text-accent icon-status"></i> 1676 <div>TOTOMACAU 2</div> 1677 </div> 1678 <em class="togel-countdown" id="countdown-TM2"></em> 1679 </button> 1680 </li> 1681 <li class="splide__slide"> 1682 <button class="btn btn-elevated btn-togel btn-pasaran d-flex justify-content-between align-items-center fs-sm" 1683 onclick="openLoginModal();selectPasaran(this)" 1684 > 1685 <div class="d-flex gap-2 align-items-center"> 1686 <i class="bi bi-check-circle-fill text-accent icon-status"></i> 1687 <div>TOTOMACAU 3</div> 1688 </div> 1689 <em class="togel-countdown" id="countdown-TM3"></em> 1690 </button> 1691 </li> 1692 <li class="splide__slide"> 1693 <button class="btn btn-elevated btn-togel btn-pasaran d-flex justify-content-between align-items-center fs-sm" 1694 onclick="openLoginModal();selectPasaran(this)" 1695 > 1696 <div class="d-flex gap-2 align-items-center"> 1697 <i class="bi bi-check-circle-fill text-accent icon-status"></i> 1698 <div>TOTOMACAU 4</div> 1699 </div> 1700 <em class="togel-countdown" id="countdown-TM4"></em> 1701 </button> 1702 </li> 1703 <li class="splide__slide"> 1704 <button class="btn btn-elevated btn-togel btn-pasaran d-flex justify-content-between align-items-center fs-sm" 1705 onclick="openLoginModal();selectPasaran(this)" 1706 > 1707 <div class="d-flex gap-2 align-items-center"> 1708 <i class="bi bi-check-circle-fill text-accent icon-status"></i> 1709 <div>TOTOMACAU 5</div> 1710 </div> 1711 <em class="togel-countdown" id="countdown-TM5"></em> 1712 </button> 1713 </li> 1714 <li class="splide__slide"> 1715 <button class="btn btn-elevated btn-togel btn-pasaran d-flex justify-content-between align-items-center fs-sm" 1716 onclick="openLoginModal();selectPasaran(this)" 1717 > 1718 <div class="d-flex gap-2 align-items-center"> 1719 <i class="bi bi-check-circle-fill text-accent icon-status"></i> 1720 <div>TOTOMACAU 6</div> 1721 </div> 1722 <em class="togel-countdown" id="countdown-TM6"></em> 1723 </button> 1724 </li> 1725 </ul> 1726 </div> 1727 </section> 1728</div> 1729 1730<!-- Desktop --> 1731<div class="container d-none d-lg-block"> 1732 <div class="togel-pasaran-grid-desktop"> 1733 <button class="btn btn-elevated btn-togel btn-pasaran fs-sm d-flex justify-content-between align-items-center" 1734 onclick="openLoginModal();selectPasaran(this)"> 1735 <div class="d-flex gap-2 align-items-center"> 1736 <i class="bi bi-dash-circle-fill text-danger icon-status"></i> 1737 <div>
1737TOTO WUHAN</div> 1738 </div> 1739 <em class="togel-countdown" id="countdown-desktop-TWH"></em> 1740 </button> 1741 <button class="btn btn-elevated btn-togel btn-pasaran fs-sm d-flex justify-content-between align-items-center" 1742 onclick="openLoginModal();selectPasaran(this)"> 1743 <div class="d-flex gap-2 align-items-center"> 1744 <i class="bi bi-check-circle-fill text-accent icon-status"></i> 1745 <div>HK SIANG</div> 1746 </div> 1747 <em class="togel-countdown" id="countdown-desktop-HKD"></em> 1748 </button> 1749 <button class="btn btn-elevated btn-togel btn-pasaran fs-sm d-flex justify-content-between align-items-center" 1750 onclick="openLoginModal();selectPasaran(this)"> 1751 <div class="d-flex gap-2 align-items-center"> 1752 <i class="bi bi-check-circle-fill text-accent icon-status"></i> 1753 <div>CAIRO</div> 1754 </div> 1755 <em class="togel-countdown" id="countdown-desktop-CAI"></em> 1756 </button> 1757 <button class="btn btn-elevated btn-togel btn-pasaran fs-sm d-flex justify-content-between align-items-center" 1758 onclick="openLoginModal();selectPasaran(this)"> 1759 <div class="d-flex gap-2 align-items-center"> 1760 <i class="bi bi-check-circle-fill text-accent icon-status"></i> 1761 <div>SYDNEY LOTTO</div> 1762 </div> 1763 <em class="togel-countdown" id="countdown-desktop-SY"></em> 1764 </button> 1765 <button class="btn btn-elevated btn-togel btn-pasaran fs-sm d-flex justify-content-between align-items-center" 1766 onclick="openLoginModal();selectPasaran(this)"> 1767 <div class="d-flex gap-2 align-items-center"> 1768 <i class="bi bi-check-circle-fill text-accent icon-status"></i> 1769 <div>SWISS</div> 1770 </div> 1771 <em class="togel-countdown" id="countdown-desktop-SWI"></em> 1772 </button> 1773 <button class="btn btn-elevated btn-togel btn-pasaran fs-sm d-flex justify-content-between align-items-center" 1774 onclick="openLoginModal();selectPasaran(this)"> 1775 <div class="d-flex gap-2 align-items-center"> 1776 <i class="bi bi-check-circle-fill text-accent icon-status"></i> 1777 <div>SINGAPORE</div> 1778 </div> 1779 <em class="togel-countdown" id="countdown-desktop-SG"></em> 1780 </button> 1781 <button class="btn btn-elevated btn-togel btn-pasaran fs-sm d-flex justify-content-between align-items-center" 1782 onclick="openLoginModal();selectPasaran(this)"> 1783 <div class="d-flex gap-2 align-items-center"> 1784 <i class="bi bi-check-circle-fill text-accent icon-status"></i> 1785 <div>MALAYSIA</div> 1786 </div> 1787 <em class="togel-countdown" id="countdown-desktop-MY"></em> 1788 </button> 1789 <button class="btn btn-elevated btn-togel btn-pasaran fs-sm d-flex justify-content-between align-items-center" 1790 onclick="openLoginModal();selectPasaran(this)"> 1791 <div class="d-flex gap-2 align-items-center"> 1792 <i class="bi bi-check-circle-fill text-accent icon-status"></i> 1793 <div>QATAR</div> 1794 </div> 1795 <em class="togel-countdown" id="countdown-desktop-QTR"></em> 1796 </button> 1797 <button class="btn btn-elevated btn-togel btn-pasaran fs-sm d-flex justify-content-between align-items-center" 1798 onclick="openLoginModal();selectPasaran(this)"> 1799 <div class="d-flex gap-2 align-items-center"> 1800 <i class="bi bi-check-circle-fill text-accent icon-status"></i> 1801 <div>HONGKONG LOTTO</div> 1802 </div> 1803 <em class="togel-countdown" id="countdown-desktop-HK"></em> 1804 </button> 1805 <button class="btn btn-elevated btn-togel btn-pasaran fs-sm d-flex justify-content-between align-items-center" 1806 onclick="openLoginModal();selectPasaran(this)"> 1807 <div class="d-flex gap-2 align-items-center"> 1808 <i class="bi bi-check-circle-fill text-accent icon-status"></i> 1809 <div>TAIWAN</div> 1810 </div> 1811 <em class="togel-countdown" id="countdown-desktop-TWN"></em> 1812 </button> 1813 <button class="btn btn-elevated btn-togel btn-pasaran fs-sm d-flex justify-content-between align-items-center" 1814 onclick="openLoginModal();selectPasaran(this)"> 1815 <div class="d-flex gap-2 align-items-center"> 1816 <i class="bi bi-check-circle-fill text-accent icon-status"></i> 1817 <div>TOTOMACAU 1</div> 1818 </div> 1819 <em class="togel-countdown" id="countdown-desktop-TM1"></em> 1820 </button> 1821 <button class="btn btn-elevated btn-togel btn-pasaran fs-sm d-flex justify-content-between align-items-center" 1822 onclick="openLoginModal();selectPasaran(this)"> 1823 <div class="d-flex gap-2 align-items-center"> 1824 <i class="bi bi-check-circle-fill text-accent icon-status"></i> 1825 <div>TOTOMACAU 2</div> 1826 </div> 1827 <em class="togel-countdown" id="countdown-desktop-TM2"></em> 1828 </button> 1829 <button class="btn btn-elevated btn-togel btn-pasaran fs-sm d-flex justify-content-between align-items-center" 1830 onclick="openLoginModal();selectPasaran(this)"> 1831 <div class="d-flex gap-2 align-items-center"> 1832 <i class="bi bi-check-circle-fill text-accent icon-status"></i> 1833 <div>TOTOMACAU 3</div> 1834 </div> 1835 <em class="togel-countdown" id="countdown-desktop-TM3"></em> 1836 </button> 1837 <button class="btn btn-elevated btn-togel btn-pasaran fs-sm d-flex justify-content-between align-items-center" 1838 onclick="openLoginModal();selectPasaran(this)"> 1839 <div class="d-flex gap-2 align-items-center"> 1840 <i class="bi bi-check-circle-fill text-accent icon-status"></i> 1841 <div>TOTOMACAU 4</div> 1842 </div> 1843 <em class="togel-countdown" id="countdown-desktop-TM4"></em> 1844 </button> 1845 <button class="btn btn-elevated btn-togel btn-pasaran fs-sm d-flex justify-content-between align-items-center" 1846 onclick="openLoginModal();selectPasaran(this)"> 1847 <div class="d-flex gap-2 align-items-center"> 1848 <i class="bi bi-check-circle-fill text-accent icon-status"></i> 1849 <div>TOTOMACAU 5</div> 1850 </div> 1851 <em class="togel-countdown" id="countdown-desktop-TM5"></em> 1852 </button> 1853 <button class="btn btn-elevated btn-togel btn-pasaran fs-sm d-flex justify-content-between align-items-center" 1854 onclick="openLoginModal();selectPasaran(this)"> 1855 <div class="d-flex gap-2 align-items-center"> 1856 <i class="bi bi-check-circle-fill text-accent icon-status"></i> 1857 <div>TOTOMACAU 6</div> 1858 </div> 1859 <em class="togel-countdown" id="countdown-desktop-TM6"></em> 1860 </button> 1861 </div> 1862</div> 1863 1864<div id="content-pasaran" class="container mt-3"></div> 1865
1866<script> 1867 SHOW_THRESHOLD_MINUTES = 30; 1868 countdownTimers = {}; 1869 finishedCountdowns = {}; // â Prevent multiple onCountdownFinished 1870 selectedPasaranId = null; 1871 1872 // Initialize Splide for mobile 1873 var splidePasaran = new Splide('#splide-pasaran', { 1874 autoWidth: true, 1875 pagination: false, 1876 drag: 'free', 1877 gap: '.5rem', 1878 focus: 'center', 1879 arrows: false, 1880 }); 1881 splidePasaran.mount(); 1882 1883 // Convert "WIB" string to UTC time 1884 function parseWIBTime(datetimeStr) { 1885 if (!datetimeStr) return null; 1886 const clean = datetimeStr.replace(' WIB', '').trim(); 1887 const [datePart, timePart] = clean.split(' '); 1888 const [year, month, day] = datePart.split('-').map(Number); 1889 const [hour, minute, second] = timePart.split(':').map(Number); 1890 return Date.UTC(year, month - 1, day, hour - 7, minute, second); 1891 } 1892 1893 // Countdown handler 1894 function startCountdown(id, targetTime) { 1895 const el = document.getElementById(id); 1896 if (!el) return; 1897 clearInterval(countdownTimers[id]); 1898 1899 countdownTimers[id] = setInterval(() => { 1900 const now = Date.now(); 1901 const diff = targetTime - now; 1902 1903 if (diff <= 0) { 1904 if (!finishedCountdowns[id]) { 1905 finishedCountdowns[id] = true; 1906 el.style.display = 'none'; 1907 clearInterval(countdownTimers[id]); 1908 1909 const pasaranId = id.replace('countdown-desktop-', '').replace('countdown-', ''); 1910 updatePasaranIcon(pasaranId, 'closed'); 1911 onCountdownFinished(pasaranId); 1912 } 1913 return; 1914 } 1915 1916 const totalSeconds = Math.floor(diff / 1000); 1917 const minutes = Math.floor(totalSeconds / 60); 1918 const seconds = totalSeconds % 60; 1919 el.textContent = `${String(minutes).padStart(2, '0')}
1919:${String(seconds).padStart(2, '0')}`; 1920 el.style.display = 'block'; 1921 }, 1000); 1922 } 1923 1924 // Update icon color 1925 function updatePasaranIcon(pasaranId, status = 'active') { 1926 const icons = [ 1927 document.querySelector(`#btn-${pasaranId} .icon-status`), 1928 document.querySelector(`#btn-desktop-${pasaranId} .icon-status`) 1929 ]; 1930 icons.forEach(icon => { 1931 if (!icon) return; 1932 if (status === 'closed') { 1933 icon.className = 'bi bi-dash-circle-fill text-danger icon-status'; 1934 } else if (status === 'active') { 1935 icon.className = 'bi bi-check-circle-fill text-accent icon-status'; 1936 } 1937 }); 1938 } 1939 1940 // Called when countdown finished (only once) 1941 function onCountdownFinished(pasaranId) { 1942 console.log(`â° Countdown finished for ${pasaranId}`); 1943 if (selectedPasaranId === pasaranId) { 1944 content(`/togel/pasaran/closed`, 'content-pasaran'); 1945 } 1946 } 1947 1948 // Fetch and update pasaran list 1949 function pollPasaranData() { 1950 window.api.get(`/togel/get-all-pasaran`, {}, { 1951 onSuccess: (response) => { 1952 if (!response || !Array.isArray(response)) return; 1953 const now = Date.now(); 1954 1955 response.forEach(p => { 1956 const cdm = document.getElementById(`countdown-${p.name_id}`); 1957 const cdd = document.getElementById(`countdown-desktop-${p.name_id}`); 1958 const nextTutup = parseWIBTime(p.next_tutup); 1959 const timeUntilTutup = nextTutup - now; 1960 const shouldShowCountdown = (p.status === 1) && (timeUntilTutup <= SHOW_THRESHOLD_MINUTES * 60 * 1000); 1961 1962 if (finishedCountdowns[`countdown-${p.name_id}`]) return; 1963 1964 if (shouldShowCountdown) { 1965 if (!countdownTimers[`countdown-${p.name_id}`] && cdm) 1966 startCountdown(`countdown-${p.name_id}`, nextTutup); 1967 if (!countdownTimers[`countdown-desktop-${p.name_id}`] && cdd) 1968 startCountdown(`countdown-desktop-${p.name_id}`, nextTutup); 1969 } else { 1970 if (cdm) cdm.style.display = 'none'; 1971 if (cdd) cdd.style.display = 'none'; 1972 } 1973 }); 1974 }, 1975 onError: (err) => console.error("Error fetching pasaran:", err) 1976 }); 1977 } 1978 1979 // Run once on load 1980 pollPasaranData(); 1981 1982 // Button selection handler 1983 function selectPasaran(elem = '') { 1984 $('.btn-pasaran').removeClass('active'); 1985 if (elem !== '') { 1986 $(elem).addClass('active'); 1987 const id = elem.id.replace('btn-desktop-', '').replace('btn-', ''); 1988 selectedPasaranId = id; 1989 console.log(`ð¯ Selected pasaran: ${selectedPasaranId}`); 1990 } 1991 } 1992 1993 // List Pasaran button toggle 1994 $('#btn-list-pasaran').on('click', () => { 1995 $('#btn-list-pasaran').toggleClass('active'); 1996 selectedPasaranId = null; 1997 }); 1998 1999 // Default load list if no pasaran selected 2000 selectedId = $('.btn-pasaran.active').attr('id'); 2001 if (!selectedId) { 2002 $('#btn-list-pasaran').addClass('active'); 2003 content(`/togel/pasaran/list`, 'content-pasaran'); 2004 } 2005 // else, load that pasaran 2006 else { 2007 selectPasaran($(`#${selectedId}`)[0]); 2008 $(`#btn-${selectedPasaranId}`).addClass('active'); 2009 $(`#btn-desktop-${selectedPasaranId}`).addClass('active'); 2010 baseBetRoute = `/togel/pasaran/__PASARAN__/`; 2011 uriBet = baseBetRoute.replace('__PASARAN__', selectedPasaranId); 2012 content(uriBet, 'content-pasaran') 2013 } 2014</script>
2014 2015 2016<div class="footer bg-surface py-5 mt-5"> 2017 <div class="container"> 2018 2019 <div class="d-flex flex-column flex-lg-row justify-content-between align-items-start align-items-lg-center"> 2020 <div class="d-flex flex-column gap-1"> 2021 <div><img src="/images/logo.gif?1787301701" class="logo-footer" alt="Logo"></div> 2022 <div class="fs-sm mt-3 text-nowrap">© 2026 Copyright CFC4D. All Rights Reserved.</div> 2023 </div> 2024 2025 2026 <ul class="d-flex justify-content-evenly justify-content-lg-end align-items-center gap-3 w-100 mt-4 mt-lg-0"> 2027 2028 <li><a href="https://t.me/cfc4d" target="_blank" aria-label="Visit telegram" rel="noopener noreferrer"><i class="icon-telegram text-accent fs-lg"></i></a></li> 2029 <li><a href="https://cfc4d.live/wa" target="_blank" aria-label="Visit whatsapp" rel="noopener noreferrer"><i class="icon-whatsapp text-accent fs-lg"></i></a></li> 2030 2031 </ul> 2032 2033 </div> 2034 2035 <hr class="my-3 my-lg-5 w-100" /> 2036 2037 <div class="d-flex justify-content-center align-items-center"> 2038 <img class="w-100 d-none d-lg-block" src="https://imgotp.viva88athenae.com//providers.png" style="width: 100%" alt="Provider"/> 2039 <img class="w-100 d-block d-lg-none" src="https://imgotp.viva88athenae.com//mproviders.png" style="width: 100%" alt="Provider"/> 2040 </div> 2041 2042 <hr class="my-3 my-lg-5 w-100" /> 2043 2044 <div class="d-flex justify-content-center align-items-center py-4"> 2045 <img src="https://imgotp.viva88athenae.com//license.png" style="max-width: 800px; width: 100%" alt="License"/> 2046 </div> 2047 2048 <hr class="my-3 my-lg-5 w-100" /> 2049 2050 <style> 2051 .getbutton { 2052 position: fixed; 2053 left: 8px; 2054 bottom: 145px; 2055 z-index: 999999; 2056 font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, sans-serif; 2057 } 2058 2059 .getbutton ul { 2060 list-style: none; 2061 padding: 0; 2062 margin: 0; 2063 position: relative; 2064 } 2065 2066.getbutton li { 2067 position: absolute; 2068 bottom: 12px; 2069 left: 4px; 2070 opacity: 0; 2071 transform: translateY(0) scale(0.3); 2072 transition: all 0.45s cubic-bezier(.25, 1.7, .45, .87); 2073 pointer-events: none; 2074} 2075 2076 .getbutton.open li { 2077 opacity: 1; 2078 pointer-events: auto; 2079 } 2080 2081 .getbutton.open li:nth-child(1) { 2082 transform: translateY(-219px) scale(1); 2083} 2084 2085.getbutton.open li:nth-child(2) { 2086 transform: translateY(-166px) scale(1); 2087} 2088 2089.getbutton.open li:nth-child(3) { 2090 transform: translateY(-113px) scale(1); 2091} 2092 2093.getbutton.open li:nth-child(4) { 2094 transform: translateY(-60px) scale(1); 2095} 2096 2097 .getbutton li a { 2098 display: block; 2099 text-decoration: none; 2100 } 2101 2102 .getbutton li img { 2103 width: 50px; 2104 display: block; 2105 position: relative; 2106 } 2107 2108 .infobutton { 2109 width: 38px; 2110 height: 38px; 2111 border-radius: 50%; 2112 background: #009100 url('https://cdn.seomrc.com/cfc4d/logo/favicon.webp') center center / 120% 2113 no-repeat; 2114 box-shadow: 0 0 15px rgba(0, 255, 12, 0.7); 2115 cursor: pointer; 2116 position: relative; 2117 } 2118 2119.infoinfo { 2120 width: 60px; 2121 height: 20px; 2122 color: #00ff00; 2123 display: flex; 2124 justify-content: center; 2125 align-items: center; 2126 font-size: 8px; 2127 font-weight: bold; 2128 border-radius: 6px; 2129 margin-bottom: 5px; 2130 position: relative; 2131} 2132 2133 .infotext { 2134 animation: flicker 1.5s infinite; 2135 } 2136 2137 @keyframes flicker { 2138 0%, 100% { 2139 opacity: 1; 2140 } 2141 50% { 2142 opacity: 0.35; 2143 } 2144 } 2145 2146 @media (min-width: 769px) { 2147 .getbutton { 2148 bottom: 120px; 2149 left: 10px; 2150 } 2151 2152 .infobutton { 2153 width: 50px; 2154 height: 50px; 2155 } 2156 2157 .infoinfo { 2158 width: 68px; 2159 height: 24px; 2160 font-size: 10px; 2161 } 2162 2163 .getbutton li { 2164 left: 6px; 2165 } 2166 2167 } 2168</style> 2169 2170<div class="getbutton"> 2171 <div class="infoinfo infotext" id="infocfc4d">info CFC4D</div> 2172 <div class="infobutton" onclick="toggleMenu()"></div> 2173 2174 <ul> 2175 <li> 2176 <a href="https://linkalternatif.online/apk" target="_blank" rel="nofollow noopener noreferrer"> 2177 <img src="https://cdn.seomrc.com/cfc4d/tombol/apk.gif" alt="cfc4d"> 2178 </a> 2179 </li> 2180 <li> 2181 <a href="https://linkalternatif.online/rtp" target="_blank" rel="nofollow noopener noreferrer"> 2182 <img src="https://cdn.seomrc.com/cfc4d/tombol/rtp.gif" alt="cfc4d"> 2183 </a> 2184 </li> 2185 <li> 2186 <a href="https://linkalternatif.online/tele" target="_blank" rel="nofollow noopener noreferrer"> 2187 <img src="https://cdn.seomrc.com/cfc4d/tombol/telegram.gif" alt="cfc4d"> 2188 </a> 2189 </li> 2190 <li> 2191 <a href="https://linkalternatif.online/tvnobar" target="_blank" rel="nofollow noopener noreferrer"> 2192 <img src="https://cdn.seomrc.com/cfc4d/tombol/tvnobar.gif" alt="cfc4d"> 2193 </a> 2194 </li> 2195 </ul> 2196</div> 2197
2198<script> 2199 const menu = document.querySelector(".getbutton"); 2200 const info = document.getElementById("infocfc4d"); 2201 2202 function toggleMenu() { 2203 menu.classList.toggle("open"); 2204 2205 if (menu.classList.contains("open")) { 2206 info.style.display = "none"; 2207 } else { 2208 info.style.display = "flex"; 2209 } 2210 } 2211</script>
2211 2212 2213<h1 style="text-align:center;">CFC4D Situs Resmi Slot Online untuk Membaca Alur dan Menemukan Keseruan Setiap Putaran</h1> 2214 2215 2216 </div> 2217</div> 2218 2219 2220 2221 </div> 2222 2223
2223<script> 2224 document.querySelectorAll('#togel-tabs .nav-link').forEach(tab => { 2225 tab.addEventListener('click', function() { 2226 // remove active from all 2227 document.querySelectorAll('#togel-tabs .nav-link').forEach(link => link.classList.remove('active')); 2228 2229 // add active to clicked one 2230 this.classList.add('active'); 2231 }); 2232 }); 2233 2234 // active menu togel 2235 $('#menu-togel').addClass('active'); 2236 // $('#tab-pasaran').addClass('active'); 2237 2238 // default tab: pasaran 2239 if(!$('#tab-keluaran').hasClass('active') && !$('#tab-mimpi').hasClass('active')) { 2240 $('#tab-pasaran').addClass('active'); 2241 } 2242 2243 // active menu pasaran 2244 if($('#tab-pasaran').hasClass('active')) { 2245 document.querySelectorAll('#togel-tabs .nav-link').forEach(link => link.classList.remove('active')); 2246 $('#tab-pasaran').addClass('active'); 2247 } 2248 2249 // active menu keluaran 2250 if($('#tab-keluaran').hasClass('active')) { 2251 document.querySelectorAll('#togel-tabs .nav-link').forEach(link => link.classList.remove('active')); 2252 $('#tab-keluaran').addClass('active'); 2253 content(`/togel/keluaran`, 'content-togel') 2254 } 2255 2256 // active menu mimpi 2257 if($('#tab-mimpi').hasClass('active')) { 2258 document.querySelectorAll('#togel-tabs .nav-link').forEach(link => link.classList.remove('active')); 2259 $('#tab-mimpi').addClass('active'); 2260 content(`/togel/mimpi`, 'content-togel') 2261 } 2262 </script>
2262 2263</div> 2264 2265 </div> 2266 </div> 2267 </main> 2268 </div> 2269 2270 <style> 2271 .offcanvas { 2272 width: 30%!important; 2273 } 2274 2275 @media (max-width: 768px) { 2276 .offcanvas { 2277 width: 90%!important; 2278 } 2279 2280 } 2281 2282 2283 </style> 2284 2285 <div class="offcanvas offcanvas-end bg-base" tabindex="-1" id="offcanvas" aria-labelledby="offcanvasLabel"> 2286 <div class="offcanvas-header pb-0"> 2287 <h5 class="offcanvas-title" id="offcanvas-title"></h5> 2288 <button type="button" class="btn-close" data-bs-dismiss="offcanvas" aria-label="Close"></button> 2289 </div> 2290 <div class="offcanvas-body" id="offcanvas-body"> 2291 <div id="offcanvas-body-content-1"></div> 2292 <div id="offcanvas-body-content-2"></div> 2293 </div> 2294 </div> 2295 2296 <div id="box-bottom-navbar"> 2297 <!-- Bottom Navigation Bar--> 2298 <style> 2299 #bottom-navbar { 2300 height: 68px; 2301 z-index: 999; 2302 position: fixed; 2303 bottom: 0; 2304 left: 0; 2305 right: 0; 2306 } 2307 2308 #myBox { 2309 position: fixed; 2310 left: 0; 2311 right: 0; 2312 bottom: -100%; /* changed */ 2313 width: 100%; 2314 background: #3498db; 2315 z-index: 998; 2316 overflow: auto; 2317 transition: bottom 0.4s ease; 2318 } 2319 2320 /* Slide up and stop just above the bottom navbar */ 2321 #myBox.show { 2322 bottom: 68px; 2323 } 2324 2325 .halo-effect { 2326 position: relative; 2327 z-index: 1; 2328 } 2329 2330 .halo-effect::after { 2331 content: ''; 2332 position: absolute; 2333 top: 50%; 2334 left: 50%; 2335 width: 72px; /* Bigger size */ 2336 height: 72px; 2337 transform: translate(-50%, -50%); 2338 border-radius: 50%; 2339 background: var(--accent-color); /* Softer glow */ 2340 opacity: .3; 2341 animation: pulse-ring 1.8s infinite; 2342 z-index: -1; 2343 } 2344 2345 @keyframes pulse-ring { 2346 0% { 2347 transform: translate(-50%, -50%) scale(1); 2348 opacity: 0.6; 2349 } 2350 50% { 2351 transform: translate(-50%, -50%) scale(1.6);
2351 /* Bigger expansion */ 2352 opacity: 0.3; 2353 } 2354 100% { 2355 transform: translate(-50%, -50%) scale(1); 2356 opacity: 0.6; 2357 } 2358 } 2359 2360.speed-dial-wrapper { 2361 position: relative; 2362 } 2363 2364 2365.speed-dial-item { 2366 position: absolute; 2367 bottom: 68px; 2368 left: 50%; 2369 transform: translateX(-50%) translateY(0); 2370 opacity: 0; 2371 pointer-events: none; 2372 transition: transform 0.2s ease-out, opacity 0.2s ease-out; 2373} 2374 2375.speed-dial-active .speed-dial-item { 2376 opacity: 1; 2377 pointer-events: auto; 2378} 2379</style> 2380 2381<nav id="bottom-navbar" class="fixed-bottom bg-surface shadow"> 2382 <div class="d-flex h-100"> 2383 <a id="bottom-navbar-menu" class="flex-fill d-flex flex-column justify-content-center align-items-center gap-1" href="javascript:toggleBox()"> 2384 <i class="icon-menu text-accent fs-xl"></i> 2385 <div class="fw-semibold text-surface fs-sm-sm">Menu</div> 2386 </a> 2387 2388 <a id="bottom-navbar-home" href="/" onclick="event.preventDefault();$('.modal').modal('hide');content( '/')" class="flex-fill d-flex flex-column justify-content-center align-items-center gap-1"> 2389 <i class="icon-home text-accent fs-xl"></i> 2390 <div class="fw-semibold text-surface fs-md fs-sm-sm">Home</div> 2391 </a> 2392 2393 2394 2395 <a id="bottom-navbar-promosi" href="/promosi" onclick="event.preventDefault();$('.modal').modal('hide');content( '/promosi')" class="flex-fill d-flex flex-column justify-content-center align-items-center gap-1"> 2396 <i class="icon-promotion text-accent fs-xl"></i> 2397 <div class="fw-semibold text-surface fs-md fs-sm-sm">Promosi</div> 2398 </a> 2399 2400 <a id="bottom-navbar-event" href="/event" onclick="event.preventDefault();content( '/event')" class="flex-fill d-flex flex-column justify-content-center align-items-center gap-1"> 2401 <i class="icon-event text-accent fs-xl"></i> 2402 <div class="fw-semibold text-surface fs-md fs-sm-sm">Event</div> 2403 </a> 2404 2405 2406 2407 <div class="speed-dial-wrapper flex-fill d-flex flex-column justify-content-center align-items-center gap-1"> 2408 <div id="bottom-navbar-chat" 2409 class="speed-dial-btn d-flex flex-column justify-content-center align-items-center gap-1" 2410 onclick="toggleMedia()"> 2411 <i class="icon-livechat text-accent fs-xl"></i> 2412 <div class="fw-semibold text-surface fs-md fs-sm-sm">Chat</div> 2413 </div> 2414 2415 <a href="javascript:void(0)" onclick="CsChatEmbed.openChat()" aria-label="Open Chesatria Chat" class="speed-dial-item"> 2416 <img src="https://imgotp.viva88athenae.com//livechat.png" style="width: 48px; height: 48px;" alt="chesatria"/> 2417 </a> 2418 <a href="https://cfc4d.live/wa" target="_blank" aria-label="Visit whatsapp" rel="noopener noreferrer" class="speed-dial-item"> 2419 <img src="https://imgotp.viva88athenae.com//whatsapp.png" style="width: 48px; height: 48px;" alt="whatsapp"/> 2420 </a> 2421 <a href="https://t.me/cfc4d" target="_blank" aria-label="Visit telegram" rel="noopener noreferrer" class="speed-dial-item"> 2422 <img src="https://imgotp.viva88athenae.com//telegram.png" style="width: 48px; height: 48px;" alt="telegram"/> 2423 </a> 2424 </div> 2425 </div> 2426</nav> 2427 2428<div id="myBox" class="slide-page d-block d-lg-none"> 2429 <style> 2430 .sidebar-menu.active { 2431 background-color: var(--bg-hover); 2432 /* Or any custom color */ 2433 } 2434 2435 .new-badge { 2436 position: absolute; 2437 right: 0; 2438 top: 50%; 2439 transform: translateY(-50%); 2440 margin-right: 8px; 2441 } 2442</style> 2443 2444 2445<div class="sidebar pb-4"> 2446 <div class="sidebar-head d-none d-lg-block"> 2447 <div class="d-flex justify-content-center align-items-center w-100 my-4"> 2448 <a href="/" 2449 onclick="event.preventDefault();content(`/`);unsetSidebarMenuActive()"><img 2450 src="/images/logo.gif?1787301701" 2451 class="logo-sidebar" alt="Logo"></a> 2452 </div> 2453 2454 </div> 2455 <div class="sidebar-body"> 2456 <div class="d-flex flex-column mx-3"> 2457 <div class="d-flex flex-column"> 2458 <div class="d-block d-lg-none mt-3 mt-lg-0"> 2459 <style> 2460 /*:root {*/ 2461 /* --bg-surface: rgb(15, 25, 35);*/ 2462 /* --text-deep: white;*/ 2463 /* --text-surface: white;*/ 2464 /* --bg-elevated: rgb(40, 50, 60);*/ 2465 /* --placeholder-color: rgb(100, 110, 120);*/ 2466 /*}*/ 2467 2468 /* Input Styles */ 2469 .search-container { 2470 position: relative; 2471 z-index: 991; 2472 width: 100%; 2473 margin: auto; 2474 } 2475 2476 .search-container input[type="text"] { 2477 background-color: var(--bg-surface); 2478 color: var(--text-deep);
2479 border: 2px solid var(--bg-elevated); 2480 outline: none; 2481 padding: 8px 40px 8px 50px; /* Add padding for the icon */ 2482 border-radius: 4px; 2483 transition: border-color 0.2s ease; 2484 width: 100%; 2485 font-weight: 600; 2486 font-size: 16px; 2487 } 2488 2489 .search-container input[type="text"]::placeholder { 2490 color: var(--placeholder-color); 2491 opacity: 0.8; 2492 } 2493 2494 2495 .search-icon { 2496 position: absolute; 2497 top: 50%; 2498 left: 16px; 2499 transform: translateY(-50%); 2500 color: var(--accent-color); 2501 font-size: 20px; 2502 pointer-events: none; /* Prevent icon from blocking input */ 2503 } 2504 2505 .search-overlay { 2506 position: fixed; 2507 top: 0; 2508 left: 0; 2509 width: 100%; 2510 height: 100%; 2511 background-color: rgba(0, 0, 0, 0.5); 2512 z-index: 990; 2513 display: none; 2514 } 2515 2516 .search-result { 2517 position: absolute; 2518 z-index: 991; 2519 width: 100%; 2520 height: 440px; 2521 max-height: 440px; 2522 background-color: var(--bg-surface); 2523 border-radius: 8px; 2524 overflow-y: auto; 2525 box-shadow: 0 8px 20px rgba(0, 0, 0, 0.5); 2526 display: none; 2527 } 2528 2529 .search-result-item { 2530 padding: 12px 16px; 2531 color: var(--text-surface); 2532 cursor: pointer; 2533 transition: background-color 0.2s; 2534 } 2535 2536 .search-result-item:hover { 2537 background-color: var(--bg-elevated); 2538 } 2539</style> 2540 2541<div class="search-widget"> 2542 <div class="search-overlay" onclick="closeSearch(this)"></div> 2543 2544 <div class="search-container"> 2545 <span class="search-icon"><i class="icon-search text-accent fs-xl"></i></span> 2546 <input 2547 type="text" 2548 placeholder="Search" 2549 class="form-control" 2550 onfocus="openSearch(this)" 2551 oninput="debouncedSearch(this)" 2552 > 2553 2554 <div class="search-result rounded mt-3"></div> 2555 </div> 2556</div> 2557
2558<script> 2559 2560 2561 // Debounced version of searchGame 2562 var debouncedSearch = debounce(function (input) { 2563 searchGame(input); 2564 }, 300); 2565 2566 function debounce(func, delay = 300) { 2567 let timeout; 2568 return function (...args) { 2569 clearTimeout(timeout); 2570 timeout = setTimeout(() => func.apply(this, args), delay); 2571 }; 2572 } 2573 2574 function searchGame(input) { 2575 const container = input.closest('.search-widget'); 2576 const value = input.value.trim(); 2577 const resultBox = container.querySelector('.search-result'); 2578 const overlay = container.querySelector('.search-overlay'); 2579 2580 if (value) { 2581 resultBox.style.display = 'block'; 2582 overlay.style.display = 'block'; 2583 2584 resultBox.innerHTML = ` 2585 <div class="w-100 h-100 d-flex justify-content-center align-items-center"> 2586 <div class="spinner-border text-primary" role="status"></div> 2587 </div> 2588 `; 2589 2590 const settings = { 2591 url: encodeURI(`/game/search?name=${value}`), 2592 method: "GET", 2593 timeout: 0, 2594 }; 2595 2596 $.ajax(settings).done(function (response) { 2597 resultBox.innerHTML = response; 2598 }); 2599 } else { 2600 resultBox.style.display = 'none'; 2601 overlay.style.display = 'none'; 2602 } 2603 } 2604 2605 function openSearch(input) { 2606 const container = input.closest('.search-widget'); 2607 container.querySelector('.search-overlay').style.display = 'block'; 2608 document.body.classList.add('search-active'); 2609 2610 if (window.innerWidth <= 768) { 2611 setTimeout(() => { 2612 const offset = input.getBoundingClientRect().top + window.scrollY - 16; 2613 window.scrollTo({ top: offset, behavior: 'smooth' }); 2614 }, 100); 2615 } 2616 } 2617 2618 function closeSearch(overlay) { 2619 const container = overlay.closest('.search-widget'); 2620 container.querySelector('.search-overlay').style.display = 'none'; 2621 container.querySelector('.search-result').style.display = 'none'; 2622 document.body.classList.remove('search-active'); 2623 2624 input.blur(); 2625 } 2626 2627 function checkFocus(input) { 2628 const container = input.closest('.search-widget'); 2629 setTimeout(() => { 2630 if (!container.contains(document.activeElement)) { 2631 closeSearch(container.querySelector('.search-overlay')); 2632 } 2633 }, 200); 2634 } 2635 2636 2637 2638</script>
2638 2639 </div> 2640 2641 <div 2642 class="d-flex flex-lg-row flex-md-column flex-sm-column gap-2 align-items-center h-100 mt-3 mt-lg-0"> 2643 <a class="btn btn-promotion w-100" href="/promosi" 2644 onclick="event.preventDefault(); content( `/promosi`);">Promosi</a> 2645 <a class="btn btn-event w-100" href="/event" 2646 onclick="event.preventDefault(); content( `/event`)">Event</a> 2647 </div> 2648 </div> 2649 2650 <div class="d-flex flex-column gap-2 mt-3 mt-lg-2"> 2651 2652 <!-- Togel --> 2653 2654 <ul class="menu-group"> 2655 <li class="menu-item"> 2656 <a id="menu-togel" class="sidebar-menu btn-menu" href="/togel" 2657 onclick="event.preventDefault();content( `/togel`);setSidebarMenuActive(this); generateTogelToken();"> 2658 <div style="width: 16px"><i class="icon-togel text-accent fs-md"></i></div> 2659 <span class="menu-name">Togel</span> 2660 </a> 2661 </li> 2662 </ul> 2663 2664 <!-- Togel --> 2665 2666 <!-- Menu Game --> 2667 2668 <ul class="menu-group"> 2669 <li class="menu-item"> 2670 <a id="menu-slot" class="sidebar-menu btn-menu" 2671 href="/game/slot" 2672 onclick="event.preventDefault();content( `/game/slot`);setSidebarMenuActive(this)"> 2673 <div style="width: 16px"><i class="icon-slot text-accent fs-md"></i></div> 2674 <span class="menu-name">Slot</span> 2675 </a> 2676 2677 </li> 2678 </ul> 2679 2680 <ul class="menu-group"> 2681 <li class="menu-item"> 2682 <a id="menu-casino" class="sidebar-menu btn-menu" 2683 href="/game/casino" 2684 onclick="event.preventDefault();content( `/game/casino`);setSidebarMenuActive(this)"> 2685 <div style="width: 16px"><i class="icon-live-casino text-accent fs-md"></i></div> 2686 <span class="menu-name">Casino</span> 2687 </a> 2688 2689 </li> 2690 </ul> 2691 2692 <ul class="menu-group"> 2693 <li class="menu-item"> 2694 <a id="menu-sports" class="sidebar-menu btn-menu" 2695 href="/game/sports" 2696 onclick="event.preventDefault();content( `/game/sports`);setSidebarMenuActive(this)"> 2697 <div style="width: 16px"><i class="icon-sports text-accent fs-md"></i></div> 2698 <span class="menu-name">Sports</span> 2699 </a> 2700 2701 </li> 2702 </ul> 2703 2704 <ul class="menu-group"> 2705 <li class="menu-item"> 2706 <a id="menu-sabung" class="sidebar-menu btn-menu" 2707 href="/game/sabung" 2708 onclick="event.preventDefault();content( `/game/sabung`);setSidebarMenuActive(this)"> 2709 <div style="width: 16px"><i class="icon-sabung text-accent fs-md"></i></div> 2710 <span class="menu-name">Sabung</span> 2711 </a> 2712 2713 </li> 2714 </ul> 2715 2716 <ul class="menu-group"> 2717 <li class="menu-item"> 2718 <a id="menu-arcade" class="sidebar-menu btn-menu" 2719 href="/game/arcade" 2720 onclick="event.preventDefault();content( `/game/arcade`);setSidebarMenuActive(this)"> 2721 <div style="width: 16px"><i class="icon-arcade text-accent fs-md"></i></div> 2722 <span class="menu-name">
2722Arcade</span> 2723 </a> 2724 2725 </li> 2726 </ul> 2727 2728 <ul class="menu-group"> 2729 <li class="menu-item"> 2730 <a id="menu-interactive" class="sidebar-menu btn-menu" 2731 href="/game/interactive" 2732 onclick="event.preventDefault();content( `/game/interactive`);setSidebarMenuActive(this)"> 2733 <div style="width: 16px"><i class="icon-interactive text-accent fs-md"></i></div> 2734 <span class="menu-name">Interactive</span> 2735 </a> 2736 2737 </li> 2738 </ul> 2739 2740 <!-- Kupon --> 2741 <ul class="menu-group"> 2742 <li class="menu-item"> 2743 <a id="menu-kupon" class="sidebar-menu btn-menu" 2744 onclick="event.preventDefault();content( `/coupon`);setSidebarMenuActive(this);"> 2745 <div style="width: 16px"><i class="icon-kupon text-accent fs-md"></i></div> 2746 <span class="menu-name">Kupon</span> 2747 </a> 2748 2749 </li> 2750 </ul> 2751 <!-- Kupon --> 2752 2753 <!-- Menu Social Media --> 2754 2755 <ul class="menu-group"> 2756 <li class="menu-item"> 2757 <a class="btn-menu" href="https://t.me/cfc4d" target="_blank" 2758 aria-label="Visit telegram" rel="noopener noreferrer"> 2759 <div style="width: 16px"><i class="icon-telegram text-accent fs-md"></i></div> 2760 <span class="menu-name">Telegram</span> 2761 </a> 2762 </li> 2763 2764 <li class="menu-item"> 2765 <a class="btn-menu" href="https://cfc4d.live/wa" target="_blank" 2766 aria-label="Visit whatsapp" rel="noopener noreferrer"> 2767 <div style="width: 16px"><i class="icon-whatsapp text-accent fs-md"></i></div> 2768 <span class="menu-name">Whatsapp</span> 2769 </a> 2770 </li> 2771 2772 </ul> 2773 2774 <!-- Menu Informasi --> 2775 2776 <ul class="menu-group"> 2777 2778 2779 2780 <li class="menu-item"> 2781 <a id="menu-tentang" class="sidebar-menu btn-menu" 2782 href="/informasi/tentang" 2783 onclick="event.preventDefault();content(`/informasi/tentang`);setSidebarMenuActive(this)"=> 2784 <div style="width: 16px"><i class="icon-about-us text-accent fs-md"></i></div> 2785 <span class="menu-name">Tentang Kami</span> 2786 </a> 2787 </li> 2788 2789 <li class="menu-item"> 2790 <a id="menu-bantuan" class="sidebar-menu btn-menu" 2791 href="/informasi/bantuan" 2792 onclick="event.preventDefault();content(`/informasi/bantuan`);setSidebarMenuActive(this)"> 2793 <div style="width: 16px"><i class="icon-help text-accent fs-md"></i></div> 2794 <span class="menu-name">FAQ</span> 2795 </a> 2796 </li> 2797 2798 <li class="menu-item"> 2799 <a id="menu-peraturan" class="sidebar-menu btn-menu" 2800 href="/informasi/peraturan" 2801 onclick="event.preventDefault();content(`/informasi/peraturan`);setSidebarMenuActive(this)"> 2802 <div style="width: 16px"><i class="icon-regulation text-accent fs-md"></i></div> 2803 <span class="menu-name">Peraturan</span> 2804 </a> 2805 </li> 2806 2807 <li class="menu-item"> 2808 <a id="menu-bank" class="sidebar-menu btn-menu" 2809 href="/informasi/bank" 2810 onclick="event.preventDefault();content(`/informasi/bank`);setSidebarMenuActive(this)"> 2811 <div style="width: 16px"><i class="icon-bank-info text-accent fs-md"></i></div> 2812 <span class="menu-name">Informasi Bank</span> 2813 </a> 2814 </li> 2815 </ul> 2816 2817 2818 2819 </div> 2820 2821 2822 2823 </div> 2824 </div> 2825</div> 2826
2827<script> 2828 2829 var sidebarTabs = { 2830 "/game/slot": "menu-slot", 2831 "/game/casino": "menu-casino", 2832 "/game/sports": "menu-sports", 2833 "/game/arcade": "menu-arcade", 2834 "/game/sabung": "menu-sabung", 2835 "/game/interactive": "menu-interactive", 2836 "/informasi/tentang": "menu-tentang", 2837 "/informasi/bantuan": "menu-bantuan", 2838 "/informasi/peraturan": "menu-peraturan", 2839 "/informasi/bank": "menu-bank", 2840 }; 2841 2842 document.addEventListener("DOMContentLoaded", function () { 2843 const currentURL = window.location.href; 2844 2845 for (let path in sidebarTabs) { 2846 if (currentURL.includes(path)) { 2847 const menuId = sidebarTabs[path]; 2848 const menuElement = document.getElementById(menuId); 2849 if (menuElement) { 2850 setSidebarMenuActive(menuElement); 2851 } 2852 break; 2853 } 2854 } 2855 }); 2856 2857 function unsetSidebarMenuActive() { 2858 // Remove active from all 2859 document.querySelectorAll('.sidebar-menu').forEach(menu => { 2860 menu.classList.remove('active'); 2861 }); 2862 } 2863 2864 2865 function setSidebarMenuActive(el) { 2866 unsetSidebarMenuActive(); 2867 2868 // Add active to clicked one 2869 el.classList.add('active'); 2870 } 2871 2872 2873</script>
2873</div> 2874
2875<script> 2876 2877 function toggleBox() { 2878 const $box = $('#myBox'); 2879 const isVisible = $box.hasClass('show'); 2880 2881 if (isVisible) { 2882 $box.removeClass('show'); 2883 $('body').css('overflow', ''); // restore scroll 2884 } else { 2885 $box.addClass('show'); 2886 $('body').css('overflow', 'hidden'); // disable background scroll 2887 } 2888 } 2889 2890 function updateMyBoxHeight() { 2891 const topNavHeight = 60; 2892 const bottomNavHeight = 68; 2893 const availableHeight = window.innerHeight - topNavHeight - bottomNavHeight; 2894 $('#myBox').css('height', availableHeight + 'px'); 2895 } 2896 2897 // Call on load and resize 2898 $(document).ready(updateMyBoxHeight); 2899 $(window).on('resize', updateMyBoxHeight); 2900 2901 function handleTransactionRoute(route) { 2902 if (route.includes('content=deposit')) { 2903 openTransactionModalWithTab('deposit'); 2904 } else if (route.includes('content=withdraw')) { 2905 openTransactionModalWithTab('withdraw'); 2906 } else if (route.includes('content=rekening')) { 2907 openTransactionModalWithTab('rekening'); 2908 } else { 2909 openTransactionModalWithTab('deposit'); 2910 } 2911 } 2912 2913 function openTransactionModalWithTab(tabName) { 2914 $('.modal').modal('hide'); 2915 $('.modal-backdrop').remove(); 2916 $('#dynamic-modal').remove(); 2917 $('body').removeClass('modal-open').css('padding-right', ''); 2918 $('#myBox').removeClass('show'); 2919 $('body').css('overflow', ''); 2920 2921 setTimeout(function() { 2922 const modalHtml = ` 2923 <div class="modal" id="dynamic-modal" tabindex="-1" aria-hidden="true"> 2924 <div class="modal-dialog modal-dialog-centered modal-fixed"> 2925 <div class="modal-content bg-surface"> 2926 <div class="modal-header bg-base border-0 d-flex justify-content-between align-items-center"> 2927 <h5 class="modal-title">Transaksi</h5> 2928 <button type="button" 2929 class="close-capsule" 2930 data-bs-dismiss="modal" 2931 aria-label="Close" 2932 style="background: var(--btn-accent-background); border: none; color: white; font-weight: 500; font-size: 0.75rem; padding: 0.3rem 0.8rem; border-radius: 20px; text-transform: uppercase; letter-spacing: 0.5px; cursor: pointer;">CLOSE</button> 2933 </div> 2934 <div class="modal-body p-0" id="modal-content-container"> 2935 <div class="d-flex justify-content-center align-items-center p-5"> 2936 <div class="spinner-border text-primary" role="status"></div> 2937 <span class="ms-3">Memuat halaman transaksi...</span> 2938 </div> 2939 </div> 2940 </div> 2941 </div> 2942 </div> 2943 `; 2944 2945 $('body').append(modalHtml); 2946 $('#dynamic-modal').modal('show'); 2947 2948 $.ajax({ 2949 url: '/user/transaction', 2950 method: 'GET', 2951 data: { content: tabName }, 2952 success: function(response) { 2953 $('#modal-content-container').html(response).animate({opacity: 1}, 300); 2954 2955 setTimeout(function() { 2956 if (typeof initializeTransactionModal === 'function') { 2957 initializeTransactionModal(); 2958 } 2959 if (typeof activateTransactionTab === 'function') { 2960 activateTransactionTab(tabName); 2961 } 2962 }, 100); 2963 }, 2964 error: function(xhr, status, error) { 2965 console.error('Failed to load transaction content:', error); 2966 $('#modal-content-container').html(` 2967 <div class="container-fluid p-4 text-center"> 2968 <div class="alert alert-danger"> 2969 <h5>Error</h5> 2970 <p>Gagal memuat halaman transaksi. Silakan coba lagi.</p> 2971 <button class="btn btn-accent" onclick="openTransactionModalWithTab('${tabName}')">Coba Lagi</button> 2972 </div> 2973 </div> 2974 `).animate({opacity: 1}, 300); 2975 } 2976 }); 2977 2978 $('#dynamic-modal').on('hidden.bs.modal', function () { 2979 $(document).off('.transactionModal'); 2980 if (typeof cleanupTransactionModal === 'function') { 2981 cleanupTransactionModal(); 2982 } 2983 $(this).remove(); 2984 $('.modal-backdrop').remove(); 2985 $('body').removeClass('modal-open').css('padding-right', ''); 2986 }); 2987 }, 200); 2988 } 2989 2990function toggleMedia() { 2991 const chatBtn = document.getElementById("bottom-navbar-chat"); 2992 const wrapper = chatBtn.closest(".speed-dial-wrapper"); 2993 const items = wrapper.querySelectorAll(".speed-dial-item"); 2994 2995 const gap = 54; 2996 const start = 8; 2997 2998 wrapper.classList.toggle("speed-dial-active"); 2999 3000 items.forEach((item, i) => { 3001 const offset = wrapper.classList.contains("speed-dial-active") 3002 ? start + (gap * i) 3003 : 0; 3004 3005 item.style.transform = `translateX(-50%) translateY(-${offset}px)`; 3006 }); 3007} 3008 3009 3010</script>
3010 3011 3012 </div> 3013 3014 <!-- Modal Popup --> 3015 <!-- Modal --> 3016 3017<style> 3018 3019 3020 .popup-img { 3021 width: 600px; 3022 aspect-ratio: 600/300; 3023 } 3024 3025 @media (max-width: 768px) { 3026 .popup-dialog { 3027 padding-top: 64px; 3028 } 3029 3030 3031 .popup-img { 3032 width: 100%; 3033 } 3034 } 3035 3036</style> 3037 3038 3039 3040 3041
3042<script> 3043 3044 function openModalPopup() { 3045 if($('#modal-popup').length) $('#modal-popup').modal('show'); 3046 } 3047 3048 function closeModalPopup() { 3049 if($('#modal-popup').length) $('#modal-popup').modal('hide'); 3050 } 3051 3052</script>
3052 3053 <!-- Modal Syarat --> 3054 <!-- Modal --> 3055 3056<style> 3057 3058 .dialog-syarat { 3059 max-width: 600px; 3060 } 3061 3062 .body-syarat { 3063 max-height: 60vh; /* or any value you prefer */ 3064 overflow-y: auto; 3065 } 3066 3067</style> 3068 3069 3070<div class="modal fade" id="modal-syarat" tabindex="-1" aria-labelledby="modal-syarat-label"> 3071 <div class="modal-dialog dialog-syarat h-auto"> 3072 <div class="modal-content bg-surface h-auto"> 3073 3074 <div class="modal-header bg-base border-0"> 3075 <div class="modal-title"><img src='/images/logo.gif?1787301701' class="logo-popup"></div> 3076 <em class="modal-title ms-auto" id="modal-syarat-label">Syarat dan Ketentuan</em> 3077 </div> 3078 3079 <div class="modal-body body-syarat fw-normal overflow-y-scroll fs-sm-xs"> 3080 <ol> 3081 <li style="margin-bottom: 15px;">Minimal usia bermain adalah 18 tahun.</li> 3082 <li style="margin-bottom: 15px;">Harap memperhatikan jam buka / tutup di setiap permainan.</li> 3083 <li style="margin-bottom: 15px;">Bet dianggap sah jika terjadi sebelum jam tutup di setiap permainan.</li> 3084 <li style="margin-bottom: 15px;">Bet yang sudah dikonfirmasi tidak bisa dibatalkan.</li> 3085 <li style="margin-bottom: 15px;">Harap mengecek kembali Bet di menu History.</li> 3086 <li style="margin-bottom: 15px;">Bet yang telah dibeli adalah sah dan tidak bisa dibatalkan.</li> 3087 <li style="margin-bottom: 15px;">Setiap Pemain bertanggung jawab pada Akun Anda masing-masing.</li> 3088 <li style="margin-bottom: 15px;">Bet akan dibatalkan oleh provider jika terdeteksi adanya kecurangan.</li> 3089 <li style="margin-bottom: 15px;">Hadiah setiap permainan berbeda-beda dan berubah sewaktu-waktu.</li> 3090 <li style="margin-bottom: 15px;">Harap perhatikan peraturan yang tersedia di setiap permainan.</li> 3091 <li style="margin-bottom: 15px;">Jika terjadi kecurangan dan lain sebagainya, maka kami akan memberikan peringatan, Suspend kepada pemain, hingga sanksi Banned Akun.</li> 3092 <li>Deposit / Withdraw dapat dilakukan kecuali bank Offline / Gangguan.</li> 3093</ol> 3094<br> 3095<p style="text-align: center;"><em>Dengan bergabung di situs ini, Anda menyetujui Syarat dan Ketentuan kami.</em></p> 3096 3097 </div> 3098 3099 <!--<button type="button" class="btn btn-secondary" onclick="logout()"><i class="bi bi-x-circle-fill"></i><span class="ms-2">Tidak Setuju</span></button>--> 3100 <a class="text-accent modal-footer bg-base border-0 justify-content-center" href="javascript:closeModalSyarat()"><i class="bi bi-check-circle-fill"></i><span class="ms-2">Setuju</span></button></a> 3101 3102 </div> 3103 </div> 3104</div> 3105
3106<script> 3107 function openModalSyarat() { 3108 if($('#modal-syarat').length) $('#modal-syarat').modal('show'); 3109 } 3110 3111 function closeModalSyarat() { 3112 if($('#modal-syarat').length) $('#modal-syarat').modal('hide'); 3113 } 3114 3115 3116</script>
3116 3117 <!-- Live Chat --> 3118 3119 3120 3121
3121<script src="https://cdn.jsdelivr.net/npm/[email protected]/dist/js/bootstrap.bundle.min.js" integrity="sha384-j1CDi7MgGQ12Z7Qab0qlWQ/Qqz24Gc6BM0thvEMVjHnfYGF0rmFCozFSxQBxwHKO" crossorigin="anonymous"></script>
3121 3122
3122<script> 3123 3124 function generateTogelToken() { 3125 uri = `/api/togel/token`; 3126 window.api.post(uri, {}, { 3127 onSuccess: (response) => { 3128 3129 }, 3130 onError: (response) => { 3131 if (typeof callback === "function") { 3132 callback(); // also call after error if needed 3133 } 3134 } 3135 }); 3136 } 3137 3138 function openLoginModal(game_data, grand_data) { 3139 window.history.pushState({}, '', '/login'); 3140 if(game_data && grand_data) { 3141 window.game_data = game_data; 3142 window.grand_data = grand_data; 3143 } 3144 $('#modal-login').modal('show'); 3145 refreshCaptcha('captcha-login'); 3146 } 3147 3148 function openRegisterModal() { 3149 window.history.pushState({}, '', '/register'); 3150 $('#modal-register').modal('show'); 3151 refreshCaptcha('captcha-register'); 3152 } 3153 3154 function openOffcanvas(pasaran_data) { 3155 3156 title = pasaran_data['name']; 3157 pasaran_id = pasaran_data['pasaran_id']; 3158 3159 $('#offcanvas-title').html(title); 3160 3161 loading('offcanvas-body-content-2'); 3162 uri = `/togel/paito/?pasaran_id=${pasaran_id}&page=1`; 3163 window.api.get(uri, {}, { 3164 onSuccess: (response) => { 3165 $('#offcanvas-body-content-1').html(` 3166 <div class="bg-elevated p-3 rounded fs-sm"> 3167 <div class="d-flex flex-column gap-1"> 3168 <div><span>Website:</span> <a class="text-accent" href="http://${pasaran_data['web']}" target="_blank">${pasaran_data['web']}</a></div> 3169 <div><span>Hari Bukaan:</span> <span class="subtext-color">${pasaran_data['hari']}</span></div> 3170 <div><span>Hari Libur:</span> <span class="subtext-color">${pasaran_data['libur']}</span></div> 3171 <div class="d-flex gap-3"> 3172 <div><span>Jam Tutup:</span> <span class="subtext-color">${pasaran_data['tutup']}</span></div> 3173 <div><span>Jam Undian:</span> <span class="subtext-color">${pasaran_data['jadwal']}</span></div> 3174 </div> 3175 </div> 3176 </div> 3177 3178 <button class="btn btn-accent w-100 mt-3 fs-sm-sm" onclick="pasangAngka('${pasaran_id}'); generateTogelToken()">Pasang Angka</button> 3179 3180 `); 3181 3182 $('#offcanvas-body-content-2').html(response); 3183 }, 3184 onError: (response) => { 3185 if(typeof callback === "function") { 3186 callback(); // also call after error if needed 3187 } 3188 } 3189 }); 3190 // $('#offcanvas-body').html(body); 3191 $('#offcanvas').offcanvas('show'); 3192 } 3193 3194 function pasangAngka(pasaran_id) { 3195 baseBetRoute = `/togel/pasaran/__PASARAN__/`; 3196 uriBet = baseBetRoute.replace('__PASARAN__', pasaran_id); 3197 window.location.href = uriBet; 3198 } 3199 3200 // Core content loader 3201 function navbar() { 3202 $.ajax({ 3203 url: "/component/navbar", 3204 method: 'GET', 3205 timeout: 0, 3206 }).done(function (response) { 3207 $('#box-navbar').html(response); 3208 }).fail(function () { 3209 $('#box-navbar').html('<p>Error loading content</p>'); 3210 }); 3211 } 3212 3213 // Core content loader 3214 function bottomNavbar(uri) { 3215 $.ajax({ 3216 url: "/component/bottom-navbar", 3217 method: 'GET', 3218 timeout: 0, 3219 }).done(function (response) { 3220 $('#box-bottom-navbar').html(response); 3221 }).fail(function () { 3222 $('#box-bottom-navbar').html('<p>Error loading content</p>'); 3223 }); 3224 } 3225 3226 function isMobileScreen() { 3227 return window.innerWidth <= 768; 3228 } 3229 3230 function launch(url, width, height) { 3231 if(isOtpMobileApp()){ 3232 window.open(url, '_blank'); 3233 } 3234 else if (isMobileScreen()) { 3235 3236 // On mobile, open in a new tab (default behavior) 3237 window.location.href = url; 3238 // window.open(url, '_blank'); 3239 } else { 3240 // On desktop, open in a popup window with given dimensions 3241 window.open(url, '_blank', `width=${width},height=${height},top=0,left=0`); 3242 } 3243 } 3244 3245 // Handle browser back/forward buttons 3246 window.onpopstate = function () { 3247 const path = location.pathname; 3248 3249 content(path); 3250 }; 3251 3252 $(document).ready(function() { 3253 openModalPopup(); 3254 }); 3255 3256 3257 3258 </script>
3258 3259 3260 3261
3261<script type="module" src="https://static.cloudflareinsights.com/beacon.min.js/v4bc70e2c01a94c73b74392e4234840661791215815920" integrity="sha512-L0ha0OXavK/8okipN9F8BtP84dg9DUhPERbBXzwI6dgTA55d2+yweo3pn5CSFYs45/r8md2+xvUPtTdvTNRfjA==" data-cf-beacon='{"version":"2024.11.0","token":"a6f4b5945b9f4961b37ca3342252fd8f","r":1,"spa":2}' crossorigin="anonymous"></script>
3261 3262</body> 3263</html>
Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.