PageSourceSearch

https://cfc4dgacor.com/togel

html cfc4dgacor.com collected 2026-10-10 01:45:41 UTC 101,954 bytes, 3,263 lines download raw bytes

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.