PageSourceSearch

https://tengku4d.com/togel

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