1<!DOCTYPE html> 2<html lang="vi"> 3<head> 4 <meta charset="utf-8" /> 5 <meta name="viewport" content="width=device-width, initial-scale=1.0" /> 6 <!-- â 鲿¢æµè§å¨ç¼åHTMLé¡µé¢ --> 7 <meta http-equiv="Cache-Control" content="no-cache, no-store, must-revalidate" /> 8 <meta http-equiv="Pragma" content="no-cache" /> 9 <meta http-equiv="Expires" content="0" /> 10 <meta name="google-site-verification" content="1iqVdpLZF462X9pySkl_MEWQfvSqA1h7-TSK6gFJaGQ" /> 11 12 <!-- Favicon (ç»ä¸åç徿 ) --> 13 <link rel="apple-touch-icon" sizes="180x180" href="/images/pwa/apple-touch-icon.png?v=1791598900" /> 14 <link rel="apple-touch-icon" sizes="120x120" href="/images/pwa/apple-touch-icon-120x120.png?v=1791598900" /> 15 <link rel="apple-touch-icon" sizes="152x152" href="/images/pwa/apple-touch-icon-152x152.png?v=1791598900" /> 16 <link rel="apple-touch-icon" sizes="167x167" href="/images/pwa/apple-touch-icon-167x167.png?v=1791598900" /> 17 <link rel="apple-touch-icon" sizes="180x180" href="/images/pwa/apple-touch-icon-180x180.png?v=1791598900" /> 18 <link rel="icon" type="image/png" sizes="32x32" href="/images/favicon/favicon-32x32.png?v=1791598900" /> 19 <link rel="icon" type="image/png" sizes="16x16" href="/images/favicon/favicon-16x16.png?v=1791598900" /> 20 21 <!-- PWA Manifest - åºå®ä½¿ç¨è¶åè¯ --> 22 <link rel="manifest" href="/images/favicon/site-vi.webmanifest" /> 23 24 <!-- 主è¦ICOæ ¼å¼ - å å«å¤å°ºå¯¸ --> 25 <link rel="icon" type="image/x-icon" href="/images/favicon/favicon.ico?v=1791598900" /> 26 <link rel="shortcut icon" href="/images/favicon/favicon.ico?v=1791598900" /> 27 28 <!-- PWA Meta Tags --> 29 <meta name="application-name" content="XOIGAC.TV" /> 30 <meta name="apple-mobile-web-app-title" content="XOIGAC.TV" /> 31 <meta name="apple-mobile-web-app-capable" content="yes" /> 32 <meta name="apple-mobile-web-app-status-bar-style" content="black-translucent" /> 33 <meta name="mobile-web-app-capable" content="yes" /> 34 <meta name="theme-color" content="#309e58" /> 35 <meta name="msapplication-TileColor" content="#309e58" /> 36 <meta name="msapplication-config" content="/browserconfig.xml" /> 37 38 <!-- SEO: æ é¢ --> 39 <title>Trực tiếp bóng đá hôm nay - Xem bóng đá trực tuyến HD | Xoigac TV</title> 40 41 <!-- SEO: åºæ¬å æ ç¾ --> 42 <meta name="description" content="Xem trực tiếp bóng đá hôm nay miễn phí tại Xoigac TV. Phát sóng trực tiếp tất cả các trận đấu Ngoại hạng Anh, La Liga, Champions League, V-League với chất lượng HD, không giật lag, có bình luận tiếng Việt." /> 43 <meta name="keywords" content="trực tiếp bóng đá, xem bóng đá trực tuyến, bóng đá live" /> 44 45 <!-- SEO: Robots --> 46 <meta name="robots" content="index, follow" /> 47 48 <!-- SEO: Canonical URL --> 49 <link rel="canonical" href="https://xoigac.top/truc-tiep" id="canonicalUrl" /> 50 51 <!-- SEO: Open Graph --> 52 <meta property="og:type" content="website" /> 53 <meta property="og:title" content="Trực tiếp bóng đá hôm nay - Xem bóng đá trực tuyến HD | Xoigac TV" /> 54 <meta property="og:description" content="Xem trực tiếp bóng đá hôm nay miễn phí tại Xoigac TV. Phát sóng trực tiếp tất cả các trận đấu Ngoại hạng Anh, La Liga, Champions League, V-League với chất lượng HD, không giật lag, có bình luận tiếng Việt." /> 55 <meta property="og:url" content="https://xoigac.top/truc-tiep" id="ogUrl" /> 56 <meta property="og:image" content="https://xoigac.top/images/og-default.jpg" id="ogImage" /> 57 <meta property="og:site_name" content="XOIGAC" /> 58 <meta property="og:locale" content="vi_VN" /> 59 60 <!-- SEO: Twitter Card --> 61 <meta name="twitter:card" content="summary_large_image" /> 62 <meta name="twitter:title" content="Trực tiếp bóng đá hôm nay - Xem bóng đá trực tuyến HD | Xoigac TV" /> 63 <meta name="twitter:description" content="Xem trực tiếp bóng đá hôm nay miễn phí tại Xoigac TV. Phát sóng trực tiếp tất cả các trận đấu Ngoại hạng Anh, La Liga, Champions League, V-League với chất lượng HD, không giật lag, có bình luận tiếng Việt." /> 64 <meta name="twitter:image" content="https://xoigac.top/images/og-default.jpg" id="twitterImage" /> 65 66 <!-- SEO: è¶åè¯é¡µé¢æ 注 --> 67 <link rel="alternate" hreflang="vi" href="https://xoigac.top/truc-tiep" id="hreflangVi" /> 68 69 <!-- SEO: ç»æåæ°æ® (JSON-LD) --> 70
70<script type="application/ld+json" id="structuredData"> 71 { 72 "@context": "https://schema.org", 73 "@type": "WebSite", 74 "name": "XOIGAC", 75 "url": "https://xoigac.top" 76 } 77 </script>
77 78 79 <!-- é¢å è½½å ³é®èµæº --> 80 <!-- â æ·»å crossorigin 屿§ä»¥æ¯æç¬¬ä¸æ¹CookieçSameSiteçç¥ --> 81 <link rel="preconnect" href="https://cdn.jsdelivr.net" crossorigin> 82 <link rel="preconnect" href="https://fonts.googleapis.com" crossorigin> 83 <link rel="preconnect" href="https://fonts.gstatic.com" crossorigin> 84 <link rel="preconnect" href="https://cdnjs.cloudflare.com" crossorigin> 85 <link rel="preconnect" href="https://player.live-video.net" crossorigin> 86 <link rel="dns-prefetch" href="https://media.api-sports.io"> 87 <link rel="dns-prefetch" href="https://player.live-video.net"> 88 89 <!-- é¢å è½½å ³é® CSS --> 90 <!-- â ææç¬¬ä¸æ¹èµæºé½æ·»å crossorigin 屿§ --> 91 <!-- é¢å è½½å ³é®å使件 - æ¬å°åä½ --> 92 <link rel="preload" href="/fonts/fa-solid-900.woff2" as="font" type="font/woff2" crossorigin> 93 <link rel="preload" href="/fonts/fa-regular-400.woff2" as="font" type="font/woff2" crossorigin> 94 <link rel="preload" href="/fonts/fa-brands-400.woff2" as="font" type="font/woff2" crossorigin> 95 96 <!-- CSS æä»¶ - ç´æ¥å è½½å ³é®CSSï¼é¿å preloadå»¶è¿ --> 97 <link id="bootstrap-css" href="/lib/bootstrap/5.3.2/bootstrap.min.css?v=MBffSnbbXwHCuZtgPYiwMQbfE7z-GOZ7fBPCNB06Z98" rel="stylesheet" onerror="this.onerror=null;this.href='https://cdn.jsdelivr.net/npm/[email protected]/dist/css/bootstrap.min.css';"> 98 99 <!-- ç产ç¯å¢ï¼ä½¿ç¨æå æä»¶ï¼4个CSSå并为1个ï¼--> 100 <link href="/dist/css/critical.bundle.css?v=XWbFOGVWnVX6Tnz6ky1zKDOPGpmCQnhsl55yeMheUfs" rel="stylesheet"> 101 102 <!-- Google Fonts - ä¼åå è½½ï¼åªå è½½2个åéï¼å¼æ¥å è½½ --> 103 <link rel="preconnect" href="https://fonts.googleapis.com" crossorigin> 104 <link rel="preconnect" href="https://fonts.gstatic.com" crossorigin> 105 <link href="https://fonts.googleapis.com/css2?family=Inter:wght@400;600&display=swap" rel="stylesheet" media="print" onload="this.media='all'" crossorigin> 106 <noscript><link href="https://fonts.googleapis.com/css2?family=Inter:wght@400;600&display=swap" rel="stylesheet" crossorigin></noscript> 107 108 <!-- éªè¯ç èæ¬ - ä» æªç»å½ç¨æ·å è½½ --> 109 <meta name="captcha-enabled" content="false" /> 110 111 <!-- éå ³é® CSS 使ç¨å¼æ¥å è½½ --> 112 <!-- ç产ç¯å¢ï¼ä½¿ç¨æå æä»¶ï¼3个CSSå并为1个ï¼--> 113 <link rel="preload" href="/dist/css/secondary.bundle.css?v=vkHyf3YjhiKhZnM2tUU5WSPJxcjBs_0wPPkWhNiZK0I" as="style" onload="this.onload=null;this.rel='stylesheet'"> 114 <noscript><link href="/dist/css/secondary.bundle.css?v=vkHyf3YjhiKhZnM2tUU5WSPJxcjBs_0wPPkWhNiZK0I" rel="stylesheet" /></noscript> 115 <link href="/dist/css/streamer-follow.css?v=ZAQYBpWCFr8V9ttpEYE9xOwd8DhRemjzaB03PbKbm2M" rel="stylesheet"> 116 <link href="/css/match-list.css?v=GeEuEA-6-18coW8mGwJWMXhZZwWa-z0T70LLP7DN2B8" rel="stylesheet"> 117 <link href="/css/custom-select.css?v=zLL0ZkTEHUXx7DsnfbR23K816oiaK7d-ktskvIXEY8w" rel="stylesheet"> 118 <!-- ä¿åå½åè¯è¨åç¯å¢ä¾ JS ä½¿ç¨ --> 119
119<script> 120 window.__currentLang = 'vi'; 121 window.__isDevelopment = 'false'; 122 window.__matchRoutePrefix = '/truc-tiep'; 123 window.__leagueRoutePrefix = '/giai-dau'; 124 window.__teamRoutePrefix = '/doi-bong'; 125 window.currentUserName = null; 126 (function () { 127 function isDirectoryCenterPath(pathname) { 128 var path = (pathname || '').replace(/\/+$/, '') || '/'; 129 var known = ['/giai-dau', '/doi-bong', '/leagues', '/teams', window.__leagueRoutePrefix, window.__teamRoutePrefix]; 130 for (var i = 0; i < known.length; i++) { 131 var item = (known[i] || '').replace(/\/+$/, ''); 132 if (item && path === item) return true; 133 } 134 return false; 135 } 136 function isMatchDetailPath(pathname) { 137 return /-id\d+(?:\/|$)/i.test(pathname) 138 || pathname.indexOf('/live/beauty/') === 0 139 || pathname.indexOf('/live/football/') === 0 140 || pathname.indexOf('/Match/Details') === 0 141 || isDirectoryCenterPath(pathname); 142 } 143 function resetMatchDetailScroll() { 144 if (!isMatchDetailPath(location.pathname)) return; 145 window.scrollTo(0, 0); 146 } 147 resetMatchDetailScroll(); 148 window.addEventListener('pageshow', resetMatchDetailScroll); 149 })(); 150 </script>
150 151
151<script src="/dist/js/share-utils.js?v=seUNJSOqxgP-1Bne1jM_9IfNGt5lEbiqu6Fc4jHd96s"></script>
151 152 153 <!-- å èå ³é®CSS以é¿å 渲æé»å¡ --> 154 <style> 155 /* 页é¢å è½½é®ç½©å± - 鲿¢æå¨ */ 156 .page-loader { 157 position: fixed; 158 style> 159 / tå è½½é®ç½©å± - 鲿¢æå¨ */op: 0; 160 left: 0; 161 width: 100%; 162 height: 100%; 163 background: #060a10; 164 z-index: 99999; 165 display: flex; 166 align-items: center; 167 justify-content: center; 168 flex-direction: column; 169 gap: 1.5rem; 170 transition: opacity 0.3s ease, visibility 0.3s ease; 171 } 172 .page-loader.fade-out { 173 opacity: 0; 174 visibility: hidden; 175 pointer-events: none; 176 } 177 .page-loader.hidden { 178 display: none !important; 179 visibility: hidden !important; 180 pointer-events: none !important; 181 opacity: 0 !important; 182 } 183 184 /* è天é®ç½©å±ï¼ä» å¨éèæ¶ç¦ç¨ç¹å»ï¼æ¾ç¤ºæ¶å 许ç¹å»ä»¥å ³éå¼¹çª */ 185 .chat-modal-overlay.d-none { 186 display: none !important; 187 visibility: hidden !important; 188 pointer-events: none !important; 189 } 190 /* ç¡®ä¿ Bootstrap æ¨¡ææ¡ä¸è¢«ä»»ä½èªå®ä¹é®ç½©å±é»æ¡ */ 191 .modal.show { 192 z-index: 11000 !important; 193 } 194 .modal-backdrop.show { 195 z-index: 10990 !important; 196 } 197 .page-loader-spinner { 198 position: relative; 199 width: 60px; 200 height: 60px; 201 } 202 .page-loader-spinner::before, 203 .page-loader-spinner::after { 204 content: ''; 205 position: absolute; 206 border-radius: 50%; 207 } 208 .page-loader-spinner::before { 209 width: 100%; 210 height: 100%; 211 background: conic-gradient(from 0deg, transparent, #309e58, transparent 70%); 212 animation: loader-spin 1s linear infinite; 213 } 214 .page-loader-spinner::after { 215 top: 6px; 216 left: 6px; 217 right: 6px; 218 bottom: 6px; 219 background: #060a10; 220 } 221 .page-loader-icon { 222 position: absolute; 223 top: 50%; 224 left: 50%; 225 transform: translate(-50%, -50%); 226 z-index: 1; 227 font-size: 1.25rem; 228 color: #309e58; 229 animation: loader-pulse 1.5s ease-in-out infinite; 230 } 231 .page-loader-text { 232 color: #64748b; 233 font-size: 0.875rem; 234 font-weight: 500; 235 letter-spacing: 0.5px; 236 } 237 @keyframes loader-spin { 238 to { transform: rotate(360deg); } 239 } 240 @keyframes loader-pulse { 241 0%, 100% { opacity: 1; transform: translate(-50%, -50%) scale(1); } 242 50% { opacity: 0.6; transform: translate(-50%, -50%) scale(0.9); } 243 } 244 245 /* åºç¡å¸å±æ ·å¼ - 鲿¢å¸å±æå¨ */ 246 body { 247 margin: 0; 248 padding: 0; 249 background: #060a10; 250 color: #fff; 251 font-family: 'Inter', -apple-system, BlinkMacSystemFont, 'Segoe UI', sans-serif; 252 } 253 </style> 254 255 <!-- CSSå è½½å®ææ£æµåfallback --> 256
256<script> 257 (function() { 258 // ç¡®ä¿CSSå è½½å®æ 259 function loadCSS(href, onload) { 260 var link = document.createElement('link'); 261 link.rel = 'stylesheet'; 262 link.href = href; 263 if (onload) link.onload = onload; 264 document.head.appendChild(link); 265 } 266 267 // æ£æµpreloadæ¯å¦æåï¼å¦æå¤±è´¥åfallback 268 setTimeout(function() { 269 var preloadLinks = document.querySelectorAll('link[rel="preload"][as="style"]'); 270 preloadLinks.forEach(function(link) { 271 if (!link.sheet || link.sheet.cssRules.length === 0) { 272 // preload失败ï¼ç´æ¥å è½½CSS 273 loadCSS(link.href); 274 } 275 }); 276 }, 1000); 277 })(); 278 </script>
278 279 280 281 282 283 284</head> 285<body class="dark-theme " data-enable-console-log="false" data-retry-text="Thử lại" data-report-text="Báo lỗi" data-playback-failed-text="Lỗi phát" data-unsupported-text="Trình duyệt của bạn không hỗ trợ trình phát này" data-loading-text="Đang tải tài nguyên, vui lòng đợi vài giây..." data-loading-hint-text="Nếu video không phát được hoặc bị giật, hãy thử tải lại" data-stream-starting-text="Đang khởi động trực tiếp, vui lòng đợi" data-connecting-stream-text="Đang kết nối nguồn trực tiếp..." data-stream-timeout-text="Chưa bắt đầu trực tiếp" data-not-live-text="Chưa bắt đầu trực tiếp" data-wait-text=""> 286 287 <!-- 页é¢å 容ç«å³å¯è§ - ç§»é¤CSSçå¾ é»è¾ --> 288
288<script> 289 // 页é¢å 容ç«å³å¯è§ï¼ä¸çå¾ ä»»ä½èµæº 290 document.body.style.visibility = 'visible'; 291 document.body.classList.add('css-loaded'); 292 </script>
292 293 <!-- æ§å¶å°æ¥å¿é ç½® - 忥æ§è¡ï¼å¿ é¡»æ©äº core.bundle.jsï¼å¦åæå èæ¬çå¯å¨æ¥å¿å·²ç»æåº --> 294
294<script src="/dist/js/console-config.js"></script>
294 295 296 <!-- 页é¢å è½½å¨ç» --> 297 <div class="page-loader" id="pageLoader" style="display: none;"> 298 <div class="page-loader-spinner"> 299 <i class="fas fa-futbol page-loader-icon"></i> 300 </div> 301 <div class="page-loader-text">XOIGAC.TV</div> 302 </div> 303 304 <!-- é¡¶é¨å¯¼èªæ --> 305 <nav class="navbar navbar-expand-lg navbar-dark fixed-top" id="siteNavbar"> 306 <!-- ç§»å¨ç«¯ PWA å®è£ æ¨ªå¹ (navbarå é¨é¡¶é¨) --> 307 <div id="pwa-top-banner" class="pwa-top-banner d-none"> 308 <button class="pwa-top-banner-close" onclick="closePwaTopBanner()" aria-label="å ³é"> 309 <svg width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><line x1="18" y1="6" x2="6" y2="18"></line><line x1="6" y1="6" x2="18" y2="18"></line></svg> 310 </button> 311 <img src="/images/pwa/apple-touch-icon.png?v=20260923" alt="App" class="pwa-top-banner-icon"> 312 <div class="pwa-top-banner-text"> 313 <strong>Ứng Dụng Xoigac.tv</strong> 314 <span>Xem bóng đá trực tiếp mọi lúc, mọi nơi.</span> 315 </div> 316 <button class="pwa-top-banner-install" onclick="installPwaFromBanner()">Cài Đặt Ngay</button> 317 </div> 318 319 <div class="navbar-container search-collapsed"> 320 <!-- 左侧ï¼Logo --> 321 <a class="navbar-brand d-flex align-items-center" href="/"> 322 <img src="/images/logo-full.webp" alt="XOIGAC" class="brand-logo-full" width="889" height="240" onerror="if(!this.dataset.fallback){this.src='/images/logo-full.png';this.dataset.fallback='true';}"> 323 </a> 324 325 <!-- H5: ç¨æ·æä½åºæ¾å°èå徿 左侧 --> 326 <div class="mobile-user-actions d-lg-none"> 327 <!-- Push éç¥æé® (ç§»å¨ç«¯) --> 328 <button class="btn btn-icon" id="mobile-push-subscribe-btn" data-i18n-title="push.enableNotifications" title="Bật thông báo đẩy" aria-label="Bật thông báo đẩy" style="display: none;"> 329 <i class="fas fa-bell"></i> 330 </button> 331 <button class="btn btn-icon" data-i18n-title="common.favorites" title="Yêu thích" aria-label="Yêu thích" data-auth="false" onclick="handleNavbarFavoriteClick(this)"> 332 <i class="fas fa-star"></i> 333 </button> 334 335 <!-- ç§»å¨ç«¯è¯è¨åæ¢æé® (æ¶èå³ä¾§ï¼åªæ¾ç¤ºå¾æ ) --> 336 <div class="dropdown"> 337 <button class="btn btn-icon dropdown-toggle" type="button" data-bs-toggle="dropdown" data-i18n-title="common.changeLanguage" title="Đổi ngôn ngữ" aria-label="Đổi ngôn ngữ"> 338 <i class="fas fa-globe"></i> 339 </button> 340 <ul class="dropdown-menu dropdown-menu-end"> 341 <li><a class="dropdown-item" href="/set-lang?lang=vi&returnUrl=%2Ftruc-tiep" rel="nofollow" onclick="event.preventDefault(); changeLanguage('vi')"><span class="me-2">ð»ð³</span>Tiếng Viá»t (VI)</a></li> 342 <li><a class="dropdown-item" href="/set-lang?lang=en&returnUrl=%2Ftruc-tiep" rel="nofollow" onclick="event.preventDefault(); changeLanguage('en')"><span class="me-2">ðºð¸</span>English (EN)</a></li> 343 <li><a class="dropdown-item" href="/set-lang?lang=zh&returnUrl=%2Ftruc-tiep" rel="nofollow" onclick="event.preventDefault(); changeLanguage('zh')"><span class="me-2">ð¨ð³</span>䏿 (ZH)</a></li> 344 </ul> 345 </div> 346 347 <a href="javascript:void(0)" onclick="window.AuthModal?.open('login')" class="btn btn-icon" title="ç»å½" aria-label="ç»å½"> 348 <i class="fas fa-user"></i> 349 </a> 350 </div> 351 352 <button class="navbar-toggler" type="button" data-bs-toggle="collapse" data-bs-target="#navbarNav" aria-controls="navbarNav" aria-expanded="false" aria-label="Menu">
353 <span class="navbar-toggler-icon"></span> 354 </button> 355 356 <div class="collapse navbar-collapse" id="navbarNav"> 357 <!-- ç§»å¨ç«¯æç´¢æ¡ --> 358 <div class="mobile-search-box d-lg-none mb-3 mt-2"> 359 <input type="text" 360 id="mobileSearchInput" 361 name="mobileSearchInput" 362 class="mobile-search-input" 363 placeholder="Tìm kiếm đội bóng, giải đấu..." 364 autocomplete="off" /> 365 <button type="button" class="btn btn-search-icon" id="mobileSearchButton" title="Tìm kiếm đội bóng, giải đấu..." aria-label="Tìm kiếm đội bóng, giải đấu..."> 366 <i class="fas fa-search"></i> 367 </button> 368 </div> 369 <ul class="navbar-nav me-auto"> 370 <li class="nav-item"> 371 <a class="nav-link nav-link-icon " href="/"> 372 <svg width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M3 9l9-7 9 7v11a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2z"></path><polyline points="9 22 9 12 15 12 15 22"></polyline></svg> 373 <span>Trang chủ</span> 374 </a> 375 </li> 376 <li class="nav-item"> 377 <a class="nav-link nav-link-icon " href="/truc-tiep"> 378 <svg width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><circle cx="12" cy="12" r="2"></circle><path d="M16.24 7.76a6 6 0 0 1 0 8.49m-8.48-.01a6 6 0 0 1 0-8.49m11.31-2.82a10 10 0 0 1 0 14.14m-14.14 0a10 10 0 0 1 0-14.14"></path></svg> 379 <span>Trực tiếp</span> 380 </a> 381 </li> 382 <li class="nav-item"> 383 <a class="nav-link nav-link-icon " href="/hom-nay"> 384 <svg width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><rect x="3" y="4" width="18" height="18" rx="2" ry="2"></rect><line x1="16" y1="2" x2="16" y2="6"></line><line x1="8" y1="2" x2="8" y2="6"></line><line x1="3" y1="10" x2="21" y2="10"></line></svg> 385 <span>Hôm nay</span> 386 </a> 387 </li> 388 <li class="nav-item"> 389 <a class="nav-link nav-link-icon " href="/lich-thi-dau"> 390 <svg width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><circle cx="12" cy="12" r="10"></circle><polyline points="12 6 12 12 16 14"></polyline></svg> 391 <span>Lịch thi đấu</span> 392 </a> 393 </li> 394 <li class="nav-item"> 395 <a class="nav-link nav-link-icon " href="/tin-tuc-bong-da"> 396 <svg width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M4 22h16a2 2 0 0 0 2-2V4a2 2 0 0 0-2-2H8a2 2 0 0 0-2 2v16a2 2 0 0 1-2 2Zm0 0a2 2 0 0 1-2-2v-9c0-1.1.9-2 2-2h2"></path><path d="M18 14h-8"></path><path d="M15 18h-5"></path><path d="M10 6h8v4h-8V6Z"></path></svg> 397 <span>Tin Tức</span> 398 </a> 399 </li> 400 <li class="nav-item"> 401 <a class="nav-link nav-link-icon " href="/nhan-dinh-bong-da">
402 <svg width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><line x1="18" y1="20" x2="18" y2="10"></line><line x1="12" y1="20" x2="12" y2="4"></line><line x1="6" y1="20" x2="6" y2="14"></line></svg> 403 <span>Nhận Định</span> 404 </a> 405 </li> 406 </ul> 407 408 <!-- PC端æç´¢æ¡ï¼å± å³ï¼å¨ä¸»å 容容å¨å ï¼ --> 409 <div class="search-box d-none d-lg-flex" id="desktopSearchBox"> 410 <svg width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><circle cx="11" cy="11" r="8"></circle><path d="m21 21-4.35-4.35"></path></svg> 411 <input type="text" placeholder="Tìm kiếm đội bóng, giải đấu..." /> 412 </div> 413 414 <!-- æç´¢å¼¹åºæ¡ --> 415 <div class="search-popup" id="searchPopup"> 416 <div class="search-popup-content"> 417 <div class="search-input-wrapper"> 418 <svg width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><circle cx="11" cy="11" r="8"></circle><path d="m21 21-4.35-4.35"></path></svg> 419 <input type="text" placeholder="Tìm kiếm đội bóng, giải đấu..." id="popupSearchInput" /> 420 <button class="btn btn-icon search-close-btn" id="searchCloseBtn" aria-label="Đóng"> 421 <svg width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><line x1="18" y1="6" x2="6" y2="18"></line><line x1="6" y1="6" x2="18" y2="18"></line></svg> 422 </button> 423 </div> 424 </div> 425 </div> 426 427 <!-- PC端ï¼ç¨æ·æä½åºï¼ç§»å ¥å¯¼èªæ 容å¨å é¨ï¼ --> 428 <div class="user-actions d-none d-lg-flex ms-auto"> 429 <!-- Push éç¥æé® (æ¡é¢ç«¯) --> 430 <button class="btn btn-icon" id="push-subscribe-btn" data-i18n-title="push.enableNotifications" title="Bật thông báo đẩy" aria-label="Bật thông báo đẩy" style="display: none;"> 431 <svg width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M18 8A6 6 0 0 0 6 8c0 7-3 9-3 9h18s-3-2-3-9"></path><path d="M13.73 21a2 2 0 0 1-3.46 0"></path></svg> 432 </button> 433 <button class="btn btn-icon" data-i18n-title="common.favorites" title="Yêu thích" aria-label="Yêu thích" data-auth="false" onclick="handleNavbarFavoriteClick(this)"> 434 <svg width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><polygon points="12 2 15.09 8.26 22 9.27 17 14.14 18.18 21.02 12 17.77 5.82 21.02 7 14.14 2 9.27 8.91 8.26 12 2"></polygon></svg> 435 </button> 436 437 <!-- PC端æç´¢å¾æ æé® --> 438 <button class="btn btn-icon search-icon-btn" id="searchIconBtn" type="button" title="Tìm kiếm đội bóng, giải đấu..." aria-label="Tìm kiếm đội bóng, giải đấu..."> 439 <svg width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><circle cx="11" cy="11" r="8"></circle><path d="m21 21-4.35-4.35"></path></svg> 440 </button> 441 442 <!-- PC端è¯è¨åæ¢æé® --> 443 <div class="dropdown"> 444 <button class="btn btn-icon lang-switch-btn" type="button" data-bs-toggle="dropdown" data-i18n-title="common.changeLanguage" title="Đổi ngôn ngữ" aria-label="Đổi ngôn ngữ">
445 <svg width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="me-1"><circle cx="12" cy="12" r="10"></circle><line x1="2" y1="12" x2="22" y2="12"></line><path d="M12 2a15.3 15.3 0 0 1 4 10 15.3 15.3 0 0 1-4 10 15.3 15.3 0 0 1-4-10 15.3 15.3 0 0 1 4-10z"></path></svg> 446 <span>VI</span> 447 </button> 448 <ul class="dropdown-menu dropdown-menu-end"> 449 <li><a class="dropdown-item" href="/set-lang?lang=vi&returnUrl=%2Ftruc-tiep" rel="nofollow" onclick="event.preventDefault(); changeLanguage('vi')"><span class="me-2">ð»ð³</span>Tiếng Viá»t (VI)</a></li> 450 <li><a class="dropdown-item" href="/set-lang?lang=en&returnUrl=%2Ftruc-tiep" rel="nofollow" onclick="event.preventDefault(); changeLanguage('en')"><span class="me-2">ðºð¸</span>English (EN)</a></li> 451 <li><a class="dropdown-item" href="/set-lang?lang=zh&returnUrl=%2Ftruc-tiep" rel="nofollow" onclick="event.preventDefault(); changeLanguage('zh')"><span class="me-2">ð¨ð³</span>䏿 (ZH)</a></li> 452 </ul> 453 </div> 454 455 <a href="javascript:void(0)" onclick="window.AuthModal?.open('login')" class="btn btn-primary btn-sm ms-2"> 456 <svg width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="me-1"><path d="M19 21v-2a4 4 0 0 0-4-4H9a4 4 0 0 0-4 4v2"></path><circle cx="12" cy="7" r="4"></circle></svg> 457 <span>Đăng nhập</span> 458 </a> 459 </div> 460 461 </div> 462 </div> 463 </nav> 464 <div class="mobile-menu-overlay" id="mobileMenuOverlay" aria-hidden="true"></div> 465 466 <!-- 主å å®¹åº --> 467 <input name="__RequestVerificationToken" type="hidden" value="CfDJ8IwpNTNw2w9OptYg9zhENLSarm6ZM2U9J24KjyTq2TyYScz-Y3gaBfvKiKwMM_qBOj1CEl5coY873_Wo2b1oeZaDibozXqHysnsq5F2M6t1sq-oNSg6urR3gFCMVCiaXmFDteyt1QWB6sXa33SWwTno" /> 468 <div id="articleGridSkeletonTemplate" hidden> 469 <div class="ags" aria-hidden="true"> 470 <div class="ags-banners"> 471 <div class="ags-banner ags-shimmer"></div> 472 <div class="ags-banner ags-shimmer"></div> 473 <div class="ags-banner ags-shimmer"></div> 474 </div> 475 476 <div class="ags-body"> 477 <div class="ags-page-title ags-shimmer"></div> 478 479 <section class="ags-hero"> 480 <div class="ags-hero-media ags-shimmer"></div> 481 <div class="ags-hero-body"> 482 <div class="ags-line ags-line-title ags-shimmer"></div> 483 <div class="ags-line ags-line-title ags-line-short ags-shimmer"></div> 484 <div class="ags-line ags-shimmer"></div> 485 <div class="ags-line ags-line-mid ags-shimmer"></div> 486 <div class="ags-actions"> 487 <div class="ags-btn ags-shimmer"></div> 488 <div class="ags-btn ags-shimmer"></div> 489 </div> 490 </div> 491 </section> 492 493 <div class="ags-latest"> 494 <div class="ags-line ags-line-heading ags-shimmer"></div> 495 <div class="ags-search ags-shimmer"></div> 496 </div> 497 498 <div class="ags-grid"> 499 <div class="ags-card"> 500 <div class="ags-card-image ags-shimmer"></div> 501 <div class="ags-card-body"> 502 <div class="ags-line ags-shimmer"></div> 503 <div class="ags-line ags-line-mid ags-shimmer"></div> 504 <div class="ags-card-footer"> 505 <div class="ags-author"> 506 <div class="ags-avatar ags-shimmer"></div> 507 <div class="ags-line ags-line-meta ags-shimmer"></div> 508 </div> 509 <div class="ags-line ags-line-date ags-shimmer"></div> 510 </div> 511 </div> 512 </div> 513 <div class="ags-card"> 514 <div class="ags-card-image ags-shimmer"></div> 515 <div class="ags-card-body"> 516 <div class="ags-line ags-shimmer"></div> 517 <div class="ags-line ags-line-mid ags-shimmer"></div> 518 <div class="ags-card-footer"> 519 <div class="ags-author"> 520 <div class="ags-avatar ags-shimmer"></div> 521 <div class="ags-line ags-line-meta ags-shimmer"></div> 522 </div> 523 <div class="ags-line ags-line-date ags-shimmer"></div> 524 </div> 525 </div> 526 </div> 527 <div class="ags-card"> 528 <div class="ags-card-image ags-shimmer"></div> 529 <div class="ags-card-body"> 530 <div class="ags-line ags-shimmer"></div> 531 <div class="ags-line ags-line-mid ags-shimmer"></div> 532 <div class="ags-card-footer"> 533 <div class="ags-author"> 534 <div class="ags-avatar ags-shimmer"></div> 535 <div class="ags-line ags-line-meta ags-shimmer"></div> 536 </div> 537 <div class="ags-line ags-line-date ags-shimmer"></div> 538 </div> 539 </div> 540 </div> 541 <div class="ags-card"> 542 <div class="ags-card-image ags-shimmer"></div> 543 <div class="ags-card-body"> 544 <div class="ags-line ags-shimmer"></div> 545 <div class="ags-line ags-line-mid ags-shimmer"></div> 546 <div class="ags-card-footer"> 547 <div class="ags-author"> 548 <div class="ags-avatar ags-shimmer"></div> 549 <div class="ags-line ags-line-meta ags-shimmer"></div> 550 </div> 551 <div class="ags-line ags-line-date ags-shimmer"></div> 552 </div> 553 </div> 554 </div> 555 <div class="ags-card"> 556 <div class="ags-card-image ags-shimmer"></div> 557 <div class="ags-card-body"> 558 <div class="ags-line ags-shimmer"></div> 559 <div class="ags-line ags-line-mid ags-shimmer"></div> 560 <div class="ags-card-footer"> 561 <div class="ags-author"> 562 <div class="ags-avatar ags-shimmer"></div> 563 <div class="ags-line ags-line-meta ags-shimmer"></div> 564 </div> 565 <div class="ags-line ags-line-date ags-shimmer"></div> 566 </div> 567 </div> 568 </div> 569 <div class="ags-card"> 570 <div class="ags-card-image ags-shimmer"></div> 571 <div class="ags-card-body"> 572 <div class="ags-line ags-shimmer"></div> 573 <div class="ags-line ags-line-mid ags-shimmer"></div> 574 <div class="ags-card-footer"> 575 <div class="ags-author"> 576 <div class="ags-avatar ags-shimmer"></div> 577 <div class="ags-line ags-line-meta ags-shimmer"></div> 578 </div> 579 <div class="ags-line ags-line-date ags-shimmer"></div> 580 </div> 581 </div> 582 </div> 583 <div class="ags-card"> 584 <div class="ags-card-image ags-shimmer"></div> 585 <div class="ags-card-body"> 586 <div class="ags-line ags-shimmer"></div> 587 <div class="ags-line ags-line-mid ags-shimmer"></div> 588 <div class="ags-card-footer"> 589 <div class="ags-author"> 590 <div class="ags-avatar ags-shimmer"></div> 591 <div class="ags-line ags-line-meta ags-shimmer"></div> 592 </div> 593 <div class="ags-line ags-line-date ags-shimmer"></div> 594 </div> 595 </div> 596 </div> 597 <div class="ags-card"> 598 <div class="ags-card-image ags-shimmer"></div> 599 <div class="ags-card-body"> 600 <div class="ags-line ags-shimmer"></div> 601 <div class="ags-line ags-line-mid ags-shimmer"></div> 602 <div class="ags-card-footer"> 603 <div class="ags-author"> 604 <div class="ags-avatar ags-shimmer"></div> 605 <div class="ags-line ags-line-meta ags-shimmer"></div> 606 </div> 607 <div class="ags-line ags-line-date ags-shimmer"></div> 608 </div> 609 </div> 610 </div> 611 <div class="ags-card"> 612 <div class="ags-card-image ags-shimmer"></div> 613 <div class="ags-card-body"> 614 <div class="ags-line ags-shimmer"></div> 615 <div class="ags-line ags-line-mid ags-shimmer"></div> 616 <div class="ags-card-footer"> 617 <div class="ags-author"> 618 <div class="ags-avatar ags-shimmer"></div> 619 <div class="ags-line ags-line-meta ags-shimmer"></div> 620 </div> 621 <div class="ags-line ags-line-date ags-shimmer"></div> 622 </div> 623 </div> 624 </div> 625 <div class="ags-card"> 626 <div class="ags-card-image ags-shimmer"></div> 627 <div class="ags-card-body"> 628 <div class="ags-line ags-shimmer"></div> 629 <div class="ags-line ags-line-mid ags-shimmer"></div> 630 <div class="ags-card-footer"> 631 <div class="ags-author"> 632 <div class="ags-avatar ags-shimmer"></div> 633 <div class="ags-line ags-line-meta ags-shimmer"></div> 634 </div> 635 <div class="ags-line ags-line-date ags-shimmer"></div> 636 </div> 637 </div> 638 </div> 639 <div class="ags-card"> 640 <div class="ags-card-image ags-shimmer"></div> 641 <div class="ags-card-body"> 642 <div class="ags-line ags-shimmer"></div> 643 <div class="ags-line ags-line-mid ags-shimmer"></div> 644 <div class="ags-card-footer"> 645 <div class="ags-author"> 646 <div class="ags-avatar ags-shimmer"></div> 647 <div class="ags-line ags-line-meta ags-shimmer"></div> 648 </div> 649 <div class="ags-line ags-line-date ags-shimmer"></div> 650 </div> 651 </div> 652 </div> 653 <div class="ags-card"> 654 <div class="ags-card-image ags-shimmer"></div> 655 <div class="ags-card-body"> 656 <div class="ags-line ags-shimmer"></div> 657 <div class="ags-line ags-line-mid ags-shimmer"></div> 658 <div class="ags-card-footer"> 659 <div class="ags-author"> 660 <div class="ags-avatar ags-shimmer"></div> 661 <div class="ags-line ags-line-meta ags-shimmer"></div> 662 </div> 663 <div class="ags-line ags-line-date ags-shimmer"></div> 664 </div> 665 </div> 666 </div> 667 <div class="ags-card"> 668 <div class="ags-card-image ags-shimmer"></div> 669 <div class="ags-card-body"> 670 <div class="ags-line ags-shimmer"></div> 671 <div class="ags-line ags-line-mid ags-shimmer"></div> 672 <div class="ags-card-footer"> 673 <div class="ags-author"> 674 <div class="ags-avatar ags-shimmer"></div> 675 <div class="ags-line ags-line-meta ags-shimmer"></div> 676 </div> 677 <div class="ags-line ags-line-date ags-shimmer"></div> 678 </div> 679 </div> 680 </div> 681 <div class="ags-card"> 682 <div class="ags-card-image ags-shimmer"></div> 683 <div class="ags-card-body"> 684 <div class="ags-line ags-shimmer"></div> 685 <div class="ags-line ags-line-mid ags-shimmer"></div> 686 <div class="ags-card-footer"> 687 <div class="ags-author"> 688 <div class="ags-avatar ags-shimmer"></div> 689 <div class="ags-line ags-line-meta ags-shimmer"></div> 690 </div> 691 <div class="ags-line ags-line-date ags-shimmer"></div> 692 </div> 693 </div> 694 </div> 695 <div class="ags-card"> 696 <div class="ags-card-image ags-shimmer"></div> 697 <div class="ags-card-body"> 698 <div class="ags-line ags-shimmer"></div> 699 <div class="ags-line ags-line-mid ags-shimmer"></div> 700 <div class="ags-card-footer"> 701 <div class="ags-author"> 702 <div class="ags-avatar ags-shimmer"></div> 703 <div class="ags-line ags-line-meta ags-shimmer"></div> 704 </div> 705 <div class="ags-line ags-line-date ags-shimmer"></div> 706 </div> 707 </div> 708 </div> 709 <div class="ags-card"> 710 <div class="ags-card-image ags-shimmer"></div> 711 <div class="ags-card-body"> 712 <div class="ags-line ags-shimmer"></div> 713 <div class="ags-line ags-line-mid ags-shimmer"></div> 714 <div class="ags-card-footer"> 715 <div class="ags-author"> 716 <div class="ags-avatar ags-shimmer"></div> 717 <div class="ags-line ags-line-meta ags-shimmer"></div> 718 </div> 719 <div class="ags-line ags-line-date ags-shimmer"></div> 720 </div> 721 </div> 722 </div> 723 <div class="ags-card"> 724 <div class="ags-card-image ags-shimmer"></div> 725 <div class="ags-card-body"> 726 <div class="ags-line ags-shimmer"></div> 727 <div class="ags-line ags-line-mid ags-shimmer"></div> 728 <div class="ags-card-footer"> 729 <div class="ags-author"> 730 <div class="ags-avatar ags-shimmer"></div> 731 <div class="ags-line ags-line-meta ags-shimmer"></div> 732 </div> 733 <div class="ags-line ags-line-date ags-shimmer"></div> 734 </div> 735 </div> 736 </div> 737 <div class="ags-card"> 738 <div class="ags-card-image ags-shimmer"></div> 739 <div class="ags-card-body"> 740 <div class="ags-line ags-shimmer"></div> 741 <div class="ags-line ags-line-mid ags-shimmer"></div> 742 <div class="ags-card-footer"> 743 <div class="ags-author"> 744 <div class="ags-avatar ags-shimmer"></div> 745 <div class="ags-line ags-line-meta ags-shimmer"></div> 746 </div> 747 <div class="ags-line ags-line-date ags-shimmer"></div> 748 </div> 749 </div> 750 </div> 751 <div class="ags-card"> 752 <div class="ags-card-image ags-shimmer"></div> 753 <div class="ags-card-body"> 754 <div class="ags-line ags-shimmer"></div> 755
755 <div class="ags-line ags-line-mid ags-shimmer"></div> 756 <div class="ags-card-footer"> 757 <div class="ags-author"> 758 <div class="ags-avatar ags-shimmer"></div> 759 <div class="ags-line ags-line-meta ags-shimmer"></div> 760 </div> 761 <div class="ags-line ags-line-date ags-shimmer"></div> 762 </div> 763 </div> 764 </div> 765 <div class="ags-card"> 766 <div class="ags-card-image ags-shimmer"></div> 767 <div class="ags-card-body"> 768 <div class="ags-line ags-shimmer"></div> 769 <div class="ags-line ags-line-mid ags-shimmer"></div> 770 <div class="ags-card-footer"> 771 <div class="ags-author"> 772 <div class="ags-avatar ags-shimmer"></div> 773 <div class="ags-line ags-line-meta ags-shimmer"></div> 774 </div> 775 <div class="ags-line ags-line-date ags-shimmer"></div> 776 </div> 777 </div> 778 </div> 779 </div> 780 </div> 781</div> 782 783<style> 784 .ags-shimmer { 785 position: relative; 786 overflow: hidden;
787 background: rgba(30, 41, 59, 0.6); 788 border-radius: 12px; 789 } 790 791 .ags-shimmer::after { 792 content: ""; 793 position: absolute; 794 inset: 0; 795 background: linear-gradient(90deg, transparent, rgba(148, 163, 184, 0.22), transparent); 796 transform: translateX(-100%); 797 animation: ags-pulse 1.4s ease-in-out infinite; 798 } 799 800 .ags-banners { 801 display: flex; 802 flex-direction: column; 803 gap: 10px; 804 margin: 16px auto; 805 padding: 0 2px; 806 } 807 808 .ags-banner { 809 width: 100%; 810 aspect-ratio: 2872 / 180; 811 border-radius: 12px; 812 } 813 814 .ags-body { 815 max-width: 1500px; 816 margin: 0 auto; 817 padding: 1rem 2rem 0; 818 } 819 820 .ags-page-title { 821 width: min(420px, 55%); 822 height: 2.1rem; 823 margin-bottom: 1.5rem; 824 } 825 826 .ags-hero { 827 display: grid; 828 grid-template-columns: minmax(0, 0.95fr) minmax(0, 1.05fr); 829 height: 370px; 830 margin-bottom: 32px; 831 border-radius: 16px; 832 overflow: hidden; 833 background: #0c1929; 834 } 835 836 .ags-hero-media { 837 height: 100%; 838 border-radius: 0; 839 } 840 841 .ags-hero-body { 842 display: flex; 843 flex-direction: column; 844 justify-content: center; 845 gap: 12px; 846 padding: 32px; 847 } 848 849 .ags-line { 850 height: 14px; 851 width: 100%; 852 } 853 854 .ags-line-title { 855 height: 22px; 856 } 857 858 .ags-line-short { 859 width: 72%; 860 } 861 862 .ags-line-mid { 863 width: 84%; 864 } 865 866 .ags-line-heading { 867 width: 180px; 868 height: 22px; 869 } 870 871 .ags-actions { 872 display: flex; 873 gap: 12px; 874 margin-top: 8px; 875 } 876 877 .ags-btn { 878 width: 128px; 879 height: 40px; 880 border-radius: 999px; 881 } 882 883 .ags-latest { 884 display: flex; 885 align-items: center; 886 justify-content: space-between; 887 gap: 16px; 888 height: 42px; 889 margin-bottom: 20px; 890 } 891 892 .ags-search { 893 width: 240px; 894 height: 40px; 895 border-radius: 10px; 896 } 897 898 .ags-grid { 899 display: grid; 900 grid-template-columns: repeat(4, minmax(0, 1fr)); 901 gap: 1.5rem; 902 } 903 904 .ags-card { 905 border-radius: 20px; 906 overflow: hidden; 907 background: #0c1929; 908 border: 1px solid rgba(14, 165, 233, 0.08); 909 display: flex; 910 flex-direction: column; 911 } 912 913 .ags-card-image { 914 height: 220px; 915 border-radius: 0; 916 flex-shrink: 0; 917 } 918 919 .ags-card-body { 920 display: flex; 921 flex-direction: column; 922 padding: 1.25rem 1.5rem 1.5rem; 923 } 924 925 .ags-card-body > .ags-line:first-child { 926 height: calc(1.1rem * 1.5 * 2); 927 margin-bottom: 0.75rem; 928 } 929 930 .ags-card-body > .ags-line:nth-child(2) { 931 height: calc(0.9rem * 1.6 * 2); 932 margin-bottom: 1rem; 933 } 934 935 .ags-card-footer { 936 display: flex; 937 align-items: center; 938 justify-content: space-between; 939 margin-top: 6px; 940 padding-top: 12px; 941 } 942 943 .ags-author { 944 display: flex; 945 align-items: center; 946 gap: 8px; 947 } 948 949 .ags-avatar { 950 width: 28px; 951 height: 28px; 952 border-radius: 50%; 953 flex-shrink: 0; 954 } 955 956 .ags-line-meta { 957 width: 72px; 958 height: 12px; 959 } 960 961 .ags-line-date { 962 width: 52px; 963 height: 12px; 964 } 965 966 @media (min-width: 1920px) { 967 .ags-body { padding-left: 4rem; padding-right: 4rem; } 968 } 969 970 @media (min-width: 2560px) { 971 .ags-body { padding-left: 6rem; padding-right: 6rem; } 972 } 973 974 @media (max-width: 1400px) { 975 .ags-grid { grid-template-columns: repeat(3, minmax(0, 1fr)); } 976 } 977 978 @media (max-width: 1200px) { 979 .ags-hero { height: 335px; } 980 } 981 982 @media (max-width: 992px) { 983 .ags-hero { height: 290px; } 984 .ags-body { padding-left: 0.5rem; padding-right: 0.5rem; } 985 } 986 987 @media (max-width: 768px) { 988 .ags-banners { 989 gap: 4px; 990 margin: 10px 0 0; 991 padding: 0; 992 } 993 .ags-banner { 994 aspect-ratio: 440 / 50; 995 border-radius: 10px; 996 } 997 .ags-hero { display: none; } 998 .ags-grid { grid-template-columns: repeat(2, minmax(0, 1fr)); } 999 .ags-card-image { height: 180px; } 1000 .ags-latest { flex-wrap: wrap; align-items: stretch; height: 86px; row-gap: 12px; } 1001 .ags-search { width: 100%; height: 38px; } 1002 } 1003 1004 @media (max-width: 576px) { 1005 .ags-grid { grid-template-columns: 1fr; } 1006 } 1007
1008 @keyframes ags-pulse { 1009 0% { transform: translateX(-100%); } 1010 100% { transform: translateX(100%); } 1011 } 1012 1013 @media (prefers-reduced-motion: reduce) { 1014 .ags-shimmer::after { animation: none; } 1015 } 1016</style> 1017 1018 </div> 1019 <main id="main-content" class="main-content"> 1020 1021<style> 1022 .match-list-page.container-fluid { 1023 font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', 'Inter', 'Roboto', sans-serif; 1024 -webkit-font-smoothing: antialiased; 1025 max-width: 1200px; 1026 margin: 0 auto; 1027 } 1028 1029 /* ===== SVG 徿 åºç¡ ===== */ 1030 .icon { 1031 width: 1em; height: 1em; 1032 display: inline-block; 1033 vertical-align: -0.125em; 1034 fill: currentColor; 1035 stroke: currentColor; 1036 flex-shrink: 0; 1037 } 1038 .icon-empty { 1039 width: 2.5rem; height: 2.5rem; 1040 } 1041 1042 /* ===== çéæ ===== */ 1043 .filter-bar { 1044 padding: 12px 16px; 1045 position: sticky; 1046 top: 0; 1047 z-index: 100; 1048 background: var(--bg-body, #0d1117); 1049 } 1050 .filter-bar-row { 1051 display: flex; 1052 align-items: center; 1053 justify-content: space-between; 1054 gap: 12px; 1055 } 1056 .filter-tabs-row { 1057 display: flex; 1058 gap: 8px; 1059 overflow-x: auto; 1060 scrollbar-width: none; 1061 flex: 1; 1062 min-width: 0; 1063 } 1064 .filter-tabs-row::-webkit-scrollbar { display: none; } 1065 .filter-pill { 1066 display: inline-flex; 1067 align-items: center; 1068 gap: 6px; 1069 padding: 7px 16px; 1070 border-radius: 20px; 1071 font-size: 0.8125rem; 1072 font-weight: 600; 1073 text-decoration: none; 1074 white-space: nowrap; 1075 transition: all 0.2s; 1076 background: rgba(255,255,255,0.06); 1077 color: rgba(255,255,255,0.7); 1078 border: 1px solid rgba(255,255,255,0.08); 1079 } 1080 .filter-pill:hover { 1081 background: rgba(255,255,255,0.1); 1082 color: #fff; 1083 } 1084 .filter-pill.active { 1085 background: #22c55e; 1086 color: #fff; 1087 border-color: #22c55e; 1088 } 1089 .filter-pill .live-indicator-dot { 1090 width: 10px; height: 10px; 1091 background: #22c55e; 1092 border-radius: 50%; 1093 animation: livePulse 1.5s infinite; 1094 box-shadow: 0 0 6px rgba(34, 197, 94, 0.6); 1095 } 1096 .filter-pill.active .live-indicator-dot { 1097 background: #fff; 1098 box-shadow: 0 0 6px rgba(255, 255, 255, 0.6); 1099 } 1100 .pill-count { 1101 background: rgba(255,255,255,0.2); 1102 padding: 1px 7px; 1103 border-radius: 10px; 1104 font-size: 0.6875rem; 1105 } 1106 1107 /* ===== èèµåºå ===== */ 1108 .lg-section { 1109 border-bottom: 1px solid rgba(255,255,255,0.06); 1110 } 1111 .lg-header { 1112 display: flex; 1113 align-items: center; 1114 justify-content: space-between; 1115 padding: 10px 16px; 1116 background: rgba(255,255,255,0.03); 1117 border-bottom: 1px solid rgba(255,255,255,0.06); 1118 } 1119 .lg-header-left { 1120 display: flex; 1121 align-items: center; 1122 gap: 8px; 1123 min-width: 0; 1124 } 1125 .lg-fav-btn { 1126 background: none; 1127 border: none; 1128 color: rgba(255,255,255,0.3); 1129 padding: 4px; 1130 cursor: pointer; 1131 flex-shrink: 0; 1132 } 1133 .lg-fav-btn .icon { width: 14px; height: 14px; } 1134 .lg-fav-btn:hover { color: #fbbf24; } 1135 .lg-country-name { 1136 font-size: 0.8125rem; 1137 font-weight: 600; 1138 color: rgba(255,255,255,0.9); 1139 text-transform: uppercase; 1140 letter-spacing: 0.02em; 1141 white-space: nowrap; 1142 } 1143 .lg-logo { 1144 width: 20px; height: 20px; 1145 object-fit: contain; 1146 flex-shrink: 0; 1147 } 1148 .lg-name { 1149 font-size: 0.8125rem; 1150 font-weight: 600; 1151 color: rgba(255,255,255,0.9); 1152 white-space: nowrap; 1153 overflow: hidden; 1154 text-overflow: ellipsis; 1155 } 1156 .lg-header-right { 1157 display: flex; 1158 align-items: center; 1159 gap: 12px; 1160 flex-shrink: 0; 1161 } 1162 .lg-collapse-btn { 1163 background: none; 1164 border: none; 1165 color: rgba(255,255,255,0.4); 1166 padding: 4px 6px; 1167 cursor: pointer; 1168 transition: transform 0.2s; 1169 } 1170 .lg-collapse-btn .icon { width: 14px; height: 14px; } 1171 .lg-collapse-btn:hover { color: rgba(255,255,255,0.7); } 1172
1173 /* ===== æ¯èµè¡ï¼åè¡å¸å±ï¼ ===== */ 1174 .mx-row { 1175 display: flex; 1176 align-items: center; 1177 padding: 8px 16px; 1178 border-bottom: 1px solid rgba(255,255,255,0.04); 1179 gap: 12px; 1180 transition: background 0.15s; 1181 } 1182 .mx-row:last-child { border-bottom: none; } 1183 .mx-row:hover { background: rgba(255,255,255,0.03); } 1184 .mx-row.is-live { 1185 background: rgba(34, 197, 94, 0.04); 1186 } 1187 .mx-row.is-live:hover { 1188 background: rgba(34, 197, 94, 0.07); 1189 } 1190 .mx-row.is-finished { opacity: 0.65; } 1191 .mx-row.is-finished:hover { opacity: 1; } 1192 1193 /* å·¦ä¾§ï¼æ¶è+ç¶æ */ 1194 .mx-left { 1195 display: flex; 1196 align-items: center; 1197 gap: 8px; 1198 flex-shrink: 0; 1199 width: 100px; 1200 } 1201 .mx-fav-btn { 1202 background: none; 1203 border: none; 1204 color: rgba(255,255,255,0.25); 1205 padding: 4px; 1206 cursor: pointer; 1207 flex-shrink: 0; 1208 } 1209 .mx-fav-btn .icon { width: 16px; height: 16px; } 1210 .mx-fav-btn:hover, .mx-fav-btn.active { color: #fbbf24; } 1211 .mx-status { 1212 display: flex; 1213 flex-direction: column; 1214 align-items: center; 1215 gap: 2px; 1216 min-width: 50px; 1217 } 1218 .mx-status-badge { 1219 font-size: 0.6875rem; 1220 font-weight: 700; 1221 padding: 2px 6px; 1222 border-radius: 4px; 1223 text-transform: uppercase; 1224 letter-spacing: 0.03em; 1225 } 1226 .mx-status-badge.live { 1227 background: rgba(239, 68, 68, 0.15); 1228 color: #ef4444; 1229 animation: liveGlow 2s infinite; 1230 } 1231 .mx-status-badge.finished { background: rgba(107,114,128,0.15); color: #9ca3af; } 1232 .mx-status-badge.ht { background: rgba(251,191,36,0.15); color: #f59e0b; } 1233 .mx-status-badge.postponed, .mx-status-badge.suspended, .mx-status-badge.interrupted { 1234 background: rgba(239,68,68,0.1); color: #ef4444; 1235 } 1236 .mx-status-badge.aet, .mx-status-badge.pen { 1237 background: rgba(139,92,246,0.15); color: #8b5cf6; 1238 } 1239 .mx-minute { 1240 color: #ef4444; 1241 font-size: 0.8125rem; 1242 font-weight: 700; 1243 font-variant-numeric: tabular-nums; 1244 } 1245 .mx-minute .minute-tick { 1246 display: inline-block; 1247 animation: minuteTickJitter 1s infinite; 1248 } 1249 .mx-time { 1250 font-size: 0.8125rem; 1251 font-weight: 600; 1252 color: rgba(255,255,255,0.85); 1253 font-variant-numeric: tabular-nums; 1254 } 1255 .mx-date { 1256 font-size: 0.6875rem; 1257 color: rgba(255,255,255,0.45); 1258 } 1259 1260 /* ä¸é´ï¼çéåè¡ */ 1261 .mx-center { 1262 flex: 1; 1263 min-width: 0; 1264 display: flex; 1265 flex-direction: column; 1266 gap: 4px; 1267 color: inherit; 1268 } 1269 .mx-teams-link { 1270 display: flex; 1271 flex-direction: column; 1272 gap: 4px; 1273 text-decoration: none; 1274 color: inherit; 1275 } 1276 .mx-teams-link:hover { color: inherit; } 1277 .mx-team-row { 1278 display: flex; 1279 align-items: center; 1280 gap: 10px; 1281 } 1282 .mx-team-logo { 1283 width: 22px; height: 22px; 1284 object-fit: contain; 1285 flex-shrink: 0; 1286 border-radius: 2px; 1287 } 1288 .mx-team-name { 1289 flex: 1; 1290 font-size: 0.8125rem; 1291 font-weight: 500; 1292 color: rgba(255,255,255,0.9); 1293 white-space: nowrap; 1294 overflow: hidden; 1295 text-overflow: ellipsis; 1296 } 1297 .mx-score { 1298 font-size: 0.9375rem; 1299 font-weight: 700; 1300 min-width: 22px; 1301 text-align: center; 1302 color: rgba(255,255,255,0.9); 1303 font-variant-numeric: tabular-nums; 1304 } 1305 .mx-score.live { 1306 color: #ef4444; 1307 } 1308 1309 /* å³ä¾§ï¼ä¸»ææ ç¾ + åè½æé® */ 1310 .mx-right { 1311 display: flex; 1312 align-items: center; 1313 justify-content: flex-end; 1314 gap: 8px; 1315 flex-shrink: 0; 1316 max-width: 48%; 1317 } 1318 .mx-streamers { 1319 display: flex; 1320 flex-wrap: wrap; 1321 justify-content: flex-end; 1322 align-items: center; 1323 gap: 4px; 1324 max-width: 220px; 1325 } 1326 .mx-action-btn { 1327 display: inline-flex; 1328 align-items: center; 1329 gap: 4px; 1330 padding: 4px 10px; 1331 border-radius: 4px; 1332 font-size: 0.6875rem; 1333 font-weight: 600; 1334 text-decoration: none; 1335 text-transform: uppercase; 1336 letter-spacing: 0.03em; 1337 transition: all 0.15s; 1338 white-space: nowrap; 1339 } 1340 .preview-btn { 1341 background: rgba(255,255,255,0.08); 1342 color: rgba(255,255,255,0.7); 1343 border: 1px solid rgba(255,255,255,0.12); 1344 } 1345 .preview-btn:hover { 1346 background: rgba(255,255,255,0.14); 1347 color: #fff; 1348 } 1349 .live-btn { 1350 background: rgba(34, 197, 94, 0.15); 1351 color: #22c55e; 1352 border: 1px solid rgba(34, 197, 94, 0.3); 1353 } 1354 .live-btn .icon { width: 12px; height: 12px; } 1355 .live-btn:hover { 1356 background: rgba(34, 197, 94, 0.25); 1357 color: #4ade80; 1358 } 1359 1360 .schedule-sport-section { 1361 margin-top: 8px; 1362 } 1363 .schedule-category-dropdown { 1364 flex-shrink: 0; 1365 } 1366 .schedule-category-select { 1367 appearance: none; 1368 -webkit-appearance: none; 1369 min-width: 132px; 1370 max-width: 168px; 1371 padding: 7px 32px 7px 14px; 1372 border-radius: 20px; 1373 border: 1px solid rgba(255,255,255,0.12); 1374 background: rgba(255,255,255,0.08) url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='12' height='12' viewBox='0 0 24 24' fill='none' stroke='%23ffffff' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpolyline points='6 9 12 15 18 9'/%3E%3C/svg%3E") no-repeat right 12px center; 1375 color: rgba(255,255,255,0.92); 1376 font-size: 0.8125rem; 1377 font-weight: 600; 1378 cursor: pointer; 1379 transition: background 0.15s ease, border-color 0.15s ease; 1380 } 1381 button.schedule-category-select { 1382 display: inline-flex; 1383 align-items: center; 1384 font-family: inherit; 1385 line-height: 1.2; 1386 text-align: left; 1387 } 1388 .schedule-category-select:hover, 1389 .schedule-category-select:focus, 1390 .schedule-category-select:focus-visible { 1391 background-color: rgba(255,255,255,0.12); 1392 border-color: rgba(34, 197, 94, 0.45); 1393 outline: none; 1394 } 1395 .visually-hidden { 1396 position: absolute; 1397 width: 1px; 1398 height: 1px; 1399 padding: 0; 1400 margin: -1px; 1401 overflow: hidden; 1402 clip: rect(0, 0, 0, 0); 1403 white-space: nowrap; 1404 border: 0; 1405 } 1406 .schedule-sport-title-inline { 1407 padding-top: 0; 1408 } 1409 .beauty-schedule-list { 1410 display: flex; 1411 flex-direction: column; 1412 gap: 0; 1413 border-top: 1px solid rgba(255,255,255,0.06); 1414 } 1415 .beauty-schedule-row { 1416 display: flex; 1417 align-items: center; 1418 gap: 12px; 1419 padding: 10px 16px; 1420 border-bottom: 1px solid rgba(255,255,255,0.04); 1421 } 1422 .beauty-schedule-row.is-live { 1423 background: rgba(34, 197, 94, 0.04); 1424 } 1425 .beauty-schedule-main { 1426 flex: 1; 1427 min-width: 0; 1428 display: flex; 1429 align-items: center; 1430 gap: 12px; 1431 text-decoration: none; 1432 color: inherit; 1433 } 1434 .beauty-schedule-avatar-wrap { flex-shrink: 0; } 1435 .beauty-schedule-avatar { 1436 width: 40px; 1437 height: 40px; 1438 border-radius: 50%; 1439 object-fit: cover; 1440 } 1441 .beauty-schedule-avatar-fallback { 1442 display: flex; 1443 align-items: center; 1444 justify-content: center; 1445 background: rgba(34, 197, 94, 0.2); 1446 color: #86efac; 1447 font-weight: 700; 1448 } 1449 .beauty-schedule-title { 1450 font-size: 0.875rem; 1451 font-weight: 600; 1452 color: rgba(255,255,255,0.92); 1453 } 1454 .beauty-schedule-streamer { 1455 font-size: 0.75rem; 1456 color: #86efac; 1457 margin-top: 2px; 1458 } 1459 .beauty-schedule-category { 1460 font-size: 0.6875rem; 1461 color: rgba(255,255,255,0.45); 1462 margin-top: 2px; 1463 } 1464 .beauty-schedule-meta { 1465 display: flex; 1466 flex-direction: column; 1467 align-items: flex-end; 1468 gap: 4px; 1469 flex-shrink: 0; 1470 } 1471 .beauty-schedule-time { 1472 font-size: 0.75rem; 1473 color: rgba(255,255,255,0.65); 1474 } 1475 .beauty-schedule-live-badge { 1476 font-size: 0.625rem; 1477 font-weight: 700; 1478 color: #ef4444; 1479 } 1480 .beauty-schedule-actions { 1481 display: flex; 1482 gap: 6px; 1483 flex-shrink: 0; 1484 } 1485 .schedule-sport-title { 1486 font-size: 1rem; 1487 font-weight: 700; 1488 color: rgba(255,255,255,0.92); 1489 padding: 12px 16px 8px; 1490 margin: 0; 1491 border-bottom: 1px solid rgba(255,255,255,0.06); 1492 } 1493 .schedule-sport-empty { 1494 padding: 24px 16px; 1495 color: rgba(255,255,255,0.55); 1496 font-size: 0.875rem; 1497 text-align: center; 1498 } 1499 .mx-streamer-badge { 1500 display: inline-flex; 1501 align-items: center; 1502 padding: 2px 8px; 1503 border-radius: 999px; 1504 font-size: 0.625rem; 1505 font-weight: 700; 1506 letter-spacing: 0.02em; 1507 color: #86efac; 1508 background: rgba(34, 197, 94, 0.12); 1509 border: 1px solid rgba(34, 197, 94, 0.22); 1510 white-space: nowrap; 1511 text-decoration: none; 1512 transition: background 0.15s, border-color 0.15s, color 0.15s; 1513 } 1514 a.mx-streamer-badge:hover { 1515 color: #bbf7d0; 1516 background: rgba(34, 197, 94, 0.22); 1517 border-color: rgba(34, 197, 94, 0.45); 1518 } 1519 .mx-streamer-badge-static { 1520 cursor: default; 1521 } 1522 .mx-streamer-badge.mx-streamer-badge-live { 1523 color: #A78BFA; 1524 background: linear-gradient(135deg, rgba(167, 139, 250, 0.18) 0%, rgba(139, 92, 246, 0.12) 100%); 1525 border-color: rgba(167, 139, 250, 0.45); 1526 } 1527 a.mx-streamer-badge.mx-streamer-badge-live:hover { 1528 color: #C4B5FD; 1529 background: linear-gradient(135deg, rgba(167, 139, 250, 0.18) 0%, rgba(139, 92, 246, 0.12) 100%); 1530 border-color: rgba(167, 139, 250, 0.45); 1531 } 1532 1533 /* Live page only: stacked 100px action column */ 1534 .mx-right.action-column { 1535 display: flex; 1536 flex-direction: column; 1537 align-items: flex-end; 1538 justify-content: center; 1539 gap: 4px; 1540 width: 100px; 1541 max-width: 100px; 1542 flex-shrink: 0; 1543 } 1544 .mx-right.action-column .live-btn, 1545 .mx-right.action-column .preview-btn, 1546 .mx-right.action-column .mx-streamer-pill, 1547 .mx-right.action-column .mx-streamer-toggle { 1548 width: 100%; 1549 max-width: 100px; 1550 justify-content: center; 1551 box-sizing: border-box; 1552 } 1553 .mx-right.action-column .mx-streamer-pill { 1554 gap: 4px; 1555 min-width: 0; 1556 padding: 3px 6px 6px; 1557 } 1558 .mx-right.action-column .mx-streamer-name { 1559 overflow: hidden; 1560 text-overflow: ellipsis; 1561 white-space: nowrap; 1562 min-width: 0; 1563 max-width: 100%; 1564 }
1565 .mx-right.action-column .icon-mic, 1566 .mx-right.action-column .icon-caret { 1567 width: 11px; 1568 height: 11px; 1569 flex-shrink: 0; 1570 position: relative; 1571 top: 1px; 1572 } 1573 .mx-streamer-dropdown { 1574 position: relative; 1575 width: 100%; 1576 z-index: 2; 1577 } 1578 .mx-streamer-toggle { 1579 display: inline-flex; 1580 align-items: center; 1581 justify-content: center; 1582 gap: 4px; 1583 padding: 3px 8px 6px; 1584 border-radius: 999px; 1585 border: 1px solid rgba(34, 197, 94, 0.22); 1586 background: rgba(15, 23, 42, 0.55); 1587 color: #86efac; 1588 cursor: pointer; 1589 line-height: 1; 1590 } 1591 .mx-streamer-toggle:hover, 1592 .mx-streamer-toggle[aria-expanded="true"] { 1593 background: rgba(34, 197, 94, 0.18); 1594 border-color: rgba(34, 197, 94, 0.45); 1595 color: #bbf7d0; 1596 } 1597 .mx-streamer-toggle.mx-streamer-toggle-live { 1598 background: linear-gradient(135deg, rgba(167, 139, 250, 0.18) 0%, rgba(139, 92, 246, 0.12) 100%); 1599 border: 1px solid rgba(167, 139, 250, 0.45); 1600 color: #A78BFA; 1601 animation: streamBadgePulse 2s ease-in-out infinite; 1602 } 1603 .mx-streamer-toggle.mx-streamer-toggle-live:hover, 1604 .mx-streamer-toggle.mx-streamer-toggle-live[aria-expanded="true"] { 1605 background: linear-gradient(135deg, rgba(167, 139, 250, 0.18) 0%, rgba(139, 92, 246, 0.12) 100%); 1606 border-color: rgba(167, 139, 250, 0.45); 1607 color: #C4B5FD; 1608 } 1609 .mx-streamer-menu { 1610 min-width: 168px; 1611 max-height: 192px; 1612 overflow-y: auto; 1613 padding: 6px 0; 1614 background: #0f172a; 1615 border: 1px solid rgba(255,255,255,0.12); 1616 z-index: 20; 1617 } 1618 .mx-streamer-menu-item { 1619 display: flex; 1620 align-items: center; 1621 gap: 6px; 1622 font-size: 0.75rem; 1623 color: #86efac; 1624 white-space: nowrap; 1625 } 1626 .mx-streamer-menu-item:hover, 1627 .mx-streamer-menu-item:focus { 1628 background: rgba(34, 197, 94, 0.12); 1629 color: #bbf7d0; 1630 } 1631 .mx-streamer-menu-item .icon-mic { 1632 width: 12px; 1633 height: 12px; 1634 flex-shrink: 0; 1635 } 1636 .mx-row:has(.mx-streamer-dropdown .dropdown-menu.show) { 1637 z-index: 6; 1638 position: relative; 1639 } 1640 .mx-streamer-menu.mx-streamer-menu-live .mx-streamer-menu-item 1641 { 1642 color: #A78BFA; 1643 } 1644 .mx-streamer-menu.mx-streamer-menu-live .mx-streamer-menu-item:hover, 1645 .mx-streamer-menu.mx-streamer-menu-live .mx-streamer-menu-item:focus { 1646 background: rgba(167, 139, 250, 0.12); 1647 color: #C4B5FD; 1648 } 1649 1650 /* ===== å页 ===== */ 1651 .pagination { gap: 4px; } 1652 .pagination .page-link { 1653 border-radius: 8px; 1654 padding: 8px 14px; 1655 font-weight: 500; 1656 font-size: 0.875rem; 1657 } 1658 .pagination .page-link .icon { width: 14px; height: 14px; } 1659 .pagination .page-item.active .page-link { 1660 background: linear-gradient(135deg, #22c55e 0%, #16a34a 100%); 1661 border-color: transparent; 1662 } 1663 1664 /* ===== å¨ç» ===== */ 1665 @keyframes livePulse { 1666 0%, 100% { opacity: 1; } 1667 50% { opacity: 0.4; } 1668 } 1669 @keyframes liveGlow { 1670 0%, 100% { box-shadow: 0 0 0 rgba(239,68,68,0); } 1671 50% { box-shadow: 0 0 8px rgba(239,68,68,0.3); } 1672 } 1673 @keyframes minuteTickJitter { 1674 0% { transform: translate(0,0) rotate(0deg); } 1675 8% { transform: translate(0.5px,-0.5px) rotate(-10deg); } 1676 16% { transform: translate(-0.5px,0.5px) rotate(10deg); } 1677 24% { transform: translate(0,0) rotate(0deg); } 1678 100% { transform: translate(0,0) rotate(0deg); } 1679 } 1680 1681 .filter-bar-tools { 1682 display: flex; 1683 align-items: center; 1684 justify-content: flex-end; 1685 gap: 8px; 1686 flex-shrink: 0; 1687 margin-left: auto; 1688 } 1689 .match-list-search { 1690 position: relative; 1691 display: flex; 1692 align-items: center; 1693 width: 220px; 1694 height: 36px; 1695 padding: 0 10px 0 34px; 1696 border-radius: 20px; 1697 border: 1px solid rgba(255,255,255,0.12); 1698 background: rgba(255,255,255,0.06); 1699 transition: border-color 0.15s ease, background 0.15s ease; 1700 } 1701 .match-list-search:focus-within { 1702 border-color: rgba(34, 197, 94, 0.45); 1703 background: rgba(255,255,255,0.1); 1704 } 1705 .match-list-search-icon { 1706 position: absolute; 1707 left: 12px; 1708 width: 14px; 1709 height: 14px; 1710 color: rgba(255,255,255,0.45); 1711 pointer-events: none; 1712 } 1713 .match-list-search-input { 1714 width: 100%; 1715 min-width: 0; 1716 border: 0; 1717 outline: none; 1718 background: transparent; 1719 color: rgba(255,255,255,0.92); 1720 font-size: 0.8125rem; 1721 font-weight: 500; 1722 padding: 0; 1723 } 1724 .match-list-search-input::placeholder { 1725 color: rgba(255,255,255,0.4); 1726 font-weight: 500; 1727 } 1728 .match-list-search-input::-webkit-search-cancel-button { 1729 display: none; 1730 } 1731 .match-list-search-clear { 1732 flex-shrink: 0; 1733 width: 18px; 1734 height: 18px; 1735 margin-left: 6px; 1736 border: 0; 1737 border-radius: 50%; 1738 background: rgba(255,255,255,0.12); 1739 color: rgba(255,255,255,0.75); 1740 font-size: 14px; 1741 line-height: 1; 1742 cursor: pointer; 1743 padding: 0; 1744 } 1745 .match-list-search-clear:hover { 1746 background: rgba(255,255,255,0.22); 1747 color: #fff; 1748 } 1749 .is-search-hidden { 1750 display: none !important; 1751 }
1752 .lg-section.is-search-open .lg-matches { 1753 display: block !important; 1754 } 1755 1756 /* ===== ååºå¼ ===== */ 1757 @media (max-width: 768px) { 1758 .filter-bar-row { 1759 flex-wrap: wrap; 1760 gap: 10px; 1761 } 1762 .filter-bar-tools { 1763 width: 100%; 1764 margin-left: 0; 1765 } 1766 .match-list-search { 1767 flex: 1; 1768 width: auto; 1769 min-width: 0; 1770 } 1771 .filter-bar-tools .schedule-category-dropdown { 1772 width: auto; 1773 flex: 0 0 auto; 1774 } 1775 .filter-bar-tools .schedule-category-select, 1776 .filter-bar-tools .custom-select { 1777 width: auto; 1778 max-width: 148px; 1779 } 1780 .mx-left { width: 80px; gap: 6px; } 1781 .mx-team-name { font-size: 0.75rem; } 1782 .mx-team-logo { width: 18px; height: 18px; } 1783 .mx-score { font-size: 0.8125rem; min-width: 18px; } 1784 .mx-right { gap: 4px; max-width: 55%; } 1785 .mx-right.action-column { 1786 width: 100px; 1787 max-width: 100px; 1788 } 1789 .mx-streamers { max-width: 140px; } 1790 .mx-action-btn { padding: 3px 8px; font-size: 0.625rem; } 1791 .lg-header { padding: 8px 12px; } 1792 .mx-row { padding: 7px 12px; gap: 8px; } 1793 } 1794 @media (max-width: 480px) { 1795 .mx-left { width: 65px; } 1796 .mx-fav-btn { display: none; } 1797 .mx-right.action-column { 1798 width: 70px !important; 1799 max-width: 70px !important; 1800 } 1801 .mx-right .preview-btn { display: none; } 1802 .mx-team-name { font-size: 0.75rem; } 1803 .mx-action-btn { padding: 3px 6px; font-size: 0.5625rem; } 1804 .filter-pill { padding: 6px 12px; font-size: 0.75rem; } 1805 } 1806</style> 1807 1808<!-- SVG 徿 é --> 1809<svg xmlns="http://www.w3.org/2000/svg" style="display:none"> 1810 1811 <!-- ææï¼ç©ºå¿ï¼ --> 1812 <symbol id="icon-star" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"> 1813 <polygon points="12 2 15.09 8.26 22 9.27 17 14.14 18.18 21.02 12 17.77 5.82 21.02 7 14.14 2 9.27 8.91 8.26 12 2"/> 1814 </symbol> 1815 1816 <!-- ææï¼å®å¿ï¼ --> 1817 <symbol id="icon-star-filled" viewBox="0 0 24 24" fill="currentColor" stroke="currentColor" stroke-width="1"> 1818 <polygon points="12 2 15.09 8.26 22 9.27 17 14.14 18.18 21.02 12 17.77 5.82 21.02 7 14.14 2 9.27 8.91 8.26 12 2"/> 1819 </symbol> 1820 1821 <!-- åä¸ç®å¤´ --> 1822 <symbol id="icon-chevron-up" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5" stroke-linecap="round" stroke-linejoin="round"> 1823 <polyline points="18 15 12 9 6 15"/> 1824 </symbol> 1825 1826 <!-- åä¸ç®å¤´ --> 1827 <symbol id="icon-chevron-down" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5" stroke-linecap="round" stroke-linejoin="round"> 1828 <polyline points="6 9 12 15 18 9"/> 1829 </symbol> 1830 1831 <!-- ç´æ/ä¿¡å·å¡ --> 1832 <symbol id="icon-live" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"> 1833 <path d="M4.9 19.1C1 15.2 1 8.8 4.9 4.9"/> 1834 <path d="M7.8 16.2c-2.3-2.3-2.3-6.1 0-8.4"/> 1835 <path d="M16.2 7.8c2.3 2.3 2.3 6.1 0 8.4"/> 1836 <path d="M19.1 4.9C23 8.8 23 15.1 19.1 19"/> 1837 <circle cx="12" cy="12" r="2" fill="currentColor"/> 1838 </symbol> 1839 1840 <!-- å·¦ç®å¤´ --> 1841 <symbol id="icon-chevron-left" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5" stroke-linecap="round" stroke-linejoin="round"> 1842 <polyline points="15 18 9 12 15 6"/> 1843 </symbol> 1844 1845 <!-- å³ç®å¤´ --> 1846 <symbol id="icon-chevron-right" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5" stroke-linecap="round" stroke-linejoin="round"> 1847 <polyline points="9 6 15 12 9 18"/> 1848 </symbol> 1849 1850 <!-- åå·¦ç®å¤´ --> 1851 <symbol id="icon-chevrons-left" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5" stroke-linecap="round" stroke-linejoin="round"> 1852 <polyline points="11 17 6 12 11 7"/> 1853 <polyline points="18 17 13 12 18 7"/> 1854 </symbol> 1855 1856 <!-- åå³ç®å¤´ --> 1857 <symbol id="icon-chevrons-right" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5" stroke-linecap="round" stroke-linejoin="round"> 1858 <polyline points="13 7 18 12 13 17"/> 1859 <polyline points="6 7 11 12 6 17"/> 1860 </symbol> 1861 1862 <!-- æ¥å --> 1863 <symbol id="icon-calendar" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"> 1864 <rect x="3" y="4" width="18" height="18" rx="2" ry="2"/> 1865 <line x1="16" y1="2" x2="16" y2="6"/> 1866 <line x1="8" y1="2" x2="8" y2="6"/> 1867 <line x1="3" y1="10" x2="21" y2="10"/> 1868 </symbol> 1869 1870 <!-- æå¸ï¼å·²ç»æï¼ --> 1871 <symbol id="icon-flag" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"> 1872 <path d="M4 15s1-1 4-1 5 2 8 2 4-1 4-1V3s-1 1-4 1-5-2-8-2-4 1-4 1z"/> 1873 <line x1="4" y1="22" x2="4" y2="15"/> 1874 </symbol> 1875 1876 <!-- 麦å é£ï¼ä¸»æï¼ -->
1877 <symbol id="icon-mic" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"> 1878 <path d="M12 2a3 3 0 0 0-3 3v7a3 3 0 0 0 6 0V5a3 3 0 0 0-3-3Z"/> 1879 <path d="M19 10v2a7 7 0 0 1-14 0v-2"/> 1880 <line x1="12" y1="19" x2="12" y2="22"/> 1881 </symbol> 1882 1883 <!-- è¶³ç --> 1884 <symbol id="icon-football" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"> 1885 <circle cx="12" cy="12" r="10"/> 1886 <path d="M12 2a15.3 15.3 0 0 1 4 10 15.3 15.3 0 0 1-4 10 15.3 15.3 0 0 1-4-10 15.3 15.3 0 0 1 4-10z"/> 1887 <path d="M2 12h20"/> 1888 </symbol> 1889 1890</svg> 1891 1892 1893<!-- å è½½å ¨å±å¯¼èªæ°æ® --> 1894 1895 1896<!-- å¹¿åæ¨ªå¹ --> 1897<link href="/dist/css/focus-player.css?v=8kMhyq8KMJMyrfcinjq5xdhp9uBDP4aFyjUEaXMk8UQ" rel="stylesheet" /> 1898<div class="focus-ad-banner-wrapper"> 1899 1900 <div class="ad-banner-device ad-banner-device-pc"> 1901 <div class="ad-carousel" id="adCarouselPc"> 1902 <div class="ad-carousel-track"> 1903 <a href="https://bit.ly/3TPFQxj" class="ad-carousel-slide active" target="_blank" rel="noopener nofollow noreferrer"> 1904 <img src="/uploads/ads/2026-08/8778dac6e7a7434291d7eb1b52965a8d.png" class="ad-banner-img-custom" alt="Bảo hiểm thế thao" loading="eager" style="display:block;width:100%;height:150px;object-fit:contain;object-position:center;" /> 1905 </a> 1906 <a href="https://bit.ly/3TPFQxj" class="ad-carousel-slide" target="_blank" rel="noopener nofollow noreferrer"> 1907 <img src="/uploads/ads/2026-08/0afad7c6bb37449f8d568b59db387452.png" class="ad-banner-img-custom" alt="Nạp đầu thể thao" loading="lazy" style="display:block;width:100%;height:150px;object-fit:contain;object-position:center;" /> 1908 </a> 1909 </div> 1910 <div class="ad-carousel-dots"> 1911 <span class="ad-carousel-dot active" data-index="0"></span> 1912 <span class="ad-carousel-dot" data-index="1"></span> 1913 </div> 1914 </div> 1915 </div> 1916 <div class="ad-banner-device ad-banner-device-mobile"> 1917 <div class="ad-list"> 1918 <a href="https://bit.ly/3TPFQxj" target="_blank" rel="noopener nofollow noreferrer"> 1919 <img src="/uploads/ads/2026-08/3015ed4fbcff4ccaa05224f7c6a97710.png" class="" alt="Bảo hiểm thế thao" loading="lazy" style="display:block;width:100%;height:auto;margin:0 auto;" /> 1920 </a> 1921 <a href="https://bit.ly/3TPFQxj" target="_blank" rel="noopener nofollow noreferrer"> 1922 <img src="/uploads/ads/2026-08/fda23f718c5946fabb7c778e856a86df.png" class="" alt="Nạp đầu thể thao" loading="lazy" style="display:block;width:100%;height:auto;margin:0 auto;" /> 1923 </a> 1924 </div> 1925 </div> 1926 1927</div> 1928
1928<script src="/dist/js/ad-carousel.js?v=UooZGezoZ-VJM9pPGfC1kQ5RVhrkGqFeEJUDb3-SKcc" defer></script>
1928 1929 1930 1931<div class="container-fluid match-list-page"> 1932 <h1 class="seo-page-h1 seo-page-h1--list">Phát trực tiếp</h1> 1933 <!-- çéæ ç¾æ --> 1934 <div class="filter-bar"> 1935 <div class="filter-bar-row"> 1936 <div class="filter-tabs-row"> 1937 <a href="/truc-tiep" class="filter-pill active"> 1938 <span class="live-indicator-dot"></span> 1939 Đang diễn ra 1940 </a> 1941 <a href="/hom-nay" class="filter-pill "> 1942 Trận hôm nay 1943 </a> 1944 <a href="/lich-thi-dau" class="filter-pill "> 1945 Sắp diễn ra 1946 </a> 1947 </div> 1948 <div class="filter-bar-tools"> 1949 <div class="match-list-search"> 1950 <label class="visually-hidden" for="matchListSearch">Tìm kiếm</label> 1951 <svg class="match-list-search-icon" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" aria-hidden="true"> 1952 <circle cx="11" cy="11" r="7"></circle> 1953 <path d="m20 20-3.5-3.5"></path> 1954 </svg> 1955 <input id="matchListSearch" class="match-list-search-input" type="search" placeholder="Tìm kiếm đội bóng hoặc giải đấu..." autocomplete="off" enterkeyhint="search"> 1956 <button type="button" class="match-list-search-clear" id="matchListSearchClear" hidden aria-label="Xóa">×</button> 1957 </div> 1958 <div class="schedule-category-dropdown"> 1959 <label class="visually-hidden" for="liveSportSelect">Tất cả trực tiếp</label> 1960 <select id="liveSportSelect" class="schedule-category-select js-custom-select" data-menu-align="end" onchange="window.location.href=this.value"> 1961 <option value="/truc-tiep" selected="selected">Tất cả trực tiếp</option> 1962 <option value="/truc-tiep?category=football">Bóng Đá</option> 1963 <option value="/truc-tiep?category=basketball">Bóng Rổ</option> 1964 <option value="/truc-tiep?category=beauty">Phát sóng giải trí</option> 1965 </select> 1966 </div> 1967 </div> 1968 </div> 1969 </div> 1970 1971 <div id="matchListSearchEmpty" class="schedule-sport-empty" hidden>Không tìm thấy kết quả</div> 1972 1973 1974 1975 <div class="lg-section" data-search="B League Japan"> 1976 <div class="lg-header"> 1977 <div class="lg-header-left"> 1978 <button type="button" class="lg-fav-btn" aria-label="Pin league"> 1979 <svg class="icon"><use href="#icon-star"/></svg> 1980 </button> 1981 <span class="lg-country-name">Japan:</span> 1982 <img src="/images/basketball/leagues/56.webp" 1983 alt="B League" class="lg-logo" loading="lazy" 1984 onerror="if(!this.dataset.fallback){this.src='/images/placeholder-league.svg';this.dataset.fallback='true';}"> 1985 <span class="lg-name">B League</span> 1986 </div> 1987 <div class="lg-header-right"> 1988 <button type="button" class="lg-collapse-btn" onclick="toggleLeague(this)" aria-label="Toggle"> 1989 <svg class="icon icon-collapse"><use href="#icon-chevron-up"/></svg> 1990 </button> 1991 </div> 1992 </div> 1993 1994 <div class="lg-matches"> 1995 <div class="mx-row is-live " data-search="B League Japan Alvark Ryukyu"> 1996 <div class="mx-left"> 1997 <button type="button" class="mx-fav-btn favorite-btn" 1998 data-match-id="327880" 1999 data-auth="false" 2000 onclick="event.preventDefault(); event.stopPropagation(); handleFavoriteClick(327880, this);" 2001 aria-label="Thêm vào yêu thích"> 2002 <svg class="icon icon-fav"><use href="#icon-star"/></svg> 2003 </button> 2004 <div class="mx-status">
2005 <span class="mx-status-badge live">LIVE</span> 2006 </div> 2007 </div> 2008 2009 <div class="mx-center"> 2010 <a href="/alvark-vs-ryukyu-id327880" class="mx-teams-link"> 2011 <div class="mx-team-row"> 2012 <img src="/images/basketball/teams/749.webp" 2013 alt="Alvark" class="mx-team-logo" loading="lazy" 2014 onerror="this.onerror=null; this.src='/images/placeholder-team.svg';"> 2015 <span class="mx-team-name">Alvark</span> 2016 <span class="mx-score live"> 201750 </span> 2018 </div> 2019 <div class="mx-team-row"> 2020 <img src="/images/basketball/teams/758.webp" 2021 alt="Ryukyu" class="mx-team-logo" loading="lazy" 2022 onerror="this.onerror=null; this.src='/images/placeholder-team.svg';"> 2023 <span class="mx-team-name">Ryukyu</span> 2024 <span class="mx-score live"> 202551 </span> 2026 </div> 2027 </a> 2028 </div> 2029 2030 <div class="mx-right action-column streamer-col"> 2031 <a href="/alvark-vs-ryukyu-id327880" class="mx-action-btn live-btn"> 2032 <svg class="icon"><use href="#icon-live"/></svg> LIVE 2033 </a> 2034 </div> 2035 </div> 2036 <div class="mx-row is-live " data-search="B League Japan Alvark Ryukyu"> 2037 <div class="mx-left"> 2038 <button type="button" class="mx-fav-btn favorite-btn" 2039 data-match-id="328141" 2040 data-auth="false" 2041 onclick="event.preventDefault(); event.stopPropagation(); handleFavoriteClick(328141, this);" 2042 aria-label="Thêm vào yêu thích"> 2043 <svg class="icon icon-fav"><use href="#icon-star"/></svg> 2044 </button> 2045 <div class="mx-status"> 2046 <span class="mx-status-badge live">LIVE</span> 2047 </div> 2048 </div> 2049 2050 <div class="mx-center"> 2051 <a href="/alvark-vs-ryukyu-id328141" class="mx-teams-link"> 2052 <div class="mx-team-row"> 2053 <img src="/images/basketball/teams/749.webp" 2054 alt="Alvark" class="mx-team-logo" loading="lazy" 2055 onerror="this.onerror=null; this.src='/images/placeholder-team.svg';"> 2056 <span class="mx-team-name">Alvark</span> 2057 <span class="mx-score live"> 205841 </span> 2059 </div> 2060 <div class="mx-team-row"> 2061 <img src="/images/basketball/teams/758.webp" 2062 alt="Ryukyu" class="mx-team-logo" loading="lazy" 2063 onerror="this.onerror=null; this.src='/images/placeholder-team.svg';"> 2064 <span class="mx-team-name">Ryukyu</span> 2065 <span class="mx-score live"> 206651 </span> 2067 </div> 2068 </a> 2069 </div> 2070 2071 <div class="mx-right action-column streamer-col"> 2072 <a href="/alvark-vs-ryukyu-id328141" class="mx-action-btn live-btn"> 2073 <svg class="icon"><use href="#icon-live"/></svg> LIVE 2074 </a> 2075 </div> 2076 </div> 2077 <div class="mx-row is-live " data-search="B League Japan Shinshu Toyama"> 2078 <div class="mx-left"> 2079 <button type="button" class="mx-fav-btn favorite-btn" 2080 data-match-id="328921" 2081 data-auth="false" 2082 onclick="event.preventDefault(); event.stopPropagation(); handleFavoriteClick(328921, this);" 2083 aria-label="Thêm vào yêu thích"> 2084 <svg class="icon icon-fav"><use href="#icon-star"/></svg> 2085 </button> 2086 <div class="mx-status">
2087 <span class="mx-status-badge live">LIVE</span> 2088 </div> 2089 </div> 2090 2091 <div class="mx-center"> 2092 <a href="/shinshu-vs-toyama-id328921" class="mx-teams-link"> 2093 <div class="mx-team-row"> 2094 <img src="/images/basketball/teams/2259.webp" 2095 alt="Shinshu" class="mx-team-logo" loading="lazy" 2096 onerror="this.onerror=null; this.src='/images/placeholder-team.svg';"> 2097 <span class="mx-team-name">Shinshu</span> 2098 <span class="mx-score live"> 209958 </span> 2100 </div> 2101 <div class="mx-team-row"> 2102 <img src="/images/basketball/teams/763.webp" 2103 alt="Toyama" class="mx-team-logo" loading="lazy" 2104 onerror="this.onerror=null; this.src='/images/placeholder-team.svg';"> 2105 <span class="mx-team-name">Toyama</span> 2106 <span class="mx-score live"> 210771 </span> 2108 </div> 2109 </a> 2110 </div> 2111 2112 <div class="mx-right action-column streamer-col"> 2113 <a href="/shinshu-vs-toyama-id328921" class="mx-action-btn live-btn"> 2114 <svg class="icon"><use href="#icon-live"/></svg> LIVE 2115 </a> 2116 </div> 2117 </div> 2118 <div class="mx-row is-live " data-search="B League Japan Kobe Osaka"> 2119 <div class="mx-left"> 2120 <button type="button" class="mx-fav-btn favorite-btn" 2121 data-match-id="328923" 2122 data-auth="false" 2123 onclick="event.preventDefault(); event.stopPropagation(); handleFavoriteClick(328923, this);" 2124 aria-label="Thêm vào yêu thích"> 2125 <svg class="icon icon-fav"><use href="#icon-star"/></svg> 2126 </button> 2127 <div class="mx-status"> 2128 <span class="mx-status-badge live">LIVE</span> 2129 </div> 2130 </div> 2131 2132 <div class="mx-center"> 2133 <a href="/kobe-vs-osaka-id328923" class="mx-teams-link"> 2134 <div class="mx-team-row"> 2135 <img src="/images/basketball/teams/1584.webp" 2136 alt="Kobe" class="mx-team-logo" loading="lazy" 2137 onerror="this.onerror=null; this.src='/images/placeholder-team.svg';"> 2138 <span class="mx-team-name">Kobe</span> 2139 <span class="mx-score live"> 214039 </span> 2141 </div> 2142 <div class="mx-team-row"> 2143 <img src="/images/basketball/teams/757.webp" 2144 alt="Osaka" class="mx-team-logo" loading="lazy" 2145 onerror="this.onerror=null; this.src='/images/placeholder-team.svg';"> 2146 <span class="mx-team-name">Osaka</span> 2147 <span class="mx-score live"> 214845 </span> 2149 </div> 2150 </a> 2151 </div> 2152 2153 <div class="mx-right action-column streamer-col"> 2154 <a href="/kobe-vs-osaka-id328923" class="mx-action-btn live-btn"> 2155 <svg class="icon"><use href="#icon-live"/></svg> LIVE 2156 </a> 2157 </div> 2158 </div> 2159 <div class="mx-row is-live " data-search="B League Japan Levanga Hokkaido SeaHorses Mikawa"> 2160 <div class="mx-left"> 2161 <button type="button" class="mx-fav-btn favorite-btn" 2162 data-match-id="328924" 2163 data-auth="false" 2164 onclick="event.preventDefault(); event.stopPropagation(); handleFavoriteClick(328924, this);" 2165 aria-label="Thêm vào yêu thích"> 2166 <svg class="icon icon-fav"><use href="#icon-star"/></svg> 2167 </button> 2168 <div class="mx-status">
2169 <span class="mx-status-badge live">LIVE</span> 2170 </div> 2171 </div> 2172 2173 <div class="mx-center"> 2174 <a href="/levanga-hokkaido-vs-seahorses-mikawa-id328924" class="mx-teams-link"> 2175 <div class="mx-team-row"> 2176 <img src="https://media.api-sports.io/basketball/teams/7905.png" 2177 alt="Levanga Hokkaido" class="mx-team-logo" loading="lazy" 2178 onerror="this.onerror=null; this.src='/images/placeholder-team.svg';"> 2179 <span class="mx-team-name">Levanga Hokkaido</span> 2180 <span class="mx-score live"> 218157 </span> 2182 </div> 2183 <div class="mx-team-row"> 2184 <img src="/images/basketball/teams/759.webp" 2185 alt="SeaHorses Mikawa" class="mx-team-logo" loading="lazy" 2186 onerror="this.onerror=null; this.src='/images/placeholder-team.svg';"> 2187 <span class="mx-team-name">SeaHorses Mikawa</span> 2188 <span class="mx-score live"> 218942 </span> 2190 </div> 2191 </a> 2192 </div> 2193 2194 <div class="mx-right action-column streamer-col"> 2195 <a href="/levanga-hokkaido-vs-seahorses-mikawa-id328924" class="mx-action-btn live-btn"> 2196 <svg class="icon"><use href="#icon-live"/></svg> LIVE 2197 </a> 2198 </div> 2199 </div> 2200 <div class="mx-row is-live " data-search="B League Japan Sendai Akita"> 2201 <div class="mx-left"> 2202 <button type="button" class="mx-fav-btn favorite-btn" 2203 data-match-id="328925" 2204 data-auth="false" 2205 onclick="event.preventDefault(); event.stopPropagation(); handleFavoriteClick(328925, this);" 2206 aria-label="Thêm vào yêu thích"> 2207 <svg class="icon icon-fav"><use href="#icon-star"/></svg> 2208 </button> 2209 <div class="mx-status"> 2210 <span class="mx-status-badge live">LIVE</span> 2211 </div> 2212 </div> 2213 2214 <div class="mx-center"> 2215 <a href="/sendai-vs-akita-id328925" class="mx-teams-link"> 2216 <div class="mx-team-row"> 2217 <img src="/images/basketball/teams/1586.webp" 2218 alt="Sendai" class="mx-team-logo" loading="lazy" 2219 onerror="this.onerror=null; this.src='/images/placeholder-team.svg';"> 2220 <span class="mx-team-name">Sendai</span> 2221 <span class="mx-score live"> 222242 </span> 2223 </div> 2224 <div class="mx-team-row"> 2225 <img src="/images/basketball/teams/748.webp" 2226 alt="Akita" class="mx-team-logo" loading="lazy" 2227 onerror="this.onerror=null; this.src='/images/placeholder-team.svg';"> 2228 <span class="mx-team-name">Akita</span> 2229 <span class="mx-score live"> 223029 </span> 2231 </div> 2232 </a> 2233 </div> 2234 2235 <div class="mx-right action-column streamer-col"> 2236 <a href="/sendai-vs-akita-id328925" class="mx-action-btn live-btn"> 2237 <svg class="icon"><use href="#icon-live"/></svg> LIVE 2238 </a> 2239 </div> 2240 </div> 2241 <div class="mx-row is-live " data-search="B League Japan Ibaraki Robots NeoPhoenix"> 2242 <div class="mx-left"> 2243 <button type="button" class="mx-fav-btn favorite-btn" 2244 data-match-id="330262" 2245 data-auth="false" 2246 onclick="event.preventDefault(); event.stopPropagation(); handleFavoriteClick(330262, this);" 2247 aria-label="Thêm vào yêu thích"> 2248 <svg class="icon icon-fav"><use href="#icon-star"/></svg> 2249 </button> 2250 <div class="mx-status">
2251 <span class="mx-status-badge live">LIVE</span> 2252 </div> 2253 </div> 2254 2255 <div class="mx-center"> 2256 <a href="/ibaraki-robots-vs-neophoenix-id330262" class="mx-teams-link"> 2257 <div class="mx-team-row"> 2258 <img src="/images/basketball/teams/3061.webp" 2259 alt="Ibaraki Robots" class="mx-team-logo" loading="lazy" 2260 onerror="this.onerror=null; this.src='/images/placeholder-team.svg';"> 2261 <span class="mx-team-name">Ibaraki Robots</span> 2262 <span class="mx-score live"> 226365 </span> 2264 </div> 2265 <div class="mx-team-row"> 2266 <img src="/images/basketball/teams/755.webp" 2267 alt="NeoPhoenix" class="mx-team-logo" loading="lazy" 2268 onerror="this.onerror=null; this.src='/images/placeholder-team.svg';"> 2269 <span class="mx-team-name">NeoPhoenix</span> 2270 <span class="mx-score live"> 227169 </span> 2272 </div> 2273 </a> 2274 </div> 2275 2276 <div class="mx-right action-column streamer-col"> 2277 <a href="/ibaraki-robots-vs-neophoenix-id330262" class="mx-action-btn live-btn"> 2278 <svg class="icon"><use href="#icon-live"/></svg> LIVE 2279 </a> 2280 </div> 2281 </div> 2282 <div class="mx-row is-live " data-search="B League Japan Kobe Osaka"> 2283 <div class="mx-left"> 2284 <button type="button" class="mx-fav-btn favorite-btn" 2285 data-match-id="330264" 2286 data-auth="false" 2287 onclick="event.preventDefault(); event.stopPropagation(); handleFavoriteClick(330264, this);" 2288 aria-label="Thêm vào yêu thích"> 2289 <svg class="icon icon-fav"><use href="#icon-star"/></svg> 2290 </button> 2291 <div class="mx-status"> 2292 <span class="mx-status-badge live">LIVE</span> 2293 </div> 2294 </div> 2295 2296 <div class="mx-center"> 2297 <a href="/kobe-vs-osaka-id330264" class="mx-teams-link"> 2298 <div class="mx-team-row"> 2299 <img src="/images/basketball/teams/1584.webp" 2300 alt="Kobe" class="mx-team-logo" loading="lazy" 2301 onerror="this.onerror=null; this.src='/images/placeholder-team.svg';"> 2302 <span class="mx-team-name">Kobe</span> 2303 <span class="mx-score live"> 230477 </span> 2305 </div> 2306 <div class="mx-team-row"> 2307 <img src="/images/basketball/teams/757.webp" 2308 alt="Osaka" class="mx-team-logo" loading="lazy" 2309 onerror="this.onerror=null; this.src='/images/placeholder-team.svg';"> 2310 <span class="mx-team-name">Osaka</span> 2311 <span class="mx-score live"> 231274 </span> 2313 </div> 2314 </a> 2315 </div> 2316 2317 <div class="mx-right action-column streamer-col"> 2318 <a href="/kobe-vs-osaka-id330264" class="mx-action-btn live-btn"> 2319 <svg class="icon"><use href="#icon-live"/></svg> LIVE 2320 </a> 2321 </div> 2322 </div> 2323 <div class="mx-row is-live " data-search="B League Japan Levanga Hokkaido SeaHorses Mikawa"> 2324 <div class="mx-left"> 2325 <button type="button" class="mx-fav-btn favorite-btn" 2326 data-match-id="330265" 2327 data-auth="false" 2328 onclick="event.preventDefault(); event.stopPropagation(); handleFavoriteClick(330265, this);" 2329 aria-label="Thêm vào yêu thích"> 2330 <svg class="icon icon-fav"><use href="#icon-star"/></svg> 2331 </button> 2332 <div class="mx-status">
2333 <span class="mx-status-badge live">LIVE</span> 2334 </div> 2335 </div> 2336 2337 <div class="mx-center"> 2338 <a href="/levanga-hokkaido-vs-seahorses-mikawa-id330265" class="mx-teams-link"> 2339 <div class="mx-team-row"> 2340 <img src="https://media.api-sports.io/basketball/teams/7905.png" 2341 alt="Levanga Hokkaido" class="mx-team-logo" loading="lazy" 2342 onerror="this.onerror=null; this.src='/images/placeholder-team.svg';"> 2343 <span class="mx-team-name">Levanga Hokkaido</span> 2344 <span class="mx-score live"> 234572 </span> 2346 </div> 2347 <div class="mx-team-row"> 2348 <img src="/images/basketball/teams/759.webp" 2349 alt="SeaHorses Mikawa" class="mx-team-logo" loading="lazy" 2350 onerror="this.onerror=null; this.src='/images/placeholder-team.svg';"> 2351 <span class="mx-team-name">SeaHorses Mikawa</span> 2352 <span class="mx-score live"> 235374 </span> 2354 </div> 2355 </a> 2356 </div> 2357 2358 <div class="mx-right action-column streamer-col"> 2359 <a href="/levanga-hokkaido-vs-seahorses-mikawa-id330265" class="mx-action-btn live-btn"> 2360 <svg class="icon"><use href="#icon-live"/></svg> LIVE 2361 </a> 2362 </div> 2363 </div> 2364 <div class="mx-row is-live " data-search="B League Japan Saga Hiroshima D."> 2365 <div class="mx-left"> 2366 <button type="button" class="mx-fav-btn favorite-btn" 2367 data-match-id="330268" 2368 data-auth="false" 2369 onclick="event.preventDefault(); event.stopPropagation(); handleFavoriteClick(330268, this);" 2370 aria-label="Thêm vào yêu thích"> 2371 <svg class="icon icon-fav"><use href="#icon-star"/></svg> 2372 </button> 2373 <div class="mx-status"> 2374 <span class="mx-status-badge live">LIVE</span> 2375 </div> 2376 </div> 2377 2378 <div class="mx-center"> 2379 <a href="/saga-vs-hiroshima-d-id330268" class="mx-teams-link"> 2380 <div class="mx-team-row"> 2381 <img src="/images/basketball/teams/6035.webp" 2382 alt="Saga" class="mx-team-logo" loading="lazy" 2383 onerror="this.onerror=null; this.src='/images/placeholder-team.svg';"> 2384 <span class="mx-team-name">Saga</span> 2385 <span class="mx-score live"> 238634 </span> 2387 </div> 2388 <div class="mx-team-row"> 2389 <img src="/images/basketball/teams/1585.webp" 2390 alt="Hiroshima D." class="mx-team-logo" loading="lazy" 2391 onerror="this.onerror=null; this.src='/images/placeholder-team.svg';"> 2392 <span class="mx-team-name">Hiroshima D.</span> 2393 <span class="mx-score live"> 239442 </span> 2395 </div> 2396 </a> 2397 </div> 2398 2399 <div class="mx-right action-column streamer-col"> 2400 <a href="/saga-vs-hiroshima-d-id330268" class="mx-action-btn live-btn"> 2401 <svg class="icon"><use href="#icon-live"/></svg> LIVE 2402 </a> 2403 </div> 2404 </div> 2405 <div class="mx-row is-live " data-search="B League Japan Shinshu Toyama"> 2406 <div class="mx-left"> 2407 <button type="button" class="mx-fav-btn favorite-btn" 2408 data-match-id="330269" 2409 data-auth="false" 2410 onclick="event.preventDefault(); event.stopPropagation(); handleFavoriteClick(330269, this);" 2411 aria-label="Thêm vào yêu thích"> 2412 <svg class="icon icon-fav"><use href="#icon-star"/></svg> 2413 </button> 2414 <div class="mx-status">
2415 <span class="mx-status-badge live">LIVE</span> 2416 </div> 2417 </div> 2418 2419 <div class="mx-center"> 2420 <a href="/shinshu-vs-toyama-id330269" class="mx-teams-link"> 2421 <div class="mx-team-row"> 2422 <img src="/images/basketball/teams/2259.webp" 2423 alt="Shinshu" class="mx-team-logo" loading="lazy" 2424 onerror="this.onerror=null; this.src='/images/placeholder-team.svg';"> 2425 <span class="mx-team-name">Shinshu</span> 2426 <span class="mx-score live"> 242742 </span> 2428 </div> 2429 <div class="mx-team-row"> 2430 <img src="/images/basketball/teams/763.webp" 2431 alt="Toyama" class="mx-team-logo" loading="lazy" 2432 onerror="this.onerror=null; this.src='/images/placeholder-team.svg';"> 2433 <span class="mx-team-name">Toyama</span> 2434 <span class="mx-score live"> 243531 </span> 2436 </div> 2437 </a> 2438 </div> 2439 2440 <div class="mx-right action-column streamer-col"> 2441 <a href="/shinshu-vs-toyama-id330269" class="mx-action-btn live-btn"> 2442 <svg class="icon"><use href="#icon-live"/></svg> LIVE 2443 </a> 2444 </div> 2445 </div> 2446 <div class="mx-row is-live " data-search="B League Japan Kyoto Shiga"> 2447 <div class="mx-left"> 2448 <button type="button" class="mx-fav-btn favorite-btn" 2449 data-match-id="330270" 2450 data-auth="false" 2451 onclick="event.preventDefault(); event.stopPropagation(); handleFavoriteClick(330270, this);" 2452 aria-label="Thêm vào yêu thích"> 2453 <svg class="icon icon-fav"><use href="#icon-star"/></svg> 2454 </button> 2455 <div class="mx-status"> 2456 <span class="mx-status-badge live">LIVE</span> 2457 </div> 2458 </div> 2459 2460 <div class="mx-center"> 2461 <a href="/kyoto-vs-shiga-id330270" class="mx-teams-link"> 2462 <div class="mx-team-row"> 2463 <img src="/images/basketball/teams/754.webp" 2464 alt="Kyoto" class="mx-team-logo" loading="lazy" 2465 onerror="this.onerror=null; this.src='/images/placeholder-team.svg';"> 2466 <span class="mx-team-name">Kyoto</span> 2467 <span class="mx-score live"> 246817 </span> 2469 </div> 2470 <div class="mx-team-row"> 2471 <img src="/images/basketball/teams/760.webp" 2472 alt="Shiga" class="mx-team-logo" loading="lazy" 2473 onerror="this.onerror=null; this.src='/images/placeholder-team.svg';"> 2474 <span class="mx-team-name">Shiga</span> 2475 <span class="mx-score live"> 247619 </span> 2477 </div> 2478 </a> 2479 </div> 2480 2481 <div class="mx-right action-column streamer-col"> 2482 <a href="/kyoto-vs-shiga-id330270" class="mx-action-btn live-btn"> 2483 <svg class="icon"><use href="#icon-live"/></svg> LIVE 2484 </a> 2485 </div> 2486 </div> 2487 <div class="mx-row is-live " data-search="B League Japan Shimane Diamond Dolphins"> 2488 <div class="mx-left"> 2489 <button type="button" class="mx-fav-btn favorite-btn" 2490 data-match-id="332294" 2491 data-auth="false" 2492 onclick="event.preventDefault(); event.stopPropagation(); handleFavoriteClick(332294, this);" 2493 aria-label="Thêm vào yêu thích"> 2494 <svg class="icon icon-fav"><use href="#icon-star"/></svg> 2495 </button> 2496 <div class="mx-status">
2497 <span class="mx-status-badge live">LIVE</span> 2498 </div> 2499 </div> 2500 2501 <div class="mx-center"> 2502 <a href="/shimane-vs-diamond-dolphins-id332294" class="mx-teams-link"> 2503 <div class="mx-team-row"> 2504 <img src="/images/basketball/teams/761.webp" 2505 alt="Shimane" class="mx-team-logo" loading="lazy" 2506 onerror="this.onerror=null; this.src='/images/placeholder-team.svg';"> 2507 <span class="mx-team-name">Shimane</span> 2508 <span class="mx-score live"> 250943 </span> 2510 </div> 2511 <div class="mx-team-row"> 2512 <img src="/images/basketball/teams/752.webp" 2513 alt="Diamond Dolphins" class="mx-team-logo" loading="lazy" 2514 onerror="this.onerror=null; this.src='/images/placeholder-team.svg';"> 2515 <span class="mx-team-name">Diamond Dolphins</span> 2516 <span class="mx-score live"> 251753 </span> 2518 </div> 2519 </a> 2520 </div> 2521 2522 <div class="mx-right action-column streamer-col"> 2523 <a href="/shimane-vs-diamond-dolphins-id332294" class="mx-action-btn live-btn"> 2524 <svg class="icon"><use href="#icon-live"/></svg> LIVE 2525 </a> 2526 </div> 2527 </div> 2528 <div class="mx-row is-live " data-search="B League Japan Altiri Chiba Brave Thunders"> 2529 <div class="mx-left"> 2530 <button type="button" class="mx-fav-btn favorite-btn" 2531 data-match-id="332297" 2532 data-auth="false" 2533 onclick="event.preventDefault(); event.stopPropagation(); handleFavoriteClick(332297, this);" 2534 aria-label="Thêm vào yêu thích"> 2535 <svg class="icon icon-fav"><use href="#icon-star"/></svg> 2536 </button> 2537 <div class="mx-status"> 2538 <span class="mx-status-badge live">LIVE</span> 2539 </div> 2540 </div> 2541 2542 <div class="mx-center"> 2543 <a href="/altiri-chiba-vs-brave-thunders-id332297" class="mx-teams-link"> 2544 <div class="mx-team-row"> 2545 <img src="/images/basketball/teams/6349.webp" 2546 alt="Altiri Chiba" class="mx-team-logo" loading="lazy" 2547 onerror="this.onerror=null; this.src='/images/placeholder-team.svg';"> 2548 <span class="mx-team-name">Altiri Chiba</span> 2549 <span class="mx-score live"> 255043 </span> 2551 </div> 2552 <div class="mx-team-row"> 2553 <img src="/images/basketball/teams/750.webp" 2554 alt="Brave Thunders" class="mx-team-logo" loading="lazy" 2555 onerror="this.onerror=null; this.src='/images/placeholder-team.svg';"> 2556 <span class="mx-team-name">Brave Thunders</span> 2557 <span class="mx-score live"> 255852 </span> 2559 </div> 2560 </a> 2561 </div> 2562 2563 <div class="mx-right action-column streamer-col"> 2564 <a href="/altiri-chiba-vs-brave-thunders-id332297" class="mx-action-btn live-btn"> 2565 <svg class="icon"><use href="#icon-live"/></svg> LIVE 2566 </a> 2567 </div> 2568 </div> 2569 <div class="mx-row is-live " data-search="B League Japan Levanga Hokkaido Sendai"> 2570 <div class="mx-left"> 2571 <button type="button" class="mx-fav-btn favorite-btn" 2572 data-match-id="332298" 2573 data-auth="false" 2574 onclick="event.preventDefault(); event.stopPropagation(); handleFavoriteClick(332298, this);" 2575 aria-label="Thêm vào yêu thích"> 2576 <svg class="icon icon-fav"><use href="#icon-star"/></svg> 2577 </button> 2578 <div class="mx-status">
2579 <span class="mx-status-badge live">LIVE</span> 2580 </div> 2581 </div> 2582 2583 <div class="mx-center"> 2584 <a href="/levanga-hokkaido-vs-sendai-id332298" class="mx-teams-link"> 2585 <div class="mx-team-row"> 2586 <img src="https://media.api-sports.io/basketball/teams/7905.png" 2587 alt="Levanga Hokkaido" class="mx-team-logo" loading="lazy" 2588 onerror="this.onerror=null; this.src='/images/placeholder-team.svg';"> 2589 <span class="mx-team-name">Levanga Hokkaido</span> 2590 <span class="mx-score live"> 259151 </span> 2592 </div> 2593 <div class="mx-team-row"> 2594 <img src="/images/basketball/teams/1586.webp" 2595 alt="Sendai" class="mx-team-logo" loading="lazy" 2596 onerror="this.onerror=null; this.src='/images/placeholder-team.svg';"> 2597 <span class="mx-team-name">Sendai</span> 2598 <span class="mx-score live"> 259945 </span> 2600 </div> 2601 </a> 2602 </div> 2603 2604 <div class="mx-right action-column streamer-col"> 2605 <a href="/levanga-hokkaido-vs-sendai-id332298" class="mx-action-btn live-btn"> 2606 <svg class="icon"><use href="#icon-live"/></svg> LIVE 2607 </a> 2608 </div> 2609 </div> 2610 <div class="mx-row is-live " data-search="B League Japan Osaka SeaHorses Mikawa"> 2611 <div class="mx-left"> 2612 <button type="button" class="mx-fav-btn favorite-btn" 2613 data-match-id="332299" 2614 data-auth="false" 2615 onclick="event.preventDefault(); event.stopPropagation(); handleFavoriteClick(332299, this);" 2616 aria-label="Thêm vào yêu thích"> 2617 <svg class="icon icon-fav"><use href="#icon-star"/></svg> 2618 </button> 2619 <div class="mx-status"> 2620 <span class="mx-status-badge live">LIVE</span> 2621 </div> 2622 </div> 2623 2624 <div class="mx-center"> 2625 <a href="/osaka-vs-seahorses-mikawa-id332299" class="mx-teams-link"> 2626 <div class="mx-team-row"> 2627 <img src="/images/basketball/teams/757.webp" 2628 alt="Osaka" class="mx-team-logo" loading="lazy" 2629 onerror="this.onerror=null; this.src='/images/placeholder-team.svg';"> 2630 <span class="mx-team-name">Osaka</span> 2631 <span class="mx-score live"> 263238 </span> 2633 </div> 2634 <div class="mx-team-row"> 2635 <img src="/images/basketball/teams/759.webp" 2636 alt="SeaHorses Mikawa" class="mx-team-logo" loading="lazy" 2637 onerror="this.onerror=null; this.src='/images/placeholder-team.svg';"> 2638 <span class="mx-team-name">SeaHorses Mikawa</span> 2639 <span class="mx-score live"> 264039 </span> 2641 </div> 2642 </a> 2643 </div> 2644 2645 <div class="mx-right action-column streamer-col"> 2646 <a href="/osaka-vs-seahorses-mikawa-id332299" class="mx-action-btn live-btn"> 2647 <svg class="icon"><use href="#icon-live"/></svg> LIVE 2648 </a> 2649 </div> 2650 </div> 2651 <div class="mx-row is-live " data-search="B League Japan Saga NeoPhoenix"> 2652 <div class="mx-left"> 2653 <button type="button" class="mx-fav-btn favorite-btn" 2654 data-match-id="332300" 2655 data-auth="false" 2656 onclick="event.preventDefault(); event.stopPropagation(); handleFavoriteClick(332300, this);" 2657 aria-label="Thêm vào yêu thích"> 2658 <svg class="icon icon-fav"><use href="#icon-star"/></svg> 2659 </button> 2660 <div class="mx-status">
2661 <span class="mx-status-badge live">LIVE</span> 2662 </div> 2663 </div> 2664 2665 <div class="mx-center"> 2666 <a href="/saga-vs-neophoenix-id332300" class="mx-teams-link"> 2667 <div class="mx-team-row"> 2668 <img src="/images/basketball/teams/6035.webp" 2669 alt="Saga" class="mx-team-logo" loading="lazy" 2670 onerror="this.onerror=null; this.src='/images/placeholder-team.svg';"> 2671 <span class="mx-team-name">Saga</span> 2672 <span class="mx-score live"> 267336 </span> 2674 </div> 2675 <div class="mx-team-row"> 2676 <img src="/images/basketball/teams/755.webp" 2677 alt="NeoPhoenix" class="mx-team-logo" loading="lazy" 2678 onerror="this.onerror=null; this.src='/images/placeholder-team.svg';"> 2679 <span class="mx-team-name">NeoPhoenix</span> 2680 <span class="mx-score live"> 268150 </span> 2682 </div> 2683 </a> 2684 </div> 2685 2686 <div class="mx-right action-column streamer-col"> 2687 <a href="/saga-vs-neophoenix-id332300" class="mx-action-btn live-btn"> 2688 <svg class="icon"><use href="#icon-live"/></svg> LIVE 2689 </a> 2690 </div> 2691 </div> 2692 <div class="mx-row is-live " data-search="B League Japan Shiga Ryukyu"> 2693 <div class="mx-left"> 2694 <button type="button" class="mx-fav-btn favorite-btn" 2695 data-match-id="332301" 2696 data-auth="false" 2697 onclick="event.preventDefault(); event.stopPropagation(); handleFavoriteClick(332301, this);" 2698 aria-label="Thêm vào yêu thích"> 2699 <svg class="icon icon-fav"><use href="#icon-star"/></svg> 2700 </button> 2701 <div class="mx-status"> 2702 <span class="mx-status-badge live">LIVE</span> 2703 </div> 2704 </div> 2705 2706 <div class="mx-center"> 2707 <a href="/shiga-vs-ryukyu-id332301" class="mx-teams-link"> 2708 <div class="mx-team-row"> 2709 <img src="/images/basketball/teams/760.webp" 2710 alt="Shiga" class="mx-team-logo" loading="lazy" 2711 onerror="this.onerror=null; this.src='/images/placeholder-team.svg';"> 2712 <span class="mx-team-name">Shiga</span> 2713 <span class="mx-score live"> 271439 </span> 2715 </div> 2716 <div class="mx-team-row"> 2717 <img src="/images/basketball/teams/758.webp" 2718 alt="Ryukyu" class="mx-team-logo" loading="lazy" 2719 onerror="this.onerror=null; this.src='/images/placeholder-team.svg';"> 2720 <span class="mx-team-name">Ryukyu</span> 2721 <span class="mx-score live"> 272245 </span> 2723 </div> 2724 </a> 2725 </div> 2726 2727 <div class="mx-right action-column streamer-col"> 2728 <a href="/shiga-vs-ryukyu-id332301" class="mx-action-btn live-btn"> 2729 <svg class="icon"><use href="#icon-live"/></svg> LIVE 2730 </a> 2731 </div> 2732 </div> 2733 <div class="mx-row is-live " data-search="B League Japan Tokyo Sunrockers Akita"> 2734 <div class="mx-left"> 2735 <button type="button" class="mx-fav-btn favorite-btn" 2736 data-match-id="332302" 2737 data-auth="false" 2738 onclick="event.preventDefault(); event.stopPropagation(); handleFavoriteClick(332302, this);" 2739 aria-label="Thêm vào yêu thích"> 2740 <svg class="icon icon-fav"><use href="#icon-star"/></svg> 2741 </button> 2742 <div class="mx-status">
2743 <span class="mx-status-badge live">LIVE</span> 2744 </div> 2745 </div> 2746 2747 <div class="mx-center"> 2748 <a href="/tokyo-sunrockers-vs-akita-id332302" class="mx-teams-link"> 2749 <div class="mx-team-row"> 2750 <img src="https://media.api-sports.io/basketball/teams/7906.png" 2751 alt="Tokyo Sunrockers" class="mx-team-logo" loading="lazy" 2752 onerror="this.onerror=null; this.src='/images/placeholder-team.svg';"> 2753 <span class="mx-team-name">Tokyo Sunrockers</span> 2754 <span class="mx-score live"> 275535 </span> 2756 </div> 2757 <div class="mx-team-row"> 2758 <img src="/images/basketball/teams/748.webp" 2759 alt="Akita" class="mx-team-logo" loading="lazy" 2760 onerror="this.onerror=null; this.src='/images/placeholder-team.svg';"> 2761 <span class="mx-team-name">Akita</span> 2762 <span class="mx-score live"> 276325 </span> 2764 </div> 2765 </a> 2766 </div> 2767 2768 <div class="mx-right action-column streamer-col"> 2769 <a href="/tokyo-sunrockers-vs-akita-id332302" class="mx-action-btn live-btn"> 2770 <svg class="icon"><use href="#icon-live"/></svg> LIVE 2771 </a> 2772 </div> 2773 </div> 2774 <div class="mx-row is-live " data-search="B League Japan Toyama Utsunomiya Brex"> 2775 <div class="mx-left"> 2776 <button type="button" class="mx-fav-btn favorite-btn" 2777 data-match-id="332303" 2778 data-auth="false" 2779 onclick="event.preventDefault(); event.stopPropagation(); handleFavoriteClick(332303, this);" 2780 aria-label="Thêm vào yêu thích"> 2781 <svg class="icon icon-fav"><use href="#icon-star"/></svg> 2782 </button> 2783 <div class="mx-status"> 2784 <span class="mx-status-badge live">LIVE</span> 2785 </div> 2786 </div> 2787 2788 <div class="mx-center"> 2789 <a href="/toyama-vs-utsunomiya-brex-id332303" class="mx-teams-link"> 2790 <div class="mx-team-row"> 2791 <img src="/images/basketball/teams/763.webp" 2792 alt="Toyama" class="mx-team-logo" loading="lazy" 2793 onerror="this.onerror=null; this.src='/images/placeholder-team.svg';"> 2794 <span class="mx-team-name">Toyama</span> 2795 <span class="mx-score live"> 279639 </span> 2797 </div> 2798 <div class="mx-team-row"> 2799 <img src="/images/basketball/teams/764.webp" 2800 alt="Utsunomiya Brex" class="mx-team-logo" loading="lazy" 2801 onerror="this.onerror=null; this.src='/images/placeholder-team.svg';"> 2802 <span class="mx-team-name">Utsunomiya Brex</span> 2803 <span class="mx-score live"> 280442 </span> 2805 </div> 2806 </a> 2807 </div> 2808 2809 <div class="mx-right action-column streamer-col"> 2810 <a href="/toyama-vs-utsunomiya-brex-id332303" class="mx-action-btn live-btn"> 2811 <svg class="icon"><use href="#icon-live"/></svg> LIVE 2812 </a> 2813 </div> 2814 </div> 2815 <div class="mx-row is-live " data-search="B League Japan Kyoto Nagasaki"> 2816 <div class="mx-left"> 2817 <button type="button" class="mx-fav-btn favorite-btn" 2818 data-match-id="332304" 2819 data-auth="false" 2820 onclick="event.preventDefault(); event.stopPropagation(); handleFavoriteClick(332304, this);" 2821 aria-label="Thêm vào yêu thích"> 2822 <svg class="icon icon-fav"><use href="#icon-star"/></svg> 2823 </button> 2824 <div class="mx-status">
2825 <span class="mx-status-badge live">LIVE</span> 2826 </div> 2827 </div> 2828 2829 <div class="mx-center"> 2830 <a href="/kyoto-vs-nagasaki-id332304" class="mx-teams-link"> 2831 <div class="mx-team-row"> 2832 <img src="/images/basketball/teams/754.webp" 2833 alt="Kyoto" class="mx-team-logo" loading="lazy" 2834 onerror="this.onerror=null; this.src='/images/placeholder-team.svg';"> 2835 <span class="mx-team-name">Kyoto</span> 2836 <span class="mx-score live"> 283710 </span> 2838 </div> 2839 <div class="mx-team-row"> 2840 <img src="/images/basketball/teams/6034.webp" 2841 alt="Nagasaki" class="mx-team-logo" loading="lazy" 2842 onerror="this.onerror=null; this.src='/images/placeholder-team.svg';"> 2843 <span class="mx-team-name">Nagasaki</span> 2844 <span class="mx-score live"> 284521 </span> 2846 </div> 2847 </a> 2848 </div> 2849 2850 <div class="mx-right action-column streamer-col"> 2851 <a href="/kyoto-vs-nagasaki-id332304" class="mx-action-btn live-btn"> 2852 <svg class="icon"><use href="#icon-live"/></svg> LIVE 2853 </a> 2854 </div> 2855 </div> 2856 </div> 2857 </div> 2858 <div class="lg-section" data-search="KBL Cup South Korea"> 2859 <div class="lg-header"> 2860 <div class="lg-header-left"> 2861 <button type="button" class="lg-fav-btn" aria-label="Pin league"> 2862 <svg class="icon"><use href="#icon-star"/></svg> 2863 </button> 2864 <span class="lg-country-name">South Korea:</span> 2865 <img src="https://media.api-sports.io/basketball/leagues/266.png" 2866 alt="KBL Cup" class="lg-logo" loading="lazy" 2867 onerror="if(!this.dataset.fallback){this.src='/images/placeholder-league.svg';this.dataset.fallback='true';}"> 2868 <span class="lg-name">KBL Cup</span> 2869 </div> 2870 <div class="lg-header-right"> 2871 <button type="button" class="lg-collapse-btn" onclick="toggleLeague(this)" aria-label="Toggle"> 2872 <svg class="icon icon-collapse"><use href="#icon-chevron-up"/></svg> 2873 </button> 2874 </div> 2875 </div> 2876 2877 <div class="lg-matches"> 2878 <div class="mx-row is-live " data-search="KBL Cup South Korea KoGas Mobis Phoebus"> 2879 <div class="mx-left"> 2880 <button type="button" class="mx-fav-btn favorite-btn" 2881 data-match-id="328399" 2882 data-auth="false" 2883 onclick="event.preventDefault(); event.stopPropagation(); handleFavoriteClick(328399, this);" 2884 aria-label="Thêm vào yêu thích"> 2885 <svg class="icon icon-fav"><use href="#icon-star"/></svg> 2886 </button> 2887 <div class="mx-status"> 2888 <span class="mx-status-badge live">LIVE</span> 2889 </div> 2890 </div> 2891 2892 <div class="mx-center"> 2893 <a href="/kogas-vs-mobis-phoebus-id328399" class="mx-teams-link"> 2894 <div class="mx-team-row"> 2895 <img src="/images/basketball/teams/3081.webp" 2896 alt="KoGas" class="mx-team-logo" loading="lazy" 2897 onerror="this.onerror=null; this.src='/images/placeholder-team.svg';">
2898 <span class="mx-team-name">KoGas</span> 2899 <span class="mx-score live"> 290045 </span> 2901 </div> 2902 <div class="mx-team-row"> 2903 <img src="/images/basketball/teams/1107.webp" 2904 alt="Mobis Phoebus" class="mx-team-logo" loading="lazy" 2905 onerror="this.onerror=null; this.src='/images/placeholder-team.svg';"> 2906 <span class="mx-team-name">Mobis Phoebus</span> 2907 <span class="mx-score live"> 290838 </span> 2909 </div> 2910 </a> 2911 </div> 2912 2913 <div class="mx-right action-column streamer-col"> 2914 <a href="/kogas-vs-mobis-phoebus-id328399" class="mx-action-btn live-btn"> 2915 <svg class="icon"><use href="#icon-live"/></svg> LIVE 2916 </a> 2917 </div> 2918 </div> 2919 <div class="mx-row is-live " data-search="KBL Cup South Korea Wonju DB Seoul Thunders"> 2920 <div class="mx-left"> 2921 <button type="button" class="mx-fav-btn favorite-btn" 2922 data-match-id="328400" 2923 data-auth="false" 2924 onclick="event.preventDefault(); event.stopPropagation(); handleFavoriteClick(328400, this);" 2925 aria-label="Thêm vào yêu thích"> 2926 <svg class="icon icon-fav"><use href="#icon-star"/></svg> 2927 </button> 2928 <div class="mx-status"> 2929 <span class="mx-status-badge live">LIVE</span> 2930 </div> 2931 </div> 2932 2933 <div class="mx-center"> 2934 <a href="/wonju-db-vs-seoul-thunders-id328400" class="mx-teams-link"> 2935 <div class="mx-team-row"> 2936 <img src="/images/basketball/teams/1111.webp" 2937 alt="Wonju DB" class="mx-team-logo" loading="lazy" 2938 onerror="this.onerror=null; this.src='/images/placeholder-team.svg';"> 2939 <span class="mx-team-name">Wonju DB</span> 2940 <span class="mx-score live"> 294145 </span> 2942 </div> 2943 <div class="mx-team-row"> 2944 <img src="/images/basketball/teams/1109.webp" 2945 alt="Seoul Thunders" class="mx-team-logo" loading="lazy" 2946 onerror="this.onerror=null; this.src='/images/placeholder-team.svg';"> 2947 <span class="mx-team-name">Seoul Thunders</span> 2948 <span class="mx-score live"> 294941 </span> 2950 </div> 2951 </a> 2952 </div> 2953 2954 <div class="mx-right action-column streamer-col"> 2955 <a href="/wonju-db-vs-seoul-thunders-id328400" class="mx-action-btn live-btn"> 2956 <svg class="icon"><use href="#icon-live"/></svg> LIVE 2957 </a> 2958 </div> 2959 </div> 2960 <div class="mx-row is-live " data-search="KBL Cup South Korea KCC Egis LG Sakers"> 2961 <div class="mx-left"> 2962 <button type="button" class="mx-fav-btn favorite-btn" 2963 data-match-id="328605" 2964 data-auth="false" 2965 onclick="event.preventDefault(); event.stopPropagation(); handleFavoriteClick(328605, this);" 2966 aria-label="Thêm vào yêu thích"> 2967 <svg class="icon icon-fav"><use href="#icon-star"/></svg> 2968 </button> 2969 <div class="mx-status">
2970 <span class="mx-status-badge live">LIVE</span> 2971 </div> 2972 </div> 2973 2974 <div class="mx-center"> 2975 <a href="/kcc-egis-vs-lg-sakers-id328605" class="mx-teams-link"> 2976 <div class="mx-team-row"> 2977 <img src="/images/basketball/teams/1105.webp" 2978 alt="KCC Egis" class="mx-team-logo" loading="lazy" 2979 onerror="this.onerror=null; this.src='/images/placeholder-team.svg';"> 2980 <span class="mx-team-name">KCC Egis</span> 2981 <span class="mx-score live"> 298243 </span> 2983 </div> 2984 <div class="mx-team-row"> 2985 <img src="/images/basketball/teams/1106.webp" 2986 alt="LG Sakers" class="mx-team-logo" loading="lazy" 2987 onerror="this.onerror=null; this.src='/images/placeholder-team.svg';"> 2988 <span class="mx-team-name">LG Sakers</span> 2989 <span class="mx-score live"> 299056 </span> 2991 </div> 2992 </a> 2993 </div> 2994 2995 <div class="mx-right action-column streamer-col"> 2996 <a href="/kcc-egis-vs-lg-sakers-id328605" class="mx-action-btn live-btn"> 2997 <svg class="icon"><use href="#icon-live"/></svg> LIVE 2998 </a> 2999 </div> 3000 </div> 3001 <div class="mx-row is-live " data-search="KBL Cup South Korea Seoul Knights Wonju DB"> 3002 <div class="mx-left"> 3003 <button type="button" class="mx-fav-btn favorite-btn" 3004 data-match-id="328922" 3005 data-auth="false" 3006 onclick="event.preventDefault(); event.stopPropagation(); handleFavoriteClick(328922, this);" 3007 aria-label="Thêm vào yêu thích"> 3008 <svg class="icon icon-fav"><use href="#icon-star"/></svg> 3009 </button> 3010 <div class="mx-status"> 3011 <span class="mx-status-badge live">LIVE</span> 3012 </div> 3013 </div> 3014 3015 <div class="mx-center"> 3016 <a href="/seoul-knights-vs-wonju-db-id328922" class="mx-teams-link"> 3017 <div class="mx-team-row"> 3018 <img src="/images/basketball/teams/1108.webp" 3019 alt="Seoul Knights" class="mx-team-logo" loading="lazy" 3020 onerror="this.onerror=null; this.src='/images/placeholder-team.svg';"> 3021 <span class="mx-team-name">Seoul Knights</span> 3022 <span class="mx-score live"> 302333 </span> 3024 </div> 3025 <div class="mx-team-row"> 3026 <img src="/images/basketball/teams/1111.webp" 3027 alt="Wonju DB" class="mx-team-logo" loading="lazy" 3028 onerror="this.onerror=null; this.src='/images/placeholder-team.svg';"> 3029 <span class="mx-team-name">Wonju DB</span> 3030 <span class="mx-score live"> 303160 </span> 3032 </div> 3033 </a> 3034 </div> 3035 3036 <div class="mx-right action-column streamer-col"> 3037 <a href="/seoul-knights-vs-wonju-db-id328922" class="mx-action-btn live-btn"> 3038 <svg class="icon"><use href="#icon-live"/></svg> LIVE 3039 </a> 3040 </div> 3041 </div> 3042 <div class="mx-row is-live " data-search="KBL Cup S
3042outh Korea Seoul Thunders Anyang JungKwanJang"> 3043 <div class="mx-left"> 3044 <button type="button" class="mx-fav-btn favorite-btn" 3045 data-match-id="330266" 3046 data-auth="false" 3047 onclick="event.preventDefault(); event.stopPropagation(); handleFavoriteClick(330266, this);" 3048 aria-label="Thêm vào yêu thích"> 3049 <svg class="icon icon-fav"><use href="#icon-star"/></svg> 3050 </button> 3051 <div class="mx-status"> 3052 <span class="mx-status-badge live">LIVE</span> 3053 </div> 3054 </div> 3055 3056 <div class="mx-center"> 3057 <a href="/seoul-thunders-vs-anyang-jungkwanjang-id330266" class="mx-teams-link"> 3058 <div class="mx-team-row"> 3059 <img src="/images/basketball/teams/1109.webp" 3060 alt="Seoul Thunders" class="mx-team-logo" loading="lazy" 3061 onerror="this.onerror=null; this.src='/images/placeholder-team.svg';"> 3062 <span class="mx-team-name">Seoul Thunders</span> 3063 <span class="mx-score live"> 306435 </span> 3065 </div> 3066 <div class="mx-team-row"> 3067 <img src="/images/basketball/teams/1102.webp" 3068 alt="Anyang JungKwanJang" class="mx-team-logo" loading="lazy" 3069 onerror="this.onerror=null; this.src='/images/placeholder-team.svg';"> 3070 <span class="mx-team-name">Anyang JungKwanJang</span> 3071 <span class="mx-score live"> 307238 </span> 3073 </div> 3074 </a> 3075 </div> 3076 3077 <div class="mx-right action-column streamer-col"> 3078 <a href="/seoul-thunders-vs-anyang-jungkwanjang-id330266" class="mx-action-btn live-btn"> 3079 <svg class="icon"><use href="#icon-live"/></svg> LIVE 3080 </a> 3081 </div> 3082 </div> 3083 <div class="mx-row is-live " data-search="KBL Cup South Korea Suwon KT Goyang Sono"> 3084 <div class="mx-left"> 3085 <button type="button" class="mx-fav-btn favorite-btn" 3086 data-match-id="330267" 3087 data-auth="false" 3088 onclick="event.preventDefault(); event.stopPropagation(); handleFavoriteClick(330267, this);" 3089 aria-label="Thêm vào yêu thích"> 3090 <svg class="icon icon-fav"><use href="#icon-star"/></svg> 3091 </button> 3092 <div class="mx-status"> 3093 <span class="mx-status-badge live">LIVE</span> 3094 </div> 3095 </div> 3096 3097 <div class="mx-center"> 3098 <a href="/suwon-kt-vs-goyang-sono-id330267" class="mx-teams-link"> 3099 <div class="mx-team-row"> 3100 <img src="/images/basketball/teams/3173.webp" 3101 alt="Suwon KT" class="mx-team-logo" loading="lazy" 3102 onerror="this.onerror=null; this.src='/images/placeholder-team.svg';"> 3103 <span class="mx-team-name">Suwon KT</span>
3104 <span class="mx-score live"> 310561 </span> 3106 </div> 3107 <div class="mx-team-row"> 3108 <img src="/images/basketball/teams/1103.webp" 3109 alt="Goyang Sono" class="mx-team-logo" loading="lazy" 3110 onerror="this.onerror=null; this.src='/images/placeholder-team.svg';"> 3111 <span class="mx-team-name">Goyang Sono</span> 3112 <span class="mx-score live"> 311356 </span> 3114 </div> 3115 </a> 3116 </div> 3117 3118 <div class="mx-right action-column streamer-col"> 3119 <a href="/suwon-kt-vs-goyang-sono-id330267" class="mx-action-btn live-btn"> 3120 <svg class="icon"><use href="#icon-live"/></svg> LIVE 3121 </a> 3122 </div> 3123 </div> 3124 </div> 3125 </div>
3126 <div class="lg-section" data-search="NBL1 East Australia"> 3127 <div class="lg-header"> 3128 <div class="lg-header-left"> 3129 <button type="button" class="lg-fav-btn" aria-label="Pin league"> 3130 <svg class="icon"><use href="#icon-star"/></svg> 3131 </button> 3132 <span class="lg-country-name">Australia:</span> 3133 <img src="/images/basketball/leagues/215.webp" 3134 alt="NBL1 East" class="lg-logo" loading="lazy" 3135 onerror="if(!this.dataset.fallback){this.src='/images/placeholder-league.svg';this.dataset.fallback='true';}"> 3136 <span class="lg-name">NBL1 East</span> 3137 </div> 3138 <div class="lg-header-right"> 3139 <button type="button" class="lg-collapse-btn" onclick="toggleLeague(this)" aria-label="Toggle"> 3140 <svg class="icon icon-collapse"><use href="#icon-chevron-up"/></svg> 3141 </button> 3142 </div> 3143 </div> 3144 3145 <div class="lg-matches"> 3146 <div class="mx-row is-live " data-search="NBL1
3146East Australia Central Coast Crusaders Bankstown Bruins"> 3147 <div class="mx-left"> 3148 <button type="button" class="mx-fav-btn favorite-btn" 3149 data-match-id="284825" 3150 data-auth="false" 3151 onclick="event.preventDefault(); event.stopPropagation(); handleFavoriteClick(284825, this);" 3152 aria-label="Thêm vào yêu thích"> 3153 <svg class="icon icon-fav"><use href="#icon-star"/></svg> 3154 </button> 3155 <div class="mx-status"> 3156 <span class="mx-status-badge live">LIVE</span> 3157 </div> 3158 </div> 3159 3160 <div class="mx-center"> 3161 <a href="/central-coast-crusaders-vs-bankstown-bruins-id284825" class="mx-teams-link"> 3162 <div class="mx-team-row"> 3163 <img src="/images/basketball/teams/3534.webp" 3164 alt="Central Coast Crusaders" class="mx-team-logo" loading="lazy" 3165 onerror="this.onerror=null; this.src='/images/placeholder-team.svg';"> 3166 <span class="mx-team-name">Central Coast Crusaders</span> 3167 <span class="mx-score live"> 316869 </span> 3169 </div> 3170 <div class="mx-team-row"> 3171 <img src="/images/basketball/teams/3533.webp" 3172 alt="Bankstown Bruins" class="mx-team-logo" loading="lazy" 3173 onerror="this.onerror=null; this.src='/images/placeholder-team.svg';"> 3174 <span class="mx-team-name">Bankstown Bruins</span> 3175 <span class="mx-score live"> 317659 </span> 3177 </div> 3178 </a> 3179 </div> 3180 3181 <div class="mx-right action-column streamer-col"> 3182 <a href="/central-coast-crusaders-vs-bankstown-bruins-id284825" class="mx-action-btn live-btn"> 3183 <svg class="icon"><use href="#icon-live"/></svg> LIVE 3184 </a> 3185 </div> 3186 </div> 3187 <div class="mx-row is-live " data-search="NBL1
3187East Australia Manly W. Central Coast Crusaders"> 3188 <div class="mx-left"> 3189 <button type="button" class="mx-fav-btn favorite-btn" 3190 data-match-id="304617" 3191 data-auth="false" 3192 onclick="event.preventDefault(); event.stopPropagation(); handleFavoriteClick(304617, this);" 3193 aria-label="Thêm vào yêu thích"> 3194 <svg class="icon icon-fav"><use href="#icon-star"/></svg> 3195 </button> 3196 <div class="mx-status"> 3197 <span class="mx-status-badge live">LIVE</span> 3198 </div> 3199 </div> 3200 3201 <div class="mx-center"> 3202 <a href="/manly-w-vs-central-coast-crusaders-id304617" class="mx-teams-link"> 3203 <div class="mx-team-row"> 3204 <img src="/images/basketball/teams/3538.webp" 3205 alt="Manly W." class="mx-team-logo" loading="lazy" 3206 onerror="this.onerror=null; this.src='/images/placeholder-team.svg';"> 3207 <span class="mx-team-name">Manly W.</span> 3208 <span class="mx-score live"> 320940 </span> 3210 </div> 3211 <div class="mx-team-row"> 3212 <img src="/images/basketball/teams/3534.webp" 3213 alt="Central Coast Crusaders" class="mx-team-logo" loading="lazy" 3214 onerror="this.onerror=null; this.src='/images/placeholder-team.svg';"> 3215 <span class="mx-team-name">Central Coast Crusaders</span> 3216 <span class="mx-score live"> 321732 </span> 3218 </div> 3219 </a> 3220 </div> 3221 3222 <div class="mx-right action-column streamer-col"> 3223 <a href="/manly-w-vs-central-coast-crusaders-id304617" class="mx-action-btn live-btn"> 3224 <svg class="icon"><use href="#icon-live"/></svg> LIVE 3225 </a> 3226 </div> 3227 </div> 3228 <div class="mx-row is-live " data-search="NBL1
3228East Australia Sutherland Sharks Norths Bears"> 3229 <div class="mx-left"> 3230 <button type="button" class="mx-fav-btn favorite-btn" 3231 data-match-id="310978" 3232 data-auth="false" 3233 onclick="event.preventDefault(); event.stopPropagation(); handleFavoriteClick(310978, this);" 3234 aria-label="Thêm vào yêu thích"> 3235 <svg class="icon icon-fav"><use href="#icon-star"/></svg> 3236 </button> 3237 <div class="mx-status"> 3238 <span class="mx-status-badge live">LIVE</span> 3239 </div> 3240 </div> 3241 3242 <div class="mx-center"> 3243 <a href="/sutherland-sharks-vs-norths-bears-id310978" class="mx-teams-link"> 3244 <div class="mx-team-row"> 3245 <img src="/images/basketball/teams/3541.webp" 3246 alt="Sutherland Sharks" class="mx-team-logo" loading="lazy" 3247 onerror="this.onerror=null; this.src='/images/placeholder-team.svg';"> 3248 <span class="mx-team-name">Sutherland Sharks</span> 3249 <span class="mx-score live"> 325029 </span> 3251 </div> 3252 <div class="mx-team-row"> 3253 <img src="/images/basketball/teams/3540.webp" 3254 alt="Norths Bears" class="mx-team-logo" loading="lazy" 3255 onerror="this.onerror=null; this.src='/images/placeholder-team.svg';"> 3256 <span class="mx-team-name">Norths Bears</span> 3257 <span class="mx-score live"> 325827 </span> 3259 </div> 3260 </a> 3261 </div> 3262 3263 <div class="mx-right action-column streamer-col"> 3264 <a href="/sutherland-sharks-vs-norths-bears-id310978" class="mx-action-btn live-btn"> 3265 <svg class="icon"><use href="#icon-live"/></svg> LIVE 3266 </a> 3267 </div> 3268 </div> 3269 </div> 3270 </div> 3271 <div class="lg-section" data-search="Liga MX Mexico"> 3272 <div class="lg-header"> 3273 <div class="lg-header-left"> 3274 <button type="button" class="lg-fav-btn" aria-label="Pin league"> 3275 <svg class="icon"><use href="#icon-star"/></svg> 3276 </button> 3277 <span class="lg-country-name">Mexico:</span> 3278 <img src="/images/football/leagues/262.webp" 3279 alt="Liga MX" class="lg-logo" loading="lazy" 3280 onerror="if(!this.dataset.fallback){this.src='/images/placeholder-league.svg';this.dataset.fallback='true';}"> 3281 <span class="lg-name">Liga MX</span> 3282 </div> 3283 <div class="lg-header-right"> 3284 <button type="button" class="lg-collapse-btn" onclick="toggleLeague(this)" aria-label="Toggle"> 3285 <svg class="icon icon-collapse"><use href="#icon-chevron-up"/></svg> 3286 </button> 3287 </div> 3288 </div> 3289 3290 <div class="lg-matches"> 3291 <div class="mx-row is-live " data-search="Liga MX Mexico Puebla Leon Phan Pepsi"> 3292 <div class="mx-left"> 3293 <button type="button" class="mx-fav-btn favorite-btn" 3294 data-match-id="336719" 3295 data-auth="false" 3296 onclick="event.preventDefault(); event.stopPropagation(); handleFavoriteClick(336719, this);" 3297 aria-label="Thêm vào yêu thích"> 3298 <svg class="icon icon-fav"><use href="#icon-star"/></svg> 3299 </button> 3300 <div class="mx-status">
3301 <span class="mx-status-badge live">2H</span> 3302 <span class="mx-minute">64<span class="minute-tick">'</span></span> 3303 </div> 3304 </div> 3305 3306 <div class="mx-center"> 3307 <a href="/puebla-vs-leon-id336719/phan-pepsi" class="mx-teams-link"> 3308 <div class="mx-team-row"> 3309 <img src="/images/football/teams/2291.webp" 3310 alt="Puebla" class="mx-team-logo" loading="lazy" 3311 onerror="this.onerror=null; this.src='/images/placeholder-team.svg';"> 3312 <span class="mx-team-name">Puebla</span> 3313 <span class="mx-score live"> 33140 </span> 3315 </div> 3316 <div class="mx-team-row"> 3317 <img src="/images/football/teams/2289.webp" 3318 alt="Leon" class="mx-team-logo" loading="lazy" 3319 onerror="this.onerror=null; this.src='/images/placeholder-team.svg';"> 3320 <span class="mx-team-name">Leon</span> 3321 <span class="mx-score live"> 33221 </span> 3323 </div> 3324 </a> 3325 </div> 3326 3327 <div class="mx-right action-column streamer-col"> 3328 <a href="/puebla-vs-leon-id336719/phan-pepsi" class="mx-action-btn live-btn"> 3329 <svg class="icon"><use href="#icon-live"/></svg> LIVE 3330 </a> 3331 <a href="/streamer/12/phan-pepsi" 3332 class="mx-streamer-badge mx-streamer-badge-live mx-streamer-pill" 3333 title="BLV PHAN PEPSI"> 3334 <svg class="icon icon-mic"><use href="#icon-mic"/></svg> 3335 <span class="mx-streamer-name">BLV PHAN PEPSI</span> 3336 </a> 3337 </div> 3338 </div> 3339 <div class="mx-row is-live " data-search="Liga MX Mexico Puebla Leon Hawkeye"> 3340 <div class="mx-left"> 3341 <button type="button" class="mx-fav-btn favorite-btn" 3342 data-match-id="336719" 3343 data-auth="false" 3344 onclick="event.preventDefault(); event.stopPropagation(); handleFavoriteClick(336719, this);" 3345 aria-label="Thêm vào yêu thích"> 3346 <svg class="icon icon-fav"><use href="#icon-star"/></svg> 3347 </button> 3348 <div class="mx-status"> 3349 <span class="mx-status-badge live">2H</span> 3350 <span class="mx-minute">64<span class="minute-tick">'</span></span> 3351 </div> 3352 </div> 3353 3354 <div class="mx-center"> 3355 <a href="/puebla-vs-leon-id336719/hawkeye" class="mx-teams-link"> 3356 <div class="mx-team-row"> 3357 <img src="/images/football/teams/2291.webp" 3358 alt="Puebla" class="mx-team-logo" loading="lazy" 3359 onerror="this.onerror=null; this.src='/images/placeholder-team.svg';"> 3360 <span class="mx-team-name">Puebla</span> 3361 <span class="mx-score live"> 33620 </span> 3363 </div> 3364 <div class="mx-team-row"> 3365 <img src="/images/football/teams/2289.webp" 3366 alt="Leon" class="mx-team-logo" loading="lazy" 3367 onerror="this.onerror=null; this.src='/images/placeholder-team.svg';">
3368 <span class="mx-team-name">Leon</span> 3369 <span class="mx-score live"> 33701 </span> 3371 </div> 3372 </a> 3373 </div> 3374 3375 <div class="mx-right action-column streamer-col"> 3376 <a href="/puebla-vs-leon-id336719/hawkeye" class="mx-action-btn live-btn"> 3377 <svg class="icon"><use href="#icon-live"/></svg> LIVE 3378 </a> 3379 <a href="/streamer/79/hawkeye" 3380 class="mx-streamer-badge mx-streamer-badge-live mx-streamer-pill" 3381 title="BLV HAWKEYE"> 3382 <svg class="icon icon-mic"><use href="#icon-mic"/></svg> 3383 <span class="mx-streamer-name">BLV HAWKEYE</span> 3384 </a> 3385 </div> 3386 </div> 3387 </div> 3388 </div> 3389 <div class="lg-section" data-search="World Cup World"> 3390 <div class="lg-header"> 3391 <div class="lg-header-left"> 3392 <button type="button" class="lg-fav-btn" aria-label="Pin league"> 3393 <svg class="icon"><use href="#icon-star"/></svg> 3394 </button> 3395 <span class="lg-country-name">World:</span> 3396 <img src="/images/basketball/leagues/281.webp" 3397 alt="World Cup" class="lg-logo" loading="lazy" 3398 onerror="if(!this.dataset.fallback){this.src='/images/placeholder-league.svg';this.dataset.fallback='true';}"> 3399 <span class="lg-name">World Cup</span> 3400 </div> 3401 <div class="lg-header-right"> 3402 <button type="button" class="lg-collapse-btn" onclick="toggleLeague(this)" aria-label="Toggle"> 3403 <svg class="icon icon-collapse"><use href="#icon-chevron-up"/></svg> 3404 </button> 3405 </div> 3406 </div> 3407 3408 <div class="lg-matches"> 3409 <div class="mx-row is-live " data-search="World Cup World Iran New Zealand"> 3410 <div class="mx-left"> 3411 <button type="button" class="mx-fav-btn favorite-btn" 3412 data-match-id="311617" 3413 data-auth="false" 3414 onclick="event.preventDefault(); event.stopPropagation(); handleFavoriteClick(311617, this);" 3415 aria-label="Thêm vào yêu thích"> 3416 <svg class="icon icon-fav"><use href="#icon-star"/></svg> 3417 </button> 3418 <div class="mx-status"> 3419 <span class="mx-status-badge live">LIVE</span> 3420 </div> 3421 </div> 3422 3423 <div class="mx-center"> 3424 <a href="/iran-vs-new-zealand-id311617" class="mx-teams-link"> 3425 <div class="mx-team-row"> 3426 <img src="/images/basketball/teams/3055.webp" 3427 alt="Iran" class="mx-team-logo" loading="lazy" 3428 onerror="this.onerror=null; this.src='/images/placeholder-team.svg';"> 3429 <span class="mx-team-name">Iran</span> 3430 <span class="mx-score live"> 34312 </span> 3432 </div> 3433 <div class="mx-team-row"> 3434 <img src="/images/basketball/teams/4085.webp" 3435 alt="New Zealand" class="mx-team-logo" loading="lazy" 3436 onerror="this.onerror=null; this.src='/images/placeholder-team.svg';">
3437 <span class="mx-team-name">New Zealand</span> 3438 <span class="mx-score live"> 34392 </span> 3440 </div> 3441 </a> 3442 </div> 3443 3444 <div class="mx-right action-column streamer-col"> 3445 <a href="/iran-vs-new-zealand-id311617" class="mx-action-btn live-btn"> 3446 <svg class="icon"><use href="#icon-live"/></svg> LIVE 3447 </a> 3448 </div> 3449 </div> 3450 <div class="mx-row is-live " data-search="World Cup World New Zealand Syria"> 3451 <div class="mx-left"> 3452 <button type="button" class="mx-fav-btn favorite-btn" 3453 data-match-id="313561" 3454 data-auth="false" 3455 onclick="event.preventDefault(); event.stopPropagation(); handleFavoriteClick(313561, this);" 3456 aria-label="Thêm vào yêu thích"> 3457 <svg class="icon icon-fav"><use href="#icon-star"/></svg> 3458 </button> 3459 <div class="mx-status"> 3460 <span class="mx-status-badge live">LIVE</span> 3461 </div> 3462 </div> 3463 3464 <div class="mx-center"> 3465 <a href="/new-zealand-vs-syria-id313561" class="mx-teams-link"> 3466 <div class="mx-team-row"> 3467 <img src="/images/basketball/teams/4085.webp" 3468 alt="New Zealand" class="mx-team-logo" loading="lazy" 3469 onerror="this.onerror=null; this.src='/images/placeholder-team.svg';"> 3470 <span class="mx-team-name">New Zealand</span> 3471 <span class="mx-score live"> 34724 </span> 3473 </div> 3474 <div class="mx-team-row"> 3475 <img src="/images/basketball/teams/4090.webp" 3476 alt="Syria" class="mx-team-logo" loading="lazy" 3477 onerror="this.onerror=null; this.src='/images/placeholder-team.svg';"> 3478 <span class="mx-team-name">Syria</span> 3479 <span class="mx-score live"> 34800 </span> 3481 </div> 3482 </a> 3483 </div> 3484 3485 <div class="mx-right action-column streamer-col"> 3486 <a href="/new-zealand-vs-syria-id313561" class="mx-action-btn live-btn"> 3487 <svg class="icon"><use href="#icon-live"/></svg> LIVE 3488 </a> 3489 </div> 3490 </div> 3491 </div> 3492 </div> 3493 <div class="lg-section" data-search="Russian Cup W Russia"> 3494 <div class="lg-header"> 3495 <div class="lg-header-left"> 3496 <button type="button" class="lg-fav-btn" aria-label="Pin league"> 3497 <svg class="icon"><use href="#icon-star"/></svg> 3498 </button> 3499 <span class="lg-country-name">Russia:</span> 3500 <img src="https://media.api-sports.io/basketball/leagues/80.png" 3501 alt="Russian Cup W" class="lg-logo" loading="lazy" 3502 onerror="if(!this.dataset.fallback){this.src='/images/placeholder-league.svg';this.dataset.fallback='true';}"> 3503 <span class="lg-name">Russian Cup W</span> 3504 </div> 3505 <div class="lg-header-right"> 3506 <button type="button" class="lg-collapse-btn" onclick="toggleLeague(this)" aria-label="Toggle"> 3507 <svg class="icon icon-collapse"><use href="#icon-chevron-up"/></svg> 3508 </button> 3509 </div> 3510 </div> 3511 3512 <div class="lg-matches"> 3513 <div class="mx-row is-live " data-search="Russian Cup W Russia Metallurg Magnitogorsk W Enisey Krasnoyarsk 2 W"> 3514 <div class="mx-left"> 3515 <button type="button" class="mx-fav-btn favorite-btn" 3516 data-match-id="323123" 3517 data-auth="false" 3518 onclick="event.preventDefault(); event.stopPropagation(); handleFavoriteClick(323123, this);" 3519 aria-label="Thêm vào yêu thích"> 3520 <svg class="icon icon-fav"><use href="#icon-star"/></svg> 3521 </button> 3522 <div class="mx-status">
3523 <span class="mx-status-badge live">LIVE</span> 3524 </div> 3525 </div> 3526 3527 <div class="mx-center"> 3528 <a href="/metallurg-magnitogorsk-w-vs-enisey-krasnoyarsk-2-w-id323123" class="mx-teams-link"> 3529 <div class="mx-team-row"> 3530 <img src="https://media.api-sports.io/basketball/teams/7937.png" 3531 alt="Metallurg Magnitogorsk W" class="mx-team-logo" loading="lazy" 3532 onerror="this.onerror=null; this.src='/images/placeholder-team.svg';"> 3533 <span class="mx-team-name">Metallurg Magnitogorsk W</span> 3534 <span class="mx-score live"> 35350 </span> 3536 </div> 3537 <div class="mx-team-row"> 3538 <img src="https://media.api-sports.io/basketball/teams/5424.png" 3539 alt="Enisey Krasnoyarsk 2 W" class="mx-team-logo" loading="lazy" 3540 onerror="this.onerror=null; this.src='/images/placeholder-team.svg';"> 3541 <span class="mx-team-name">Enisey Krasnoyarsk 2 W</span> 3542 <span class="mx-score live"> 35430 </span> 3544 </div> 3545 </a> 3546 </div> 3547 3548 <div class="mx-right action-column streamer-col"> 3549 <a href="/metallurg-magnitogorsk-w-vs-enisey-krasnoyarsk-2-w-id323123" class="mx-action-btn live-btn"> 3550 <svg class="icon"><use href="#icon-live"/></svg> LIVE 3551 </a> 3552 </div> 3553 </div> 3554 <div class="mx-row is-live " data-search="Russian Cup W Russia Metallurg Magnitogorsk W Chelyabinsk W"> 3555 <div class="mx-left"> 3556 <button type="button" class="mx-fav-btn favorite-btn" 3557 data-match-id="323124" 3558 data-auth="false" 3559 onclick="event.preventDefault(); event.stopPropagation(); handleFavoriteClick(323124, this);" 3560 aria-label="Thêm vào yêu thích"> 3561 <svg class="icon icon-fav"><use href="#icon-star"/></svg> 3562 </button> 3563 <div class="mx-status"> 3564 <span class="mx-status-badge live">LIVE</span> 3565 </div> 3566 </div> 3567 3568 <div class="mx-center"> 3569 <a href="/metallurg-magnitogorsk-w-vs-chelyabinsk-w-id323124" class="mx-teams-link"> 3570 <div class="mx-team-row"> 3571 <img src="https://media.api-sports.io/basketball/teams/7937.png" 3572 alt="Metallurg Magnitogorsk W" class="mx-team-logo" loading="lazy" 3573 onerror="this.onerror=null; this.src='/images/placeholder-team.svg';"> 3574 <span class="mx-team-name">Metallurg Magnitogorsk W</span> 3575 <span class="mx-score live"> 35763 </span> 3577 </div> 3578 <div class="mx-team-row"> 3579 <img src="https://media.api-sports.io/basketball/teams/5606.png" 3580 alt="Chelyabinsk W" class="mx-team-logo" loading="lazy" 3581 onerror="this.onerror=null; this.src='/images/placeholder-team.svg';">
3582 <span class="mx-team-name">Chelyabinsk W</span> 3583 <span class="mx-score live"> 35842 </span> 3585 </div> 3586 </a> 3587 </div> 3588 3589 <div class="mx-right action-column streamer-col"> 3590 <a href="/metallurg-magnitogorsk-w-vs-chelyabinsk-w-id323124" class="mx-action-btn live-btn"> 3591 <svg class="icon"><use href="#icon-live"/></svg> LIVE 3592 </a> 3593 </div> 3594 </div> 3595 </div> 3596 </div> 3597 <div class="lg-section" data-search="Asian Games Women Asia"> 3598 <div class="lg-header"> 3599 <div class="lg-header-left"> 3600 <button type="button" class="lg-fav-btn" aria-label="Pin league"> 3601 <svg class="icon"><use href="#icon-star"/></svg> 3602 </button> 3603 <span class="lg-country-name">Asia:</span> 3604 <img src="https://media.api-sports.io/basketball/leagues/302.png" 3605 alt="Asian Games Women" class="lg-logo" loading="lazy" 3606 onerror="if(!this.dataset.fallback){this.src='/images/placeholder-league.svg';this.dataset.fallback='true';}"> 3607 <span class="lg-name">Asian Games Women</span> 3608 </div> 3609 <div class="lg-header-right"> 3610 <button type="button" class="lg-collapse-btn" onclick="toggleLeague(this)" aria-label="Toggle"> 3611 <svg class="icon icon-collapse"><use href="#icon-chevron-up"/></svg> 3612 </button> 3613 </div> 3614 </div> 3615 3616 <div class="lg-matches"> 3617 <div class="mx-row is-live " data-search="Asian Games Women Asia Indonesia W Thailand W"> 3618 <div class="mx-left"> 3619 <button type="button" class="mx-fav-btn favorite-btn" 3620 data-match-id="324198" 3621 data-auth="false" 3622 onclick="event.preventDefault(); event.stopPropagation(); handleFavoriteClick(324198, this);" 3623 aria-label="Thêm vào yêu thích"> 3624 <svg class="icon icon-fav"><use href="#icon-star"/></svg> 3625 </button> 3626 <div class="mx-status"> 3627 <span class="mx-status-badge live">LIVE</span> 3628 </div> 3629 </div> 3630 3631 <div class="mx-center"> 3632 <a href="/indonesia-w-vs-thailand-w-id324198" class="mx-teams-link"> 3633 <div class="mx-team-row"> 3634 <img src="https://media.api-sports.io/basketball/teams/4350.png" 3635 alt="Indonesia W" class="mx-team-logo" loading="lazy" 3636 onerror="this.onerror=null; this.src='/images/placeholder-team.svg';"> 3637 <span class="mx-team-name">Indonesia W</span> 3638 <span class="mx-score live"> 363957 </span> 3640 </div> 3641 <div class="mx-team-row"> 3642 <img src="https://media.api-sports.io/basketball/teams/4354.png" 3643 alt="Thailand W" class="mx-team-logo" loading="lazy" 3644 onerror="this.onerror=null; this.src='/images/placeholder-team.svg';"> 3645 <span class="mx-team-name">Thailand W</span> 3646 <span class="mx-score live"> 364748 </span> 3648 </div> 3649 </a> 3650 </div> 3651 3652 <div class="mx-right action-column streamer-col"> 3653 <a href="/indonesia-w-vs-thailand-w-id324198" class="mx-action-btn live-btn"> 3654 <svg class="icon"><use href="#icon-live"/></svg> LIVE 3655 </a> 3656 </div> 3657 </div> 3658 <div class="mx-row is-live " data-search="Asian Games Women Asia Kazakhstan W Japan W"> 3659 <div class="mx-left"> 3660 <button type="button" class="mx-fav-btn favorite-btn" 3661 data-match-id="326544" 3662 data-auth="false" 3663 onclick="event.preventDefault(); event.stopPropagation(); handleFavoriteClick(326544, this);" 3664 aria-label="Thêm vào yêu thích"> 3665 <svg class="icon icon-fav"><use href="#icon-star"/></svg> 3666 </button> 3667 <div class="mx-status">
3668 <span class="mx-status-badge live">LIVE</span> 3669 </div> 3670 </div> 3671 3672 <div class="mx-center"> 3673 <a href="/kazakhstan-w-vs-japan-w-id326544" class="mx-teams-link"> 3674 <div class="mx-team-row"> 3675 <img src="https://media.api-sports.io/basketball/teams/4351.png" 3676 alt="Kazakhstan W" class="mx-team-logo" loading="lazy" 3677 onerror="this.onerror=null; this.src='/images/placeholder-team.svg';"> 3678 <span class="mx-team-name">Kazakhstan W</span> 3679 <span class="mx-score live"> 368020 </span> 3681 </div> 3682 <div class="mx-team-row"> 3683 <img src="https://media.api-sports.io/basketball/teams/3042.png" 3684 alt="Japan W" class="mx-team-logo" loading="lazy" 3685 onerror="this.onerror=null; this.src='/images/placeholder-team.svg';"> 3686 <span class="mx-team-name">Japan W</span> 3687 <span class="mx-score live"> 368863 </span> 3689 </div> 3690 </a> 3691 </div> 3692 3693 <div class="mx-right action-column streamer-col"> 3694 <a href="/kazakhstan-w-vs-japan-w-id326544" class="mx-action-btn live-btn"> 3695 <svg class="icon"><use href="#icon-live"/></svg> LIVE 3696 </a> 3697 </div> 3698 </div> 3699 </div> 3700 </div> 3701 <div class="lg-section" data-search="KBL South Korea"> 3702 <div class="lg-header"> 3703 <div class="lg-header-left"> 3704 <button type="button" class="lg-fav-btn" aria-label="Pin league"> 3705 <svg class="icon"><use href="#icon-star"/></svg> 3706 </button> 3707 <span class="lg-country-name">South Korea:</span> 3708 <img src="/images/basketball/leagues/91.webp" 3709 alt="KBL" class="lg-logo" loading="lazy" 3710 onerror="if(!this.dataset.fallback){this.src='/images/placeholder-league.svg';this.dataset.fallback='true';}"> 3711 <span class="lg-name">KBL</span> 3712 </div> 3713 <div class="lg-header-right"> 3714 <button type="button" class="lg-collapse-btn" onclick="toggleLeague(this)" aria-label="Toggle"> 3715 <svg class="icon icon-collapse"><use href="#icon-chevron-up"/></svg> 3716 </button> 3717 </div> 3718 </div> 3719 3720 <div class="lg-matches"> 3721 <div class="mx-row is-live " data-search="KBL South Korea Goyang Sono KoGas"> 3722 <div class="mx-left"> 3723 <button type="button" class="mx-fav-btn favorite-btn" 3724 data-match-id="332295" 3725 data-auth="false" 3726 onclick="event.preventDefault(); event.stopPropagation(); handleFavoriteClick(332295, this);" 3727 aria-label="Thêm vào yêu thích"> 3728 <svg class="icon icon-fav"><use href="#icon-star"/></svg> 3729 </button> 3730 <div class="mx-status"> 3731 <span class="mx-status-badge live">LIVE</span> 3732 </div> 3733 </div> 3734 3735 <div class="mx-center"> 3736 <a href="/goyang-sono-vs-kogas-id332295" class="mx-teams-link"> 3737 <div class="mx-team-row"> 3738 <img src="/images/basketball/teams/1103.webp" 3739 alt="Goyang Sono" class="mx-team-logo" loading="lazy" 3740 onerror="this.onerror=null; this.src='/images/placeholder-team.svg';">
3741 <span class="mx-team-name">Goyang Sono</span> 3742 <span class="mx-score live"> 374347 </span> 3744 </div> 3745 <div class="mx-team-row"> 3746 <img src="/images/basketball/teams/3081.webp" 3747 alt="KoGas" class="mx-team-logo" loading="lazy" 3748 onerror="this.onerror=null; this.src='/images/placeholder-team.svg';"> 3749 <span class="mx-team-name">KoGas</span> 3750 <span class="mx-score live"> 375143 </span> 3752 </div> 3753 </a> 3754 </div> 3755 3756 <div class="mx-right action-column streamer-col"> 3757 <a href="/goyang-sono-vs-kogas-id332295" class="mx-action-btn live-btn"> 3758 <svg class="icon"><use href="#icon-live"/></svg> LIVE 3759 </a> 3760 </div> 3761 </div> 3762 <div class="mx-row is-live " data-search="KBL South Korea KCC Egis LG Sakers"> 3763 <div class="mx-left"> 3764 <button type="button" class="mx-fav-btn favorite-btn" 3765 data-match-id="332296" 3766 data-auth="false" 3767 onclick="event.preventDefault(); event.stopPropagation(); handleFavoriteClick(332296, this);" 3768 aria-label="Thêm vào yêu thích"> 3769 <svg class="icon icon-fav"><use href="#icon-star"/></svg> 3770 </button> 3771 <div class="mx-status"> 3772 <span class="mx-status-badge live">LIVE</span> 3773 </div> 3774 </div> 3775 3776 <div class="mx-center"> 3777 <a href="/kcc-egis-vs-lg-sakers-id332296" class="mx-teams-link"> 3778 <div class="mx-team-row"> 3779 <img src="/images/basketball/teams/1105.webp" 3780 alt="KCC Egis" class="mx-team-logo" loading="lazy" 3781 onerror="this.onerror=null; this.src='/images/placeholder-team.svg';"> 3782 <span class="mx-team-name">KCC Egis</span> 3783 <span class="mx-score live"> 378430 </span> 3785 </div> 3786 <div class="mx-team-row"> 3787 <img src="/images/basketball/teams/1106.webp" 3788 alt="LG Sakers" class="mx-team-logo" loading="lazy" 3789 onerror="this.onerror=null; this.src='/images/placeholder-team.svg';"> 3790 <span class="mx-team-name">LG Sakers</span> 3791 <span class="mx-score live"> 379253 </span> 3793 </div> 3794 </a> 3795 </div> 3796 3797 <div class="mx-right action-column streamer-col"> 3798 <a href="/kcc-egis-vs-lg-sakers-id332296" class="mx-action-btn live-btn"> 3799 <svg class="icon"><use href="#icon-live"/></svg> LIVE 3800 </a> 3801 </div> 3802 </div> 3803 </div> 3804 </div> 3805 <div class="lg-section" data-search="Liga Profesional Argentina Argentina"> 3806 <div class="lg-header"> 3807 <div class="lg-header-left"> 3808 <button type="button" class="lg-fav-btn" aria-label="Pin league"> 3809 <svg class="icon"><use href="#icon-star"/></svg> 3810 </button>
3811 <span class="lg-country-name">Argentina:</span> 3812 <img src="/images/football/leagues/128.webp" 3813 alt="Liga Profesional Argentina" class="lg-logo" loading="lazy" 3814 onerror="if(!this.dataset.fallback){this.src='/images/placeholder-league.svg';this.dataset.fallback='true';}"> 3815 <span class="lg-name">Liga Profesional Argentina</span> 3816 </div> 3817 <div class="lg-header-right"> 3818 <button type="button" class="lg-collapse-btn" onclick="toggleLeague(this)" aria-label="Toggle"> 3819 <svg class="icon icon-collapse"><use href="#icon-chevron-up"/></svg> 3820 </button> 3821 </div> 3822 </div> 3823 3824 <div class="lg-matches"> 3825 <div class="mx-row is-live " data-search="Liga Profesional Argentina Argentina Union Santa Fe Defensa Y Justicia Groot"> 3826 <div class="mx-left"> 3827 <button type="button" class="mx-fav-btn favorite-btn" 3828 data-match-id="339522" 3829 data-auth="false" 3830 onclick="event.preventDefault(); event.stopPropagation(); handleFavoriteClick(339522, this);" 3831 aria-label="Thêm vào yêu thích"> 3832 <svg class="icon icon-fav"><use href="#icon-star"/></svg> 3833 </button> 3834 <div class="mx-status"> 3835 <span class="mx-status-badge live">2H</span> 3836 <span class="mx-minute">77<span class="minute-tick">'</span></span> 3837 </div> 3838 </div> 3839 3840 <div class="mx-center"> 3841 <a href="/union-santa-fe-vs-defensa-y-justicia-id339522/groot" class="mx-teams-link"> 3842 <div class="mx-team-row"> 3843 <img src="/images/football/teams/441.webp" 3844 alt="Union Santa Fe" class="mx-team-logo" loading="lazy" 3845 onerror="this.onerror=null; this.src='/images/placeholder-team.svg';"> 3846 <span class="mx-team-name">Union Santa Fe</span> 3847 <span class="mx-score live"> 38480 </span> 3849 </div> 3850 <div class="mx-team-row"> 3851 <img src="/images/football/teams/442.webp" 3852 alt="Defensa Y Justicia" class="mx-team-logo" loading="lazy" 3853 onerror="this.onerror=null; this.src='/images/placeholder-team.svg';"> 3854 <span class="mx-team-name">Defensa Y Justicia</span> 3855 <span class="mx-score live"> 38562 </span> 3857 </div> 3858 </a> 3859 </div> 3860 3861 <div class="mx-right action-column streamer-col"> 3862 <a href="/union-santa-fe-vs-defensa-y-justicia-id339522/groot" class="mx-action-btn live-btn"> 3863 <svg class="icon"><use href="#icon-live"/></svg> LIVE 3864 </a> 3865 <a href="/streamer/94/groot" 3866 class="mx-streamer-badge mx-streamer-badge-live mx-streamer-pill" 3867 title="BLV GROOT"> 3868 <svg class="icon icon-mic"><use href="#icon-mic"/></svg> 3869 <span class="mx-streamer-name">BLV GROOT</span> 3870 </a> 3871 </div> 3872 </div> 3873 </div> 3874 </div> 3875 <div class="lg-section" data-search="NBA W USA"> 3876 <div class="lg-header"> 3877 <div class="lg-header-left"> 3878 <button type="button" class="lg-fav-btn" aria-label="Pin league"> 3879 <svg class="icon"><use href="#icon-star"/></svg> 3880 </button>
3881 <span class="lg-country-name">USA:</span> 3882 <img src="/images/basketball/leagues/13.webp" 3883 alt="NBA W" class="lg-logo" loading="lazy" 3884 onerror="if(!this.dataset.fallback){this.src='/images/placeholder-league.svg';this.dataset.fallback='true';}"> 3885 <span class="lg-name">NBA W</span> 3886 </div> 3887 <div class="lg-header-right"> 3888 <button type="button" class="lg-collapse-btn" onclick="toggleLeague(this)" aria-label="Toggle"> 3889 <svg class="icon icon-collapse"><use href="#icon-chevron-up"/></svg> 3890 </button> 3891 </div> 3892 </div> 3893 3894 <div class="lg-matches"> 3895 <div class="mx-row is-live " data-search="NBA W USA Las Vegas Aces W Golden State Valkyries W The Flash"> 3896 <div class="mx-left"> 3897 <button type="button" class="mx-fav-btn favorite-btn" 3898 data-match-id="345322" 3899 data-auth="false" 3900 onclick="event.preventDefault(); event.stopPropagation(); handleFavoriteClick(345322, this);" 3901 aria-label="Thêm vào yêu thích"> 3902 <svg class="icon icon-fav"><use href="#icon-star"/></svg> 3903 </button> 3904 <div class="mx-status"> 3905 <span class="mx-status-badge live">LIVE</span> 3906 </div> 3907 </div> 3908 3909 <div class="mx-center"> 3910 <a href="/las-vegas-aces-w-vs-golden-state-valkyries-w-id345322/the-flash" class="mx-teams-link"> 3911 <div class="mx-team-row"> 3912 <img src="/images/basketball/teams/167.webp" 3913 alt="Las Vegas Aces W" class="mx-team-logo" loading="lazy" 3914 onerror="this.onerror=null; this.src='/images/placeholder-team.svg';"> 3915 <span class="mx-team-name">Las Vegas Aces W</span> 3916 <span class="mx-score live"> 39170 </span> 3918 </div> 3919 <div class="mx-team-row"> 3920 <img src="/images/basketball/teams/7326.webp" 3921 alt="Golden State Valkyries W" class="mx-team-logo" loading="lazy" 3922 onerror="this.onerror=null; this.src='/images/placeholder-team.svg';"> 3923 <span class="mx-team-name">Golden State Valkyries W</span> 3924 <span class="mx-score live"> 39250 </span> 3926 </div> 3927 </a> 3928 </div> 3929 3930 <div class="mx-right action-column streamer-col"> 3931 <a href="/las-vegas-aces-w-vs-golden-state-valkyries-w-id345322/the-flash" class="mx-action-btn live-btn"> 3932 <svg class="icon"><use href="#icon-live"/></svg> LIVE 3933 </a> 3934 <a href="/streamer/80/the-flash" 3935 class="mx-streamer-badge mx-streamer-badge-live mx-streamer-pill" 3936 title="BLV THE FLASH"> 3937 <svg class="icon icon-mic"><use href="#icon-mic"/></svg> 3938 <span class="mx-streamer-name">BLV THE FLASH</span> 3939 </a> 3940 </div> 3941 </div> 3942 </div> 3943 </div> 3944 <div class="lg-section" data-search="NBL1 Central Australia"> 3945 <div class="lg-header"> 3946 <div class="lg-header-left"> 3947 <button type="button" class="lg-fav-btn" aria-label="Pin league"> 3948 <svg class="icon"><use href="#icon-star"/></svg> 3949 </button>
3950 <span class="lg-country-name">Australia:</span> 3951 <img src="/images/basketball/leagues/212.webp" 3952 alt="NBL1 Central" class="lg-logo" loading="lazy" 3953 onerror="if(!this.dataset.fallback){this.src='/images/placeholder-league.svg';this.dataset.fallback='true';}"> 3954 <span class="lg-name">NBL1 Central</span> 3955 </div> 3956 <div class="lg-header-right"> 3957 <button type="button" class="lg-collapse-btn" onclick="toggleLeague(this)" aria-label="Toggle"> 3958 <svg class="icon icon-collapse"><use href="#icon-chevron-up"/></svg> 3959 </button> 3960 </div> 3961 </div> 3962 3963 <div class="lg-matches"> 3964 <div class="mx-row is-live " data-search="NBL1 Central Australia Eastern Mavericks North Adelaide Rockets"> 3965 <div class="mx-left"> 3966 <button type="button" class="mx-fav-btn favorite-btn" 3967 data-match-id="284823" 3968 data-auth="false" 3969 onclick="event.preventDefault(); event.stopPropagation(); handleFavoriteClick(284823, this);" 3970 aria-label="Thêm vào yêu thích"> 3971 <svg class="icon icon-fav"><use href="#icon-star"/></svg> 3972 </button> 3973 <div class="mx-status"> 3974 <span class="mx-status-badge live">LIVE</span> 3975 </div> 3976 </div> 3977 3978 <div class="mx-center"> 3979 <a href="/eastern-mavericks-vs-north-adelaide-rockets-id284823" class="mx-teams-link"> 3980 <div class="mx-team-row"> 3981 <img src="/images/basketball/teams/3496.webp" 3982 alt="Eastern Mavericks" class="mx-team-logo" loading="lazy" 3983 onerror="this.onerror=null; this.src='/images/placeholder-team.svg';"> 3984 <span class="mx-team-name">Eastern Mavericks</span> 3985 <span class="mx-score live"> 398682 </span> 3987 </div> 3988 <div class="mx-team-row"> 3989 <img src="/images/basketball/teams/3498.webp" 3990 alt="North Adelaide Rockets" class="mx-team-logo" loading="lazy" 3991 onerror="this.onerror=null; this.src='/images/placeholder-team.svg';"> 3992 <span class="mx-team-name">North Adelaide Rockets</span> 3993 <span class="mx-score live"> 399473 </span> 3995 </div> 3996 </a> 3997 </div> 3998 3999 <div class="mx-right action-column streamer-col"> 4000 <a href="/eastern-mavericks-vs-north-adelaide-rockets-id284823" class="mx-action-btn live-btn"> 4001 <svg class="icon"><use href="#icon-live"/></svg> LIVE 4002 </a> 4003 </div> 4004 </div> 4005 </div> 4006 </div> 4007 <div class="lg-section" data-search="NBL1 North Australia"> 4008 <div class="lg-header"> 4009 <div class="lg-header-left"> 4010 <button type="button" class="lg-fav-btn" aria-label="Pin league"> 4011 <svg class="icon"><use href="#icon-star"/></svg> 4012 </button> 4013 <span class="lg-country-name">Australia:</span> 4014 <img src="/images/basketball/leagues/207.webp" 4015 alt="NBL1 North" class="lg-logo" loading="lazy" 4016 onerror="if(!this.dataset.fallback){this.src='/images/placeholder-league.svg';this.dataset.fallback='true';}">
4017 <span class="lg-name">NBL1 North</span> 4018 </div> 4019 <div class="lg-header-right"> 4020 <button type="button" class="lg-collapse-btn" onclick="toggleLeague(this)" aria-label="Toggle"> 4021 <svg class="icon icon-collapse"><use href="#icon-chevron-up"/></svg> 4022 </button> 4023 </div> 4024 </div> 4025 4026 <div class="lg-matches"> 4027 <div class="mx-row is-live " data-search="NBL1 North Australia Southern District Sunshine Coast Phoenix"> 4028 <div class="mx-left"> 4029 <button type="button" class="mx-fav-btn favorite-btn" 4030 data-match-id="284824" 4031 data-auth="false" 4032 onclick="event.preventDefault(); event.stopPropagation(); handleFavoriteClick(284824, this);" 4033 aria-label="Thêm vào yêu thích"> 4034 <svg class="icon icon-fav"><use href="#icon-star"/></svg> 4035 </button> 4036 <div class="mx-status"> 4037 <span class="mx-status-badge live">LIVE</span> 4038 </div> 4039 </div> 4040 4041 <div class="mx-center"> 4042 <a href="/southern-district-vs-sunshine-coast-phoenix-id284824" class="mx-teams-link"> 4043 <div class="mx-team-row"> 4044 <img src="/images/basketball/teams/3455.webp" 4045 alt="Southern District" class="mx-team-logo" loading="lazy" 4046 onerror="this.onerror=null; this.src='/images/placeholder-team.svg';"> 4047 <span class="mx-team-name">Southern District</span> 4048 <span class="mx-score live"> 404946 </span> 4050 </div> 4051 <div class="mx-team-row"> 4052 <img src="/images/basketball/teams/5932.webp" 4053 alt="Sunshine Coast Phoenix" class="mx-team-logo" loading="lazy" 4054 onerror="this.onerror=null; this.src='/images/placeholder-team.svg';"> 4055 <span class="mx-team-name">Sunshine Coast Phoenix</span> 4056 <span class="mx-score live"> 405772 </span> 4058 </div> 4059 </a> 4060 </div> 4061 4062 <div class="mx-right action-column streamer-col"> 4063 <a href="/southern-district-vs-sunshine-coast-phoenix-id284824" class="mx-action-btn live-btn"> 4064 <svg class="icon"><use href="#icon-live"/></svg> LIVE 4065 </a> 4066 </div> 4067 </div> 4068 </div> 4069 </div>
4070 <div class="lg-section" data-search="NBL1 East Women Australia"> 4071 <div class="lg-header"> 4072 <div class="lg-header-left"> 4073 <button type="button" class="lg-fav-btn" aria-label="Pin league"> 4074 <svg class="icon"><use href="#icon-star"/></svg> 4075 </button> 4076 <span class="lg-country-name">Australia:</span> 4077 <img src="/images/basketball/leagues/216.webp" 4078 alt="NBL1 East Women" class="lg-logo" loading="lazy" 4079 onerror="if(!this.dataset.fallback){this.src='/images/placeholder-league.svg';this.dataset.fallback='true';}"> 4080 <span class="lg-name">NBL1 East Women</span> 4081 </div> 4082 <div class="lg-header-right"> 4083 <button type="button" class="lg-collapse-btn" onclick="toggleLeague(this)" aria-label="Toggle"> 4084 <svg class="icon icon-collapse"><use href="#icon-chevron-up"/></svg> 4085 </button> 4086 </div> 4087 </div> 4088 4089 <div class="lg-matches"> 4090 <div class="mx-row is-live " data-search="NBL1
4090East Women Australia BA CoE W Albury W"> 4091 <div class="mx-left"> 4092 <button type="button" class="mx-fav-btn favorite-btn" 4093 data-match-id="304595" 4094 data-auth="false" 4095 onclick="event.preventDefault(); event.stopPropagation(); handleFavoriteClick(304595, this);" 4096 aria-label="Thêm vào yêu thích"> 4097 <svg class="icon icon-fav"><use href="#icon-star"/></svg> 4098 </button> 4099 <div class="mx-status"> 4100 <span class="mx-status-badge live">LIVE</span> 4101 </div> 4102 </div> 4103 4104 <div class="mx-center"> 4105 <a href="/ba-coe-w-vs-albury-w-id304595" class="mx-teams-link"> 4106 <div class="mx-team-row"> 4107 <img src="/images/basketball/teams/54.webp" 4108 alt="BA CoE W" class="mx-team-logo" loading="lazy" 4109 onerror="this.onerror=null; this.src='/images/placeholder-team.svg';"> 4110 <span class="mx-team-name">BA CoE W</span> 4111 <span class="mx-score live"> 41122 </span> 4113 </div> 4114 <div class="mx-team-row"> 4115 <img src="/images/basketball/teams/68.webp" 4116 alt="Albury W" class="mx-team-logo" loading="lazy" 4117 onerror="this.onerror=null; this.src='/images/placeholder-team.svg';"> 4118 <span class="mx-team-name">Albury W</span> 4119 <span class="mx-score live"> 41202 </span> 4121 </div> 4122 </a> 4123 </div> 4124 4125 <div class="mx-right action-column streamer-col"> 4126 <a href="/ba-coe-w-vs-albury-w-id304595" class="mx-action-btn live-btn"> 4127 <svg class="icon"><use href="#icon-live"/></svg> LIVE 4128 </a> 4129 </div> 4130 </div> 4131 </div> 4132 </div> 4133 <div class="lg-section" data-search="NBL1 South Women Australia"> 4134 <div class="lg-header"> 4135 <div class="lg-header-left"> 4136 <button type="button" class="lg-fav-btn" aria-label="Pin league"> 4137 <svg class="icon"><use href="#icon-star"/></svg> 4138 </button> 4139 <span class="lg-country-name">Australia:</span> 4140 <img src="/images/basketball/leagues/210.webp" 4141 alt="NBL1 South Women" class="lg-logo" loading="lazy" 4142 onerror="if(!this.dataset.fallback){this.src='/images/placeholder-league.svg';this.dataset.fallback='true';}"> 4143 <span class="lg-name">NBL1 South Women</span> 4144 </div> 4145 <div class="lg-header-right"> 4146 <button type="button" class="lg-collapse-btn" onclick="toggleLeague(this)" aria-label="Toggle"> 4147 <svg class="icon icon-collapse"><use href="#icon-chevron-up"/></svg> 4148 </button> 4149 </div> 4150 </div> 4151 4152 <div class="lg-matches"> 4153 <div class="mx-row is-live " data-search="NBL1 South Women Australia Knox W Waverley W"> 4154 <div class="mx-left"> 4155 <button type="button" class="mx-fav-btn favorite-btn" 4156 data-match-id="311177" 4157 data-auth="false" 4158 onclick="event.preventDefault(); event.stopPropagation(); handleFavoriteClick(311177, this);" 4159 aria-label="Thêm vào yêu thích"> 4160 <svg class="icon icon-fav"><use href="#icon-star"/></svg> 4161 </button> 4162 <div class="mx-status">
4163 <span class="mx-status-badge live">LIVE</span> 4164 </div> 4165 </div> 4166 4167 <div class="mx-center"> 4168 <a href="/knox-w-vs-waverley-w-id311177" class="mx-teams-link"> 4169 <div class="mx-team-row"> 4170 <img src="/images/basketball/teams/65.webp" 4171 alt="Knox W" class="mx-team-logo" loading="lazy" 4172 onerror="this.onerror=null; this.src='/images/placeholder-team.svg';"> 4173 <span class="mx-team-name">Knox W</span> 4174 <span class="mx-score live"> 41750 </span> 4176 </div> 4177 <div class="mx-team-row"> 4178 <img src="/images/basketball/teams/61.webp" 4179 alt="Waverley W" class="mx-team-logo" loading="lazy" 4180 onerror="this.onerror=null; this.src='/images/placeholder-team.svg';"> 4181 <span class="mx-team-name">Waverley W</span> 4182 <span class="mx-score live"> 41830 </span> 4184 </div> 4185 </a> 4186 </div> 4187 4188 <div class="mx-right action-column streamer-col"> 4189 <a href="/knox-w-vs-waverley-w-id311177" class="mx-action-btn live-btn"> 4190 <svg class="icon"><use href="#icon-live"/></svg> LIVE 4191 </a> 4192 </div> 4193 </div> 4194 </div> 4195 </div> 4196 <div class="lg-section" data-search="NBL 1 W Australia"> 4197 <div class="lg-header"> 4198 <div class="lg-header-left"> 4199 <button type="button" class="lg-fav-btn" aria-label="Pin league"> 4200 <svg class="icon"><use href="#icon-star"/></svg> 4201 </button> 4202 <span class="lg-country-name">Australia:</span> 4203 <img src="https://media.api-sports.io/basketball/leagues/5.png" 4204 alt="NBL 1 W" class="lg-logo" loading="lazy" 4205 onerror="if(!this.dataset.fallback){this.src='/images/placeholder-league.svg';this.dataset.fallback='true';}"> 4206 <span class="lg-name">NBL 1 W</span> 4207 </div> 4208 <div class="lg-header-right"> 4209 <button type="button" class="lg-collapse-btn" onclick="toggleLeague(this)" aria-label="Toggle"> 4210 <svg class="icon icon-collapse"><use href="#icon-chevron-up"/></svg> 4211 </button> 4212 </div> 4213 </div> 4214 4215 <div class="lg-matches"> 4216 <div class="mx-row is-live " data-search="NBL 1 W Australia Knox W Mackay Meteorettes W"> 4217 <div class="mx-left"> 4218 <button type="button" class="mx-fav-btn favorite-btn" 4219 data-match-id="318783" 4220 data-auth="false" 4221 onclick="event.preventDefault(); event.stopPropagation(); handleFavoriteClick(318783, this);" 4222 aria-label="Thêm vào yêu thích"> 4223 <svg class="icon icon-fav"><use href="#icon-star"/></svg> 4224 </button> 4225 <div class="mx-status"> 4226 <span class="mx-status-badge live">LIVE</span> 4227 </div> 4228 </div> 4229 4230 <div class="mx-center"> 4231 <a href="/knox-w-vs-mackay-meteorettes-w-id318783" class="mx-teams-link"> 4232 <div class="mx-team-row"> 4233 <img src="/images/basketball/teams/65.webp" 4234 alt="Knox W" class="mx-team-logo" loading="lazy" 4235 onerror="this.onerror=null; this.src='/images/placeholder-team.svg';">
4236 <span class="mx-team-name">Knox W</span> 4237 <span class="mx-score live"> 423863 </span> 4239 </div> 4240 <div class="mx-team-row"> 4241 <img src="/images/basketball/teams/3465.webp" 4242 alt="Mackay Meteorettes W" class="mx-team-logo" loading="lazy" 4243 onerror="this.onerror=null; this.src='/images/placeholder-team.svg';"> 4244 <span class="mx-team-name">Mackay Meteorettes W</span> 4245 <span class="mx-score live"> 424654 </span> 4247 </div> 4248 </a> 4249 </div> 4250 4251 <div class="mx-right action-column streamer-col"> 4252 <a href="/knox-w-vs-mackay-meteorettes-w-id318783" class="mx-action-btn live-btn"> 4253 <svg class="icon"><use href="#icon-live"/></svg> LIVE 4254 </a> 4255 </div> 4256 </div> 4257 </div> 4258 </div> 4259 <div class="lg-section" data-search="Asia Cup Asia"> 4260 <div class="lg-header"> 4261 <div class="lg-header-left"> 4262 <button type="button" class="lg-fav-btn" aria-label="Pin league"> 4263 <svg class="icon"><use href="#icon-star"/></svg> 4264 </button> 4265 <span class="lg-country-name">Asia:</span> 4266 <img src="https://media.api-sports.io/basketball/leagues/301.png" 4267 alt="Asia Cup" class="lg-logo" loading="lazy" 4268 onerror="if(!this.dataset.fallback){this.src='/images/placeholder-league.svg';this.dataset.fallback='true';}"> 4269 <span class="lg-name">Asia Cup</span> 4270 </div> 4271 <div class="lg-header-right"> 4272 <button type="button" class="lg-collapse-btn" onclick="toggleLeague(this)" aria-label="Toggle"> 4273 <svg class="icon icon-collapse"><use href="#icon-chevron-up"/></svg> 4274 </button> 4275 </div> 4276 </div> 4277 4278 <div class="lg-matches"> 4279 <div class="mx-row is-live " data-search="Asia Cup Asia Vietnam Thailand"> 4280 <div class="mx-left"> 4281 <button type="button" class="mx-fav-btn favorite-btn" 4282 data-match-id="313557" 4283 data-auth="false" 4284 onclick="event.preventDefault(); event.stopPropagation(); handleFavoriteClick(313557, this);" 4285 aria-label="Thêm vào yêu thích"> 4286 <svg class="icon icon-fav"><use href="#icon-star"/></svg> 4287 </button> 4288 <div class="mx-status"> 4289 <span class="mx-status-badge live">LIVE</span> 4290 </div> 4291 </div> 4292 4293 <div class="mx-center"> 4294 <a href="/vietnam-vs-thailand-id313557" class="mx-teams-link"> 4295 <div class="mx-team-row"> 4296 <img src="https://media.api-sports.io/basketball/teams/3998.png" 4297 alt="Vietnam" class="mx-team-logo" loading="lazy" 4298 onerror="this.onerror=null; this.src='/images/placeholder-team.svg';"> 4299 <span class="mx-team-name">Vietnam</span> 4300 <span class="mx-score live"> 43017 </span> 4302 </div> 4303 <div class="mx-team-row"> 4304 <img src="https://media.api-sports.io/basketball/teams/4345.png" 4305 alt="Thailand" class="mx-team-logo" loading="lazy" 4306 onerror="this.onerror=null; this.src='/images/placeholder-team.svg';">
4307 <span class="mx-team-name">Thailand</span> 4308 <span class="mx-score live"> 43097 </span> 4310 </div> 4311 </a> 4312 </div> 4313 4314 <div class="mx-right action-column streamer-col"> 4315 <a href="/vietnam-vs-thailand-id313557" class="mx-action-btn live-btn"> 4316 <svg class="icon"><use href="#icon-live"/></svg> LIVE 4317 </a> 4318 </div> 4319 </div> 4320 </div> 4321 </div> 4322 <div class="lg-section" data-search="Asian Games Asia"> 4323 <div class="lg-header"> 4324 <div class="lg-header-left"> 4325 <button type="button" class="lg-fav-btn" aria-label="Pin league"> 4326 <svg class="icon"><use href="#icon-star"/></svg> 4327 </button> 4328 <span class="lg-country-name">Asia:</span> 4329 <img src="https://media.api-sports.io/basketball/leagues/303.png" 4330 alt="Asian Games" class="lg-logo" loading="lazy" 4331 onerror="if(!this.dataset.fallback){this.src='/images/placeholder-league.svg';this.dataset.fallback='true';}"> 4332 <span class="lg-name">Asian Games</span> 4333 </div> 4334 <div class="lg-header-right"> 4335 <button type="button" class="lg-collapse-btn" onclick="toggleLeague(this)" aria-label="Toggle"> 4336 <svg class="icon icon-collapse"><use href="#icon-chevron-up"/></svg> 4337 </button> 4338 </div> 4339 </div> 4340 4341 <div class="lg-matches"> 4342 <div class="mx-row is-live " data-search="Asian Games Asia Jordan Chinese Taipei"> 4343 <div class="mx-left"> 4344 <button type="button" class="mx-fav-btn favorite-btn" 4345 data-match-id="321720" 4346 data-auth="false" 4347 onclick="event.preventDefault(); event.stopPropagation(); handleFavoriteClick(321720, this);" 4348 aria-label="Thêm vào yêu thích"> 4349 <svg class="icon icon-fav"><use href="#icon-star"/></svg> 4350 </button> 4351 <div class="mx-status"> 4352 <span class="mx-status-badge live">LIVE</span> 4353 </div> 4354 </div> 4355 4356 <div class="mx-center"> 4357 <a href="/jordan-vs-chinese-taipei-id321720" class="mx-teams-link"> 4358 <div class="mx-team-row"> 4359 <img src="/images/basketball/teams/3158.webp" 4360 alt="Jordan" class="mx-team-logo" loading="lazy" 4361 onerror="this.onerror=null; this.src='/images/placeholder-team.svg';"> 4362 <span class="mx-team-name">Jordan</span> 4363 <span class="mx-score live"> 436473 </span> 4365 </div> 4366 <div class="mx-team-row"> 4367 <img src="/images/basketball/teams/4073.webp" 4368 alt="Chinese Taipei" class="mx-team-logo" loading="lazy" 4369 onerror="this.onerror=null; this.src='/images/placeholder-team.svg';"> 4370 <span class="mx-team-name">Chinese Taipei</span> 4371 <span class="mx-score live"> 437283 </span> 4373 </div> 4374 </a> 4375 </div> 4376 4377 <div class="mx-right action-column streamer-col"> 4378 <a href="/jordan-vs-chinese-taipei-id321720" class="mx-action-btn live-btn"> 4379 <svg class="icon"><use href="#icon-live"/></svg> LIVE 4380 </a> 4381 </div> 4382 </div> 4383 </div> 4384 </div> 4385 <div class="lg-section" data-search="NBL Australia"> 4386 <div class="lg-header"> 4387 <div class="lg-header-left"> 4388 <button type="button" class="lg-fav-btn" aria-label="Pin league"> 4389 <svg class="icon"><use href="#icon-star"/></svg> 4390 </button>
4391 <span class="lg-country-name">Australia:</span> 4392 <img src="/images/basketball/leagues/1.webp" 4393 alt="NBL" class="lg-logo" loading="lazy" 4394 onerror="if(!this.dataset.fallback){this.src='/images/placeholder-league.svg';this.dataset.fallback='true';}"> 4395 <span class="lg-name">NBL</span> 4396 </div> 4397 <div class="lg-header-right"> 4398 <button type="button" class="lg-collapse-btn" onclick="toggleLeague(this)" aria-label="Toggle"> 4399 <svg class="icon icon-collapse"><use href="#icon-chevron-up"/></svg> 4400 </button> 4401 </div> 4402 </div> 4403 4404 <div class="lg-matches"> 4405 <div class="mx-row is-live " data-search="NBL Australia New Zealand Breakers Illawarra Hawks"> 4406 <div class="mx-left"> 4407 <button type="button" class="mx-fav-btn favorite-btn" 4408 data-match-id="326545" 4409 data-auth="false" 4410 onclick="event.preventDefault(); event.stopPropagation(); handleFavoriteClick(326545, this);" 4411 aria-label="Thêm vào yêu thích"> 4412 <svg class="icon icon-fav"><use href="#icon-star"/></svg> 4413 </button> 4414 <div class="mx-status"> 4415 <span class="mx-status-badge live">LIVE</span> 4416 </div> 4417 </div> 4418 4419 <div class="mx-center"> 4420 <a href="/new-zealand-breakers-vs-illawarra-hawks-id326545" class="mx-teams-link"> 4421 <div class="mx-team-row"> 4422 <img src="/images/basketball/teams/9.webp" 4423 alt="New Zealand Breakers" class="mx-team-logo" loading="lazy" 4424 onerror="this.onerror=null; this.src='/images/placeholder-team.svg';"> 4425 <span class="mx-team-name">New Zealand Breakers</span> 4426 <span class="mx-score live"> 442754 </span> 4428 </div> 4429 <div class="mx-team-row"> 4430 <img src="/images/basketball/teams/6.webp" 4431 alt="Illawarra Hawks" class="mx-team-logo" loading="lazy" 4432 onerror="this.onerror=null; this.src='/images/placeholder-team.svg';"> 4433 <span class="mx-team-name">Illawarra Hawks</span> 4434 <span class="mx-score live"> 443547 </span> 4436 </div> 4437 </a> 4438 </div> 4439 4440 <div class="mx-right action-column streamer-col"> 4441 <a href="/new-zealand-breakers-vs-illawarra-hawks-id326545" class="mx-action-btn live-btn"> 4442 <svg class="icon"><use href="#icon-live"/></svg> LIVE 4443 </a> 4444 </div> 4445 </div> 4446 </div> 4447 </div> 4448 <nav aria-label="Điều hướng trang" class="mt-4 px-3 match-list-paging"> 4449 <ul class="pagination justify-content-center flex-wrap"> 4450 <li class="page-item disabled"> 4451 <a class="page-link" href="/truc-tiep"><svg class="icon"><use href="#icon-chevrons-left"/></svg></a> 4452 </li> 4453 <li class="page-item disabled"> 4454 <a class="page-link" href="/truc-tiep"><svg class="icon"><use href="#icon-chevron-left"/></svg></a> 4455 </li> 4456 <li class="page-item active"> 4457 <a class="page-link" href="/truc-tiep">1</a> 4458 </li> 4459 <li class="page-item "> 4460 <a class="page-link" href="/truc-tiep?page=2">2</a> 4461 </li> 4462 <li class="page-item "> 4463 <a class="page-link" href="/truc-tiep?page=2"><svg class="icon"><use href="#icon-chevron-right"/></svg></a> 4464 </li> 4465 <li class="page-item "> 4466 <a class="page-link" href="/truc-tiep?page=2"><svg class="icon"><use href="#icon-chevrons-right"/></svg></a> 4467 </li> 4468 </ul> 4469 </nav> 4470 <div class="text-center text-muted mt-2 pb-3 match-list-paging"> 4471 <small>Trang 1 / 2 · Tổng 75 trận đấu</small> 4472 </div> 4473 4474 <!-- 页é¢SEOå 容 --> 4475 4476</div> 4477 4478 4479 4480 </main> 4481 4482 <!-- SPA å è½½è¿åº¦æ¡ --> 4483 <div class="spa-loading-bar" id="spaLoadingBar"></div> 4484 4485 <!-- åºé¨ --> 4486 <footer class="footer"> 4487 <div class="container"> 4488 <div class="row"> 4489 <div class="col-lg-4 mb-4 mb-lg-0"> 4490 <div class="footer-brand mb-3"> 4491 <img src="/images/logo-full-footer.webp" alt="XOIGAC" class="footer-logo-full" width="593" height="160" onerror="if(!this.dataset.fallback){this.src='/images/logo-full-footer.png';this.dataset.fallback='true';}" loading="lazy"> 4492 </div> 4493 <p class="text-muted small">Nền tảng xem bóng đá trực tiếp chuyên nghiệp, cung cấp tỷ số, phát sóng và tin tức mới nhất từ các giải đấu hàng đầu thế giới.</p> 4494 <div class="social-links"> 4495 <a href="https://weibo.com" target="_blank" rel="nofollow noopener" aria-label="Weibo"><i class="fab fa-weibo" aria-hidden="true"></i></a> 4496 <a href="https://weixin.qq.com" target="_blank" rel="nofollow noopener" aria-label="WeChat"><i class="fab fa-weixin" aria-hidden="true"></i></a> 4497 <a href="https://twitter.com" target="_blank" rel="nofollow noopener" aria-label="Twitter"><i class="fab fa-twitter" aria-hidden="true"></i></a> 4498 <a href="https://youtube.com" target="_blank" rel="nofollow noopener" aria-label="YouTube"><i class="fab fa-youtube" aria-hidden="true"></i></a> 4499 </div> 4500 </div> 4501 <div class="col-6 col-lg-2"> 4502 <h2 class="footer-title">Liên kết nhanh</h2> 4503 <ul class="footer-links"> 4504 <li><a href="/truc-tiep">Trực tiếp</a></li> 4505 <li><a href="/hom-nay">Hôm nay</a></li> 4506 <li><a href="/lich-thi-dau">Lịch thi đấu</a></li> 4507 <li><a href="/tin-tuc-bong-da">Tin Tức</a></li> 4508 <li><a href="/nhan-dinh-bong-da">Nhận Định</a></li> 4509 <li><a href="/giai-dau">Trung tâm giải đấu</a></li> 4510 <li><a href="/doi-bong">Trung tâm câu lạc bộ</a></li> 4511 <li><a href="/leaderboard">BXH Streamer</a></li> 4512 </ul> 4513 </div> 4514 <div class="col-lg-4"> 4515 <h2 class="footer-title">Tải ứng dụng</h2> 4516 <p class="text-muted small mb-3">Xem trực tiếp mọi lúc mọi nơi. Không bỏ lỡ bất kỳ khoảnh khắc nào.</p> 4517 <div class="app-buttons"> 4518 <a href="https://www.apple.com/app-store/" target="_blank" rel="nofollow noopener" class="app-btn" aria-label="App Store"> 4519 <i class="fab fa-apple" aria-hidden="true"></i>
4520 <span>App Store</span> 4521 </a> 4522 <a href="https://play.google.com/store" target="_blank" rel="nofollow noopener" class="app-btn" aria-label="Google Play"> 4523 <i class="fab fa-android" aria-hidden="true"></i> 4524 <span>Android</span> 4525 </a> 4526 </div> 4527 </div> 4528 </div> 4529 <hr class="border-secondary my-4"> 4530 <div class="row align-items-center"> 4531 <div class="col-md-6 text-center text-md-start mb-3 mb-md-0"> 4532 <p class="small text-muted mb-2">© 2026 XOIGAC.TV. All rights reserved.</p> 4533 <!-- DMCA Protection Badge --> 4534 <div class="dmca-badge"> 4535 <a href="//www.dmca.com/Protection/Status.aspx?ID=d272f162-1a32-4933-9646-fdcb8a1c4dc7&refurl=https%3A%2F%2Fxoigac.top%2F" title="DMCA.com Protection Status" class="dmca-badge-link"> 4536 <img src="/images/dmca_protected_sml_120n.png" alt="DMCA.com Protection Status" width="121" height="24" / loading="lazy"> 4537 </a> 4538 <!-- Using self-hosted DMCA image to eliminate third-party cookies --> 4539 </div> 4540 </div> 4541 <div class="col-md-6 text-center text-md-end"> 4542 <ul class="footer-bottom-links"> 4543 <li> 4544 <a href="/sitemap.xml" 4545 target="_blank"> 4546 Sơ đồ trang 4547 </a> 4548 </li> 4549 <li><a href="/chinh-sach-bao-mat">Chính sách bảo mật</a></li> 4550 <li><a href="/dieu-khoan-su-dung">Điều khoản dịch vụ</a></li> 4551 <li><a href="/lien-he">Liên hệ</a></li> 4552 <li><a href="/gioi-thieu">Về chúng tôi</a></li> 4553 <li><a href="/dmca" rel="nofollow">DMCA</a></li> 4554 </ul> 4555 </div> 4556 </div> 4557 </div> 4558 </footer> 4559 4560 <!-- è天室弹çªé®ç½© --> 4561 <div class="chat-modal-overlay d-none" id="chatModalOverlay" style="display: none !important;"></div> 4562 4563 <!-- èå¤©å®¤å¼¹çª --> 4564 <div class="chat-modal d-none" id="chatModal"> 4565 <div class="chat-modal-header"> 4566 <span class="chat-modal-title"></span> 4567 <div class="chat-modal-actions"> 4568 <button class="chat-modal-btn" id="chatModalFullscreen" data-i18n-title="common.fullscreen" title="Toàn màn hình"> 4569 <i class="fas fa-expand"></i> 4570 </button> 4571 <button class="chat-modal-btn chat-modal-close-btn" id="chatModalClose" data-i18n-title="common.collapse" title="Thu gọn"> 4572 <i class="fas fa-chevron-down"></i> 4573 </button> 4574 </div> 4575 </div> 4576 <div class="chat-modal-body" id="chatModalBody"> 4577 <!-- ç§»å¨ç«¯è§é¢ææ¾å¨åºå --> 4578 <div class="mobile-video-section d-none" id="mobileVideoSection"> 4579 <div class="mobile-video-wrapper"> 4580 <video id="mobileVideo" playsinline muted controls crossorigin> 4581 <!-- è§é¢æºä¼éè¿JavaScriptå¨æè®¾ç½® --> 4582 </video> 4583 <!-- å ³éæé®ç´æ¥æ¾å¨è§é¢å³ä¸è§ --> 4584 <button class="mobile-video-close" id="mobileVideoClose" data-i18n-title="common.closeVideo" title="Đóng video"> 4585 <i class="fas fa-times"></i> 4586 </button> 4587 </div> 4588 </div> 4589 <!-- è天室å 容ä¼è¢«å¤å¶å°è¿é --> 4590 </div> 4591 </div> 4592 4593 <!-- å ¨å±æµ®å¨æé®ç» --> 4594 <div class="global-fab-container" id="globalFabContainer"> 4595 <!-- æ¨ééç¥è®¢é --> 4596 <button class="global-fab-btn push-fab" id="push-subscribe-btn" data-i18n-title="push.enableNotifications" title="å¼å¯æ¨ééç¥" style="display: none;"> 4597 <i class="fas fa-bell"></i> 4598 </button> 4599 <!-- 强å¶å·æ° --> 4600 <button class="global-fab-btn refresh-fab" id="fabRefresh" data-i18n-title="common.refresh" title="Làm mới"> 4601 <svg width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><polyline points="23 4 23 10 17 10"></polyline><polyline points="1 20 1 14 7 14"></polyline><path d="M3.51 9a9 9 0 0 1 14.85-3.36L23 10M1 14l4.64 4.36A9 9 0 0 0 20.49 15"></path></svg> 4602 </button> 4603 <!-- åå°é¡¶é¨ --> 4604 <button class="global-fab-btn back-to-top-fab" id="fabBackToTop" data-i18n-title="common.backToTop" title="Về đầu trang"> 4605 <i class="fas fa-chevron-up"></i> 4606 </button> 4607 <!-- æå¼è天室ï¼åªå¨æèå¤©å®¤æ¶æ¾ç¤ºï¼å·²ææ¶ç¦ç¨ï¼ --> 4608 </div> 4609 4610 <!-- ä¼åçJavaScriptå è½½ - 使ç¨deferåasync --> 4611 <!-- å ³é®çç¬¬ä¸æ¹åº - 使ç¨defer --> 4612 <!-- â æ·»å crossorigin 屿§ä»¥æ¯æç¬¬ä¸æ¹Cookie --> 4613
4613<script src="/lib/bootstrap/5.3.2/bootstrap.bundle.min.js?v=gvZPYrsDwbwYJLD5yeBfcNujPhRoGOY831wwbIzz3t0" defer onerror="this.onerror=null;this.src='https://cdn.jsdelivr.net/npm/[email protected]/dist/js/bootstrap.bundle.min.js';"></script>
4613 4614
4614<script src="https://cdnjs.cloudflare.com/ajax/libs/microsoft-signalr/8.0.0/signalr.min.js" defer crossorigin></script>
4614 4615
4615<script src="https://cdn.jsdelivr.net/npm/[email protected]/dist/hls.min.js" defer crossorigin></script>
4615 4616 4617 <!-- åºç¨ç¨åºJavaScript - IVS ææ¾å¨ç¸å ³èæ¬å¿ é¡»æé¡ºåºåæ¥å è½½ --> 4618 <!-- ç产ç¯å¢ï¼ä½¿ç¨æå æä»¶ --> 4619 <!-- éªè¯ç 管çå¨ - å¿ é¡»å¨ app.bundle.js ä¹åå è½½ï¼app.bundle å å« auth-modal.jsï¼ --> 4620
4620<script src="/dist/js/captcha-manager.js?v=6Cj5aPMUUHrOwMbOlykc3RZYjobhKsvkLc5aNPDmZi0"></script>
4620 4621 <!-- æ ¸å¿åè½å ï¼3个JSåå¹¶ï¼- 忥å è½½ --> 4622
4622<script src="/dist/js/core.bundle.js?v=icHE5APGMG30g9fEySb-7hZ5vZ3iHbgJVhyUPH3v4Q8"></script>
4622 4623 <!-- ææ¾å¨åè½å ï¼8个JSåå¹¶ï¼- å»¶è¿å è½½ --> 4624
4624<script src="/dist/js/player.bundle.js?v=8u5CWjOuanIR8_RT1hwbFVrUcYrqqHSdSl_i6iFuPEQ" defer></script>
4624 4625 <!-- åºç¨åè½å ï¼å« streamer-follow.js / auth-modal.jsï¼- å»¶è¿å è½½ --> 4626
4626<script src="/dist/js/app.bundle.js?v=mOWIwnGUFcWjsPNJLvW6NpHaA0wGjgZ4WYEv8xFjIMQ" defer></script>
4626 4627
4627<script src="/dist/js/streamer-follow.js?v=p3zJpid1v8N4DkO4wwc04njd4zAS2j99EHmdb_HUbMY" defer></script>
4627 4628
4628<script src="/js/custom-select.js?v=unrE77TQiy-qc-Fun5fVdZBrEj9yh0GaRL5AHtdIOO8" defer></script>
4628 4629 4630 <!-- å èé ç½®èæ¬ - å¿ é¡»å¨å ¶ä»èæ¬ä¹åæ§è¡ --> 4631
4631<script> 4632 // ç¦ç¨ i18n.js çèªå¨è¯è¨åæ¢ UI å建ï¼ä½¿ç¨æå¡ç«¯æ¸²æçæé®ï¼ 4633 window.__disableI18nUI = true; 4634 window.streamerFollowI18n = { 4635 follow: 'Theo dõi', 4636 unfollow: 'Bá» theo dõi', 4637 followed: 'Äã theo dõi', 4638 unfollowed: 'Äã bá» theo dõi' 4639 }; 4640 window.showFollowerCount = true; 4641 </script>
4641 4642 4643 <!-- å ¨å±æµ®å¨æé®é»è¾ --> 4644
4644<script> 4645 (function() { 4646 const fabBackToTop = document.getElementById('fabBackToTop'); 4647 const fabRefresh = document.getElementById('fabRefresh'); 4648 const fabOpenChat = document.getElementById('fabOpenChat'); 4649 const chatRoom = document.querySelector('.chat-room-container'); 4650 const fabChatAvatar = document.getElementById('fabChatAvatar'); 4651 const chatModal = document.getElementById('chatModal'); 4652 const chatModalOverlay = document.getElementById('chatModalOverlay'); 4653 const chatModalBody = document.getElementById('chatModalBody'); 4654 const chatModalClose = document.getElementById('chatModalClose'); 4655 const chatModalFullscreen = document.getElementById('chatModalFullscreen'); 4656 const mobileVideoSection = document.getElementById('mobileVideoSection'); 4657 const mobileVideo = document.getElementById('mobileVideo'); 4658 const mobileVideoClose = document.getElementById('mobileVideoClose'); 4659 4660 let isFullscreen = false; 4661 let originalChatParent = null; 4662 let originalChatNextSibling = null; 4663 let isVideoPlaying = false; 4664 let wasVideoCollapsedBeforeModal = true; // è®°å½æå¼å¼¹çªåè§é¢æ¯å¦æ¶èµ· 4665 4666 // 妿æè天室䏿èèµå¾æ ï¼åæèèµå¾æ 忥å°å³ä¸è§ FAB 4667 if (chatRoom && fabChatAvatar) { 4668 const leagueImg = chatRoom.querySelector('.chat-icon-wrapper img'); 4669 if (leagueImg && leagueImg.src) { 4670 fabChatAvatar.src = leagueImg.src; 4671 } 4672 } 4673 4674 // åå°é¡¶é¨åå·æ°æé®ï¼PC æ»å¨>300px 常æ¾ï¼ç§»å¨ç«¯æ»å¨åæ¾ç¤ºï¼5 ç§æ åç´æ»å¨èªå¨éè 4675 let scrollThrottle = null; 4676 const FAB_IDLE_HIDE_MS = 5000; 4677 const FAB_SCROLL_DELTA = 8; 4678 let fabLastScrollTop = 0; 4679 let fabLastScrollActivityAt = 0; 4680 const globalFabContainer = document.getElementById('globalFabContainer'); 4681 4682 function isMobileFabViewport() { 4683 return window.matchMedia('(max-width: 768px)').matches; 4684 } 4685 4686 function getScrollTop() { 4687 return window.scrollY || document.documentElement.scrollTop || document.body.scrollTop || 0; 4688 } 4689 4690 function isFabScrollEligible() { 4691 return getScrollTop() > 300; 4692 } 4693 4694 function hideFabScrollButtons() { 4695 if (fabBackToTop) fabBackToTop.classList.remove('visible'); 4696 if (fabRefresh) fabRefresh.classList.remove('visible'); 4697 if (globalFabContainer) globalFabContainer.classList.add('fab-auto-hidden'); 4698 window.updateFabContainerVisibility(); 4699 } 4700 4701 function showFabScrollButtons() { 4702 if (fabBackToTop) fabBackToTop.classList.add('visible'); 4703 if (fabRefresh) fabRefresh.classList.add('visible'); 4704 if (globalFabContainer) globalFabContainer.classList.remove('fab-auto-hidden'); 4705 window.updateFabContainerVisibility(); 4706 } 4707 4708 function markFabScrollActivity() { 4709 fabLastScrollActivityAt = Date.now(); 4710 } 4711 4712 function updateDesktopFabVisibility() { 4713 if (isFabScrollEligible()) { 4714 showFabScrollButtons(); 4715 } else { 4716 hideFabScrollButtons(); 4717 } 4718 } 4719 4720 function handleFabScroll() { 4721 const scrollTop = getScrollTop(); 4722 const delta = Math.abs(scrollTop - fabLastScrollTop); 4723 4724 if (isMobileFabViewport()) { 4725 if (scrollTop <= 300) { 4726 fabLastScrollTop = scrollTop; 4727 hideFabScrollButtons(); 4728 return; 4729 } 4730 if (delta >= FAB_SCROLL_DELTA) { 4731 fabLastScrollTop = scrollTop; 4732 markFabScrollActivity(); 4733 showFabScrollButtons(); 4734 } 4735 return; 4736 } 4737 4738 fabLastScrollTop = scrollTop; 4739 updateDesktopFabVisibility(); 4740 } 4741 4742 // Function to update FAB container visibility 4743 window.updateFabContainerVisibility = function() { 4744 const container = document.getElementById('globalFabContainer'); 4745 const fabPushBtn = container ? container.querySelector('#push-subscribe-btn') : null; 4746 const hasVisibleButtons = (fabBackToTop && fabBackToTop.classList.contains('visible')) || 4747 (fabRefresh && fabRefresh.classList.contains('visible')) || 4748 (fabPushBtn && fabPushBtn.style.display !== 'none' && fabPushBtn.classList.contains('visible')); 4749 4750 if (container) { 4751 if (hasVisibleButtons && !container.classList.contains('fab-auto-hidden')) { 4752 container.style.display = 'flex'; 4753 } else { 4754 container.style.display = 'none'; 4755 } 4756 } 4757 }; 4758 4759 window.addEventListener('scroll', function() { 4760 if (scrollThrottle) return; 4761 scrollThrottle = setTimeout(function() { 4762 handleFabScroll(); 4763 scrollThrottle = null; 4764 }, 80); 4765 }, { passive: true }); 4766 4767 window.addEventListener('resize', function() { 4768 fabLastScrollTop = getScrollTop(); 4769 if (isMobileFabViewport()) { 4770 if (!isFabScrollEligible()) { 4771 hideFabScrollButtons(); 4772 } 4773 } else { 4774 if (globalFabContainer) globalFabContainer.classList.remove('fab-auto-hidden'); 4775 updateDesktopFabVisibility(); 4776 } 4777 }, { passive: true }); 4778 4779 // ç§»å¨ç«¯ï¼å®æ¶å¼ºå¶æ£æ¥ï¼é¿å scroll/touch æ¼å¤å¯¼è´ä¸æ¶å¤± 4780 setInterval(function() { 4781 if (!isMobileFabViewport()) return; 4782 if (!isFabScrollEligible()) { 4783 if (fabBackToTop && fabBackToTop.classList.contains('visible')) { 4784 hideFabScrollButtons(); 4785 } 4786 return; 4787 } 4788 const isVisible = fabBackToTop && fabBackToTop.classList.contains('visible'); 4789 if (!isVisible) return; 4790 const idleMs = Date.now() - fabLastScrollActivityAt; 4791 if (idleMs >= FAB_IDLE_HIDE_MS) { 4792 hideFabScrollButtons(); 4793 } 4794 }, 400); 4795 4796 // Initial check 4797 fabLastScrollTop = getScrollTop(); 4798 if (isMobileFabViewport()) { 4799 if (isFabScrollEligible()) { 4800 showFabScrollButtons(); 4801 markFabScrollActivity(); 4802 } else { 4803 hideFabScrollButtons(); 4804 } 4805 } else { 4806 updateDesktopFabVisibility(); 4807 } 4808 4809 // åå°é¡¶é¨ç¹å»äºä»¶ï¼å ¼å®¹ç§»å¨ç«¯ï¼é¿å éè¦ç¹ä¸¤æ¬¡çé®é¢ï¼ 4810 function scrollToTop(e) { 4811 e.preventDefault(); 4812 e.stopPropagation(); 4813 window.scrollTo({ top: 0, behavior: 'smooth' }); 4814 } 4815 4816 if (fabBackToTop) { 4817 fabBackToTop.addEventListener('click', scrollToTop); 4818 fabBackToTop.addEventListener('touchend', function(e) { 4819 e.preventDefault(); 4820 scrollToTop(e); 4821 }); 4822 } 4823 4824 // 强å¶å·æ°ç¹å»äºä»¶ 4825 function forceRefresh(e) { 4826 e.preventDefault(); 4827 e.stopPropagation(); 4828 // 强å¶å·æ°ï¼å¿½ç¥ç¼å 4829 location.reload(true); 4830 } 4831 4832 if (fabRefresh) { 4833 fabRefresh.addEventListener('click', forceRefresh); 4834 fabRefresh.addEventListener('touchend', function(e) { 4835 e.preventDefault(); 4836 forceRefresh(e); 4837 }); 4838 } 4839 4840 // è·ååå§è§é¢ææ¾å¨å ç´ 4841 function getOriginalVideo() { 4842 return document.getElementById('livePlayer'); 4843 } 4844 4845 // 设置移å¨ç«¯è§é¢ææ¾å¨ 4846 function setupMobileVideo() { 4847 const isMobile = window.innerWidth <= 767; 4848 if (!isMobile) return; 4849 4850 const originalVideo = getOriginalVideo(); 4851 if (!originalVideo || !mobileVideo) return; 4852 4853 // å¤å¶è§é¢æº 4854 if (originalVideo.src) { 4855 mobileVideo.src = originalVideo.src; 4856 } else { 4857 const sources = originalVideo.querySelectorAll('source'); 4858 mobileVideo.innerHTML = '';
4859 sources.forEach(source => { 4860 const newSource = source.cloneNode(true); 4861 mobileVideo.appendChild(newSource); 4862 }); 4863 } 4864 4865 // åæ¥ææ¾ç¶æ 4866 if (!originalVideo.paused) { 4867 mobileVideo.currentTime = originalVideo.currentTime; 4868 setTimeout(() => { 4869 mobileVideo.play().catch(console.error); 4870 }, 100); 4871 } 4872 4873 // æ¾ç¤ºç§»å¨ç«¯è§é¢åºå 4874 mobileVideoSection.classList.remove('d-none'); 4875 isVideoPlaying = true; 4876 4877 // ç¦ç¨ç§»å¨ç«¯è§é¢çå ¨å±åè½ 4878 mobileVideo.setAttribute('disablePictureInPicture', 'true'); 4879 mobileVideo.setAttribute('controlsList', 'nofullscreen'); 4880 4881 // çå¬å ¨å±äºä»¶å¹¶é»æ¢ 4882 mobileVideo.addEventListener('webkitfullscreenchange', function() { 4883 if (document.webkitFullscreenElement === mobileVideo) { 4884 document.webkitExitFullscreen(); 4885 } 4886 }); 4887 4888 mobileVideo.addEventListener('fullscreenchange', function() { 4889 if (document.fullscreenElement === mobileVideo) { 4890 document.exitFullscreen(); 4891 } 4892 }); 4893 4894 // æååè§é¢ 4895 originalVideo.pause(); 4896 } 4897 4898 // å ³éç§»å¨ç«¯è§é¢ææ¾å¨ 4899 function closeMobileVideo() { 4900 if (!mobileVideo || !mobileVideoSection) return; 4901 4902 // éèè§é¢åºå 4903 mobileVideoSection.classList.add('d-none'); 4904 mobileVideo.pause(); 4905 isVideoPlaying = false; 4906 } 4907 4908 // æ¾ç¤ºè天室ä¸å¯ç¨æç¤º 4909 function showChatUnavailableHint(message) { 4910 // å建æç¤ºå ç´ 4911 const hint = document.createElement('div'); 4912 hint.className = 'chat-unavailable-hint'; 4913 hint.innerHTML = ` 4914 <div class="chat-hint-content"> 4915 <i class="fas fa-comments-slash"></i> 4916 <span>${message}</span> 4917 </div> 4918 `; 4919 hint.style.cssText = ` 4920 position: fixed; bottom: 100px; right: 24px; z-index: 1000; 4921 background: linear-gradient(135deg, #1e293b 0%, #334155 100%); 4922 color: white; padding: 16px 20px; border-radius: 12px; 4923 box-shadow: 0 8px 32px rgba(0,0,0,0.3); 4924 border: 1px solid rgba(59, 130, 246, 0.3); 4925 font-size: 14px; max-width: 280px; 4926 animation: slideInUp 0.3s ease; 4927 backdrop-filter: blur(10px); 4928 `; 4929 4930 // æ·»å CSSå¨ç» 4931 if (!document.querySelector('#chatHintStyles')) { 4932 const style = document.createElement('style'); 4933 style.id = 'chatHintStyles'; 4934 style.textContent = ` 4935 @keyframes slideInUp { 4936 from { opacity: 0; transform: translateY(20px); } 4937 to { opacity: 1; transform: translateY(0); } 4938 } 4939 .chat-hint-content { 4940 display: flex; align-items: center; gap: 12px; 4941 } 4942 .chat-hint-content i { 4943 color: #fbbf24; font-size: 18px; 4944 } 4945 `; 4946 document.head.appendChild(style); 4947 } 4948 4949 document.body.appendChild(hint); 4950 4951 // 3ç§åèªå¨æ¶å¤± 4952 setTimeout(() => { 4953 hint.style.animation = 'slideOutDown 0.3s ease forwards'; 4954 setTimeout(() => hint.remove(), 300); 4955 }, 3000); 4956 } 4957 4958 // æå¼èå¤©å®¤å¼¹çª 4959 function openChatModal(e) { 4960 if (e) { 4961 e.preventDefault(); 4962 } 4963 if (!chatRoom) { 4964 alert(window.L?.T ? window.L.T('common.noChatRoom') : 'å½å页颿²¡æè天室'); 4965 return; 4966 } 4967 4968 const isMobile = window.innerWidth <= 767; 4969 4970 // è®°å½åå§ä½ç½® 4971 originalChatParent = chatRoom.parentElement; 4972 originalChatNextSibling = chatRoom.nextElementSibling; 4973 4974 // ç§»å¨ç«¯ï¼å§ç»æ¾ç¤ºè§é¢ææ¾å¨+è天室ï¼ä¸ç®¡è§é¢æ¯å¦æ£å¨ææ¾ï¼ 4975 if (isMobile) { 4976 const originalVideo = getOriginalVideo(); 4977 const livePlayerSection = document.getElementById('livePlayerSection'); 4978 if (originalVideo && livePlayerSection) { 4979 // è®°å½æå¼å¼¹çªåè§é¢æ¯å¦æ¶èµ· 4980 wasVideoCollapsedBeforeModal = livePlayerSection.classList.contains('collapsed'); 4981 4982 // 妿è§é¢è¿æ²¡å±å¼ï¼å å±å¼å® 4983 if (wasVideoCollapsedBeforeModal) { 4984 livePlayerSection.classList.remove('collapsed'); 4985 // æ´æ°è§çç´ææé®æå 4986 const watchBtn = document.querySelector('.btn-live-watch'); 4987 if (watchBtn) { 4988 watchBtn.innerHTML = '<i class="fas fa-times"></i>æ¶èµ·ç´æ'; 4989 } 4990 } 4991 // åå¤ç§»å¨ç«¯è§é¢åºå 4992 setupMobileVideo(); 4993 4994 // ä»å¿«æ·è天室æå¼æ¶ï¼èªå¨å¼å§ææ¾ç§»å¨ç«¯è§é¢ 4995 if (mobileVideo) { 4996 setTimeout(function () { 4997 mobileVideo.play().catch(function (err) { 4998 console.warn('èªå¨ææ¾ç§»å¨ç«¯è§é¢å¤±è´¥ï¼', err); 4999 }); 5000 }, 150); 5001 } 5002 } 5003 } 5004 5005 // ç§»å¨è天室å°å¼¹çª 5006 chatModalBody.appendChild(chatRoom); 5007 chatRoom.classList.add('in-modal'); 5008 5009 // æå¼å¼¹çªæ¶ï¼é»è®¤è®©æ¶æ¯åºåæ¾ç¤ºå¨åºé¨ï¼ä½¿ç¨å¹³æ»æ»å¨æ´èªç¶ 5010 const chatMessages = chatRoom.querySelector('#chatMessages'); 5011 if (chatMessages) { 5012 requestAnimationFrame(() => { 5013 if (typeof chatMessages.scrollTo === 'function') { 5014 chatMessages.scrollTo({ 5015 top: chatMessages.scrollHeight, 5016 behavior: 'smooth' 5017 }); 5018 } else { 5019 chatMessages.scrollTop = chatMessages.scrollHeight; 5020 } 5021 }); 5022 } 5023 5024 // æ¾ç¤ºå¼¹çª 5025 chatModal.classList.remove('d-none'); 5026 chatModalOverlay.classList.remove('d-none'); 5027 document.body.style.overflow = 'hidden'; 5028 5029 // èç¦è¾å ¥æ¡ 5030 setTimeout(function() { 5031 const input = chatRoom.querySelector('#chatInput'); 5032 if (input && !input.readOnly) input.focus(); 5033 }, 300); 5034 } 5035 5036 // å ³éèå¤©å®¤å¼¹çª 5037 function closeChatModal(e) { 5038 if (e) { 5039 e.preventDefault(); 5040 } 5041 if (!chatRoom) return; 5042 5043 const isMobile = window.innerWidth <= 767; 5044 5045 // å ³éç§»å¨ç«¯è§é¢ææ¾å¨ï¼æ 论å½åæ¯å¦å¨ææ¾ï¼é½ç»ä¸æ¶èµ·è§é¢åºåï¼ 5046 closeMobileVideo(); 5047 5048 // ç§»å¨ç«¯ï¼æ¢å¤è§é¢ææ¾å¨åæ¥çç¶æ 5049 if (isMobile && wasVideoCollapsedBeforeModal) { 5050 const livePlayerSection = document.getElementById('livePlayerSection'); 5051 const watchBtn = document.querySelector('.btn-live-watch'); 5052 if (livePlayerSection) { 5053 livePlayerSection.classList.add('collapsed'); 5054 } 5055 if (watchBtn) { 5056 watchBtn.innerHTML = '<i class="fas fa-play"></i>è§çç´æ'; 5057 } 5058 } 5059 5060 // æ¢å¤è天室å°åä½ç½® 5061 if (originalChatParent) { 5062 if (originalChatNextSibling) { 5063 originalChatParent.insertBefore(chatRoom, originalChatNextSibling); 5064 } else { 5065 originalChatParent.appendChild(chatRoom); 5066 } 5067 } 5068 chatRoom.classList.remove('in-modal'); 5069 5070 // éèå¼¹çª 5071 chatModal.classList.add('d-none'); 5072 chatModalOverlay.classList.add('d-none'); 5073 chatModal.classList.remove('fullscreen'); 5074 document.body.style.overflow = ''; 5075 isFullscreen = false;
5076 5077 // æ´æ°å ¨å±æé®å¾æ 5078 chatModalFullscreen.innerHTML = '<i class="fas fa-expand"></i>'; 5079 chatModalFullscreen.title = window.L?.T ? window.L.T('common.fullscreen') : 'å ¨å±'; 5080 } 5081 5082 // åæ¢å ¨å± 5083 function toggleFullscreen(e) { 5084 if (e) { 5085 e.preventDefault(); 5086 } 5087 isFullscreen = !isFullscreen; 5088 if (isFullscreen) { 5089 chatModal.classList.add('fullscreen'); 5090 chatModalFullscreen.innerHTML = '<i class="fas fa-compress"></i>'; 5091 chatModalFullscreen.title = window.L?.T ? window.L.T('common.exitFullscreen') : 'éåºå ¨å±'; 5092 } else { 5093 chatModal.classList.remove('fullscreen'); 5094 chatModalFullscreen.innerHTML = '<i class="fas fa-expand"></i>'; 5095 chatModalFullscreen.title = window.L?.T ? window.L.T('common.fullscreen') : 'å ¨å±'; 5096 } 5097 } 5098 5099 // æ£æµæ¯å¦æ¯ç§»å¨ç«¯ 5100 const isMobile = window.innerWidth <= 767; 5101 5102 // ç»å®äºä»¶ï¼åªæåå¨èå¤©å®¤æ¶æå¤ç FAB / å¼¹çªï¼Beauty ç¬ç«è§ç页使ç¨å åµè天ï¼ä¸èµ°å¼¹çªï¼ 5103 const isBeautyWatchPage = document.body.classList.contains('beauty-watch-layout'); 5104 if (chatRoom && !isBeautyWatchPage) { 5105 // æ¡é¢ç«¯ï¼åªè¦æèå¤©å®¤å°±ç´æ¥æ¾ç¤ºFABï¼ä» å½å ç´ å卿¶ï¼ 5106 if (!isMobile && fabOpenChat) { 5107 fabOpenChat.classList.add('visible'); 5108 } 5109 5110 // è天室弹çªäºä»¶ï¼å ¼å®¹ç§»å¨ç«¯è§¦æ¸ï¼ 5111 if (fabOpenChat) { 5112 fabOpenChat.addEventListener('click', openChatModal); 5113 fabOpenChat.addEventListener('touchend', function(e) { 5114 e.preventDefault(); 5115 openChatModal(e); 5116 }); 5117 } 5118 5119 if (chatModalClose) { 5120 chatModalClose.addEventListener('click', closeChatModal); 5121 chatModalClose.addEventListener('touchend', function(e) { 5122 e.preventDefault(); 5123 closeChatModal(e); 5124 }); 5125 } 5126 5127 if (chatModalOverlay) { 5128 chatModalOverlay.addEventListener('click', closeChatModal); 5129 } 5130 5131 if (chatModalFullscreen) { 5132 chatModalFullscreen.addEventListener('click', toggleFullscreen); 5133 } 5134 5135 // ç§»å¨ç«¯è§é¢å ³éæé®ï¼ç´æ¥å ³éæ´ä¸ªå¼¹çªï¼é¿å åºç°âåªæè天âçå¼¹çª 5136 if (mobileVideoClose) { 5137 mobileVideoClose.addEventListener('click', function(e) { 5138 closeChatModal(e); 5139 }); 5140 } 5141 5142 // ESC å ³é 5143 document.addEventListener('keydown', function(e) { 5144 if (e.key === 'Escape' && !chatModal.classList.contains('d-none')) { 5145 closeChatModal(); 5146 } 5147 }); 5148 5149 // ç§»å¨ç«¯ï¼åªè¦èå¤©å®¤è¿æ¥æåï¼å°±æ¾ç¤º FAB 5150 if (isMobile) { 5151 window.addEventListener('chatConnected', function() { 5152 if (fabOpenChat) { 5153 fabOpenChat.classList.add('visible'); 5154 } 5155 }); 5156 } 5157 5158 // 忥 FAB çæªè¯»æ°æ³¡ï¼çå¬é¡µé¢å ç unread badgeï¼ 5159 const pageUnreadBadge = document.getElementById('unreadBadge'); 5160 const fabBadge = document.getElementById('fabChatBadge'); 5161 if (pageUnreadBadge && fabBadge) { 5162 const observer = new MutationObserver(function() { 5163 const count = pageUnreadBadge.textContent || '0'; 5164 const isHidden = pageUnreadBadge.classList.contains('d-none'); 5165 if (isHidden || count === '0') { 5166 fabBadge.classList.add('d-none'); 5167 } else { 5168 fabBadge.textContent = count; 5169 fabBadge.classList.remove('d-none'); 5170 } 5171 }); 5172 observer.observe(pageUnreadBadge, { attributes: true, childList: true, subtree: true, characterData: true }); 5173 } 5174 } else if (chatRoom && isBeautyWatchPage) { 5175 chatRoom.classList.remove('in-modal'); 5176 } else { 5177 // 没æè天室æ¶éè FAB 5178 if (fabOpenChat) { 5179 fabOpenChat.classList.remove('visible'); 5180 } 5181 } 5182 })(); 5183 </script>
5183 5184 5185 <!-- 页é¢å è½½å®æåéè loader --> 5186
5186<script> 5187 (function() { 5188 var loader = document.getElementById('pageLoader'); 5189 if (!loader) return; 5190 5191 // 页é¢å è½½å®æåç«å³éèï¼æå¡ç«¯å·²æ¸²ææ£ç¡®è¯è¨ï¼æ éçå¾ JS ç¿»è¯ï¼ 5192 function hideLoader() { 5193 // ç«å³éèï¼ä¸åå»¶è¿ 5194 loader.style.display = 'none'; 5195 loader.classList.add('fade-out', 'hidden'); 5196 // å¨ç»ç»æåç§»é¤å ç´ 5197 setTimeout(function() { 5198 if (loader.parentNode) { 5199 loader.parentNode.removeChild(loader); 5200 } 5201 }, 200); 5202 } 5203 5204 // DOM å è½½å®æåç«å³éè 5205 if (document.readyState === 'complete') { 5206 hideLoader(); 5207 } else { 5208 window.addEventListener('load', hideLoader); 5209 } 5210 5211 // é¢å¤ä¿é©ï¼ç¡®ä¿å¨ 3 ç§åä¸å®éèå è½½å¨ 5212 setTimeout(function() { 5213 if (loader && loader.parentNode) { 5214 loader.style.display = 'none'; 5215 loader.classList.add('fade-out', 'hidden'); 5216 if (loader.parentNode) { 5217 loader.parentNode.removeChild(loader); 5218 } 5219 } 5220 }, 3000); 5221 5222 // ç¡®ä¿è天é®ç½©å±å¨é¡µé¢å è½½æ¶è¢«éè 5223 var chatOverlay = document.getElementById('chatModalOverlay'); 5224 if (chatOverlay) { 5225 chatOverlay.style.display = 'none'; 5226 chatOverlay.classList.add('d-none'); 5227 } 5228 5229 // ç¡®ä¿è天弹çªå¨é¡µé¢å è½½æ¶è¢«éè 5230 var chatModal = document.getElementById('chatModal'); 5231 if (chatModal) { 5232 chatModal.style.display = 'none'; 5233 chatModal.classList.add('d-none'); 5234 } 5235 })(); 5236 </script>
5236 5237 5238 <!-- è¯è¨åæ¢å½æ° --> 5239
5239<script> 5240 function changeLanguage(lang) { 5241 // 鲿¢éå¤ç¹å» 5242 if (window.__changingLanguage) return; 5243 window.__changingLanguage = true; 5244 5245 // ä¿åè¯è¨åå¥½å° cookie å localStorage 5246 document.cookie = 'livescore_lang=' + lang + '; path=/; max-age=31536000'; 5247 localStorage.setItem('livescore_lang', lang); 5248 5249 var returnUrl = window.location.pathname + window.location.search + window.location.hash; 5250 window.location.href = '/set-lang?lang=' + encodeURIComponent(lang) + '&returnUrl=' + encodeURIComponent(returnUrl); 5251 } 5252 </script>
5252 5253 5254 <!-- SPA è·¯ç± - ææ¶ç¦ç¨ä»¥ä¼åLCP --> 5255
5255<script src="/js/spa-router.js?v=dwhRvRTKNW3gDRjkITc68k3snHSqhN2jwIL1Le2mwmw" defer></script>
5255 5256 5257 <!-- ç®åçé¢çº¦æéåè½ --> 5258
5258<script> 5259 window.toggleMatchReminder = async (event, btn) => { 5260 try { 5261 // æ£æ¥ Service Worker æ¯æ 5262 if (!('serviceWorker' in navigator)) { 5263 showNotification(window.L?.T ? window.L.T('push.notSupported') : 'æ¨çæµè§å¨ä¸æ¯ææ¨ééç¥', 'warning'); 5264 return; 5265 } 5266 5267 // çå¾ Service Worker 就绪ï¼å¢å è¶ æ¶å¤çï¼ 5268 let registration, subscription; 5269 try { 5270 registration = await Promise.race([ 5271 navigator.serviceWorker.ready, 5272 new Promise((_, reject) => setTimeout(() => reject(new Error('SW timeout')), 5000)) 5273 ]); 5274 subscription = await registration.pushManager.getSubscription(); 5275 } catch (swError) { 5276 console.error('[é¢çº¦æé] Service Worker æªå°±ç»ª:', swError); 5277 showNotification(window.L?.T ? window.L.T('push.notReady') : 'æ¨éæå¡æªå°±ç»ªï¼è¯·ç¨åéè¯', 'warning'); 5278 return; 5279 } 5280 5281 if (!subscription) { 5282 const subscribeBtn = document.getElementById('push-subscribe-btn') || document.getElementById('mobile-push-subscribe-btn'); 5283 if (subscribeBtn) { 5284 subscribeBtn.click(); 5285 } else { 5286 showNotification(window.L?.T ? window.L.T('push.pleaseSubscribe') : '请å è®¢é æ¨ééç¥', 'warning'); 5287 } 5288 return; 5289 } 5290 5291 const endpoint = subscription.endpoint; 5292 5293 const res = await fetch(`/api/push/check-subscription?endpoint=${encodeURIComponent(endpoint)}`); 5294 const data = await res.json(); 5295 5296 if (!data.subscribed) { 5297 const subscribeBtn = document.getElementById('push-subscribe-btn') || document.getElementById('mobile-push-subscribe-btn'); 5298 if (subscribeBtn) { 5299 subscribeBtn.click(); 5300 } else { 5301 showNotification(window.L?.T ? window.L.T('push.pleaseSubscribe') : '请å è®¢é æ¨ééç¥', 'warning'); 5302 } 5303 return; 5304 } 5305 5306 // æ£æ¥æé®å½åç¶æï¼å¤ææ¯è®¢é è¿æ¯åæ¶ 5307 const matchId = btn.dataset.matchId; 5308 const isActive = btn.classList.contains('active'); 5309 5310 const isIconOnly = btn.classList.contains('focus-reminder-btn'); 5311 5312 btn.disabled = true; 5313 const originalHtml = btn.innerHTML; 5314 const processingText = window.L?.T ? window.L.T('common.processing') : 'å¤çä¸...'; 5315 btn.innerHTML = isIconOnly 5316 ? `<i class="fas fa-spinner fa-spin"></i>` 5317 : `<i class="fas fa-spinner fa-spin"></i> <span>${processingText}</span>`; 5318 5319 let reminderRes, reminderData; 5320 5321 if (isActive) { 5322 // å½åæ¯æ¿æ´»ç¶æï¼æ§è¡åæ¶æä½ 5323 reminderRes = await fetch('/api/match-reminders/unsubscribe', { 5324 method: 'POST', 5325 headers: { 5326 'Content-Type': 'application/json', 5327 'Accept-Language': window.__currentLang || 'vi' 5328 }, 5329 body: JSON.stringify({ 5330 fixtureId: parseInt(matchId), 5331 pushEndpoint: endpoint 5332 }) 5333 }); 5334 5335 reminderData = await reminderRes.json(); 5336 5337 if (reminderData.success) { 5338 btn.classList.remove('active'); 5339 btn.innerHTML = isIconOnly 5340 ? `<i class="fas fa-bell"></i>` 5341 : `<i class="fas fa-bell"></i> <span>${btn.dataset.textSet || (window.L?.T ? window.L.T('home.setReminder') : 'é¢çº¦æé')}</span>`; 5342 showNotification(reminderData.message || (window.L?.T ? window.L.T('home.reminderCanceled') : '已忶é¢çº¦'), 'success'); 5343 } else { 5344 btn.innerHTML = originalHtml; 5345 showNotification(reminderData.message || (window.L?.T ? window.L.T('home.cancelFailed') : 'åæ¶å¤±è´¥'), 'danger'); 5346 } 5347 } else { 5348 // å½åæ¯æªæ¿æ´»ç¶æï¼æ§è¡è®¢é æä½ 5349 reminderRes = await fetch('/api/match-reminders/sub
5349scribe', { 5350 method: 'POST', 5351 headers: { 5352 'Content-Type': 'application/json', 5353 'Accept-Language': window.__currentLang || 'vi' 5354 }, 5355 body: JSON.stringify({ 5356 fixtureId: parseInt(matchId), 5357 pushEndpoint: endpoint 5358 }) 5359 }); 5360 5361 reminderData = await reminderRes.json(); 5362 5363 if (reminderData.success) { 5364 btn.classList.add('active'); 5365 btn.innerHTML = isIconOnly 5366 ? `<i class="fas fa-bell-slash"></i>` 5367 : `<i class="fas fa-bell-slash"></i> <span>${btn.dataset.textCancel || (window.L?.T ? window.L.T('home.cancelReminder') : 'åæ¶é¢çº¦')}</span>`; 5368 showNotification(reminderData.message || (window.L?.T ? window.L.T('home.reminderSet') : 'é¢çº¦æå'), 'success'); 5369 } else { 5370 btn.innerHTML = originalHtml; 5371 showNotification(reminderData.message || (window.L?.T ? window.L.T('home.reminderFailed') : 'é¢çº¦å¤±è´¥'), 'danger'); 5372 } 5373 } 5374 5375 btn.disabled = false; 5376 5377 } catch (error) { 5378 console.error('[é¢çº¦æé] æä½å¤±è´¥:', error); 5379 // æ ¹æ®éè¯¯ç±»åæ¾ç¤ºä¸åçå¤è¯è¨æç¤º 5380 if (error.message && error.message.includes('Notification permission denied')) { 5381 showNotification(window.L?.T ? window.L.T('push.notificationDenied') : 'éç¥æé已被æç»ï¼è¯·å¨æµè§å¨è®¾ç½®ä¸å 许éç¥', 'warning'); 5382 } else { 5383 showNotification(window.L?.T ? window.L.T('common.operationFailed') : 'æä½å¤±è´¥ï¼è¯·ç¨åéè¯', 'danger'); 5384 } 5385 } 5386 }; 5387 5388 5389 // åå§åé¢çº¦æéæé®ç¶æ 5390 window.initReminderButtons = async () => { 5391 // console.log('[é¢çº¦æé] å¼å§åå§åæé®ç¶æ...'); 5392 5393 try { 5394 // åªè·åå¯è§çé¢çº¦æéæé® 5395 const buttons = document.querySelectorAll('.reminder-btn:not([style*="display: none"]):not([style*="display:none"]), .focus-reminder-btn'); 5396 if (buttons.length === 0) { 5397 // console.log('[é¢çº¦æé] æ²¡ææ¾å°å¯è§çé¢çº¦æéæé®'); 5398 return; 5399 } 5400 5401 // æ£æ¥æ¨é订é ç¶æ 5402 const registration = await navigator.serviceWorker.ready; 5403 const subscription = await registration.pushManager.getSubscription(); 5404 5405 if (!subscription) { 5406 // console.log('[é¢çº¦æé] ç¨æ·æªè®¢é æ¨éï¼è®¾ç½®é»è®¤ç¶æ'); 5407 buttons.forEach(btn => { 5408 const isIconOnly = btn.classList.contains('focus-reminder-btn'); 5409 btn.classList.remove('active'); 5410 btn.innerHTML = isIconOnly ? `<i class="fas fa-bell"></i>` : `<i class="fas fa-bell"></i> <span>${btn.dataset.textSet || 'é¢çº¦æé'}</span>`; 5411 }); 5412 return; 5413 } 5414 5415 // æ£æ¥å端订é ç¶æ 5416 const endpoint = subscription.endpoint; 5417 const res = await fetch(`/api/push/check-subscription?endpoint=${encodeURIComponent(endpoint)}`); 5418 const data = await res.json(); 5419 5420 if (!data.subscribed) { 5421 // console.log('[é¢çº¦æé] å端æªè®¢é ï¼è®¾ç½®é»è®¤ç¶æ'); 5422 buttons.forEach(btn => { 5423 const isIconOnly = btn.classList.contains('focus-reminder-btn'); 5424 btn.classList.remove('active'); 5425 btn.innerHTML = isIconOnly ? `<i class="fas fa-bell"></i>` : `<i class="fas fa-bell"></i> <span>${btn.dataset.textSet || 'é¢çº¦æé'}</span>`; 5426 }); 5427 return; 5428 } 5429 5430 // è·åå·²é¢çº¦çæ¯èµå表 5431 // console.log('[é¢çº¦æé] è·åå·²é¢çº¦å表...'); 5432 const listRes = await fetch(`/api/match-reminders/list?pushEndpoint=${encodeURIComponent(endpoint)}`); 5433 const listData = await listRes.json(); 5434 5435 if (listData.success && listData.reminders) { 5436 const subscribedIds = new Set(listData.reminders.map(r => r.fixtureId.toString())); 5437 // console.log('[é¢çº¦æé] å·²é¢çº¦æ¯èµID:', Array.from(subscribedIds)); 5438 5439 buttons.forEach(btn => {
5440 const matchId = btn.dataset.matchId; 5441 const isIconOnly = btn.classList.contains('focus-reminder-btn'); 5442 if (subscribedIds.has(matchId)) { 5443 btn.classList.add('active'); 5444 btn.innerHTML = isIconOnly ? `<i class="fas fa-bell-slash"></i>` : `<i class="fas fa-bell-slash"></i> <span>${btn.dataset.textCancel || 'åæ¶é¢çº¦'}</span>`; 5445 } else { 5446 btn.classList.remove('active'); 5447 btn.innerHTML = isIconOnly ? `<i class="fas fa-bell"></i>` : `<i class="fas fa-bell"></i> <span>${btn.dataset.textSet || 'é¢çº¦æé'}</span>`; 5448 } 5449 }); 5450 } 5451 5452 // console.log('[é¢çº¦æé] æé®ç¶æåå§å宿'); 5453 5454 } catch (error) { 5455 console.error('[é¢çº¦æé] åå§å失败:', error); 5456 } 5457 }; 5458 5459 // 鲿彿°ï¼é¿å é¢ç¹è§¦å 5460 let initTimeout = null; 5461 const debouncedInit = () => { 5462 if (initTimeout) { 5463 clearTimeout(initTimeout); 5464 } 5465 initTimeout = setTimeout(initReminderButtons, 300); 5466 }; 5467 5468 // 页é¢å è½½å®æååå§å 5469 if (document.readyState === 'loading') { 5470 document.addEventListener('DOMContentLoaded', debouncedInit); 5471 } else { 5472 debouncedInit(); 5473 } 5474 5475 // çå¬è¯è¨åæ¢ 5476 window.addEventListener('langChange', debouncedInit); 5477 5478 // çå¬ DOM ååï¼åªç嬿¯èµå表容å¨ï¼ 5479 const matchContainer = document.querySelector('.matches-container') || 5480 document.querySelector('.match-list') || 5481 document.querySelector('.fixtures-container') || 5482 document.querySelector('.today-matches'); 5483 5484 if (matchContainer) { 5485 const observer = new MutationObserver((mutations) => { 5486 // æ£æ¥æ¯å¦æé¢çº¦æéæé®è¢«æ·»å æä¿®æ¹ 5487 let hasReminderButtons = false; 5488 mutations.forEach(mutation => { 5489 if (mutation.addedNodes) { 5490 mutation.addedNodes.forEach(node => { 5491 if (node.nodeType === 1) { 5492 if (node.classList?.contains('reminder-btn') || 5493 node.querySelector?.('.reminder-btn')) { 5494 hasReminderButtons = true; 5495 } 5496 } 5497 }); 5498 } 5499 }); 5500 5501 if (hasReminderButtons) { 5502 debouncedInit(); 5503 } 5504 }); 5505 5506 observer.observe(matchContainer, { childList: true, subtree: true }); 5507 } 5508 </script>
5508 5509 5510 <!-- Visitor Tracking Script --> 5511
5511<script src="/js/tracker.js" defer></script>
5511 5512
5512<script src="/js/chat-visitor-id.js" defer></script>
5512 5513 5514 <!-- æ¶åºæ£æµï¼èªå¨å卿µè§å¨æ¶åºå° cookieï¼ä¾åç«¯ä½¿ç¨ --> 5515
5515<script> 5516 (function() { 5517 const TZ_COOKIE = 'tzOffset'; 5518 const tzOffset = -420; 5519 5520 // æ£æ¥ cookie æ¯å¦å·²åå¨ä¸å¼ç¸å 5521 const existingCookie = document.cookie.split('; ').find(c => c.startsWith(TZ_COOKIE + '=')); 5522 const existingValue = existingCookie ? parseInt(existingCookie.split('=')[1]) : null; 5523 5524 if (existingValue !== tzOffset) { 5525 // 设置 cookieï¼æææ 30 天ï¼å ¨ç«å¯ç¨ 5526 const expires = new Date(Date.now() + 30 * 24 * 60 * 60 * 1000).toUTCString(); 5527 document.cookie = `${TZ_COOKIE}=${tzOffset}; expires=${expires}; path=/; SameSite=Lax`; 5528 5529 // 妿æ¯é¦æ¬¡è®¾ç½®æ¶åºä¸å½å页颿¯"仿¥"ç¸å ³é¡µé¢ï¼å·æ°ä»¥åºç¨æ£ç¡®æ¶åº 5530 const isFirstVisit = existingValue === null; 5531 const isTodayPage = window.location.pathname.includes('/football/today') 5532 || window.location.pathname.includes('/matches/today') 5533 || (window.location.pathname === '/' && !window.location.search.includes('tzOffset')); 5534 5535 if (isFirstVisit && isTodayPage) { 5536 // 馿¬¡è®¿é®ä»æ¥é¡µé¢ï¼å·æ°ä»¥åºç¨æ¶åº 5537 window.location.reload(); 5538 } 5539 } 5540 })(); 5541 </script>
5541 5542 5543 <!-- PWA Service Worker Registration & Installation Prompt --> 5544
5544<script> 5545 (function() { 5546 'use strict'; 5547 5548 let deferredPrompt; 5549 5550 // Service Worker 注å - ç± sw-auto-update.js ç»ä¸ç®¡çï¼è¿éåªå¤çå¼åæ¨¡å¼ 5551 // ç产ç¯å¢ç SW 注ååæ´æ°ç± sw-auto-update.js å¤çï¼èªå¨é黿´æ°æ éç¨æ·ç¡®è®¤ 5552 if ('serviceWorker' in navigator && window.__isDevelopment === 'true') { 5553 console.log('[PWA] Development mode: Service Worker enabled with caching disabled.'); 5554 5555 // å¼å模å¼ä¸ä»ç¶æ³¨å Service Workerï¼ç¨äºæ¨ééç¥ï¼ï¼ä½ç¦ç¨ç¼å 5556 navigator.serviceWorker.register('/sw.js').then(function(registration) { 5557 console.log('[PWA] Service Worker registered in Development mode (no-cache version)'); 5558 5559 // æ¸ é¤ææç°æç¼å 5560 if ('caches' in window) { 5561 caches.keys().then(function(cacheNames) { 5562 return Promise.all( 5563 cacheNames.map(function(cacheName) { 5564 return caches.delete(cacheName); 5565 }) 5566 ); 5567 }).then(function() { 5568 console.log('[PWA] All caches cleared in Development mode'); 5569 }); 5570 } 5571 }).catch(function(error) { 5572 console.error('[PWA] Service Worker registration failed in Development mode:', error); 5573 }); 5574 } 5575 5576 // PWA å®è£ æç¤ºäºä»¶ï¼ä» ç¼å deferredPrompt ä¾é¡¶é¨æ¨ªå¹ 使ç¨ï¼ä¸åå¼¹åºæ§çåºé¨å®è£ æ¡ 5577 window.addEventListener('beforeinstallprompt', (e) => { 5578 console.log('[PWA] Install prompt captured for top banner'); 5579 e.preventDefault(); 5580 deferredPrompt = e; 5581 }); 5582 5583 // æ´æ°éç¥å·²ç§»é¤ - ç± sw-auto-update.js ç»ä¸å¤çé黿´æ° 5584 // æ éç¨æ·äº¤äºï¼çæ¬ååæ¶èªå¨å·æ°é¡µé¢ 5585 window.addEventListener('appinstalled', () => { 5586 console.log('[PWA] App installed successfully'); 5587 localStorage.setItem('pwa-installed', 'true'); 5588 if (typeof closePwaTopBanner === 'function') closePwaTopBanner(); 5589 }); 5590 5591 // ==================== 鲿¢æµè§å¨bfcacheï¼å¾è¿ç¼åï¼==================== 5592 // 鲿¢é¡µé¢è¿å ¥bfcacheï¼ç¡®ä¿ç¨æ·å ³éæ ç¾é¡µåæå¼æ¶ä¼éæ°å è½½ 5593 // 注æï¼ä¸å¨pageshowæ¶å¼ºå¶å·æ°ï¼é¿å 䏿æ£å¨è¿è¡çç´æ 5594 5595 // æ¹æ³1ï¼ä½¿ç¨ pagehide äºä»¶ï¼ç°ä»£æ¿ä»£æ¹æ¡ï¼æ¿ä»£å·²å¼ç¨ç unloadï¼ 5596 // pagehide äºä»¶å¨é¡µé¢éèæ¶è§¦åï¼å¯ä»¥é»æ¢ bfcache 5597 window.addEventListener('pagehide', function(event) { 5598 // 妿页é¢è¢«æ¾å ¥ bfcacheï¼event.persisted 为 true 5599 // éè¿æ§è¡ä¸äºæä½ï¼å¦åé beaconï¼å¯ä»¥é»æ¢ bfcache 5600 if (event.persisted) { 5601 console.log('[Cache] Page entering bfcache'); 5602 } 5603 }); 5604 5605 // æ¹æ³2ï¼ä½¿ç¨Cache-Control头ï¼å·²å¨metaæ ç¾ä¸è®¾ç½®ï¼ 5606 // æ¹æ³3ï¼æ£æµbfcacheæ¢å¤ï¼è®°å½æ¥å¿ä½ä¸å·æ° 5607 window.addEventListener('pageshow', function(event) { 5608 if (event.persisted) { 5609 console.log('[Cache] Page restored from bfcache'); 5610 // ä¸å·æ°é¡µé¢ï¼é¿å ä¸æç´æ 5611 // å¦æç¡®å®ä»bfcacheæ¢å¤ï¼é¡µé¢ç¶æåºè¯¥æ¯å®æ´ç 5612 // å¯ä»¥å¨è¿ééæ°åå§åéè¦çè¿æ¥ï¼å¦ SignalRï¼ 5613 } 5614 }); 5615 5616 // ç½ç»ç¶æçæ§ 5617 window.addEventListener('online', () => { 5618 console.log('[PWA] Back online'); 5619 // å¯ä»¥æ·»å éæ°è¿æ¥é»è¾ 5620 }); 5621 5622 window.addEventListener('offline', () => { 5623 console.log('[PWA] Gone offline'); 5624 // å¯ä»¥æ¾ç¤ºç¦»çº¿æç¤º 5625 }); 5626 5627 // ==================== PWA é¡¶é¨å®è£ æ¨ªå¹ (ç§»å¨ç«¯) ==================== 5628 function showPwaTopBanner() { 5629 const banner = document.getElementById('pwa-top-banner'); 5630 if (!banner) return; 5631 5632 // çæ£å·²å®è£ ï¼standalone模å¼ï¼â æ°¸ä¹ ä¸æ¾ç¤º 5633 if (window.matchMedia('(display-mode: standalone)').matches || window.navigator.standalone === true) return; 5634 // å·²éè¿å®è£ äºä»¶ç¡®è®¤å®è£ â æ°¸ä¹ 䏿¾ç¤º 5635 if (localStorage.getItem('pwa-installed') === 'true') return; 5636 // éç§»å¨ç«¯ â 䏿¾ç¤º 5637 if (window.innerWidth > 768) return; 5638 5639 banner.classList.remove('d-none'); 5640 } 5641 5642 window.closePwaTopBanner = function() { 5643 const banner = document.getElementById('pwa-top-banner'); 5644 if (banner) { 5645 banner.classList.add('d-none'); 5646 } 5647 // ä» æ¬æ¬¡é¡µé¢å ³éï¼å·æ°åéæ°æ¾ç¤º 5648 }; 5649 5650 window.installPwaFromBanner = async function() { 5651 if (deferredPrompt) { 5652 deferredPrompt.prompt(); 5653 const { outcome } = await deferredPrompt.userChoice; 5654 if (outcome === 'accepted') { 5655 localStorage.setItem('pwa-installed', 'true'); 5656 } 5657 deferredPrompt = null; 5658 closePwaTopBanner(); 5659 } else { 5660 // iOS / browsers without beforeinstallprompt 5661 // Site default Vietnamese; use i18n when ready 5662 const isIOS = /iPad|iPhone|iPod/.test(navigator.userAgent); 5663 const iosFallback = 'Vui lòng nhấn nút Chia sẻ á» trình duyá»t â¬ï¸, rá»i chá»n «Thêm và o Mà n hình chÃnh»'; 5664 const androidFallback = 'Vui lòng má» menu trình duyá»t, chá»n «Thêm và o Mà n hình chÃnh» hoặc «Cà i Äặt ứng dụng»';
5665 const key = isIOS ? 'seo.pwa.installGuideIos' : 'seo.pwa.installGuideAndroid'; 5666 const fallback = isIOS ? iosFallback : androidFallback; 5667 let msg = fallback; 5668 if (window.L?.T && window.i18n?.isReady?.()) { 5669 const translated = window.L.T(key); 5670 if (translated && translated !== key) msg = translated; 5671 } 5672 alert(msg); 5673 } 5674 }; 5675 5676 // 页é¢å è½½åæ¾ç¤ºæ¨ªå¹ 5677 if (document.readyState === 'loading') { 5678 document.addEventListener('DOMContentLoaded', showPwaTopBanner); 5679 } else { 5680 showPwaTopBanner(); 5681 } 5682 5683 })(); 5684 5685 // ==================== PWA 䏿巿°åè½ ==================== 5686 // Android åçæ¯æä¸æå·æ°ï¼iOS PWA éè¦èªå®ä¹å®ç° 5687 // å·²ç¦ç¨ - å¦éå¯ç¨è¯·åæ¶æ³¨é 5688 /* 5689 (function() { 5690 'use strict'; 5691 5692 // æ£æµæ¯å¦ä¸º iOS PWA æ¨¡å¼ 5693 const isIOSPWA = (window.navigator.standalone === true) || 5694 (window.matchMedia('(display-mode: standalone)').matches && /iPad|iPhone|iPod/.test(navigator.userAgent)); 5695 5696 // æ£æµæ¯å¦ä¸ºç§»å¨è®¾å¤ 5697 const isMobile = /Android|webOS|iPhone|iPad|iPod|BlackBerry|IEMobile|Opera Mini/i.test(navigator.userAgent); 5698 5699 // åªå¨ç§»å¨è®¾å¤ä¸å¯ç¨ä¸æå·æ° 5700 if (!isMobile) return; 5701 5702 let startY = 0; 5703 let currentY = 0; 5704 let pulling = false; 5705 let refreshThreshold = 120; // 触åå·æ°çéå¼ï¼åç´ ï¼ 5706 let maxPull = 160; // æå¤§ä¸æè·ç¦» 5707 let refreshIndicator = null; 5708 5709 // åå»ºå·æ°æç¤ºå¨ 5710 function createRefreshIndicator() { 5711 if (refreshIndicator) return; 5712 5713 refreshIndicator = document.createElement('div'); 5714 refreshIndicator.id = 'pwa-refresh-indicator'; 5715 const pullText = window.L?.T ? window.L.T('common.pullToRefresh') : '䏿巿°'; 5716 refreshIndicator.innerHTML = ` 5717 <div class="refresh-spinner"> 5718 <svg width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><polyline points="23 4 23 10 17 10"></polyline><polyline points="1 20 1 14 7 14"></polyline><path d="M3.51 9a9 9 0 0 1 14.85-3.36L23 10M1 14l4.64 4.36A9 9 0 0 0 20.49 15"></path></svg> 5719 </div> 5720 <span class="refresh-text">${window.L?.T ? window.L.T('common.releaseToRefresh') : 'æ¾å¼å·æ°'}</span> 5721 `; 5722 refreshIndicator.style.cssText = ` 5723 position: fixed; 5724 top: 0; 5725 left: 50%; 5726 transform: translateX(-50%) translateY(-100%); 5727 background: transparent; 5728 color: #333; 5729 padding: 12px 24px; 5730 border-radius: 0 0 16px 16px; 5731 display: flex; 5732 align-items: center; 5733 gap: 10px; 5734 font-size: 14px; 5735 font-weight: 500; 5736 z-index: 10002; 5737 transition: transform 0.2s ease; 5738 box-shadow: none; 5739 `; 5740 5741 // æ·»å æ ·å¼ 5742 const style = document.createElement('style'); 5743 style.textContent = ` 5744 #pwa-refresh-indicator .refresh-spinner { 5745 display: flex; 5746 align-items: center; 5747 justify-content: center; 5748 } 5749 #pwa-refresh-indicator .refresh-spinner svg { 5750 width: 16px; 5751 height: 16px; 5752 transition: transform 0.3s ease; 5753 } 5754 #pwa-refresh-indicator .refresh-text { 5755 color: white !important; 5756 font-size: 14px; 5757 font-weight: 500; 5758 } 5759 #pwa-refresh-indicator.refreshing .refresh-spinner svg { 5760 animation: spin 1s linear infinite; 5761 } 5762 #pwa-refresh-indicator.ready .refresh-spinner svg { 5763 transform: rotate(180deg); 5764 } 5765 @keyframes spin { 5766 from { transform: rotate(0deg); } 5767 to { transform: rotate(360deg); } 5768 } 5769 `; 5770 document.head.appendChild(style); 5771 document.body.appendChild(refreshIndicator); 5772 } 5773 5774 // æ´æ°æç¤ºå¨ä½ç½®åç¶æ 5775 function updateIndicator(pullDistance, isReady) { 5776 if (!refreshIndicator) return; 5777 5778 const progress = Math.min(pullDistance / refreshThreshold, 1); 5779 const translateY = Math.min(pullDistance, maxPull) - 60; 5780 5781 refreshIndicator.style.transform = `translateX(-50%) translateY(${translateY}px)`; 5782 5783 if (isReady) { 5784 refreshIndicator.classList.add('ready'); 5785 refreshIndicator.classList.remove('refreshing'); 5786 } else { 5787 refreshIndicator.classList.remove('ready', 'refreshing'); 5788 } 5789 } 5790 5791 // å¼å§å·æ°å¨ç» 5792 function startRefresh() { 5793 if (!refreshIndicator) return; 5794 5795 refreshIndicator.classList.add('refreshing'); 5796 refreshIndicator.classList.remove('ready'); 5797 refreshIndicator.style.transform = 'translateX(-50%) translateY(10px)'; 5798 5799 // å»¶è¿åå·æ°é¡µé¢ 5800 setTimeout(() => { 5801 window.location.reload(); 5802 }, 500); 5803 } 5804 5805 // éç½®æç¤ºå¨ 5806 function resetIndicator() { 5807 if (!refreshIndicator) return; 5808 5809 refreshIndicator.style.transform = 'translateX(-50%) translateY(-100%)'; 5810 refreshIndicator.classList.remove('ready', 'refreshing'); 5811 } 5812 5813 // 触æ¸å¼å§ 5814 function handleTouchStart(e) { 5815 // åªå¨é¡µé¢é¡¶é¨æ¶å¯ç¨ä¸æå·æ° 5816 if (window.scrollY > 5) return; 5817 5818 // 忽ç¥å¨è¾å ¥æ¡ãè§é¢ææ¾å¨çå ç´ ä¸çè§¦æ¸ 5819 const target = e.target; 5820 if (target.tagName === 'INPUT' || target.tagName === 'TEXTAREA' || 5821 target.tagName === 'VIDEO' || target.closest('.live-player
5821-container') || 5822 target.closest('.chat-input-container')) { 5823 return; 5824 } 5825 5826 startY = e.touches[0].pageY; 5827 pulling = true; 5828 createRefreshIndicator(); 5829 } 5830 5831 // 触æ¸ç§»å¨ 5832 function handleTouchMove(e) { 5833 if (!pulling || window.scrollY > 5) { 5834 pulling = false; 5835 return; 5836 } 5837 5838 currentY = e.touches[0].pageY; 5839 const pullDistance = currentY - startY; 5840 5841 // åªå¤çå䏿å¨ï¼ä¸æå¨è·ç¦»è¶ è¿æå°éå¼ 5842 if (pullDistance > 10) { 5843 // iOS éè¦é»æ¢é»è®¤è¡ä¸ºä»¥å®ç°èªå®ä¹ä¸æ 5844 if (isIOSPWA) { 5845 e.preventDefault(); 5846 } 5847 5848 const isReady = pullDistance >= refreshThreshold; 5849 updateIndicator(pullDistance, isReady); 5850 } 5851 } 5852 5853 // 触æ¸ç»æ 5854 function handleTouchEnd(e) { 5855 if (!pulling) return; 5856 5857 const pullDistance = currentY - startY; 5858 5859 if (pullDistance >= refreshThreshold) { 5860 startRefresh(); 5861 } else { 5862 resetIndicator(); 5863 } 5864 5865 pulling = false; 5866 startY = 0; 5867 currentY = 0; 5868 } 5869 5870 // ç»å®äºä»¶ 5871 document.addEventListener('touchstart', handleTouchStart, { passive: true }); 5872 document.addEventListener('touchmove', handleTouchMove, { passive: false }); 5873 document.addEventListener('touchend', handleTouchEnd, { passive: true }); 5874 5875 console.log('[PWA] Pull-to-refresh enabled', isIOSPWA ? '(iOS PWA mode)' : ''); 5876 })(); 5877 */ 5878 5879 </script>
5879 5880 5881 5882 <!-- ç»å½/注åå¼¹çª --> 5883 <meta name="turnstile-sitekey" content="0x4AAAAAACejCwrxG0oAHrtT" style="display:none;" /> 5884 5885 5886 5887
5888<script> 5889// èèµæå /å±å¼ 5890function toggleLeague(btn) { 5891 const section = btn.closest('.lg-section'); 5892 const matches = section.querySelector('.lg-matches'); 5893 const useEl = btn.querySelector('use'); 5894 if (matches.style.display === 'none') { 5895 matches.style.display = ''; 5896 if (useEl) useEl.setAttribute('href', '#icon-chevron-up'); 5897 } else { 5898 matches.style.display = 'none'; 5899 if (useEl) useEl.setAttribute('href', '#icon-chevron-down'); 5900 } 5901} 5902 5903// æ¶èç¶æåå§åãSPA æ³¨å ¥æ¶ DOMContentLoaded å·²ç»è§¦åè¿ï¼æä»¥å·²å è½½åç«å»æ§è¡ã 5904function initMatchListSearch() { 5905 const page = document.querySelector('.match-list-page'); 5906 const input = document.getElementById('matchListSearch'); 5907 const clearBtn = document.getElementById('matchListSearchClear'); 5908 const empty = document.getElementById('matchListSearchEmpty'); 5909 if (!page || !input || input.dataset.bound === '1') return; 5910 input.dataset.bound = '1'; 5911 5912 function applyFilter() { 5913 const query = input.value.trim().toLowerCase(); 5914 if (clearBtn) clearBtn.hidden = query.length === 0; 5915 let visible = 0; 5916 5917 page.querySelectorAll('.mx-row').forEach(function (row) { 5918 const hay = (row.getAttribute('data-search') || '').toLowerCase(); 5919 const show = !query || hay.indexOf(query) !== -1; 5920 row.classList.toggle('is-search-hidden', !show); 5921 if (show) visible += 1; 5922 }); 5923 5924 page.querySelectorAll('.lg-section').forEach(function (section) { 5925 const any = section.querySelector('.mx-row:not(.is-search-hidden)'); 5926 section.classList.toggle('is-search-hidden', !any); 5927 section.classList.toggle('is-search-open', !!query && !!any); 5928 }); 5929 5930 page.querySelectorAll('.beauty-schedule-row').forEach(function (row) { 5931 const hay = (row.getAttribute('data-search') || '').toLowerCase(); 5932 const show = !query || hay.indexOf(query) !== -1; 5933 row.classList.toggle('is-search-hidden', !show); 5934 if (show) visible += 1; 5935 }); 5936 5937 page.querySelectorAll('.schedule-sport-section').forEach(function (section) { 5938 if (!section.querySelector('.beauty-schedule-row')) return; 5939 const any = section.querySelector('.beauty-schedule-row:not(.is-search-hidden)'); 5940 section.classList.toggle('is-search-hidden', !any); 5941 }); 5942 5943 page.querySelectorAll('.schedule-sport-title-inline').forEach(function (title) { 5944 const anySports = page.querySelector('.lg-section:not(.is-search-hidden)'); 5945 title.classList.toggle('is-search-hidden', !!query && !anySports); 5946 }); 5947 5948 page.querySelectorAll('.match-list-paging').forEach(function (el) { 5949 el.classList.toggle('is-search-hidden', query.length > 0); 5950 }); 5951 5952 if (empty) empty.hidden = !query || visible > 0; 5953 } 5954 5955 input.addEventListener('input', applyFilter); 5956 input.addEventListener('keydown', function (e) { 5957 if (e.key === 'Enter') e.preventDefault(); 5958 if (e.key === 'Escape') { 5959 input.value = ''; 5960 applyFilter(); 5961 } 5962 }); 5963 if (clearBtn) { 5964 clearBtn.addEventListener('click', function () { 5965 input.value = ''; 5966 applyFilter(); 5967 input.focus(); 5968 }); 5969 } 5970} 5971 5972function initMatchListPage() { 5973 initMatchListSearch(); 5974 const isAuth = 'false' === 'true'; 5975 if (!isAuth) return; 5976 5977 fetch('/profile/favorites/match-ids') 5978 .then(r => r.json()) 5979 .then(data => { 5980 if (!data || !data.success || !Array.isArray(data.ids)) return; 5981 const idSet = new Set(data.ids.map(x => String(x))); 5982 document.querySelectorAll('.favorite-btn[data-match-id]').forEach(btn => { 5983 const matchId = btn.getAttribute('data-match-id'); 5984 const isFavorited = idSet.has(String(matchId)); 5985 btn.classList.toggle('active', isFavorited); 5986 const useEl = btn.querySelector('use'); 5987 if (useEl) { 5988 useEl.setAttribute('href', isFavorited ? '#icon-star-filled' : '#icon-star'); 5989 } 5990 }); 5991 }) 5992 .catch(() => {}); 5993} 5994window.initMatchListPage = initMatchListPage; 5995if (document.readyState === 'loading') { 5996 document.addEventListener('DOMContentLoaded', initMatchListPage); 5997} else { 5998 initMatchListPage(); 5999} 6000</script>
6000 6001
6002<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":"b6f571285a4f4a64aa211ef540e7e182","r":1,"spa":2}' crossorigin="anonymous"></script>
6002 6003</body> 6004</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.