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=1791598902" /> 14 <link rel="apple-touch-icon" sizes="120x120" href="/images/pwa/apple-touch-icon-120x120.png?v=1791598902" /> 15 <link rel="apple-touch-icon" sizes="152x152" href="/images/pwa/apple-touch-icon-152x152.png?v=1791598902" /> 16 <link rel="apple-touch-icon" sizes="167x167" href="/images/pwa/apple-touch-icon-167x167.png?v=1791598902" /> 17 <link rel="apple-touch-icon" sizes="180x180" href="/images/pwa/apple-touch-icon-180x180.png?v=1791598902" /> 18 <link rel="icon" type="image/png" sizes="32x32" href="/images/favicon/favicon-32x32.png?v=1791598902" /> 19 <link rel="icon" type="image/png" sizes="16x16" href="/images/favicon/favicon-16x16.png?v=1791598902" /> 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=1791598902" /> 26 <link rel="shortcut icon" href="/images/favicon/favicon.ico?v=1791598902" /> 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 thi đấu bóng đá - Lịch phát sóng trực tiếp hôm nay | Xoigac TV</title> 40 41 <!-- SEO: åºæ¬å æ ç¾ --> 42 <meta name="description" content="Lịch thi đấu bóng đá đầy đủ các giải Ngoại hạng Anh, La Liga, Champions League, V-League. Cập nhật lịch phát sóng trực tiếp, đội hình ra sân và nhận định trước trận tại Xoigac TV." /> 43 <meta name="keywords" content="lịch thi đấu, lịch bóng đá, lịch trực tiếp" /> 44 45 <!-- SEO: Robots --> 46 <meta name="robots" content="index, follow" /> 47 48 <!-- SEO: Canonical URL --> 49 <link rel="canonical" href="https://xoigac.top/lich-thi-dau" id="canonicalUrl" /> 50 51 <!-- SEO: Open Graph --> 52 <meta property="og:type" content="website" /> 53 <meta property="og:title" content="Lịch thi đấu bóng đá - Lịch phát sóng trực tiếp hôm nay | Xoigac TV" /> 54 <meta property="og:description" content="Lịch thi đấu bóng đá đầy đủ các giải Ngoại hạng Anh, La Liga, Champions League, V-League. Cập nhật lịch phát sóng trực tiếp, đội hình ra sân và nhận định trước trận tại Xoigac TV." /> 55 <meta property="og:url" content="https://xoigac.top/lich-thi-dau" 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 thi đấu bóng đá - Lịch phát sóng trực tiếp hôm nay | Xoigac TV" /> 63 <meta name="twitter:description" content="Lịch thi đấu bóng đá đầy đủ các giải Ngoại hạng Anh, La Liga, Champions League, V-League. Cập nhật lịch phát sóng trực tiếp, đội hình ra sân và nhận định trước trận tại Xoigac TV." /> 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/lich-thi-dau" 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=%2Flich-thi-dau" 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=%2Flich-thi-dau" 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=%2Flich-thi-dau" 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=%2Flich-thi-dau" 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=%2Flich-thi-dau" 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=%2Flich-thi-dau" 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="CfDJ8IwpNTNw2w9OptYg9zhENLTk37n47dYR1CoJbuys_hkzAx2xwb1qC_bgSQR-HaR9z2otAOxwJp4MzYOR-xDFWvviMRBAj-u17hoMjT3gxD5XT2oLPPnIr4R2DvrfeoVUjXaq6BoRt5omke17sFbCNhY" /> 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 <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 sắp tới</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 "> 1942 Trận hôm nay 1943 </a> 1944 <a href="/lich-thi-dau" class="filter-pill active"> 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="scheduleCategorySelect">Lịch thi đấu bóng đá</label> 1960 <select id="scheduleCategorySelect" class="schedule-category-select js-custom-select" data-menu-align="end" onchange="window.location.href=this.value"> 1961 <option value="/lich-thi-dau" selected="selected">Lịch thi đấu bóng đá</option> 1962 <option value="/lich-thi-dau?category=basketball">Lịch thi đấu bóng rổ</option> 1963 <option value="/lich-thi-dau?category=beauty">Phát sóng giải trí</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="Liga II Romania"> 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">Romania:</span> 1981 <img src="/images/football/leagues/284.webp" 1982 alt="Liga II" 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">Liga II</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="Liga II Romania Cetatea Suceava Dumbrăviţa"> 1995 <div class="mx-left"> 1996 <button type="button" class="mx-fav-btn favorite-btn" 1997 data-match-id="336757" 1998 data-auth="false" 1999 onclick="event.preventDefault(); event.stopPropagation(); handleFavoriteClick(336757, 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-date">10/10</span> 2005 <span class="mx-time">15:00</span> 2006 </div> 2007 </div> 2008 2009 <div class="mx-center"> 2010 <a href="/cetatea-suceava-vs-dumbravita-id336757" class="mx-teams-link"> 2011 <div class="mx-team-row"> 2012 <img src="/images/football/teams/26674.webp" 2013 alt="Cetatea Suceava" class="mx-team-logo" loading="lazy" 2014 onerror="this.onerror=null; this.src='/images/placeholder-team.svg';"> 2015 <span class="mx-team-name">Cetatea Suceava</span> 2016 <span class="mx-score "> 2017 </span> 2018 </div> 2019 <div class="mx-team-row"> 2020 <img src="/images/football/teams/7469.webp" 2021 alt="Dumbrăviţa" class="mx-team-logo" loading="lazy" 2022 onerror="this.onerror=null; this.src='/images/placeholder-team.svg';"> 2023 <span class="mx-team-name">Dumbrăviţa</span> 2024 <span class="mx-score "> 2025 </span> 2026 </div> 2027 </a> 2028 </div> 2029 2030 <div class="mx-right "> 2031 <a href="/cetatea-suceava-vs-dumbravita-id336757" class="mx-action-btn preview-btn">Xem trước</a> 2032 </div> 2033 </div> 2034 <div class="mx-row " data-search="Liga II Romania Chindia Targoviste Concordia"> 2035 <div class="mx-left"> 2036 <button type="button" class="mx-fav-btn favorite-btn" 2037 data-match-id="336758" 2038 data-auth="false" 2039 onclick="event.preventDefault(); event.stopPropagation(); handleFavoriteClick(336758, this);" 2040 aria-label="Thêm vào yêu thích"> 2041 <svg class="icon icon-fav"><use href="#icon-star"/></svg> 2042 </button> 2043 <div class="mx-status"> 2044 <span class="mx-date">10/10</span> 2045 <span class="mx-time">15:00</span> 2046 </div> 2047 </div> 2048 2049 <div class="mx-center"> 2050 <a href="/chindia-targoviste-vs-concordia-id336758" class="mx-teams-link"> 2051 <div class="mx-team-row"> 2052 <img src="/images/football/teams/2586.webp" 2053 alt="Chindia Targoviste" class="mx-team-logo" loading="lazy" 2054 onerror="this.onerror=null; this.src='/images/placeholder-team.svg';"> 2055 <span class="mx-team-name">Chindia Targoviste</span> 2056 <span class="mx-score "> 2057 </span> 2058 </div> 2059 <div class="mx-team-row"> 2060 <img src="/images/football/teams/2580.webp" 2061 alt="Concordia" class="mx-team-logo" loading="lazy" 2062 onerror="this.onerror=null; this.src='/images/placeholder-team.svg';"> 2063 <span class="mx-team-name">Concordia</span> 2064 <span class="mx-score "> 2065 </span> 2066 </div> 2067 </a> 2068 </div> 2069 2070 <div class="mx-right "> 2071 <a href="/chindia-targoviste-vs-concordia-id336758" class="mx-action-btn preview-btn">Xem trước</a> 2072 </div> 2073 </div> 2074 <div class="mx-row " data-search="Liga II Romania Gloria Bistriţa CSM Ramnicu Valcea"> 2075 <div class="mx-left"> 2076 <button type="button" class="mx-fav-btn favorite-btn" 2077 data-match-id="336761" 2078 data-auth="false" 2079 onclick="event.preventDefault(); event.stopPropagation(); handleFavoriteClick(336761, this);" 2080 aria-label="Thêm vào yêu thích"> 2081 <svg class="icon icon-fav"><use href="#icon-star"/></svg> 2082 </button> 2083 <div class="mx-status">
2084 <span class="mx-date">10/10</span> 2085 <span class="mx-time">15:00</span> 2086 </div> 2087 </div> 2088 2089 <div class="mx-center"> 2090 <a href="/gloria-bistrita-vs-csm-ramnicu-valcea-id336761" class="mx-teams-link"> 2091 <div class="mx-team-row"> 2092 <img src="/images/football/teams/22824.webp" 2093 alt="Gloria Bistriţa" class="mx-team-logo" loading="lazy" 2094 onerror="this.onerror=null; this.src='/images/placeholder-team.svg';"> 2095 <span class="mx-team-name">Gloria Bistriţa</span> 2096 <span class="mx-score "> 2097 </span> 2098 </div> 2099 <div class="mx-team-row"> 2100 <img src="/images/football/teams/2616.webp" 2101 alt="CSM Ramnicu Valcea" class="mx-team-logo" loading="lazy" 2102 onerror="this.onerror=null; this.src='/images/placeholder-team.svg';"> 2103 <span class="mx-team-name">CSM Ramnicu Valcea</span> 2104 <span class="mx-score "> 2105 </span> 2106 </div> 2107 </a> 2108 </div> 2109 2110 <div class="mx-right "> 2111 <a href="/gloria-bistrita-vs-csm-ramnicu-valcea-id336761" class="mx-action-btn preview-btn">Xem trước</a> 2112 </div> 2113 </div> 2114 <div class="mx-row " data-search="Liga II Romania Metaloglobus Popești-Leordeni"> 2115 <div class="mx-left"> 2116 <button type="button" class="mx-fav-btn favorite-btn" 2117 data-match-id="336762" 2118 data-auth="false" 2119 onclick="event.preventDefault(); event.stopPropagation(); handleFavoriteClick(336762, this);" 2120 aria-label="Thêm vào yêu thích"> 2121 <svg class="icon icon-fav"><use href="#icon-star"/></svg> 2122 </button> 2123 <div class="mx-status"> 2124 <span class="mx-date">10/10</span> 2125 <span class="mx-time">15:00</span> 2126 </div> 2127 </div> 2128 2129 <div class="mx-center"> 2130 <a href="/metaloglobus-vs-popesti-leordeni-id336762" class="mx-teams-link"> 2131 <div class="mx-team-row"> 2132 <img src="/images/football/teams/2604.webp" 2133 alt="Metaloglobus" class="mx-team-logo" loading="lazy" 2134 onerror="this.onerror=null; this.src='/images/placeholder-team.svg';"> 2135 <span class="mx-team-name">Metaloglobus</span> 2136 <span class="mx-score "> 2137 </span> 2138 </div> 2139 <div class="mx-team-row"> 2140 <img src="/images/football/teams/6891.webp" 2141 alt="Popești-Leordeni" class="mx-team-logo" loading="lazy" 2142 onerror="this.onerror=null; this.src='/images/placeholder-team.svg';"> 2143 <span class="mx-team-name">Popești-Leordeni</span> 2144 <span class="mx-score "> 2145 </span> 2146 </div> 2147 </a> 2148 </div> 2149 2150 <div class="mx-right "> 2151 <a href="/metaloglobus-vs-popesti-leordeni-id336762" class="mx-action-btn preview-btn">Xem trước</a> 2152 </div> 2153 </div> 2154 <div class="mx-row " data-search="Liga II Romania Metalul Buzău ASA Targu Mures"> 2155 <div class="mx-left"> 2156 <button type="button" class="mx-fav-btn favorite-btn" 2157 data-match-id="336763" 2158 data-auth="false" 2159 onclick="event.preventDefault(); event.stopPropagation(); handleFavoriteClick(336763, this);" 2160 aria-label="Thêm vào yêu thích"> 2161 <svg class="icon icon-fav"><use href="#icon-star"/></svg> 2162 </button> 2163 <div class="mx-status">
2164 <span class="mx-date">10/10</span> 2165 <span class="mx-time">15:00</span> 2166 </div> 2167 </div> 2168 2169 <div class="mx-center"> 2170 <a href="/metalul-buzau-vs-asa-targu-mures-id336763" class="mx-teams-link"> 2171 <div class="mx-team-row"> 2172 <img src="/images/football/teams/6875.webp" 2173 alt="Metalul Buzău" class="mx-team-logo" loading="lazy" 2174 onerror="this.onerror=null; this.src='/images/placeholder-team.svg';"> 2175 <span class="mx-team-name">Metalul Buzău</span> 2176 <span class="mx-score "> 2177 </span> 2178 </div> 2179 <div class="mx-team-row"> 2180 <img src="/images/football/teams/2590.webp" 2181 alt="ASA Targu Mures" class="mx-team-logo" loading="lazy" 2182 onerror="this.onerror=null; this.src='/images/placeholder-team.svg';"> 2183 <span class="mx-team-name">ASA Targu Mures</span> 2184 <span class="mx-score "> 2185 </span> 2186 </div> 2187 </a> 2188 </div> 2189 2190 <div class="mx-right "> 2191 <a href="/metalul-buzau-vs-asa-targu-mures-id336763" class="mx-action-btn preview-btn">Xem trước</a> 2192 </div> 2193 </div> 2194 <div class="mx-row " data-search="Liga II Romania Viitorul Şelimbăr Unirea Slobozia"> 2195 <div class="mx-left"> 2196 <button type="button" class="mx-fav-btn favorite-btn" 2197 data-match-id="336765" 2198 data-auth="false" 2199 onclick="event.preventDefault(); event.stopPropagation(); handleFavoriteClick(336765, this);" 2200 aria-label="Thêm vào yêu thích"> 2201 <svg class="icon icon-fav"><use href="#icon-star"/></svg> 2202 </button> 2203 <div class="mx-status"> 2204 <span class="mx-date">10/10</span> 2205 <span class="mx-time">15:00</span> 2206 </div> 2207 </div> 2208 2209 <div class="mx-center"> 2210 <a href="/viitorul-selimbar-vs-unirea-slobozia-id336765" class="mx-teams-link"> 2211 <div class="mx-team-row"> 2212 <img src="/images/football/teams/6927.webp" 2213 alt="Viitorul Şelimbăr" class="mx-team-logo" loading="lazy" 2214 onerror="this.onerror=null; this.src='/images/placeholder-team.svg';"> 2215 <span class="mx-team-name">Viitorul Şelimbăr</span> 2216 <span class="mx-score "> 2217 </span> 2218 </div> 2219 <div class="mx-team-row"> 2220 <img src="/images/football/teams/6916.webp" 2221 alt="Unirea Slobozia" class="mx-team-logo" loading="lazy" 2222 onerror="this.onerror=null; this.src='/images/placeholder-team.svg';"> 2223 <span class="mx-team-name">Unirea Slobozia</span> 2224 <span class="mx-score "> 2225 </span> 2226 </div> 2227 </a> 2228 </div> 2229 2230 <div class="mx-right "> 2231 <a href="/viitorul-selimbar-vs-unirea-slobozia-id336765" class="mx-action-btn preview-btn">Xem trước</a> 2232 </div> 2233 </div> 2234 <div class="mx-row " data-search="Liga II Romania CS Dinamo București CSM Satu Mare"> 2235 <div class="mx-left"> 2236 <button type="button" class="mx-fav-btn favorite-btn" 2237 data-match-id="336768" 2238 data-auth="false" 2239 onclick="event.preventDefault(); event.stopPropagation(); handleFavoriteClick(336768, this);" 2240 aria-label="Thêm vào yêu thích"> 2241 <svg class="icon icon-fav"><use href="#icon-star"/></svg> 2242 </button> 2243 <div class="mx-status">
2244 <span class="mx-date">10/10</span> 2245 <span class="mx-time">15:00</span> 2246 </div> 2247 </div> 2248 2249 <div class="mx-center"> 2250 <a href="/cs-dinamo-bucuresti-vs-csm-satu-mare-id336768" class="mx-teams-link"> 2251 <div class="mx-team-row"> 2252 <img src="/images/football/teams/19170.webp" 2253 alt="CS Dinamo București" class="mx-team-logo" loading="lazy" 2254 onerror="this.onerror=null; this.src='/images/placeholder-team.svg';"> 2255 <span class="mx-team-name">CS Dinamo București</span> 2256 <span class="mx-score "> 2257 </span> 2258 </div> 2259 <div class="mx-team-row"> 2260 <img src="/images/football/teams/16279.webp" 2261 alt="CSM Satu Mare" class="mx-team-logo" loading="lazy" 2262 onerror="this.onerror=null; this.src='/images/placeholder-team.svg';"> 2263 <span class="mx-team-name">CSM Satu Mare</span> 2264 <span class="mx-score "> 2265 </span> 2266 </div> 2267 </a> 2268 </div> 2269 2270 <div class="mx-right "> 2271 <a href="/cs-dinamo-bucuresti-vs-csm-satu-mare-id336768" class="mx-action-btn preview-btn">Xem trước</a> 2272 </div> 2273 </div> 2274 </div> 2275 </div> 2276 <div class="lg-section" data-search="J2 League Japan"> 2277 <div class="lg-header"> 2278 <div class="lg-header-left"> 2279 <button type="button" class="lg-fav-btn" aria-label="Pin league"> 2280 <svg class="icon"><use href="#icon-star"/></svg> 2281 </button> 2282 <span class="lg-country-name">Japan:</span> 2283 <img src="/images/football/leagues/99.webp" 2284 alt="J2 League" class="lg-logo" loading="lazy" 2285 onerror="if(!this.dataset.fallback){this.src='/images/placeholder-league.svg';this.dataset.fallback='true';}"> 2286 <span class="lg-name">J2 League</span> 2287 </div> 2288 <div class="lg-header-right"> 2289 <button type="button" class="lg-collapse-btn" onclick="toggleLeague(this)" aria-label="Toggle"> 2290 <svg class="icon icon-collapse"><use href="#icon-chevron-up"/></svg> 2291 </button> 2292 </div> 2293 </div> 2294 2295 <div class="lg-matches"> 2296 <div class="mx-row " data-search="J2 League Japan Yokohama FC Oita Trinita"> 2297 <div class="mx-left"> 2298 <button type="button" class="mx-fav-btn favorite-btn" 2299 data-match-id="336745" 2300 data-auth="false" 2301 onclick="event.preventDefault(); event.stopPropagation(); handleFavoriteClick(336745, this);" 2302 aria-label="Thêm vào yêu thích"> 2303 <svg class="icon icon-fav"><use href="#icon-star"/></svg> 2304 </button> 2305 <div class="mx-status"> 2306 <span class="mx-date">10/10</span> 2307 <span class="mx-time">12:00</span> 2308 </div> 2309 </div> 2310 2311 <div class="mx-center"> 2312 <a href="/yokohama-fc-vs-oita-trinita-id336745" class="mx-teams-link"> 2313 <div class="mx-team-row"> 2314 <img src="/images/football/teams/307.webp" 2315 alt="Yokohama FC" class="mx-team-logo" loading="lazy" 2316 onerror="this.onerror=null; this.src='/images/placeholder-team.svg';">
2317 <span class="mx-team-name">Yokohama FC</span> 2318 <span class="mx-score "> 2319 </span> 2320 </div> 2321 <div class="mx-team-row"> 2322 <img src="/images/football/teams/298.webp" 2323 alt="Oita Trinita" class="mx-team-logo" loading="lazy" 2324 onerror="this.onerror=null; this.src='/images/placeholder-team.svg';"> 2325 <span class="mx-team-name">Oita Trinita</span> 2326 <span class="mx-score "> 2327 </span> 2328 </div> 2329 </a> 2330 </div> 2331 2332 <div class="mx-right "> 2333 <a href="/yokohama-fc-vs-oita-trinita-id336745" class="mx-action-btn preview-btn">Xem trước</a> 2334 </div> 2335 </div> 2336 <div class="mx-row " data-search="J2 League Japan Tokushima Vortis Imabari"> 2337 <div class="mx-left"> 2338 <button type="button" class="mx-fav-btn favorite-btn" 2339 data-match-id="336746" 2340 data-auth="false" 2341 onclick="event.preventDefault(); event.stopPropagation(); handleFavoriteClick(336746, this);" 2342 aria-label="Thêm vào yêu thích"> 2343 <svg class="icon icon-fav"><use href="#icon-star"/></svg> 2344 </button> 2345 <div class="mx-status"> 2346 <span class="mx-date">10/10</span> 2347 <span class="mx-time">12:00</span> 2348 </div> 2349 </div> 2350 2351 <div class="mx-center"> 2352 <a href="/tokushima-vortis-vs-imabari-id336746" class="mx-teams-link"> 2353 <div class="mx-team-row"> 2354 <img src="/images/football/teams/299.webp" 2355 alt="Tokushima Vortis" class="mx-team-logo" loading="lazy" 2356 onerror="this.onerror=null; this.src='/images/placeholder-team.svg';"> 2357 <span class="mx-team-name">Tokushima Vortis</span> 2358 <span class="mx-score "> 2359 </span> 2360 </div> 2361 <div class="mx-team-row"> 2362 <img src="/images/football/teams/10075.webp" 2363 alt="Imabari" class="mx-team-logo" loading="lazy" 2364 onerror="this.onerror=null; this.src='/images/placeholder-team.svg';"> 2365 <span class="mx-team-name">Imabari</span> 2366 <span class="mx-score "> 2367 </span> 2368 </div> 2369 </a> 2370 </div> 2371 2372 <div class="mx-right "> 2373 <a href="/tokushima-vortis-vs-imabari-id336746" class="mx-action-btn preview-btn">Xem trước</a> 2374 </div> 2375 </div> 2376 <div class="mx-row " data-search="J2 League Japan Omiya Ardija Vanraure Hachinohe"> 2377 <div class="mx-left"> 2378 <button type="button" class="mx-fav-btn favorite-btn" 2379 data-match-id="336747" 2380 data-auth="false" 2381 onclick="event.preventDefault(); event.stopPropagation(); handleFavoriteClick(336747, this);" 2382 aria-label="Thêm vào yêu thích"> 2383 <svg class="icon icon-fav"><use href="#icon-star"/></svg> 2384 </button> 2385 <div class="mx-status">
2386 <span class="mx-date">10/10</span> 2387 <span class="mx-time">12:00</span> 2388 </div> 2389 </div> 2390 2391 <div class="mx-center"> 2392 <a href="/omiya-ardija-vs-vanraure-hachinohe-id336747" class="mx-teams-link"> 2393 <div class="mx-team-row"> 2394 <img src="/images/football/teams/313.webp" 2395 alt="Omiya Ardija" class="mx-team-logo" loading="lazy" 2396 onerror="this.onerror=null; this.src='/images/placeholder-team.svg';"> 2397 <span class="mx-team-name">Omiya Ardija</span> 2398 <span class="mx-score "> 2399 </span> 2400 </div> 2401 <div class="mx-team-row"> 2402 <img src="/images/football/teams/4326.webp" 2403 alt="Vanraure Hachinohe" class="mx-team-logo" loading="lazy" 2404 onerror="this.onerror=null; this.src='/images/placeholder-team.svg';"> 2405 <span class="mx-team-name">Vanraure Hachinohe</span> 2406 <span class="mx-score "> 2407 </span> 2408 </div> 2409 </a> 2410 </div> 2411 2412 <div class="mx-right "> 2413 <a href="/omiya-ardija-vs-vanraure-hachinohe-id336747" class="mx-action-btn preview-btn">Xem trước</a> 2414 </div> 2415 </div> 2416 <div class="mx-row " data-search="J2 League Japan Sagan Tosu Fujieda MYFC"> 2417 <div class="mx-left"> 2418 <button type="button" class="mx-fav-btn favorite-btn" 2419 data-match-id="336748" 2420 data-auth="false" 2421 onclick="event.preventDefault(); event.stopPropagation(); handleFavoriteClick(336748, this);" 2422 aria-label="Thêm vào yêu thích"> 2423 <svg class="icon icon-fav"><use href="#icon-star"/></svg> 2424 </button> 2425 <div class="mx-status"> 2426 <span class="mx-date">10/10</span> 2427 <span class="mx-time">12:00</span> 2428 </div> 2429 </div> 2430 2431 <div class="mx-center"> 2432 <a href="/sagan-tosu-vs-fujieda-myfc-id336748" class="mx-teams-link"> 2433 <div class="mx-team-row"> 2434 <img src="/images/football/teams/295.webp" 2435 alt="Sagan Tosu" class="mx-team-logo" loading="lazy" 2436 onerror="this.onerror=null; this.src='/images/placeholder-team.svg';"> 2437 <span class="mx-team-name">Sagan Tosu</span> 2438 <span class="mx-score "> 2439 </span> 2440 </div> 2441 <div class="mx-team-row"> 2442 <img src="/images/football/teams/4317.webp" 2443 alt="Fujieda MYFC" class="mx-team-logo" loading="lazy" 2444 onerror="this.onerror=null; this.src='/images/placeholder-team.svg';"> 2445 <span class="mx-team-name">Fujieda MYFC</span> 2446 <span class="mx-score "> 2447 </span> 2448 </div> 2449 </a> 2450 </div> 2451 2452 <div class="mx-right "> 2453 <a href="/sagan-tosu-vs-fujieda-myfc-id336748" class="mx-action-btn preview-btn">Xem trước</a> 2454 </div> 2455 </div> 2456 <div class="mx-row " data-search="J2 League Japan Ventforet Kofu Tochigi City"> 2457 <div class="mx-left"> 2458 <button type="button" class="mx-fav-btn favorite-btn" 2459 data-match-id="336752" 2460 data-auth="false" 2461 onclick="event.preventDefault(); event.stopPropagation(); handleFavoriteClick(336752, this);" 2462 aria-label="Thêm vào yêu thích"> 2463 <svg class="icon icon-fav"><use href="#icon-star"/></svg> 2464 </button> 2465 <div class="mx-status">
2466 <span class="mx-date">10/10</span> 2467 <span class="mx-time">14:00</span> 2468 </div> 2469 </div> 2470 2471 <div class="mx-center"> 2472 <a href="/ventforet-kofu-vs-tochigi-city-id336752" class="mx-teams-link"> 2473 <div class="mx-team-row"> 2474 <img src="/images/football/teams/308.webp" 2475 alt="Ventforet Kofu" class="mx-team-logo" loading="lazy" 2476 onerror="this.onerror=null; this.src='/images/placeholder-team.svg';"> 2477 <span class="mx-team-name">Ventforet Kofu</span> 2478 <span class="mx-score "> 2479 </span> 2480 </div> 2481 <div class="mx-team-row"> 2482 <img src="/images/football/teams/7145.webp" 2483 alt="Tochigi City" class="mx-team-logo" loading="lazy" 2484 onerror="this.onerror=null; this.src='/images/placeholder-team.svg';"> 2485 <span class="mx-team-name">Tochigi City</span> 2486 <span class="mx-score "> 2487 </span> 2488 </div> 2489 </a> 2490 </div> 2491 2492 <div class="mx-right "> 2493 <a href="/ventforet-kofu-vs-tochigi-city-id336752" class="mx-action-btn preview-btn">Xem trước</a> 2494 </div> 2495 </div> 2496 </div> 2497 </div> 2498 <div class="lg-section" data-search="K League 2 South-Korea"> 2499 <div class="lg-header"> 2500 <div class="lg-header-left"> 2501 <button type="button" class="lg-fav-btn" aria-label="Pin league"> 2502 <svg class="icon"><use href="#icon-star"/></svg> 2503 </button> 2504 <span class="lg-country-name">South-Korea:</span> 2505 <img src="/images/football/leagues/293.webp" 2506 alt="K League 2" class="lg-logo" loading="lazy" 2507 onerror="if(!this.dataset.fallback){this.src='/images/placeholder-league.svg';this.dataset.fallback='true';}"> 2508 <span class="lg-name">K League 2</span> 2509 </div> 2510 <div class="lg-header-right"> 2511 <button type="button" class="lg-collapse-btn" onclick="toggleLeague(this)" aria-label="Toggle"> 2512 <svg class="icon icon-collapse"><use href="#icon-chevron-up"/></svg> 2513 </button> 2514 </div> 2515 </div> 2516 2517 <div class="lg-matches"> 2518 <div class="mx-row " data-search="K League 2 South-Korea Jeonnam Dragons Yongin City"> 2519 <div class="mx-left"> 2520 <button type="button" class="mx-fav-btn favorite-btn" 2521 data-match-id="336735" 2522 data-auth="false" 2523 onclick="event.preventDefault(); event.stopPropagation(); handleFavoriteClick(336735, this);" 2524 aria-label="Thêm vào yêu thích"> 2525 <svg class="icon icon-fav"><use href="#icon-star"/></svg> 2526 </button> 2527 <div class="mx-status"> 2528 <span class="mx-date">10/10</span> 2529 <span class="mx-time">12:00</span> 2530 </div> 2531 </div> 2532 2533 <div class="mx-center"> 2534 <a href="/jeonnam-dragons-vs-yongin-city-id336735" class="mx-teams-link"> 2535 <div class="mx-team-row"> 2536 <img src="/images/football/teams/2760.webp" 2537 alt="Jeonnam Dragons" class="mx-team-logo" loading="lazy" 2538 onerror="this.onerror=null; this.src='/images/placeholder-team.svg';">
2539 <span class="mx-team-name">Jeonnam Dragons</span> 2540 <span class="mx-score "> 2541 </span> 2542 </div> 2543 <div class="mx-team-row"> 2544 <img src="/images/football/teams/9171.webp" 2545 alt="Yongin City" class="mx-team-logo" loading="lazy" 2546 onerror="this.onerror=null; this.src='/images/placeholder-team.svg';"> 2547 <span class="mx-team-name">Yongin City</span> 2548 <span class="mx-score "> 2549 </span> 2550 </div> 2551 </a> 2552 </div> 2553 2554 <div class="mx-right "> 2555 <a href="/jeonnam-dragons-vs-yongin-city-id336735" class="mx-action-btn preview-btn">Xem trước</a> 2556 </div> 2557 </div> 2558 <div class="mx-row " data-search="K League 2 South-Korea Paju Citizen Busan I Park"> 2559 <div class="mx-left"> 2560 <button type="button" class="mx-fav-btn favorite-btn" 2561 data-match-id="336736" 2562 data-auth="false" 2563 onclick="event.preventDefault(); event.stopPropagation(); handleFavoriteClick(336736, this);" 2564 aria-label="Thêm vào yêu thích"> 2565 <svg class="icon icon-fav"><use href="#icon-star"/></svg> 2566 </button> 2567 <div class="mx-status"> 2568 <span class="mx-date">10/10</span> 2569 <span class="mx-time">12:00</span> 2570 </div> 2571 </div> 2572 2573 <div class="mx-center"> 2574 <a href="/paju-citizen-vs-busan-i-park-id336736" class="mx-teams-link"> 2575 <div class="mx-team-row"> 2576 <img src="/images/football/teams/7098.webp" 2577 alt="Paju Citizen" class="mx-team-logo" loading="lazy" 2578 onerror="this.onerror=null; this.src='/images/placeholder-team.svg';"> 2579 <span class="mx-team-name">Paju Citizen</span> 2580 <span class="mx-score "> 2581 </span> 2582 </div> 2583 <div class="mx-team-row"> 2584 <img src="/images/football/teams/2752.webp" 2585 alt="Busan I Park" class="mx-team-logo" loading="lazy" 2586 onerror="this.onerror=null; this.src='/images/placeholder-team.svg';"> 2587 <span class="mx-team-name">Busan I Park</span> 2588 <span class="mx-score "> 2589 </span> 2590 </div> 2591 </a> 2592 </div> 2593 2594 <div class="mx-right "> 2595 <a href="/paju-citizen-vs-busan-i-park-id336736" class="mx-action-btn preview-btn">Xem trước</a> 2596 </div> 2597 </div> 2598 <div class="mx-row " data-search="K League 2 South-Korea Cheonan City Gyeongnam FC"> 2599 <div class="mx-left"> 2600 <button type="button" class="mx-fav-btn favorite-btn" 2601 data-match-id="336754" 2602 data-auth="false" 2603 onclick="event.preventDefault(); event.stopPropagation(); handleFavoriteClick(336754, this);" 2604 aria-label="Thêm vào yêu thích"> 2605 <svg class="icon icon-fav"><use href="#icon-star"/></svg> 2606 </button> 2607 <div class="mx-status">
2608 <span class="mx-date">10/10</span> 2609 <span class="mx-time">14:30</span> 2610 </div> 2611 </div> 2612 2613 <div class="mx-center"> 2614 <a href="/cheonan-city-vs-gyeongnam-fc-id336754" class="mx-teams-link"> 2615 <div class="mx-team-row"> 2616 <img src="/images/football/teams/7060.webp" 2617 alt="Cheonan City" class="mx-team-logo" loading="lazy" 2618 onerror="this.onerror=null; this.src='/images/placeholder-team.svg';"> 2619 <span class="mx-team-name">Cheonan City</span> 2620 <span class="mx-score "> 2621 </span> 2622 </div> 2623 <div class="mx-team-row"> 2624 <img src="/images/football/teams/2751.webp" 2625 alt="Gyeongnam FC" class="mx-team-logo" loading="lazy" 2626 onerror="this.onerror=null; this.src='/images/placeholder-team.svg';"> 2627 <span class="mx-team-name">Gyeongnam FC</span> 2628 <span class="mx-score "> 2629 </span> 2630 </div> 2631 </a> 2632 </div> 2633 2634 <div class="mx-right "> 2635 <a href="/cheonan-city-vs-gyeongnam-fc-id336754" class="mx-action-btn preview-btn">Xem trước</a> 2636 </div> 2637 </div> 2638 <div class="mx-row " data-search="K League 2 South-Korea Gimhae City Asan Mugunghwa"> 2639 <div class="mx-left"> 2640 <button type="button" class="mx-fav-btn favorite-btn" 2641 data-match-id="336755" 2642 data-auth="false" 2643 onclick="event.preventDefault(); event.stopPropagation(); handleFavoriteClick(336755, this);" 2644 aria-label="Thêm vào yêu thích"> 2645 <svg class="icon icon-fav"><use href="#icon-star"/></svg> 2646 </button> 2647 <div class="mx-status"> 2648 <span class="mx-date">10/10</span> 2649 <span class="mx-time">14:30</span> 2650 </div> 2651 </div> 2652 2653 <div class="mx-center"> 2654 <a href="/gimhae-city-vs-asan-mugunghwa-id336755" class="mx-teams-link"> 2655 <div class="mx-team-row"> 2656 <img src="/images/football/teams/7076.webp" 2657 alt="Gimhae City" class="mx-team-logo" loading="lazy" 2658 onerror="this.onerror=null; this.src='/images/placeholder-team.svg';"> 2659 <span class="mx-team-name">Gimhae City</span> 2660 <span class="mx-score "> 2661 </span> 2662 </div> 2663 <div class="mx-team-row"> 2664 <img src="/images/football/teams/2753.webp" 2665 alt="Asan Mugunghwa" class="mx-team-logo" loading="lazy" 2666 onerror="this.onerror=null; this.src='/images/placeholder-team.svg';"> 2667 <span class="mx-team-name">Asan Mugunghwa</span> 2668 <span class="mx-score "> 2669 </span> 2670 </div> 2671 </a> 2672 </div> 2673 2674 <div class="mx-right "> 2675 <a href="/gimhae-city-vs-asan-mugunghwa-id336755" class="mx-action-btn preview-btn">Xem trước</a> 2676 </div> 2677 </div> 2678 </div> 2679 </div> 2680 <div class="lg-section" data-search="J3 League Japan"> 2681 <div class="lg-header"> 2682 <div class="lg-header-left"> 2683 <button type="button" class="lg-fav-btn" aria-label="Pin league"> 2684 <svg class="icon"><use href="#icon-star"/></svg> 2685 </button>
2686 <span class="lg-country-name">Japan:</span> 2687 <img src="/images/football/leagues/100.webp" 2688 alt="J3 League" class="lg-logo" loading="lazy" 2689 onerror="if(!this.dataset.fallback){this.src='/images/placeholder-league.svg';this.dataset.fallback='true';}"> 2690 <span class="lg-name">J3 League</span> 2691 </div> 2692 <div class="lg-header-right"> 2693 <button type="button" class="lg-collapse-btn" onclick="toggleLeague(this)" aria-label="Toggle"> 2694 <svg class="icon icon-collapse"><use href="#icon-chevron-up"/></svg> 2695 </button> 2696 </div> 2697 </div> 2698 2699 <div class="lg-matches"> 2700 <div class="mx-row " data-search="J3 League Japan Kochi United Parceiro Nagano"> 2701 <div class="mx-left"> 2702 <button type="button" class="mx-fav-btn favorite-btn" 2703 data-match-id="336739" 2704 data-auth="false" 2705 onclick="event.preventDefault(); event.stopPropagation(); handleFavoriteClick(336739, this);" 2706 aria-label="Thêm vào yêu thích"> 2707 <svg class="icon icon-fav"><use href="#icon-star"/></svg> 2708 </button> 2709 <div class="mx-status"> 2710 <span class="mx-date">10/10</span> 2711 <span class="mx-time">12:00</span> 2712 </div> 2713 </div> 2714 2715 <div class="mx-center"> 2716 <a href="/kochi-united-vs-parceiro-nagano-id336739" class="mx-teams-link"> 2717 <div class="mx-team-row"> 2718 <img src="/images/football/teams/7129.webp" 2719 alt="Kochi United" class="mx-team-logo" loading="lazy" 2720 onerror="this.onerror=null; this.src='/images/placeholder-team.svg';"> 2721 <span class="mx-team-name">Kochi United</span> 2722 <span class="mx-score "> 2723 </span> 2724 </div> 2725 <div class="mx-team-row"> 2726 <img src="/images/football/teams/4323.webp" 2727 alt="Parceiro Nagano" class="mx-team-logo" loading="lazy" 2728 onerror="this.onerror=null; this.src='/images/placeholder-team.svg';"> 2729 <span class="mx-team-name">Parceiro Nagano</span> 2730 <span class="mx-score "> 2731 </span> 2732 </div> 2733 </a> 2734 </div> 2735 2736 <div class="mx-right "> 2737 <a href="/kochi-united-vs-parceiro-nagano-id336739" class="mx-action-btn preview-btn">Xem trước</a> 2738 </div> 2739 </div> 2740 <div class="mx-row " data-search="J3 League Japan Thespakusatsu Gunma FC Ryukyu"> 2741 <div class="mx-left"> 2742 <button type="button" class="mx-fav-btn favorite-btn" 2743 data-match-id="336740" 2744 data-auth="false" 2745 onclick="event.preventDefault(); event.stopPropagation(); handleFavoriteClick(336740, this);" 2746 aria-label="Thêm vào yêu thích"> 2747 <svg class="icon icon-fav"><use href="#icon-star"/></svg> 2748 </button> 2749 <div class="mx-status">
2750 <span class="mx-date">10/10</span> 2751 <span class="mx-time">12:00</span> 2752 </div> 2753 </div> 2754 2755 <div class="mx-center"> 2756 <a href="/thespakusatsu-gunma-vs-fc-ryukyu-id336740" class="mx-teams-link"> 2757 <div class="mx-team-row"> 2758 <img src="/images/football/teams/756.webp" 2759 alt="Thespakusatsu Gunma" class="mx-team-logo" loading="lazy" 2760 onerror="this.onerror=null; this.src='/images/placeholder-team.svg';"> 2761 <span class="mx-team-name">Thespakusatsu Gunma</span> 2762 <span class="mx-score "> 2763 </span> 2764 </div> 2765 <div class="mx-team-row"> 2766 <img src="/images/football/teams/2235.webp" 2767 alt="FC Ryukyu" class="mx-team-logo" loading="lazy" 2768 onerror="this.onerror=null; this.src='/images/placeholder-team.svg';"> 2769 <span class="mx-team-name">FC Ryukyu</span> 2770 <span class="mx-score "> 2771 </span> 2772 </div> 2773 </a> 2774 </div> 2775 2776 <div class="mx-right "> 2777 <a href="/thespakusatsu-gunma-vs-fc-ryukyu-id336740" class="mx-action-btn preview-btn">Xem trước</a> 2778 </div> 2779 </div> 2780 <div class="mx-row " data-search="J3 League Japan Nara Club Kitakyushu"> 2781 <div class="mx-left"> 2782 <button type="button" class="mx-fav-btn favorite-btn" 2783 data-match-id="336741" 2784 data-auth="false" 2785 onclick="event.preventDefault(); event.stopPropagation(); handleFavoriteClick(336741, this);" 2786 aria-label="Thêm vào yêu thích"> 2787 <svg class="icon icon-fav"><use href="#icon-star"/></svg> 2788 </button> 2789 <div class="mx-status"> 2790 <span class="mx-date">10/10</span> 2791 <span class="mx-time">12:00</span> 2792 </div> 2793 </div> 2794 2795 <div class="mx-center"> 2796 <a href="/nara-club-vs-kitakyushu-id336741" class="mx-teams-link"> 2797 <div class="mx-team-row"> 2798 <img src="/images/football/teams/7135.webp" 2799 alt="Nara Club" class="mx-team-logo" loading="lazy" 2800 onerror="this.onerror=null; this.src='/images/placeholder-team.svg';"> 2801 <span class="mx-team-name">Nara Club</span> 2802 <span class="mx-score "> 2803 </span> 2804 </div> 2805 <div class="mx-team-row"> 2806 <img src="/images/football/teams/805.webp" 2807 alt="Kitakyushu" class="mx-team-logo" loading="lazy" 2808 onerror="this.onerror=null; this.src='/images/placeholder-team.svg';"> 2809 <span class="mx-team-name">Kitakyushu</span> 2810 <span class="mx-score "> 2811 </span> 2812 </div> 2813 </a> 2814 </div> 2815 2816 <div class="mx-right "> 2817 <a href="/nara-club-vs-kitakyushu-id336741" class="mx-action-btn preview-btn">Xem trước</a> 2818 </div> 2819 </div> 2820 <div class="mx-row " data-search="J3 League Japan Fukushima United Biwako Shiga"> 2821 <div class="mx-left"> 2822 <button type="button" class="mx-fav-btn favorite-btn" 2823 data-match-id="336751" 2824 data-auth="false" 2825 onclick="event.preventDefault(); event.stopPropagation(); handleFavoriteClick(336751, this);" 2826 aria-label="Thêm vào yêu thích"> 2827 <svg class="icon icon-fav"><use href="#icon-star"/></svg> 2828 </button> 2829 <div class="mx-status">
2830 <span class="mx-date">10/10</span> 2831 <span class="mx-time">14:00</span> 2832 </div> 2833 </div> 2834 2835 <div class="mx-center"> 2836 <a href="/fukushima-united-vs-biwako-shiga-id336751" class="mx-teams-link"> 2837 <div class="mx-team-row"> 2838 <img src="/images/football/teams/4318.webp" 2839 alt="Fukushima United" class="mx-team-logo" loading="lazy" 2840 onerror="this.onerror=null; this.src='/images/placeholder-team.svg';"> 2841 <span class="mx-team-name">Fukushima United</span> 2842 <span class="mx-score "> 2843 </span> 2844 </div> 2845 <div class="mx-team-row"> 2846 <img src="/images/football/teams/7117.webp" 2847 alt="Biwako Shiga" class="mx-team-logo" loading="lazy" 2848 onerror="this.onerror=null; this.src='/images/placeholder-team.svg';"> 2849 <span class="mx-team-name">Biwako Shiga</span> 2850 <span class="mx-score "> 2851 </span> 2852 </div> 2853 </a> 2854 </div> 2855 2856 <div class="mx-right "> 2857 <a href="/fukushima-united-vs-biwako-shiga-id336751" class="mx-action-btn preview-btn">Xem trước</a> 2858 </div> 2859 </div> 2860 </div> 2861 </div> 2862 <div class="lg-section" data-search="Diski Challenge South-Africa"> 2863 <div class="lg-header"> 2864 <div class="lg-header-left"> 2865 <button type="button" class="lg-fav-btn" aria-label="Pin league"> 2866 <svg class="icon"><use href="#icon-star"/></svg> 2867 </button> 2868 <span class="lg-country-name">South-Africa:</span> 2869 <img src="/images/football/leagues/734.webp" 2870 alt="Diski Challenge" class="lg-logo" loading="lazy" 2871 onerror="if(!this.dataset.fallback){this.src='/images/placeholder-league.svg';this.dataset.fallback='true';}"> 2872 <span class="lg-name">Diski Challenge</span> 2873 </div> 2874 <div class="lg-header-right"> 2875 <button type="button" class="lg-collapse-btn" onclick="toggleLeague(this)" aria-label="Toggle"> 2876 <svg class="icon icon-collapse"><use href="#icon-chevron-up"/></svg> 2877 </button> 2878 </div> 2879 </div> 2880 2881 <div class="lg-matches"> 2882 <div class="mx-row " data-search="Diski Challenge South-Africa Golden Arrows U23 Chippa United U23"> 2883 <div class="mx-left"> 2884 <button type="button" class="mx-fav-btn favorite-btn" 2885 data-match-id="336770" 2886 data-auth="false" 2887 onclick="event.preventDefault(); event.stopPropagation(); handleFavoriteClick(336770, this);" 2888 aria-label="Thêm vào yêu thích"> 2889 <svg class="icon icon-fav"><use href="#icon-star"/></svg> 2890 </button> 2891 <div class="mx-status"> 2892 <span class="mx-date">10/10</span> 2893 <span class="mx-time">15:00</span> 2894 </div> 2895 </div> 2896 2897 <div class="mx-center"> 2898 <a href="/golden-arrows-u23-vs-chippa-united-u23-id336770" class="mx-teams-link"> 2899 <div class="mx-team-row"> 2900 <img src="/images/football/teams/15991.webp" 2901 alt="Golden Arrows U23" class="mx-team-logo" loading="lazy" 2902 onerror="this.onerror=null; this.src='/images/placeholder-team.svg';">
2903 <span class="mx-team-name">Golden Arrows U23</span> 2904 <span class="mx-score "> 2905 </span> 2906 </div> 2907 <div class="mx-team-row"> 2908 <img src="/images/football/teams/15990.webp" 2909 alt="Chippa United U23" class="mx-team-logo" loading="lazy" 2910 onerror="this.onerror=null; this.src='/images/placeholder-team.svg';"> 2911 <span class="mx-team-name">Chippa United U23</span> 2912 <span class="mx-score "> 2913 </span> 2914 </div> 2915 </a> 2916 </div> 2917 2918 <div class="mx-right "> 2919 <a href="/golden-arrows-u23-vs-chippa-united-u23-id336770" class="mx-action-btn preview-btn">Xem trước</a> 2920 </div> 2921 </div> 2922 <div class="mx-row " data-search="Diski Challenge South-Africa Richards Bay U23 Kaizer Chiefs U23"> 2923 <div class="mx-left"> 2924 <button type="button" class="mx-fav-btn favorite-btn" 2925 data-match-id="336771" 2926 data-auth="false" 2927 onclick="event.preventDefault(); event.stopPropagation(); handleFavoriteClick(336771, this);" 2928 aria-label="Thêm vào yêu thích"> 2929 <svg class="icon icon-fav"><use href="#icon-star"/></svg> 2930 </button> 2931 <div class="mx-status"> 2932 <span class="mx-date">10/10</span> 2933 <span class="mx-time">15:00</span> 2934 </div> 2935 </div> 2936 2937 <div class="mx-center"> 2938 <a href="/richards-bay-u23-vs-kaizer-chiefs-u23-id336771" class="mx-teams-link"> 2939 <div class="mx-team-row"> 2940 <img src="/images/football/teams/20296.webp" 2941 alt="Richards Bay U23" class="mx-team-logo" loading="lazy" 2942 onerror="this.onerror=null; this.src='/images/placeholder-team.svg';"> 2943 <span class="mx-team-name">Richards Bay U23</span> 2944 <span class="mx-score "> 2945 </span> 2946 </div> 2947 <div class="mx-team-row"> 2948 <img src="/images/football/teams/15992.webp" 2949 alt="Kaizer Chiefs U23" class="mx-team-logo" loading="lazy" 2950 onerror="this.onerror=null; this.src='/images/placeholder-team.svg';"> 2951 <span class="mx-team-name">Kaizer Chiefs U23</span> 2952 <span class="mx-score "> 2953 </span> 2954 </div> 2955 </a> 2956 </div> 2957 2958 <div class="mx-right "> 2959 <a href="/richards-bay-u23-vs-kaizer-chiefs-u23-id336771" class="mx-action-btn preview-btn">Xem trước</a> 2960 </div> 2961 </div> 2962 <div class="mx-row " data-search="Diski Challenge South-Africa Siwelele U23 Orlando Pirates U23"> 2963 <div class="mx-left"> 2964 <button type="button" class="mx-fav-btn favorite-btn" 2965 data-match-id="336772" 2966 data-auth="false" 2967 onclick="event.preventDefault(); event.stopPropagation(); handleFavoriteClick(336772, this);" 2968 aria-label="Thêm vào yêu thích"> 2969 <svg class="icon icon-fav"><use href="#icon-star"/></svg> 2970 </button> 2971 <div class="mx-status">
2972 <span class="mx-date">10/10</span> 2973 <span class="mx-time">15:00</span> 2974 </div> 2975 </div> 2976 2977 <div class="mx-center"> 2978 <a href="/siwelele-u23-vs-orlando-pirates-u23-id336772" class="mx-teams-link"> 2979 <div class="mx-team-row"> 2980 <img src="/images/football/teams/26576.webp" 2981 alt="Siwelele U23" class="mx-team-logo" loading="lazy" 2982 onerror="this.onerror=null; this.src='/images/placeholder-team.svg';"> 2983 <span class="mx-team-name">Siwelele U23</span> 2984 <span class="mx-score "> 2985 </span> 2986 </div> 2987 <div class="mx-team-row"> 2988 <img src="/images/football/teams/15995.webp" 2989 alt="Orlando Pirates U23" class="mx-team-logo" loading="lazy" 2990 onerror="this.onerror=null; this.src='/images/placeholder-team.svg';"> 2991 <span class="mx-team-name">Orlando Pirates U23</span> 2992 <span class="mx-score "> 2993 </span> 2994 </div> 2995 </a> 2996 </div> 2997 2998 <div class="mx-right "> 2999 <a href="/siwelele-u23-vs-orlando-pirates-u23-id336772" class="mx-action-btn preview-btn">Xem trước</a> 3000 </div> 3001 </div> 3002 <div class="mx-row " data-search="Diski Challenge South-Africa TS Galaxy U23 AmaZulu U23"> 3003 <div class="mx-left"> 3004 <button type="button" class="mx-fav-btn favorite-btn" 3005 data-match-id="336773" 3006 data-auth="false" 3007 onclick="event.preventDefault(); event.stopPropagation(); handleFavoriteClick(336773, this);" 3008 aria-label="Thêm vào yêu thích"> 3009 <svg class="icon icon-fav"><use href="#icon-star"/></svg> 3010 </button> 3011 <div class="mx-status"> 3012 <span class="mx-date">10/10</span> 3013 <span class="mx-time">15:00</span> 3014 </div> 3015 </div> 3016 3017 <div class="mx-center"> 3018 <a href="/ts-galaxy-u23-vs-amazulu-u23-id336773" class="mx-teams-link"> 3019 <div class="mx-team-row"> 3020 <img src="/images/football/teams/15999.webp" 3021 alt="TS Galaxy U23" class="mx-team-logo" loading="lazy" 3022 onerror="this.onerror=null; this.src='/images/placeholder-team.svg';"> 3023 <span class="mx-team-name">TS Galaxy U23</span> 3024 <span class="mx-score "> 3025 </span> 3026 </div> 3027 <div class="mx-team-row"> 3028 <img src="/images/football/teams/15985.webp" 3029 alt="AmaZulu U23" class="mx-team-logo" loading="lazy" 3030 onerror="this.onerror=null; this.src='/images/placeholder-team.svg';"> 3031 <span class="mx-team-name">AmaZulu U23</span> 3032 <span class="mx-score "> 3033 </span> 3034 </div> 3035 </a> 3036 </div> 3037 3038 <div class="mx-right "> 3039 <a href="/ts-galaxy-u23-vs-amazulu-u23-id336773" class="mx-action-btn preview-btn">Xem trước</a> 3040 </div> 3041 </div> 3042 </div> 3043 </div> 3044 <div class="lg-section" data-search="K4 League South-Korea"> 3045 <div class="lg-header"> 3046 <div class="lg-header-left"> 3047 <button type="button" class="lg-fav-btn" aria-label="Pin league"> 3048 <svg class="icon"><use href="#icon-star"/></svg> 3049 </button>
3050 <span class="lg-country-name">South-Korea:</span> 3051 <img src="https://media.api-sports.io/football/leagues/1234.png" 3052 alt="K4 League" class="lg-logo" loading="lazy" 3053 onerror="if(!this.dataset.fallback){this.src='/images/placeholder-league.svg';this.dataset.fallback='true';}"> 3054 <span class="lg-name">K4 League</span> 3055 </div> 3056 <div class="lg-header-right"> 3057 <button type="button" class="lg-collapse-btn" onclick="toggleLeague(this)" aria-label="Toggle"> 3058 <svg class="icon icon-collapse"><use href="#icon-chevron-up"/></svg> 3059 </button> 3060 </div> 3061 </div> 3062 3063 <div class="lg-matches"> 3064 <div class="mx-row " data-search="K4 League South-Korea Jungnang Chorus Mustang Haman"> 3065 <div class="mx-left"> 3066 <button type="button" class="mx-fav-btn favorite-btn" 3067 data-match-id="336733" 3068 data-auth="false" 3069 onclick="event.preventDefault(); event.stopPropagation(); handleFavoriteClick(336733, this);" 3070 aria-label="Thêm vào yêu thích"> 3071 <svg class="icon icon-fav"><use href="#icon-star"/></svg> 3072 </button> 3073 <div class="mx-status"> 3074 <span class="mx-date">10/10</span> 3075 <span class="mx-time">11:00</span> 3076 </div> 3077 </div> 3078 3079 <div class="mx-center"> 3080 <a href="/jungnang-chorus-mustang-vs-haman-id336733" class="mx-teams-link"> 3081 <div class="mx-team-row"> 3082 <img src="/images/football/teams/7092.webp" 3083 alt="Jungnang Chorus Mustang" class="mx-team-logo" loading="lazy" 3084 onerror="this.onerror=null; this.src='/images/placeholder-team.svg';"> 3085 <span class="mx-team-name">Jungnang Chorus Mustang</span> 3086 <span class="mx-score "> 3087 </span> 3088 </div> 3089 <div class="mx-team-row"> 3090 <img src="https://media.api-sports.io/football/teams/27859.png" 3091 alt="Haman" class="mx-team-logo" loading="lazy" 3092 onerror="this.onerror=null; this.src='/images/placeholder-team.svg';"> 3093 <span class="mx-team-name">Haman</span> 3094 <span class="mx-score "> 3095 </span> 3096 </div> 3097 </a> 3098 </div> 3099 3100 <div class="mx-right "> 3101 <a href="/jungnang-chorus-mustang-vs-haman-id336733" class="mx-action-btn preview-btn">Xem trước</a> 3102 </div> 3103 </div> 3104 <div class="mx-row " data-search="K4 League South-Korea Geumsan Insam Namyangju"> 3105 <div class="mx-left"> 3106 <button type="button" class="mx-fav-btn favorite-btn" 3107 data-match-id="336743" 3108 data-auth="false" 3109 onclick="event.preventDefault(); event.stopPropagation(); handleFavoriteClick(336743, this);" 3110 aria-label="Thêm vào yêu thích"> 3111 <svg class="icon icon-fav"><use href="#icon-star"/></svg> 3112 </button> 3113 <div class="mx-status">
3114 <span class="mx-date">10/10</span> 3115 <span class="mx-time">12:00</span> 3116 </div> 3117 </div> 3118 3119 <div class="mx-center"> 3120 <a href="/geumsan-insam-vs-namyangju-id336743" class="mx-teams-link"> 3121 <div class="mx-team-row"> 3122 <img src="https://media.api-sports.io/football/teams/27858.png" 3123 alt="Geumsan Insam" class="mx-team-logo" loading="lazy" 3124 onerror="this.onerror=null; this.src='/images/placeholder-team.svg';"> 3125 <span class="mx-team-name">Geumsan Insam</span> 3126 <span class="mx-score "> 3127 </span> 3128 </div> 3129 <div class="mx-team-row"> 3130 <img src="/images/football/teams/23089.webp" 3131 alt="Namyangju" class="mx-team-logo" loading="lazy" 3132 onerror="this.onerror=null; this.src='/images/placeholder-team.svg';"> 3133 <span class="mx-team-name">Namyangju</span> 3134 <span class="mx-score "> 3135 </span> 3136 </div> 3137 </a> 3138 </div> 3139 3140 <div class="mx-right "> 3141 <a href="/geumsan-insam-vs-namyangju-id336743" class="mx-action-btn preview-btn">Xem trước</a> 3142 </div> 3143 </div> 3144 <div class="mx-row " data-search="K4 League South-Korea Sejong SA Gijang United"> 3145 <div class="mx-left"> 3146 <button type="button" class="mx-fav-btn favorite-btn" 3147 data-match-id="336744" 3148 data-auth="false" 3149 onclick="event.preventDefault(); event.stopPropagation(); handleFavoriteClick(336744, this);" 3150 aria-label="Thêm vào yêu thích"> 3151 <svg class="icon icon-fav"><use href="#icon-star"/></svg> 3152 </button> 3153 <div class="mx-status"> 3154 <span class="mx-date">10/10</span> 3155 <span class="mx-time">12:00</span> 3156 </div> 3157 </div> 3158 3159 <div class="mx-center"> 3160 <a href="/sejong-sa-vs-gijang-united-id336744" class="mx-teams-link"> 3161 <div class="mx-team-row"> 3162 <img src="/images/football/teams/25720.webp" 3163 alt="Sejong SA" class="mx-team-logo" loading="lazy" 3164 onerror="this.onerror=null; this.src='/images/placeholder-team.svg';"> 3165 <span class="mx-team-name">Sejong SA</span> 3166 <span class="mx-score "> 3167 </span> 3168 </div> 3169 <div class="mx-team-row"> 3170 <img src="/images/football/teams/25719.webp" 3171 alt="Gijang United" class="mx-team-logo" loading="lazy" 3172 onerror="this.onerror=null; this.src='/images/placeholder-team.svg';"> 3173 <span class="mx-team-name">Gijang United</span> 3174 <span class="mx-score "> 3175 </span> 3176 </div> 3177 </a> 3178 </div> 3179 3180 <div class="mx-right "> 3181 <a href="/sejong-sa-vs-gijang-united-id336744" class="mx-action-btn preview-btn">Xem trước</a> 3182 </div> 3183 </div> 3184 </div> 3185 </div> 3186 <div class="lg-section" data-search="K3 League South-Korea"> 3187 <div class="lg-header"> 3188 <div class="lg-header-left"> 3189 <button type="button" class="lg-fav-btn" aria-label="Pin league"> 3190 <svg class="icon"><use href="#icon-star"/></svg> 3191 </button>
3192 <span class="lg-country-name">South-Korea:</span> 3193 <img src="/images/football/leagues/295.webp" 3194 alt="K3 League" class="lg-logo" loading="lazy" 3195 onerror="if(!this.dataset.fallback){this.src='/images/placeholder-league.svg';this.dataset.fallback='true';}"> 3196 <span class="lg-name">K3 League</span> 3197 </div> 3198 <div class="lg-header-right"> 3199 <button type="button" class="lg-collapse-btn" onclick="toggleLeague(this)" aria-label="Toggle"> 3200 <svg class="icon icon-collapse"><use href="#icon-chevron-up"/></svg> 3201 </button> 3202 </div> 3203 </div> 3204 3205 <div class="lg-matches"> 3206 <div class="mx-row " data-search="K3 League South-Korea Changwon City Pocheon"> 3207 <div class="mx-left"> 3208 <button type="button" class="mx-fav-btn favorite-btn" 3209 data-match-id="336737" 3210 data-auth="false" 3211 onclick="event.preventDefault(); event.stopPropagation(); handleFavoriteClick(336737, this);" 3212 aria-label="Thêm vào yêu thích"> 3213 <svg class="icon icon-fav"><use href="#icon-star"/></svg> 3214 </button> 3215 <div class="mx-status"> 3216 <span class="mx-date">10/10</span> 3217 <span class="mx-time">12:00</span> 3218 </div> 3219 </div> 3220 3221 <div class="mx-center"> 3222 <a href="/changwon-city-vs-pocheon-id336737" class="mx-teams-link"> 3223 <div class="mx-team-row"> 3224 <img src="/images/football/teams/7059.webp" 3225 alt="Changwon City" class="mx-team-logo" loading="lazy" 3226 onerror="this.onerror=null; this.src='/images/placeholder-team.svg';"> 3227 <span class="mx-team-name">Changwon City</span> 3228 <span class="mx-score "> 3229 </span> 3230 </div> 3231 <div class="mx-team-row"> 3232 <img src="/images/football/teams/7099.webp" 3233 alt="Pocheon" class="mx-team-logo" loading="lazy" 3234 onerror="this.onerror=null; this.src='/images/placeholder-team.svg';"> 3235 <span class="mx-team-name">Pocheon</span> 3236 <span class="mx-score "> 3237 </span> 3238 </div> 3239 </a> 3240 </div> 3241 3242 <div class="mx-right "> 3243 <a href="/changwon-city-vs-pocheon-id336737" class="mx-action-btn preview-btn">Xem trước</a> 3244 </div> 3245 </div> 3246 <div class="mx-row " data-search="K3 League South-Korea Chuncheon Jeonbuk Motors II"> 3247 <div class="mx-left"> 3248 <button type="button" class="mx-fav-btn favorite-btn" 3249 data-match-id="336738" 3250 data-auth="false" 3251 onclick="event.preventDefault(); event.stopPropagation(); handleFavoriteClick(336738, this);" 3252 aria-label="Thêm vào yêu thích"> 3253 <svg class="icon icon-fav"><use href="#icon-star"/></svg> 3254 </button> 3255 <div class="mx-status">
3256 <span class="mx-date">10/10</span> 3257 <span class="mx-time">12:00</span> 3258 </div> 3259 </div> 3260 3261 <div class="mx-center"> 3262 <a href="/chuncheon-vs-jeonbuk-motors-ii-id336738" class="mx-teams-link"> 3263 <div class="mx-team-row"> 3264 <img src="/images/football/teams/7064.webp" 3265 alt="Chuncheon" class="mx-team-logo" loading="lazy" 3266 onerror="this.onerror=null; this.src='/images/placeholder-team.svg';"> 3267 <span class="mx-team-name">Chuncheon</span> 3268 <span class="mx-score "> 3269 </span> 3270 </div> 3271 <div class="mx-team-row"> 3272 <img src="/images/football/teams/25717.webp" 3273 alt="Jeonbuk Motors II" class="mx-team-logo" loading="lazy" 3274 onerror="this.onerror=null; this.src='/images/placeholder-team.svg';"> 3275 <span class="mx-team-name">Jeonbuk Motors II</span> 3276 <span class="mx-score "> 3277 </span> 3278 </div> 3279 </a> 3280 </div> 3281 3282 <div class="mx-right "> 3283 <a href="/chuncheon-vs-jeonbuk-motors-ii-id336738" class="mx-action-btn preview-btn">Xem trước</a> 3284 </div> 3285 </div> 3286 <div class="mx-row " data-search="K3 League South-Korea Busan Transportation Yeoju Sejong"> 3287 <div class="mx-left"> 3288 <button type="button" class="mx-fav-btn favorite-btn" 3289 data-match-id="338555" 3290 data-auth="false" 3291 onclick="event.preventDefault(); event.stopPropagation(); handleFavoriteClick(338555, this);" 3292 aria-label="Thêm vào yêu thích"> 3293 <svg class="icon icon-fav"><use href="#icon-star"/></svg> 3294 </button> 3295 <div class="mx-status"> 3296 <span class="mx-date">10/10</span> 3297 <span class="mx-time">12:00</span> 3298 </div> 3299 </div> 3300 3301 <div class="mx-center"> 3302 <a href="/busan-transportation-vs-yeoju-sejong-id338555" class="mx-teams-link"> 3303 <div class="mx-team-row"> 3304 <img src="/images/football/teams/7056.webp" 3305 alt="Busan Transportation" class="mx-team-logo" loading="lazy" 3306 onerror="this.onerror=null; this.src='/images/placeholder-team.svg';"> 3307 <span class="mx-team-name">Busan Transportation</span> 3308 <span class="mx-score "> 3309 </span> 3310 </div> 3311 <div class="mx-team-row"> 3312 <img src="/images/football/teams/7112.webp" 3313 alt="Yeoju Sejong" class="mx-team-logo" loading="lazy" 3314 onerror="this.onerror=null; this.src='/images/placeholder-team.svg';"> 3315 <span class="mx-team-name">Yeoju Sejong</span> 3316 <span class="mx-score "> 3317 </span> 3318 </div> 3319 </a> 3320 </div> 3321 3322 <div class="mx-right "> 3323 <a href="/busan-transportation-vs-yeoju-sejong-id338555" class="mx-action-btn preview-btn">Xem trước</a> 3324 </div> 3325 </div> 3326 </div> 3327 </div> 3328 <div class="lg-section" data-search="J1 League Japan"> 3329 <div class="lg-header"> 3330 <div class="lg-header-left"> 3331 <button type="button" class="lg-fav-btn" aria-label="Pin league"> 3332 <svg class="icon"><use href="#icon-star"/></svg> 3333 </button>
3334 <span class="lg-country-name">Japan:</span> 3335 <img src="/images/football/leagues/98.webp" 3336 alt="J1 League" class="lg-logo" loading="lazy" 3337 onerror="if(!this.dataset.fallback){this.src='/images/placeholder-league.svg';this.dataset.fallback='true';}"> 3338 <span class="lg-name">J1 League</span> 3339 </div> 3340 <div class="lg-header-right"> 3341 <button type="button" class="lg-collapse-btn" onclick="toggleLeague(this)" aria-label="Toggle"> 3342 <svg class="icon icon-collapse"><use href="#icon-chevron-up"/></svg> 3343 </button> 3344 </div> 3345 </div> 3346 3347 <div class="lg-matches"> 3348 <div class="mx-row " data-search="J1 League Japan Cerezo Osaka Yokohama F. Marinos Phan Pepsi Black Panther"> 3349 <div class="mx-left"> 3350 <button type="button" class="mx-fav-btn favorite-btn" 3351 data-match-id="336742" 3352 data-auth="false" 3353 onclick="event.preventDefault(); event.stopPropagation(); handleFavoriteClick(336742, this);" 3354 aria-label="Thêm vào yêu thích"> 3355 <svg class="icon icon-fav"><use href="#icon-star"/></svg> 3356 </button> 3357 <div class="mx-status"> 3358 <span class="mx-date">10/10</span> 3359 <span class="mx-time">12:00</span> 3360 </div> 3361 </div> 3362 3363 <div class="mx-center"> 3364 <a href="/cerezo-osaka-vs-yokohama-f-marinos-id336742/phan-pepsi" class="mx-teams-link"> 3365 <div class="mx-team-row"> 3366 <img src="/images/football/teams/291.webp" 3367 alt="Cerezo Osaka" class="mx-team-logo" loading="lazy" 3368 onerror="this.onerror=null; this.src='/images/placeholder-team.svg';"> 3369 <span class="mx-team-name">Cerezo Osaka</span> 3370 <span class="mx-score "> 3371 </span> 3372 </div> 3373 <div class="mx-team-row"> 3374 <img src="/images/football/teams/296.webp" 3375 alt="Yokohama F. Marinos" class="mx-team-logo" loading="lazy" 3376 onerror="this.onerror=null; this.src='/images/placeholder-team.svg';"> 3377 <span class="mx-team-name">Yokohama F. Marinos</span> 3378 <span class="mx-score "> 3379 </span> 3380 </div> 3381 </a> 3382 </div> 3383 3384 <div class="mx-right "> 3385 <div class="mx-streamers"> 3386 <a href="/streamer/12/phan-pepsi" 3387 title="Streamer" 3388 class="mx-streamer-badge "> 3389 BLV PHAN PEPSI 3390 </a> 3391 <a href="/streamer/86/black-panther" 3392 title="Streamer" 3393 class="mx-streamer-badge "> 3394 BLV BLACK PANTHER 3395 </a> 3396 </div> 3397 <a href="/cerezo-osaka-vs-yokohama-f-marinos-id336742/phan-pepsi" class="mx-action-btn live-btn"> 3398 <svg class="icon"><use href="#icon-live"/></svg> LIVE 3399 </a> 3400 <a href="/cerezo-osaka-vs-yokohama-f-marinos-id336742/phan-pepsi" class="mx-action-btn preview-btn">Xem trước</a> 3401 </div> 3402 </div> 3403 <div class="mx-row " data-search="J1 League Japan Avispa Fukuoka Fagiano Okayama"> 3404 <div class="mx-left"> 3405 <button type="button" class="mx-fav-btn favorite-btn" 3406 data-match-id="336749" 3407 data-auth="false" 3408 onclick="event.preventDefault(); event.stopPropagation(); handleFavoriteClick(336749, this);" 3409 aria-label="Thêm vào yêu thích"> 3410 <svg class="icon icon-fav"><use href="#icon-star"/></svg> 3411 </button> 3412 <div class="mx-status">
3413 <span class="mx-date">10/10</span> 3414 <span class="mx-time">13:00</span> 3415 </div> 3416 </div> 3417 3418 <div class="mx-center"> 3419 <a href="/avispa-fukuoka-vs-fagiano-okayama-id336749" class="mx-teams-link"> 3420 <div class="mx-team-row"> 3421 <img src="/images/football/teams/316.webp" 3422 alt="Avispa Fukuoka" class="mx-team-logo" loading="lazy" 3423 onerror="this.onerror=null; this.src='/images/placeholder-team.svg';"> 3424 <span class="mx-team-name">Avispa Fukuoka</span> 3425 <span class="mx-score "> 3426 </span> 3427 </div> 3428 <div class="mx-team-row"> 3429 <img src="/images/football/teams/310.webp" 3430 alt="Fagiano Okayama" class="mx-team-logo" loading="lazy" 3431 onerror="this.onerror=null; this.src='/images/placeholder-team.svg';"> 3432 <span class="mx-team-name">Fagiano Okayama</span> 3433 <span class="mx-score "> 3434 </span> 3435 </div> 3436 </a> 3437 </div> 3438 3439 <div class="mx-right "> 3440 <a href="/avispa-fukuoka-vs-fagiano-okayama-id336749" class="mx-action-btn preview-btn">Xem trước</a> 3441 </div> 3442 </div> 3443 <div class="mx-row " data-search="J1 League Japan FC Tokyo Urawa Groot"> 3444 <div class="mx-left"> 3445 <button type="button" class="mx-fav-btn favorite-btn" 3446 data-match-id="336750" 3447 data-auth="false" 3448 onclick="event.preventDefault(); event.stopPropagation(); handleFavoriteClick(336750, this);" 3449 aria-label="Thêm vào yêu thích"> 3450 <svg class="icon icon-fav"><use href="#icon-star"/></svg> 3451 </button> 3452 <div class="mx-status"> 3453 <span class="mx-date">10/10</span> 3454 <span class="mx-time">13:00</span> 3455 </div> 3456 </div> 3457 3458 <div class="mx-center"> 3459 <a href="/fc-tokyo-vs-urawa-id336750/groot" class="mx-teams-link"> 3460 <div class="mx-team-row"> 3461 <img src="/images/football/teams/292.webp" 3462 alt="FC Tokyo" class="mx-team-logo" loading="lazy" 3463 onerror="this.onerror=null; this.src='/images/placeholder-team.svg';"> 3464 <span class="mx-team-name">FC Tokyo</span> 3465 <span class="mx-score "> 3466 </span> 3467 </div> 3468 <div class="mx-team-row"> 3469 <img src="/images/football/teams/287.webp" 3470 alt="Urawa" class="mx-team-logo" loading="lazy" 3471 onerror="this.onerror=null; this.src='/images/placeholder-team.svg';"> 3472 <span class="mx-team-name">Urawa</span> 3473 <span class="mx-score "> 3474 </span> 3475 </div> 3476 </a> 3477 </div> 3478 3479 <div class="mx-right "> 3480 <div class="mx-streamers"> 3481 <a href="/streamer/94/groot" 3482 title="Streamer" 3483 class="mx-streamer-badge "> 3484 BLV GROOT 3485 </a> 3486 </div> 3487 <a href="/fc-tokyo-vs-urawa-id336750/groot" class="mx-action-btn live-btn"> 3488 <svg class="icon"><use href="#icon-live"/></svg> LIVE 3489 </a> 3490 <a href="/fc-tokyo-vs-urawa-id336750/groot" class="mx-action-btn preview-btn">Xem trước</a> 3491 </div> 3492 </div> 3493 </div> 3494 </div> 3495 <div class="lg-section" data-search="4. liga - Divizie B Czech-Republic"> 3496 <div class="lg-header"> 3497 <div class="lg-header-left"> 3498 <button type="button" class="lg-fav-btn" aria-label="Pin league"> 3499 <svg class="icon"><use href="#icon-star"/></svg> 3500 </button>
3501 <span class="lg-country-name">Czech-Republic:</span> 3502 <img src="/images/football/leagues/351.webp" 3503 alt="4. liga - Divizie B" class="lg-logo" loading="lazy" 3504 onerror="if(!this.dataset.fallback){this.src='/images/placeholder-league.svg';this.dataset.fallback='true';}"> 3505 <span class="lg-name">4. liga - Divizie B</span> 3506 </div> 3507 <div class="lg-header-right"> 3508 <button type="button" class="lg-collapse-btn" onclick="toggleLeague(this)" aria-label="Toggle"> 3509 <svg class="icon icon-collapse"><use href="#icon-chevron-up"/></svg> 3510 </button> 3511 </div> 3512 </div> 3513 3514 <div class="lg-matches"> 3515 <div class="mx-row " data-search="4. liga - Divizie B Czech-Republic Baník Sokolov Sokol Hostouň"> 3516 <div class="mx-left"> 3517 <button type="button" class="mx-fav-btn favorite-btn" 3518 data-match-id="336775" 3519 data-auth="false" 3520 onclick="event.preventDefault(); event.stopPropagation(); handleFavoriteClick(336775, this);" 3521 aria-label="Thêm vào yêu thích"> 3522 <svg class="icon icon-fav"><use href="#icon-star"/></svg> 3523 </button> 3524 <div class="mx-status"> 3525 <span class="mx-date">10/10</span> 3526 <span class="mx-time">15:15</span> 3527 </div> 3528 </div> 3529 3530 <div class="mx-center"> 3531 <a href="/banik-sokolov-vs-sokol-hostoun-id336775" class="mx-teams-link"> 3532 <div class="mx-team-row"> 3533 <img src="/images/football/teams/3721.webp" 3534 alt="Baník Sokolov" class="mx-team-logo" loading="lazy" 3535 onerror="this.onerror=null; this.src='/images/placeholder-team.svg';"> 3536 <span class="mx-team-name">Baník Sokolov</span> 3537 <span class="mx-score "> 3538 </span> 3539 </div> 3540 <div class="mx-team-row"> 3541 <img src="/images/football/teams/7350.webp" 3542 alt="Sokol Hostouň" class="mx-team-logo" loading="lazy" 3543 onerror="this.onerror=null; this.src='/images/placeholder-team.svg';"> 3544 <span class="mx-team-name">Sokol Hostouň</span> 3545 <span class="mx-score "> 3546 </span> 3547 </div> 3548 </a> 3549 </div> 3550 3551 <div class="mx-right "> 3552 <a href="/banik-sokolov-vs-sokol-hostoun-id336775" class="mx-action-btn preview-btn">Xem trước</a> 3553 </div> 3554 </div> 3555 <div class="mx-row " data-search="4. liga - Divizie B Czech-Republic Štětí Karlovy Vary"> 3556 <div class="mx-left"> 3557 <button type="button" class="mx-fav-btn favorite-btn" 3558 data-match-id="336776" 3559 data-auth="false" 3560 onclick="event.preventDefault(); event.stopPropagation(); handleFavoriteClick(336776, this);" 3561 aria-label="Thêm vào yêu thích"> 3562 <svg class="icon icon-fav"><use href="#icon-star"/></svg> 3563 </button> 3564 <div class="mx-status">
3565 <span class="mx-date">10/10</span> 3566 <span class="mx-time">15:15</span> 3567 </div> 3568 </div> 3569 3570 <div class="mx-center"> 3571 <a href="/steti-vs-karlovy-vary-id336776" class="mx-teams-link"> 3572 <div class="mx-team-row"> 3573 <img src="/images/football/teams/7386.webp" 3574 alt="Štětí" class="mx-team-logo" loading="lazy" 3575 onerror="this.onerror=null; this.src='/images/placeholder-team.svg';"> 3576 <span class="mx-team-name">Štětí</span> 3577 <span class="mx-score "> 3578 </span> 3579 </div> 3580 <div class="mx-team-row"> 3581 <img src="/images/football/teams/7306.webp" 3582 alt="Karlovy Vary" class="mx-team-logo" loading="lazy" 3583 onerror="this.onerror=null; this.src='/images/placeholder-team.svg';"> 3584 <span class="mx-team-name">Karlovy Vary</span> 3585 <span class="mx-score "> 3586 </span> 3587 </div> 3588 </a> 3589 </div> 3590 3591 <div class="mx-right "> 3592 <a href="/steti-vs-karlovy-vary-id336776" class="mx-action-btn preview-btn">Xem trước</a> 3593 </div> 3594 </div> 3595 <div class="mx-row " data-search="4. liga - Divizie B Czech-Republic Slavoj Vyšehrad Újezd Praha 4"> 3596 <div class="mx-left"> 3597 <button type="button" class="mx-fav-btn favorite-btn" 3598 data-match-id="336777" 3599 data-auth="false" 3600 onclick="event.preventDefault(); event.stopPropagation(); handleFavoriteClick(336777, this);" 3601 aria-label="Thêm vào yêu thích"> 3602 <svg class="icon icon-fav"><use href="#icon-star"/></svg> 3603 </button> 3604 <div class="mx-status"> 3605 <span class="mx-date">10/10</span> 3606 <span class="mx-time">15:15</span> 3607 </div> 3608 </div> 3609 3610 <div class="mx-center"> 3611 <a href="/slavoj-vysehrad-vs-ujezd-praha-4-id336777" class="mx-teams-link"> 3612 <div class="mx-team-row"> 3613 <img src="https://media.api-sports.io/football/teams/4258.png" 3614 alt="Slavoj Vyšehrad" class="mx-team-logo" loading="lazy" 3615 onerror="this.onerror=null; this.src='/images/placeholder-team.svg';"> 3616 <span class="mx-team-name">Slavoj Vyšehrad</span> 3617 <span class="mx-score "> 3618 </span> 3619 </div> 3620 <div class="mx-team-row"> 3621 <img src="/images/football/teams/19439.webp" 3622 alt="Újezd Praha 4" class="mx-team-logo" loading="lazy" 3623 onerror="this.onerror=null; this.src='/images/placeholder-team.svg';"> 3624 <span class="mx-team-name">Újezd Praha 4</span> 3625 <span class="mx-score "> 3626 </span> 3627 </div> 3628 </a> 3629 </div> 3630 3631 <div class="mx-right "> 3632 <a href="/slavoj-vysehrad-vs-ujezd-praha-4-id336777" class="mx-action-btn preview-btn">Xem trước</a> 3633 </div> 3634 </div> 3635 </div> 3636 </div> 3637 <div class="lg-section" data-search="K League 1 South-Korea"> 3638 <div class="lg-header"> 3639 <div class="lg-header-left"> 3640 <button type="button" class="lg-fav-btn" aria-label="Pin league"> 3641 <svg class="icon"><use href="#icon-star"/></svg> 3642 </button>
3643 <span class="lg-country-name">South-Korea:</span> 3644 <img src="/images/football/leagues/292.webp" 3645 alt="K League 1" class="lg-logo" loading="lazy" 3646 onerror="if(!this.dataset.fallback){this.src='/images/placeholder-league.svg';this.dataset.fallback='true';}"> 3647 <span class="lg-name">K League 1</span> 3648 </div> 3649 <div class="lg-header-right"> 3650 <button type="button" class="lg-collapse-btn" onclick="toggleLeague(this)" aria-label="Toggle"> 3651 <svg class="icon icon-collapse"><use href="#icon-chevron-up"/></svg> 3652 </button> 3653 </div> 3654 </div> 3655 3656 <div class="lg-matches"> 3657 <div class="mx-row " data-search="K League 1 South-Korea FC Seoul Jeju United FC Iron Man"> 3658 <div class="mx-left"> 3659 <button type="button" class="mx-fav-btn favorite-btn" 3660 data-match-id="336734" 3661 data-auth="false" 3662 onclick="event.preventDefault(); event.stopPropagation(); handleFavoriteClick(336734, this);" 3663 aria-label="Thêm vào yêu thích"> 3664 <svg class="icon icon-fav"><use href="#icon-star"/></svg> 3665 </button> 3666 <div class="mx-status"> 3667 <span class="mx-date">10/10</span> 3668 <span class="mx-time">12:00</span> 3669 </div> 3670 </div> 3671 3672 <div class="mx-center"> 3673 <a href="/fc-seoul-vs-jeju-united-fc-id336734/iron-man-2" class="mx-teams-link"> 3674 <div class="mx-team-row"> 3675 <img src="/images/football/teams/2766.webp" 3676 alt="FC Seoul" class="mx-team-logo" loading="lazy" 3677 onerror="this.onerror=null; this.src='/images/placeholder-team.svg';"> 3678 <span class="mx-team-name">FC Seoul</span> 3679 <span class="mx-score "> 3680 </span> 3681 </div> 3682 <div class="mx-team-row"> 3683 <img src="/images/football/teams/2761.webp" 3684 alt="Jeju United FC" class="mx-team-logo" loading="lazy" 3685 onerror="this.onerror=null; this.src='/images/placeholder-team.svg';"> 3686 <span class="mx-team-name">Jeju United FC</span> 3687 <span class="mx-score "> 3688 </span> 3689 </div> 3690 </a> 3691 </div> 3692 3693 <div class="mx-right "> 3694 <div class="mx-streamers"> 3695 <a href="/streamer/81/iron-man" 3696 title="Streamer" 3697 class="mx-streamer-badge "> 3698 BLV IRON MAN 3699 </a> 3700 </div> 3701 <a href="/fc-seoul-vs-jeju-united-fc-id336734/iron-man-2" class="mx-action-btn live-btn"> 3702 <svg class="icon"><use href="#icon-live"/></svg> LIVE 3703 </a> 3704 <a href="/fc-seoul-vs-jeju-united-fc-id336734/iron-man-2" class="mx-action-btn preview-btn">Xem trước</a> 3705 </div> 3706 </div> 3707 <div class="mx-row " data-search="K League 1 South-Korea Gimcheon Sangmu FC FC Anyang Black Panther"> 3708 <div class="mx-left"> 3709 <button type="button" class="mx-fav-btn favorite-btn" 3710 data-match-id="336753" 3711 data-auth="false" 3712 onclick="event.preventDefault(); event.stopPropagation(); handleFavoriteClick(336753, this);" 3713 aria-label="Thêm vào yêu thích"> 3714 <svg class="icon icon-fav"><use href="#icon-star"/></svg> 3715 </button> 3716 <div class="mx-status">
3717 <span class="mx-date">10/10</span> 3718 <span class="mx-time">14:30</span> 3719 </div> 3720 </div> 3721 3722 <div class="mx-center"> 3723 <a href="/gimcheon-sangmu-fc-vs-fc-anyang-id336753/black-panther" class="mx-teams-link"> 3724 <div class="mx-team-row"> 3725 <img src="/images/football/teams/2768.webp" 3726 alt="Gimcheon Sangmu FC" class="mx-team-logo" loading="lazy" 3727 onerror="this.onerror=null; this.src='/images/placeholder-team.svg';"> 3728 <span class="mx-team-name">Gimcheon Sangmu FC</span> 3729 <span class="mx-score "> 3730 </span> 3731 </div> 3732 <div class="mx-team-row"> 3733 <img src="/images/football/teams/2748.webp" 3734 alt="FC Anyang" class="mx-team-logo" loading="lazy" 3735 onerror="this.onerror=null; this.src='/images/placeholder-team.svg';"> 3736 <span class="mx-team-name">FC Anyang</span> 3737 <span class="mx-score "> 3738 </span> 3739 </div> 3740 </a> 3741 </div> 3742 3743 <div class="mx-right "> 3744 <div class="mx-streamers"> 3745 <a href="/streamer/86/black-panther" 3746 title="Streamer" 3747 class="mx-streamer-badge "> 3748 BLV BLACK PANTHER 3749 </a> 3750 </div> 3751 <a href="/gimcheon-sangmu-fc-vs-fc-anyang-id336753/black-panther" class="mx-action-btn live-btn"> 3752 <svg class="icon"><use href="#icon-live"/></svg> LIVE 3753 </a> 3754 <a href="/gimcheon-sangmu-fc-vs-fc-anyang-id336753/black-panther" class="mx-action-btn preview-btn">Xem trước</a> 3755 </div> 3756 </div> 3757 </div> 3758 </div> 3759 <div class="lg-section" data-search="Premier League Mongolia"> 3760 <div class="lg-header"> 3761 <div class="lg-header-left"> 3762 <button type="button" class="lg-fav-btn" aria-label="Pin league"> 3763 <svg class="icon"><use href="#icon-star"/></svg> 3764 </button> 3765 <span class="lg-country-name">Mongolia:</span> 3766 <img src="/images/football/leagues/764.webp" 3767 alt="Premier League" class="lg-logo" loading="lazy" 3768 onerror="if(!this.dataset.fallback){this.src='/images/placeholder-league.svg';this.dataset.fallback='true';}"> 3769 <span class="lg-name">Premier League</span> 3770 </div> 3771 <div class="lg-header-right"> 3772 <button type="button" class="lg-collapse-btn" onclick="toggleLeague(this)" aria-label="Toggle"> 3773 <svg class="icon icon-collapse"><use href="#icon-chevron-up"/></svg> 3774 </button> 3775 </div> 3776 </div> 3777 3778 <div class="lg-matches"> 3779 <div class="mx-row " data-search="Premier League Mongolia Khovd Amtat FC"> 3780 <div class="mx-left"> 3781 <button type="button" class="mx-fav-btn favorite-btn" 3782 data-match-id="336769" 3783 data-auth="false" 3784 onclick="event.preventDefault(); event.stopPropagation(); handleFavoriteClick(336769, this);" 3785 aria-label="Thêm vào yêu thích"> 3786 <svg class="icon icon-fav"><use href="#icon-star"/></svg> 3787 </button> 3788 <div class="mx-status">
3789 <span class="mx-date">10/10</span> 3790 <span class="mx-time">12:00</span> 3791 </div> 3792 </div> 3793 3794 <div class="mx-center"> 3795 <a href="/khovd-vs-amtat-fc-id336769" class="mx-teams-link"> 3796 <div class="mx-team-row"> 3797 <img src="/images/football/teams/18104.webp" 3798 alt="Khovd" class="mx-team-logo" loading="lazy" 3799 onerror="this.onerror=null; this.src='/images/placeholder-team.svg';"> 3800 <span class="mx-team-name">Khovd</span> 3801 <span class="mx-score "> 3802 </span> 3803 </div> 3804 <div class="mx-team-row"> 3805 <img src="https://media.api-sports.io/football/teams/28430.png" 3806 alt="Amtat FC" class="mx-team-logo" loading="lazy" 3807 onerror="this.onerror=null; this.src='/images/placeholder-team.svg';"> 3808 <span class="mx-team-name">Amtat FC</span> 3809 <span class="mx-score "> 3810 </span> 3811 </div> 3812 </a> 3813 </div> 3814 3815 <div class="mx-right "> 3816 <a href="/khovd-vs-amtat-fc-id336769" class="mx-action-btn preview-btn">Xem trước</a> 3817 </div> 3818 </div> 3819 <div class="mx-row " data-search="Premier League Mongolia Khovd Western Hunters"> 3820 <div class="mx-left"> 3821 <button type="button" class="mx-fav-btn favorite-btn" 3822 data-match-id="336905" 3823 data-auth="false" 3824 onclick="event.preventDefault(); event.stopPropagation(); handleFavoriteClick(336905, this);" 3825 aria-label="Thêm vào yêu thích"> 3826 <svg class="icon icon-fav"><use href="#icon-star"/></svg> 3827 </button> 3828 <div class="mx-status"> 3829 <span class="mx-date">10/10</span> 3830 <span class="mx-time">15:00</span> 3831 </div> 3832 </div> 3833 3834 <div class="mx-center"> 3835 <a href="/khovd-western-vs-hunters-id336905" class="mx-teams-link"> 3836 <div class="mx-team-row"> 3837 <img src="/images/football/teams/26669.webp" 3838 alt="Khovd Western" class="mx-team-logo" loading="lazy" 3839 onerror="this.onerror=null; this.src='/images/placeholder-team.svg';"> 3840 <span class="mx-team-name">Khovd Western</span> 3841 <span class="mx-score "> 3842 </span> 3843 </div> 3844 <div class="mx-team-row"> 3845 <img src="/images/football/teams/24722.webp" 3846 alt="Hunters" class="mx-team-logo" loading="lazy" 3847 onerror="this.onerror=null; this.src='/images/placeholder-team.svg';"> 3848 <span class="mx-team-name">Hunters</span> 3849 <span class="mx-score "> 3850 </span> 3851 </div> 3852 </a> 3853 </div> 3854 3855 <div class="mx-right ">
3856 <a href="/khovd-western-vs-hunters-id336905" class="mx-action-btn preview-btn">Xem trước</a> 3857 </div> 3858 </div> 3859 </div> 3860 </div> 3861 <div class="lg-section" data-search="Premier League Hong-Kong"> 3862 <div class="lg-header"> 3863 <div class="lg-header-left"> 3864 <button type="button" class="lg-fav-btn" aria-label="Pin league"> 3865 <svg class="icon"><use href="#icon-star"/></svg> 3866 </button> 3867 <span class="lg-country-name">Hong-Kong:</span> 3868 <img src="/images/football/leagues/380.webp" 3869 alt="Premier League" class="lg-logo" loading="lazy" 3870 onerror="if(!this.dataset.fallback){this.src='/images/placeholder-league.svg';this.dataset.fallback='true';}"> 3871 <span class="lg-name">Premier League</span> 3872 </div> 3873 <div class="lg-header-right"> 3874 <button type="button" class="lg-collapse-btn" onclick="toggleLeague(this)" aria-label="Toggle"> 3875 <svg class="icon icon-collapse"><use href="#icon-chevron-up"/></svg> 3876 </button> 3877 </div> 3878 </div> 3879 3880 <div class="lg-matches"> 3881 <div class="mx-row " data-search="Premier League Hong-Kong Kitchee Hong Kong FC"> 3882 <div class="mx-left"> 3883 <button type="button" class="mx-fav-btn favorite-btn" 3884 data-match-id="336766" 3885 data-auth="false" 3886 onclick="event.preventDefault(); event.stopPropagation(); handleFavoriteClick(336766, this);" 3887 aria-label="Thêm vào yêu thích"> 3888 <svg class="icon icon-fav"><use href="#icon-star"/></svg> 3889 </button> 3890 <div class="mx-status"> 3891 <span class="mx-date">10/10</span> 3892 <span class="mx-time">15:00</span> 3893 </div> 3894 </div> 3895 3896 <div class="mx-center"> 3897 <a href="/kitchee-vs-hong-kong-fc-id336766" class="mx-teams-link"> 3898 <div class="mx-team-row"> 3899 <img src="/images/football/teams/4453.webp" 3900 alt="Kitchee" class="mx-team-logo" loading="lazy" 3901 onerror="this.onerror=null; this.src='/images/placeholder-team.svg';"> 3902 <span class="mx-team-name">Kitchee</span> 3903 <span class="mx-score "> 3904 </span> 3905 </div> 3906 <div class="mx-team-row"> 3907 <img src="/images/football/teams/4462.webp" 3908 alt="Hong Kong FC" class="mx-team-logo" loading="lazy" 3909 onerror="this.onerror=null; this.src='/images/placeholder-team.svg';"> 3910 <span class="mx-team-name">Hong Kong FC</span> 3911 <span class="mx-score "> 3912 </span> 3913 </div> 3914 </a> 3915 </div> 3916 3917 <div class="mx-right "> 3918 <a href="/kitchee-vs-hong-kong-fc-id336766" class="mx-action-btn preview-btn">Xem trước</a> 3919 </div> 3920 </div> 3921 <div class="mx-row " data-search="Premier League Hong-Kong Wofoo Tai Po Kowloon City"> 3922 <div class="mx-left"> 3923 <button type="button" class="mx-fav-btn favorite-btn" 3924 data-match-id="336767" 3925 data-auth="false" 3926 onclick="event.preventDefault(); event.stopPropagation(); handleFavoriteClick(336767, this);" 3927 aria-label="Thêm vào yêu thích"> 3928 <svg class="icon icon-fav"><use href="#icon-star"/></svg> 3929 </button> 3930 <div class="mx-status">
3931 <span class="mx-date">10/10</span> 3932 <span class="mx-time">15:00</span> 3933 </div> 3934 </div> 3935 3936 <div class="mx-center"> 3937 <a href="/wofoo-tai-po-vs-kowloon-city-id336767" class="mx-teams-link"> 3938 <div class="mx-team-row"> 3939 <img src="/images/football/teams/4457.webp" 3940 alt="Wofoo Tai Po" class="mx-team-logo" loading="lazy" 3941 onerror="this.onerror=null; this.src='/images/placeholder-team.svg';"> 3942 <span class="mx-team-name">Wofoo Tai Po</span> 3943 <span class="mx-score "> 3944 </span> 3945 </div> 3946 <div class="mx-team-row"> 3947 <img src="/images/football/teams/20392.webp" 3948 alt="Kowloon City" class="mx-team-logo" loading="lazy" 3949 onerror="this.onerror=null; this.src='/images/placeholder-team.svg';"> 3950 <span class="mx-team-name">Kowloon City</span> 3951 <span class="mx-score "> 3952 </span> 3953 </div> 3954 </a> 3955 </div> 3956 3957 <div class="mx-right "> 3958 <a href="/wofoo-tai-po-vs-kowloon-city-id336767" class="mx-action-btn preview-btn">Xem trước</a> 3959 </div> 3960 </div> 3961 </div> 3962 </div> 3963 <div class="lg-section" data-search="4. liga - Divizie C Czech-Republic"> 3964 <div class="lg-header"> 3965 <div class="lg-header-left"> 3966 <button type="button" class="lg-fav-btn" aria-label="Pin league"> 3967 <svg class="icon"><use href="#icon-star"/></svg> 3968 </button> 3969 <span class="lg-country-name">Czech-Republic:</span> 3970 <img src="/images/football/leagues/352.webp" 3971 alt="4. liga - Divizie C" class="lg-logo" loading="lazy" 3972 onerror="if(!this.dataset.fallback){this.src='/images/placeholder-league.svg';this.dataset.fallback='true';}"> 3973 <span class="lg-name">4. liga - Divizie C</span> 3974 </div> 3975 <div class="lg-header-right"> 3976 <button type="button" class="lg-collapse-btn" onclick="toggleLeague(this)" aria-label="Toggle"> 3977 <svg class="icon icon-collapse"><use href="#icon-chevron-up"/></svg> 3978 </button> 3979 </div> 3980 </div> 3981 3982 <div class="lg-matches"> 3983 <div class="mx-row " data-search="4. liga - Divizie C Czech-Republic Slavia Hradec Králové Spartak Police n/Metují"> 3984 <div class="mx-left"> 3985 <button type="button" class="mx-fav-btn favorite-btn" 3986 data-match-id="336778" 3987 data-auth="false" 3988 onclick="event.preventDefault(); event.stopPropagation(); handleFavoriteClick(336778, this);" 3989 aria-label="Thêm vào yêu thích"> 3990 <svg class="icon icon-fav"><use href="#icon-star"/></svg> 3991 </button> 3992 <div class="mx-status"> 3993 <span class="mx-date">10/10</span> 3994 <span class="mx-time">15:15</span> 3995 </div> 3996 </div> 3997 3998 <div class="mx-center"> 3999 <a href="/slavia-hradec-kralove-vs-spartak-police-nmetuji-id336778" class="mx-teams-link"> 4000 <div class="mx-team-row"> 4001 <img src="/images/football/teams/21648.webp" 4002 alt="Slavia Hradec Králové" class="mx-team-logo" loading="lazy" 4003 onerror="this.onerror=null; this.src='/images/placeholder-team.svg';">
4004 <span class="mx-team-name">Slavia Hradec Králové</span> 4005 <span class="mx-score "> 4006 </span> 4007 </div> 4008 <div class="mx-team-row"> 4009 <img src="/images/football/teams/24193.webp" 4010 alt="Spartak Police n/Metují" class="mx-team-logo" loading="lazy" 4011 onerror="this.onerror=null; this.src='/images/placeholder-team.svg';"> 4012 <span class="mx-team-name">Spartak Police n/Metují</span> 4013 <span class="mx-score "> 4014 </span> 4015 </div> 4016 </a> 4017 </div> 4018 4019 <div class="mx-right "> 4020 <a href="/slavia-hradec-kralove-vs-spartak-police-nmetuji-id336778" class="mx-action-btn preview-btn">Xem trước</a> 4021 </div> 4022 </div> 4023 <div class="mx-row " data-search="4. liga - Divizie C Czech-Republic Vykan Přepeře"> 4024 <div class="mx-left"> 4025 <button type="button" class="mx-fav-btn favorite-btn" 4026 data-match-id="336779" 4027 data-auth="false" 4028 onclick="event.preventDefault(); event.stopPropagation(); handleFavoriteClick(336779, this);" 4029 aria-label="Thêm vào yêu thích"> 4030 <svg class="icon icon-fav"><use href="#icon-star"/></svg> 4031 </button> 4032 <div class="mx-status"> 4033 <span class="mx-date">10/10</span> 4034 <span class="mx-time">15:15</span> 4035 </div> 4036 </div> 4037 4038 <div class="mx-center"> 4039 <a href="/vykan-vs-prepere-id336779" class="mx-teams-link"> 4040 <div class="mx-team-row"> 4041 <img src="https://media.api-sports.io/football/teams/27889.png" 4042 alt="Vykan" class="mx-team-logo" loading="lazy" 4043 onerror="this.onerror=null; this.src='/images/placeholder-team.svg';"> 4044 <span class="mx-team-name">Vykan</span> 4045 <span class="mx-score "> 4046 </span> 4047 </div> 4048 <div class="mx-team-row"> 4049 <img src="/images/football/teams/7336.webp" 4050 alt="Přepeře" class="mx-team-logo" loading="lazy" 4051 onerror="this.onerror=null; this.src='/images/placeholder-team.svg';"> 4052 <span class="mx-team-name">Přepeře</span> 4053 <span class="mx-score "> 4054 </span> 4055 </div> 4056 </a> 4057 </div> 4058 4059 <div class="mx-right "> 4060 <a href="/vykan-vs-prepere-id336779" class="mx-action-btn preview-btn">Xem trước</a> 4061 </div> 4062 </div> 4063 </div> 4064 </div> 4065 <div class="lg-section" data-search="Liga MX Mexico"> 4066 <div class="lg-header"> 4067 <div class="lg-header-left"> 4068 <button type="button" class="lg-fav-btn" aria-label="Pin league"> 4069 <svg class="icon"><use href="#icon-star"/></svg> 4070 </button>
4071 <span class="lg-country-name">Mexico:</span> 4072 <img src="/images/football/leagues/262.webp" 4073 alt="Liga MX" class="lg-logo" loading="lazy" 4074 onerror="if(!this.dataset.fallback){this.src='/images/placeholder-league.svg';this.dataset.fallback='true';}"> 4075 <span class="lg-name">Liga MX</span> 4076 </div> 4077 <div class="lg-header-right"> 4078 <button type="button" class="lg-collapse-btn" onclick="toggleLeague(this)" aria-label="Toggle"> 4079 <svg class="icon icon-collapse"><use href="#icon-chevron-up"/></svg> 4080 </button> 4081 </div> 4082 </div> 4083 4084 <div class="lg-matches"> 4085 <div class="mx-row " data-search="Liga MX Mexico Tigres UANL Toluca Iron Man"> 4086 <div class="mx-left"> 4087 <button type="button" class="mx-fav-btn favorite-btn" 4088 data-match-id="336731" 4089 data-auth="false" 4090 onclick="event.preventDefault(); event.stopPropagation(); handleFavoriteClick(336731, this);" 4091 aria-label="Thêm vào yêu thích"> 4092 <svg class="icon icon-fav"><use href="#icon-star"/></svg> 4093 </button> 4094 <div class="mx-status"> 4095 <span class="mx-date">10/10</span> 4096 <span class="mx-time">10:00</span> 4097 </div> 4098 </div> 4099 4100 <div class="mx-center"> 4101 <a href="/tigres-uanl-vs-toluca-id336731/iron-man-2" class="mx-teams-link"> 4102 <div class="mx-team-row"> 4103 <img src="/images/football/teams/2279.webp" 4104 alt="Tigres UANL" class="mx-team-logo" loading="lazy" 4105 onerror="this.onerror=null; this.src='/images/placeholder-team.svg';"> 4106 <span class="mx-team-name">Tigres UANL</span> 4107 <span class="mx-score "> 4108 </span> 4109 </div> 4110 <div class="mx-team-row"> 4111 <img src="/images/football/teams/2281.webp" 4112 alt="Toluca" class="mx-team-logo" loading="lazy" 4113 onerror="this.onerror=null; this.src='/images/placeholder-team.svg';"> 4114 <span class="mx-team-name">Toluca</span> 4115 <span class="mx-score "> 4116 </span> 4117 </div> 4118 </a> 4119 </div> 4120 4121 <div class="mx-right "> 4122 <div class="mx-streamers"> 4123 <a href="/streamer/81/iron-man" 4124 title="Streamer" 4125 class="mx-streamer-badge "> 4126 BLV IRON MAN 4127 </a> 4128 </div> 4129 <a href="/tigres-uanl-vs-toluca-id336731/iron-man-2" class="mx-action-btn live-btn"> 4130 <svg class="icon"><use href="#icon-live"/></svg> LIVE 4131 </a> 4132 <a href="/tigres-uanl-vs-toluca-id336731/iron-man-2" class="mx-action-btn preview-btn">Xem trước</a> 4133 </div> 4134 </div> 4135 </div> 4136 </div> 4137 <div class="lg-section" data-search="National League - National New-Zealand"> 4138 <div class="lg-header"> 4139 <div class="lg-header-left"> 4140 <button type="button" class="lg-fav-btn" aria-label="Pin league"> 4141 <svg class="icon"><use href="#icon-star"/></svg> 4142 </button>
4143 <span class="lg-country-name">New-Zealand:</span> 4144 <img src="/images/football/leagues/955.webp" 4145 alt="National League - National" class="lg-logo" loading="lazy" 4146 onerror="if(!this.dataset.fallback){this.src='/images/placeholder-league.svg';this.dataset.fallback='true';}"> 4147 <span class="lg-name">National League - National</span> 4148 </div> 4149 <div class="lg-header-right"> 4150 <button type="button" class="lg-collapse-btn" onclick="toggleLeague(this)" aria-label="Toggle"> 4151 <svg class="icon icon-collapse"><use href="#icon-chevron-up"/></svg> 4152 </button> 4153 </div> 4154 </div> 4155 4156 <div class="lg-matches"> 4157 <div class="mx-row " data-search="National League - National New-Zealand Ferrymead Bays Miramar"> 4158 <div class="mx-left"> 4159 <button type="button" class="mx-fav-btn favorite-btn" 4160 data-match-id="336732" 4161 data-auth="false" 4162 onclick="event.preventDefault(); event.stopPropagation(); handleFavoriteClick(336732, this);" 4163 aria-label="Thêm vào yêu thích"> 4164 <svg class="icon icon-fav"><use href="#icon-star"/></svg> 4165 </button> 4166 <div class="mx-status"> 4167 <span class="mx-date">10/10</span> 4168 <span class="mx-time">10:00</span> 4169 </div> 4170 </div> 4171 4172 <div class="mx-center"> 4173 <a href="/ferrymead-bays-vs-miramar-id336732" class="mx-teams-link"> 4174 <div class="mx-team-row"> 4175 <img src="/images/football/teams/20662.webp" 4176 alt="Ferrymead Bays" class="mx-team-logo" loading="lazy" 4177 onerror="this.onerror=null; this.src='/images/placeholder-team.svg';"> 4178 <span class="mx-team-name">Ferrymead Bays</span> 4179 <span class="mx-score "> 4180 </span> 4181 </div> 4182 <div class="mx-team-row"> 4183 <img src="/images/football/teams/2373.webp" 4184 alt="Miramar" class="mx-team-logo" loading="lazy" 4185 onerror="this.onerror=null; this.src='/images/placeholder-team.svg';"> 4186 <span class="mx-team-name">Miramar</span> 4187 <span class="mx-score "> 4188 </span> 4189 </div> 4190 </a> 4191 </div> 4192 4193 <div class="mx-right "> 4194 <a href="/ferrymead-bays-vs-miramar-id336732" class="mx-action-btn preview-btn">Xem trước</a> 4195 </div> 4196 </div> 4197 </div> 4198 </div> 4199 <div class="lg-section" data-search="First League Russia"> 4200 <div class="lg-header"> 4201 <div class="lg-header-left"> 4202 <button type="button" class="lg-fav-btn" aria-label="Pin league"> 4203 <svg class="icon"><use href="#icon-star"/></svg> 4204 </button> 4205 <span class="lg-country-name">Russia:</span> 4206 <img src="/images/football/leagues/236.webp" 4207 alt="First League" class="lg-logo" loading="lazy" 4208 onerror="if(!this.dataset.fallback){this.src='/images/placeholder-league.svg';this.dataset.fallback='true';}">
4209 <span class="lg-name">First League</span> 4210 </div> 4211 <div class="lg-header-right"> 4212 <button type="button" class="lg-collapse-btn" onclick="toggleLeague(this)" aria-label="Toggle"> 4213 <svg class="icon icon-collapse"><use href="#icon-chevron-up"/></svg> 4214 </button> 4215 </div> 4216 </div> 4217 4218 <div class="lg-matches"> 4219 <div class="mx-row " data-search="First League Russia Ska-khabarovsk KAMAZ"> 4220 <div class="mx-left"> 4221 <button type="button" class="mx-fav-btn favorite-btn" 4222 data-match-id="337796" 4223 data-auth="false" 4224 onclick="event.preventDefault(); event.stopPropagation(); handleFavoriteClick(337796, this);" 4225 aria-label="Thêm vào yêu thích"> 4226 <svg class="icon icon-fav"><use href="#icon-star"/></svg> 4227 </button> 4228 <div class="mx-status"> 4229 <span class="mx-date">10/10</span> 4230 <span class="mx-time">14:00</span> 4231 </div> 4232 </div> 4233 4234 <div class="mx-center"> 4235 <a href="/ska-khabarovsk-vs-kamaz-id337796" class="mx-teams-link"> 4236 <div class="mx-team-row"> 4237 <img src="/images/football/teams/1087.webp" 4238 alt="Ska-khabarovsk" class="mx-team-logo" loading="lazy" 4239 onerror="this.onerror=null; this.src='/images/placeholder-team.svg';"> 4240 <span class="mx-team-name">Ska-khabarovsk</span> 4241 <span class="mx-score "> 4242 </span> 4243 </div> 4244 <div class="mx-team-row"> 4245 <img src="/images/football/teams/6801.webp" 4246 alt="KAMAZ" class="mx-team-logo" loading="lazy" 4247 onerror="this.onerror=null; this.src='/images/placeholder-team.svg';"> 4248 <span class="mx-team-name">KAMAZ</span> 4249 <span class="mx-score "> 4250 </span> 4251 </div> 4252 </a> 4253 </div> 4254 4255 <div class="mx-right "> 4256 <a href="/ska-khabarovsk-vs-kamaz-id337796" class="mx-action-btn preview-btn">Xem trước</a> 4257 </div> 4258 </div> 4259 </div> 4260 </div> 4261 <div class="lg-section" data-search="Premier League Lesotho"> 4262 <div class="lg-header"> 4263 <div class="lg-header-left"> 4264 <button type="button" class="lg-fav-btn" aria-label="Pin league"> 4265 <svg class="icon"><use href="#icon-star"/></svg> 4266 </button> 4267 <span class="lg-country-name">Lesotho:</span> 4268 <img src="/images/football/leagues/962.webp" 4269 alt="Premier League" class="lg-logo" loading="lazy" 4270 onerror="if(!this.dataset.fallback){this.src='/images/placeholder-league.svg';this.dataset.fallback='true';}"> 4271 <span class="lg-name">Premier League</span> 4272 </div> 4273 <div class="lg-header-right"> 4274 <button type="button" class="lg-collapse-btn" onclick="toggleLeague(this)" aria-label="Toggle"> 4275 <svg class="icon icon-collapse"><use href="#icon-chevron-up"/></svg> 4276 </button> 4277 </div> 4278 </div> 4279 4280 <div class="lg-matches"> 4281 <div class="mx-row " data-search="Premier League Lesotho Machokha Mzamane"> 4282 <div class="mx-left"> 4283 <button type="button" class="mx-fav-btn favorite-btn" 4284 data-match-id="346863" 4285 data-auth="false" 4286 onclick="event.preventDefault(); event.stopPropagation(); handleFavoriteClick(346863, this);" 4287 aria-label="Thêm vào yêu thích"> 4288 <svg class="icon icon-fav"><use href="#icon-star"/></svg> 4289 </button> 4290 <div class="mx-status">
4291 <span class="mx-date">10/10</span> 4292 <span class="mx-time">14:30</span> 4293 </div> 4294 </div> 4295 4296 <div class="mx-center"> 4297 <a href="/machokha-vs-mzamane-id346863" class="mx-teams-link"> 4298 <div class="mx-team-row"> 4299 <img src="/images/football/teams/20984.webp" 4300 alt="Machokha" class="mx-team-logo" loading="lazy" 4301 onerror="this.onerror=null; this.src='/images/placeholder-team.svg';"> 4302 <span class="mx-team-name">Machokha</span> 4303 <span class="mx-score "> 4304 </span> 4305 </div> 4306 <div class="mx-team-row"> 4307 <img src="https://media.api-sports.io/football/teams/25066.png" 4308 alt="Mzamane" class="mx-team-logo" loading="lazy" 4309 onerror="this.onerror=null; this.src='/images/placeholder-team.svg';"> 4310 <span class="mx-team-name">Mzamane</span> 4311 <span class="mx-score "> 4312 </span> 4313 </div> 4314 </a> 4315 </div> 4316 4317 <div class="mx-right "> 4318 <a href="/machokha-vs-mzamane-id346863" class="mx-action-btn preview-btn">Xem trước</a> 4319 </div> 4320 </div> 4321 </div> 4322 </div> 4323 <div class="lg-section" data-search="4. liga - Divizie A Czech-Republic"> 4324 <div class="lg-header"> 4325 <div class="lg-header-left"> 4326 <button type="button" class="lg-fav-btn" aria-label="Pin league"> 4327 <svg class="icon"><use href="#icon-star"/></svg> 4328 </button> 4329 <span class="lg-country-name">Czech-Republic:</span> 4330 <img src="/images/football/leagues/350.webp" 4331 alt="4. liga - Divizie A" class="lg-logo" loading="lazy" 4332 onerror="if(!this.dataset.fallback){this.src='/images/placeholder-league.svg';this.dataset.fallback='true';}"> 4333 <span class="lg-name">4. liga - Divizie A</span> 4334 </div> 4335 <div class="lg-header-right"> 4336 <button type="button" class="lg-collapse-btn" onclick="toggleLeague(this)" aria-label="Toggle"> 4337 <svg class="icon icon-collapse"><use href="#icon-chevron-up"/></svg> 4338 </button> 4339 </div> 4340 </div> 4341 4342 <div class="lg-matches"> 4343 <div class="mx-row " data-search="4. liga - Divizie A Czech-Republic Křimice Spartak Soběslav"> 4344 <div class="mx-left"> 4345 <button type="button" class="mx-fav-btn favorite-btn" 4346 data-match-id="336774" 4347 data-auth="false" 4348 onclick="event.preventDefault(); event.stopPropagation(); handleFavoriteClick(336774, this);" 4349 aria-label="Thêm vào yêu thích"> 4350 <svg class="icon icon-fav"><use href="#icon-star"/></svg> 4351 </button> 4352 <div class="mx-status"> 4353 <span class="mx-date">10/10</span> 4354 <span class="mx-time">15:15</span> 4355 </div> 4356 </div> 4357 4358 <div class="mx-center"> 4359 <a href="/krimice-vs-spartak-sobeslav-id336774" class="mx-teams-link"> 4360 <div class="mx-team-row"> 4361 <img src="/images/football/teams/26228.webp" 4362 alt="Křimice" class="mx-team-logo" loading="lazy" 4363 onerror="this.onerror=null; this.src='/images/placeholder-team.svg';">
4364 <span class="mx-team-name">Křimice</span> 4365 <span class="mx-score "> 4366 </span> 4367 </div> 4368 <div class="mx-team-row"> 4369 <img src="/images/football/teams/7360.webp" 4370 alt="Spartak Soběslav" class="mx-team-logo" loading="lazy" 4371 onerror="this.onerror=null; this.src='/images/placeholder-team.svg';"> 4372 <span class="mx-team-name">Spartak Soběslav</span> 4373 <span class="mx-score "> 4374 </span> 4375 </div> 4376 </a> 4377 </div> 4378 4379 <div class="mx-right "> 4380 <a href="/krimice-vs-spartak-sobeslav-id336774" class="mx-action-btn preview-btn">Xem trước</a> 4381 </div> 4382 </div> 4383 </div> 4384 </div> 4385 <div class="lg-section" data-search="3. liga - CFL A Czech-Republic"> 4386 <div class="lg-header"> 4387 <div class="lg-header-left"> 4388 <button type="button" class="lg-fav-btn" aria-label="Pin league"> 4389 <svg class="icon"><use href="#icon-star"/></svg> 4390 </button> 4391 <span class="lg-country-name">Czech-Republic:</span> 4392 <img src="/images/football/leagues/348.webp" 4393 alt="3. liga - CFL A" class="lg-logo" loading="lazy" 4394 onerror="if(!this.dataset.fallback){this.src='/images/placeholder-league.svg';this.dataset.fallback='true';}"> 4395 <span class="lg-name">3. liga - CFL A</span> 4396 </div> 4397 <div class="lg-header-right"> 4398 <button type="button" class="lg-collapse-btn" onclick="toggleLeague(this)" aria-label="Toggle"> 4399 <svg class="icon icon-collapse"><use href="#icon-chevron-up"/></svg> 4400 </button> 4401 </div> 4402 </div> 4403 4404 <div class="lg-matches"> 4405 <div class="mx-row " data-search="3. liga - CFL A Czech-Republic Aritma Praha Bohemians 1905 II"> 4406 <div class="mx-left"> 4407 <button type="button" class="mx-fav-btn favorite-btn" 4408 data-match-id="336780" 4409 data-auth="false" 4410 onclick="event.preventDefault(); event.stopPropagation(); handleFavoriteClick(336780, this);" 4411 aria-label="Thêm vào yêu thích"> 4412 <svg class="icon icon-fav"><use href="#icon-star"/></svg> 4413 </button> 4414 <div class="mx-status"> 4415 <span class="mx-date">10/10</span> 4416 <span class="mx-time">15:15</span> 4417 </div> 4418 </div> 4419 4420 <div class="mx-center"> 4421 <a href="/aritma-praha-vs-bohemians-1905-ii-id336780" class="mx-teams-link"> 4422 <div class="mx-team-row"> 4423 <img src="/images/football/teams/7269.webp" 4424 alt="Aritma Praha" class="mx-team-logo" loading="lazy" 4425 onerror="this.onerror=null; this.src='/images/placeholder-team.svg';"> 4426 <span class="mx-team-name">Aritma Praha</span> 4427 <span class="mx-score "> 4428 </span> 4429 </div> 4430 <div class="mx-team-row"> 4431 <img src="/images/football/teams/14473.webp" 4432 alt="Bohemians 1905 II" class="mx-team-logo" loading="lazy" 4433 onerror="this.onerror=null; this.src='/images/placeholder-team.svg';">
4434 <span class="mx-team-name">Bohemians 1905 II</span> 4435 <span class="mx-score "> 4436 </span> 4437 </div> 4438 </a> 4439 </div> 4440 4441 <div class="mx-right "> 4442 <a href="/aritma-praha-vs-bohemians-1905-ii-id336780" class="mx-action-btn preview-btn">Xem trước</a> 4443 </div> 4444 </div> 4445 </div> 4446 </div> 4447 <nav aria-label="Điều hướng trang" class="mt-4 px-3 match-list-paging"> 4448 <ul class="pagination justify-content-center flex-wrap"> 4449 <li class="page-item disabled"> 4450 <a class="page-link" href="/lich-thi-dau"><svg class="icon"><use href="#icon-chevrons-left"/></svg></a> 4451 </li> 4452 <li class="page-item disabled"> 4453 <a class="page-link" href="/lich-thi-dau"><svg class="icon"><use href="#icon-chevron-left"/></svg></a> 4454 </li> 4455 <li class="page-item active"> 4456 <a class="page-link" href="/lich-thi-dau">1</a> 4457 </li> 4458 <li class="page-item "> 4459 <a class="page-link" href="/lich-thi-dau?page=2">2</a> 4460 </li> 4461 <li class="page-item "> 4462 <a class="page-link" href="/lich-thi-dau?page=3">3</a> 4463 </li> 4464 <li class="page-item "> 4465 <a class="page-link" href="/lich-thi-dau?page=4">4</a> 4466 </li> 4467 <li class="page-item "> 4468 <a class="page-link" href="/lich-thi-dau?page=5">5</a> 4469 </li> 4470 <li class="page-item "> 4471 <a class="page-link" href="/lich-thi-dau?page=2"><svg class="icon"><use href="#icon-chevron-right"/></svg></a> 4472 </li> 4473 <li class="page-item "> 4474 <a class="page-link" href="/lich-thi-dau?page=193"><svg class="icon"><use href="#icon-chevrons-right"/></svg></a> 4475 </li> 4476 </ul> 4477 </nav> 4478 <div class="text-center text-muted mt-2 pb-3 match-list-paging"> 4479 <small>Trang 1 / 193 · Tổng 9607 trận đấu</small> 4480 </div> 4481 4482 <!-- 页é¢SEOå 容 --> 4483 4484 <section class="page-seo-content mb-4"> 4485 <article> 4486 <header> 4487 <div class="intro-box"> 4488 <p>Bạn là má»t tÃn Äá» túc cầu giáo và không muá»n bá» lỡ bất kỳ tráºn cầu Äá»nh cao nà o? Viá»c nắm bắt <a href="/lich-thi-dau" title="Lá»ch thi Äấu bóng Äá"><strong>lá»ch thi Äấu bóng Äá</strong></a> chÃnh xác là chìa khóa Äá» bạn sắp xếp thá»i gian và táºn hưá»ng trá»n vẹn không khà sôi Äá»ng trên sân cá». Tại <a href="/" title="Xoigac TV"><strong>Xoigac TV</strong></a>, chúng tôi cung cấp há» thá»ng lá»ch thi Äấu trá»±c tuyến hiá»n Äại, cáºp nháºt từng giây cho tất cả các giải Äấu lá»n nhá» trên toà n thế giá»i.</p> 4489 </div> 4490 </header> 4491 4492 <section> 4493 <h2>1. Lá»ch thi Äấu bóng Äá hôm nay và ngà y mai có gì hot?</h2> 4494 <p>Äá» Äáp ứng nhu cầu tra cứu nhanh, Xoigac TV tá»ng hợp lá»ch trình cá»§a những giải Äấu ÄÆ°á»£c quan tâm nhất hiá»n nay. Má»i thay Äá»i vá» giá» thi Äấu, sân váºn Äá»ng hay Äá»i hình dá»± kiến Äá»u ÄÆ°á»£c Äá»i ngÅ© biên táºp viên cáºp nháºt liên tục.</p> 4495 4496 <h3>Lá»ch thi Äấu Ngoại hạng Anh (Premier League)</h3> 4497 <p>Giải Äấu hấp dẫn nhất hà nh tinh vá»i sá»± góp mặt cá»§a những ông lá»n như Man City, Arsenal, Liverpool hay Man Utd. Lá»ch thi Äấu thưá»ng diá» n ra táºp trung và o các ngà y thứ 7 và Chá»§ nháºt hà ng tuần.</p> 4498 4499 <h3>Lá»ch thi Äấu Cup C1 (Champions League)</h3> 4500 <p>NÆ¡i quy tụ những Äá»i bóng mạnh nhất châu Ãu. Các tráºn Äấu thưá»ng diá» n ra và o rạng sáng thứ 4 và thứ 5 (giá» Viá»t Nam). Äừng quên Äặt báo thức tại Xoigac TV Äá» xem trá»±c tiếp những cuá»c Äá»i Äầu ká»ch tÃnh nà y.</p> 4501 </section> 4502 4503 <section> 4504 <h2>3. Tại sao nên chá»n Xoigac TV Äá» xem lá»ch thi Äấu?</h2> 4505 <p>Giữa hà ng trÄm website thá» thao, <strong>Xoigac TV</strong> vẫn là Äá»a chỠưu tiên cá»§a hà ng triá»u ngưá»i hâm má» nhá»
4505những ưu Äiá»m vượt trá»i:</p> 4506 <ul> 4507 <li><strong>TÃnh chÃnh xác cao:</strong> Thông tin ÄÆ°á»£c lấy từ các nguá»n uy tÃn quá»c tế, Äảm bảo không có sai sót vá» múi giá».</li> 4508 <li><strong>Giao diá»n thông minh:</strong> Thiết kế tá»i giản, dá» dà ng tra cứu theo ngà y, theo giải Äấu hoặc theo câu lạc bá» yêu thÃch.</li> 4509 <li><strong>TÃch hợp Äa nÄng:</strong> Bên cạnh lá»ch thi Äấu, bạn có thá» xem thêm bảng xếp hạng, kết quả bóng Äá và nháºn Äá»nh chuyên sâu.</li> 4510 </ul> 4511 </section> 4512 4513 <section> 4514 <h2>4. Hưá»ng dẫn cách tra cứu lá»ch thi Äấu tại Xoigac TV</h2> 4515 <ol> 4516 <li>Truy cáºp và o trình duyá»t và tìm kiếm từ khóa <strong>"Xoigac TV"</strong>.</li> 4517 <li>Tại trang chá»§, chá»n mục <strong>"Lá»ch Thi Äấu"</strong> trên thanh menu chÃnh.</li> 4518 <li>Sá» dụng bá» lá»c (Filter) Äá» chá»n ngà y hoặc giải Äấu cụ thá» mà bạn quan tâm.</li> 4519 <li>Nhấn và o tráºn Äấu Äá» xem chi tiết thông tin Äá»i Äầu (H2H) và lấy link xem trá»±c tiếp.</li> 4520 </ol> 4521 </section> 4522 4523 <footer> 4524 <p><em>Viá»c theo dõi <strong>lá»ch thi Äấu bóng Äá</strong> thưá»ng xuyên giúp bạn không bá» lỡ những khoảnh khắc lá»ch sá». Hãy truy cáºp <a href="https://xoigac.tv" title="Trá»±c tiếp bóng Äá Xoigac TV"><strong>Xoigac TV</strong></a> ngay hôm nay!</em></p> 4525 </footer> 4526 </article> 4527 </section> 4528 4529</div> 4530 4531 4532 4533 </main> 4534 4535 <!-- SPA å è½½è¿åº¦æ¡ --> 4536 <div class="spa-loading-bar" id="spaLoadingBar"></div> 4537 4538 <!-- åºé¨ --> 4539 <footer class="footer"> 4540 <div class="container"> 4541 <div class="row"> 4542 <div class="col-lg-4 mb-4 mb-lg-0"> 4543 <div class="footer-brand mb-3"> 4544 <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"> 4545 </div> 4546 <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> 4547 <div class="social-links"> 4548 <a href="https://weibo.com" target="_blank" rel="nofollow noopener" aria-label="Weibo"><i class="fab fa-weibo" aria-hidden="true"></i></a> 4549 <a href="https://weixin.qq.com" target="_blank" rel="nofollow noopener" aria-label="WeChat"><i class="fab fa-weixin" aria-hidden="true"></i></a> 4550 <a href="https://twitter.com" target="_blank" rel="nofollow noopener" aria-label="Twitter"><i class="fab fa-twitter" aria-hidden="true"></i></a> 4551 <a href="https://youtube.com" target="_blank" rel="nofollow noopener" aria-label="YouTube"><i class="fab fa-youtube" aria-hidden="true"></i></a> 4552 </div> 4553 </div> 4554 <div class="col-6 col-lg-2"> 4555 <h2 class="footer-title">Liên kết nhanh</h2> 4556 <ul class="footer-links"> 4557 <li><a href="/truc-tiep">Trực tiếp</a></li> 4558 <li><a href="/hom-nay">Hôm nay</a></li> 4559 <li><a href="/lich-thi-dau">Lịch thi đấu</a></li> 4560 <li><a href="/tin-tuc-bong-da">Tin Tức</a></li> 4561 <li><a href="/nhan-dinh-bong-da">Nhận Định</a></li> 4562 <li><a href="/giai-dau">Trung tâm giải đấu</a></li> 4563 <li><a href="/doi-bong">Trung tâm câu lạc bộ</a></li> 4564 <li><a href="/leaderboard">BXH Streamer</a></li> 4565 </ul> 4566 </div> 4567 <div class="col-lg-4"> 4568 <h2 class="footer-title">Tải ứng dụng</h2> 4569 <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> 4570 <div class="app-buttons"> 4571 <a href="https://www.apple.com/app-store/" target="_blank" rel="nofollow noopener" class="app-btn" aria-label="App Store"> 4572 <i class="fab fa-apple" aria-hidden="true"></i>
4573 <span>App Store</span> 4574 </a> 4575 <a href="https://play.google.com/store" target="_blank" rel="nofollow noopener" class="app-btn" aria-label="Google Play"> 4576 <i class="fab fa-android" aria-hidden="true"></i> 4577 <span>Android</span> 4578 </a> 4579 </div> 4580 </div> 4581 </div> 4582 <hr class="border-secondary my-4"> 4583 <div class="row align-items-center"> 4584 <div class="col-md-6 text-center text-md-start mb-3 mb-md-0"> 4585 <p class="small text-muted mb-2">© 2026 XOIGAC.TV. All rights reserved.</p> 4586 <!-- DMCA Protection Badge --> 4587 <div class="dmca-badge"> 4588 <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"> 4589 <img src="/images/dmca_protected_sml_120n.png" alt="DMCA.com Protection Status" width="121" height="24" / loading="lazy"> 4590 </a> 4591 <!-- Using self-hosted DMCA image to eliminate third-party cookies --> 4592 </div> 4593 </div> 4594 <div class="col-md-6 text-center text-md-end"> 4595 <ul class="footer-bottom-links"> 4596 <li> 4597 <a href="/sitemap.xml" 4598 target="_blank"> 4599 Sơ đồ trang 4600 </a> 4601 </li> 4602 <li><a href="/chinh-sach-bao-mat">Chính sách bảo mật</a></li> 4603 <li><a href="/dieu-khoan-su-dung">Điều khoản dịch vụ</a></li> 4604 <li><a href="/lien-he">Liên hệ</a></li> 4605 <li><a href="/gioi-thieu">Về chúng tôi</a></li> 4606 <li><a href="/dmca" rel="nofollow">DMCA</a></li> 4607 </ul> 4608 </div> 4609 </div> 4610 </div> 4611 </footer> 4612 4613 <!-- è天室弹çªé®ç½© --> 4614 <div class="chat-modal-overlay d-none" id="chatModalOverlay" style="display: none !important;"></div> 4615 4616 <!-- èå¤©å®¤å¼¹çª --> 4617 <div class="chat-modal d-none" id="chatModal"> 4618 <div class="chat-modal-header"> 4619 <span class="chat-modal-title"></span> 4620 <div class="chat-modal-actions"> 4621 <button class="chat-modal-btn" id="chatModalFullscreen" data-i18n-title="common.fullscreen" title="Toàn màn hình"> 4622 <i class="fas fa-expand"></i> 4623 </button> 4624 <button class="chat-modal-btn chat-modal-close-btn" id="chatModalClose" data-i18n-title="common.collapse" title="Thu gọn"> 4625 <i class="fas fa-chevron-down"></i> 4626 </button> 4627 </div> 4628 </div> 4629 <div class="chat-modal-body" id="chatModalBody"> 4630 <!-- ç§»å¨ç«¯è§é¢ææ¾å¨åºå --> 4631 <div class="mobile-video-section d-none" id="mobileVideoSection"> 4632 <div class="mobile-video-wrapper"> 4633 <video id="mobileVideo" playsinline muted controls crossorigin> 4634 <!-- è§é¢æºä¼éè¿JavaScriptå¨æè®¾ç½® --> 4635 </video> 4636 <!-- å ³éæé®ç´æ¥æ¾å¨è§é¢å³ä¸è§ --> 4637 <button class="mobile-video-close" id="mobileVideoClose" data-i18n-title="common.closeVideo" title="Đóng video"> 4638 <i class="fas fa-times"></i> 4639 </button> 4640 </div> 4641 </div> 4642 <!-- è天室å 容ä¼è¢«å¤å¶å°è¿é --> 4643 </div> 4644 </div> 4645 4646 <!-- å ¨å±æµ®å¨æé®ç» --> 4647 <div class="global-fab-container" id="globalFabContainer"> 4648 <!-- æ¨ééç¥è®¢é --> 4649 <button class="global-fab-btn push-fab" id="push-subscribe-btn" data-i18n-title="push.enableNotifications" title="å¼å¯æ¨ééç¥" style="display: none;"> 4650 <i class="fas fa-bell"></i> 4651 </button> 4652 <!-- 强å¶å·æ° --> 4653 <button class="global-fab-btn refresh-fab" id="fabRefresh" data-i18n-title="common.refresh" title="Làm mới"> 4654 <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> 4655 </button> 4656 <!-- åå°é¡¶é¨ --> 4657 <button class="global-fab-btn back-to-top-fab" id="fabBackToTop" data-i18n-title="common.backToTop" title="Về đầu trang"> 4658 <i class="fas fa-chevron-up"></i> 4659 </button> 4660 <!-- æå¼è天室ï¼åªå¨æèå¤©å®¤æ¶æ¾ç¤ºï¼å·²ææ¶ç¦ç¨ï¼ --> 4661 </div> 4662 4663 <!-- ä¼åçJavaScriptå è½½ - 使ç¨deferåasync --> 4664 <!-- å ³é®çç¬¬ä¸æ¹åº - 使ç¨defer --> 4665 <!-- â æ·»å crossorigin 屿§ä»¥æ¯æç¬¬ä¸æ¹Cookie --> 4666
4666<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>
4666 4667
4667<script src="https://cdnjs.cloudflare.com/ajax/libs/microsoft-signalr/8.0.0/signalr.min.js" defer crossorigin></script>
4667 4668
4668<script src="https://cdn.jsdelivr.net/npm/[email protected]/dist/hls.min.js" defer crossorigin></script>
4668 4669 4670 <!-- åºç¨ç¨åºJavaScript - IVS ææ¾å¨ç¸å ³èæ¬å¿ é¡»æé¡ºåºåæ¥å è½½ --> 4671 <!-- ç产ç¯å¢ï¼ä½¿ç¨æå æä»¶ --> 4672 <!-- éªè¯ç 管çå¨ - å¿ é¡»å¨ app.bundle.js ä¹åå è½½ï¼app.bundle å å« auth-modal.jsï¼ --> 4673
4673<script src="/dist/js/captcha-manager.js?v=6Cj5aPMUUHrOwMbOlykc3RZYjobhKsvkLc5aNPDmZi0"></script>
4673 4674 <!-- æ ¸å¿åè½å ï¼3个JSåå¹¶ï¼- 忥å è½½ --> 4675
4675<script src="/dist/js/core.bundle.js?v=icHE5APGMG30g9fEySb-7hZ5vZ3iHbgJVhyUPH3v4Q8"></script>
4675 4676 <!-- ææ¾å¨åè½å ï¼8个JSåå¹¶ï¼- å»¶è¿å è½½ --> 4677
4677<script src="/dist/js/player.bundle.js?v=8u5CWjOuanIR8_RT1hwbFVrUcYrqqHSdSl_i6iFuPEQ" defer></script>
4677 4678 <!-- åºç¨åè½å ï¼å« streamer-follow.js / auth-modal.jsï¼- å»¶è¿å è½½ --> 4679
4679<script src="/dist/js/app.bundle.js?v=mOWIwnGUFcWjsPNJLvW6NpHaA0wGjgZ4WYEv8xFjIMQ" defer></script>
4679 4680
4680<script src="/dist/js/streamer-follow.js?v=p3zJpid1v8N4DkO4wwc04njd4zAS2j99EHmdb_HUbMY" defer></script>
4680 4681
4681<script src="/js/custom-select.js?v=unrE77TQiy-qc-Fun5fVdZBrEj9yh0GaRL5AHtdIOO8" defer></script>
4681 4682 4683 <!-- å èé ç½®èæ¬ - å¿ é¡»å¨å ¶ä»èæ¬ä¹åæ§è¡ --> 4684
4684<script> 4685 // ç¦ç¨ i18n.js çèªå¨è¯è¨åæ¢ UI å建ï¼ä½¿ç¨æå¡ç«¯æ¸²æçæé®ï¼ 4686 window.__disableI18nUI = true; 4687 window.streamerFollowI18n = { 4688 follow: 'Theo dõi', 4689 unfollow: 'Bá» theo dõi', 4690 followed: 'Äã theo dõi', 4691 unfollowed: 'Äã bá» theo dõi' 4692 }; 4693 window.showFollowerCount = true; 4694 </script>
4694 4695 4696 <!-- å ¨å±æµ®å¨æé®é»è¾ --> 4697
4697<script> 4698 (function() { 4699 const fabBackToTop = document.getElementById('fabBackToTop'); 4700 const fabRefresh = document.getElementById('fabRefresh'); 4701 const fabOpenChat = document.getElementById('fabOpenChat'); 4702 const chatRoom = document.querySelector('.chat-room-container'); 4703 const fabChatAvatar = document.getElementById('fabChatAvatar'); 4704 const chatModal = document.getElementById('chatModal'); 4705 const chatModalOverlay = document.getElementById('chatModalOverlay'); 4706 const chatModalBody = document.getElementById('chatModalBody'); 4707 const chatModalClose = document.getElementById('chatModalClose'); 4708 const chatModalFullscreen = document.getElementById('chatModalFullscreen'); 4709 const mobileVideoSection = document.getElementById('mobileVideoSection'); 4710 const mobileVideo = document.getElementById('mobileVideo'); 4711 const mobileVideoClose = document.getElementById('mobileVideoClose'); 4712 4713 let isFullscreen = false; 4714 let originalChatParent = null; 4715 let originalChatNextSibling = null; 4716 let isVideoPlaying = false; 4717 let wasVideoCollapsedBeforeModal = true; // è®°å½æå¼å¼¹çªåè§é¢æ¯å¦æ¶èµ· 4718 4719 // 妿æè天室䏿èèµå¾æ ï¼åæèèµå¾æ 忥å°å³ä¸è§ FAB 4720 if (chatRoom && fabChatAvatar) { 4721 const leagueImg = chatRoom.querySelector('.chat-icon-wrapper img'); 4722 if (leagueImg && leagueImg.src) { 4723 fabChatAvatar.src = leagueImg.src; 4724 } 4725 } 4726 4727 // åå°é¡¶é¨åå·æ°æé®ï¼PC æ»å¨>300px 常æ¾ï¼ç§»å¨ç«¯æ»å¨åæ¾ç¤ºï¼5 ç§æ åç´æ»å¨èªå¨éè 4728 let scrollThrottle = null; 4729 const FAB_IDLE_HIDE_MS = 5000; 4730 const FAB_SCROLL_DELTA = 8; 4731 let fabLastScrollTop = 0; 4732 let fabLastScrollActivityAt = 0; 4733 const globalFabContainer = document.getElementById('globalFabContainer'); 4734 4735 function isMobileFabViewport() { 4736 return window.matchMedia('(max-width: 768px)').matches; 4737 } 4738 4739 function getScrollTop() { 4740 return window.scrollY || document.documentElement.scrollTop || document.body.scrollTop || 0; 4741 } 4742 4743 function isFabScrollEligible() { 4744 return getScrollTop() > 300; 4745 } 4746 4747 function hideFabScrollButtons() { 4748 if (fabBackToTop) fabBackToTop.classList.remove('visible'); 4749 if (fabRefresh) fabRefresh.classList.remove('visible'); 4750 if (globalFabContainer) globalFabContainer.classList.add('fab-auto-hidden'); 4751 window.updateFabContainerVisibility(); 4752 } 4753 4754 function showFabScrollButtons() { 4755 if (fabBackToTop) fabBackToTop.classList.add('visible'); 4756 if (fabRefresh) fabRefresh.classList.add('visible'); 4757 if (globalFabContainer) globalFabContainer.classList.remove('fab-auto-hidden'); 4758 window.updateFabContainerVisibility(); 4759 } 4760 4761 function markFabScrollActivity() { 4762 fabLastScrollActivityAt = Date.now(); 4763 } 4764 4765 function updateDesktopFabVisibility() { 4766 if (isFabScrollEligible()) { 4767 showFabScrollButtons(); 4768 } else { 4769 hideFabScrollButtons(); 4770 } 4771 } 4772 4773 function handleFabScroll() { 4774 const scrollTop = getScrollTop(); 4775 const delta = Math.abs(scrollTop - fabLastScrollTop); 4776 4777 if (isMobileFabViewport()) { 4778 if (scrollTop <= 300) { 4779 fabLastScrollTop = scrollTop; 4780 hideFabScrollButtons(); 4781 return; 4782 } 4783 if (delta >= FAB_SCROLL_DELTA) { 4784 fabLastScrollTop = scrollTop; 4785 markFabScrollActivity(); 4786 showFabScrollButtons(); 4787 } 4788 return; 4789 } 4790 4791 fabLastScrollTop = scrollTop; 4792 updateDesktopFabVisibility(); 4793 } 4794 4795 // Function to update FAB container visibility 4796 window.updateFabContainerVisibility = function() { 4797 const container = document.getElementById('globalFabContainer'); 4798 const fabPushBtn = container ? container.querySelector('#push-subscribe-btn') : null; 4799 const hasVisibleButtons = (fabBackToTop && fabBackToTop.classList.contains('visible')) || 4800 (fabRefresh && fabRefresh.classList.contains('visible')) || 4801 (fabPushBtn && fabPushBtn.style.display !== 'none' && fabPushBtn.classList.contains('visible')); 4802 4803 if (container) { 4804 if (hasVisibleButtons && !container.classList.contains('fab-auto-hidden')) { 4805 container.style.display = 'flex'; 4806 } else { 4807 container.style.display = 'none'; 4808 } 4809 } 4810 }; 4811 4812 window.addEventListener('scroll', function() { 4813 if (scrollThrottle) return; 4814 scrollThrottle = setTimeout(function() { 4815 handleFabScroll(); 4816 scrollThrottle = null; 4817 }, 80); 4818 }, { passive: true }); 4819 4820 window.addEventListener('resize', function() { 4821 fabLastScrollTop = getScrollTop(); 4822 if (isMobileFabViewport()) { 4823 if (!isFabScrollEligible()) { 4824 hideFabScrollButtons(); 4825 } 4826 } else { 4827 if (globalFabContainer) globalFabContainer.classList.remove('fab-auto-hidden'); 4828 updateDesktopFabVisibility(); 4829 } 4830 }, { passive: true }); 4831 4832 // ç§»å¨ç«¯ï¼å®æ¶å¼ºå¶æ£æ¥ï¼é¿å scroll/touch æ¼å¤å¯¼è´ä¸æ¶å¤± 4833 setInterval(function() { 4834 if (!isMobileFabViewport()) return; 4835 if (!isFabScrollEligible()) { 4836 if (fabBackToTop && fabBackToTop.classList.contains('visible')) { 4837 hideFabScrollButtons(); 4838 } 4839 return; 4840 } 4841 const isVisible = fabBackToTop && fabBackToTop.classList.contains('visible'); 4842 if (!isVisible) return; 4843 const idleMs = Date.now() - fabLastScrollActivityAt; 4844 if (idleMs >= FAB_IDLE_HIDE_MS) { 4845 hideFabScrollButtons(); 4846 } 4847 }, 400); 4848 4849 // Initial check 4850 fabLastScrollTop = getScrollTop(); 4851 if (isMobileFabViewport()) { 4852 if (isFabScrollEligible()) { 4853 showFabScrollButtons(); 4854 markFabScrollActivity(); 4855 } else { 4856 hideFabScrollButtons(); 4857 } 4858 } else { 4859 updateDesktopFabVisibility(); 4860 } 4861 4862 // åå°é¡¶é¨ç¹å»äºä»¶ï¼å ¼å®¹ç§»å¨ç«¯ï¼é¿å éè¦ç¹ä¸¤æ¬¡çé®é¢ï¼ 4863 function scrollToTop(e) { 4864 e.preventDefault(); 4865 e.stopPropagation(); 4866 window.scrollTo({ top: 0, behavior: 'smooth' }); 4867 } 4868 4869 if (fabBackToTop) { 4870 fabBackToTop.addEventListener('click', scrollToTop); 4871 fabBackToTop.addEventListener('touchend', function(e) { 4872 e.preventDefault(); 4873 scrollToTop(e); 4874 }); 4875 } 4876 4877 // 强å¶å·æ°ç¹å»äºä»¶ 4878 function forceRefresh(e) { 4879 e.preventDefault(); 4880 e.stopPropagation(); 4881 // 强å¶å·æ°ï¼å¿½ç¥ç¼å 4882 location.reload(true); 4883 } 4884 4885 if (fabRefresh) { 4886 fabRefresh.addEventListener('click', forceRefresh); 4887 fabRefresh.addEventListener('touchend', function(e) { 4888 e.preventDefault(); 4889 forceRefresh(e); 4890 }); 4891 } 4892 4893 // è·ååå§è§é¢ææ¾å¨å ç´ 4894 function getOriginalVideo() { 4895 return document.getElementById('livePlayer'); 4896 } 4897 4898 // 设置移å¨ç«¯è§é¢ææ¾å¨ 4899 function setupMobileVideo() { 4900 const isMobile = window.innerWidth <= 767; 4901 if (!isMobile) return; 4902 4903 const originalVideo = getOriginalVideo(); 4904 if (!originalVideo || !mobileVideo) return; 4905 4906 // å¤å¶è§é¢æº 4907 if (originalVideo.src) { 4908 mobileVideo.src = originalVideo.src; 4909 } else { 4910 const sources = originalVideo.querySelectorAll('source'); 4911 mobileVideo.innerHTML = '';
4912 sources.forEach(source => { 4913 const newSource = source.cloneNode(true); 4914 mobileVideo.appendChild(newSource); 4915 }); 4916 } 4917 4918 // åæ¥ææ¾ç¶æ 4919 if (!originalVideo.paused) { 4920 mobileVideo.currentTime = originalVideo.currentTime; 4921 setTimeout(() => { 4922 mobileVideo.play().catch(console.error); 4923 }, 100); 4924 } 4925 4926 // æ¾ç¤ºç§»å¨ç«¯è§é¢åºå 4927 mobileVideoSection.classList.remove('d-none'); 4928 isVideoPlaying = true; 4929 4930 // ç¦ç¨ç§»å¨ç«¯è§é¢çå ¨å±åè½ 4931 mobileVideo.setAttribute('disablePictureInPicture', 'true'); 4932 mobileVideo.setAttribute('controlsList', 'nofullscreen'); 4933 4934 // çå¬å ¨å±äºä»¶å¹¶é»æ¢ 4935 mobileVideo.addEventListener('webkitfullscreenchange', function() { 4936 if (document.webkitFullscreenElement === mobileVideo) { 4937 document.webkitExitFullscreen(); 4938 } 4939 }); 4940 4941 mobileVideo.addEventListener('fullscreenchange', function() { 4942 if (document.fullscreenElement === mobileVideo) { 4943 document.exitFullscreen(); 4944 } 4945 }); 4946 4947 // æååè§é¢ 4948 originalVideo.pause(); 4949 } 4950 4951 // å ³éç§»å¨ç«¯è§é¢ææ¾å¨ 4952 function closeMobileVideo() { 4953 if (!mobileVideo || !mobileVideoSection) return; 4954 4955 // éèè§é¢åºå 4956 mobileVideoSection.classList.add('d-none'); 4957 mobileVideo.pause(); 4958 isVideoPlaying = false; 4959 } 4960 4961 // æ¾ç¤ºè天室ä¸å¯ç¨æç¤º 4962 function showChatUnavailableHint(message) { 4963 // å建æç¤ºå ç´ 4964 const hint = document.createElement('div'); 4965 hint.className = 'chat-unavailable-hint'; 4966 hint.innerHTML = ` 4967 <div class="chat-hint-content"> 4968 <i class="fas fa-comments-slash"></i> 4969 <span>${message}</span> 4970 </div> 4971 `; 4972 hint.style.cssText = ` 4973 position: fixed; bottom: 100px; right: 24px; z-index: 1000; 4974 background: linear-gradient(135deg, #1e293b 0%, #334155 100%); 4975 color: white; padding: 16px 20px; border-radius: 12px; 4976 box-shadow: 0 8px 32px rgba(0,0,0,0.3); 4977 border: 1px solid rgba(59, 130, 246, 0.3); 4978 font-size: 14px; max-width: 280px; 4979 animation: slideInUp 0.3s ease; 4980 backdrop-filter: blur(10px); 4981 `; 4982 4983 // æ·»å CSSå¨ç» 4984 if (!document.querySelector('#chatHintStyles')) { 4985 const style = document.createElement('style'); 4986 style.id = 'chatHintStyles'; 4987 style.textContent = ` 4988 @keyframes slideInUp { 4989 from { opacity: 0; transform: translateY(20px); } 4990 to { opacity: 1; transform: translateY(0); } 4991 } 4992 .chat-hint-content { 4993 display: flex; align-items: center; gap: 12px; 4994 } 4995 .chat-hint-content i { 4996 color: #fbbf24; font-size: 18px; 4997 } 4998 `; 4999 document.head.appendChild(style); 5000 } 5001 5002 document.body.appendChild(hint); 5003 5004 // 3ç§åèªå¨æ¶å¤± 5005 setTimeout(() => { 5006 hint.style.animation = 'slideOutDown 0.3s ease forwards'; 5007 setTimeout(() => hint.remove(), 300); 5008 }, 3000); 5009 } 5010 5011 // æå¼èå¤©å®¤å¼¹çª 5012 function openChatModal(e) { 5013 if (e) { 5014 e.preventDefault(); 5015 } 5016 if (!chatRoom) { 5017 alert(window.L?.T ? window.L.T('common.noChatRoom') : 'å½å页颿²¡æè天室'); 5018 return; 5019 } 5020 5021 const isMobile = window.innerWidth <= 767; 5022 5023 // è®°å½åå§ä½ç½® 5024 originalChatParent = chatRoom.parentElement; 5025 originalChatNextSibling = chatRoom.nextElementSibling; 5026 5027 // ç§»å¨ç«¯ï¼å§ç»æ¾ç¤ºè§é¢ææ¾å¨+è天室ï¼ä¸ç®¡è§é¢æ¯å¦æ£å¨ææ¾ï¼ 5028 if (isMobile) { 5029 const originalVideo = getOriginalVideo(); 5030 const livePlayerSection = document.getElementById('livePlayerSection'); 5031 if (originalVideo && livePlayerSection) { 5032 // è®°å½æå¼å¼¹çªåè§é¢æ¯å¦æ¶èµ· 5033 wasVideoCollapsedBeforeModal = livePlayerSection.classList.contains('collapsed'); 5034 5035 // 妿è§é¢è¿æ²¡å±å¼ï¼å å±å¼å® 5036 if (wasVideoCollapsedBeforeModal) { 5037 livePlayerSection.classList.remove('collapsed'); 5038 // æ´æ°è§çç´ææé®æå 5039 const watchBtn = document.querySelector('.btn-live-watch'); 5040 if (watchBtn) { 5041 watchBtn.innerHTML = '<i class="fas fa-times"></i>æ¶èµ·ç´æ'; 5042 } 5043 } 5044 // åå¤ç§»å¨ç«¯è§é¢åºå 5045 setupMobileVideo(); 5046 5047 // ä»å¿«æ·è天室æå¼æ¶ï¼èªå¨å¼å§ææ¾ç§»å¨ç«¯è§é¢ 5048 if (mobileVideo) { 5049 setTimeout(function () { 5050 mobileVideo.play().catch(function (err) { 5051 console.warn('èªå¨ææ¾ç§»å¨ç«¯è§é¢å¤±è´¥ï¼', err); 5052 }); 5053 }, 150); 5054 } 5055 } 5056 } 5057 5058 // ç§»å¨è天室å°å¼¹çª 5059 chatModalBody.appendChild(chatRoom); 5060 chatRoom.classList.add('in-modal'); 5061 5062 // æå¼å¼¹çªæ¶ï¼é»è®¤è®©æ¶æ¯åºåæ¾ç¤ºå¨åºé¨ï¼ä½¿ç¨å¹³æ»æ»å¨æ´èªç¶ 5063 const chatMessages = chatRoom.querySelector('#chatMessages'); 5064 if (chatMessages) { 5065 requestAnimationFrame(() => { 5066 if (typeof chatMessages.scrollTo === 'function') { 5067 chatMessages.scrollTo({ 5068 top: chatMessages.scrollHeight, 5069 behavior: 'smooth' 5070 }); 5071 } else { 5072 chatMessages.scrollTop = chatMessages.scrollHeight; 5073 } 5074 }); 5075 } 5076 5077 // æ¾ç¤ºå¼¹çª 5078 chatModal.classList.remove('d-none'); 5079 chatModalOverlay.classList.remove('d-none'); 5080 document.body.style.overflow = 'hidden'; 5081 5082 // èç¦è¾å ¥æ¡ 5083 setTimeout(function() { 5084 const input = chatRoom.querySelector('#chatInput'); 5085 if (input && !input.readOnly) input.focus(); 5086 }, 300); 5087 } 5088 5089 // å ³éèå¤©å®¤å¼¹çª 5090 function closeChatModal(e) { 5091 if (e) { 5092 e.preventDefault(); 5093 } 5094 if (!chatRoom) return; 5095 5096 const isMobile = window.innerWidth <= 767; 5097 5098 // å ³éç§»å¨ç«¯è§é¢ææ¾å¨ï¼æ 论å½åæ¯å¦å¨ææ¾ï¼é½ç»ä¸æ¶èµ·è§é¢åºåï¼ 5099 closeMobileVideo(); 5100 5101 // ç§»å¨ç«¯ï¼æ¢å¤è§é¢ææ¾å¨åæ¥çç¶æ 5102 if (isMobile && wasVideoCollapsedBeforeModal) { 5103 const livePlayerSection = document.getElementById('livePlayerSection'); 5104 const watchBtn = document.querySelector('.btn-live-watch'); 5105 if (livePlayerSection) { 5106 livePlayerSection.classList.add('collapsed'); 5107 } 5108 if (watchBtn) { 5109 watchBtn.innerHTML = '<i class="fas fa-play"></i>è§çç´æ'; 5110 } 5111 } 5112 5113 // æ¢å¤è天室å°åä½ç½® 5114 if (originalChatParent) { 5115 if (originalChatNextSibling) { 5116 originalChatParent.insertBefore(chatRoom, originalChatNextSibling); 5117 } else { 5118 originalChatParent.appendChild(chatRoom); 5119 } 5120 } 5121 chatRoom.classList.remove('in-modal'); 5122 5123 // éèå¼¹çª 5124 chatModal.classList.add('d-none'); 5125 chatModalOverlay.classList.add('d-none'); 5126 chatModal.classList.remove('fullscreen'); 5127 document.body.style.overflow = ''; 5128 isFullscreen = false;
5129 5130 // æ´æ°å ¨å±æé®å¾æ 5131 chatModalFullscreen.innerHTML = '<i class="fas fa-expand"></i>'; 5132 chatModalFullscreen.title = window.L?.T ? window.L.T('common.fullscreen') : 'å ¨å±'; 5133 } 5134 5135 // åæ¢å ¨å± 5136 function toggleFullscreen(e) { 5137 if (e) { 5138 e.preventDefault(); 5139 } 5140 isFullscreen = !isFullscreen; 5141 if (isFullscreen) { 5142 chatModal.classList.add('fullscreen'); 5143 chatModalFullscreen.innerHTML = '<i class="fas fa-compress"></i>'; 5144 chatModalFullscreen.title = window.L?.T ? window.L.T('common.exitFullscreen') : 'éåºå ¨å±'; 5145 } else { 5146 chatModal.classList.remove('fullscreen'); 5147 chatModalFullscreen.innerHTML = '<i class="fas fa-expand"></i>'; 5148 chatModalFullscreen.title = window.L?.T ? window.L.T('common.fullscreen') : 'å ¨å±'; 5149 } 5150 } 5151 5152 // æ£æµæ¯å¦æ¯ç§»å¨ç«¯ 5153 const isMobile = window.innerWidth <= 767; 5154 5155 // ç»å®äºä»¶ï¼åªæåå¨èå¤©å®¤æ¶æå¤ç FAB / å¼¹çªï¼Beauty ç¬ç«è§ç页使ç¨å åµè天ï¼ä¸èµ°å¼¹çªï¼ 5156 const isBeautyWatchPage = document.body.classList.contains('beauty-watch-layout'); 5157 if (chatRoom && !isBeautyWatchPage) { 5158 // æ¡é¢ç«¯ï¼åªè¦æèå¤©å®¤å°±ç´æ¥æ¾ç¤ºFABï¼ä» å½å ç´ å卿¶ï¼ 5159 if (!isMobile && fabOpenChat) { 5160 fabOpenChat.classList.add('visible'); 5161 } 5162 5163 // è天室弹çªäºä»¶ï¼å ¼å®¹ç§»å¨ç«¯è§¦æ¸ï¼ 5164 if (fabOpenChat) { 5165 fabOpenChat.addEventListener('click', openChatModal); 5166 fabOpenChat.addEventListener('touchend', function(e) { 5167 e.preventDefault(); 5168 openChatModal(e); 5169 }); 5170 } 5171 5172 if (chatModalClose) { 5173 chatModalClose.addEventListener('click', closeChatModal); 5174 chatModalClose.addEventListener('touchend', function(e) { 5175 e.preventDefault(); 5176 closeChatModal(e); 5177 }); 5178 } 5179 5180 if (chatModalOverlay) { 5181 chatModalOverlay.addEventListener('click', closeChatModal); 5182 } 5183 5184 if (chatModalFullscreen) { 5185 chatModalFullscreen.addEventListener('click', toggleFullscreen); 5186 } 5187 5188 // ç§»å¨ç«¯è§é¢å ³éæé®ï¼ç´æ¥å ³éæ´ä¸ªå¼¹çªï¼é¿å åºç°âåªæè天âçå¼¹çª 5189 if (mobileVideoClose) { 5190 mobileVideoClose.addEventListener('click', function(e) { 5191 closeChatModal(e); 5192 }); 5193 } 5194 5195 // ESC å ³é 5196 document.addEventListener('keydown', function(e) { 5197 if (e.key === 'Escape' && !chatModal.classList.contains('d-none')) { 5198 closeChatModal(); 5199 } 5200 }); 5201 5202 // ç§»å¨ç«¯ï¼åªè¦èå¤©å®¤è¿æ¥æåï¼å°±æ¾ç¤º FAB 5203 if (isMobile) { 5204 window.addEventListener('chatConnected', function() { 5205 if (fabOpenChat) { 5206 fabOpenChat.classList.add('visible'); 5207 } 5208 }); 5209 } 5210 5211 // 忥 FAB çæªè¯»æ°æ³¡ï¼çå¬é¡µé¢å ç unread badgeï¼ 5212 const pageUnreadBadge = document.getElementById('unreadBadge'); 5213 const fabBadge = document.getElementById('fabChatBadge'); 5214 if (pageUnreadBadge && fabBadge) { 5215 const observer = new MutationObserver(function() { 5216 const count = pageUnreadBadge.textContent || '0'; 5217 const isHidden = pageUnreadBadge.classList.contains('d-none'); 5218 if (isHidden || count === '0') { 5219 fabBadge.classList.add('d-none'); 5220 } else { 5221 fabBadge.textContent = count; 5222 fabBadge.classList.remove('d-none'); 5223 } 5224 }); 5225 observer.observe(pageUnreadBadge, { attributes: true, childList: true, subtree: true, characterData: true }); 5226 } 5227 } else if (chatRoom && isBeautyWatchPage) { 5228 chatRoom.classList.remove('in-modal'); 5229 } else { 5230 // 没æè天室æ¶éè FAB 5231 if (fabOpenChat) { 5232 fabOpenChat.classList.remove('visible'); 5233 } 5234 } 5235 })(); 5236 </script>
5236 5237 5238 <!-- 页é¢å è½½å®æåéè loader --> 5239
5239<script> 5240 (function() { 5241 var loader = document.getElementById('pageLoader'); 5242 if (!loader) return; 5243 5244 // 页é¢å è½½å®æåç«å³éèï¼æå¡ç«¯å·²æ¸²ææ£ç¡®è¯è¨ï¼æ éçå¾ JS ç¿»è¯ï¼ 5245 function hideLoader() { 5246 // ç«å³éèï¼ä¸åå»¶è¿ 5247 loader.style.display = 'none'; 5248 loader.classList.add('fade-out', 'hidden'); 5249 // å¨ç»ç»æåç§»é¤å ç´ 5250 setTimeout(function() { 5251 if (loader.parentNode) { 5252 loader.parentNode.removeChild(loader); 5253 } 5254 }, 200); 5255 } 5256 5257 // DOM å è½½å®æåç«å³éè 5258 if (document.readyState === 'complete') { 5259 hideLoader(); 5260 } else { 5261 window.addEventListener('load', hideLoader); 5262 } 5263 5264 // é¢å¤ä¿é©ï¼ç¡®ä¿å¨ 3 ç§åä¸å®éèå è½½å¨ 5265 setTimeout(function() { 5266 if (loader && loader.parentNode) { 5267 loader.style.display = 'none'; 5268 loader.classList.add('fade-out', 'hidden'); 5269 if (loader.parentNode) { 5270 loader.parentNode.removeChild(loader); 5271 } 5272 } 5273 }, 3000); 5274 5275 // ç¡®ä¿è天é®ç½©å±å¨é¡µé¢å è½½æ¶è¢«éè 5276 var chatOverlay = document.getElementById('chatModalOverlay'); 5277 if (chatOverlay) { 5278 chatOverlay.style.display = 'none'; 5279 chatOverlay.classList.add('d-none'); 5280 } 5281 5282 // ç¡®ä¿è天弹çªå¨é¡µé¢å è½½æ¶è¢«éè 5283 var chatModal = document.getElementById('chatModal'); 5284 if (chatModal) { 5285 chatModal.style.display = 'none'; 5286 chatModal.classList.add('d-none'); 5287 } 5288 })(); 5289 </script>
5289 5290 5291 <!-- è¯è¨åæ¢å½æ° --> 5292
5292<script> 5293 function changeLanguage(lang) { 5294 // 鲿¢éå¤ç¹å» 5295 if (window.__changingLanguage) return; 5296 window.__changingLanguage = true; 5297 5298 // ä¿åè¯è¨åå¥½å° cookie å localStorage 5299 document.cookie = 'livescore_lang=' + lang + '; path=/; max-age=31536000'; 5300 localStorage.setItem('livescore_lang', lang); 5301 5302 var returnUrl = window.location.pathname + window.location.search + window.location.hash; 5303 window.location.href = '/set-lang?lang=' + encodeURIComponent(lang) + '&returnUrl=' + encodeURIComponent(returnUrl); 5304 } 5305 </script>
5305 5306 5307 <!-- SPA è·¯ç± - ææ¶ç¦ç¨ä»¥ä¼åLCP --> 5308
5308<script src="/js/spa-router.js?v=dwhRvRTKNW3gDRjkITc68k3snHSqhN2jwIL1Le2mwmw" defer></script>
5308 5309 5310 <!-- ç®åçé¢çº¦æéåè½ --> 5311
5311<script> 5312 window.toggleMatchReminder = async (event, btn) => { 5313 try { 5314 // æ£æ¥ Service Worker æ¯æ 5315 if (!('serviceWorker' in navigator)) { 5316 showNotification(window.L?.T ? window.L.T('push.notSupported') : 'æ¨çæµè§å¨ä¸æ¯ææ¨ééç¥', 'warning'); 5317 return; 5318 } 5319 5320 // çå¾ Service Worker 就绪ï¼å¢å è¶ æ¶å¤çï¼ 5321 let registration, subscription; 5322 try { 5323 registration = await Promise.race([ 5324 navigator.serviceWorker.ready, 5325 new Promise((_, reject) => setTimeout(() => reject(new Error('SW timeout')), 5000)) 5326 ]); 5327 subscription = await registration.pushManager.getSubscription(); 5328 } catch (swError) { 5329 console.error('[é¢çº¦æé] Service Worker æªå°±ç»ª:', swError); 5330 showNotification(window.L?.T ? window.L.T('push.notReady') : 'æ¨éæå¡æªå°±ç»ªï¼è¯·ç¨åéè¯', 'warning'); 5331 return; 5332 } 5333 5334 if (!subscription) { 5335 const subscribeBtn = document.getElementById('push-subscribe-btn') || document.getElementById('mobile-push-subscribe-btn'); 5336 if (subscribeBtn) { 5337 subscribeBtn.click(); 5338 } else { 5339 showNotification(window.L?.T ? window.L.T('push.pleaseSubscribe') : '请å è®¢é æ¨ééç¥', 'warning'); 5340 } 5341 return; 5342 } 5343 5344 const endpoint = subscription.endpoint; 5345 5346 const res = await fetch(`/api/push/check-subscription?endpoint=${encodeURIComponent(endpoint)}`); 5347 const data = await res.json(); 5348 5349 if (!data.subscribed) { 5350 const subscribeBtn = document.getElementById('push-subscribe-btn') || document.getElementById('mobile-push-subscribe-btn'); 5351 if (subscribeBtn) { 5352 subscribeBtn.click(); 5353 } else { 5354 showNotification(window.L?.T ? window.L.T('push.pleaseSubscribe') : '请å è®¢é æ¨ééç¥', 'warning'); 5355 } 5356 return; 5357 } 5358 5359 // æ£æ¥æé®å½åç¶æï¼å¤ææ¯è®¢é è¿æ¯åæ¶ 5360 const matchId = btn.dataset.matchId; 5361 const isActive = btn.classList.contains('active'); 5362 5363 const isIconOnly = btn.classList.contains('focus-reminder-btn'); 5364 5365 btn.disabled = true; 5366 const originalHtml = btn.innerHTML; 5367 const processingText = window.L?.T ? window.L.T('common.processing') : 'å¤çä¸...'; 5368 btn.innerHTML = isIconOnly 5369 ? `<i class="fas fa-spinner fa-spin"></i>` 5370 : `<i class="fas fa-spinner fa-spin"></i> <span>${processingText}</span>`; 5371 5372 let reminderRes, reminderData; 5373 5374 if (isActive) { 5375 // å½åæ¯æ¿æ´»ç¶æï¼æ§è¡åæ¶æä½ 5376 reminderRes = await fetch('/api/match-reminders/unsubscribe', { 5377 method: 'POST', 5378 headers: { 5379 'Content-Type': 'application/json', 5380 'Accept-Language': window.__currentLang || 'vi' 5381 }, 5382 body: JSON.stringify({ 5383 fixtureId: parseInt(matchId), 5384 pushEndpoint: endpoint 5385 }) 5386 }); 5387 5388 reminderData = await reminderRes.json(); 5389 5390 if (reminderData.success) { 5391 btn.classList.remove('active'); 5392 btn.innerHTML = isIconOnly 5393 ? `<i class="fas fa-bell"></i>` 5394 : `<i class="fas fa-bell"></i> <span>${btn.dataset.textSet || (window.L?.T ? window.L.T('home.setReminder') : 'é¢çº¦æé')}</span>`; 5395 showNotification(reminderData.message || (window.L?.T ? window.L.T('home.reminderCanceled') : '已忶é¢çº¦'), 'success'); 5396 } else { 5397 btn.innerHTML = originalHtml; 5398 showNotification(reminderData.message || (window.L?.T ? window.L.T('home.cancelFailed') : 'åæ¶å¤±è´¥'), 'danger'); 5399 } 5400 } else { 5401 // å½åæ¯æªæ¿æ´»ç¶æï¼æ§è¡è®¢é æä½ 5402 reminderRes = await fetch('/api/match-reminders/sub
5402scribe', { 5403 method: 'POST', 5404 headers: { 5405 'Content-Type': 'application/json', 5406 'Accept-Language': window.__currentLang || 'vi' 5407 }, 5408 body: JSON.stringify({ 5409 fixtureId: parseInt(matchId), 5410 pushEndpoint: endpoint 5411 }) 5412 }); 5413 5414 reminderData = await reminderRes.json(); 5415 5416 if (reminderData.success) { 5417 btn.classList.add('active'); 5418 btn.innerHTML = isIconOnly 5419 ? `<i class="fas fa-bell-slash"></i>` 5420 : `<i class="fas fa-bell-slash"></i> <span>${btn.dataset.textCancel || (window.L?.T ? window.L.T('home.cancelReminder') : 'åæ¶é¢çº¦')}</span>`; 5421 showNotification(reminderData.message || (window.L?.T ? window.L.T('home.reminderSet') : 'é¢çº¦æå'), 'success'); 5422 } else { 5423 btn.innerHTML = originalHtml; 5424 showNotification(reminderData.message || (window.L?.T ? window.L.T('home.reminderFailed') : 'é¢çº¦å¤±è´¥'), 'danger'); 5425 } 5426 } 5427 5428 btn.disabled = false; 5429 5430 } catch (error) { 5431 console.error('[é¢çº¦æé] æä½å¤±è´¥:', error); 5432 // æ ¹æ®éè¯¯ç±»åæ¾ç¤ºä¸åçå¤è¯è¨æç¤º 5433 if (error.message && error.message.includes('Notification permission denied')) { 5434 showNotification(window.L?.T ? window.L.T('push.notificationDenied') : 'éç¥æé已被æç»ï¼è¯·å¨æµè§å¨è®¾ç½®ä¸å 许éç¥', 'warning'); 5435 } else { 5436 showNotification(window.L?.T ? window.L.T('common.operationFailed') : 'æä½å¤±è´¥ï¼è¯·ç¨åéè¯', 'danger'); 5437 } 5438 } 5439 }; 5440 5441 5442 // åå§åé¢çº¦æéæé®ç¶æ 5443 window.initReminderButtons = async () => { 5444 // console.log('[é¢çº¦æé] å¼å§åå§åæé®ç¶æ...'); 5445 5446 try { 5447 // åªè·åå¯è§çé¢çº¦æéæé® 5448 const buttons = document.querySelectorAll('.reminder-btn:not([style*="display: none"]):not([style*="display:none"]), .focus-reminder-btn'); 5449 if (buttons.length === 0) { 5450 // console.log('[é¢çº¦æé] æ²¡ææ¾å°å¯è§çé¢çº¦æéæé®'); 5451 return; 5452 } 5453 5454 // æ£æ¥æ¨é订é ç¶æ 5455 const registration = await navigator.serviceWorker.ready; 5456 const subscription = await registration.pushManager.getSubscription(); 5457 5458 if (!subscription) { 5459 // console.log('[é¢çº¦æé] ç¨æ·æªè®¢é æ¨éï¼è®¾ç½®é»è®¤ç¶æ'); 5460 buttons.forEach(btn => { 5461 const isIconOnly = btn.classList.contains('focus-reminder-btn'); 5462 btn.classList.remove('active'); 5463 btn.innerHTML = isIconOnly ? `<i class="fas fa-bell"></i>` : `<i class="fas fa-bell"></i> <span>${btn.dataset.textSet || 'é¢çº¦æé'}</span>`; 5464 }); 5465 return; 5466 } 5467 5468 // æ£æ¥å端订é ç¶æ 5469 const endpoint = subscription.endpoint; 5470 const res = await fetch(`/api/push/check-subscription?endpoint=${encodeURIComponent(endpoint)}`); 5471 const data = await res.json(); 5472 5473 if (!data.subscribed) { 5474 // console.log('[é¢çº¦æé] å端æªè®¢é ï¼è®¾ç½®é»è®¤ç¶æ'); 5475 buttons.forEach(btn => { 5476 const isIconOnly = btn.classList.contains('focus-reminder-btn'); 5477 btn.classList.remove('active'); 5478 btn.innerHTML = isIconOnly ? `<i class="fas fa-bell"></i>` : `<i class="fas fa-bell"></i> <span>${btn.dataset.textSet || 'é¢çº¦æé'}</span>`; 5479 }); 5480 return; 5481 } 5482 5483 // è·åå·²é¢çº¦çæ¯èµå表 5484 // console.log('[é¢çº¦æé] è·åå·²é¢çº¦å表...'); 5485 const listRes = await fetch(`/api/match-reminders/list?pushEndpoint=${encodeURIComponent(endpoint)}`); 5486 const listData = await listRes.json(); 5487 5488 if (listData.success && listData.reminders) { 5489 const subscribedIds = new Set(listData.reminders.map(r => r.fixtureId.toString())); 5490 // console.log('[é¢çº¦æé] å·²é¢çº¦æ¯èµID:', Array.from(subscribedIds)); 5491 5492 buttons.forEach(btn => {
5493 const matchId = btn.dataset.matchId; 5494 const isIconOnly = btn.classList.contains('focus-reminder-btn'); 5495 if (subscribedIds.has(matchId)) { 5496 btn.classList.add('active'); 5497 btn.innerHTML = isIconOnly ? `<i class="fas fa-bell-slash"></i>` : `<i class="fas fa-bell-slash"></i> <span>${btn.dataset.textCancel || 'åæ¶é¢çº¦'}</span>`; 5498 } else { 5499 btn.classList.remove('active'); 5500 btn.innerHTML = isIconOnly ? `<i class="fas fa-bell"></i>` : `<i class="fas fa-bell"></i> <span>${btn.dataset.textSet || 'é¢çº¦æé'}</span>`; 5501 } 5502 }); 5503 } 5504 5505 // console.log('[é¢çº¦æé] æé®ç¶æåå§å宿'); 5506 5507 } catch (error) { 5508 console.error('[é¢çº¦æé] åå§å失败:', error); 5509 } 5510 }; 5511 5512 // 鲿彿°ï¼é¿å é¢ç¹è§¦å 5513 let initTimeout = null; 5514 const debouncedInit = () => { 5515 if (initTimeout) { 5516 clearTimeout(initTimeout); 5517 } 5518 initTimeout = setTimeout(initReminderButtons, 300); 5519 }; 5520 5521 // 页é¢å è½½å®æååå§å 5522 if (document.readyState === 'loading') { 5523 document.addEventListener('DOMContentLoaded', debouncedInit); 5524 } else { 5525 debouncedInit(); 5526 } 5527 5528 // çå¬è¯è¨åæ¢ 5529 window.addEventListener('langChange', debouncedInit); 5530 5531 // çå¬ DOM ååï¼åªç嬿¯èµå表容å¨ï¼ 5532 const matchContainer = document.querySelector('.matches-container') || 5533 document.querySelector('.match-list') || 5534 document.querySelector('.fixtures-container') || 5535 document.querySelector('.today-matches'); 5536 5537 if (matchContainer) { 5538 const observer = new MutationObserver((mutations) => { 5539 // æ£æ¥æ¯å¦æé¢çº¦æéæé®è¢«æ·»å æä¿®æ¹ 5540 let hasReminderButtons = false; 5541 mutations.forEach(mutation => { 5542 if (mutation.addedNodes) { 5543 mutation.addedNodes.forEach(node => { 5544 if (node.nodeType === 1) { 5545 if (node.classList?.contains('reminder-btn') || 5546 node.querySelector?.('.reminder-btn')) { 5547 hasReminderButtons = true; 5548 } 5549 } 5550 }); 5551 } 5552 }); 5553 5554 if (hasReminderButtons) { 5555 debouncedInit(); 5556 } 5557 }); 5558 5559 observer.observe(matchContainer, { childList: true, subtree: true }); 5560 } 5561 </script>
5561 5562 5563 <!-- Visitor Tracking Script --> 5564
5564<script src="/js/tracker.js" defer></script>
5564 5565
5565<script src="/js/chat-visitor-id.js" defer></script>
5565 5566 5567 <!-- æ¶åºæ£æµï¼èªå¨å卿µè§å¨æ¶åºå° cookieï¼ä¾åç«¯ä½¿ç¨ --> 5568
5568<script> 5569 (function() { 5570 const TZ_COOKIE = 'tzOffset'; 5571 const tzOffset = -420; 5572 5573 // æ£æ¥ cookie æ¯å¦å·²åå¨ä¸å¼ç¸å 5574 const existingCookie = document.cookie.split('; ').find(c => c.startsWith(TZ_COOKIE + '=')); 5575 const existingValue = existingCookie ? parseInt(existingCookie.split('=')[1]) : null; 5576 5577 if (existingValue !== tzOffset) { 5578 // 设置 cookieï¼æææ 30 天ï¼å ¨ç«å¯ç¨ 5579 const expires = new Date(Date.now() + 30 * 24 * 60 * 60 * 1000).toUTCString(); 5580 document.cookie = `${TZ_COOKIE}=${tzOffset}; expires=${expires}; path=/; SameSite=Lax`; 5581 5582 // 妿æ¯é¦æ¬¡è®¾ç½®æ¶åºä¸å½å页颿¯"仿¥"ç¸å ³é¡µé¢ï¼å·æ°ä»¥åºç¨æ£ç¡®æ¶åº 5583 const isFirstVisit = existingValue === null; 5584 const isTodayPage = window.location.pathname.includes('/football/today') 5585 || window.location.pathname.includes('/matches/today') 5586 || (window.location.pathname === '/' && !window.location.search.includes('tzOffset')); 5587 5588 if (isFirstVisit && isTodayPage) { 5589 // 馿¬¡è®¿é®ä»æ¥é¡µé¢ï¼å·æ°ä»¥åºç¨æ¶åº 5590 window.location.reload(); 5591 } 5592 } 5593 })(); 5594 </script>
5594 5595 5596 <!-- PWA Service Worker Registration & Installation Prompt --> 5597
5597<script> 5598 (function() { 5599 'use strict'; 5600 5601 let deferredPrompt; 5602 5603 // Service Worker 注å - ç± sw-auto-update.js ç»ä¸ç®¡çï¼è¿éåªå¤çå¼åæ¨¡å¼ 5604 // ç产ç¯å¢ç SW 注ååæ´æ°ç± sw-auto-update.js å¤çï¼èªå¨é黿´æ°æ éç¨æ·ç¡®è®¤ 5605 if ('serviceWorker' in navigator && window.__isDevelopment === 'true') { 5606 console.log('[PWA] Development mode: Service Worker enabled with caching disabled.'); 5607 5608 // å¼å模å¼ä¸ä»ç¶æ³¨å Service Workerï¼ç¨äºæ¨ééç¥ï¼ï¼ä½ç¦ç¨ç¼å 5609 navigator.serviceWorker.register('/sw.js').then(function(registration) { 5610 console.log('[PWA] Service Worker registered in Development mode (no-cache version)'); 5611 5612 // æ¸ é¤ææç°æç¼å 5613 if ('caches' in window) { 5614 caches.keys().then(function(cacheNames) { 5615 return Promise.all( 5616 cacheNames.map(function(cacheName) { 5617 return caches.delete(cacheName); 5618 }) 5619 ); 5620 }).then(function() { 5621 console.log('[PWA] All caches cleared in Development mode'); 5622 }); 5623 } 5624 }).catch(function(error) { 5625 console.error('[PWA] Service Worker registration failed in Development mode:', error); 5626 }); 5627 } 5628 5629 // PWA å®è£ æç¤ºäºä»¶ï¼ä» ç¼å deferredPrompt ä¾é¡¶é¨æ¨ªå¹ 使ç¨ï¼ä¸åå¼¹åºæ§çåºé¨å®è£ æ¡ 5630 window.addEventListener('beforeinstallprompt', (e) => { 5631 console.log('[PWA] Install prompt captured for top banner'); 5632 e.preventDefault(); 5633 deferredPrompt = e; 5634 }); 5635 5636 // æ´æ°éç¥å·²ç§»é¤ - ç± sw-auto-update.js ç»ä¸å¤çé黿´æ° 5637 // æ éç¨æ·äº¤äºï¼çæ¬ååæ¶èªå¨å·æ°é¡µé¢ 5638 window.addEventListener('appinstalled', () => { 5639 console.log('[PWA] App installed successfully'); 5640 localStorage.setItem('pwa-installed', 'true'); 5641 if (typeof closePwaTopBanner === 'function') closePwaTopBanner(); 5642 }); 5643 5644 // ==================== 鲿¢æµè§å¨bfcacheï¼å¾è¿ç¼åï¼==================== 5645 // 鲿¢é¡µé¢è¿å ¥bfcacheï¼ç¡®ä¿ç¨æ·å ³éæ ç¾é¡µåæå¼æ¶ä¼éæ°å è½½ 5646 // 注æï¼ä¸å¨pageshowæ¶å¼ºå¶å·æ°ï¼é¿å 䏿æ£å¨è¿è¡çç´æ 5647 5648 // æ¹æ³1ï¼ä½¿ç¨ pagehide äºä»¶ï¼ç°ä»£æ¿ä»£æ¹æ¡ï¼æ¿ä»£å·²å¼ç¨ç unloadï¼ 5649 // pagehide äºä»¶å¨é¡µé¢éèæ¶è§¦åï¼å¯ä»¥é»æ¢ bfcache 5650 window.addEventListener('pagehide', function(event) { 5651 // 妿页é¢è¢«æ¾å ¥ bfcacheï¼event.persisted 为 true 5652 // éè¿æ§è¡ä¸äºæä½ï¼å¦åé beaconï¼å¯ä»¥é»æ¢ bfcache 5653 if (event.persisted) { 5654 console.log('[Cache] Page entering bfcache'); 5655 } 5656 }); 5657 5658 // æ¹æ³2ï¼ä½¿ç¨Cache-Control头ï¼å·²å¨metaæ ç¾ä¸è®¾ç½®ï¼ 5659 // æ¹æ³3ï¼æ£æµbfcacheæ¢å¤ï¼è®°å½æ¥å¿ä½ä¸å·æ° 5660 window.addEventListener('pageshow', function(event) { 5661 if (event.persisted) { 5662 console.log('[Cache] Page restored from bfcache'); 5663 // ä¸å·æ°é¡µé¢ï¼é¿å ä¸æç´æ 5664 // å¦æç¡®å®ä»bfcacheæ¢å¤ï¼é¡µé¢ç¶æåºè¯¥æ¯å®æ´ç 5665 // å¯ä»¥å¨è¿ééæ°åå§åéè¦çè¿æ¥ï¼å¦ SignalRï¼ 5666 } 5667 }); 5668 5669 // ç½ç»ç¶æçæ§ 5670 window.addEventListener('online', () => { 5671 console.log('[PWA] Back online'); 5672 // å¯ä»¥æ·»å éæ°è¿æ¥é»è¾ 5673 }); 5674 5675 window.addEventListener('offline', () => { 5676 console.log('[PWA] Gone offline'); 5677 // å¯ä»¥æ¾ç¤ºç¦»çº¿æç¤º 5678 }); 5679 5680 // ==================== PWA é¡¶é¨å®è£ æ¨ªå¹ (ç§»å¨ç«¯) ==================== 5681 function showPwaTopBanner() { 5682 const banner = document.getElementById('pwa-top-banner'); 5683 if (!banner) return; 5684 5685 // çæ£å·²å®è£ ï¼standalone模å¼ï¼â æ°¸ä¹ ä¸æ¾ç¤º 5686 if (window.matchMedia('(display-mode: standalone)').matches || window.navigator.standalone === true) return; 5687 // å·²éè¿å®è£ äºä»¶ç¡®è®¤å®è£ â æ°¸ä¹ 䏿¾ç¤º 5688 if (localStorage.getItem('pwa-installed') === 'true') return; 5689 // éç§»å¨ç«¯ â 䏿¾ç¤º 5690 if (window.innerWidth > 768) return; 5691 5692 banner.classList.remove('d-none'); 5693 } 5694 5695 window.closePwaTopBanner = function() { 5696 const banner = document.getElementById('pwa-top-banner'); 5697 if (banner) { 5698 banner.classList.add('d-none'); 5699 } 5700 // ä» æ¬æ¬¡é¡µé¢å ³éï¼å·æ°åéæ°æ¾ç¤º 5701 }; 5702 5703 window.installPwaFromBanner = async function() { 5704 if (deferredPrompt) { 5705 deferredPrompt.prompt(); 5706 const { outcome } = await deferredPrompt.userChoice; 5707 if (outcome === 'accepted') { 5708 localStorage.setItem('pwa-installed', 'true'); 5709 } 5710 deferredPrompt = null; 5711 closePwaTopBanner(); 5712 } else { 5713 // iOS / browsers without beforeinstallprompt 5714 // Site default Vietnamese; use i18n when ready 5715 const isIOS = /iPad|iPhone|iPod/.test(navigator.userAgent); 5716 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»'; 5717 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»';
5718 const key = isIOS ? 'seo.pwa.installGuideIos' : 'seo.pwa.installGuideAndroid'; 5719 const fallback = isIOS ? iosFallback : androidFallback; 5720 let msg = fallback; 5721 if (window.L?.T && window.i18n?.isReady?.()) { 5722 const translated = window.L.T(key); 5723 if (translated && translated !== key) msg = translated; 5724 } 5725 alert(msg); 5726 } 5727 }; 5728 5729 // 页é¢å è½½åæ¾ç¤ºæ¨ªå¹ 5730 if (document.readyState === 'loading') { 5731 document.addEventListener('DOMContentLoaded', showPwaTopBanner); 5732 } else { 5733 showPwaTopBanner(); 5734 } 5735 5736 })(); 5737 5738 // ==================== PWA 䏿巿°åè½ ==================== 5739 // Android åçæ¯æä¸æå·æ°ï¼iOS PWA éè¦èªå®ä¹å®ç° 5740 // å·²ç¦ç¨ - å¦éå¯ç¨è¯·åæ¶æ³¨é 5741 /* 5742 (function() { 5743 'use strict'; 5744 5745 // æ£æµæ¯å¦ä¸º iOS PWA æ¨¡å¼ 5746 const isIOSPWA = (window.navigator.standalone === true) || 5747 (window.matchMedia('(display-mode: standalone)').matches && /iPad|iPhone|iPod/.test(navigator.userAgent)); 5748 5749 // æ£æµæ¯å¦ä¸ºç§»å¨è®¾å¤ 5750 const isMobile = /Android|webOS|iPhone|iPad|iPod|BlackBerry|IEMobile|Opera Mini/i.test(navigator.userAgent); 5751 5752 // åªå¨ç§»å¨è®¾å¤ä¸å¯ç¨ä¸æå·æ° 5753 if (!isMobile) return; 5754 5755 let startY = 0; 5756 let currentY = 0; 5757 let pulling = false; 5758 let refreshThreshold = 120; // 触åå·æ°çéå¼ï¼åç´ ï¼ 5759 let maxPull = 160; // æå¤§ä¸æè·ç¦» 5760 let refreshIndicator = null; 5761 5762 // åå»ºå·æ°æç¤ºå¨ 5763 function createRefreshIndicator() { 5764 if (refreshIndicator) return; 5765 5766 refreshIndicator = document.createElement('div'); 5767 refreshIndicator.id = 'pwa-refresh-indicator'; 5768 const pullText = window.L?.T ? window.L.T('common.pullToRefresh') : '䏿巿°'; 5769 refreshIndicator.innerHTML = ` 5770 <div class="refresh-spinner"> 5771 <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> 5772 </div> 5773 <span class="refresh-text">${window.L?.T ? window.L.T('common.releaseToRefresh') : 'æ¾å¼å·æ°'}</span> 5774 `; 5775 refreshIndicator.style.cssText = ` 5776 position: fixed; 5777 top: 0; 5778 left: 50%; 5779 transform: translateX(-50%) translateY(-100%); 5780 background: transparent; 5781 color: #333; 5782 padding: 12px 24px; 5783 border-radius: 0 0 16px 16px; 5784 display: flex; 5785 align-items: center; 5786 gap: 10px; 5787 font-size: 14px; 5788 font-weight: 500; 5789 z-index: 10002; 5790 transition: transform 0.2s ease; 5791 box-shadow: none; 5792 `; 5793 5794 // æ·»å æ ·å¼ 5795 const style = document.createElement('style'); 5796 style.textContent = ` 5797 #pwa-refresh-indicator .refresh-spinner { 5798 display: flex; 5799 align-items: center; 5800 justify-content: center; 5801 } 5802 #pwa-refresh-indicator .refresh-spinner svg { 5803 width: 16px; 5804 height: 16px; 5805 transition: transform 0.3s ease; 5806 } 5807 #pwa-refresh-indicator .refresh-text { 5808 color: white !important; 5809 font-size: 14px; 5810 font-weight: 500; 5811 } 5812 #pwa-refresh-indicator.refreshing .refresh-spinner svg { 5813 animation: spin 1s linear infinite; 5814 } 5815 #pwa-refresh-indicator.ready .refresh-spinner svg { 5816 transform: rotate(180deg); 5817 } 5818 @keyframes spin { 5819 from { transform: rotate(0deg); } 5820 to { transform: rotate(360deg); } 5821 } 5822 `; 5823 document.head.appendChild(style); 5824 document.body.appendChild(refreshIndicator); 5825 } 5826 5827 // æ´æ°æç¤ºå¨ä½ç½®åç¶æ 5828 function updateIndicator(pullDistance, isReady) { 5829 if (!refreshIndicator) return; 5830 5831 const progress = Math.min(pullDistance / refreshThreshold, 1); 5832 const translateY = Math.min(pullDistance, maxPull) - 60; 5833 5834 refreshIndicator.style.transform = `translateX(-50%) translateY(${translateY}px)`; 5835 5836 if (isReady) { 5837 refreshIndicator.classList.add('ready'); 5838 refreshIndicator.classList.remove('refreshing'); 5839 } else { 5840 refreshIndicator.classList.remove('ready', 'refreshing'); 5841 } 5842 } 5843 5844 // å¼å§å·æ°å¨ç» 5845 function startRefresh() { 5846 if (!refreshIndicator) return; 5847 5848 refreshIndicator.classList.add('refreshing'); 5849 refreshIndicator.classList.remove('ready'); 5850 refreshIndicator.style.transform = 'translateX(-50%) translateY(10px)'; 5851 5852 // å»¶è¿åå·æ°é¡µé¢ 5853 setTimeout(() => { 5854 window.location.reload(); 5855 }, 500); 5856 } 5857 5858 // éç½®æç¤ºå¨ 5859 function resetIndicator() { 5860 if (!refreshIndicator) return; 5861 5862 refreshIndicator.style.transform = 'translateX(-50%) translateY(-100%)'; 5863 refreshIndicator.classList.remove('ready', 'refreshing'); 5864 } 5865 5866 // 触æ¸å¼å§ 5867 function handleTouchStart(e) { 5868 // åªå¨é¡µé¢é¡¶é¨æ¶å¯ç¨ä¸æå·æ° 5869 if (window.scrollY > 5) return; 5870 5871 // 忽ç¥å¨è¾å ¥æ¡ãè§é¢ææ¾å¨çå ç´ ä¸çè§¦æ¸ 5872 const target = e.target; 5873 if (target.tagName === 'INPUT' || target.tagName === 'TEXTAREA' || 5874 target.tagName === 'VIDEO' || target.closest('.live-player
5874-container') || 5875 target.closest('.chat-input-container')) { 5876 return; 5877 } 5878 5879 startY = e.touches[0].pageY; 5880 pulling = true; 5881 createRefreshIndicator(); 5882 } 5883 5884 // 触æ¸ç§»å¨ 5885 function handleTouchMove(e) { 5886 if (!pulling || window.scrollY > 5) { 5887 pulling = false; 5888 return; 5889 } 5890 5891 currentY = e.touches[0].pageY; 5892 const pullDistance = currentY - startY; 5893 5894 // åªå¤çå䏿å¨ï¼ä¸æå¨è·ç¦»è¶ è¿æå°éå¼ 5895 if (pullDistance > 10) { 5896 // iOS éè¦é»æ¢é»è®¤è¡ä¸ºä»¥å®ç°èªå®ä¹ä¸æ 5897 if (isIOSPWA) { 5898 e.preventDefault(); 5899 } 5900 5901 const isReady = pullDistance >= refreshThreshold; 5902 updateIndicator(pullDistance, isReady); 5903 } 5904 } 5905 5906 // 触æ¸ç»æ 5907 function handleTouchEnd(e) { 5908 if (!pulling) return; 5909 5910 const pullDistance = currentY - startY; 5911 5912 if (pullDistance >= refreshThreshold) { 5913 startRefresh(); 5914 } else { 5915 resetIndicator(); 5916 } 5917 5918 pulling = false; 5919 startY = 0; 5920 currentY = 0; 5921 } 5922 5923 // ç»å®äºä»¶ 5924 document.addEventListener('touchstart', handleTouchStart, { passive: true }); 5925 document.addEventListener('touchmove', handleTouchMove, { passive: false }); 5926 document.addEventListener('touchend', handleTouchEnd, { passive: true }); 5927 5928 console.log('[PWA] Pull-to-refresh enabled', isIOSPWA ? '(iOS PWA mode)' : ''); 5929 })(); 5930 */ 5931 5932 </script>
5932 5933 5934 5935 <!-- ç»å½/注åå¼¹çª --> 5936 <meta name="turnstile-sitekey" content="0x4AAAAAACejCwrxG0oAHrtT" style="display:none;" /> 5937 5938 5939 5940
5941<script> 5942// èèµæå /å±å¼ 5943function toggleLeague(btn) { 5944 const section = btn.closest('.lg-section'); 5945 const matches = section.querySelector('.lg-matches'); 5946 const useEl = btn.querySelector('use'); 5947 if (matches.style.display === 'none') { 5948 matches.style.display = ''; 5949 if (useEl) useEl.setAttribute('href', '#icon-chevron-up'); 5950 } else { 5951 matches.style.display = 'none'; 5952 if (useEl) useEl.setAttribute('href', '#icon-chevron-down'); 5953 } 5954} 5955 5956// æ¶èç¶æåå§åãSPA æ³¨å ¥æ¶ DOMContentLoaded å·²ç»è§¦åè¿ï¼æä»¥å·²å è½½åç«å»æ§è¡ã 5957function initMatchListSearch() { 5958 const page = document.querySelector('.match-list-page'); 5959 const input = document.getElementById('matchListSearch'); 5960 const clearBtn = document.getElementById('matchListSearchClear'); 5961 const empty = document.getElementById('matchListSearchEmpty'); 5962 if (!page || !input || input.dataset.bound === '1') return; 5963 input.dataset.bound = '1'; 5964 5965 function applyFilter() { 5966 const query = input.value.trim().toLowerCase(); 5967 if (clearBtn) clearBtn.hidden = query.length === 0; 5968 let visible = 0; 5969 5970 page.querySelectorAll('.mx-row').forEach(function (row) { 5971 const hay = (row.getAttribute('data-search') || '').toLowerCase(); 5972 const show = !query || hay.indexOf(query) !== -1; 5973 row.classList.toggle('is-search-hidden', !show); 5974 if (show) visible += 1; 5975 }); 5976 5977 page.querySelectorAll('.lg-section').forEach(function (section) { 5978 const any = section.querySelector('.mx-row:not(.is-search-hidden)'); 5979 section.classList.toggle('is-search-hidden', !any); 5980 section.classList.toggle('is-search-open', !!query && !!any); 5981 }); 5982 5983 page.querySelectorAll('.beauty-schedule-row').forEach(function (row) { 5984 const hay = (row.getAttribute('data-search') || '').toLowerCase(); 5985 const show = !query || hay.indexOf(query) !== -1; 5986 row.classList.toggle('is-search-hidden', !show); 5987 if (show) visible += 1; 5988 }); 5989 5990 page.querySelectorAll('.schedule-sport-section').forEach(function (section) { 5991 if (!section.querySelector('.beauty-schedule-row')) return; 5992 const any = section.querySelector('.beauty-schedule-row:not(.is-search-hidden)'); 5993 section.classList.toggle('is-search-hidden', !any); 5994 }); 5995 5996 page.querySelectorAll('.schedule-sport-title-inline').forEach(function (title) { 5997 const anySports = page.querySelector('.lg-section:not(.is-search-hidden)'); 5998 title.classList.toggle('is-search-hidden', !!query && !anySports); 5999 }); 6000 6001 page.querySelectorAll('.match-list-paging').forEach(function (el) { 6002 el.classList.toggle('is-search-hidden', query.length > 0); 6003 }); 6004 6005 if (empty) empty.hidden = !query || visible > 0; 6006 } 6007 6008 input.addEventListener('input', applyFilter); 6009 input.addEventListener('keydown', function (e) { 6010 if (e.key === 'Enter') e.preventDefault(); 6011 if (e.key === 'Escape') { 6012 input.value = ''; 6013 applyFilter(); 6014 } 6015 }); 6016 if (clearBtn) { 6017 clearBtn.addEventListener('click', function () { 6018 input.value = ''; 6019 applyFilter(); 6020 input.focus(); 6021 }); 6022 } 6023} 6024 6025function initMatchListPage() { 6026 initMatchListSearch(); 6027 const isAuth = 'false' === 'true'; 6028 if (!isAuth) return; 6029 6030 fetch('/profile/favorites/match-ids') 6031 .then(r => r.json()) 6032 .then(data => { 6033 if (!data || !data.success || !Array.isArray(data.ids)) return; 6034 const idSet = new Set(data.ids.map(x => String(x))); 6035 document.querySelectorAll('.favorite-btn[data-match-id]').forEach(btn => { 6036 const matchId = btn.getAttribute('data-match-id'); 6037 const isFavorited = idSet.has(String(matchId)); 6038 btn.classList.toggle('active', isFavorited); 6039 const useEl = btn.querySelector('use'); 6040 if (useEl) { 6041 useEl.setAttribute('href', isFavorited ? '#icon-star-filled' : '#icon-star'); 6042 } 6043 }); 6044 }) 6045 .catch(() => {}); 6046} 6047window.initMatchListPage = initMatchListPage; 6048if (document.readyState === 'loading') { 6049 document.addEventListener('DOMContentLoaded', initMatchListPage); 6050} else { 6051 initMatchListPage(); 6052} 6053</script>
6053 6054
6055<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>
6055 6056</body> 6057</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.