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=1791598901" /> 14 <link rel="apple-touch-icon" sizes="120x120" href="/images/pwa/apple-touch-icon-120x120.png?v=1791598901" /> 15 <link rel="apple-touch-icon" sizes="152x152" href="/images/pwa/apple-touch-icon-152x152.png?v=1791598901" /> 16 <link rel="apple-touch-icon" sizes="167x167" href="/images/pwa/apple-touch-icon-167x167.png?v=1791598901" /> 17 <link rel="apple-touch-icon" sizes="180x180" href="/images/pwa/apple-touch-icon-180x180.png?v=1791598901" /> 18 <link rel="icon" type="image/png" sizes="32x32" href="/images/favicon/favicon-32x32.png?v=1791598901" /> 19 <link rel="icon" type="image/png" sizes="16x16" href="/images/favicon/favicon-16x16.png?v=1791598901" /> 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=1791598901" /> 26 <link rel="shortcut icon" href="/images/favicon/favicon.ico?v=1791598901" /> 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>Lịch trực tiếp bóng đá hôm nay - Tỷ số trực tuyến | Xoigac TV</title> 40 41 <!-- SEO: åºæ¬å æ ç¾ --> 42 <meta name="description" content="Cập nhật lịch thi đấu bóng đá hôm nay và tỷ số trực tiếp. Xem trực tiếp các trận đấu Ngoại hạng Anh, La Liga, Serie A, Bundesliga, Ligue 1, V-League tại Xoigac TV miễn phí." /> 43 <meta name="keywords" content="trận đấu hôm nay, lịch thi đấu hôm nay, bóng đá hôm nay" /> 44 45 <!-- SEO: Robots --> 46 <meta name="robots" content="index, follow" /> 47 48 <!-- SEO: Canonical URL --> 49 <link rel="canonical" href="https://xoigac.top/hom-nay" id="canonicalUrl" /> 50 51 <!-- SEO: Open Graph --> 52 <meta property="og:type" content="website" /> 53 <meta property="og:title" content="Lịch trực tiếp bóng đá hôm nay - Tỷ số trực tuyến | Xoigac TV" /> 54 <meta property="og:description" content="Cập nhật lịch thi đấu bóng đá hôm nay và tỷ số trực tiếp. Xem trực tiếp các trận đấu Ngoại hạng Anh, La Liga, Serie A, Bundesliga, Ligue 1, V-League tại Xoigac TV miễn phí." /> 55 <meta property="og:url" content="https://xoigac.top/hom-nay" 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="Lịch trực tiếp bóng đá hôm nay - Tỷ số trực tuyến | Xoigac TV" /> 63 <meta name="twitter:description" content="Cập nhật lịch thi đấu bóng đá hôm nay và tỷ số trực tiếp. Xem trực tiếp các trận đấu Ngoại hạng Anh, La Liga, Serie A, Bundesliga, Ligue 1, V-League tại Xoigac TV miễn phí." /> 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/hom-nay" 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=%2Fhom-nay" 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=%2Fhom-nay" 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=%2Fhom-nay" 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=%2Fhom-nay" 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=%2Fhom-nay" 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=%2Fhom-nay" 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="CfDJ8IwpNTNw2w9OptYg9zhENLRsx8wFe2Ak-qiHDHuzyf4em6alJ9affol8zlyxcpuwj__AmsmA4sXy1QUj-08DrWY6sqSTuVz34Pm7nKVpp7X5RDjLHyLychXp7oSqTkmeIjmGxMhoFR5HvfYEk_Wew6M" /> 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">Lịch Thi Đấu Thể Thao Hôm Nay</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 "> 1938 <span class="live-indicator-dot"></span> 1939 Đang diễn ra 1940 </a> 1941 <a href="/hom-nay" class="filter-pill active"> 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ả thể thao</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="/hom-nay" selected="selected">Tất cả thể thao</option> 1962 <option value="/hom-nay?category=football">Bóng Đá</option> 1963 <option value="/hom-nay?category=basketball">Bóng Rổ</option> 1964 </select> 1965 </div> 1966 </div> 1967 </div> 1968 </div> 1969 1970 <div id="matchListSearchEmpty" class="schedule-sport-empty" hidden>Không tìm thấy kết quả</div> 1971 1972 1973 1974 <div class="lg-section" data-search="Pro B France"> 1975 <div class="lg-header"> 1976 <div class="lg-header-left"> 1977 <button type="button" class="lg-fav-btn" aria-label="Pin league"> 1978 <svg class="icon"><use href="#icon-star"/></svg> 1979 </button> 1980 <span class="lg-country-name">France:</span> 1981 <img src="/images/basketball/leagues/8.webp" 1982 alt="Pro B" class="lg-logo" loading="lazy" 1983 onerror="if(!this.dataset.fallback){this.src='/images/placeholder-league.svg';this.dataset.fallback='true';}"> 1984 <span class="lg-name">Pro B</span> 1985 </div> 1986 <div class="lg-header-right"> 1987 <button type="button" class="lg-collapse-btn" onclick="toggleLeague(this)" aria-label="Toggle"> 1988 <svg class="icon icon-collapse"><use href="#icon-chevron-up"/></svg> 1989 </button> 1990 </div> 1991 </div> 1992 1993 <div class="lg-matches"> 1994 <div class="mx-row " data-search="Pro B France Poitiers Nantes"> 1995 <div class="mx-left"> 1996 <button type="button" class="mx-fav-btn favorite-btn" 1997 data-match-id="335884" 1998 data-auth="false" 1999 onclick="event.preventDefault(); event.stopPropagation(); handleFavoriteClick(335884, this);" 2000 aria-label="Thêm vào yêu thích"> 2001 <svg class="icon icon-fav"><use href="#icon-star"/></svg> 2002 </button> 2003 <div class="mx-status">
2004 <span class="mx-time">01:00</span> 2005 </div> 2006 </div> 2007 2008 <div class="mx-center"> 2009 <a href="/poitiers-vs-nantes-id335884" class="mx-teams-link"> 2010 <div class="mx-team-row"> 2011 <img src="/images/basketball/teams/109.webp" 2012 alt="Poitiers" class="mx-team-logo" loading="lazy" 2013 onerror="this.onerror=null; this.src='/images/placeholder-team.svg';"> 2014 <span class="mx-team-name">Poitiers</span> 2015 <span class="mx-score "> 2016 </span> 2017 </div> 2018 <div class="mx-team-row"> 2019 <img src="/images/basketball/teams/97.webp" 2020 alt="Nantes" class="mx-team-logo" loading="lazy" 2021 onerror="this.onerror=null; this.src='/images/placeholder-team.svg';"> 2022 <span class="mx-team-name">Nantes</span> 2023 <span class="mx-score "> 2024 </span> 2025 </div> 2026 </a> 2027 </div> 2028 2029 <div class="mx-right "> 2030 <a href="/poitiers-vs-nantes-id335884" class="mx-action-btn preview-btn">Xem trước</a> 2031 </div> 2032 </div> 2033 <div class="mx-row " data-search="Pro B France Rouen Ada Blois"> 2034 <div class="mx-left"> 2035 <button type="button" class="mx-fav-btn favorite-btn" 2036 data-match-id="335885" 2037 data-auth="false" 2038 onclick="event.preventDefault(); event.stopPropagation(); handleFavoriteClick(335885, this);" 2039 aria-label="Thêm vào yêu thích"> 2040 <svg class="icon icon-fav"><use href="#icon-star"/></svg> 2041 </button> 2042 <div class="mx-status"> 2043 <span class="mx-time">01:00</span> 2044 </div> 2045 </div> 2046 2047 <div class="mx-center"> 2048 <a href="/rouen-vs-ada-blois-id335885" class="mx-teams-link"> 2049 <div class="mx-team-row"> 2050 <img src="/images/basketball/teams/101.webp" 2051 alt="Rouen" class="mx-team-logo" loading="lazy" 2052 onerror="this.onerror=null; this.src='/images/placeholder-team.svg';"> 2053 <span class="mx-team-name">Rouen</span> 2054 <span class="mx-score "> 2055 </span> 2056 </div> 2057 <div class="mx-team-row"> 2058 <img src="/images/basketball/teams/95.webp" 2059 alt="Ada Blois" class="mx-team-logo" loading="lazy" 2060 onerror="this.onerror=null; this.src='/images/placeholder-team.svg';"> 2061 <span class="mx-team-name">Ada Blois</span> 2062 <span class="mx-score "> 2063 </span> 2064 </div> 2065 </a> 2066 </div> 2067 2068 <div class="mx-right "> 2069 <a href="/rouen-vs-ada-blois-id335885" class="mx-action-btn preview-btn">Xem trước</a> 2070 </div> 2071 </div> 2072 <div class="mx-row " data-search="Pro B France Chalons-Reims Aix Maurienne"> 2073 <div class="mx-left"> 2074 <button type="button" class="mx-fav-btn favorite-btn" 2075 data-match-id="335886" 2076 data-auth="false" 2077 onclick="event.preventDefault(); event.stopPropagation(); handleFavoriteClick(335886, this);" 2078 aria-label="Thêm vào yêu thích"> 2079 <svg class="icon icon-fav"><use href="#icon-star"/></svg> 2080 </button> 2081 <div class="mx-status">
2082 <span class="mx-time">01:00</span> 2083 </div> 2084 </div> 2085 2086 <div class="mx-center"> 2087 <a href="/chalons-reims-vs-aix-maurienne-id335886" class="mx-teams-link"> 2088 <div class="mx-team-row"> 2089 <img src="/images/basketball/teams/12.webp" 2090 alt="Chalons-Reims" class="mx-team-logo" loading="lazy" 2091 onerror="this.onerror=null; this.src='/images/placeholder-team.svg';"> 2092 <span class="mx-team-name">Chalons-Reims</span> 2093 <span class="mx-score "> 2094 </span> 2095 </div> 2096 <div class="mx-team-row"> 2097 <img src="/images/basketball/teams/104.webp" 2098 alt="Aix Maurienne" class="mx-team-logo" loading="lazy" 2099 onerror="this.onerror=null; this.src='/images/placeholder-team.svg';"> 2100 <span class="mx-team-name">Aix Maurienne</span> 2101 <span class="mx-score "> 2102 </span> 2103 </div> 2104 </a> 2105 </div> 2106 2107 <div class="mx-right "> 2108 <a href="/chalons-reims-vs-aix-maurienne-id335886" class="mx-action-btn preview-btn">Xem trước</a> 2109 </div> 2110 </div> 2111 <div class="mx-row " data-search="Pro B France Le Havre Fos-sur-Mer"> 2112 <div class="mx-left"> 2113 <button type="button" class="mx-fav-btn favorite-btn" 2114 data-match-id="335887" 2115 data-auth="false" 2116 onclick="event.preventDefault(); event.stopPropagation(); handleFavoriteClick(335887, this);" 2117 aria-label="Thêm vào yêu thích"> 2118 <svg class="icon icon-fav"><use href="#icon-star"/></svg> 2119 </button> 2120 <div class="mx-status"> 2121 <span class="mx-time">01:00</span> 2122 </div> 2123 </div> 2124 2125 <div class="mx-center"> 2126 <a href="/le-havre-vs-fos-sur-mer-id335887" class="mx-teams-link"> 2127 <div class="mx-team-row"> 2128 <img src="https://media.api-sports.io/basketball/teams/1481.png" 2129 alt="Le Havre" class="mx-team-logo" loading="lazy" 2130 onerror="this.onerror=null; this.src='/images/placeholder-team.svg';"> 2131 <span class="mx-team-name">Le Havre</span> 2132 <span class="mx-score "> 2133 </span> 2134 </div> 2135 <div class="mx-team-row"> 2136 <img src="https://media.api-sports.io/basketball/teams/110.png" 2137 alt="Fos-sur-Mer" class="mx-team-logo" loading="lazy" 2138 onerror="this.onerror=null; this.src='/images/placeholder-team.svg';"> 2139 <span class="mx-team-name">Fos-sur-Mer</span> 2140 <span class="mx-score "> 2141 </span> 2142 </div> 2143 </a> 2144 </div> 2145 2146 <div class="mx-right "> 2147 <a href="/le-havre-vs-fos-sur-mer-id335887" class="mx-action-btn preview-btn">Xem trước</a> 2148 </div> 2149 </div> 2150 <div class="mx-row " data-search="Pro B France La Rochelle Saint Etienne"> 2151 <div class="mx-left"> 2152 <button type="button" class="mx-fav-btn favorite-btn" 2153 data-match-id="335888" 2154 data-auth="false" 2155 onclick="event.preventDefault(); event.stopPropagation(); handleFavoriteClick(335888, this);" 2156 aria-label="Thêm vào yêu thích"> 2157 <svg class="icon icon-fav"><use href="#icon-star"/></svg> 2158 </button> 2159 <div class="mx-status">
2160 <span class="mx-time">01:00</span> 2161 </div> 2162 </div> 2163 2164 <div class="mx-center"> 2165 <a href="/la-rochelle-vs-saint-etienne-id335888" class="mx-teams-link"> 2166 <div class="mx-team-row"> 2167 <img src="/images/basketball/teams/2311.webp" 2168 alt="La Rochelle" class="mx-team-logo" loading="lazy" 2169 onerror="this.onerror=null; this.src='/images/placeholder-team.svg';"> 2170 <span class="mx-team-name">La Rochelle</span> 2171 <span class="mx-score "> 2172 </span> 2173 </div> 2174 <div class="mx-team-row"> 2175 <img src="https://media.api-sports.io/basketball/teams/7909.png" 2176 alt="Saint Etienne" class="mx-team-logo" loading="lazy" 2177 onerror="this.onerror=null; this.src='/images/placeholder-team.svg';"> 2178 <span class="mx-team-name">Saint Etienne</span> 2179 <span class="mx-score "> 2180 </span> 2181 </div> 2182 </a> 2183 </div> 2184 2185 <div class="mx-right "> 2186 <a href="/la-rochelle-vs-saint-etienne-id335888" class="mx-action-btn preview-btn">Xem trước</a> 2187 </div> 2188 </div> 2189 <div class="mx-row " data-search="Pro B France Denain-Voltaire Levallois"> 2190 <div class="mx-left"> 2191 <button type="button" class="mx-fav-btn favorite-btn" 2192 data-match-id="335889" 2193 data-auth="false" 2194 onclick="event.preventDefault(); event.stopPropagation(); handleFavoriteClick(335889, this);" 2195 aria-label="Thêm vào yêu thích"> 2196 <svg class="icon icon-fav"><use href="#icon-star"/></svg> 2197 </button> 2198 <div class="mx-status"> 2199 <span class="mx-time">01:00</span> 2200 </div> 2201 </div> 2202 2203 <div class="mx-center"> 2204 <a href="/denain-voltaire-vs-levallois-id335889" class="mx-teams-link"> 2205 <div class="mx-team-row"> 2206 <img src="/images/basketball/teams/94.webp" 2207 alt="Denain-Voltaire" class="mx-team-logo" loading="lazy" 2208 onerror="this.onerror=null; this.src='/images/placeholder-team.svg';"> 2209 <span class="mx-team-name">Denain-Voltaire</span> 2210 <span class="mx-score "> 2211 </span> 2212 </div> 2213 <div class="mx-team-row"> 2214 <img src="https://media.api-sports.io/basketball/teams/14.png" 2215 alt="Levallois" class="mx-team-logo" loading="lazy" 2216 onerror="this.onerror=null; this.src='/images/placeholder-team.svg';"> 2217 <span class="mx-team-name">Levallois</span> 2218 <span class="mx-score "> 2219 </span> 2220 </div> 2221 </a> 2222 </div> 2223 2224 <div class="mx-right "> 2225 <a href="/denain-voltaire-vs-levallois-id335889" class="mx-action-btn preview-btn">Xem trước</a> 2226 </div> 2227 </div> 2228 <div class="mx-row " data-search="Pro B France Caen Hyeres-Toulon"> 2229 <div class="mx-left"> 2230 <button type="button" class="mx-fav-btn favorite-btn" 2231 data-match-id="335890" 2232 data-auth="false" 2233 onclick="event.preventDefault(); event.stopPropagation(); handleFavoriteClick(335890, this);" 2234 aria-label="Thêm vào yêu thích"> 2235 <svg class="icon icon-fav"><use href="#icon-star"/></svg> 2236 </button> 2237 <div class="mx-status">
2238 <span class="mx-time">01:00</span> 2239 </div> 2240 </div> 2241 2242 <div class="mx-center"> 2243 <a href="/caen-vs-hyeres-toulon-id335890" class="mx-teams-link"> 2244 <div class="mx-team-row"> 2245 <img src="/images/basketball/teams/114.webp" 2246 alt="Caen" class="mx-team-logo" loading="lazy" 2247 onerror="this.onerror=null; this.src='/images/placeholder-team.svg';"> 2248 <span class="mx-team-name">Caen</span> 2249 <span class="mx-score "> 2250 </span> 2251 </div> 2252 <div class="mx-team-row"> 2253 <img src="/images/basketball/teams/1480.webp" 2254 alt="Hyeres-Toulon" class="mx-team-logo" loading="lazy" 2255 onerror="this.onerror=null; this.src='/images/placeholder-team.svg';"> 2256 <span class="mx-team-name">Hyeres-Toulon</span> 2257 <span class="mx-score "> 2258 </span> 2259 </div> 2260 </a> 2261 </div> 2262 2263 <div class="mx-right "> 2264 <a href="/caen-vs-hyeres-toulon-id335890" class="mx-action-btn preview-btn">Xem trước</a> 2265 </div> 2266 </div> 2267 <div class="mx-row " data-search="Pro B France Vichy Evreux"> 2268 <div class="mx-left"> 2269 <button type="button" class="mx-fav-btn favorite-btn" 2270 data-match-id="335900" 2271 data-auth="false" 2272 onclick="event.preventDefault(); event.stopPropagation(); handleFavoriteClick(335900, this);" 2273 aria-label="Thêm vào yêu thích"> 2274 <svg class="icon icon-fav"><use href="#icon-star"/></svg> 2275 </button> 2276 <div class="mx-status"> 2277 <span class="mx-time">01:30</span> 2278 </div> 2279 </div> 2280 2281 <div class="mx-center"> 2282 <a href="/vichy-vs-evreux-id335900" class="mx-teams-link"> 2283 <div class="mx-team-row"> 2284 <img src="/images/basketball/teams/98.webp" 2285 alt="Vichy" class="mx-team-logo" loading="lazy" 2286 onerror="this.onerror=null; this.src='/images/placeholder-team.svg';"> 2287 <span class="mx-team-name">Vichy</span> 2288 <span class="mx-score "> 2289 </span> 2290 </div> 2291 <div class="mx-team-row"> 2292 <img src="/images/basketball/teams/105.webp" 2293 alt="Evreux" class="mx-team-logo" loading="lazy" 2294 onerror="this.onerror=null; this.src='/images/placeholder-team.svg';"> 2295 <span class="mx-team-name">Evreux</span> 2296 <span class="mx-score "> 2297 </span> 2298 </div> 2299 </a> 2300 </div> 2301 2302 <div class="mx-right "> 2303 <a href="/vichy-vs-evreux-id335900" class="mx-action-btn preview-btn">Xem trước</a> 2304 </div> 2305 </div> 2306 <div class="mx-row " data-search="Pro B France Antibes Orleans"> 2307 <div class="mx-left"> 2308 <button type="button" class="mx-fav-btn favorite-btn" 2309 data-match-id="335901" 2310 data-auth="false" 2311 onclick="event.preventDefault(); event.stopPropagation(); handleFavoriteClick(335901, this);" 2312 aria-label="Thêm vào yêu thích"> 2313 <svg class="icon icon-fav"><use href="#icon-star"/></svg> 2314 </button> 2315 <div class="mx-status">
2316 <span class="mx-time">01:30</span> 2317 </div> 2318 </div> 2319 2320 <div class="mx-center"> 2321 <a href="/antibes-vs-orleans-id335901" class="mx-teams-link"> 2322 <div class="mx-team-row"> 2323 <img src="/images/basketball/teams/107.webp" 2324 alt="Antibes" class="mx-team-logo" loading="lazy" 2325 onerror="this.onerror=null; this.src='/images/placeholder-team.svg';"> 2326 <span class="mx-team-name">Antibes</span> 2327 <span class="mx-score "> 2328 </span> 2329 </div> 2330 <div class="mx-team-row"> 2331 <img src="/images/basketball/teams/15.webp" 2332 alt="Orleans" class="mx-team-logo" loading="lazy" 2333 onerror="this.onerror=null; this.src='/images/placeholder-team.svg';"> 2334 <span class="mx-team-name">Orleans</span> 2335 <span class="mx-score "> 2336 </span> 2337 </div> 2338 </a> 2339 </div> 2340 2341 <div class="mx-right "> 2342 <a href="/antibes-vs-orleans-id335901" class="mx-action-btn preview-btn">Xem trước</a> 2343 </div> 2344 </div> 2345 </div> 2346 </div> 2347 <div class="lg-section" data-search="1. Liga Czech Republic"> 2348 <div class="lg-header"> 2349 <div class="lg-header-left"> 2350 <button type="button" class="lg-fav-btn" aria-label="Pin league"> 2351 <svg class="icon"><use href="#icon-star"/></svg> 2352 </button> 2353 <span class="lg-country-name">Czech Republic:</span> 2354 <img src="/images/basketball/leagues/228.webp" 2355 alt="1. Liga" class="lg-logo" loading="lazy" 2356 onerror="if(!this.dataset.fallback){this.src='/images/placeholder-league.svg';this.dataset.fallback='true';}"> 2357 <span class="lg-name">1. Liga</span> 2358 </div> 2359 <div class="lg-header-right"> 2360 <button type="button" class="lg-collapse-btn" onclick="toggleLeague(this)" aria-label="Toggle"> 2361 <svg class="icon icon-collapse"><use href="#icon-chevron-up"/></svg> 2362 </button> 2363 </div> 2364 </div> 2365 2366 <div class="lg-matches"> 2367 <div class="mx-row " data-search="1. Liga Czech Republic Basketbal Olomouc Vysoka"> 2368 <div class="mx-left"> 2369 <button type="button" class="mx-fav-btn favorite-btn" 2370 data-match-id="335871" 2371 data-auth="false" 2372 onclick="event.preventDefault(); event.stopPropagation(); handleFavoriteClick(335871, this);" 2373 aria-label="Thêm vào yêu thích"> 2374 <svg class="icon icon-fav"><use href="#icon-star"/></svg> 2375 </button> 2376 <div class="mx-status"> 2377 <span class="mx-time">00:00</span> 2378 </div> 2379 </div> 2380 2381 <div class="mx-center"> 2382 <a href="/basketbal-olomouc-vs-vysoka-id335871" class="mx-teams-link"> 2383 <div class="mx-team-row"> 2384 <img src="/images/basketball/teams/2601.webp" 2385 alt="Basketbal Olomouc" class="mx-team-logo" loading="lazy" 2386 onerror="this.onerror=null; this.src='/images/placeholder-team.svg';">
2387 <span class="mx-team-name">Basketbal Olomouc</span> 2388 <span class="mx-score "> 2389 </span> 2390 </div> 2391 <div class="mx-team-row"> 2392 <img src="/images/basketball/teams/2631.webp" 2393 alt="Vysoka" class="mx-team-logo" loading="lazy" 2394 onerror="this.onerror=null; this.src='/images/placeholder-team.svg';"> 2395 <span class="mx-team-name">Vysoka</span> 2396 <span class="mx-score "> 2397 </span> 2398 </div> 2399 </a> 2400 </div> 2401 2402 <div class="mx-right "> 2403 <a href="/basketbal-olomouc-vs-vysoka-id335871" class="mx-action-btn preview-btn">Xem trước</a> 2404 </div> 2405 </div> 2406 <div class="mx-row " data-search="1. Liga Czech Republic Sokol Prazsky Litomerice"> 2407 <div class="mx-left"> 2408 <button type="button" class="mx-fav-btn favorite-btn" 2409 data-match-id="335878" 2410 data-auth="false" 2411 onclick="event.preventDefault(); event.stopPropagation(); handleFavoriteClick(335878, this);" 2412 aria-label="Thêm vào yêu thích"> 2413 <svg class="icon icon-fav"><use href="#icon-star"/></svg> 2414 </button> 2415 <div class="mx-status"> 2416 <span class="mx-time">00:30</span> 2417 </div> 2418 </div> 2419 2420 <div class="mx-center"> 2421 <a href="/sokol-prazsky-vs-litomerice-id335878" class="mx-teams-link"> 2422 <div class="mx-team-row"> 2423 <img src="/images/basketball/teams/2624.webp" 2424 alt="Sokol Prazsky" class="mx-team-logo" loading="lazy" 2425 onerror="this.onerror=null; this.src='/images/placeholder-team.svg';"> 2426 <span class="mx-team-name">Sokol Prazsky</span> 2427 <span class="mx-score "> 2428 </span> 2429 </div> 2430 <div class="mx-team-row"> 2431 <img src="/images/basketball/teams/2612.webp" 2432 alt="Litomerice" class="mx-team-logo" loading="lazy" 2433 onerror="this.onerror=null; this.src='/images/placeholder-team.svg';"> 2434 <span class="mx-team-name">Litomerice</span> 2435 <span class="mx-score "> 2436 </span> 2437 </div> 2438 </a> 2439 </div> 2440 2441 <div class="mx-right "> 2442 <a href="/sokol-prazsky-vs-litomerice-id335878" class="mx-action-btn preview-btn">Xem trước</a> 2443 </div> 2444 </div> 2445 <div class="mx-row " data-search="1. Liga Czech Republic Slavia Prague Tygri Liberecko"> 2446 <div class="mx-left"> 2447 <button type="button" class="mx-fav-btn favorite-btn" 2448 data-match-id="335879" 2449 data-auth="false" 2450 onclick="event.preventDefault(); event.stopPropagation(); handleFavoriteClick(335879, this);" 2451 aria-label="Thêm vào yêu thích"> 2452 <svg class="icon icon-fav"><use href="#icon-star"/></svg> 2453 </button> 2454 <div class="mx-status">
2455 <span class="mx-time">00:30</span> 2456 </div> 2457 </div> 2458 2459 <div class="mx-center"> 2460 <a href="/slavia-prague-tygri-vs-liberecko-id335879" class="mx-teams-link"> 2461 <div class="mx-team-row"> 2462 <img src="https://media.api-sports.io/basketball/teams/7898.png" 2463 alt="Slavia Prague Tygri" class="mx-team-logo" loading="lazy" 2464 onerror="this.onerror=null; this.src='/images/placeholder-team.svg';"> 2465 <span class="mx-team-name">Slavia Prague Tygri</span> 2466 <span class="mx-score "> 2467 </span> 2468 </div> 2469 <div class="mx-team-row"> 2470 <img src="/images/basketball/teams/2614.webp" 2471 alt="Liberecko" class="mx-team-logo" loading="lazy" 2472 onerror="this.onerror=null; this.src='/images/placeholder-team.svg';"> 2473 <span class="mx-team-name">Liberecko</span> 2474 <span class="mx-score "> 2475 </span> 2476 </div> 2477 </a> 2478 </div> 2479 2480 <div class="mx-right "> 2481 <a href="/slavia-prague-tygri-vs-liberecko-id335879" class="mx-action-btn preview-btn">Xem trước</a> 2482 </div> 2483 </div> 2484 <div class="mx-row " data-search="1. Liga Czech Republic CZ.ACADEMY Valecnici Decin"> 2485 <div class="mx-left"> 2486 <button type="button" class="mx-fav-btn favorite-btn" 2487 data-match-id="335880" 2488 data-auth="false" 2489 onclick="event.preventDefault(); event.stopPropagation(); handleFavoriteClick(335880, this);" 2490 aria-label="Thêm vào yêu thích"> 2491 <svg class="icon icon-fav"><use href="#icon-star"/></svg> 2492 </button> 2493 <div class="mx-status"> 2494 <span class="mx-time">00:30</span> 2495 </div> 2496 </div> 2497 2498 <div class="mx-center"> 2499 <a href="/czacademy-vs-valecnici-decin-id335880" class="mx-teams-link"> 2500 <div class="mx-team-row"> 2501 <img src="/images/basketball/teams/6485.webp" 2502 alt="CZ.ACADEMY" class="mx-team-logo" loading="lazy" 2503 onerror="this.onerror=null; this.src='/images/placeholder-team.svg';"> 2504 <span class="mx-team-name">CZ.ACADEMY</span> 2505 <span class="mx-score "> 2506 </span> 2507 </div> 2508 <div class="mx-team-row"> 2509 <img src="/images/basketball/teams/7453.webp" 2510 alt="Valecnici Decin" class="mx-team-logo" loading="lazy" 2511 onerror="this.onerror=null; this.src='/images/placeholder-team.svg';"> 2512 <span class="mx-team-name">Valecnici Decin</span> 2513 <span class="mx-score "> 2514 </span> 2515 </div> 2516 </a> 2517 </div> 2518 2519 <div class="mx-right "> 2520 <a href="/czacademy-vs-valecnici-decin-id335880" class="mx-action-btn preview-btn">Xem trước</a> 2521 </div> 2522 </div> 2523 <div class="mx-row " data-search="1. Liga Czech Republic Pardubice 2 Novy Jicin"> 2524 <div class="mx-left"> 2525 <button type="button" class="mx-fav-btn favorite-btn" 2526 data-match-id="335882" 2527 data-auth="false" 2528 onclick="event.preventDefault(); event.stopPropagation(); handleFavoriteClick(335882, this);" 2529 aria-label="Thêm vào yêu thích"> 2530 <svg class="icon icon-fav"><use href="#icon-star"/></svg> 2531 </button> 2532 <div class="mx-status">
2533 <span class="mx-time">01:00</span> 2534 </div> 2535 </div> 2536 2537 <div class="mx-center"> 2538 <a href="/pardubice-2-vs-novy-jicin-id335882" class="mx-teams-link"> 2539 <div class="mx-team-row"> 2540 <img src="/images/basketball/teams/3625.webp" 2541 alt="Pardubice 2" class="mx-team-logo" loading="lazy" 2542 onerror="this.onerror=null; this.src='/images/placeholder-team.svg';"> 2543 <span class="mx-team-name">Pardubice 2</span> 2544 <span class="mx-score "> 2545 </span> 2546 </div> 2547 <div class="mx-team-row"> 2548 <img src="/images/basketball/teams/2615.webp" 2549 alt="Novy Jicin" class="mx-team-logo" loading="lazy" 2550 onerror="this.onerror=null; this.src='/images/placeholder-team.svg';"> 2551 <span class="mx-team-name">Novy Jicin</span> 2552 <span class="mx-score "> 2553 </span> 2554 </div> 2555 </a> 2556 </div> 2557 2558 <div class="mx-right "> 2559 <a href="/pardubice-2-vs-novy-jicin-id335882" class="mx-action-btn preview-btn">Xem trước</a> 2560 </div> 2561 </div> 2562 </div> 2563 </div> 2564 <div class="lg-section" data-search="Basketligan Sweden"> 2565 <div class="lg-header"> 2566 <div class="lg-header-left"> 2567 <button type="button" class="lg-fav-btn" aria-label="Pin league"> 2568 <svg class="icon"><use href="#icon-star"/></svg> 2569 </button> 2570 <span class="lg-country-name">Sweden:</span> 2571 <img src="/images/basketball/leagues/93.webp" 2572 alt="Basketligan" class="lg-logo" loading="lazy" 2573 onerror="if(!this.dataset.fallback){this.src='/images/placeholder-league.svg';this.dataset.fallback='true';}"> 2574 <span class="lg-name">Basketligan</span> 2575 </div> 2576 <div class="lg-header-right"> 2577 <button type="button" class="lg-collapse-btn" onclick="toggleLeague(this)" aria-label="Toggle"> 2578 <svg class="icon icon-collapse"><use href="#icon-chevron-up"/></svg> 2579 </button> 2580 </div> 2581 </div> 2582 2583 <div class="lg-matches"> 2584 <div class="mx-row " data-search="Basketligan Sweden Hogsbo Nassjo"> 2585 <div class="mx-left"> 2586 <button type="button" class="mx-fav-btn favorite-btn" 2587 data-match-id="335875" 2588 data-auth="false" 2589 onclick="event.preventDefault(); event.stopPropagation(); handleFavoriteClick(335875, this);" 2590 aria-label="Thêm vào yêu thích"> 2591 <svg class="icon icon-fav"><use href="#icon-star"/></svg> 2592 </button> 2593 <div class="mx-status"> 2594 <span class="mx-time">00:04</span> 2595 </div> 2596 </div> 2597 2598 <div class="mx-center"> 2599 <a href="/hogsbo-vs-nassjo-id335875" class="mx-teams-link"> 2600 <div class="mx-team-row"> 2601 <img src="/images/basketball/teams/1222.webp" 2602 alt="Hogsbo" class="mx-team-logo" loading="lazy" 2603 onerror="this.onerror=null; this.src='/images/placeholder-team.svg';">
2604 <span class="mx-team-name">Hogsbo</span> 2605 <span class="mx-score "> 2606 </span> 2607 </div> 2608 <div class="mx-team-row"> 2609 <img src="/images/basketball/teams/1203.webp" 2610 alt="Nassjo" class="mx-team-logo" loading="lazy" 2611 onerror="this.onerror=null; this.src='/images/placeholder-team.svg';"> 2612 <span class="mx-team-name">Nassjo</span> 2613 <span class="mx-score "> 2614 </span> 2615 </div> 2616 </a> 2617 </div> 2618 2619 <div class="mx-right "> 2620 <a href="/hogsbo-vs-nassjo-id335875" class="mx-action-btn preview-btn">Xem trước</a> 2621 </div> 2622 </div> 2623 <div class="mx-row " data-search="Basketligan Sweden Sloga Uppsala Koping Stars"> 2624 <div class="mx-left"> 2625 <button type="button" class="mx-fav-btn favorite-btn" 2626 data-match-id="335876" 2627 data-auth="false" 2628 onclick="event.preventDefault(); event.stopPropagation(); handleFavoriteClick(335876, this);" 2629 aria-label="Thêm vào yêu thích"> 2630 <svg class="icon icon-fav"><use href="#icon-star"/></svg> 2631 </button> 2632 <div class="mx-status"> 2633 <span class="mx-time">00:04</span> 2634 </div> 2635 </div> 2636 2637 <div class="mx-center"> 2638 <a href="/sloga-uppsala-vs-koping-stars-id335876" class="mx-teams-link"> 2639 <div class="mx-team-row"> 2640 <img src="/images/basketball/teams/4933.webp" 2641 alt="Sloga Uppsala" class="mx-team-logo" loading="lazy" 2642 onerror="this.onerror=null; this.src='/images/placeholder-team.svg';"> 2643 <span class="mx-team-name">Sloga Uppsala</span> 2644 <span class="mx-score "> 2645 </span> 2646 </div> 2647 <div class="mx-team-row"> 2648 <img src="/images/basketball/teams/1202.webp" 2649 alt="Koping Stars" class="mx-team-logo" loading="lazy" 2650 onerror="this.onerror=null; this.src='/images/placeholder-team.svg';"> 2651 <span class="mx-team-name">Koping Stars</span> 2652 <span class="mx-score "> 2653 </span> 2654 </div> 2655 </a> 2656 </div> 2657 2658 <div class="mx-right "> 2659 <a href="/sloga-uppsala-vs-koping-stars-id335876" class="mx-action-btn preview-btn">Xem trước</a> 2660 </div> 2661 </div> 2662 <div class="mx-row " data-search="Basketligan Sweden Umea Jamtland"> 2663 <div class="mx-left"> 2664 <button type="button" class="mx-fav-btn favorite-btn" 2665 data-match-id="335877" 2666 data-auth="false" 2667 onclick="event.preventDefault(); event.stopPropagation(); handleFavoriteClick(335877, this);" 2668 aria-label="Thêm vào yêu thích"> 2669 <svg class="icon icon-fav"><use href="#icon-star"/></svg> 2670 </button> 2671 <div class="mx-status">
2672 <span class="mx-time">00:04</span> 2673 </div> 2674 </div> 2675 2676 <div class="mx-center"> 2677 <a href="/umea-vs-jamtland-id335877" class="mx-teams-link"> 2678 <div class="mx-team-row"> 2679 <img src="/images/basketball/teams/1206.webp" 2680 alt="Umea" class="mx-team-logo" loading="lazy" 2681 onerror="this.onerror=null; this.src='/images/placeholder-team.svg';"> 2682 <span class="mx-team-name">Umea</span> 2683 <span class="mx-score "> 2684 </span> 2685 </div> 2686 <div class="mx-team-row"> 2687 <img src="/images/basketball/teams/1201.webp" 2688 alt="Jamtland" class="mx-team-logo" loading="lazy" 2689 onerror="this.onerror=null; this.src='/images/placeholder-team.svg';"> 2690 <span class="mx-team-name">Jamtland</span> 2691 <span class="mx-score "> 2692 </span> 2693 </div> 2694 </a> 2695 </div> 2696 2697 <div class="mx-right "> 2698 <a href="/umea-vs-jamtland-id335877" class="mx-action-btn preview-btn">Xem trước</a> 2699 </div> 2700 </div> 2701 <div class="mx-row " data-search="Basketligan Sweden Boras BC Lulea"> 2702 <div class="mx-left"> 2703 <button type="button" class="mx-fav-btn favorite-btn" 2704 data-match-id="335897" 2705 data-auth="false" 2706 onclick="event.preventDefault(); event.stopPropagation(); handleFavoriteClick(335897, this);" 2707 aria-label="Thêm vào yêu thích"> 2708 <svg class="icon icon-fav"><use href="#icon-star"/></svg> 2709 </button> 2710 <div class="mx-status"> 2711 <span class="mx-time">01:04</span> 2712 </div> 2713 </div> 2714 2715 <div class="mx-center"> 2716 <a href="/boras-vs-bc-lulea-id335897" class="mx-teams-link"> 2717 <div class="mx-team-row"> 2718 <img src="/images/basketball/teams/1199.webp" 2719 alt="Boras" class="mx-team-logo" loading="lazy" 2720 onerror="this.onerror=null; this.src='/images/placeholder-team.svg';"> 2721 <span class="mx-team-name">Boras</span> 2722 <span class="mx-score "> 2723 </span> 2724 </div> 2725 <div class="mx-team-row"> 2726 <img src="/images/basketball/teams/1198.webp" 2727 alt="BC Lulea" class="mx-team-logo" loading="lazy" 2728 onerror="this.onerror=null; this.src='/images/placeholder-team.svg';"> 2729 <span class="mx-team-name">BC Lulea</span> 2730 <span class="mx-score "> 2731 </span> 2732 </div> 2733 </a> 2734 </div> 2735 2736 <div class="mx-right "> 2737 <a href="/boras-vs-bc-lulea-id335897" class="mx-action-btn preview-btn">Xem trước</a> 2738 </div> 2739 </div> 2740 </div> 2741 </div> 2742 <div class="lg-section" data-search="Superliga Women Austria"> 2743 <div class="lg-header"> 2744 <div class="lg-header-left"> 2745 <button type="button" class="lg-fav-btn" aria-label="Pin league"> 2746 <svg class="icon"><use href="#icon-star"/></svg> 2747 </button>
2748 <span class="lg-country-name">Austria:</span> 2749 <img src="/images/basketball/leagues/218.webp" 2750 alt="Superliga Women" class="lg-logo" loading="lazy" 2751 onerror="if(!this.dataset.fallback){this.src='/images/placeholder-league.svg';this.dataset.fallback='true';}"> 2752 <span class="lg-name">Superliga Women</span> 2753 </div> 2754 <div class="lg-header-right"> 2755 <button type="button" class="lg-collapse-btn" onclick="toggleLeague(this)" aria-label="Toggle"> 2756 <svg class="icon icon-collapse"><use href="#icon-chevron-up"/></svg> 2757 </button> 2758 </div> 2759 </div> 2760 2761 <div class="lg-matches"> 2762 <div class="mx-row " data-search="Superliga Women Austria UBI Graz W DBB LZ OO W"> 2763 <div class="mx-left"> 2764 <button type="button" class="mx-fav-btn favorite-btn" 2765 data-match-id="335873" 2766 data-auth="false" 2767 onclick="event.preventDefault(); event.stopPropagation(); handleFavoriteClick(335873, this);" 2768 aria-label="Thêm vào yêu thích"> 2769 <svg class="icon icon-fav"><use href="#icon-star"/></svg> 2770 </button> 2771 <div class="mx-status"> 2772 <span class="mx-time">00:00</span> 2773 </div> 2774 </div> 2775 2776 <div class="mx-center"> 2777 <a href="/ubi-graz-w-vs-dbb-lz-oo-w-id335873" class="mx-teams-link"> 2778 <div class="mx-team-row"> 2779 <img src="/images/basketball/teams/2964.webp" 2780 alt="UBI Graz W" class="mx-team-logo" loading="lazy" 2781 onerror="this.onerror=null; this.src='/images/placeholder-team.svg';"> 2782 <span class="mx-team-name">UBI Graz W</span> 2783 <span class="mx-score "> 2784 </span> 2785 </div> 2786 <div class="mx-team-row"> 2787 <img src="/images/basketball/teams/3554.webp" 2788 alt="DBB LZ OO W" class="mx-team-logo" loading="lazy" 2789 onerror="this.onerror=null; this.src='/images/placeholder-team.svg';"> 2790 <span class="mx-team-name">DBB LZ OO W</span> 2791 <span class="mx-score "> 2792 </span> 2793 </div> 2794 </a> 2795 </div> 2796 2797 <div class="mx-right "> 2798 <a href="/ubi-graz-w-vs-dbb-lz-oo-w-id335873" class="mx-action-btn preview-btn">Xem trước</a> 2799 </div> 2800 </div> 2801 <div class="mx-row " data-search="Superliga Women Austria Linz W Basket Flames W"> 2802 <div class="mx-left"> 2803 <button type="button" class="mx-fav-btn favorite-btn" 2804 data-match-id="335881" 2805 data-auth="false" 2806 onclick="event.preventDefault(); event.stopPropagation(); handleFavoriteClick(335881, this);" 2807 aria-label="Thêm vào yêu thích"> 2808 <svg class="icon icon-fav"><use href="#icon-star"/></svg> 2809 </button> 2810 <div class="mx-status"> 2811 <span class="mx-time">00:30</span> 2812 </div> 2813 </div> 2814 2815 <div class="mx-center"> 2816 <a href="/linz-w-vs-basket-flames-w-id335881" class="mx-teams-link"> 2817 <div class="mx-team-row"> 2818 <img src="https://media.api-sports.io/basketball/teams/7932.png" 2819 alt="Linz W" class="mx-team-logo" loading="lazy" 2820 onerror="this.onerror=null; this.src='/images/placeholder-team.svg';">
2821 <span class="mx-team-name">Linz W</span> 2822 <span class="mx-score "> 2823 </span> 2824 </div> 2825 <div class="mx-team-row"> 2826 <img src="/images/basketball/teams/2961.webp" 2827 alt="Basket Flames W" class="mx-team-logo" loading="lazy" 2828 onerror="this.onerror=null; this.src='/images/placeholder-team.svg';"> 2829 <span class="mx-team-name">Basket Flames W</span> 2830 <span class="mx-score "> 2831 </span> 2832 </div> 2833 </a> 2834 </div> 2835 2836 <div class="mx-right "> 2837 <a href="/linz-w-vs-basket-flames-w-id335881" class="mx-action-btn preview-btn">Xem trước</a> 2838 </div> 2839 </div> 2840 <div class="mx-row " data-search="Superliga Women Austria Vienna Timberwolves W UBSC-DBBC Graz W"> 2841 <div class="mx-left"> 2842 <button type="button" class="mx-fav-btn favorite-btn" 2843 data-match-id="335895" 2844 data-auth="false" 2845 onclick="event.preventDefault(); event.stopPropagation(); handleFavoriteClick(335895, this);" 2846 aria-label="Thêm vào yêu thích"> 2847 <svg class="icon icon-fav"><use href="#icon-star"/></svg> 2848 </button> 2849 <div class="mx-status"> 2850 <span class="mx-time">01:00</span> 2851 </div> 2852 </div> 2853 2854 <div class="mx-center"> 2855 <a href="/vienna-timberwolves-w-vs-ubsc-dbbc-graz-w-id335895" class="mx-teams-link"> 2856 <div class="mx-team-row"> 2857 <img src="/images/basketball/teams/2965.webp" 2858 alt="Vienna Timberwolves W" class="mx-team-logo" loading="lazy" 2859 onerror="this.onerror=null; this.src='/images/placeholder-team.svg';"> 2860 <span class="mx-team-name">Vienna Timberwolves W</span> 2861 <span class="mx-score "> 2862 </span> 2863 </div> 2864 <div class="mx-team-row"> 2865 <img src="/images/basketball/teams/3555.webp" 2866 alt="UBSC-DBBC Graz W" class="mx-team-logo" loading="lazy" 2867 onerror="this.onerror=null; this.src='/images/placeholder-team.svg';"> 2868 <span class="mx-team-name">UBSC-DBBC Graz W</span> 2869 <span class="mx-score "> 2870 </span> 2871 </div> 2872 </a> 2873 </div> 2874 2875 <div class="mx-right "> 2876 <a href="/vienna-timberwolves-w-vs-ubsc-dbbc-graz-w-id335895" class="mx-action-btn preview-btn">Xem trước</a> 2877 </div> 2878 </div> 2879 </div> 2880 </div> 2881 <div class="lg-section" data-search="Torneo Federal A Argentina"> 2882 <div class="lg-header"> 2883 <div class="lg-header-left"> 2884 <button type="button" class="lg-fav-btn" aria-label="Pin league"> 2885 <svg class="icon"><use href="#icon-star"/></svg> 2886 </button> 2887 <span class="lg-country-name">Argentina:</span> 2888 <img src="/images/football/leagues/134.webp" 2889 alt="Torneo Federal A" class="lg-logo" loading="lazy" 2890 onerror="if(!this.dataset.fallback){this.src='/images/placeholder-league.svg';this.dataset.fallback='true';}">
2891 <span class="lg-name">Torneo Federal A</span> 2892 </div> 2893 <div class="lg-header-right"> 2894 <button type="button" class="lg-collapse-btn" onclick="toggleLeague(this)" aria-label="Toggle"> 2895 <svg class="icon icon-collapse"><use href="#icon-chevron-up"/></svg> 2896 </button> 2897 </div> 2898 </div> 2899 2900 <div class="lg-matches"> 2901 <div class="mx-row is-live " data-search="Torneo Federal A Argentina San Martín Mendoza Argentino Monte Maíz"> 2902 <div class="mx-left"> 2903 <button type="button" class="mx-fav-btn favorite-btn" 2904 data-match-id="339455" 2905 data-auth="false" 2906 onclick="event.preventDefault(); event.stopPropagation(); handleFavoriteClick(339455, this);" 2907 aria-label="Thêm vào yêu thích"> 2908 <svg class="icon icon-fav"><use href="#icon-star"/></svg> 2909 </button> 2910 <div class="mx-status"> 2911 <span class="mx-status-badge live">2H</span> 2912 <span class="mx-minute">90<span class="minute-tick">'</span></span> 2913 </div> 2914 </div> 2915 2916 <div class="mx-center"> 2917 <a href="/san-martin-mendoza-vs-argentino-monte-maiz-id339455" class="mx-teams-link"> 2918 <div class="mx-team-row"> 2919 <img src="/images/football/teams/21042.webp" 2920 alt="San Martín Mendoza" class="mx-team-logo" loading="lazy" 2921 onerror="this.onerror=null; this.src='/images/placeholder-team.svg';"> 2922 <span class="mx-team-name">San Martín Mendoza</span> 2923 <span class="mx-score live"> 29240 </span> 2925 </div> 2926 <div class="mx-team-row"> 2927 <img src="/images/football/teams/18764.webp" 2928 alt="Argentino Monte Maíz" class="mx-team-logo" loading="lazy" 2929 onerror="this.onerror=null; this.src='/images/placeholder-team.svg';"> 2930 <span class="mx-team-name">Argentino Monte Maíz</span> 2931 <span class="mx-score live"> 29322 </span> 2933 </div> 2934 </a> 2935 </div> 2936 2937 <div class="mx-right action-column streamer-col"> 2938 <a href="/san-martin-mendoza-vs-argentino-monte-maiz-id339455" class="mx-action-btn live-btn"> 2939 <svg class="icon"><use href="#icon-live"/></svg> LIVE 2940 </a> 2941 </div> 2942 </div> 2943 <div class="mx-row is-live " data-search="Torneo Federal A Argentina Juventud Antoniana Huracan Las Heras"> 2944 <div class="mx-left"> 2945 <button type="button" class="mx-fav-btn favorite-btn" 2946 data-match-id="339454" 2947 data-auth="false" 2948 onclick="event.preventDefault(); event.stopPropagation(); handleFavoriteClick(339454, this);" 2949 aria-label="Thêm vào yêu thích"> 2950 <svg class="icon icon-fav"><use href="#icon-star"/></svg> 2951 </button> 2952 <div class="mx-status">
2953 <span class="mx-status-badge live">2H</span> 2954 <span class="mx-minute">58<span class="minute-tick">'</span></span> 2955 </div> 2956 </div> 2957 2958 <div class="mx-center"> 2959 <a href="/juventud-antoniana-vs-huracan-las-heras-id339454" class="mx-teams-link"> 2960 <div class="mx-team-row"> 2961 <img src="/images/football/teams/1961.webp" 2962 alt="Juventud Antoniana" class="mx-team-logo" loading="lazy" 2963 onerror="this.onerror=null; this.src='/images/placeholder-team.svg';"> 2964 <span class="mx-team-name">Juventud Antoniana</span> 2965 <span class="mx-score live"> 29661 </span> 2967 </div> 2968 <div class="mx-team-row"> 2969 <img src="/images/football/teams/2428.webp" 2970 alt="Huracan Las Heras" class="mx-team-logo" loading="lazy" 2971 onerror="this.onerror=null; this.src='/images/placeholder-team.svg';"> 2972 <span class="mx-team-name">Huracan Las Heras</span> 2973 <span class="mx-score live"> 29740 </span> 2975 </div> 2976 </a> 2977 </div> 2978 2979 <div class="mx-right action-column streamer-col"> 2980 <a href="/juventud-antoniana-vs-huracan-las-heras-id339454" class="mx-action-btn live-btn"> 2981 <svg class="icon"><use href="#icon-live"/></svg> LIVE 2982 </a> 2983 </div> 2984 </div> 2985 </div> 2986 </div> 2987 <div class="lg-section" data-search="National League - National New-Zealand"> 2988 <div class="lg-header"> 2989 <div class="lg-header-left"> 2990 <button type="button" class="lg-fav-btn" aria-label="Pin league"> 2991 <svg class="icon"><use href="#icon-star"/></svg> 2992 </button> 2993 <span class="lg-country-name">New-Zealand:</span> 2994 <img src="/images/football/leagues/955.webp" 2995 alt="National League - National" class="lg-logo" loading="lazy" 2996 onerror="if(!this.dataset.fallback){this.src='/images/placeholder-league.svg';this.dataset.fallback='true';}"> 2997 <span class="lg-name">National League - National</span> 2998 </div> 2999 <div class="lg-header-right"> 3000 <button type="button" class="lg-collapse-btn" onclick="toggleLeague(this)" aria-label="Toggle"> 3001 <svg class="icon icon-collapse"><use href="#icon-chevron-up"/></svg> 3002 </button> 3003 </div> 3004 </div> 3005 3006 <div class="lg-matches"> 3007 <div class="mx-row is-live " data-search="National League - National New-Zealand Wellington Phoenix II Birkenhead United"> 3008 <div class="mx-left"> 3009 <button type="button" class="mx-fav-btn favorite-btn" 3010 data-match-id="336726" 3011 data-auth="false" 3012 onclick="event.preventDefault(); event.stopPropagation(); handleFavoriteClick(336726, this);" 3013 aria-label="Thêm vào yêu thích"> 3014 <svg class="icon icon-fav"><use href="#icon-star"/></svg> 3015 </button> 3016 <div class="mx-status"> 3017 <span class="mx-status-badge live">HT</span>
3018 <span class="mx-minute">45<span class="minute-tick">'</span></span> 3019 </div> 3020 </div> 3021 3022 <div class="mx-center"> 3023 <a href="/wellington-phoenix-ii-vs-birkenhead-united-id336726" class="mx-teams-link"> 3024 <div class="mx-team-row"> 3025 <img src="/images/football/teams/2535.webp" 3026 alt="Wellington Phoenix II" class="mx-team-logo" loading="lazy" 3027 onerror="this.onerror=null; this.src='/images/placeholder-team.svg';"> 3028 <span class="mx-team-name">Wellington Phoenix II</span> 3029 <span class="mx-score live"> 30300 </span> 3031 </div> 3032 <div class="mx-team-row"> 3033 <img src="/images/football/teams/20650.webp" 3034 alt="Birkenhead United" class="mx-team-logo" loading="lazy" 3035 onerror="this.onerror=null; this.src='/images/placeholder-team.svg';"> 3036 <span class="mx-team-name">Birkenhead United</span> 3037 <span class="mx-score live"> 30380 </span> 3039 </div> 3040 </a> 3041 </div> 3042 3043 <div class="mx-right action-column streamer-col"> 3044 <a href="/wellington-phoenix-ii-vs-birkenhead-united-id336726" class="mx-action-btn live-btn"> 3045 <svg class="icon"><use href="#icon-live"/></svg> LIVE 3046 </a> 3047 </div> 3048 </div> 3049 <div class="mx-row is-live " data-search="National League - National New-Zealand Auckland City Wellington Olympic"> 3050 <div class="mx-left"> 3051 <button type="button" class="mx-fav-btn favorite-btn" 3052 data-match-id="336730" 3053 data-auth="false" 3054 onclick="event.preventDefault(); event.stopPropagation(); handleFavoriteClick(336730, this);" 3055 aria-label="Thêm vào yêu thích"> 3056 <svg class="icon icon-fav"><use href="#icon-star"/></svg> 3057 </button> 3058 <div class="mx-status"> 3059 <span class="mx-status-badge live">1H</span> 3060 <span class="mx-minute">21<span class="minute-tick">'</span></span> 3061 </div> 3062 </div> 3063 3064 <div class="mx-center"> 3065 <a href="/auckland-city-vs-wellington-olympic-id336730" class="mx-teams-link"> 3066 <div class="mx-team-row"> 3067 <img src="/images/football/teams/2537.webp" 3068 alt="Auckland City" class="mx-team-logo" loading="lazy" 3069 onerror="this.onerror=null; this.src='/images/placeholder-team.svg';"> 3070 <span class="mx-team-name">Auckland City</span> 3071 <span class="mx-score live"> 30720 </span> 3073 </div> 3074 <div class="mx-team-row"> 3075 <img src="/images/football/teams/20646.webp" 3076 alt="Wellington Olympic" class="mx-team-logo" loading="lazy" 3077 onerror="this.onerror=null; this.src='/images/placeholder-team.svg';">
3078 <span class="mx-team-name">Wellington Olympic</span> 3079 <span class="mx-score live"> 30801 </span> 3081 </div> 3082 </a> 3083 </div> 3084 3085 <div class="mx-right action-column streamer-col"> 3086 <a href="/auckland-city-vs-wellington-olympic-id336730" class="mx-action-btn live-btn"> 3087 <svg class="icon"><use href="#icon-live"/></svg> LIVE 3088 </a> 3089 </div> 3090 </div> 3091 </div> 3092 </div> 3093 <div class="lg-section" data-search="Premier League Botswana"> 3094 <div class="lg-header"> 3095 <div class="lg-header-left"> 3096 <button type="button" class="lg-fav-btn" aria-label="Pin league"> 3097 <svg class="icon"><use href="#icon-star"/></svg> 3098 </button> 3099 <span class="lg-country-name">Botswana:</span> 3100 <img src="/images/football/leagues/412.webp" 3101 alt="Premier League" class="lg-logo" loading="lazy" 3102 onerror="if(!this.dataset.fallback){this.src='/images/placeholder-league.svg';this.dataset.fallback='true';}"> 3103 <span class="lg-name">Premier League</span> 3104 </div> 3105 <div class="lg-header-right"> 3106 <button type="button" class="lg-collapse-btn" onclick="toggleLeague(this)" aria-label="Toggle"> 3107 <svg class="icon icon-collapse"><use href="#icon-chevron-up"/></svg> 3108 </button> 3109 </div> 3110 </div> 3111 3112 <div class="lg-matches"> 3113 <div class="mx-row " data-search="Premier League Botswana Gaborone United Morupule Wanderers"> 3114 <div class="mx-left"> 3115 <button type="button" class="mx-fav-btn favorite-btn" 3116 data-match-id="337678" 3117 data-auth="false" 3118 onclick="event.preventDefault(); event.stopPropagation(); handleFavoriteClick(337678, this);" 3119 aria-label="Thêm vào yêu thích"> 3120 <svg class="icon icon-fav"><use href="#icon-star"/></svg> 3121 </button> 3122 <div class="mx-status"> 3123 <span class="mx-time">00:00</span> 3124 </div> 3125 </div> 3126 3127 <div class="mx-center"> 3128 <a href="/gaborone-united-vs-morupule-wanderers-id337678" class="mx-teams-link"> 3129 <div class="mx-team-row"> 3130 <img src="/images/football/teams/5421.webp" 3131 alt="Gaborone United" class="mx-team-logo" loading="lazy" 3132 onerror="this.onerror=null; this.src='/images/placeholder-team.svg';"> 3133 <span class="mx-team-name">Gaborone United</span> 3134 <span class="mx-score "> 3135 </span> 3136 </div> 3137 <div class="mx-team-row"> 3138 <img src="/images/football/teams/6386.webp" 3139 alt="Morupule Wanderers" class="mx-team-logo" loading="lazy" 3140 onerror="this.onerror=null; this.src='/images/placeholder-team.svg';"> 3141 <span class="mx-team-name">Morupule Wanderers</span> 3142 <span class="mx-score "> 3143 </span> 3144 </div> 3145 </a> 3146 </div> 3147 3148 <div class="mx-right "> 3149 <a href="/gaborone-united-vs-morupule-wanderers-id337678" class="mx-action-btn preview-btn">Xem trước</a> 3150 </div> 3151 </div> 3152 <div class="mx-row " data-search="Premier League Botswana Tonota Sua Flamingoes"> 3153 <div class="mx-left"> 3154 <button type="button" class="mx-fav-btn favorite-btn" 3155 data-match-id="339161" 3156 data-auth="false" 3157 onclick="event.preventDefault(); event.stopPropagation(); handleFavoriteClick(339161, this);" 3158 aria-label="Thêm vào yêu thích"> 3159 <svg class="icon icon-fav"><use href="#icon-star"/></svg> 3160 </button> 3161 <div class="mx-status">
3162 <span class="mx-time">00:00</span> 3163 </div> 3164 </div> 3165 3166 <div class="mx-center"> 3167 <a href="/tonota-vs-sua-flamingoes-id339161" class="mx-teams-link"> 3168 <div class="mx-team-row"> 3169 <img src="https://media.api-sports.io/football/teams/28296.png" 3170 alt="Tonota" class="mx-team-logo" loading="lazy" 3171 onerror="this.onerror=null; this.src='/images/placeholder-team.svg';"> 3172 <span class="mx-team-name">Tonota</span> 3173 <span class="mx-score "> 3174 </span> 3175 </div> 3176 <div class="mx-team-row"> 3177 <img src="/images/football/teams/18122.webp" 3178 alt="Sua Flamingoes" class="mx-team-logo" loading="lazy" 3179 onerror="this.onerror=null; this.src='/images/placeholder-team.svg';"> 3180 <span class="mx-team-name">Sua Flamingoes</span> 3181 <span class="mx-score "> 3182 </span> 3183 </div> 3184 </a> 3185 </div> 3186 3187 <div class="mx-right "> 3188 <a href="/tonota-vs-sua-flamingoes-id339161" class="mx-action-btn preview-btn">Xem trước</a> 3189 </div> 3190 </div> 3191 </div> 3192 </div> 3193 <div class="lg-section" data-search="Ligue 2 Women France"> 3194 <div class="lg-header"> 3195 <div class="lg-header-left"> 3196 <button type="button" class="lg-fav-btn" aria-label="Pin league"> 3197 <svg class="icon"><use href="#icon-star"/></svg> 3198 </button> 3199 <span class="lg-country-name">France:</span> 3200 <img src="/images/basketball/leagues/232.webp" 3201 alt="Ligue 2 Women" class="lg-logo" loading="lazy" 3202 onerror="if(!this.dataset.fallback){this.src='/images/placeholder-league.svg';this.dataset.fallback='true';}"> 3203 <span class="lg-name">Ligue 2 Women</span> 3204 </div> 3205 <div class="lg-header-right"> 3206 <button type="button" class="lg-collapse-btn" onclick="toggleLeague(this)" aria-label="Toggle"> 3207 <svg class="icon icon-collapse"><use href="#icon-chevron-up"/></svg> 3208 </button> 3209 </div> 3210 </div> 3211 3212 <div class="lg-matches"> 3213 <div class="mx-row " data-search="Ligue 2 Women France Feytiat W Montbrison W"> 3214 <div class="mx-left"> 3215 <button type="button" class="mx-fav-btn favorite-btn" 3216 data-match-id="335892" 3217 data-auth="false" 3218 onclick="event.preventDefault(); event.stopPropagation(); handleFavoriteClick(335892, this);" 3219 aria-label="Thêm vào yêu thích"> 3220 <svg class="icon icon-fav"><use href="#icon-star"/></svg> 3221 </button> 3222 <div class="mx-status"> 3223 <span class="mx-time">01:00</span> 3224 </div> 3225 </div> 3226 3227 <div class="mx-center"> 3228 <a href="/feytiat-w-vs-montbrison-w-id335892" class="mx-teams-link"> 3229 <div class="mx-team-row"> 3230 <img src="/images/basketball/teams/4930.webp" 3231 alt="Feytiat W" class="mx-team-logo" loading="lazy" 3232 onerror="this.onerror=null; this.src='/images/placeholder-team.svg';">
3233 <span class="mx-team-name">Feytiat W</span> 3234 <span class="mx-score "> 3235 </span> 3236 </div> 3237 <div class="mx-team-row"> 3238 <img src="/images/basketball/teams/3660.webp" 3239 alt="Montbrison W" class="mx-team-logo" loading="lazy" 3240 onerror="this.onerror=null; this.src='/images/placeholder-team.svg';"> 3241 <span class="mx-team-name">Montbrison W</span> 3242 <span class="mx-score "> 3243 </span> 3244 </div> 3245 </a> 3246 </div> 3247 3248 <div class="mx-right "> 3249 <a href="/feytiat-w-vs-montbrison-w-id335892" class="mx-action-btn preview-btn">Xem trước</a> 3250 </div> 3251 </div> 3252 <div class="mx-row " data-search="Ligue 2 Women France Porte du Hainaut W Centre Federal BB W"> 3253 <div class="mx-left"> 3254 <button type="button" class="mx-fav-btn favorite-btn" 3255 data-match-id="335893" 3256 data-auth="false" 3257 onclick="event.preventDefault(); event.stopPropagation(); handleFavoriteClick(335893, this);" 3258 aria-label="Thêm vào yêu thích"> 3259 <svg class="icon icon-fav"><use href="#icon-star"/></svg> 3260 </button> 3261 <div class="mx-status"> 3262 <span class="mx-time">01:00</span> 3263 </div> 3264 </div> 3265 3266 <div class="mx-center"> 3267 <a href="/porte-du-hainaut-w-vs-centre-federal-bb-w-id335893" class="mx-teams-link"> 3268 <div class="mx-team-row"> 3269 <img src="https://media.api-sports.io/basketball/teams/7917.png" 3270 alt="Porte du Hainaut W" class="mx-team-logo" loading="lazy" 3271 onerror="this.onerror=null; this.src='/images/placeholder-team.svg';"> 3272 <span class="mx-team-name">Porte du Hainaut W</span> 3273 <span class="mx-score "> 3274 </span> 3275 </div> 3276 <div class="mx-team-row"> 3277 <img src="/images/basketball/teams/3665.webp" 3278 alt="Centre Federal BB W" class="mx-team-logo" loading="lazy" 3279 onerror="this.onerror=null; this.src='/images/placeholder-team.svg';"> 3280 <span class="mx-team-name">Centre Federal BB W</span> 3281 <span class="mx-score "> 3282 </span> 3283 </div> 3284 </a> 3285 </div> 3286 3287 <div class="mx-right "> 3288 <a href="/porte-du-hainaut-w-vs-centre-federal-bb-w-id335893" class="mx-action-btn preview-btn">Xem trước</a> 3289 </div> 3290 </div> 3291 </div> 3292 </div> 3293 <div class="lg-section" data-search="Liga Profesional Argentina Argentina"> 3294 <div class="lg-header"> 3295 <div class="lg-header-left"> 3296 <button type="button" class="lg-fav-btn" aria-label="Pin league"> 3297 <svg class="icon"><use href="#icon-star"/></svg> 3298 </button>
3299 <span class="lg-country-name">Argentina:</span> 3300 <img src="/images/football/leagues/128.webp" 3301 alt="Liga Profesional Argentina" class="lg-logo" loading="lazy" 3302 onerror="if(!this.dataset.fallback){this.src='/images/placeholder-league.svg';this.dataset.fallback='true';}"> 3303 <span class="lg-name">Liga Profesional Argentina</span> 3304 </div> 3305 <div class="lg-header-right"> 3306 <button type="button" class="lg-collapse-btn" onclick="toggleLeague(this)" aria-label="Toggle"> 3307 <svg class="icon icon-collapse"><use href="#icon-chevron-up"/></svg> 3308 </button> 3309 </div> 3310 </div> 3311 3312 <div class="lg-matches"> 3313 <div class="mx-row is-live " data-search="Liga Profesional Argentina Argentina Union Santa Fe Defensa Y Justicia Groot"> 3314 <div class="mx-left"> 3315 <button type="button" class="mx-fav-btn favorite-btn" 3316 data-match-id="339522" 3317 data-auth="false" 3318 onclick="event.preventDefault(); event.stopPropagation(); handleFavoriteClick(339522, this);" 3319 aria-label="Thêm vào yêu thích"> 3320 <svg class="icon icon-fav"><use href="#icon-star"/></svg> 3321 </button> 3322 <div class="mx-status"> 3323 <span class="mx-status-badge live">2H</span> 3324 <span class="mx-minute">77<span class="minute-tick">'</span></span> 3325 </div> 3326 </div> 3327 3328 <div class="mx-center"> 3329 <a href="/union-santa-fe-vs-defensa-y-justicia-id339522/groot" class="mx-teams-link"> 3330 <div class="mx-team-row"> 3331 <img src="/images/football/teams/441.webp" 3332 alt="Union Santa Fe" class="mx-team-logo" loading="lazy" 3333 onerror="this.onerror=null; this.src='/images/placeholder-team.svg';"> 3334 <span class="mx-team-name">Union Santa Fe</span> 3335 <span class="mx-score live"> 33360 </span> 3337 </div> 3338 <div class="mx-team-row"> 3339 <img src="/images/football/teams/442.webp" 3340 alt="Defensa Y Justicia" class="mx-team-logo" loading="lazy" 3341 onerror="this.onerror=null; this.src='/images/placeholder-team.svg';"> 3342 <span class="mx-team-name">Defensa Y Justicia</span> 3343 <span class="mx-score live"> 33442 </span> 3345 </div> 3346 </a> 3347 </div> 3348 3349 <div class="mx-right action-column streamer-col"> 3350 <a href="/union-santa-fe-vs-defensa-y-justicia-id339522/groot" class="mx-action-btn live-btn"> 3351 <svg class="icon"><use href="#icon-live"/></svg> LIVE 3352 </a> 3353 <a href="/streamer/94/groot" 3354 class="mx-streamer-badge mx-streamer-badge-live mx-streamer-pill" 3355 title="BLV GROOT"> 3356 <svg class="icon icon-mic"><use href="#icon-mic"/></svg> 3357 <span class="mx-streamer-name">BLV GROOT</span> 3358 </a> 3359 </div> 3360 </div> 3361 </div> 3362 </div> 3363 <div class="lg-section" data-search="Primera División Peru"> 3364 <div class="lg-header"> 3365 <div class="lg-header-left"> 3366 <button type="button" class="lg-fav-btn" aria-label="Pin league"> 3367 <svg class="icon"><use href="#icon-star"/></svg> 3368 </button>
3369 <span class="lg-country-name">Peru:</span> 3370 <img src="/images/football/leagues/281.webp" 3371 alt="Primera División" class="lg-logo" loading="lazy" 3372 onerror="if(!this.dataset.fallback){this.src='/images/placeholder-league.svg';this.dataset.fallback='true';}"> 3373 <span class="lg-name">Primera División</span> 3374 </div> 3375 <div class="lg-header-right"> 3376 <button type="button" class="lg-collapse-btn" onclick="toggleLeague(this)" aria-label="Toggle"> 3377 <svg class="icon icon-collapse"><use href="#icon-chevron-up"/></svg> 3378 </button> 3379 </div> 3380 </div> 3381 3382 <div class="lg-matches"> 3383 <div class="mx-row is-live " data-search="Primera División Peru Deportivo Garcilaso Sport Huancayo"> 3384 <div class="mx-left"> 3385 <button type="button" class="mx-fav-btn favorite-btn" 3386 data-match-id="336718" 3387 data-auth="false" 3388 onclick="event.preventDefault(); event.stopPropagation(); handleFavoriteClick(336718, this);" 3389 aria-label="Thêm vào yêu thích"> 3390 <svg class="icon icon-fav"><use href="#icon-star"/></svg> 3391 </button> 3392 <div class="mx-status"> 3393 <span class="mx-status-badge live">2H</span> 3394 <span class="mx-minute">62<span class="minute-tick">'</span></span> 3395 </div> 3396 </div> 3397 3398 <div class="mx-center"> 3399 <a href="/deportivo-garcilaso-vs-sport-huancayo-id336718" class="mx-teams-link"> 3400 <div class="mx-team-row"> 3401 <img src="/images/football/teams/20960.webp" 3402 alt="Deportivo Garcilaso" class="mx-team-logo" loading="lazy" 3403 onerror="this.onerror=null; this.src='/images/placeholder-team.svg';"> 3404 <span class="mx-team-name">Deportivo Garcilaso</span> 3405 <span class="mx-score live"> 34060 </span> 3407 </div> 3408 <div class="mx-team-row"> 3409 <img src="/images/football/teams/2555.webp" 3410 alt="Sport Huancayo" class="mx-team-logo" loading="lazy" 3411 onerror="this.onerror=null; this.src='/images/placeholder-team.svg';"> 3412 <span class="mx-team-name">Sport Huancayo</span> 3413 <span class="mx-score live"> 34141 </span> 3415 </div> 3416 </a> 3417 </div> 3418 3419 <div class="mx-right action-column streamer-col"> 3420 <a href="/deportivo-garcilaso-vs-sport-huancayo-id336718" class="mx-action-btn live-btn"> 3421 <svg class="icon"><use href="#icon-live"/></svg> LIVE 3422 </a> 3423 </div> 3424 </div> 3425 </div> 3426 </div> 3427 <div class="lg-section" data-search="Liga MX Mexico"> 3428 <div class="lg-header"> 3429 <div class="lg-header-left"> 3430 <button type="button" class="lg-fav-btn" aria-label="Pin league"> 3431 <svg class="icon"><use href="#icon-star"/></svg> 3432 </button> 3433 <span class="lg-country-name">Mexico:</span> 3434 <img src="/images/football/leagues/262.webp" 3435 alt="Liga MX" class="lg-logo" loading="lazy" 3436 onerror="if(!this.dataset.fallback){this.src='/images/placeholder-league.svg';this.dataset.fallback='true';}">
3437 <span class="lg-name">Liga MX</span> 3438 </div> 3439 <div class="lg-header-right"> 3440 <button type="button" class="lg-collapse-btn" onclick="toggleLeague(this)" aria-label="Toggle"> 3441 <svg class="icon icon-collapse"><use href="#icon-chevron-up"/></svg> 3442 </button> 3443 </div> 3444 </div> 3445 3446 <div class="lg-matches"> 3447 <div class="mx-row is-live " data-search="Liga MX Mexico Puebla Leon Phan Pepsi Hawkeye"> 3448 <div class="mx-left"> 3449 <button type="button" class="mx-fav-btn favorite-btn" 3450 data-match-id="336719" 3451 data-auth="false" 3452 onclick="event.preventDefault(); event.stopPropagation(); handleFavoriteClick(336719, this);" 3453 aria-label="Thêm vào yêu thích"> 3454 <svg class="icon icon-fav"><use href="#icon-star"/></svg> 3455 </button> 3456 <div class="mx-status"> 3457 <span class="mx-status-badge live">2H</span> 3458 <span class="mx-minute">64<span class="minute-tick">'</span></span> 3459 </div> 3460 </div> 3461 3462 <div class="mx-center"> 3463 <a href="/puebla-vs-leon-id336719/phan-pepsi" class="mx-teams-link"> 3464 <div class="mx-team-row"> 3465 <img src="/images/football/teams/2291.webp" 3466 alt="Puebla" class="mx-team-logo" loading="lazy" 3467 onerror="this.onerror=null; this.src='/images/placeholder-team.svg';"> 3468 <span class="mx-team-name">Puebla</span> 3469 <span class="mx-score live"> 34700 </span> 3471 </div> 3472 <div class="mx-team-row"> 3473 <img src="/images/football/teams/2289.webp" 3474 alt="Leon" class="mx-team-logo" loading="lazy" 3475 onerror="this.onerror=null; this.src='/images/placeholder-team.svg';"> 3476 <span class="mx-team-name">Leon</span> 3477 <span class="mx-score live"> 34781 </span> 3479 </div> 3480 </a> 3481 </div> 3482 3483 <div class="mx-right action-column streamer-col"> 3484 <a href="/puebla-vs-leon-id336719/phan-pepsi" class="mx-action-btn live-btn"> 3485 <svg class="icon"><use href="#icon-live"/></svg> LIVE 3486 </a> 3487 <div class="dropdown mx-streamer-dropdown"> 3488 <button type="button" 3489 class="mx-streamer-toggle mx-streamer-toggle-live" 3490 data-bs-toggle="dropdown" 3491 data-bs-display="static" 3492 aria-expanded="false" 3493 aria-label="Streamer"> 3494 <svg class="icon icon-mic"><use href="#icon-mic"/></svg> 3495 <svg class="icon icon-caret"><use href="#icon-chevron-down"/></svg> 3496 </button> 3497 <ul class="dropdown-menu dropdown-menu-end mx-streamer-menu mx-streamer-menu-live"> 3498 <li> 3499 <a class="dropdown-item mx-streamer-menu
3499-item" href="/streamer/12/phan-pepsi" title="BLV PHAN PEPSI"> 3500 <svg class="icon icon-mic"><use href="#icon-mic"/></svg> 3501 <span>BLV PHAN PEPSI</span> 3502 </a> 3503 </li> 3504 <li> 3505 <a class="dropdown-item mx-streamer-menu-item" href="/streamer/79/hawkeye" title="BLV HAWKEYE"> 3506 <svg class="icon icon-mic"><use href="#icon-mic"/></svg> 3507 <span>BLV HAWKEYE</span> 3508 </a> 3509 </li> 3510 </ul> 3511 </div> 3512 </div> 3513 </div> 3514 </div> 3515 </div> 3516 <div class="lg-section" data-search="Liga de Expansión MX Mexico"> 3517 <div class="lg-header"> 3518 <div class="lg-header-left"> 3519 <button type="button" class="lg-fav-btn" aria-label="Pin league"> 3520 <svg class="icon"><use href="#icon-star"/></svg> 3521 </button> 3522 <span class="lg-country-name">Mexico:</span> 3523 <img src="/images/football/leagues/263.webp" 3524 alt="Liga de Expansión MX" class="lg-logo" loading="lazy" 3525 onerror="if(!this.dataset.fallback){this.src='/images/placeholder-league.svg';this.dataset.fallback='true';}"> 3526 <span class="lg-name">Liga de Expansión MX</span> 3527 </div> 3528 <div class="lg-header-right"> 3529 <button type="button" class="lg-collapse-btn" onclick="toggleLeague(this)" aria-label="Toggle"> 3530 <svg class="icon icon-collapse"><use href="#icon-chevron-up"/></svg> 3531 </button> 3532 </div> 3533 </div> 3534 3535 <div class="lg-matches"> 3536 <div class="mx-row is-live " data-search="Liga de Expansión MX Mexico Tepatitlán Monarcas"> 3537 <div class="mx-left"> 3538 <button type="button" class="mx-fav-btn favorite-btn" 3539 data-match-id="336721" 3540 data-auth="false" 3541 onclick="event.preventDefault(); event.stopPropagation(); handleFavoriteClick(336721, this);" 3542 aria-label="Thêm vào yêu thích"> 3543 <svg class="icon icon-fav"><use href="#icon-star"/></svg> 3544 </button> 3545 <div class="mx-status"> 3546 <span class="mx-status-badge live">2H</span> 3547 <span class="mx-minute">55<span class="minute-tick">'</span></span> 3548 </div> 3549 </div> 3550 3551 <div class="mx-center"> 3552 <a href="/tepatitlan-vs-monarcas-id336721" class="mx-teams-link"> 3553 <div class="mx-team-row"> 3554 <img src="/images/football/teams/14279.webp" 3555 alt="Tepatitlán" class="mx-team-logo" loading="lazy" 3556 onerror="this.onerror=null; this.src='/images/placeholder-team.svg';"> 3557 <span class="mx-team-name">Tepatitlán</span> 3558 <span class="mx-score live"> 35591 </span> 3560 </div> 3561 <div class="mx-team-row"> 3562 <img src="/images/football/teams/2284.webp" 3563 alt="Monarcas" class="mx-team-logo" loading="lazy" 3564 onerror="this.onerror=null; this.src='/images/placeholder-team.svg';">
3565 <span class="mx-team-name">Monarcas</span> 3566 <span class="mx-score live"> 35670 </span> 3568 </div> 3569 </a> 3570 </div> 3571 3572 <div class="mx-right action-column streamer-col"> 3573 <a href="/tepatitlan-vs-monarcas-id336721" class="mx-action-btn live-btn"> 3574 <svg class="icon"><use href="#icon-live"/></svg> LIVE 3575 </a> 3576 </div> 3577 </div> 3578 </div> 3579 </div> 3580 <div class="lg-section" data-search="Primera A Colombia"> 3581 <div class="lg-header"> 3582 <div class="lg-header-left"> 3583 <button type="button" class="lg-fav-btn" aria-label="Pin league"> 3584 <svg class="icon"><use href="#icon-star"/></svg> 3585 </button> 3586 <span class="lg-country-name">Colombia:</span> 3587 <img src="/images/football/leagues/239.webp" 3588 alt="Primera A" class="lg-logo" loading="lazy" 3589 onerror="if(!this.dataset.fallback){this.src='/images/placeholder-league.svg';this.dataset.fallback='true';}"> 3590 <span class="lg-name">Primera A</span> 3591 </div> 3592 <div class="lg-header-right"> 3593 <button type="button" class="lg-collapse-btn" onclick="toggleLeague(this)" aria-label="Toggle"> 3594 <svg class="icon icon-collapse"><use href="#icon-chevron-up"/></svg> 3595 </button> 3596 </div> 3597 </div> 3598 3599 <div class="lg-matches"> 3600 <div class="mx-row is-live " data-search="Primera A Colombia Once Caldas Llaneros"> 3601 <div class="mx-left"> 3602 <button type="button" class="mx-fav-btn favorite-btn" 3603 data-match-id="338177" 3604 data-auth="false" 3605 onclick="event.preventDefault(); event.stopPropagation(); handleFavoriteClick(338177, this);" 3606 aria-label="Thêm vào yêu thích"> 3607 <svg class="icon icon-fav"><use href="#icon-star"/></svg> 3608 </button> 3609 <div class="mx-status"> 3610 <span class="mx-status-badge live">2H</span> 3611 <span class="mx-minute">54<span class="minute-tick">'</span></span> 3612 </div> 3613 </div> 3614 3615 <div class="mx-center"> 3616 <a href="/once-caldas-vs-llaneros-id338177" class="mx-teams-link"> 3617 <div class="mx-team-row"> 3618 <img src="/images/football/teams/1136.webp" 3619 alt="Once Caldas" class="mx-team-logo" loading="lazy" 3620 onerror="this.onerror=null; this.src='/images/placeholder-team.svg';"> 3621 <span class="mx-team-name">Once Caldas</span> 3622 <span class="mx-score live"> 36230 </span> 3624 </div> 3625 <div class="mx-team-row"> 3626 <img src="/images/football/teams/1464.webp" 3627 alt="Llaneros" class="mx-team-logo" loading="lazy" 3628 onerror="this.onerror=null; this.src='/images/placeholder-team.svg';"> 3629 <span class="mx-team-name">Llaneros</span> 3630 <span class="mx-score live"> 36310 </span> 3632 </div> 3633 </a> 3634 </div> 3635 3636 <div class="mx-right action-column streamer-col"> 3637 <a href="/once-caldas-vs-llaneros-id338177" class="mx-action-btn live-btn"> 3638 <svg class="icon"><use href="#icon-live"/></svg> LIVE 3639 </a> 3640 </div> 3641 </div> 3642 </div> 3643 </div> 3644 <div class="lg-section" data-search="Friendlies Women World"> 3645 <div class="lg-header"> 3646 <div class="lg-header-left"> 3647 <button type="button" class="lg-fav-btn" aria-label="Pin league"> 3648 <svg class="icon"><use href="#icon-star"/></svg> 3649 </button>
3650 <span class="lg-country-name">World:</span> 3651 <img src="/images/football/leagues/666.webp" 3652 alt="Friendlies Women" class="lg-logo" loading="lazy" 3653 onerror="if(!this.dataset.fallback){this.src='/images/placeholder-league.svg';this.dataset.fallback='true';}"> 3654 <span class="lg-name">Friendlies Women</span> 3655 </div> 3656 <div class="lg-header-right"> 3657 <button type="button" class="lg-collapse-btn" onclick="toggleLeague(this)" aria-label="Toggle"> 3658 <svg class="icon icon-collapse"><use href="#icon-chevron-up"/></svg> 3659 </button> 3660 </div> 3661 </div> 3662 3663 <div class="lg-matches"> 3664 <div class="mx-row is-live " data-search="Friendlies Women World Paraguay W El Salvador W"> 3665 <div class="mx-left"> 3666 <button type="button" class="mx-fav-btn favorite-btn" 3667 data-match-id="336727" 3668 data-auth="false" 3669 onclick="event.preventDefault(); event.stopPropagation(); handleFavoriteClick(336727, this);" 3670 aria-label="Thêm vào yêu thích"> 3671 <svg class="icon icon-fav"><use href="#icon-star"/></svg> 3672 </button> 3673 <div class="mx-status"> 3674 <span class="mx-status-badge live">1H</span> 3675 <span class="mx-minute">45<span class="minute-tick">'</span></span> 3676 </div> 3677 </div> 3678 3679 <div class="mx-center"> 3680 <a href="/paraguay-w-vs-el-salvador-w-id336727" class="mx-teams-link"> 3681 <div class="mx-team-row"> 3682 <img src="/images/football/teams/16941.webp" 3683 alt="Paraguay W" class="mx-team-logo" loading="lazy" 3684 onerror="this.onerror=null; this.src='/images/placeholder-team.svg';"> 3685 <span class="mx-team-name">Paraguay W</span> 3686 <span class="mx-score live"> 36871 </span> 3688 </div> 3689 <div class="mx-team-row"> 3690 <img src="/images/football/teams/16927.webp" 3691 alt="El Salvador W" class="mx-team-logo" loading="lazy" 3692 onerror="this.onerror=null; this.src='/images/placeholder-team.svg';"> 3693 <span class="mx-team-name">El Salvador W</span> 3694 <span class="mx-score live"> 36952 </span> 3696 </div> 3697 </a> 3698 </div> 3699 3700 <div class="mx-right action-column streamer-col"> 3701 <a href="/paraguay-w-vs-el-salvador-w-id336727" class="mx-action-btn live-btn"> 3702 <svg class="icon"><use href="#icon-live"/></svg> LIVE 3703 </a> 3704 </div> 3705 </div> 3706 </div> 3707 </div> 3708 <div class="lg-section" data-search="Primera Premier Mexico"> 3709 <div class="lg-header"> 3710 <div class="lg-header-left"> 3711 <button type="button" class="lg-fav-btn" aria-label="Pin league"> 3712 <svg class="icon"><use href="#icon-star"/></svg> 3713 </button> 3714 <span class="lg-country-name">Mexico:</span> 3715 <img src="https://media.api-sports.io/football/leagues/1242.png" 3716 alt="Primera Premier" class="lg-logo" loading="lazy" 3717 onerror="if(!this.dataset.fallback){this.src='/images/placeholder-league.svg';this.dataset.fallback='true';}">
3718 <span class="lg-name">Primera Premier</span> 3719 </div> 3720 <div class="lg-header-right"> 3721 <button type="button" class="lg-collapse-btn" onclick="toggleLeague(this)" aria-label="Toggle"> 3722 <svg class="icon icon-collapse"><use href="#icon-chevron-up"/></svg> 3723 </button> 3724 </div> 3725 </div> 3726 3727 <div class="lg-matches"> 3728 <div class="mx-row is-live " data-search="Primera Premier Mexico Reboceros La Piedad Los Cabos United"> 3729 <div class="mx-left"> 3730 <button type="button" class="mx-fav-btn favorite-btn" 3731 data-match-id="336722" 3732 data-auth="false" 3733 onclick="event.preventDefault(); event.stopPropagation(); handleFavoriteClick(336722, this);" 3734 aria-label="Thêm vào yêu thích"> 3735 <svg class="icon icon-fav"><use href="#icon-star"/></svg> 3736 </button> 3737 <div class="mx-status"> 3738 <span class="mx-status-badge live">1H</span> 3739 <span class="mx-minute">16<span class="minute-tick">'</span></span> 3740 </div> 3741 </div> 3742 3743 <div class="mx-center"> 3744 <a href="/reboceros-la-piedad-vs-los-cabos-united-id336722" class="mx-teams-link"> 3745 <div class="mx-team-row"> 3746 <img src="/images/football/teams/15937.webp" 3747 alt="Reboceros La Piedad" class="mx-team-logo" loading="lazy" 3748 onerror="this.onerror=null; this.src='/images/placeholder-team.svg';"> 3749 <span class="mx-team-name">Reboceros La Piedad</span> 3750 <span class="mx-score live"> 37510 </span> 3752 </div> 3753 <div class="mx-team-row"> 3754 <img src="/images/football/teams/19908.webp" 3755 alt="Los Cabos United" class="mx-team-logo" loading="lazy" 3756 onerror="this.onerror=null; this.src='/images/placeholder-team.svg';"> 3757 <span class="mx-team-name">Los Cabos United</span> 3758 <span class="mx-score live"> 37590 </span> 3760 </div> 3761 </a> 3762 </div> 3763 3764 <div class="mx-right action-column streamer-col"> 3765 <a href="/reboceros-la-piedad-vs-los-cabos-united-id336722" class="mx-action-btn live-btn"> 3766 <svg class="icon"><use href="#icon-live"/></svg> LIVE 3767 </a> 3768 </div> 3769 </div> 3770 </div> 3771 </div> 3772 <div class="lg-section" data-search="Second League - Group 3 Russia"> 3773 <div class="lg-header"> 3774 <div class="lg-header-left"> 3775 <button type="button" class="lg-fav-btn" aria-label="Pin league"> 3776 <svg class="icon"><use href="#icon-star"/></svg> 3777 </button> 3778 <span class="lg-country-name">Russia:</span> 3779 <img src="/images/football/leagues/650.webp" 3780 alt="Second League - Group 3" class="lg-logo" loading="lazy" 3781 onerror="if(!this.dataset.fallback){this.src='/images/placeholder-league.svg';this.dataset.fallback='true';}"> 3782 <span class="lg-name">Second League - Group 3</span> 3783 </div> 3784 <div class="lg-header-right"> 3785 <button type="button" class="lg-collapse-btn" onclick="toggleLeague(this)" aria-label="Toggle"> 3786 <svg class="icon icon-collapse"><use href="#icon-chevron-up"/></svg> 3787 </button> 3788 </div> 3789 </div> 3790 3791 <div class="lg-matches"> 3792 <div class="mx-row is-live " data-search="Second League - Group 3 Russia SKA Khabarovsk II Kvant"> 3793 <div class="mx-left"> 3794 <button type="button" class="mx-fav-btn favorite-btn" 3795 data-match-id="336728" 3796 data-auth="false" 3797 onclick="event.preventDefault(); event.stopPropagation(); handleFavoriteClick(336728, this);" 3798 aria-label="Thêm vào yêu thích"> 3799 <svg class="icon icon-fav"><use href="#icon-star"/></svg> 3800 </button> 3801 <div class="mx-status">
3802 <span class="mx-status-badge live">1H</span> 3803 <span class="mx-minute">18<span class="minute-tick">'</span></span> 3804 </div> 3805 </div> 3806 3807 <div class="mx-center"> 3808 <a href="/ska-khabarovsk-ii-vs-kvant-id336728" class="mx-teams-link"> 3809 <div class="mx-team-row"> 3810 <img src="/images/football/teams/17721.webp" 3811 alt="SKA Khabarovsk II" class="mx-team-logo" loading="lazy" 3812 onerror="this.onerror=null; this.src='/images/placeholder-team.svg';"> 3813 <span class="mx-team-name">SKA Khabarovsk II</span> 3814 <span class="mx-score live"> 38150 </span> 3816 </div> 3817 <div class="mx-team-row"> 3818 <img src="/images/football/teams/6807.webp" 3819 alt="Kvant" class="mx-team-logo" loading="lazy" 3820 onerror="this.onerror=null; this.src='/images/placeholder-team.svg';"> 3821 <span class="mx-team-name">Kvant</span> 3822 <span class="mx-score live"> 38230 </span> 3824 </div> 3825 </a> 3826 </div> 3827 3828 <div class="mx-right action-column streamer-col"> 3829 <a href="/ska-khabarovsk-ii-vs-kvant-id336728" class="mx-action-btn live-btn"> 3830 <svg class="icon"><use href="#icon-live"/></svg> LIVE 3831 </a> 3832 </div> 3833 </div> 3834 </div> 3835 </div> 3836 <div class="lg-section" data-search="Liga de Ascenso Costa-Rica"> 3837 <div class="lg-header"> 3838 <div class="lg-header-left"> 3839 <button type="button" class="lg-fav-btn" aria-label="Pin league"> 3840 <svg class="icon"><use href="#icon-star"/></svg> 3841 </button> 3842 <span class="lg-country-name">Costa-Rica:</span> 3843 <img src="/images/football/leagues/163.webp" 3844 alt="Liga de Ascenso" class="lg-logo" loading="lazy" 3845 onerror="if(!this.dataset.fallback){this.src='/images/placeholder-league.svg';this.dataset.fallback='true';}"> 3846 <span class="lg-name">Liga de Ascenso</span> 3847 </div> 3848 <div class="lg-header-right"> 3849 <button type="button" class="lg-collapse-btn" onclick="toggleLeague(this)" aria-label="Toggle"> 3850 <svg class="icon icon-collapse"><use href="#icon-chevron-up"/></svg> 3851 </button> 3852 </div> 3853 </div> 3854 3855 <div class="lg-matches"> 3856 <div class="mx-row is-live " data-search="Liga de Ascenso Costa-Rica AD Carmelita Guadalupe FC"> 3857 <div class="mx-left"> 3858 <button type="button" class="mx-fav-btn favorite-btn" 3859 data-match-id="339529" 3860 data-auth="false" 3861 onclick="event.preventDefault(); event.stopPropagation(); handleFavoriteClick(339529, this);" 3862 aria-label="Thêm vào yêu thích"> 3863 <svg class="icon icon-fav"><use href="#icon-star"/></svg> 3864 </button> 3865 <div class="mx-status"> 3866 <span class="mx-status-badge live">1H</span> 3867 <span class="mx-minute">21<span class="minute-tick">'</span></span> 3868 </div> 3869 </div> 3870 3871 <div class="mx-center"> 3872 <a href="/ad-carmelita-vs-guadalupe-fc-id339529" class="mx-teams-link"> 3873 <div class="mx-team-row"> 3874 <img src="/images/football/teams/814.webp" 3875 alt="AD Carmelita" class="mx-team-logo" loading="lazy" 3876 onerror="this.onerror=null; this.src='/images/placeholder-team.svg';">
3877 <span class="mx-team-name">AD Carmelita</span> 3878 <span class="mx-score live"> 38790 </span> 3880 </div> 3881 <div class="mx-team-row"> 3882 <img src="/images/football/teams/821.webp" 3883 alt="Guadalupe FC" class="mx-team-logo" loading="lazy" 3884 onerror="this.onerror=null; this.src='/images/placeholder-team.svg';"> 3885 <span class="mx-team-name">Guadalupe FC</span> 3886 <span class="mx-score live"> 38871 </span> 3888 </div> 3889 </a> 3890 </div> 3891 3892 <div class="mx-right action-column streamer-col"> 3893 <a href="/ad-carmelita-vs-guadalupe-fc-id339529" class="mx-action-btn live-btn"> 3894 <svg class="icon"><use href="#icon-live"/></svg> LIVE 3895 </a> 3896 </div> 3897 </div> 3898 </div> 3899 </div> 3900 <div class="lg-section" data-search="Super Cup Austria"> 3901 <div class="lg-header"> 3902 <div class="lg-header-left"> 3903 <button type="button" class="lg-fav-btn" aria-label="Pin league"> 3904 <svg class="icon"><use href="#icon-star"/></svg> 3905 </button> 3906 <span class="lg-country-name">Austria:</span> 3907 <img src="https://media.api-sports.io/basketball/leagues/190.png" 3908 alt="Super Cup" class="lg-logo" loading="lazy" 3909 onerror="if(!this.dataset.fallback){this.src='/images/placeholder-league.svg';this.dataset.fallback='true';}"> 3910 <span class="lg-name">Super Cup</span> 3911 </div> 3912 <div class="lg-header-right"> 3913 <button type="button" class="lg-collapse-btn" onclick="toggleLeague(this)" aria-label="Toggle"> 3914 <svg class="icon icon-collapse"><use href="#icon-chevron-up"/></svg> 3915 </button> 3916 </div> 3917 </div> 3918 3919 <div class="lg-matches"> 3920 <div class="mx-row " data-search="Super Cup Austria St. Polten Traiskirchen Lions"> 3921 <div class="mx-left"> 3922 <button type="button" class="mx-fav-btn favorite-btn" 3923 data-match-id="335872" 3924 data-auth="false" 3925 onclick="event.preventDefault(); event.stopPropagation(); handleFavoriteClick(335872, this);" 3926 aria-label="Thêm vào yêu thích"> 3927 <svg class="icon icon-fav"><use href="#icon-star"/></svg> 3928 </button> 3929 <div class="mx-status"> 3930 <span class="mx-time">00:00</span> 3931 </div> 3932 </div> 3933 3934 <div class="mx-center"> 3935 <a href="/st-polten-vs-traiskirchen-lions-id335872" class="mx-teams-link"> 3936 <div class="mx-team-row"> 3937 <img src="/images/basketball/teams/1406.webp" 3938 alt="St. Polten" class="mx-team-logo" loading="lazy" 3939 onerror="this.onerror=null; this.src='/images/placeholder-team.svg';"> 3940 <span class="mx-team-name">St. Polten</span> 3941 <span class="mx-score "> 3942 </span> 3943 </div> 3944 <div class="mx-team-row"> 3945 <img src="/images/basketball/teams/2520.webp" 3946 alt="Traiskirchen Lions" class="mx-team-logo" loading="lazy" 3947 onerror="this.onerror=null; this.src='/images/placeholder-team.svg';">
3948 <span class="mx-team-name">Traiskirchen Lions</span> 3949 <span class="mx-score "> 3950 </span> 3951 </div> 3952 </a> 3953 </div> 3954 3955 <div class="mx-right "> 3956 <a href="/st-polten-vs-traiskirchen-lions-id335872" class="mx-action-btn preview-btn">Xem trước</a> 3957 </div> 3958 </div> 3959 </div> 3960 </div> 3961 <div class="lg-section" data-search="Liga Nova KBM Slovenia"> 3962 <div class="lg-header"> 3963 <div class="lg-header-left"> 3964 <button type="button" class="lg-fav-btn" aria-label="Pin league"> 3965 <svg class="icon"><use href="#icon-star"/></svg> 3966 </button> 3967 <span class="lg-country-name">Slovenia:</span> 3968 <img src="/images/basketball/leagues/89.webp" 3969 alt="Liga Nova KBM" class="lg-logo" loading="lazy" 3970 onerror="if(!this.dataset.fallback){this.src='/images/placeholder-league.svg';this.dataset.fallback='true';}"> 3971 <span class="lg-name">Liga Nova KBM</span> 3972 </div> 3973 <div class="lg-header-right"> 3974 <button type="button" class="lg-collapse-btn" onclick="toggleLeague(this)" aria-label="Toggle"> 3975 <svg class="icon icon-collapse"><use href="#icon-chevron-up"/></svg> 3976 </button> 3977 </div> 3978 </div> 3979 3980 <div class="lg-matches"> 3981 <div class="mx-row " data-search="Liga Nova KBM Slovenia Helios Domzale KK Triglav Kranj"> 3982 <div class="mx-left"> 3983 <button type="button" class="mx-fav-btn favorite-btn" 3984 data-match-id="335874" 3985 data-auth="false" 3986 onclick="event.preventDefault(); event.stopPropagation(); handleFavoriteClick(335874, this);" 3987 aria-label="Thêm vào yêu thích"> 3988 <svg class="icon icon-fav"><use href="#icon-star"/></svg> 3989 </button> 3990 <div class="mx-status"> 3991 <span class="mx-time">00:00</span> 3992 </div> 3993 </div> 3994 3995 <div class="mx-center"> 3996 <a href="/helios-domzale-vs-kk-triglav-kranj-id335874" class="mx-teams-link"> 3997 <div class="mx-team-row"> 3998 <img src="/images/basketball/teams/1093.webp" 3999 alt="Helios Domzale" class="mx-team-logo" loading="lazy" 4000 onerror="this.onerror=null; this.src='/images/placeholder-team.svg';"> 4001 <span class="mx-team-name">Helios Domzale</span> 4002 <span class="mx-score "> 4003 </span> 4004 </div> 4005 <div class="mx-team-row"> 4006 <img src="/images/basketball/teams/2261.webp" 4007 alt="KK Triglav Kranj" class="mx-team-logo" loading="lazy" 4008 onerror="this.onerror=null; this.src='/images/placeholder-team.svg';"> 4009 <span class="mx-team-name">KK Triglav Kranj</span> 4010 <span class="mx-score "> 4011 </span> 4012 </div> 4013 </a> 4014 </div> 4015 4016 <div class="mx-right "> 4017 <a href="/helios-domzale-vs-kk-triglav-kranj-id335874" class="mx-action-btn preview-btn">Xem trước</a> 4018 </div> 4019 </div> 4020 </div> 4021 </div> 4022 <div class="lg-section" data-search="Liga 3 Georgia"> 4023 <div class="lg-header"> 4024 <div class="lg-header-left"> 4025 <button type="button" class="lg-fav-btn" aria-label="Pin league"> 4026 <svg class="icon"><use href="#icon-star"/></svg> 4027 </button>
4028 <span class="lg-country-name">Georgia:</span> 4029 <img src="/images/football/leagues/1104.webp" 4030 alt="Liga 3" class="lg-logo" loading="lazy" 4031 onerror="if(!this.dataset.fallback){this.src='/images/placeholder-league.svg';this.dataset.fallback='true';}"> 4032 <span class="lg-name">Liga 3</span> 4033 </div> 4034 <div class="lg-header-right"> 4035 <button type="button" class="lg-collapse-btn" onclick="toggleLeague(this)" aria-label="Toggle"> 4036 <svg class="icon icon-collapse"><use href="#icon-chevron-up"/></svg> 4037 </button> 4038 </div> 4039 </div> 4040 4041 <div class="lg-matches"> 4042 <div class="mx-row " data-search="Liga 3 Georgia Varketili Dinamo Tbilisi II"> 4043 <div class="mx-left"> 4044 <button type="button" class="mx-fav-btn favorite-btn" 4045 data-match-id="336145" 4046 data-auth="false" 4047 onclick="event.preventDefault(); event.stopPropagation(); handleFavoriteClick(336145, this);" 4048 aria-label="Thêm vào yêu thích"> 4049 <svg class="icon icon-fav"><use href="#icon-star"/></svg> 4050 </button> 4051 <div class="mx-status"> 4052 <span class="mx-time">00:00</span> 4053 </div> 4054 </div> 4055 4056 <div class="mx-center"> 4057 <a href="/varketili-vs-dinamo-tbilisi-ii-id336145" class="mx-teams-link"> 4058 <div class="mx-team-row"> 4059 <img src="/images/football/teams/14866.webp" 4060 alt="Varketili" class="mx-team-logo" loading="lazy" 4061 onerror="this.onerror=null; this.src='/images/placeholder-team.svg';"> 4062 <span class="mx-team-name">Varketili</span> 4063 <span class="mx-score "> 4064 </span> 4065 </div> 4066 <div class="mx-team-row"> 4067 <img src="/images/football/teams/13865.webp" 4068 alt="Dinamo Tbilisi II" class="mx-team-logo" loading="lazy" 4069 onerror="this.onerror=null; this.src='/images/placeholder-team.svg';"> 4070 <span class="mx-team-name">Dinamo Tbilisi II</span> 4071 <span class="mx-score "> 4072 </span> 4073 </div> 4074 </a> 4075 </div> 4076 4077 <div class="mx-right "> 4078 <a href="/varketili-vs-dinamo-tbilisi-ii-id336145" class="mx-action-btn preview-btn">Xem trước</a> 4079 </div> 4080 </div> 4081 </div> 4082 </div> 4083 <div class="lg-section" data-search="Basketligan W Sweden"> 4084 <div class="lg-header"> 4085 <div class="lg-header-left"> 4086 <button type="button" class="lg-fav-btn" aria-label="Pin league"> 4087 <svg class="icon"><use href="#icon-star"/></svg> 4088 </button> 4089 <span class="lg-country-name">Sweden:</span> 4090 <img src="/images/basketball/leagues/97.webp" 4091 alt="Basketligan W" class="lg-logo" loading="lazy" 4092 onerror="if(!this.dataset.fallback){this.src='/images/placeholder-league.svg';this.dataset.fallback='true';}"> 4093 <span class="lg-name">Basketligan W</span> 4094 </div> 4095 <div class="lg-header-right"> 4096 <button type="button" class="lg-collapse-btn" onclick="toggleLeague(this)" aria-label="Toggle"> 4097 <svg class="icon icon-collapse"><use href="#icon-chevron-up"/></svg> 4098 </button> 4099 </div> 4100 </div> 4101 4102 <div class="lg-matches"> 4103 <div class="mx-row " data-search="Basketligan W Sweden Sodertalje W AIK Basket W"> 4104 <div class="mx-left"> 4105 <button type="button" class="mx-fav-btn favorite-btn" 4106 data-match-id="336349" 4107 data-auth="false" 4108 onclick="event.preventDefault(); event.stopPropagation(); handleFavoriteClick(336349, this);" 4109 aria-label="Thêm vào yêu thích"> 4110 <svg class="icon icon-fav"><use href="#icon-star"/></svg> 4111 </button> 4112 <div class="mx-status">
4113 <span class="mx-time">00:00</span> 4114 </div> 4115 </div> 4116 4117 <div class="mx-center"> 4118 <a href="/sodertalje-w-vs-aik-basket-w-id336349" class="mx-teams-link"> 4119 <div class="mx-team-row"> 4120 <img src="/images/basketball/teams/1213.webp" 4121 alt="Sodertalje W" class="mx-team-logo" loading="lazy" 4122 onerror="this.onerror=null; this.src='/images/placeholder-team.svg';"> 4123 <span class="mx-team-name">Sodertalje W</span> 4124 <span class="mx-score "> 4125 </span> 4126 </div> 4127 <div class="mx-team-row"> 4128 <img src="/images/basketball/teams/1174.webp" 4129 alt="AIK Basket W" class="mx-team-logo" loading="lazy" 4130 onerror="this.onerror=null; this.src='/images/placeholder-team.svg';"> 4131 <span class="mx-team-name">AIK Basket W</span> 4132 <span class="mx-score "> 4133 </span> 4134 </div> 4135 </a> 4136 </div> 4137 4138 <div class="mx-right "> 4139 <a href="/sodertalje-w-vs-aik-basket-w-id336349" class="mx-action-btn preview-btn">Xem trước</a> 4140 </div> 4141 </div> 4142 </div> 4143 </div> 4144 <div class="lg-section" data-search="Pro A Germany"> 4145 <div class="lg-header"> 4146 <div class="lg-header-left"> 4147 <button type="button" class="lg-fav-btn" aria-label="Pin league"> 4148 <svg class="icon"><use href="#icon-star"/></svg> 4149 </button> 4150 <span class="lg-country-name">Germany:</span> 4151 <img src="/images/basketball/leagues/42.webp" 4152 alt="Pro A" class="lg-logo" loading="lazy" 4153 onerror="if(!this.dataset.fallback){this.src='/images/placeholder-league.svg';this.dataset.fallback='true';}"> 4154 <span class="lg-name">Pro A</span> 4155 </div> 4156 <div class="lg-header-right"> 4157 <button type="button" class="lg-collapse-btn" onclick="toggleLeague(this)" aria-label="Toggle"> 4158 <svg class="icon icon-collapse"><use href="#icon-chevron-up"/></svg> 4159 </button> 4160 </div> 4161 </div> 4162 4163 <div class="lg-matches"> 4164 <div class="mx-row " data-search="Pro A Germany Crailsheim Merlins Giessen"> 4165 <div class="mx-left"> 4166 <button type="button" class="mx-fav-btn favorite-btn" 4167 data-match-id="335883" 4168 data-auth="false" 4169 onclick="event.preventDefault(); event.stopPropagation(); handleFavoriteClick(335883, this);" 4170 aria-label="Thêm vào yêu thích"> 4171 <svg class="icon icon-fav"><use href="#icon-star"/></svg> 4172 </button> 4173 <div class="mx-status"> 4174 <span class="mx-time">01:00</span> 4175 </div> 4176 </div> 4177 4178 <div class="mx-center"> 4179 <a href="/crailsheim-merlins-vs-giessen-id335883" class="mx-teams-link"> 4180 <div class="mx-team-row"> 4181 <img src="/images/basketball/teams/525.webp" 4182 alt="Crailsheim Merlins" class="mx-team-logo" loading="lazy" 4183 onerror="this.onerror=null; this.src='/images/placeholder-team.svg';">
4184 <span class="mx-team-name">Crailsheim Merlins</span> 4185 <span class="mx-score "> 4186 </span> 4187 </div> 4188 <div class="mx-team-row"> 4189 <img src="/images/basketball/teams/527.webp" 4190 alt="Giessen" class="mx-team-logo" loading="lazy" 4191 onerror="this.onerror=null; this.src='/images/placeholder-team.svg';"> 4192 <span class="mx-team-name">Giessen</span> 4193 <span class="mx-score "> 4194 </span> 4195 </div> 4196 </a> 4197 </div> 4198 4199 <div class="mx-right "> 4200 <a href="/crailsheim-merlins-vs-giessen-id335883" class="mx-action-btn preview-btn">Xem trước</a> 4201 </div> 4202 </div> 4203 </div> 4204 </div> 4205 <div class="lg-section" data-search="BBL Germany"> 4206 <div class="lg-header"> 4207 <div class="lg-header-left"> 4208 <button type="button" class="lg-fav-btn" aria-label="Pin league"> 4209 <svg class="icon"><use href="#icon-star"/></svg> 4210 </button> 4211 <span class="lg-country-name">Germany:</span> 4212 <img src="/images/basketball/leagues/40.webp" 4213 alt="BBL" class="lg-logo" loading="lazy" 4214 onerror="if(!this.dataset.fallback){this.src='/images/placeholder-league.svg';this.dataset.fallback='true';}"> 4215 <span class="lg-name">BBL</span> 4216 </div> 4217 <div class="lg-header-right"> 4218 <button type="button" class="lg-collapse-btn" onclick="toggleLeague(this)" aria-label="Toggle"> 4219 <svg class="icon icon-collapse"><use href="#icon-chevron-up"/></svg> 4220 </button> 4221 </div> 4222 </div> 4223 4224 <div class="lg-matches"> 4225 <div class="mx-row " data-search="BBL Germany Bonn Jena"> 4226 <div class="mx-left"> 4227 <button type="button" class="mx-fav-btn favorite-btn" 4228 data-match-id="335891" 4229 data-auth="false" 4230 onclick="event.preventDefault(); event.stopPropagation(); handleFavoriteClick(335891, this);" 4231 aria-label="Thêm vào yêu thích"> 4232 <svg class="icon icon-fav"><use href="#icon-star"/></svg> 4233 </button> 4234 <div class="mx-status"> 4235 <span class="mx-time">01:00</span> 4236 </div> 4237 </div> 4238 4239 <div class="mx-center"> 4240 <a href="/bonn-vs-jena-id335891" class="mx-teams-link"> 4241 <div class="mx-team-row"> 4242 <img src="/images/basketball/teams/524.webp" 4243 alt="Bonn" class="mx-team-logo" loading="lazy" 4244 onerror="this.onerror=null; this.src='/images/placeholder-team.svg';"> 4245 <span class="mx-team-name">Bonn</span> 4246 <span class="mx-score "> 4247 </span> 4248 </div> 4249 <div class="mx-team-row"> 4250 <img src="/images/basketball/teams/553.webp" 4251 alt="Jena" class="mx-team-logo" loading="lazy" 4252 onerror="this.onerror=null; this.src='/images/placeholder-team.svg';">
4253 <span class="mx-team-name">Jena</span> 4254 <span class="mx-score "> 4255 </span> 4256 </div> 4257 </a> 4258 </div> 4259 4260 <div class="mx-right "> 4261 <a href="/bonn-vs-jena-id335891" class="mx-action-btn preview-btn">Xem trước</a> 4262 </div> 4263 </div> 4264 </div> 4265 </div> 4266 <div class="lg-section" data-search="BNXT League Europe"> 4267 <div class="lg-header"> 4268 <div class="lg-header-left"> 4269 <button type="button" class="lg-fav-btn" aria-label="Pin league"> 4270 <svg class="icon"><use href="#icon-star"/></svg> 4271 </button> 4272 <span class="lg-country-name">Europe:</span> 4273 <img src="/images/basketball/leagues/368.webp" 4274 alt="BNXT League" class="lg-logo" loading="lazy" 4275 onerror="if(!this.dataset.fallback){this.src='/images/placeholder-league.svg';this.dataset.fallback='true';}"> 4276 <span class="lg-name">BNXT League</span> 4277 </div> 4278 <div class="lg-header-right"> 4279 <button type="button" class="lg-collapse-btn" onclick="toggleLeague(this)" aria-label="Toggle"> 4280 <svg class="icon icon-collapse"><use href="#icon-chevron-up"/></svg> 4281 </button> 4282 </div> 4283 </div> 4284 4285 <div class="lg-matches"> 4286 <div class="mx-row " data-search="BNXT League Europe Den Bosch Rotterdam"> 4287 <div class="mx-left"> 4288 <button type="button" class="mx-fav-btn favorite-btn" 4289 data-match-id="335894" 4290 data-auth="false" 4291 onclick="event.preventDefault(); event.stopPropagation(); handleFavoriteClick(335894, this);" 4292 aria-label="Thêm vào yêu thích"> 4293 <svg class="icon icon-fav"><use href="#icon-star"/></svg> 4294 </button> 4295 <div class="mx-status"> 4296 <span class="mx-time">01:00</span> 4297 </div> 4298 </div> 4299 4300 <div class="mx-center"> 4301 <a href="/den-bosch-vs-rotterdam-id335894" class="mx-teams-link"> 4302 <div class="mx-team-row"> 4303 <img src="/images/basketball/teams/846.webp" 4304 alt="Den Bosch" class="mx-team-logo" loading="lazy" 4305 onerror="this.onerror=null; this.src='/images/placeholder-team.svg';"> 4306 <span class="mx-team-name">Den Bosch</span> 4307 <span class="mx-score "> 4308 </span> 4309 </div> 4310 <div class="mx-team-row"> 4311 <img src="/images/basketball/teams/851.webp" 4312 alt="Rotterdam" class="mx-team-logo" loading="lazy" 4313 onerror="this.onerror=null; this.src='/images/placeholder-team.svg';"> 4314 <span class="mx-team-name">Rotterdam</span> 4315 <span class="mx-score "> 4316 </span> 4317 </div> 4318 </a> 4319 </div> 4320 4321 <div class="mx-right "> 4322 <a href="/den-bosch-vs-rotterdam-id335894" class="mx-action-btn preview-btn">Xem trước</a> 4323 </div> 4324 </div> 4325 </div> 4326 </div> 4327 <div class="lg-section" data-search="LNB France"> 4328 <div class="lg-header"> 4329 <div class="lg-header-left"> 4330 <button type="button" class="lg-fav-btn" aria-label="Pin league"> 4331 <svg class="icon"><use href="#icon-star"/></svg> 4332 </button>
4333 <span class="lg-country-name">France:</span> 4334 <img src="/images/basketball/leagues/2.webp" 4335 alt="LNB" class="lg-logo" loading="lazy" 4336 onerror="if(!this.dataset.fallback){this.src='/images/placeholder-league.svg';this.dataset.fallback='true';}"> 4337 <span class="lg-name">LNB</span> 4338 </div> 4339 <div class="lg-header-right"> 4340 <button type="button" class="lg-collapse-btn" onclick="toggleLeague(this)" aria-label="Toggle"> 4341 <svg class="icon icon-collapse"><use href="#icon-chevron-up"/></svg> 4342 </button> 4343 </div> 4344 </div> 4345 4346 <div class="lg-matches"> 4347 <div class="mx-row " data-search="LNB France Dijon Limoges"> 4348 <div class="mx-left"> 4349 <button type="button" class="mx-fav-btn favorite-btn" 4350 data-match-id="335896" 4351 data-auth="false" 4352 onclick="event.preventDefault(); event.stopPropagation(); handleFavoriteClick(335896, this);" 4353 aria-label="Thêm vào yêu thích"> 4354 <svg class="icon icon-fav"><use href="#icon-star"/></svg> 4355 </button> 4356 <div class="mx-status"> 4357 <span class="mx-time">01:00</span> 4358 </div> 4359 </div> 4360 4361 <div class="mx-center"> 4362 <a href="/dijon-vs-limoges-id335896" class="mx-teams-link"> 4363 <div class="mx-team-row"> 4364 <img src="/images/basketball/teams/10.webp" 4365 alt="Dijon" class="mx-team-logo" loading="lazy" 4366 onerror="this.onerror=null; this.src='/images/placeholder-team.svg';"> 4367 <span class="mx-team-name">Dijon</span> 4368 <span class="mx-score "> 4369 </span> 4370 </div> 4371 <div class="mx-team-row"> 4372 <img src="/images/basketball/teams/27.webp" 4373 alt="Limoges" class="mx-team-logo" loading="lazy" 4374 onerror="this.onerror=null; this.src='/images/placeholder-team.svg';"> 4375 <span class="mx-team-name">Limoges</span> 4376 <span class="mx-score "> 4377 </span> 4378 </div> 4379 </a> 4380 </div> 4381 4382 <div class="mx-right "> 4383 <a href="/dijon-vs-limoges-id335896" class="mx-action-btn preview-btn">Xem trước</a> 4384 </div> 4385 </div> 4386 </div> 4387 </div> 4388 <div class="lg-section" data-search="Zweite Liga Austria"> 4389 <div class="lg-header"> 4390 <div class="lg-header-left"> 4391 <button type="button" class="lg-fav-btn" aria-label="Pin league"> 4392 <svg class="icon"><use href="#icon-star"/></svg> 4393 </button> 4394 <span class="lg-country-name">Austria:</span> 4395 <img src="/images/basketball/leagues/7.webp" 4396 alt="Zweite Liga" class="lg-logo" loading="lazy" 4397 onerror="if(!this.dataset.fallback){this.src='/images/placeholder-league.svg';this.dataset.fallback='true';}"> 4398 <span class="lg-name">Zweite Liga</span> 4399 </div> 4400 <div class="lg-header-right"> 4401 <button type="button" class="lg-collapse-btn" onclick="toggleLeague(this)" aria-label="Toggle"> 4402 <svg class="icon icon-collapse"><use href="#icon-chevron-up"/></svg> 4403 </button> 4404 </div> 4405 </div> 4406 4407 <div class="lg-matches"> 4408 <div class="mx-row " data-search="Zweite Liga Austr
4408ia Radenthein Celovec"> 4409 <div class="mx-left"> 4410 <button type="button" class="mx-fav-btn favorite-btn" 4411 data-match-id="336350" 4412 data-auth="false" 4413 onclick="event.preventDefault(); event.stopPropagation(); handleFavoriteClick(336350, this);" 4414 aria-label="Thêm vào yêu thích"> 4415 <svg class="icon icon-fav"><use href="#icon-star"/></svg> 4416 </button> 4417 <div class="mx-status"> 4418 <span class="mx-time">01:00</span> 4419 </div> 4420 </div> 4421 4422 <div class="mx-center"> 4423 <a href="/radenthein-vs-celovec-id336350" class="mx-teams-link"> 4424 <div class="mx-team-row"> 4425 <img src="https://media.api-sports.io/basketball/teams/2530.png" 4426 alt="Radenthein" class="mx-team-logo" loading="lazy" 4427 onerror="this.onerror=null; this.src='/images/placeholder-team.svg';"> 4428 <span class="mx-team-name">Radenthein</span> 4429 <span class="mx-score "> 4430 </span> 4431 </div> 4432 <div class="mx-team-row"> 4433 <img src="/images/basketball/teams/90.webp" 4434 alt="Celovec" class="mx-team-logo" loading="lazy" 4435 onerror="this.onerror=null; this.src='/images/placeholder-team.svg';"> 4436 <span class="mx-team-name">Celovec</span> 4437 <span class="mx-score "> 4438 </span> 4439 </div> 4440 </a> 4441 </div> 4442 4443 <div class="mx-right "> 4444 <a href="/radenthein-vs-celovec-id336350" class="mx-action-btn preview-btn">Xem trước</a> 4445 </div> 4446 </div> 4447 </div> 4448 </div> 4449 <div class="lg-section" data-search="ABA League Europe"> 4450 <div class="lg-header"> 4451 <div class="lg-header-left"> 4452 <button type="button" class="lg-fav-btn" aria-label="Pin league"> 4453 <svg class="icon"><use href="#icon-star"/></svg> 4454 </button> 4455 <span class="lg-country-name">Europe:</span> 4456 <img src="/images/basketball/leagues/198.webp" 4457 alt="ABA League" class="lg-logo" loading="lazy" 4458 onerror="if(!this.dataset.fallback){this.src='/images/placeholder-league.svg';this.dataset.fallback='true';}"> 4459 <span class="lg-name">ABA League</span> 4460 </div> 4461 <div class="lg-header-right"> 4462 <button type="button" class="lg-collapse-btn" onclick="toggleLeague(this)" aria-label="Toggle"> 4463 <svg class="icon icon-collapse"><use href="#icon-chevron-up"/></svg> 4464 </button> 4465 </div> 4466 </div> 4467 4468 <div class="lg-matches"> 4469 <div class="mx-row " data-search="ABA League Europe Cibona Slovan Bratislava"> 4470 <div class="mx-left"> 4471 <button type="button" class="mx-fav-btn favorite-btn" 4472 data-match-id="338253" 4473 data-auth="false" 4474 onclick="event.preventDefault(); event.stopPropagation(); handleFavoriteClick(338253, this);" 4475 aria-label="Thêm vào yêu thích"> 4476 <svg class="icon icon-fav"><use href="#icon-star"/></svg> 4477 </button> 4478 <div class="mx-status">
4479 <span class="mx-time">01:00</span> 4480 </div> 4481 </div> 4482 4483 <div class="mx-center"> 4484 <a href="/cibona-vs-slovan-bratislava-id338253" class="mx-teams-link"> 4485 <div class="mx-team-row"> 4486 <img src="/images/basketball/teams/410.webp" 4487 alt="Cibona" class="mx-team-logo" loading="lazy" 4488 onerror="this.onerror=null; this.src='/images/placeholder-team.svg';"> 4489 <span class="mx-team-name">Cibona</span> 4490 <span class="mx-score "> 4491 </span> 4492 </div> 4493 <div class="mx-team-row"> 4494 <img src="/images/basketball/teams/7438.webp" 4495 alt="Slovan Bratislava" class="mx-team-logo" loading="lazy" 4496 onerror="this.onerror=null; this.src='/images/placeholder-team.svg';"> 4497 <span class="mx-team-name">Slovan Bratislava</span> 4498 <span class="mx-score "> 4499 </span> 4500 </div> 4501 </a> 4502 </div> 4503 4504 <div class="mx-right "> 4505 <a href="/cibona-vs-slovan-bratislava-id338253" class="mx-action-btn preview-btn">Xem trước</a> 4506 </div> 4507 </div> 4508 </div> 4509 </div> 4510 <div class="lg-section" data-search="Energa Basket Liga Poland"> 4511 <div class="lg-header"> 4512 <div class="lg-header-left"> 4513 <button type="button" class="lg-fav-btn" aria-label="Pin league"> 4514 <svg class="icon"><use href="#icon-star"/></svg> 4515 </button> 4516 <span class="lg-country-name">Poland:</span> 4517 <img src="/images/basketball/leagues/72.webp" 4518 alt="Energa Basket Liga" class="lg-logo" loading="lazy" 4519 onerror="if(!this.dataset.fallback){this.src='/images/placeholder-league.svg';this.dataset.fallback='true';}"> 4520 <span class="lg-name">Energa Basket Liga</span> 4521 </div> 4522 <div class="lg-header-right"> 4523 <button type="button" class="lg-collapse-btn" onclick="toggleLeague(this)" aria-label="Toggle"> 4524 <svg class="icon icon-collapse"><use href="#icon-chevron-up"/></svg> 4525 </button> 4526 </div> 4527 </div> 4528 4529 <div class="lg-matches"> 4530 <div class="mx-row " data-search="Energa Basket Liga Poland Zielona Gora Legia"> 4531 <div class="mx-left"> 4532 <button type="button" class="mx-fav-btn favorite-btn" 4533 data-match-id="335898" 4534 data-auth="false" 4535 onclick="event.preventDefault(); event.stopPropagation(); handleFavoriteClick(335898, this);" 4536 aria-label="Thêm vào yêu thích"> 4537 <svg class="icon icon-fav"><use href="#icon-star"/></svg> 4538 </button> 4539 <div class="mx-status"> 4540 <span class="mx-time">01:15</span> 4541 </div> 4542 </div> 4543 4544 <div class="mx-center"> 4545 <a href="/zielona-gora-vs-legia-id335898" class="mx-teams-link"> 4546 <div class="mx-team-row"> 4547 <img src="/images/basketball/teams/919.webp" 4548 alt="Zielona Gora" class="mx-team-logo" loading="lazy" 4549 onerror="this.onerror=null; this.src='/images/placeholder-team.svg';">
4550 <span class="mx-team-name">Zielona Gora</span> 4551 <span class="mx-score "> 4552 </span> 4553 </div> 4554 <div class="mx-team-row"> 4555 <img src="/images/basketball/teams/910.webp" 4556 alt="Legia" class="mx-team-logo" loading="lazy" 4557 onerror="this.onerror=null; this.src='/images/placeholder-team.svg';"> 4558 <span class="mx-team-name">Legia</span> 4559 <span class="mx-score "> 4560 </span> 4561 </div> 4562 </a> 4563 </div> 4564 4565 <div class="mx-right "> 4566 <a href="/zielona-gora-vs-legia-id335898" class="mx-action-btn preview-btn">Xem trước</a> 4567 </div> 4568 </div> 4569 </div> 4570 </div> 4571 <div class="lg-section" data-search="Euroleague Europe"> 4572 <div class="lg-header"> 4573 <div class="lg-header-left"> 4574 <button type="button" class="lg-fav-btn" aria-label="Pin league"> 4575 <svg class="icon"><use href="#icon-star"/></svg> 4576 </button> 4577 <span class="lg-country-name">Europe:</span> 4578 <img src="/images/basketball/leagues/120.webp" 4579 alt="Euroleague" class="lg-logo" loading="lazy" 4580 onerror="if(!this.dataset.fallback){this.src='/images/placeholder-league.svg';this.dataset.fallback='true';}"> 4581 <span class="lg-name">Euroleague</span> 4582 </div> 4583 <div class="lg-header-right"> 4584 <button type="button" class="lg-collapse-btn" onclick="toggleLeague(this)" aria-label="Toggle"> 4585 <svg class="icon icon-collapse"><use href="#icon-chevron-up"/></svg> 4586 </button> 4587 </div> 4588 </div> 4589 4590 <div class="lg-matches"> 4591 <div class="mx-row " data-search="Euroleague Europe Olympiacos Anadolu Efes"> 4592 <div class="mx-left"> 4593 <button type="button" class="mx-fav-btn favorite-btn" 4594 data-match-id="335899" 4595 data-auth="false" 4596 onclick="event.preventDefault(); event.stopPropagation(); handleFavoriteClick(335899, this);" 4597 aria-label="Thêm vào yêu thích"> 4598 <svg class="icon icon-fav"><use href="#icon-star"/></svg> 4599 </button> 4600 <div class="mx-status"> 4601 <span class="mx-time">01:15</span> 4602 </div> 4603 </div> 4604 4605 <div class="mx-center"> 4606 <a href="/olympiacos-vs-anadolu-efes-id335899" class="mx-teams-link"> 4607 <div class="mx-team-row"> 4608 <img src="/images/basketball/teams/1542.webp" 4609 alt="Olympiacos" class="mx-team-logo" loading="lazy" 4610 onerror="this.onerror=null; this.src='/images/placeholder-team.svg';"> 4611 <span class="mx-team-name">Olympiacos</span> 4612 <span class="mx-score "> 4613 </span> 4614 </div> 4615 <div class="mx-team-row"> 4616 <img src="/images/basketball/teams/1263.webp" 4617 alt="Anadolu Efes" class="mx-team-logo" loading="lazy" 4618 onerror="this.onerror=null; this.src='/images/placeholder-team.svg';">
4619 <span class="mx-team-name">Anadolu Efes</span> 4620 <span class="mx-score "> 4621 </span> 4622 </div> 4623 </a> 4624 </div> 4625 4626 <div class="mx-right "> 4627 <a href="/olympiacos-vs-anadolu-efes-id335899" class="mx-action-btn preview-btn">Xem trước</a> 4628 </div> 4629 </div> 4630 </div> 4631 </div> 4632 <nav aria-label="Điều hướng trang" class="mt-4 px-3 match-list-paging"> 4633 <ul class="pagination justify-content-center flex-wrap"> 4634 <li class="page-item disabled"> 4635 <a class="page-link" href="/hom-nay"><svg class="icon"><use href="#icon-chevrons-left"/></svg></a> 4636 </li> 4637 <li class="page-item disabled"> 4638 <a class="page-link" href="/hom-nay"><svg class="icon"><use href="#icon-chevron-left"/></svg></a> 4639 </li> 4640 <li class="page-item active"> 4641 <a class="page-link" href="/hom-nay">1</a> 4642 </li> 4643 <li class="page-item "> 4644 <a class="page-link" href="/hom-nay?page=2">2</a> 4645 </li> 4646 <li class="page-item "> 4647 <a class="page-link" href="/hom-nay?page=3">3</a> 4648 </li> 4649 <li class="page-item "> 4650 <a class="page-link" href="/hom-nay?page=4">4</a> 4651 </li> 4652 <li class="page-item "> 4653 <a class="page-link" href="/hom-nay?page=5">5</a> 4654 </li> 4655 <li class="page-item "> 4656 <a class="page-link" href="/hom-nay?page=2"><svg class="icon"><use href="#icon-chevron-right"/></svg></a> 4657 </li> 4658 <li class="page-item "> 4659 <a class="page-link" href="/hom-nay?page=36"><svg class="icon"><use href="#icon-chevrons-right"/></svg></a> 4660 </li> 4661 </ul> 4662 </nav> 4663 <div class="text-center text-muted mt-2 pb-3 match-list-paging"> 4664 <small>Trang 1 / 36 · Tổng 1794 trận đấu</small> 4665 </div> 4666 4667 <!-- 页é¢SEOå 容 --> 4668 4669</div> 4670 4671 4672 4673 </main> 4674 4675 <!-- SPA å è½½è¿åº¦æ¡ --> 4676 <div class="spa-loading-bar" id="spaLoadingBar"></div> 4677 4678 <!-- åºé¨ --> 4679 <footer class="footer"> 4680 <div class="container"> 4681 <div class="row"> 4682 <div class="col-lg-4 mb-4 mb-lg-0"> 4683 <div class="footer-brand mb-3"> 4684 <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"> 4685 </div> 4686 <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> 4687 <div class="social-links"> 4688 <a href="https://weibo.com" target="_blank" rel="nofollow noopener" aria-label="Weibo"><i class="fab fa-weibo" aria-hidden="true"></i></a> 4689 <a href="https://weixin.qq.com" target="_blank" rel="nofollow noopener" aria-label="WeChat"><i class="fab fa-weixin" aria-hidden="true"></i></a> 4690 <a href="https://twitter.com" target="_blank" rel="nofollow noopener" aria-label="Twitter"><i class="fab fa-twitter" aria-hidden="true"></i></a> 4691 <a href="https://youtube.com" target="_blank" rel="nofollow noopener" aria-label="YouTube"><i class="fab fa-youtube" aria-hidden="true"></i></a> 4692 </div> 4693 </div> 4694 <div class="col-6 col-lg-2"> 4695 <h2 class="footer-title">Liên kết nhanh</h2> 4696 <ul class="footer-links"> 4697 <li><a href="/truc-tiep">Trực tiếp</a></li> 4698 <li><a href="/hom-nay">Hôm nay</a></li> 4699 <li><a href="/lich-thi-dau">Lịch thi đấu</a></li> 4700 <li><a href="/tin-tuc-bong-da">Tin Tức</a></li> 4701 <li><a href="/nhan-dinh-bong-da">Nhận Định</a></li> 4702 <li><a href="/giai-dau">Trung tâm giải đấu</a></li> 4703 <li><a href="/doi-bong">Trung tâm câu lạc bộ</a></li> 4704 <li><a href="/leaderboard">BXH Streamer</a></li> 4705 </ul> 4706 </div> 4707 <div class="col-lg-4"> 4708 <h2 class="footer-title">Tải ứng dụng</h2> 4709 <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> 4710 <div class="app-buttons"> 4711 <a href="https://www.apple.com/app-store/" target="_blank" rel="nofollow noopener" class="app-btn" aria-label="App Store"> 4712 <i class="fab fa-apple" aria-hidden="true"></i>
4713 <span>App Store</span> 4714 </a> 4715 <a href="https://play.google.com/store" target="_blank" rel="nofollow noopener" class="app-btn" aria-label="Google Play"> 4716 <i class="fab fa-android" aria-hidden="true"></i> 4717 <span>Android</span> 4718 </a> 4719 </div> 4720 </div> 4721 </div> 4722 <hr class="border-secondary my-4"> 4723 <div class="row align-items-center"> 4724 <div class="col-md-6 text-center text-md-start mb-3 mb-md-0"> 4725 <p class="small text-muted mb-2">© 2026 XOIGAC.TV. All rights reserved.</p> 4726 <!-- DMCA Protection Badge --> 4727 <div class="dmca-badge"> 4728 <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"> 4729 <img src="/images/dmca_protected_sml_120n.png" alt="DMCA.com Protection Status" width="121" height="24" / loading="lazy"> 4730 </a> 4731 <!-- Using self-hosted DMCA image to eliminate third-party cookies --> 4732 </div> 4733 </div> 4734 <div class="col-md-6 text-center text-md-end"> 4735 <ul class="footer-bottom-links"> 4736 <li> 4737 <a href="/sitemap.xml" 4738 target="_blank"> 4739 Sơ đồ trang 4740 </a> 4741 </li> 4742 <li><a href="/chinh-sach-bao-mat">Chính sách bảo mật</a></li> 4743 <li><a href="/dieu-khoan-su-dung">Điều khoản dịch vụ</a></li> 4744 <li><a href="/lien-he">Liên hệ</a></li> 4745 <li><a href="/gioi-thieu">Về chúng tôi</a></li> 4746 <li><a href="/dmca" rel="nofollow">DMCA</a></li> 4747 </ul> 4748 </div> 4749 </div> 4750 </div> 4751 </footer> 4752 4753 <!-- è天室弹çªé®ç½© --> 4754 <div class="chat-modal-overlay d-none" id="chatModalOverlay" style="display: none !important;"></div> 4755 4756 <!-- èå¤©å®¤å¼¹çª --> 4757 <div class="chat-modal d-none" id="chatModal"> 4758 <div class="chat-modal-header"> 4759 <span class="chat-modal-title"></span> 4760 <div class="chat-modal-actions"> 4761 <button class="chat-modal-btn" id="chatModalFullscreen" data-i18n-title="common.fullscreen" title="Toàn màn hình"> 4762 <i class="fas fa-expand"></i> 4763 </button> 4764 <button class="chat-modal-btn chat-modal-close-btn" id="chatModalClose" data-i18n-title="common.collapse" title="Thu gọn"> 4765 <i class="fas fa-chevron-down"></i> 4766 </button> 4767 </div> 4768 </div> 4769 <div class="chat-modal-body" id="chatModalBody"> 4770 <!-- ç§»å¨ç«¯è§é¢ææ¾å¨åºå --> 4771 <div class="mobile-video-section d-none" id="mobileVideoSection"> 4772 <div class="mobile-video-wrapper"> 4773 <video id="mobileVideo" playsinline muted controls crossorigin> 4774 <!-- è§é¢æºä¼éè¿JavaScriptå¨æè®¾ç½® --> 4775 </video> 4776 <!-- å ³éæé®ç´æ¥æ¾å¨è§é¢å³ä¸è§ --> 4777 <button class="mobile-video-close" id="mobileVideoClose" data-i18n-title="common.closeVideo" title="Đóng video"> 4778 <i class="fas fa-times"></i> 4779 </button> 4780 </div> 4781 </div> 4782 <!-- è天室å 容ä¼è¢«å¤å¶å°è¿é --> 4783 </div> 4784 </div> 4785 4786 <!-- å ¨å±æµ®å¨æé®ç» --> 4787 <div class="global-fab-container" id="globalFabContainer"> 4788 <!-- æ¨ééç¥è®¢é --> 4789 <button class="global-fab-btn push-fab" id="push-subscribe-btn" data-i18n-title="push.enableNotifications" title="å¼å¯æ¨ééç¥" style="display: none;"> 4790 <i class="fas fa-bell"></i> 4791 </button> 4792 <!-- 强å¶å·æ° --> 4793 <button class="global-fab-btn refresh-fab" id="fabRefresh" data-i18n-title="common.refresh" title="Làm mới"> 4794 <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> 4795 </button> 4796 <!-- åå°é¡¶é¨ --> 4797 <button class="global-fab-btn back-to-top-fab" id="fabBackToTop" data-i18n-title="common.backToTop" title="Về đầu trang"> 4798 <i class="fas fa-chevron-up"></i> 4799 </button> 4800 <!-- æå¼è天室ï¼åªå¨æèå¤©å®¤æ¶æ¾ç¤ºï¼å·²ææ¶ç¦ç¨ï¼ --> 4801 </div> 4802 4803 <!-- ä¼åçJavaScriptå è½½ - 使ç¨deferåasync --> 4804 <!-- å ³é®çç¬¬ä¸æ¹åº - 使ç¨defer --> 4805 <!-- â æ·»å crossorigin 屿§ä»¥æ¯æç¬¬ä¸æ¹Cookie --> 4806
4806<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>
4806 4807
4807<script src="https://cdnjs.cloudflare.com/ajax/libs/microsoft-signalr/8.0.0/signalr.min.js" defer crossorigin></script>
4807 4808
4808<script src="https://cdn.jsdelivr.net/npm/[email protected]/dist/hls.min.js" defer crossorigin></script>
4808 4809 4810 <!-- åºç¨ç¨åºJavaScript - IVS ææ¾å¨ç¸å ³èæ¬å¿ é¡»æé¡ºåºåæ¥å è½½ --> 4811 <!-- ç产ç¯å¢ï¼ä½¿ç¨æå æä»¶ --> 4812 <!-- éªè¯ç 管çå¨ - å¿ é¡»å¨ app.bundle.js ä¹åå è½½ï¼app.bundle å å« auth-modal.jsï¼ --> 4813
4813<script src="/dist/js/captcha-manager.js?v=6Cj5aPMUUHrOwMbOlykc3RZYjobhKsvkLc5aNPDmZi0"></script>
4813 4814 <!-- æ ¸å¿åè½å ï¼3个JSåå¹¶ï¼- 忥å è½½ --> 4815
4815<script src="/dist/js/core.bundle.js?v=icHE5APGMG30g9fEySb-7hZ5vZ3iHbgJVhyUPH3v4Q8"></script>
4815 4816 <!-- ææ¾å¨åè½å ï¼8个JSåå¹¶ï¼- å»¶è¿å è½½ --> 4817
4817<script src="/dist/js/player.bundle.js?v=8u5CWjOuanIR8_RT1hwbFVrUcYrqqHSdSl_i6iFuPEQ" defer></script>
4817 4818 <!-- åºç¨åè½å ï¼å« streamer-follow.js / auth-modal.jsï¼- å»¶è¿å è½½ --> 4819
4819<script src="/dist/js/app.bundle.js?v=mOWIwnGUFcWjsPNJLvW6NpHaA0wGjgZ4WYEv8xFjIMQ" defer></script>
4819 4820
4820<script src="/dist/js/streamer-follow.js?v=p3zJpid1v8N4DkO4wwc04njd4zAS2j99EHmdb_HUbMY" defer></script>
4820 4821
4821<script src="/js/custom-select.js?v=unrE77TQiy-qc-Fun5fVdZBrEj9yh0GaRL5AHtdIOO8" defer></script>
4821 4822 4823 <!-- å èé ç½®èæ¬ - å¿ é¡»å¨å ¶ä»èæ¬ä¹åæ§è¡ --> 4824
4824<script> 4825 // ç¦ç¨ i18n.js çèªå¨è¯è¨åæ¢ UI å建ï¼ä½¿ç¨æå¡ç«¯æ¸²æçæé®ï¼ 4826 window.__disableI18nUI = true; 4827 window.streamerFollowI18n = { 4828 follow: 'Theo dõi', 4829 unfollow: 'Bá» theo dõi', 4830 followed: 'Äã theo dõi', 4831 unfollowed: 'Äã bá» theo dõi' 4832 }; 4833 window.showFollowerCount = true; 4834 </script>
4834 4835 4836 <!-- å ¨å±æµ®å¨æé®é»è¾ --> 4837
4837<script> 4838 (function() { 4839 const fabBackToTop = document.getElementById('fabBackToTop'); 4840 const fabRefresh = document.getElementById('fabRefresh'); 4841 const fabOpenChat = document.getElementById('fabOpenChat'); 4842 const chatRoom = document.querySelector('.chat-room-container'); 4843 const fabChatAvatar = document.getElementById('fabChatAvatar'); 4844 const chatModal = document.getElementById('chatModal'); 4845 const chatModalOverlay = document.getElementById('chatModalOverlay'); 4846 const chatModalBody = document.getElementById('chatModalBody'); 4847 const chatModalClose = document.getElementById('chatModalClose'); 4848 const chatModalFullscreen = document.getElementById('chatModalFullscreen'); 4849 const mobileVideoSection = document.getElementById('mobileVideoSection'); 4850 const mobileVideo = document.getElementById('mobileVideo'); 4851 const mobileVideoClose = document.getElementById('mobileVideoClose'); 4852 4853 let isFullscreen = false; 4854 let originalChatParent = null; 4855 let originalChatNextSibling = null; 4856 let isVideoPlaying = false; 4857 let wasVideoCollapsedBeforeModal = true; // è®°å½æå¼å¼¹çªåè§é¢æ¯å¦æ¶èµ· 4858 4859 // 妿æè天室䏿èèµå¾æ ï¼åæèèµå¾æ 忥å°å³ä¸è§ FAB 4860 if (chatRoom && fabChatAvatar) { 4861 const leagueImg = chatRoom.querySelector('.chat-icon-wrapper img'); 4862 if (leagueImg && leagueImg.src) { 4863 fabChatAvatar.src = leagueImg.src; 4864 } 4865 } 4866 4867 // åå°é¡¶é¨åå·æ°æé®ï¼PC æ»å¨>300px 常æ¾ï¼ç§»å¨ç«¯æ»å¨åæ¾ç¤ºï¼5 ç§æ åç´æ»å¨èªå¨éè 4868 let scrollThrottle = null; 4869 const FAB_IDLE_HIDE_MS = 5000; 4870 const FAB_SCROLL_DELTA = 8; 4871 let fabLastScrollTop = 0; 4872 let fabLastScrollActivityAt = 0; 4873 const globalFabContainer = document.getElementById('globalFabContainer'); 4874 4875 function isMobileFabViewport() { 4876 return window.matchMedia('(max-width: 768px)').matches; 4877 } 4878 4879 function getScrollTop() { 4880 return window.scrollY || document.documentElement.scrollTop || document.body.scrollTop || 0; 4881 } 4882 4883 function isFabScrollEligible() { 4884 return getScrollTop() > 300; 4885 } 4886 4887 function hideFabScrollButtons() { 4888 if (fabBackToTop) fabBackToTop.classList.remove('visible'); 4889 if (fabRefresh) fabRefresh.classList.remove('visible'); 4890 if (globalFabContainer) globalFabContainer.classList.add('fab-auto-hidden'); 4891 window.updateFabContainerVisibility(); 4892 } 4893 4894 function showFabScrollButtons() { 4895 if (fabBackToTop) fabBackToTop.classList.add('visible'); 4896 if (fabRefresh) fabRefresh.classList.add('visible'); 4897 if (globalFabContainer) globalFabContainer.classList.remove('fab-auto-hidden'); 4898 window.updateFabContainerVisibility(); 4899 } 4900 4901 function markFabScrollActivity() { 4902 fabLastScrollActivityAt = Date.now(); 4903 } 4904 4905 function updateDesktopFabVisibility() { 4906 if (isFabScrollEligible()) { 4907 showFabScrollButtons(); 4908 } else { 4909 hideFabScrollButtons(); 4910 } 4911 } 4912 4913 function handleFabScroll() { 4914 const scrollTop = getScrollTop(); 4915 const delta = Math.abs(scrollTop - fabLastScrollTop); 4916 4917 if (isMobileFabViewport()) { 4918 if (scrollTop <= 300) { 4919 fabLastScrollTop = scrollTop; 4920 hideFabScrollButtons(); 4921 return; 4922 } 4923 if (delta >= FAB_SCROLL_DELTA) { 4924 fabLastScrollTop = scrollTop; 4925 markFabScrollActivity(); 4926 showFabScrollButtons(); 4927 } 4928 return; 4929 } 4930 4931 fabLastScrollTop = scrollTop; 4932 updateDesktopFabVisibility(); 4933 } 4934 4935 // Function to update FAB container visibility 4936 window.updateFabContainerVisibility = function() { 4937 const container = document.getElementById('globalFabContainer'); 4938 const fabPushBtn = container ? container.querySelector('#push-subscribe-btn') : null; 4939 const hasVisibleButtons = (fabBackToTop && fabBackToTop.classList.contains('visible')) || 4940 (fabRefresh && fabRefresh.classList.contains('visible')) || 4941 (fabPushBtn && fabPushBtn.style.display !== 'none' && fabPushBtn.classList.contains('visible')); 4942 4943 if (container) { 4944 if (hasVisibleButtons && !container.classList.contains('fab-auto-hidden')) { 4945 container.style.display = 'flex'; 4946 } else { 4947 container.style.display = 'none'; 4948 } 4949 } 4950 }; 4951 4952 window.addEventListener('scroll', function() { 4953 if (scrollThrottle) return; 4954 scrollThrottle = setTimeout(function() { 4955 handleFabScroll(); 4956 scrollThrottle = null; 4957 }, 80); 4958 }, { passive: true }); 4959 4960 window.addEventListener('resize', function() { 4961 fabLastScrollTop = getScrollTop(); 4962 if (isMobileFabViewport()) { 4963 if (!isFabScrollEligible()) { 4964 hideFabScrollButtons(); 4965 } 4966 } else { 4967 if (globalFabContainer) globalFabContainer.classList.remove('fab-auto-hidden'); 4968 updateDesktopFabVisibility(); 4969 } 4970 }, { passive: true }); 4971 4972 // ç§»å¨ç«¯ï¼å®æ¶å¼ºå¶æ£æ¥ï¼é¿å scroll/touch æ¼å¤å¯¼è´ä¸æ¶å¤± 4973 setInterval(function() { 4974 if (!isMobileFabViewport()) return; 4975 if (!isFabScrollEligible()) { 4976 if (fabBackToTop && fabBackToTop.classList.contains('visible')) { 4977 hideFabScrollButtons(); 4978 } 4979 return; 4980 } 4981 const isVisible = fabBackToTop && fabBackToTop.classList.contains('visible'); 4982 if (!isVisible) return; 4983 const idleMs = Date.now() - fabLastScrollActivityAt; 4984 if (idleMs >= FAB_IDLE_HIDE_MS) { 4985 hideFabScrollButtons(); 4986 } 4987 }, 400); 4988 4989 // Initial check 4990 fabLastScrollTop = getScrollTop(); 4991 if (isMobileFabViewport()) { 4992 if (isFabScrollEligible()) { 4993 showFabScrollButtons(); 4994 markFabScrollActivity(); 4995 } else { 4996 hideFabScrollButtons(); 4997 } 4998 } else { 4999 updateDesktopFabVisibility(); 5000 } 5001 5002 // åå°é¡¶é¨ç¹å»äºä»¶ï¼å ¼å®¹ç§»å¨ç«¯ï¼é¿å éè¦ç¹ä¸¤æ¬¡çé®é¢ï¼ 5003 function scrollToTop(e) { 5004 e.preventDefault(); 5005 e.stopPropagation(); 5006 window.scrollTo({ top: 0, behavior: 'smooth' }); 5007 } 5008 5009 if (fabBackToTop) { 5010 fabBackToTop.addEventListener('click', scrollToTop); 5011 fabBackToTop.addEventListener('touchend', function(e) { 5012 e.preventDefault(); 5013 scrollToTop(e); 5014 }); 5015 } 5016 5017 // 强å¶å·æ°ç¹å»äºä»¶ 5018 function forceRefresh(e) { 5019 e.preventDefault(); 5020 e.stopPropagation(); 5021 // 强å¶å·æ°ï¼å¿½ç¥ç¼å 5022 location.reload(true); 5023 } 5024 5025 if (fabRefresh) { 5026 fabRefresh.addEventListener('click', forceRefresh); 5027 fabRefresh.addEventListener('touchend', function(e) { 5028 e.preventDefault(); 5029 forceRefresh(e); 5030 }); 5031 } 5032 5033 // è·ååå§è§é¢ææ¾å¨å ç´ 5034 function getOriginalVideo() { 5035 return document.getElementById('livePlayer'); 5036 } 5037 5038 // 设置移å¨ç«¯è§é¢ææ¾å¨ 5039 function setupMobileVideo() { 5040 const isMobile = window.innerWidth <= 767; 5041 if (!isMobile) return; 5042 5043 const originalVideo = getOriginalVideo(); 5044 if (!originalVideo || !mobileVideo) return; 5045 5046 // å¤å¶è§é¢æº 5047 if (originalVideo.src) { 5048 mobileVideo.src = originalVideo.src; 5049 } else { 5050 const sources = originalVideo.querySelectorAll('source'); 5051 mobileVideo.innerHTML = '';
5052 sources.forEach(source => { 5053 const newSource = source.cloneNode(true); 5054 mobileVideo.appendChild(newSource); 5055 }); 5056 } 5057 5058 // åæ¥ææ¾ç¶æ 5059 if (!originalVideo.paused) { 5060 mobileVideo.currentTime = originalVideo.currentTime; 5061 setTimeout(() => { 5062 mobileVideo.play().catch(console.error); 5063 }, 100); 5064 } 5065 5066 // æ¾ç¤ºç§»å¨ç«¯è§é¢åºå 5067 mobileVideoSection.classList.remove('d-none'); 5068 isVideoPlaying = true; 5069 5070 // ç¦ç¨ç§»å¨ç«¯è§é¢çå ¨å±åè½ 5071 mobileVideo.setAttribute('disablePictureInPicture', 'true'); 5072 mobileVideo.setAttribute('controlsList', 'nofullscreen'); 5073 5074 // çå¬å ¨å±äºä»¶å¹¶é»æ¢ 5075 mobileVideo.addEventListener('webkitfullscreenchange', function() { 5076 if (document.webkitFullscreenElement === mobileVideo) { 5077 document.webkitExitFullscreen(); 5078 } 5079 }); 5080 5081 mobileVideo.addEventListener('fullscreenchange', function() { 5082 if (document.fullscreenElement === mobileVideo) { 5083 document.exitFullscreen(); 5084 } 5085 }); 5086 5087 // æååè§é¢ 5088 originalVideo.pause(); 5089 } 5090 5091 // å ³éç§»å¨ç«¯è§é¢ææ¾å¨ 5092 function closeMobileVideo() { 5093 if (!mobileVideo || !mobileVideoSection) return; 5094 5095 // éèè§é¢åºå 5096 mobileVideoSection.classList.add('d-none'); 5097 mobileVideo.pause(); 5098 isVideoPlaying = false; 5099 } 5100 5101 // æ¾ç¤ºè天室ä¸å¯ç¨æç¤º 5102 function showChatUnavailableHint(message) { 5103 // å建æç¤ºå ç´ 5104 const hint = document.createElement('div'); 5105 hint.className = 'chat-unavailable-hint'; 5106 hint.innerHTML = ` 5107 <div class="chat-hint-content"> 5108 <i class="fas fa-comments-slash"></i> 5109 <span>${message}</span> 5110 </div> 5111 `; 5112 hint.style.cssText = ` 5113 position: fixed; bottom: 100px; right: 24px; z-index: 1000; 5114 background: linear-gradient(135deg, #1e293b 0%, #334155 100%); 5115 color: white; padding: 16px 20px; border-radius: 12px; 5116 box-shadow: 0 8px 32px rgba(0,0,0,0.3); 5117 border: 1px solid rgba(59, 130, 246, 0.3); 5118 font-size: 14px; max-width: 280px; 5119 animation: slideInUp 0.3s ease; 5120 backdrop-filter: blur(10px); 5121 `; 5122 5123 // æ·»å CSSå¨ç» 5124 if (!document.querySelector('#chatHintStyles')) { 5125 const style = document.createElement('style'); 5126 style.id = 'chatHintStyles'; 5127 style.textContent = ` 5128 @keyframes slideInUp { 5129 from { opacity: 0; transform: translateY(20px); } 5130 to { opacity: 1; transform: translateY(0); } 5131 } 5132 .chat-hint-content { 5133 display: flex; align-items: center; gap: 12px; 5134 } 5135 .chat-hint-content i { 5136 color: #fbbf24; font-size: 18px; 5137 } 5138 `; 5139 document.head.appendChild(style); 5140 } 5141 5142 document.body.appendChild(hint); 5143 5144 // 3ç§åèªå¨æ¶å¤± 5145 setTimeout(() => { 5146 hint.style.animation = 'slideOutDown 0.3s ease forwards'; 5147 setTimeout(() => hint.remove(), 300); 5148 }, 3000); 5149 } 5150 5151 // æå¼èå¤©å®¤å¼¹çª 5152 function openChatModal(e) { 5153 if (e) { 5154 e.preventDefault(); 5155 } 5156 if (!chatRoom) { 5157 alert(window.L?.T ? window.L.T('common.noChatRoom') : 'å½å页颿²¡æè天室'); 5158 return; 5159 } 5160 5161 const isMobile = window.innerWidth <= 767; 5162 5163 // è®°å½åå§ä½ç½® 5164 originalChatParent = chatRoom.parentElement; 5165 originalChatNextSibling = chatRoom.nextElementSibling; 5166 5167 // ç§»å¨ç«¯ï¼å§ç»æ¾ç¤ºè§é¢ææ¾å¨+è天室ï¼ä¸ç®¡è§é¢æ¯å¦æ£å¨ææ¾ï¼ 5168 if (isMobile) { 5169 const originalVideo = getOriginalVideo(); 5170 const livePlayerSection = document.getElementById('livePlayerSection'); 5171 if (originalVideo && livePlayerSection) { 5172 // è®°å½æå¼å¼¹çªåè§é¢æ¯å¦æ¶èµ· 5173 wasVideoCollapsedBeforeModal = livePlayerSection.classList.contains('collapsed'); 5174 5175 // 妿è§é¢è¿æ²¡å±å¼ï¼å å±å¼å® 5176 if (wasVideoCollapsedBeforeModal) { 5177 livePlayerSection.classList.remove('collapsed'); 5178 // æ´æ°è§çç´ææé®æå 5179 const watchBtn = document.querySelector('.btn-live-watch'); 5180 if (watchBtn) { 5181 watchBtn.innerHTML = '<i class="fas fa-times"></i>æ¶èµ·ç´æ'; 5182 } 5183 } 5184 // åå¤ç§»å¨ç«¯è§é¢åºå 5185 setupMobileVideo(); 5186 5187 // ä»å¿«æ·è天室æå¼æ¶ï¼èªå¨å¼å§ææ¾ç§»å¨ç«¯è§é¢ 5188 if (mobileVideo) { 5189 setTimeout(function () { 5190 mobileVideo.play().catch(function (err) { 5191 console.warn('èªå¨ææ¾ç§»å¨ç«¯è§é¢å¤±è´¥ï¼', err); 5192 }); 5193 }, 150); 5194 } 5195 } 5196 } 5197 5198 // ç§»å¨è天室å°å¼¹çª 5199 chatModalBody.appendChild(chatRoom); 5200 chatRoom.classList.add('in-modal'); 5201 5202 // æå¼å¼¹çªæ¶ï¼é»è®¤è®©æ¶æ¯åºåæ¾ç¤ºå¨åºé¨ï¼ä½¿ç¨å¹³æ»æ»å¨æ´èªç¶ 5203 const chatMessages = chatRoom.querySelector('#chatMessages'); 5204 if (chatMessages) { 5205 requestAnimationFrame(() => { 5206 if (typeof chatMessages.scrollTo === 'function') { 5207 chatMessages.scrollTo({ 5208 top: chatMessages.scrollHeight, 5209 behavior: 'smooth' 5210 }); 5211 } else { 5212 chatMessages.scrollTop = chatMessages.scrollHeight; 5213 } 5214 }); 5215 } 5216 5217 // æ¾ç¤ºå¼¹çª 5218 chatModal.classList.remove('d-none'); 5219 chatModalOverlay.classList.remove('d-none'); 5220 document.body.style.overflow = 'hidden'; 5221 5222 // èç¦è¾å ¥æ¡ 5223 setTimeout(function() { 5224 const input = chatRoom.querySelector('#chatInput'); 5225 if (input && !input.readOnly) input.focus(); 5226 }, 300); 5227 } 5228 5229 // å ³éèå¤©å®¤å¼¹çª 5230 function closeChatModal(e) { 5231 if (e) { 5232 e.preventDefault(); 5233 } 5234 if (!chatRoom) return; 5235 5236 const isMobile = window.innerWidth <= 767; 5237 5238 // å ³éç§»å¨ç«¯è§é¢ææ¾å¨ï¼æ 论å½åæ¯å¦å¨ææ¾ï¼é½ç»ä¸æ¶èµ·è§é¢åºåï¼ 5239 closeMobileVideo(); 5240 5241 // ç§»å¨ç«¯ï¼æ¢å¤è§é¢ææ¾å¨åæ¥çç¶æ 5242 if (isMobile && wasVideoCollapsedBeforeModal) { 5243 const livePlayerSection = document.getElementById('livePlayerSection'); 5244 const watchBtn = document.querySelector('.btn-live-watch'); 5245 if (livePlayerSection) { 5246 livePlayerSection.classList.add('collapsed'); 5247 } 5248 if (watchBtn) { 5249 watchBtn.innerHTML = '<i class="fas fa-play"></i>è§çç´æ'; 5250 } 5251 } 5252 5253 // æ¢å¤è天室å°åä½ç½® 5254 if (originalChatParent) { 5255 if (originalChatNextSibling) { 5256 originalChatParent.insertBefore(chatRoom, originalChatNextSibling); 5257 } else { 5258 originalChatParent.appendChild(chatRoom); 5259 } 5260 } 5261 chatRoom.classList.remove('in-modal'); 5262 5263 // éèå¼¹çª 5264 chatModal.classList.add('d-none'); 5265 chatModalOverlay.classList.add('d-none'); 5266 chatModal.classList.remove('fullscreen'); 5267 document.body.style.overflow = ''; 5268 isFullscreen = false;
5269 5270 // æ´æ°å ¨å±æé®å¾æ 5271 chatModalFullscreen.innerHTML = '<i class="fas fa-expand"></i>'; 5272 chatModalFullscreen.title = window.L?.T ? window.L.T('common.fullscreen') : 'å ¨å±'; 5273 } 5274 5275 // åæ¢å ¨å± 5276 function toggleFullscreen(e) { 5277 if (e) { 5278 e.preventDefault(); 5279 } 5280 isFullscreen = !isFullscreen; 5281 if (isFullscreen) { 5282 chatModal.classList.add('fullscreen'); 5283 chatModalFullscreen.innerHTML = '<i class="fas fa-compress"></i>'; 5284 chatModalFullscreen.title = window.L?.T ? window.L.T('common.exitFullscreen') : 'éåºå ¨å±'; 5285 } else { 5286 chatModal.classList.remove('fullscreen'); 5287 chatModalFullscreen.innerHTML = '<i class="fas fa-expand"></i>'; 5288 chatModalFullscreen.title = window.L?.T ? window.L.T('common.fullscreen') : 'å ¨å±'; 5289 } 5290 } 5291 5292 // æ£æµæ¯å¦æ¯ç§»å¨ç«¯ 5293 const isMobile = window.innerWidth <= 767; 5294 5295 // ç»å®äºä»¶ï¼åªæåå¨èå¤©å®¤æ¶æå¤ç FAB / å¼¹çªï¼Beauty ç¬ç«è§ç页使ç¨å åµè天ï¼ä¸èµ°å¼¹çªï¼ 5296 const isBeautyWatchPage = document.body.classList.contains('beauty-watch-layout'); 5297 if (chatRoom && !isBeautyWatchPage) { 5298 // æ¡é¢ç«¯ï¼åªè¦æèå¤©å®¤å°±ç´æ¥æ¾ç¤ºFABï¼ä» å½å ç´ å卿¶ï¼ 5299 if (!isMobile && fabOpenChat) { 5300 fabOpenChat.classList.add('visible'); 5301 } 5302 5303 // è天室弹çªäºä»¶ï¼å ¼å®¹ç§»å¨ç«¯è§¦æ¸ï¼ 5304 if (fabOpenChat) { 5305 fabOpenChat.addEventListener('click', openChatModal); 5306 fabOpenChat.addEventListener('touchend', function(e) { 5307 e.preventDefault(); 5308 openChatModal(e); 5309 }); 5310 } 5311 5312 if (chatModalClose) { 5313 chatModalClose.addEventListener('click', closeChatModal); 5314 chatModalClose.addEventListener('touchend', function(e) { 5315 e.preventDefault(); 5316 closeChatModal(e); 5317 }); 5318 } 5319 5320 if (chatModalOverlay) { 5321 chatModalOverlay.addEventListener('click', closeChatModal); 5322 } 5323 5324 if (chatModalFullscreen) { 5325 chatModalFullscreen.addEventListener('click', toggleFullscreen); 5326 } 5327 5328 // ç§»å¨ç«¯è§é¢å ³éæé®ï¼ç´æ¥å ³éæ´ä¸ªå¼¹çªï¼é¿å åºç°âåªæè天âçå¼¹çª 5329 if (mobileVideoClose) { 5330 mobileVideoClose.addEventListener('click', function(e) { 5331 closeChatModal(e); 5332 }); 5333 } 5334 5335 // ESC å ³é 5336 document.addEventListener('keydown', function(e) { 5337 if (e.key === 'Escape' && !chatModal.classList.contains('d-none')) { 5338 closeChatModal(); 5339 } 5340 }); 5341 5342 // ç§»å¨ç«¯ï¼åªè¦èå¤©å®¤è¿æ¥æåï¼å°±æ¾ç¤º FAB 5343 if (isMobile) { 5344 window.addEventListener('chatConnected', function() { 5345 if (fabOpenChat) { 5346 fabOpenChat.classList.add('visible'); 5347 } 5348 }); 5349 } 5350 5351 // 忥 FAB çæªè¯»æ°æ³¡ï¼çå¬é¡µé¢å ç unread badgeï¼ 5352 const pageUnreadBadge = document.getElementById('unreadBadge'); 5353 const fabBadge = document.getElementById('fabChatBadge'); 5354 if (pageUnreadBadge && fabBadge) { 5355 const observer = new MutationObserver(function() { 5356 const count = pageUnreadBadge.textContent || '0'; 5357 const isHidden = pageUnreadBadge.classList.contains('d-none'); 5358 if (isHidden || count === '0') { 5359 fabBadge.classList.add('d-none'); 5360 } else { 5361 fabBadge.textContent = count; 5362 fabBadge.classList.remove('d-none'); 5363 } 5364 }); 5365 observer.observe(pageUnreadBadge, { attributes: true, childList: true, subtree: true, characterData: true }); 5366 } 5367 } else if (chatRoom && isBeautyWatchPage) { 5368 chatRoom.classList.remove('in-modal'); 5369 } else { 5370 // 没æè天室æ¶éè FAB 5371 if (fabOpenChat) { 5372 fabOpenChat.classList.remove('visible'); 5373 } 5374 } 5375 })(); 5376 </script>
5376 5377 5378 <!-- 页é¢å è½½å®æåéè loader --> 5379
5379<script> 5380 (function() { 5381 var loader = document.getElementById('pageLoader'); 5382 if (!loader) return; 5383 5384 // 页é¢å è½½å®æåç«å³éèï¼æå¡ç«¯å·²æ¸²ææ£ç¡®è¯è¨ï¼æ éçå¾ JS ç¿»è¯ï¼ 5385 function hideLoader() { 5386 // ç«å³éèï¼ä¸åå»¶è¿ 5387 loader.style.display = 'none'; 5388 loader.classList.add('fade-out', 'hidden'); 5389 // å¨ç»ç»æåç§»é¤å ç´ 5390 setTimeout(function() { 5391 if (loader.parentNode) { 5392 loader.parentNode.removeChild(loader); 5393 } 5394 }, 200); 5395 } 5396 5397 // DOM å è½½å®æåç«å³éè 5398 if (document.readyState === 'complete') { 5399 hideLoader(); 5400 } else { 5401 window.addEventListener('load', hideLoader); 5402 } 5403 5404 // é¢å¤ä¿é©ï¼ç¡®ä¿å¨ 3 ç§åä¸å®éèå è½½å¨ 5405 setTimeout(function() { 5406 if (loader && loader.parentNode) { 5407 loader.style.display = 'none'; 5408 loader.classList.add('fade-out', 'hidden'); 5409 if (loader.parentNode) { 5410 loader.parentNode.removeChild(loader); 5411 } 5412 } 5413 }, 3000); 5414 5415 // ç¡®ä¿è天é®ç½©å±å¨é¡µé¢å è½½æ¶è¢«éè 5416 var chatOverlay = document.getElementById('chatModalOverlay'); 5417 if (chatOverlay) { 5418 chatOverlay.style.display = 'none'; 5419 chatOverlay.classList.add('d-none'); 5420 } 5421 5422 // ç¡®ä¿è天弹çªå¨é¡µé¢å è½½æ¶è¢«éè 5423 var chatModal = document.getElementById('chatModal'); 5424 if (chatModal) { 5425 chatModal.style.display = 'none'; 5426 chatModal.classList.add('d-none'); 5427 } 5428 })(); 5429 </script>
5429 5430 5431 <!-- è¯è¨åæ¢å½æ° --> 5432
5432<script> 5433 function changeLanguage(lang) { 5434 // 鲿¢éå¤ç¹å» 5435 if (window.__changingLanguage) return; 5436 window.__changingLanguage = true; 5437 5438 // ä¿åè¯è¨åå¥½å° cookie å localStorage 5439 document.cookie = 'livescore_lang=' + lang + '; path=/; max-age=31536000'; 5440 localStorage.setItem('livescore_lang', lang); 5441 5442 var returnUrl = window.location.pathname + window.location.search + window.location.hash; 5443 window.location.href = '/set-lang?lang=' + encodeURIComponent(lang) + '&returnUrl=' + encodeURIComponent(returnUrl); 5444 } 5445 </script>
5445 5446 5447 <!-- SPA è·¯ç± - ææ¶ç¦ç¨ä»¥ä¼åLCP --> 5448
5448<script src="/js/spa-router.js?v=dwhRvRTKNW3gDRjkITc68k3snHSqhN2jwIL1Le2mwmw" defer></script>
5448 5449 5450 <!-- ç®åçé¢çº¦æéåè½ --> 5451
5451<script> 5452 window.toggleMatchReminder = async (event, btn) => { 5453 try { 5454 // æ£æ¥ Service Worker æ¯æ 5455 if (!('serviceWorker' in navigator)) { 5456 showNotification(window.L?.T ? window.L.T('push.notSupported') : 'æ¨çæµè§å¨ä¸æ¯ææ¨ééç¥', 'warning'); 5457 return; 5458 } 5459 5460 // çå¾ Service Worker 就绪ï¼å¢å è¶ æ¶å¤çï¼ 5461 let registration, subscription; 5462 try { 5463 registration = await Promise.race([ 5464 navigator.serviceWorker.ready, 5465 new Promise((_, reject) => setTimeout(() => reject(new Error('SW timeout')), 5000)) 5466 ]); 5467 subscription = await registration.pushManager.getSubscription(); 5468 } catch (swError) { 5469 console.error('[é¢çº¦æé] Service Worker æªå°±ç»ª:', swError); 5470 showNotification(window.L?.T ? window.L.T('push.notReady') : 'æ¨éæå¡æªå°±ç»ªï¼è¯·ç¨åéè¯', 'warning'); 5471 return; 5472 } 5473 5474 if (!subscription) { 5475 const subscribeBtn = document.getElementById('push-subscribe-btn') || document.getElementById('mobile-push-subscribe-btn'); 5476 if (subscribeBtn) { 5477 subscribeBtn.click(); 5478 } else { 5479 showNotification(window.L?.T ? window.L.T('push.pleaseSubscribe') : '请å è®¢é æ¨ééç¥', 'warning'); 5480 } 5481 return; 5482 } 5483 5484 const endpoint = subscription.endpoint; 5485 5486 const res = await fetch(`/api/push/check-subscription?endpoint=${encodeURIComponent(endpoint)}`); 5487 const data = await res.json(); 5488 5489 if (!data.subscribed) { 5490 const subscribeBtn = document.getElementById('push-subscribe-btn') || document.getElementById('mobile-push-subscribe-btn'); 5491 if (subscribeBtn) { 5492 subscribeBtn.click(); 5493 } else { 5494 showNotification(window.L?.T ? window.L.T('push.pleaseSubscribe') : '请å è®¢é æ¨ééç¥', 'warning'); 5495 } 5496 return; 5497 } 5498 5499 // æ£æ¥æé®å½åç¶æï¼å¤ææ¯è®¢é è¿æ¯åæ¶ 5500 const matchId = btn.dataset.matchId; 5501 const isActive = btn.classList.contains('active'); 5502 5503 const isIconOnly = btn.classList.contains('focus-reminder-btn'); 5504 5505 btn.disabled = true; 5506 const originalHtml = btn.innerHTML; 5507 const processingText = window.L?.T ? window.L.T('common.processing') : 'å¤çä¸...'; 5508 btn.innerHTML = isIconOnly 5509 ? `<i class="fas fa-spinner fa-spin"></i>` 5510 : `<i class="fas fa-spinner fa-spin"></i> <span>${processingText}</span>`; 5511 5512 let reminderRes, reminderData; 5513 5514 if (isActive) { 5515 // å½åæ¯æ¿æ´»ç¶æï¼æ§è¡åæ¶æä½ 5516 reminderRes = await fetch('/api/match-reminders/unsubscribe', { 5517 method: 'POST', 5518 headers: { 5519 'Content-Type': 'application/json', 5520 'Accept-Language': window.__currentLang || 'vi' 5521 }, 5522 body: JSON.stringify({ 5523 fixtureId: parseInt(matchId), 5524 pushEndpoint: endpoint 5525 }) 5526 }); 5527 5528 reminderData = await reminderRes.json(); 5529 5530 if (reminderData.success) { 5531 btn.classList.remove('active'); 5532 btn.innerHTML = isIconOnly 5533 ? `<i class="fas fa-bell"></i>` 5534 : `<i class="fas fa-bell"></i> <span>${btn.dataset.textSet || (window.L?.T ? window.L.T('home.setReminder') : 'é¢çº¦æé')}</span>`; 5535 showNotification(reminderData.message || (window.L?.T ? window.L.T('home.reminderCanceled') : '已忶é¢çº¦'), 'success'); 5536 } else { 5537 btn.innerHTML = originalHtml; 5538 showNotification(reminderData.message || (window.L?.T ? window.L.T('home.cancelFailed') : 'åæ¶å¤±è´¥'), 'danger'); 5539 } 5540 } else { 5541 // å½åæ¯æªæ¿æ´»ç¶æï¼æ§è¡è®¢é æä½ 5542 reminderRes = await fetch('/api/match-reminders/sub
5542scribe', { 5543 method: 'POST', 5544 headers: { 5545 'Content-Type': 'application/json', 5546 'Accept-Language': window.__currentLang || 'vi' 5547 }, 5548 body: JSON.stringify({ 5549 fixtureId: parseInt(matchId), 5550 pushEndpoint: endpoint 5551 }) 5552 }); 5553 5554 reminderData = await reminderRes.json(); 5555 5556 if (reminderData.success) { 5557 btn.classList.add('active'); 5558 btn.innerHTML = isIconOnly 5559 ? `<i class="fas fa-bell-slash"></i>` 5560 : `<i class="fas fa-bell-slash"></i> <span>${btn.dataset.textCancel || (window.L?.T ? window.L.T('home.cancelReminder') : 'åæ¶é¢çº¦')}</span>`; 5561 showNotification(reminderData.message || (window.L?.T ? window.L.T('home.reminderSet') : 'é¢çº¦æå'), 'success'); 5562 } else { 5563 btn.innerHTML = originalHtml; 5564 showNotification(reminderData.message || (window.L?.T ? window.L.T('home.reminderFailed') : 'é¢çº¦å¤±è´¥'), 'danger'); 5565 } 5566 } 5567 5568 btn.disabled = false; 5569 5570 } catch (error) { 5571 console.error('[é¢çº¦æé] æä½å¤±è´¥:', error); 5572 // æ ¹æ®éè¯¯ç±»åæ¾ç¤ºä¸åçå¤è¯è¨æç¤º 5573 if (error.message && error.message.includes('Notification permission denied')) { 5574 showNotification(window.L?.T ? window.L.T('push.notificationDenied') : 'éç¥æé已被æç»ï¼è¯·å¨æµè§å¨è®¾ç½®ä¸å 许éç¥', 'warning'); 5575 } else { 5576 showNotification(window.L?.T ? window.L.T('common.operationFailed') : 'æä½å¤±è´¥ï¼è¯·ç¨åéè¯', 'danger'); 5577 } 5578 } 5579 }; 5580 5581 5582 // åå§åé¢çº¦æéæé®ç¶æ 5583 window.initReminderButtons = async () => { 5584 // console.log('[é¢çº¦æé] å¼å§åå§åæé®ç¶æ...'); 5585 5586 try { 5587 // åªè·åå¯è§çé¢çº¦æéæé® 5588 const buttons = document.querySelectorAll('.reminder-btn:not([style*="display: none"]):not([style*="display:none"]), .focus-reminder-btn'); 5589 if (buttons.length === 0) { 5590 // console.log('[é¢çº¦æé] æ²¡ææ¾å°å¯è§çé¢çº¦æéæé®'); 5591 return; 5592 } 5593 5594 // æ£æ¥æ¨é订é ç¶æ 5595 const registration = await navigator.serviceWorker.ready; 5596 const subscription = await registration.pushManager.getSubscription(); 5597 5598 if (!subscription) { 5599 // console.log('[é¢çº¦æé] ç¨æ·æªè®¢é æ¨éï¼è®¾ç½®é»è®¤ç¶æ'); 5600 buttons.forEach(btn => { 5601 const isIconOnly = btn.classList.contains('focus-reminder-btn'); 5602 btn.classList.remove('active'); 5603 btn.innerHTML = isIconOnly ? `<i class="fas fa-bell"></i>` : `<i class="fas fa-bell"></i> <span>${btn.dataset.textSet || 'é¢çº¦æé'}</span>`; 5604 }); 5605 return; 5606 } 5607 5608 // æ£æ¥å端订é ç¶æ 5609 const endpoint = subscription.endpoint; 5610 const res = await fetch(`/api/push/check-subscription?endpoint=${encodeURIComponent(endpoint)}`); 5611 const data = await res.json(); 5612 5613 if (!data.subscribed) { 5614 // console.log('[é¢çº¦æé] å端æªè®¢é ï¼è®¾ç½®é»è®¤ç¶æ'); 5615 buttons.forEach(btn => { 5616 const isIconOnly = btn.classList.contains('focus-reminder-btn'); 5617 btn.classList.remove('active'); 5618 btn.innerHTML = isIconOnly ? `<i class="fas fa-bell"></i>` : `<i class="fas fa-bell"></i> <span>${btn.dataset.textSet || 'é¢çº¦æé'}</span>`; 5619 }); 5620 return; 5621 } 5622 5623 // è·åå·²é¢çº¦çæ¯èµå表 5624 // console.log('[é¢çº¦æé] è·åå·²é¢çº¦å表...'); 5625 const listRes = await fetch(`/api/match-reminders/list?pushEndpoint=${encodeURIComponent(endpoint)}`); 5626 const listData = await listRes.json(); 5627 5628 if (listData.success && listData.reminders) { 5629 const subscribedIds = new Set(listData.reminders.map(r => r.fixtureId.toString())); 5630 // console.log('[é¢çº¦æé] å·²é¢çº¦æ¯èµID:', Array.from(subscribedIds)); 5631 5632 buttons.forEach(btn => {
5633 const matchId = btn.dataset.matchId; 5634 const isIconOnly = btn.classList.contains('focus-reminder-btn'); 5635 if (subscribedIds.has(matchId)) { 5636 btn.classList.add('active'); 5637 btn.innerHTML = isIconOnly ? `<i class="fas fa-bell-slash"></i>` : `<i class="fas fa-bell-slash"></i> <span>${btn.dataset.textCancel || 'åæ¶é¢çº¦'}</span>`; 5638 } else { 5639 btn.classList.remove('active'); 5640 btn.innerHTML = isIconOnly ? `<i class="fas fa-bell"></i>` : `<i class="fas fa-bell"></i> <span>${btn.dataset.textSet || 'é¢çº¦æé'}</span>`; 5641 } 5642 }); 5643 } 5644 5645 // console.log('[é¢çº¦æé] æé®ç¶æåå§å宿'); 5646 5647 } catch (error) { 5648 console.error('[é¢çº¦æé] åå§å失败:', error); 5649 } 5650 }; 5651 5652 // 鲿彿°ï¼é¿å é¢ç¹è§¦å 5653 let initTimeout = null; 5654 const debouncedInit = () => { 5655 if (initTimeout) { 5656 clearTimeout(initTimeout); 5657 } 5658 initTimeout = setTimeout(initReminderButtons, 300); 5659 }; 5660 5661 // 页é¢å è½½å®æååå§å 5662 if (document.readyState === 'loading') { 5663 document.addEventListener('DOMContentLoaded', debouncedInit); 5664 } else { 5665 debouncedInit(); 5666 } 5667 5668 // çå¬è¯è¨åæ¢ 5669 window.addEventListener('langChange', debouncedInit); 5670 5671 // çå¬ DOM ååï¼åªç嬿¯èµå表容å¨ï¼ 5672 const matchContainer = document.querySelector('.matches-container') || 5673 document.querySelector('.match-list') || 5674 document.querySelector('.fixtures-container') || 5675 document.querySelector('.today-matches'); 5676 5677 if (matchContainer) { 5678 const observer = new MutationObserver((mutations) => { 5679 // æ£æ¥æ¯å¦æé¢çº¦æéæé®è¢«æ·»å æä¿®æ¹ 5680 let hasReminderButtons = false; 5681 mutations.forEach(mutation => { 5682 if (mutation.addedNodes) { 5683 mutation.addedNodes.forEach(node => { 5684 if (node.nodeType === 1) { 5685 if (node.classList?.contains('reminder-btn') || 5686 node.querySelector?.('.reminder-btn')) { 5687 hasReminderButtons = true; 5688 } 5689 } 5690 }); 5691 } 5692 }); 5693 5694 if (hasReminderButtons) { 5695 debouncedInit(); 5696 } 5697 }); 5698 5699 observer.observe(matchContainer, { childList: true, subtree: true }); 5700 } 5701 </script>
5701 5702 5703 <!-- Visitor Tracking Script --> 5704
5704<script src="/js/tracker.js" defer></script>
5704 5705
5705<script src="/js/chat-visitor-id.js" defer></script>
5705 5706 5707 <!-- æ¶åºæ£æµï¼èªå¨å卿µè§å¨æ¶åºå° cookieï¼ä¾åç«¯ä½¿ç¨ --> 5708
5708<script> 5709 (function() { 5710 const TZ_COOKIE = 'tzOffset'; 5711 const tzOffset = -420; 5712 5713 // æ£æ¥ cookie æ¯å¦å·²åå¨ä¸å¼ç¸å 5714 const existingCookie = document.cookie.split('; ').find(c => c.startsWith(TZ_COOKIE + '=')); 5715 const existingValue = existingCookie ? parseInt(existingCookie.split('=')[1]) : null; 5716 5717 if (existingValue !== tzOffset) { 5718 // 设置 cookieï¼æææ 30 天ï¼å ¨ç«å¯ç¨ 5719 const expires = new Date(Date.now() + 30 * 24 * 60 * 60 * 1000).toUTCString(); 5720 document.cookie = `${TZ_COOKIE}=${tzOffset}; expires=${expires}; path=/; SameSite=Lax`; 5721 5722 // 妿æ¯é¦æ¬¡è®¾ç½®æ¶åºä¸å½å页颿¯"仿¥"ç¸å ³é¡µé¢ï¼å·æ°ä»¥åºç¨æ£ç¡®æ¶åº 5723 const isFirstVisit = existingValue === null; 5724 const isTodayPage = window.location.pathname.includes('/football/today') 5725 || window.location.pathname.includes('/matches/today') 5726 || (window.location.pathname === '/' && !window.location.search.includes('tzOffset')); 5727 5728 if (isFirstVisit && isTodayPage) { 5729 // 馿¬¡è®¿é®ä»æ¥é¡µé¢ï¼å·æ°ä»¥åºç¨æ¶åº 5730 window.location.reload(); 5731 } 5732 } 5733 })(); 5734 </script>
5734 5735 5736 <!-- PWA Service Worker Registration & Installation Prompt --> 5737
5737<script> 5738 (function() { 5739 'use strict'; 5740 5741 let deferredPrompt; 5742 5743 // Service Worker 注å - ç± sw-auto-update.js ç»ä¸ç®¡çï¼è¿éåªå¤çå¼åæ¨¡å¼ 5744 // ç产ç¯å¢ç SW 注ååæ´æ°ç± sw-auto-update.js å¤çï¼èªå¨é黿´æ°æ éç¨æ·ç¡®è®¤ 5745 if ('serviceWorker' in navigator && window.__isDevelopment === 'true') { 5746 console.log('[PWA] Development mode: Service Worker enabled with caching disabled.'); 5747 5748 // å¼å模å¼ä¸ä»ç¶æ³¨å Service Workerï¼ç¨äºæ¨ééç¥ï¼ï¼ä½ç¦ç¨ç¼å 5749 navigator.serviceWorker.register('/sw.js').then(function(registration) { 5750 console.log('[PWA] Service Worker registered in Development mode (no-cache version)'); 5751 5752 // æ¸ é¤ææç°æç¼å 5753 if ('caches' in window) { 5754 caches.keys().then(function(cacheNames) { 5755 return Promise.all( 5756 cacheNames.map(function(cacheName) { 5757 return caches.delete(cacheName); 5758 }) 5759 ); 5760 }).then(function() { 5761 console.log('[PWA] All caches cleared in Development mode'); 5762 }); 5763 } 5764 }).catch(function(error) { 5765 console.error('[PWA] Service Worker registration failed in Development mode:', error); 5766 }); 5767 } 5768 5769 // PWA å®è£ æç¤ºäºä»¶ï¼ä» ç¼å deferredPrompt ä¾é¡¶é¨æ¨ªå¹ 使ç¨ï¼ä¸åå¼¹åºæ§çåºé¨å®è£ æ¡ 5770 window.addEventListener('beforeinstallprompt', (e) => { 5771 console.log('[PWA] Install prompt captured for top banner'); 5772 e.preventDefault(); 5773 deferredPrompt = e; 5774 }); 5775 5776 // æ´æ°éç¥å·²ç§»é¤ - ç± sw-auto-update.js ç»ä¸å¤çé黿´æ° 5777 // æ éç¨æ·äº¤äºï¼çæ¬ååæ¶èªå¨å·æ°é¡µé¢ 5778 window.addEventListener('appinstalled', () => { 5779 console.log('[PWA] App installed successfully'); 5780 localStorage.setItem('pwa-installed', 'true'); 5781 if (typeof closePwaTopBanner === 'function') closePwaTopBanner(); 5782 }); 5783 5784 // ==================== 鲿¢æµè§å¨bfcacheï¼å¾è¿ç¼åï¼==================== 5785 // 鲿¢é¡µé¢è¿å ¥bfcacheï¼ç¡®ä¿ç¨æ·å ³éæ ç¾é¡µåæå¼æ¶ä¼éæ°å è½½ 5786 // 注æï¼ä¸å¨pageshowæ¶å¼ºå¶å·æ°ï¼é¿å 䏿æ£å¨è¿è¡çç´æ 5787 5788 // æ¹æ³1ï¼ä½¿ç¨ pagehide äºä»¶ï¼ç°ä»£æ¿ä»£æ¹æ¡ï¼æ¿ä»£å·²å¼ç¨ç unloadï¼ 5789 // pagehide äºä»¶å¨é¡µé¢éèæ¶è§¦åï¼å¯ä»¥é»æ¢ bfcache 5790 window.addEventListener('pagehide', function(event) { 5791 // 妿页é¢è¢«æ¾å ¥ bfcacheï¼event.persisted 为 true 5792 // éè¿æ§è¡ä¸äºæä½ï¼å¦åé beaconï¼å¯ä»¥é»æ¢ bfcache 5793 if (event.persisted) { 5794 console.log('[Cache] Page entering bfcache'); 5795 } 5796 }); 5797 5798 // æ¹æ³2ï¼ä½¿ç¨Cache-Control头ï¼å·²å¨metaæ ç¾ä¸è®¾ç½®ï¼ 5799 // æ¹æ³3ï¼æ£æµbfcacheæ¢å¤ï¼è®°å½æ¥å¿ä½ä¸å·æ° 5800 window.addEventListener('pageshow', function(event) { 5801 if (event.persisted) { 5802 console.log('[Cache] Page restored from bfcache'); 5803 // ä¸å·æ°é¡µé¢ï¼é¿å ä¸æç´æ 5804 // å¦æç¡®å®ä»bfcacheæ¢å¤ï¼é¡µé¢ç¶æåºè¯¥æ¯å®æ´ç 5805 // å¯ä»¥å¨è¿ééæ°åå§åéè¦çè¿æ¥ï¼å¦ SignalRï¼ 5806 } 5807 }); 5808 5809 // ç½ç»ç¶æçæ§ 5810 window.addEventListener('online', () => { 5811 console.log('[PWA] Back online'); 5812 // å¯ä»¥æ·»å éæ°è¿æ¥é»è¾ 5813 }); 5814 5815 window.addEventListener('offline', () => { 5816 console.log('[PWA] Gone offline'); 5817 // å¯ä»¥æ¾ç¤ºç¦»çº¿æç¤º 5818 }); 5819 5820 // ==================== PWA é¡¶é¨å®è£ æ¨ªå¹ (ç§»å¨ç«¯) ==================== 5821 function showPwaTopBanner() { 5822 const banner = document.getElementById('pwa-top-banner'); 5823 if (!banner) return; 5824 5825 // çæ£å·²å®è£ ï¼standalone模å¼ï¼â æ°¸ä¹ ä¸æ¾ç¤º 5826 if (window.matchMedia('(display-mode: standalone)').matches || window.navigator.standalone === true) return; 5827 // å·²éè¿å®è£ äºä»¶ç¡®è®¤å®è£ â æ°¸ä¹ 䏿¾ç¤º 5828 if (localStorage.getItem('pwa-installed') === 'true') return; 5829 // éç§»å¨ç«¯ â 䏿¾ç¤º 5830 if (window.innerWidth > 768) return; 5831 5832 banner.classList.remove('d-none'); 5833 } 5834 5835 window.closePwaTopBanner = function() { 5836 const banner = document.getElementById('pwa-top-banner'); 5837 if (banner) { 5838 banner.classList.add('d-none'); 5839 } 5840 // ä» æ¬æ¬¡é¡µé¢å ³éï¼å·æ°åéæ°æ¾ç¤º 5841 }; 5842 5843 window.installPwaFromBanner = async function() { 5844 if (deferredPrompt) { 5845 deferredPrompt.prompt(); 5846 const { outcome } = await deferredPrompt.userChoice; 5847 if (outcome === 'accepted') { 5848 localStorage.setItem('pwa-installed', 'true'); 5849 } 5850 deferredPrompt = null; 5851 closePwaTopBanner(); 5852 } else { 5853 // iOS / browsers without beforeinstallprompt 5854 // Site default Vietnamese; use i18n when ready 5855 const isIOS = /iPad|iPhone|iPod/.test(navigator.userAgent); 5856 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»'; 5857 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»';
5858 const key = isIOS ? 'seo.pwa.installGuideIos' : 'seo.pwa.installGuideAndroid'; 5859 const fallback = isIOS ? iosFallback : androidFallback; 5860 let msg = fallback; 5861 if (window.L?.T && window.i18n?.isReady?.()) { 5862 const translated = window.L.T(key); 5863 if (translated && translated !== key) msg = translated; 5864 } 5865 alert(msg); 5866 } 5867 }; 5868 5869 // 页é¢å è½½åæ¾ç¤ºæ¨ªå¹ 5870 if (document.readyState === 'loading') { 5871 document.addEventListener('DOMContentLoaded', showPwaTopBanner); 5872 } else { 5873 showPwaTopBanner(); 5874 } 5875 5876 })(); 5877 5878 // ==================== PWA 䏿巿°åè½ ==================== 5879 // Android åçæ¯æä¸æå·æ°ï¼iOS PWA éè¦èªå®ä¹å®ç° 5880 // å·²ç¦ç¨ - å¦éå¯ç¨è¯·åæ¶æ³¨é 5881 /* 5882 (function() { 5883 'use strict'; 5884 5885 // æ£æµæ¯å¦ä¸º iOS PWA æ¨¡å¼ 5886 const isIOSPWA = (window.navigator.standalone === true) || 5887 (window.matchMedia('(display-mode: standalone)').matches && /iPad|iPhone|iPod/.test(navigator.userAgent)); 5888 5889 // æ£æµæ¯å¦ä¸ºç§»å¨è®¾å¤ 5890 const isMobile = /Android|webOS|iPhone|iPad|iPod|BlackBerry|IEMobile|Opera Mini/i.test(navigator.userAgent); 5891 5892 // åªå¨ç§»å¨è®¾å¤ä¸å¯ç¨ä¸æå·æ° 5893 if (!isMobile) return; 5894 5895 let startY = 0; 5896 let currentY = 0; 5897 let pulling = false; 5898 let refreshThreshold = 120; // 触åå·æ°çéå¼ï¼åç´ ï¼ 5899 let maxPull = 160; // æå¤§ä¸æè·ç¦» 5900 let refreshIndicator = null; 5901 5902 // åå»ºå·æ°æç¤ºå¨ 5903 function createRefreshIndicator() { 5904 if (refreshIndicator) return; 5905 5906 refreshIndicator = document.createElement('div'); 5907 refreshIndicator.id = 'pwa-refresh-indicator'; 5908 const pullText = window.L?.T ? window.L.T('common.pullToRefresh') : '䏿巿°'; 5909 refreshIndicator.innerHTML = ` 5910 <div class="refresh-spinner"> 5911 <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> 5912 </div> 5913 <span class="refresh-text">${window.L?.T ? window.L.T('common.releaseToRefresh') : 'æ¾å¼å·æ°'}</span> 5914 `; 5915 refreshIndicator.style.cssText = ` 5916 position: fixed; 5917 top: 0; 5918 left: 50%; 5919 transform: translateX(-50%) translateY(-100%); 5920 background: transparent; 5921 color: #333; 5922 padding: 12px 24px; 5923 border-radius: 0 0 16px 16px; 5924 display: flex; 5925 align-items: center; 5926 gap: 10px; 5927 font-size: 14px; 5928 font-weight: 500; 5929 z-index: 10002; 5930 transition: transform 0.2s ease; 5931 box-shadow: none; 5932 `; 5933 5934 // æ·»å æ ·å¼ 5935 const style = document.createElement('style'); 5936 style.textContent = ` 5937 #pwa-refresh-indicator .refresh-spinner { 5938 display: flex; 5939 align-items: center; 5940 justify-content: center; 5941 } 5942 #pwa-refresh-indicator .refresh-spinner svg { 5943 width: 16px; 5944 height: 16px; 5945 transition: transform 0.3s ease; 5946 } 5947 #pwa-refresh-indicator .refresh-text { 5948 color: white !important; 5949 font-size: 14px; 5950 font-weight: 500; 5951 } 5952 #pwa-refresh-indicator.refreshing .refresh-spinner svg { 5953 animation: spin 1s linear infinite; 5954 } 5955 #pwa-refresh-indicator.ready .refresh-spinner svg { 5956 transform: rotate(180deg); 5957 } 5958 @keyframes spin { 5959 from { transform: rotate(0deg); } 5960 to { transform: rotate(360deg); } 5961 } 5962 `; 5963 document.head.appendChild(style); 5964 document.body.appendChild(refreshIndicator); 5965 } 5966 5967 // æ´æ°æç¤ºå¨ä½ç½®åç¶æ 5968 function updateIndicator(pullDistance, isReady) { 5969 if (!refreshIndicator) return; 5970 5971 const progress = Math.min(pullDistance / refreshThreshold, 1); 5972 const translateY = Math.min(pullDistance, maxPull) - 60; 5973 5974 refreshIndicator.style.transform = `translateX(-50%) translateY(${translateY}px)`; 5975 5976 if (isReady) { 5977 refreshIndicator.classList.add('ready'); 5978 refreshIndicator.classList.remove('refreshing'); 5979 } else { 5980 refreshIndicator.classList.remove('ready', 'refreshing'); 5981 } 5982 } 5983 5984 // å¼å§å·æ°å¨ç» 5985 function startRefresh() { 5986 if (!refreshIndicator) return; 5987 5988 refreshIndicator.classList.add('refreshing'); 5989 refreshIndicator.classList.remove('ready'); 5990 refreshIndicator.style.transform = 'translateX(-50%) translateY(10px)'; 5991 5992 // å»¶è¿åå·æ°é¡µé¢ 5993 setTimeout(() => { 5994 window.location.reload(); 5995 }, 500); 5996 } 5997 5998 // éç½®æç¤ºå¨ 5999 function resetIndicator() { 6000 if (!refreshIndicator) return; 6001 6002 refreshIndicator.style.transform = 'translateX(-50%) translateY(-100%)'; 6003 refreshIndicator.classList.remove('ready', 'refreshing'); 6004 } 6005 6006 // 触æ¸å¼å§ 6007 function handleTouchStart(e) { 6008 // åªå¨é¡µé¢é¡¶é¨æ¶å¯ç¨ä¸æå·æ° 6009 if (window.scrollY > 5) return; 6010 6011 // 忽ç¥å¨è¾å ¥æ¡ãè§é¢ææ¾å¨çå ç´ ä¸çè§¦æ¸ 6012 const target = e.target; 6013 if (target.tagName === 'INPUT' || target.tagName === 'TEXTAREA' || 6014 target.tagName === 'VIDEO' || target.closest('.live-player
6014-container') || 6015 target.closest('.chat-input-container')) { 6016 return; 6017 } 6018 6019 startY = e.touches[0].pageY; 6020 pulling = true; 6021 createRefreshIndicator(); 6022 } 6023 6024 // 触æ¸ç§»å¨ 6025 function handleTouchMove(e) { 6026 if (!pulling || window.scrollY > 5) { 6027 pulling = false; 6028 return; 6029 } 6030 6031 currentY = e.touches[0].pageY; 6032 const pullDistance = currentY - startY; 6033 6034 // åªå¤çå䏿å¨ï¼ä¸æå¨è·ç¦»è¶ è¿æå°éå¼ 6035 if (pullDistance > 10) { 6036 // iOS éè¦é»æ¢é»è®¤è¡ä¸ºä»¥å®ç°èªå®ä¹ä¸æ 6037 if (isIOSPWA) { 6038 e.preventDefault(); 6039 } 6040 6041 const isReady = pullDistance >= refreshThreshold; 6042 updateIndicator(pullDistance, isReady); 6043 } 6044 } 6045 6046 // 触æ¸ç»æ 6047 function handleTouchEnd(e) { 6048 if (!pulling) return; 6049 6050 const pullDistance = currentY - startY; 6051 6052 if (pullDistance >= refreshThreshold) { 6053 startRefresh(); 6054 } else { 6055 resetIndicator(); 6056 } 6057 6058 pulling = false; 6059 startY = 0; 6060 currentY = 0; 6061 } 6062 6063 // ç»å®äºä»¶ 6064 document.addEventListener('touchstart', handleTouchStart, { passive: true }); 6065 document.addEventListener('touchmove', handleTouchMove, { passive: false }); 6066 document.addEventListener('touchend', handleTouchEnd, { passive: true }); 6067 6068 console.log('[PWA] Pull-to-refresh enabled', isIOSPWA ? '(iOS PWA mode)' : ''); 6069 })(); 6070 */ 6071 6072 </script>
6072 6073 6074 6075 <!-- ç»å½/注åå¼¹çª --> 6076 <meta name="turnstile-sitekey" content="0x4AAAAAACejCwrxG0oAHrtT" style="display:none;" /> 6077 6078 6079 6080
6081<script> 6082// èèµæå /å±å¼ 6083function toggleLeague(btn) { 6084 const section = btn.closest('.lg-section'); 6085 const matches = section.querySelector('.lg-matches'); 6086 const useEl = btn.querySelector('use'); 6087 if (matches.style.display === 'none') { 6088 matches.style.display = ''; 6089 if (useEl) useEl.setAttribute('href', '#icon-chevron-up'); 6090 } else { 6091 matches.style.display = 'none'; 6092 if (useEl) useEl.setAttribute('href', '#icon-chevron-down'); 6093 } 6094} 6095 6096// æ¶èç¶æåå§åãSPA æ³¨å ¥æ¶ DOMContentLoaded å·²ç»è§¦åè¿ï¼æä»¥å·²å è½½åç«å»æ§è¡ã 6097function initMatchListSearch() { 6098 const page = document.querySelector('.match-list-page'); 6099 const input = document.getElementById('matchListSearch'); 6100 const clearBtn = document.getElementById('matchListSearchClear'); 6101 const empty = document.getElementById('matchListSearchEmpty'); 6102 if (!page || !input || input.dataset.bound === '1') return; 6103 input.dataset.bound = '1'; 6104 6105 function applyFilter() { 6106 const query = input.value.trim().toLowerCase(); 6107 if (clearBtn) clearBtn.hidden = query.length === 0; 6108 let visible = 0; 6109 6110 page.querySelectorAll('.mx-row').forEach(function (row) { 6111 const hay = (row.getAttribute('data-search') || '').toLowerCase(); 6112 const show = !query || hay.indexOf(query) !== -1; 6113 row.classList.toggle('is-search-hidden', !show); 6114 if (show) visible += 1; 6115 }); 6116 6117 page.querySelectorAll('.lg-section').forEach(function (section) { 6118 const any = section.querySelector('.mx-row:not(.is-search-hidden)'); 6119 section.classList.toggle('is-search-hidden', !any); 6120 section.classList.toggle('is-search-open', !!query && !!any); 6121 }); 6122 6123 page.querySelectorAll('.beauty-schedule-row').forEach(function (row) { 6124 const hay = (row.getAttribute('data-search') || '').toLowerCase(); 6125 const show = !query || hay.indexOf(query) !== -1; 6126 row.classList.toggle('is-search-hidden', !show); 6127 if (show) visible += 1; 6128 }); 6129 6130 page.querySelectorAll('.schedule-sport-section').forEach(function (section) { 6131 if (!section.querySelector('.beauty-schedule-row')) return; 6132 const any = section.querySelector('.beauty-schedule-row:not(.is-search-hidden)'); 6133 section.classList.toggle('is-search-hidden', !any); 6134 }); 6135 6136 page.querySelectorAll('.schedule-sport-title-inline').forEach(function (title) { 6137 const anySports = page.querySelector('.lg-section:not(.is-search-hidden)'); 6138 title.classList.toggle('is-search-hidden', !!query && !anySports); 6139 }); 6140 6141 page.querySelectorAll('.match-list-paging').forEach(function (el) { 6142 el.classList.toggle('is-search-hidden', query.length > 0); 6143 }); 6144 6145 if (empty) empty.hidden = !query || visible > 0; 6146 } 6147 6148 input.addEventListener('input', applyFilter); 6149 input.addEventListener('keydown', function (e) { 6150 if (e.key === 'Enter') e.preventDefault(); 6151 if (e.key === 'Escape') { 6152 input.value = ''; 6153 applyFilter(); 6154 } 6155 }); 6156 if (clearBtn) { 6157 clearBtn.addEventListener('click', function () { 6158 input.value = ''; 6159 applyFilter(); 6160 input.focus(); 6161 }); 6162 } 6163} 6164 6165function initMatchListPage() { 6166 initMatchListSearch(); 6167 const isAuth = 'false' === 'true'; 6168 if (!isAuth) return; 6169 6170 fetch('/profile/favorites/match-ids') 6171 .then(r => r.json()) 6172 .then(data => { 6173 if (!data || !data.success || !Array.isArray(data.ids)) return; 6174 const idSet = new Set(data.ids.map(x => String(x))); 6175 document.querySelectorAll('.favorite-btn[data-match-id]').forEach(btn => { 6176 const matchId = btn.getAttribute('data-match-id'); 6177 const isFavorited = idSet.has(String(matchId)); 6178 btn.classList.toggle('active', isFavorited); 6179 const useEl = btn.querySelector('use'); 6180 if (useEl) { 6181 useEl.setAttribute('href', isFavorited ? '#icon-star-filled' : '#icon-star'); 6182 } 6183 }); 6184 }) 6185 .catch(() => {}); 6186} 6187window.initMatchListPage = initMatchListPage; 6188if (document.readyState === 'loading') { 6189 document.addEventListener('DOMContentLoaded', initMatchListPage); 6190} else { 6191 initMatchListPage(); 6192} 6193</script>
6193 6194
6195<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>
6195 6196</body> 6197</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.