Showing source for: https://www.kreva.biz/
Duration: 0.0536s
Server: TencentEdgeOne

<!DOCTYPE html>
<html lang="vi">

<head>
  <meta charset="UTF-8" />
  <meta name="viewport" content="width=device-width, initial-scale=1.0" />
  <link rel="preconnect" href="https://fonts.googleapis.com" />
  <link rel="preconnect" href="https://fonts.gstatic.com" crossorigin />
  <link href="https://fonts.googleapis.com/css2?family=Inter:wght@400;500;700&display=swap" rel="stylesheet" />
  <link rel="stylesheet" href="/wp-content/themes/cakhiatv/style.css" />
  <link rel="shortcut icon" href="/favicon.ico" type="image/x-icon" />
    <link rel="icon" href="/favicon.ico" type="image/x-icon" />
  	<style>img:is([sizes="auto" i], [sizes^="auto," i]) { contain-intrinsic-size: 3000px 1500px }</style>
	
<!-- Tối ưu hóa công cụ tìm kiếm bởi Rank Math PRO - https://rankmath.com/ -->
<title>Xoilac TV - Trực Tiếp Bóng Đá Miễn Phí - Link Xôi Lạc TTBD</title>
<meta name="description" content="Xoilac TV - trang web phát sóng bóng đá trực tiếp không thu phí của người dùng hot nhất năm 2025. Đây cũng là một trong những kênh được yêu thích và có số"/>
<meta name="robots" content="follow, index, max-snippet:-1, max-video-preview:-1, max-image-preview:large"/>
<link rel="canonical" href="https://www.kreva.biz" />
<meta property="og:locale" content="vi_VN" />
<meta property="og:type" content="website" />
<meta property="og:title" content="Xoilac TV - Trực Tiếp Bóng Đá Miễn Phí - Link Xôi Lạc TTBD" />
<meta property="og:description" content="Xoilac TV - trang web phát sóng bóng đá trực tiếp không thu phí của người dùng hot nhất năm 2025. Đây cũng là một trong những kênh được yêu thích và có số" />
<meta property="og:url" content="https://www.kreva.biz" />
<meta property="og:site_name" content="Xoilac TV - Trực tiếp bóng đá miễn phí - Link Xôi Lạc TTBD" />
<meta property="og:updated_time" content="2025-05-27T14:43:21+07:00" />
<meta property="article:published_time" content="2025-05-05T18:00:30+07:00" />
<meta property="article:modified_time" content="2025-05-27T14:43:21+07:00" />
<meta name="twitter:card" content="summary_large_image" />
<meta name="twitter:title" content="Xoilac TV - Trực Tiếp Bóng Đá Miễn Phí - Link Xôi Lạc TTBD" />
<meta name="twitter:description" content="Xoilac TV - trang web phát sóng bóng đá trực tiếp không thu phí của người dùng hot nhất năm 2025. Đây cũng là một trong những kênh được yêu thích và có số" />
<meta name="twitter:site" content="@myphamtocso1com" />
<meta name="twitter:creator" content="@myphamtocso1com" />
<meta name="twitter:label1" content="Được viết bởi" />
<meta name="twitter:data1" content="buitrungthanh" />
<meta name="twitter:label2" content="Thời gian để đọc" />
<meta name="twitter:data2" content="10 phút" />
<script type="application/ld+json" class="rank-math-schema-pro">{"@context":"https://schema.org","@graph":[{"@type":"Organization","@id":"https://www.kreva.biz/#organization","name":"Xoilac TV","sameAs":["https://twitter.com/myphamtocso1com","https://www.youtube.com/@xoilacmyphamtocso1","https://about.me/xoilacmyphamtocso1","https://www.reddit.com/user/xoilacmyphamtocso1/","https://www.facebook.com/xoilacmyphamtocso1","https://www.instagram.com/xoilacmyphamtocso1/","https://www.tumblr.com/xoilacmyphamtocso1","https://www.goodreads.com/user/show/189884511-xoilac","https://telegra.ph/Xoilac-TV-04-27-5","https://www.instapaper.com/p/myphamtocso1com","https://www.quora.com/profile/Xoilac-Myphamtocso1/Xoilac-https-myphamtocso1-com-tv-la-trang-xem-bong-da-truc-tuyen-toc-do-cao-Xoi-Lac-TV-cung-cap-link-xem-truc-ti","https://xoilacmyphamtocso1.webflow.io/","https://vimeo.com/xoilacmyphamtocso1","https://www.deviantart.com/xoilacmyphamtocso1","https://500px.com/p/xoilacmyphamtocso1","https://www.pinterest.com/xoilacmyphamtocso1","https://profile.hatena.ne.jp/xoilacmyphamtocso1/","https://issuu.com/xoilacmyphamtocso1","https://gravatar.com/xoilacmyphamtocso1","https://pixabay.com/users/49959596/","https://gitlab.com/xoilacmyphamtocso1","https://disqus.com/by/xoilacmyphamtocso1/about/","https://heylink.me/xoilacmyphamtocso1","https://imgur.com/user/xoilacmyphamtocso1/about","https://fliphtml5.com/homepage/gtyoo/","https://gta5-mods.com/users/xoilacmyphamtocso1","https://wakelet.com/@xoilacmyphamtocso1","https://soctrip.com/post/7341faa0-2313-11f0-b7bc-6bd00f67ab03","https://www.metooo.it/e/xoilac-tv-truc-tiep-bong-da-hd-hom-nay-link-ttbd-mien-phi","https://www.notebook.ai/users/1054407","https://www.producthunt.com/@xoilacmyphamtocso1","https://www.walkscore.com/people/315569342695/xoilac","https://www.iconfinder.com/user/xoilacmyphamtocso1","https://www.magcloud.com/user/xoilacmyphamtocso1","https://pubhtml5.com/homepage/oferb/","https://myanimelist.net/profile/myphamtocso1com"],"logo":{"@type":"ImageObject","@id":"https://www.kreva.biz/#logo","url":"https://cdn.adminmypham.site/wp-content/uploads/2025/07/logo-squared.jpg","contentUrl":"https://cdn.adminmypham.site/wp-content/uploads/2025/07/logo-squared.jpg","caption":"Xoilac TV - Tr\u1ef1c ti\u1ebfp b\u00f3ng \u0111\u00e1 mi\u1ec5n ph\u00ed - Link X\u00f4i L\u1ea1c TTBD","inLanguage":"vi","width":"1080","height":"1080"}},{"@type":"WebSite","@id":"https://www.kreva.biz/#website","url":"https://www.kreva.biz","name":"Xoilac TV - Tr\u1ef1c ti\u1ebfp b\u00f3ng \u0111\u00e1 mi\u1ec5n ph\u00ed - Link X\u00f4i L\u1ea1c TTBD","alternateName":"Xoilac TV - Tr\u1ef1c ti\u1ebfp b\u00f3ng \u0111\u00e1 t\u1ed1c \u0111\u1ed9 cao","publisher":{"@id":"https://www.kreva.biz/#organization"},"inLanguage":"vi","potentialAction":{"@type":"SearchAction","target":"https://www.kreva.biz/?s={search_term_string}","query-input":"required name=search_term_string"}},{"@type":"ImageObject","@id":"https://panel.villawh.com/villawh_com_wp-content/uploads/2025/05/AD_4nXfgqnfPLZ_Kue878tJEqlanLM5sqTh2tSfzrmfQ1HJgW1t8A_W1fGKG5ewpdXHglGgSKUCjubR6t0PggczWOWQ9yGSbXDCWnEAhbaG_Fu5kSeQIQYOR-0roMfYX_Wz8ouQRQVli0AkeyM70_UC5QgpV6a21j6Odi1gAw.jpg","url":"https://panel.villawh.com/villawh_com_wp-content/uploads/2025/05/AD_4nXfgqnfPLZ_Kue878tJEqlanLM5sqTh2tSfzrmfQ1HJgW1t8A_W1fGKG5ewpdXHglGgSKUCjubR6t0PggczWOWQ9yGSbXDCWnEAhbaG_Fu5kSeQIQYOR-0roMfYX_Wz8ouQRQVli0AkeyM70_UC5QgpV6a21j6Odi1gAw.jpg","width":"200","height":"200","inLanguage":"vi"},{"@type":"WebPage","@id":"https://www.kreva.biz#webpage","url":"https://www.kreva.biz","name":"Xoilac TV - Tr\u1ef1c Ti\u1ebfp B\u00f3ng \u0110\u00e1 Mi\u1ec5n Ph\u00ed - Link X\u00f4i L\u1ea1c TTBD","datePublished":"2025-05-05T18:00:30+07:00","dateModified":"2025-05-27T14:43:21+07:00","about":{"@id":"https://www.kreva.biz/#organization"},"isPartOf":{"@id":"https://www.kreva.biz/#website"},"primaryImageOfPage":{"@id":"https://panel.villawh.com/villawh_com_wp-content/uploads/2025/05/AD_4nXfgqnfPLZ_Kue878tJEqlanLM5sqTh2tSfzrmfQ1HJgW1t8A_W1fGKG5ewpdXHglGgSKUCjubR6t0PggczWOWQ9yGSbXDCWnEAhbaG_Fu5kSeQIQYOR-0roMfYX_Wz8ouQRQVli0AkeyM70_UC5QgpV6a21j6Odi1gAw.jpg"},"inLanguage":"vi"},{"@type":"Person","@id":"https://www.kreva.biz/author/buitrungthanh","name":"buitrungthanh","url":"https://www.kreva.biz/author/buitrungthanh","image":{"@type":"ImageObject","@id":"https://secure.gravatar.com/avatar/a9475f752f4bc231b068b2c9336129c34468a18540e9b4d4d6f1562cbec918c2?s=96&amp;d=mm&amp;r=g","url":"https://secure.gravatar.com/avatar/a9475f752f4bc231b068b2c9336129c34468a18540e9b4d4d6f1562cbec918c2?s=96&amp;d=mm&amp;r=g","caption":"buitrungthanh","inLanguage":"vi"},"worksFor":{"@id":"https://www.kreva.biz/#organization"}},{"@type":"Article","headline":"Xoilac TV - Tr\u1ef1c Ti\u1ebfp B\u00f3ng \u0110\u00e1 Mi\u1ec5n Ph\u00ed - Link X\u00f4i L\u1ea1c TTBD","datePublished":"2025-05-05T18:00:30+07:00","dateModified":"2025-05-27T14:43:21+07:00","author":{"@id":"https://www.kreva.biz/author/buitrungthanh","name":"buitrungthanh"},"publisher":{"@id":"https://www.kreva.biz/#organization"},"description":"Xoilac TV - trang web ph\u00e1t s\u00f3ng b\u00f3ng \u0111\u00e1 tr\u1ef1c ti\u1ebfp kh\u00f4ng thu ph\u00ed c\u1ee7a ng\u01b0\u1eddi d\u00f9ng hot nh\u1ea5t n\u0103m 2025. \u0110\u00e2y c\u0169ng l\u00e0 m\u1ed9t trong nh\u1eefng k\u00eanh \u0111\u01b0\u1ee3c y\u00eau th\u00edch v\u00e0 c\u00f3 s\u1ed1","name":"Xoilac TV - Tr\u1ef1c Ti\u1ebfp B\u00f3ng \u0110\u00e1 Mi\u1ec5n Ph\u00ed - Link X\u00f4i L\u1ea1c TTBD","@id":"https://www.kreva.biz#richSnippet","isPartOf":{"@id":"https://www.kreva.biz#webpage"},"image":{"@id":"https://panel.villawh.com/villawh_com_wp-content/uploads/2025/05/AD_4nXfgqnfPLZ_Kue878tJEqlanLM5sqTh2tSfzrmfQ1HJgW1t8A_W1fGKG5ewpdXHglGgSKUCjubR6t0PggczWOWQ9yGSbXDCWnEAhbaG_Fu5kSeQIQYOR-0roMfYX_Wz8ouQRQVli0AkeyM70_UC5QgpV6a21j6Odi1gAw.jpg"},"inLanguage":"vi","mainEntityOfPage":{"@id":"https://www.kreva.biz#webpage"}}]}</script>
<!-- /Plugin SEO WordPress Rank Math -->

<link rel='dns-prefetch' href='//cdn.kreva.biz' />
<script type="text/javascript">
/* <![CDATA[ */
window._wpemojiSettings = {"baseUrl":"https:\/\/s.w.org\/images\/core\/emoji\/15.1.0\/72x72\/","ext":".png","svgUrl":"https:\/\/s.w.org\/images\/core\/emoji\/15.1.0\/svg\/","svgExt":".svg","source":{"concatemoji":"https:\/\/cdn.kreva.biz\/wp-content\/wp-includes\/js\/wp-emoji-release.min.js?ver=6.8.1"}};
/*! This file is auto-generated */
!function(i,n){var o,s,e;function c(e){try{var t={supportTests:e,timestamp:(new Date).valueOf()};sessionStorage.setItem(o,JSON.stringify(t))}catch(e){}}function p(e,t,n){e.clearRect(0,0,e.canvas.width,e.canvas.height),e.fillText(t,0,0);var t=new Uint32Array(e.getImageData(0,0,e.canvas.width,e.canvas.height).data),r=(e.clearRect(0,0,e.canvas.width,e.canvas.height),e.fillText(n,0,0),new Uint32Array(e.getImageData(0,0,e.canvas.width,e.canvas.height).data));return t.every(function(e,t){return e===r[t]})}function u(e,t,n){switch(t){case"flag":return n(e,"\ud83c\udff3\ufe0f\u200d\u26a7\ufe0f","\ud83c\udff3\ufe0f\u200b\u26a7\ufe0f")?!1:!n(e,"\ud83c\uddfa\ud83c\uddf3","\ud83c\uddfa\u200b\ud83c\uddf3")&&!n(e,"\ud83c\udff4\udb40\udc67\udb40\udc62\udb40\udc65\udb40\udc6e\udb40\udc67\udb40\udc7f","\ud83c\udff4\u200b\udb40\udc67\u200b\udb40\udc62\u200b\udb40\udc65\u200b\udb40\udc6e\u200b\udb40\udc67\u200b\udb40\udc7f");case"emoji":return!n(e,"\ud83d\udc26\u200d\ud83d\udd25","\ud83d\udc26\u200b\ud83d\udd25")}return!1}function f(e,t,n){var r="undefined"!=typeof WorkerGlobalScope&&self instanceof WorkerGlobalScope?new OffscreenCanvas(300,150):i.createElement("canvas"),a=r.getContext("2d",{willReadFrequently:!0}),o=(a.textBaseline="top",a.font="600 32px Arial",{});return e.forEach(function(e){o[e]=t(a,e,n)}),o}function t(e){var t=i.createElement("script");t.src=e,t.defer=!0,i.head.appendChild(t)}"undefined"!=typeof Promise&&(o="wpEmojiSettingsSupports",s=["flag","emoji"],n.supports={everything:!0,everythingExceptFlag:!0},e=new Promise(function(e){i.addEventListener("DOMContentLoaded",e,{once:!0})}),new Promise(function(t){var n=function(){try{var e=JSON.parse(sessionStorage.getItem(o));if("object"==typeof e&&"number"==typeof e.timestamp&&(new Date).valueOf()<e.timestamp+604800&&"object"==typeof e.supportTests)return e.supportTests}catch(e){}return null}();if(!n){if("undefined"!=typeof Worker&&"undefined"!=typeof OffscreenCanvas&&"undefined"!=typeof URL&&URL.createObjectURL&&"undefined"!=typeof Blob)try{var e="postMessage("+f.toString()+"("+[JSON.stringify(s),u.toString(),p.toString()].join(",")+"));",r=new Blob([e],{type:"text/javascript"}),a=new Worker(URL.createObjectURL(r),{name:"wpTestEmojiSupports"});return void(a.onmessage=function(e){c(n=e.data),a.terminate(),t(n)})}catch(e){}c(n=f(s,u,p))}t(n)}).then(function(e){for(var t in e)n.supports[t]=e[t],n.supports.everything=n.supports.everything&&n.supports[t],"flag"!==t&&(n.supports.everythingExceptFlag=n.supports.everythingExceptFlag&&n.supports[t]);n.supports.everythingExceptFlag=n.supports.everythingExceptFlag&&!n.supports.flag,n.DOMReady=!1,n.readyCallback=function(){n.DOMReady=!0}}).then(function(){return e}).then(function(){var e;n.supports.everything||(n.readyCallback(),(e=n.source||{}).concatemoji?t(e.concatemoji):e.wpemoji&&e.twemoji&&(t(e.twemoji),t(e.wpemoji)))}))}((window,document),window._wpemojiSettings);
/* ]]> */
</script>
<style id='wp-emoji-styles-inline-css' type='text/css'>

	img.wp-smiley, img.emoji {
		display: inline !important;
		border: none !important;
		box-shadow: none !important;
		height: 1em !important;
		width: 1em !important;
		margin: 0 0.07em !important;
		vertical-align: -0.1em !important;
		background: none !important;
		padding: 0 !important;
	}
</style>
<link rel='stylesheet' id='wp-block-library-css' href='https://cdn.kreva.biz/wp-content/wp-includes/css/dist/block-library/style.min.css?ver=6.8.1' type='text/css' media='all' />
<style id='classic-theme-styles-inline-css' type='text/css'>
/*! This file is auto-generated */
.wp-block-button__link{color:#fff;background-color:#32373c;border-radius:9999px;box-shadow:none;text-decoration:none;padding:calc(.667em + 2px) calc(1.333em + 2px);font-size:1.125em}.wp-block-file__button{background:#32373c;color:#fff;text-decoration:none}
</style>
<style id='global-styles-inline-css' type='text/css'>
:root{--wp--preset--aspect-ratio--square: 1;--wp--preset--aspect-ratio--4-3: 4/3;--wp--preset--aspect-ratio--3-4: 3/4;--wp--preset--aspect-ratio--3-2: 3/2;--wp--preset--aspect-ratio--2-3: 2/3;--wp--preset--aspect-ratio--16-9: 16/9;--wp--preset--aspect-ratio--9-16: 9/16;--wp--preset--color--black: #000000;--wp--preset--color--cyan-bluish-gray: #abb8c3;--wp--preset--color--white: #ffffff;--wp--preset--color--pale-pink: #f78da7;--wp--preset--color--vivid-red: #cf2e2e;--wp--preset--color--luminous-vivid-orange: #ff6900;--wp--preset--color--luminous-vivid-amber: #fcb900;--wp--preset--color--light-green-cyan: #7bdcb5;--wp--preset--color--vivid-green-cyan: #00d084;--wp--preset--color--pale-cyan-blue: #8ed1fc;--wp--preset--color--vivid-cyan-blue: #0693e3;--wp--preset--color--vivid-purple: #9b51e0;--wp--preset--gradient--vivid-cyan-blue-to-vivid-purple: linear-gradient(135deg,rgba(6,147,227,1) 0%,rgb(155,81,224) 100%);--wp--preset--gradient--light-green-cyan-to-vivid-green-cyan: linear-gradient(135deg,rgb(122,220,180) 0%,rgb(0,208,130) 100%);--wp--preset--gradient--luminous-vivid-amber-to-luminous-vivid-orange: linear-gradient(135deg,rgba(252,185,0,1) 0%,rgba(255,105,0,1) 100%);--wp--preset--gradient--luminous-vivid-orange-to-vivid-red: linear-gradient(135deg,rgba(255,105,0,1) 0%,rgb(207,46,46) 100%);--wp--preset--gradient--very-light-gray-to-cyan-bluish-gray: linear-gradient(135deg,rgb(238,238,238) 0%,rgb(169,184,195) 100%);--wp--preset--gradient--cool-to-warm-spectrum: linear-gradient(135deg,rgb(74,234,220) 0%,rgb(151,120,209) 20%,rgb(207,42,186) 40%,rgb(238,44,130) 60%,rgb(251,105,98) 80%,rgb(254,248,76) 100%);--wp--preset--gradient--blush-light-purple: linear-gradient(135deg,rgb(255,206,236) 0%,rgb(152,150,240) 100%);--wp--preset--gradient--blush-bordeaux: linear-gradient(135deg,rgb(254,205,165) 0%,rgb(254,45,45) 50%,rgb(107,0,62) 100%);--wp--preset--gradient--luminous-dusk: linear-gradient(135deg,rgb(255,203,112) 0%,rgb(199,81,192) 50%,rgb(65,88,208) 100%);--wp--preset--gradient--pale-ocean: linear-gradient(135deg,rgb(255,245,203) 0%,rgb(182,227,212) 50%,rgb(51,167,181) 100%);--wp--preset--gradient--electric-grass: linear-gradient(135deg,rgb(202,248,128) 0%,rgb(113,206,126) 100%);--wp--preset--gradient--midnight: linear-gradient(135deg,rgb(2,3,129) 0%,rgb(40,116,252) 100%);--wp--preset--font-size--small: 13px;--wp--preset--font-size--medium: 20px;--wp--preset--font-size--large: 36px;--wp--preset--font-size--x-large: 42px;--wp--preset--spacing--20: 0.44rem;--wp--preset--spacing--30: 0.67rem;--wp--preset--spacing--40: 1rem;--wp--preset--spacing--50: 1.5rem;--wp--preset--spacing--60: 2.25rem;--wp--preset--spacing--70: 3.38rem;--wp--preset--spacing--80: 5.06rem;--wp--preset--shadow--natural: 6px 6px 9px rgba(0, 0, 0, 0.2);--wp--preset--shadow--deep: 12px 12px 50px rgba(0, 0, 0, 0.4);--wp--preset--shadow--sharp: 6px 6px 0px rgba(0, 0, 0, 0.2);--wp--preset--shadow--outlined: 6px 6px 0px -3px rgba(255, 255, 255, 1), 6px 6px rgba(0, 0, 0, 1);--wp--preset--shadow--crisp: 6px 6px 0px rgba(0, 0, 0, 1);}:where(.is-layout-flex){gap: 0.5em;}:where(.is-layout-grid){gap: 0.5em;}body .is-layout-flex{display: flex;}.is-layout-flex{flex-wrap: wrap;align-items: center;}.is-layout-flex > :is(*, div){margin: 0;}body .is-layout-grid{display: grid;}.is-layout-grid > :is(*, div){margin: 0;}:where(.wp-block-columns.is-layout-flex){gap: 2em;}:where(.wp-block-columns.is-layout-grid){gap: 2em;}:where(.wp-block-post-template.is-layout-flex){gap: 1.25em;}:where(.wp-block-post-template.is-layout-grid){gap: 1.25em;}.has-black-color{color: var(--wp--preset--color--black) !important;}.has-cyan-bluish-gray-color{color: var(--wp--preset--color--cyan-bluish-gray) !important;}.has-white-color{color: var(--wp--preset--color--white) !important;}.has-pale-pink-color{color: var(--wp--preset--color--pale-pink) !important;}.has-vivid-red-color{color: var(--wp--preset--color--vivid-red) !important;}.has-luminous-vivid-orange-color{color: var(--wp--preset--color--luminous-vivid-orange) !important;}.has-luminous-vivid-amber-color{color: var(--wp--preset--color--luminous-vivid-amber) !important;}.has-light-green-cyan-color{color: var(--wp--preset--color--light-green-cyan) !important;}.has-vivid-green-cyan-color{color: var(--wp--preset--color--vivid-green-cyan) !important;}.has-pale-cyan-blue-color{color: var(--wp--preset--color--pale-cyan-blue) !important;}.has-vivid-cyan-blue-color{color: var(--wp--preset--color--vivid-cyan-blue) !important;}.has-vivid-purple-color{color: var(--wp--preset--color--vivid-purple) !important;}.has-black-background-color{background-color: var(--wp--preset--color--black) !important;}.has-cyan-bluish-gray-background-color{background-color: var(--wp--preset--color--cyan-bluish-gray) !important;}.has-white-background-color{background-color: var(--wp--preset--color--white) !important;}.has-pale-pink-background-color{background-color: var(--wp--preset--color--pale-pink) !important;}.has-vivid-red-background-color{background-color: var(--wp--preset--color--vivid-red) !important;}.has-luminous-vivid-orange-background-color{background-color: var(--wp--preset--color--luminous-vivid-orange) !important;}.has-luminous-vivid-amber-background-color{background-color: var(--wp--preset--color--luminous-vivid-amber) !important;}.has-light-green-cyan-background-color{background-color: var(--wp--preset--color--light-green-cyan) !important;}.has-vivid-green-cyan-background-color{background-color: var(--wp--preset--color--vivid-green-cyan) !important;}.has-pale-cyan-blue-background-color{background-color: var(--wp--preset--color--pale-cyan-blue) !important;}.has-vivid-cyan-blue-background-color{background-color: var(--wp--preset--color--vivid-cyan-blue) !important;}.has-vivid-purple-background-color{background-color: var(--wp--preset--color--vivid-purple) !important;}.has-black-border-color{border-color: var(--wp--preset--color--black) !important;}.has-cyan-bluish-gray-border-color{border-color: var(--wp--preset--color--cyan-bluish-gray) !important;}.has-white-border-color{border-color: var(--wp--preset--color--white) !important;}.has-pale-pink-border-color{border-color: var(--wp--preset--color--pale-pink) !important;}.has-vivid-red-border-color{border-color: var(--wp--preset--color--vivid-red) !important;}.has-luminous-vivid-orange-border-color{border-color: var(--wp--preset--color--luminous-vivid-orange) !important;}.has-luminous-vivid-amber-border-color{border-color: var(--wp--preset--color--luminous-vivid-amber) !important;}.has-light-green-cyan-border-color{border-color: var(--wp--preset--color--light-green-cyan) !important;}.has-vivid-green-cyan-border-color{border-color: var(--wp--preset--color--vivid-green-cyan) !important;}.has-pale-cyan-blue-border-color{border-color: var(--wp--preset--color--pale-cyan-blue) !important;}.has-vivid-cyan-blue-border-color{border-color: var(--wp--preset--color--vivid-cyan-blue) !important;}.has-vivid-purple-border-color{border-color: var(--wp--preset--color--vivid-purple) !important;}.has-vivid-cyan-blue-to-vivid-purple-gradient-background{background: var(--wp--preset--gradient--vivid-cyan-blue-to-vivid-purple) !important;}.has-light-green-cyan-to-vivid-green-cyan-gradient-background{background: var(--wp--preset--gradient--light-green-cyan-to-vivid-green-cyan) !important;}.has-luminous-vivid-amber-to-luminous-vivid-orange-gradient-background{background: var(--wp--preset--gradient--luminous-vivid-amber-to-luminous-vivid-orange) !important;}.has-luminous-vivid-orange-to-vivid-red-gradient-background{background: var(--wp--preset--gradient--luminous-vivid-orange-to-vivid-red) !important;}.has-very-light-gray-to-cyan-bluish-gray-gradient-background{background: var(--wp--preset--gradient--very-light-gray-to-cyan-bluish-gray) !important;}.has-cool-to-warm-spectrum-gradient-background{background: var(--wp--preset--gradient--cool-to-warm-spectrum) !important;}.has-blush-light-purple-gradient-background{background: var(--wp--preset--gradient--blush-light-purple) !important;}.has-blush-bordeaux-gradient-background{background: var(--wp--preset--gradient--blush-bordeaux) !important;}.has-luminous-dusk-gradient-background{background: var(--wp--preset--gradient--luminous-dusk) !important;}.has-pale-ocean-gradient-background{background: var(--wp--preset--gradient--pale-ocean) !important;}.has-electric-grass-gradient-background{background: var(--wp--preset--gradient--electric-grass) !important;}.has-midnight-gradient-background{background: var(--wp--preset--gradient--midnight) !important;}.has-small-font-size{font-size: var(--wp--preset--font-size--small) !important;}.has-medium-font-size{font-size: var(--wp--preset--font-size--medium) !important;}.has-large-font-size{font-size: var(--wp--preset--font-size--large) !important;}.has-x-large-font-size{font-size: var(--wp--preset--font-size--x-large) !important;}
:where(.wp-block-post-template.is-layout-flex){gap: 1.25em;}:where(.wp-block-post-template.is-layout-grid){gap: 1.25em;}
:where(.wp-block-columns.is-layout-flex){gap: 2em;}:where(.wp-block-columns.is-layout-grid){gap: 2em;}
:root :where(.wp-block-pullquote){font-size: 1.5em;line-height: 1.6;}
</style>
<link rel='stylesheet' id='ez-toc-css' href='https://cdn.kreva.biz/wp-content/plugins/easy-table-of-contents/assets/css/screen.min.css?ver=2.0.74' type='text/css' media='all' />
<style id='ez-toc-inline-css' type='text/css'>
div#ez-toc-container .ez-toc-title {font-size: 120%;}div#ez-toc-container .ez-toc-title {font-weight: 500;}div#ez-toc-container ul li , div#ez-toc-container ul li a {font-size: 95%;}div#ez-toc-container ul li , div#ez-toc-container ul li a {font-weight: 500;}div#ez-toc-container nav ul ul li {font-size: 90%;}
.ez-toc-container-direction {direction: ltr;}.ez-toc-counter ul{counter-reset: item ;}.ez-toc-counter nav ul li a::before {content: counters(item, '.', decimal) '. ';display: inline-block;counter-increment: item;flex-grow: 0;flex-shrink: 0;margin-right: .2em; float: left; }.ez-toc-widget-direction {direction: ltr;}.ez-toc-widget-container ul{counter-reset: item ;}.ez-toc-widget-container nav ul li a::before {content: counters(item, '.', decimal) '. ';display: inline-block;counter-increment: item;flex-grow: 0;flex-shrink: 0;margin-right: .2em; float: left; }
</style>
<link rel='stylesheet' id='main-style-css' href='https://cdn.kreva.biz/wp-content/themes/cakhiatv/style.css?ver=6.8.1' type='text/css' media='all' />
<script type="text/javascript" src="https://cdn.kreva.biz/wp-content/wp-includes/js/jquery/jquery.min.js?ver=3.7.1" id="jquery-core-js"></script>
<script type="text/javascript" src="https://cdn.kreva.biz/wp-content/wp-includes/js/jquery/jquery-migrate.min.js?ver=3.4.1" id="jquery-migrate-js"></script>
<link rel="https://api.w.org/" href="https://www.kreva.biz/wp-json/" /><link rel="alternate" title="JSON" type="application/json" href="https://www.kreva.biz/wp-json/wp/v2/pages/1060" /><link rel="EditURI" type="application/rsd+xml" title="RSD" href="https://www.kreva.biz/xmlrpc.php?rsd" />
<meta name="generator" content="WordPress 6.8.1" />
<link rel='shortlink' href='https://www.kreva.biz/' />
<link rel="alternate" title="oNhúng (JSON)" type="application/json+oembed" href="https://www.kreva.biz/wp-json/oembed/1.0/embed?url=https%3A%2F%2Fwww.kreva.biz%2F" />
<link rel="alternate" title="oNhúng (XML)" type="text/xml+oembed" href="https://www.kreva.biz/wp-json/oembed/1.0/embed?url=https%3A%2F%2Fwww.kreva.biz%2F&#038;format=xml" />
    <style>
        @media (min-width: 1024px) {
            h1 {
                font-size: 1.5em !important;
            }
        }

        .match-teams-score {
            display: flex !important;
        }

        @media (max-width: 767px) {
            .xgplayer .xg-inner-controls {
                height: 60px !important;
            }
            .header .logo img{
                height: 35px;
            }
        }

        @media (min-width: 481px) and (max-width: 767px) {
            div#chat_messages {
                max-height: 60vh !important;
            }
        }
    </style>
    <style>
            .match-section {
                min-height: 4800px;
            }
            
            .match-card__status {
                position: absolute;
                top: 13%;
                left: 50%;
                transform: translate(-50%, -50%);
            }
            
            .match-card__stats-content {
                background: none !important;
                box-shadow: none !important
            }
            
            
            
            @media (max-width: 480px) {
                .team__logo {
                    width: 40px !important;
                    height: 40px !important;
                }
                .match-card__league {
                    max-width: 100px;
                }
                
                .match-card__time {
                    max-width: 100px;
                }
                
                .match-card__status {
                    max-width: 120px;
                    order: 1 !important;
                    font-size: 12px
                }
                
                .streaming {
                    padding: 4px;
                }
                
                .btn-view-truc-tiep {
                    padding: 8px 4px !important;
                    font-size: 12px;
                }
                .match-card__stats-content {
                    display: block !important;
                }
                
                .match-card__stats {
                    display: block !important
                }
            }
            
            @media (min-width: 768px) and (max-width: 1024px) {
                .match-card__status {
                    position: absolute;
                    top: 13%;
                    left: 50%;
                    transform: translate(-50%, -50%);
                }
                
                .match-card__league {
                    max-width: 110px;
                }
            }
        </style><link rel="icon" href="https://cdn.kreva.biz/wp-content/uploads/2025/05/cropped-xoilac_mypham_logo_header-32x32.png" sizes="32x32" />
<link rel="icon" href="https://cdn.kreva.biz/wp-content/uploads/2025/05/cropped-xoilac_mypham_logo_header-192x192.png" sizes="192x192" />
<link rel="apple-touch-icon" href="https://cdn.kreva.biz/wp-content/uploads/2025/05/cropped-xoilac_mypham_logo_header-180x180.png" />
<meta name="msapplication-TileImage" content="https://cdn.kreva.biz/wp-content/uploads/2025/05/cropped-xoilac_mypham_logo_header-270x270.png" />
  
<!-- Google tag (tổng) -->
<script async src="https://www.googletagmanager.com/gtag/js?id=G-V8GXMSME5N"></script>
<script>
  window.dataLayer = window.dataLayer || [];
  function gtag(){dataLayer.push(arguments);}
  gtag('js', new Date());

  gtag('config', 'G-V8GXMSME5N');
</script>

<!-- Google tag (myphamtoc) -->
<script async src="https://www.googletagmanager.com/gtag/js?id=G-BWBRLCK901"></script>
<script>
  window.dataLayer = window.dataLayer || [];
  function gtag(){dataLayer.push(arguments);}
  gtag('js', new Date());

  gtag('config', 'G-BWBRLCK901');
</script>
  
<script src="//s1.what-on.com/widget/service-v2.js?key=3Tooo" async="async"></script>

  
</head>

<body>
  <!-- Header -->
<header class="header">
    <div class="container">
      <div class="header__inner">
        <a href="/" class="logo">
          <img src="/wp-content/uploads/2025/05/xoilac_mypham_logo_cut.png" alt="XOILAC TV" />
        </a>
        <div style="display: flex; align-items: center">
          <nav class="nav">
            <button class="nav__toggle">
              <img src="https://cdn.kreva.biz/wp-content/themes/cakhiatv/assets/images/hamburger.svg" alt="Menu" />
            </button>

            <ul class="nav__menu">
              <button class="nav__close" aria-label="Close menu"></button>
              <li class="nav__item"><a href="/" class=" active">TRANG CHỦ</a></li><li class="nav__item"><a href="https://www.kreva.biz/lich-thi-dau" class="">LỊCH THI ĐẤU</a></li><li class="nav__item"><a href="https://www.kreva.biz/bang-xep-hang" class="">BẢNG XẾP HẠNG</a></li><li class="nav__item"><a href="https://www.kreva.biz/ket-qua-bong-da" class="">KẾT QUẢ BÓNG ĐÁ</a></li><li class="nav__item"><a href="https://www.kreva.biz/nhan-dinh" class="">NHẬN ĐỊNH</a></li><li class="nav__item"><a href="https://www.kreva.biz/tin-bong-da" class="">TIN TỨC</a></li>            </ul>
          </nav>
          <div class="header__buttons">
            <a href="https://refvsbf.com/" target="_blank" class="btn btn--secondary header-button" rel="nofollow">
              <span class="header-text">CƯỢC VSBET</span>
            </a>
            <a href="https://t.me/vsbet88888888888888888" rel="nofollow" target="_blank" class="btn btn--default header-button">
              <span class="header-text">LIÊN HỆ KM</span>
            </a>
          </div>

        </div>



      </div>
    </div>
  </header>
 
   <!-- Main Content -->
     <!-- Main Content -->
     <main>
      <!-- Hero Section -->
      <section class="hero">
        <div class="container">
          <div class="hero__content">
            <h1 class="text-uppercase">
              Xoilac TV - Trực tiếp bóng đá miễn phí - Link Xôi Lạc TTBD
            </h1>
          </div>
        </div>
      </section>

      <!-- Sports Filter -->
      <section class="sports-filter">
        <div class="container">
          <div class="sports-filter__inner" style="display: none">
            <!-- Group 1: Sports Categories -->
            <!--<div class="sports-filter__group sports-categories">
            <button
                class="sports-filter__button"
                data-sport="all"
              >
                <div class="sports-filter__button-icon">
                  <img
                    src="https://cdn.kreva.biz/wp-content/themes/cakhiatv/assets/images/icons/football.png"
                    alt="Tất Cả"
                  />
                </div>
                <div class="sports-filter__button-text">Tất Cả</div>
                <div class="sports-filter__button-count" id="count-all-type"></div>
              </button>

              <button
                class="sports-filter__button"
                data-sport="football"
              >
                <div class="sports-filter__button-icon">
                  <img
                    src="https://cdn.kreva.biz/wp-content/themes/cakhiatv/assets/images/icons/football.png"
                    alt="Football"
                  />
                </div>
                <div class="sports-filter__button-text">Bóng đá</div>
                <div class="sports-filter__button-count" id="count-football"></div>
              </button>

              <button class="sports-filter__button" data-sport="basketball">
                <div class="sports-filter__button-icon">
                  <img
                    src="https://cdn.kreva.biz/wp-content/themes/cakhiatv/assets/images/icons/basketball.png"
                    alt="Basketball"
                  />
                </div>
                <div class="sports-filter__button-text">Bóng rổ</div>
                <div class="sports-filter__button-count" id="count-basketball"></div>
              </button>

             <!-- <button class="sports-filter__button" data-sport="tennis">
                <div class="sports-filter__button-icon">
                  <img src="https://cdn.kreva.biz/wp-content/themes/cakhiatv/assets/images/icons/tennis.png" alt="Tennis" />
                </div>
                <div class="sports-filter__button-text">Tennis</div>
                <div class="sports-filter__button-count" id="count-tennis"></div>
              </button> -->

              <!--<button class="sports-filter__button" data-sport="volleyball">
                <div class="sports-filter__button-icon">
                  <img
                    src="https://cdn.kreva.biz/wp-content/themes/cakhiatv/assets/images/icons/volleyball.png"
                    alt="Volleyball"
                  />
                </div>
                <div class="sports-filter__button-text">Bóng chuyền</div>
                <div class="sports-filter__button-count" id="count-volleyball"></div>
              </button> -->

              <div class="livescore-switch">
                <label class="switch">
                  <input type="checkbox" id="livescoreToggle" />
                  <span class="slider"></span>
                </label>
                <span class="livescore-label">Livescore</span>
              </div>
            </div>
            <div id="noblv-live" style="display: none;"></div>

            <!-- Divider -->
            <div class="sports-filter__divider"></div>

            <!-- Group 2: Match Filters -->
            <div class="sports-filter__group match-filters">
            <button class="sports-filter__button_child active" data-filter="child_all">
                <div class="sports-filter__button-icon">
                  <img src="https://cdn.kreva.biz/wp-content/themes/cakhiatv/assets/images/icons/all.png" alt="All" />
                </div>
                <div class="sports-filter__button-text">Tất cả</div>
                <div class="sports-filter__button-count" id="count-all-type"></div>
              </button>

              <button class="sports-filter__button_child live" data-filter="live">
                <div class="sports-filter__button-icon">
                  <img src="https://cdn.kreva.biz/wp-content/themes/cakhiatv/assets/images/icons/live.png" alt="Live" />
                </div>
                <div class="sports-filter__button-text">Đang Live</div>
                <div class="sports-filter__button-count" id="count-live"></div>
              </button>

              <button class="sports-filter__button_child" data-filter="hot" style="display: none;">
                <div class="sports-filter__button-icon">
                  <img src="https://cdn.kreva.biz/wp-content/themes/cakhiatv/assets/images/icons/hot.png" alt="Hot" />
                </div>
                <div class="sports-filter__button-text">Trận HOT</div>
                <div class="sports-filter__button-count" id="count-hot">48</div>
              </button>

              <button class="sports-filter__button_child" data-filter="date" data-value=""  style="display: none;">
                <div class="sports-filter__button-icon">
                  <img src="https://cdn.kreva.biz/wp-content/themes/cakhiatv/assets/images/icons/calendar.png" alt="Today" />
                </div>
                <div class="sports-filter__button-text">Hôm Nay</div>
                <div class="sports-filter__button-count" id="count-today"></div>
              </button>

              <button class="sports-filter__button_child" data-filter="date" data-value=""  style="display: none;">
                <div class="sports-filter__button-icon">
                  <img
                    src="https://cdn.kreva.biz/wp-content/themes/cakhiatv/assets/images/icons/calendar.png"
                    alt="Tomorrow"
                  />
                </div>
                <div class="sports-filter__button-text">Ngày Mai</div>
                <div class="sports-filter__button-count" id="count-tomorrow"></div>
              </button>   
             <button class="sports-filter__button_child" data-filter="no_blv"  style="display: none;">
                <div class="sports-filter__button-text">Live không BLV</div>
                <div class="sports-filter__button-count" id="noblv-live">0</div>
              </button>
            </div>
          </div>
        </div>
      </section>

      <!-- Featured Matches -->
      <section class="featured-matches">
        <div class="container">
        <div class="match-section">
            <div id="match-list" class="matches">
            </div>
          </div>

          <!--<div
            style="
              display: flex;
              justify-content: center;
              margin-top: 1rem;
              margin-bottom: 1rem;
            "
          >
            <a href="#" class="btn btn--readmore">
              <span>Xem thêm lịch trực tiếp -></span>
            </a>
          </div>-->
        </div>
      </section>

      <!-- Content Navigation Section -->
      <section class="content-nav">
  <div class="container">
    <div class="content-nav__container" style="max-height:800px !important">
      <div class="content-nav__lists">
        <div class="content-nav__list">
          <!-- Nếu bạn vẫn muốn giữ Mục lục này thủ công, thì để lại -->
          <p style="font-weight: bold; font-size: 120%">Mục Lục</p>
          <!-- Hoặc có thể xoá toàn bộ <ul> này nếu muốn Gutenberg xử lý luôn -->

          <div class="content-nav__divider"></div>

          <div class="content-nav__text">
            <div id="ez-toc-container" class="ez-toc-v2_0_74 counter-hierarchy ez-toc-counter ez-toc-grey ez-toc-container-direction">
<div class="ez-toc-title-container">
<p class="ez-toc-title" style="cursor:inherit">Table of Contents</p>
<span class="ez-toc-title-toggle"><a href="#" class="ez-toc-pull-right ez-toc-btn ez-toc-btn-xs ez-toc-btn-default ez-toc-toggle" aria-label="Toggle Table of Content"><span class="ez-toc-js-icon-con"><span class=""><span class="eztoc-hide" style="display:none;">Toggle</span><span class="ez-toc-icon-toggle-span"><svg style="fill: #999;color:#999" xmlns="https://www.w3.org/2000/svg" class="list-377408" width="20px" height="20px" viewBox="0 0 24 24" fill="none"><path d="M6 6H4v2h2V6zm14 0H8v2h12V6zM4 11h2v2H4v-2zm16 0H8v2h12v-2zM4 16h2v2H4v-2zm16 0H8v2h12v-2z" fill="currentColor"></path></svg><svg style="fill: #999;color:#999" class="arrow-unsorted-368013" xmlns="https://www.w3.org/2000/svg" width="10px" height="10px" viewBox="0 0 24 24" version="1.2" baseProfile="tiny"><path d="M18.2 9.3l-6.2-6.3-6.2 6.3c-.2.2-.3.4-.3.7s.1.5.3.7c.2.2.4.3.7.3h11c.3 0 .5-.1.7-.3.2-.2.3-.5.3-.7s-.1-.5-.3-.7zM5.8 14.7l6.2 6.3 6.2-6.3c.2-.2.3-.5.3-.7s-.1-.5-.3-.7c-.2-.2-.4-.3-.7-.3h-11c-.3 0-.5.1-.7.3-.2.2-.3.5-.3.7s.1.5.3.7z"/></svg></span></span></span></a></span></div>
<nav><ul class='ez-toc-list ez-toc-list-level-1 ' ><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class="ez-toc-link ez-toc-heading-1" href="#Tong_quan_thong_tin_ve_nen_tang_Xoilac_TV_2025" >Tổng quan thông tin về nền tảng Xoilac TV 2025</a></li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class="ez-toc-link ez-toc-heading-2" href="#Danh_gia_chat_luong_phat_song_cua_Xoilac_moi_nhat" >Đánh giá chất lượng phát sóng của Xoilac mới nhất</a><ul class='ez-toc-list-level-3' ><li class='ez-toc-heading-level-3'><a class="ez-toc-link ez-toc-heading-3" href="#Xem_bong_da_mien_phi" >Xem bóng đá miễn phí</a></li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class="ez-toc-link ez-toc-heading-4" href="#Hinh_anh_phat_song_tai_Xoilac_TV_sac_net" >Hình ảnh phát sóng tại Xoilac TV sắc nét</a></li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class="ez-toc-link ez-toc-heading-5" href="#Am_thanh_song_dong" >Âm thanh sống động</a></li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class="ez-toc-link ez-toc-heading-6" href="#Noi_khong_voi_quang_cao_chen_ngang_tran" >Nói không với quảng cáo chen ngang trận</a></li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class="ez-toc-link ez-toc-heading-7" href="#Khong_xay_ra_giat_lag_tai_Xoilac_TV" >Không xảy ra giật lag tại Xoilac TV</a></li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class="ez-toc-link ez-toc-heading-8" href="#Da_dang_link_du_phong" >Đa dạng link dự phòng</a></li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class="ez-toc-link ez-toc-heading-9" href="#Binh_luan_vien_chuyen_nghiep" >Bình luận viên chuyên nghiệp</a></li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class="ez-toc-link ez-toc-heading-10" href="#Theo_doi_bong_da_da_thiet_bi" >Theo dõi bóng đá đa thiết bị</a></li></ul></li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class="ez-toc-link ez-toc-heading-11" href="#Mot_vai_chuyen_muc_hap_dan_khac_hien_co_tai_Xoilac_TV" >Một vài chuyên mục hấp dẫn khác hiện có tại Xoilac TV</a><ul class='ez-toc-list-level-3' ><li class='ez-toc-heading-level-3'><a class="ez-toc-link ez-toc-heading-12" href="#Lich_thi_dau" >Lịch thi đấu</a></li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class="ez-toc-link ez-toc-heading-13" href="#Bang_xep_hang" >Bảng xếp hạng</a></li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class="ez-toc-link ez-toc-heading-14" href="#Ket_qua_bong_da_tai_Xoilac_TV" >Kết quả bóng đá tại Xoilac TV</a></li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class="ez-toc-link ez-toc-heading-15" href="#Tin_tuc_the_thao" >Tin tức thể thao</a></li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class="ez-toc-link ez-toc-heading-16" href="#Nhan_dinh_bong_da" >Nhận định bóng đá</a></li></ul></li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class="ez-toc-link ez-toc-heading-17" href="#So_sanh_Xoilac_TV_voi_nhung_trang_truc_tiep_bong_da_2025_khac" >So sánh Xoilac TV với những trang trực tiếp bóng đá 2025 khác</a></li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class="ez-toc-link ez-toc-heading-18" href="#FAQs_%E2%80%93_Giai_dap_thac_mac_cua_nguoi_xem_tai_Xoilac_hien_nay" >FAQs &#8211; Giải đáp thắc mắc của người xem tại Xoilac hiện nay</a><ul class='ez-toc-list-level-3' ><li class='ez-toc-heading-level-3'><a class="ez-toc-link ez-toc-heading-19" href="#Theo_doi_bong_da_tai_day_co_mat_phi_gi_khong" >Theo dõi bóng đá tại đây có mất phí gì không?</a></li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class="ez-toc-link ez-toc-heading-20" href="#Xoilac_TV_co_gioi_han_IP_khi_xem_bong_da_khong" >Xoilac TV có giới hạn IP khi xem bóng đá không?</a></li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class="ez-toc-link ez-toc-heading-21" href="#Xoilac_co_tinh_nang_gi_dac_biet_khac" >Xoilac có tính năng gì đặc biệt khác?</a></li></ul></li></ul></nav></div>




<p><strong><a href="/">Xoilac</a> TV</strong> &#8211; trang web phát sóng bóng đá trực tiếp không thu phí của người dùng hot nhất năm 2025. Đây cũng là một trong những kênh được yêu thích và có số lượng khách hàng truy cập đông đảo. Nếu muốn trải nghiệm nền tảng, mời bạn đọc hãy cùng chúng tôi khám phá ngay bài viết bên dưới!</p>



<h2 class="wp-block-heading"><span class="ez-toc-section" id="Tong_quan_thong_tin_ve_nen_tang_Xoilac_TV_2025"></span><strong>Tổng quan thông tin về nền tảng Xoilac TV 2025</strong><span class="ez-toc-section-end"></span></h2>



<p>Xôi Lạc TV là trang web chuyên phát sóng trực tiếp các trận đá bóng đỉnh cao trên toàn thế giới. Đặc biệt trong thời đại công nghệ số đang phát triển như hiện nay, đa số người dùng đều lựa chọn theo dõi thể thao thông qua điện thoại, máy tính,&#8230; thay vì cách xem truyền thống trên TV như trước. Không chỉ vậy, để theo dõi trận đấu thì bạn cần truy cập vào <strong><a href="/">Xoilac TV</a></strong> uy tín chất lượng cao.</p>



<p>Đó cũng chính là lý do nền tảng Xoi Lac được ra đời và phục vụ hàng triệu cổ động viên tại Việt Nam. Đứng sau hệ thống này đều là các chuyên gia bóng đá hàng đầu cùng nhiều kỹ thuật viên IT chuyên nghiệp. Vì vậy, website đã phát triển cực nhanh và áp dụng công nghệ phát sóng mới nhất. Đảm bảo khi truy cập vào đây, bạn sẽ tìm được đường link trận đấu mình yêu thích cực dễ dàng.</p>



<figure class="wp-block-image"><img decoding="async" src="https://panel.villawh.com/villawh_com_wp-content/uploads/2025/05/AD_4nXfgqnfPLZ_Kue878tJEqlanLM5sqTh2tSfzrmfQ1HJgW1t8A_W1fGKG5ewpdXHglGgSKUCjubR6t0PggczWOWQ9yGSbXDCWnEAhbaG_Fu5kSeQIQYOR-0roMfYX_Wz8ouQRQVli0AkeyM70_UC5QgpV6a21j6Odi1gAw.jpg" alt=""/></figure>



<p><em>Sơ lược thông tin chung về trang Xoilac TV 2025</em></p>



<h2 class="wp-block-heading"><span class="ez-toc-section" id="Danh_gia_chat_luong_phat_song_cua_Xoilac_moi_nhat"></span><strong>Đánh giá chất lượng phát sóng của Xoilac mới nhất</strong><span class="ez-toc-section-end"></span></h2>



<p>Khi người dùng truy cập vào trang web <strong><a href="/">Xôi Lạc TV</a></strong> đảm bảo sẽ phải bất ngờ ngay từ lần đầu. Bởi hiện nay, thương hiệu đang không ngừng cải tiến và cung cấp nhiều ưu điểm đặc sắc nhất phục vụ cho những khách hàng đam mê thể thao. Bao gồm:</p>



<h3 class="wp-block-heading"><span class="ez-toc-section" id="Xem_bong_da_mien_phi"></span><strong>Xem bóng đá miễn phí</strong><span class="ez-toc-section-end"></span></h3>



<p>Ưu điểm đầu tiên mà chúng ta không thể bỏ qua mỗi khi nhắc đến nền tảng <strong>Xoi Lac TV </strong>đó chính là tính năng phát sóng trận đấu miễn phí. Với mục tiêu xây dựng sân chơi đưa người dùng Việt đến gần hơn với đam mê, hệ thống hiện tại không thu bất kỳ khoản phí nào dành cho bạn. Do vậy, chúng ta có thể thỏa sức truy cập khám phá trận đấu một cách trọn vẹn mà không cần lo lắng về tài chính.</p>



<h3 class="wp-block-heading"><span class="ez-toc-section" id="Hinh_anh_phat_song_tai_Xoilac_TV_sac_net"></span><strong>Hình ảnh phát sóng tại Xoilac TV sắc nét</strong><span class="ez-toc-section-end"></span></h3>



<p>Nhờ sự đầu tư chỉn chu về công nghệ phát sóng cùng hệ thống server hiện đại nên nền tảng cam kết mang đến kho hình ảnh chất lượng cao cực kỳ sắc nét. Điều này giúp mỗi khán giả truy cập đều có cảm nhận chân thực trước những màn giao chiến đầy kịch tính và pha bóng đặc sắc nhất.</p>



<h3 class="wp-block-heading"><span class="ez-toc-section" id="Am_thanh_song_dong"></span><strong>Âm thanh sống động</strong><span class="ez-toc-section-end"></span></h3>



<p>Chưa hết, <strong>XoilacTV </strong>cũng xây dựng hệ thống âm thanh sống động và rõ ràng. Đảm bảo tái hiện đầy đủ từng tiếng hò reo, cổ động, tiếng trống nhiệt tình trên sân cỏ. Điều này hứa hẹn mang đến trải nghiệm chân thực và rõ ràng cho mỗi khán giả. Nhờ đó, chúng ta sẽ có cảm giác như đang góp mặt trực tiếp ở sân vận động để cổ vũ cho đội tuyển mình yêu thích.</p>



<figure class="wp-block-image"><img decoding="async" src="https://panel.villawh.com/villawh_com_wp-content/uploads/2025/05/AD_4nXcxE0kJ9pSm-AkWliPY3t-4ggN995UWrqhkND0DN10O2PDBSqp9syZawQ1ll0NweDEKk2bROEHRJwrTSBAXS4oWoUug6BKyKKJ2fuUmmoDbddE6Mthmgi77lkrYcTnqekZrtmyL5AkeyM70_UC5QgpV6a21j6Odi1gAw.jpg" alt=""/></figure>



<p><em>Đánh giá hệ thống âm thanh phát sóng tại Xoilac</em></p>



<h3 class="wp-block-heading"><span class="ez-toc-section" id="Noi_khong_voi_quang_cao_chen_ngang_tran"></span><strong>Nói không với quảng cáo chen ngang trận</strong><span class="ez-toc-section-end"></span></h3>



<p>Tính năng đặc biệt tiếp theo mà chúng tôi muốn đề cập đến trong bài viết này đó chính là không có quảng cáo chen ngang. Thấu hiểu được nhu cầu giải trí, theo dõi bóng đá của người dùng cũng như sự phiền toái khi các video xuất hiện giữa chừng trận làm gián đoạn nên nền tảng đã khắc phục hoàn toàn điều này.</p>



<p>Nhờ vậy, đảm bảo người dùng có thể theo dõi một cách mượt mà các trận bóng đá mình yêu thích. Đồng thời trong những khoảnh khắc căng thẳng, <strong>Xoilac TV</strong> cam kết không xuất hiện quảng cáo chen ngang gây gián đoạn và khó chịu cho cổ động viên.</p>



<h3 class="wp-block-heading"><span class="ez-toc-section" id="Khong_xay_ra_giat_lag_tai_Xoilac_TV"></span><strong>Không xảy ra giật lag tại Xoilac TV</strong><span class="ez-toc-section-end"></span></h3>



<p>Tuy đây là một trong những nền tảng cho phép người dùng theo dõi bóng đá miễn phí nhưng chất lượng mà website cung cấp lại vô cùng vượt trội. Theo đó, khi theo dõi bạn sẽ tuyệt đối không bắt gặp tình trạng giật lag xảy ra ở các giải đấu lớn nhiều người quan tâm. Ngay cả khi lượng truy cập máy chủ cực đông thì hệ thống vẫn có thể phát sóng một cách mượt mà nhất.</p>



<h3 class="wp-block-heading"><span class="ez-toc-section" id="Da_dang_link_du_phong"></span><strong>Đa dạng link dự phòng</strong><span class="ez-toc-section-end"></span></h3>



<p>Nền tảng phát sóng<a href="/"> <strong>trực tiếp bóng đá</strong></a><strong> </strong>đảm bảo cung cấp đầy đủ các đường link theo dõi chất lượng cao. Hiện tại đơn vị cũng đang áp dụng công nghệ tân tiến để xây dựng hệ thống server hiện đại. Chính vì thế, đảm bảo khán giả khi truy cập đều được theo dõi trận cầu đỉnh cao mà không lo lắng xảy ra tình trạng giật lag hay quá tải.</p>



<figure class="wp-block-image"><img decoding="async" src="https://panel.villawh.com/villawh_com_wp-content/uploads/2025/05/AD_4nXdqHM-mQicEIObeUYgENR0VekZuGIVLNZeDKz0aglZFaLRYmxHh0KOx-Xsl5VPPvw4vcF2VctR4IQCBMKZYyKeE_XRyvsWZOBRokQvPpsAkAS22OH7Sd3ZczgV5NbeNBpTTlUloBwkeyM70_UC5QgpV6a21j6Odi1gAw.jpg" alt=""/></figure>



<p><em>Theo dõi bóng đá chuyên nghiệp cùng Xoilac TV</em></p>



<h3 class="wp-block-heading"><span class="ez-toc-section" id="Binh_luan_vien_chuyen_nghiep"></span><strong>Bình luận viên chuyên nghiệp</strong><span class="ez-toc-section-end"></span></h3>



<p>Ngoài được <strong>xem bóng đá trực tiếp </strong>với chất lượng phát sóng đỉnh cao thì mọi người còn có thể chìm đắm hoàn toàn vào trận đấu nhờ sự dẫn dắt tài tình từ các bình luận viên chuyên nghiệp. Họ không chỉ sở hữu chuyên môn, kỹ năng cao mà còn mang giọng điệu truyền cảm pha chút hài hước. Nhờ đó mỗi trận đấu càng thêm phần đặc sắc, dễ hiểu và thú vị hơn bao giờ hết.</p>



<h3 class="wp-block-heading"><span class="ez-toc-section" id="Theo_doi_bong_da_da_thiet_bi"></span><strong>Theo dõi bóng đá đa thiết bị</strong><span class="ez-toc-section-end"></span></h3>



<p>Nếu như trước đây chúng ta có thể xem trực tuyến bóng đá trên TV khi không di chuyển đến sân vận động được thì ngày ngay, bạn hoàn toàn được phép sử dụng thêm đa thiết bị khác. Theo đó, chỉ cần trang bị cho mình điện thoại, máy tính bảng, laptop, Smart TV,&#8230; có kết nối mạng và truy cập vào<strong> Xoilac TV</strong> là ngay lập tức toàn bộ hệ thống giải đấu sẽ hiện ra nhanh chóng.</p>



<h2 class="wp-block-heading"><span class="ez-toc-section" id="Mot_vai_chuyen_muc_hap_dan_khac_hien_co_tai_Xoilac_TV"></span><strong>Một vài chuyên mục hấp dẫn khác hiện có tại Xoilac TV</strong><span class="ez-toc-section-end"></span></h2>



<p>Để chuẩn bị cho mùa bóng đá sắp tới và hưởng chung bầu không khí sôi động của các CĐV Việt, nền tảng tự hào là kênh phát sóng trực tiếp đỉnh cao nhất. Bởi khi truy cập, bạn không chỉ có cơ hội theo dõi đội tuyển mình yêu thích mà còn được sử dụng nhiều tính năng bổ trợ mà hệ thống mang đến như:</p>



<h3 class="wp-block-heading"><span class="ez-toc-section" id="Lich_thi_dau"></span><strong>Lịch thi đấu</strong><span class="ez-toc-section-end"></span></h3>



<p>Tính năng đầu tiên phải đề cập đến tại trang chủ đó chính là lịch thi đấu. <strong>Xoilac TV </strong>sẽ giúp khán giả biết được lộ trình của đầy đủ các giải đấu bóng đá trên toàn thế giới hiện nay một cách chi tiết nhất. Đồng thời hệ thống cũng cam kết cập nhật chuẩn thông tin về: thời gian bắt đầu, đội hình dự kiến ra sân,&#8230;</p>



<figure class="wp-block-image"><img decoding="async" src="https://panel.villawh.com/villawh_com_wp-content/uploads/2025/05/AD_4nXeuSVO3OLOmfC45_QszDIBZWLKy_l9kmhZhn0YuM4d9xfKH7D_-XmL_8GOh7BtBXc5fnVWdqKnQXU4bUn7SqbeMc9EEqFXyMtzOqSuAxYl3NuY2wdwdaN5cIIOz7If_ixk5zS91dQkeyM70_UC5QgpV6a21j6Odi1gAw.jpg" alt=""/></figure>



<p><em>Một số tính năng đặc sắc của trang bóng đá</em></p>



<h3 class="wp-block-heading"><span class="ez-toc-section" id="Bang_xep_hang"></span><strong>Bảng xếp hạng</strong><span class="ez-toc-section-end"></span></h3>



<p>Người <strong>xem bóng đá trực tuyến </strong>trên trang còn có thể nắm rõ thông tin về bảng xếp hạng của bất kỳ giải đấu lớn nhỏ nào mình yêu thích với quy mô trên toàn cầu. Trong BXH hệ thống cập nhật cũng bao gồm đầy đủ dữ liệu quan trọng chuẩn xác cơ bản như: vị trí, điểm số, số vòng thi đấu, hiệu số thắng thua, thành tích gần nhất,&#8230;</p>



<h3 class="wp-block-heading"><span class="ez-toc-section" id="Ket_qua_bong_da_tai_Xoilac_TV"></span><strong>Kết quả bóng đá tại Xoilac TV</strong><span class="ez-toc-section-end"></span></h3>



<p>Ngoài những thông tin cơ bản trên, đơn vị còn mang cập nhật đầy đủ thông tin về kết quả bóng đá dành cho khách hàng. Nhờ vào dữ liệu này, bạn có thể dễ dàng đưa ra cái nhìn tổng quát nhất cho đội tuyển mình yêu thích cũng như dự đoán thứ hạng chính xác hơn.</p>



<h3 class="wp-block-heading"><span class="ez-toc-section" id="Tin_tuc_the_thao"></span><strong>Tin tức thể thao</strong><span class="ez-toc-section-end"></span></h3>



<p>Khi <strong>xem bóng đá </strong>tại đây, mọi người đảm bảo sẽ nắm được đầy đủ tin tức thể thao mới nhất trong nước cũng như ngoài nước. Các dữ liệu này đều cập nhật đa dạng, chính xác như: giải đấu, cầu thủ, trước trận, huấn luyện viên, chuyển nhượng, bên lề sân cỏ,&#8230; Thêm vào đó, <strong>Xoilac TV</strong> cam kết cập nhật mọi thông tin luôn sớm hơn hẳn trang web khác để bạn nắm rõ tình hình đội bóng trong tay.</p>



<h3 class="wp-block-heading"><span class="ez-toc-section" id="Nhan_dinh_bong_da"></span><strong>Nhận định bóng đá</strong><span class="ez-toc-section-end"></span></h3>



<p>Các kiến thức về nhận định bóng đá cũng là một trong những chuyên mục được người dùng đánh giá cao nhất hiện nay. Thông tin này đều đảm bảo update từ các chuyên gia hàng đầu giúp cổ động viên có thêm thông tin hữu ích khác nhằm đưa ra tỷ lệ kèo ăn tiền chuẩn xác nhất.</p>



<figure class="wp-block-image"><img decoding="async" src="https://panel.villawh.com/villawh_com_wp-content/uploads/2025/05/AD_4nXeMRBRHBNpfxOhNCpi3OwTI5oRiNq8fmJcKX_wH9ZD0cKKTIg2-T-inxcn8G3Dp3YAfU3vGEyihyGZvbAKV6r4UTI_70XYN1UYpbF3Cl5VRbo91mGXmhMuB_KdJaIRiDcAfpwb3HAkeyM70_UC5QgpV6a21j6Odi1gAw.jpg" alt=""/></figure>



<p><em>Khám phá tính năng nhận định bóng đá của nền tảng</em></p>



<h2 class="wp-block-heading"><span class="ez-toc-section" id="So_sanh_Xoilac_TV_voi_nhung_trang_truc_tiep_bong_da_2025_khac"></span><strong>So sánh Xoilac TV với những trang trực tiếp bóng đá 2025 khác</strong><span class="ez-toc-section-end"></span></h2>



<p>Chúng tôi có thể khẳng định, so với các nền tảng phát sóng trực tiếp bóng đá hiện đang nổi tiếng trên thị trường như: CakhiaTV, VeboTV, RakhoiTV, 90Phut, Socolive thì XoilacTV vẫn tự hào là nền tảng cung cấp dịch vụ chất lượng cao hàng đầu Việt Nam. Bởi đơn vị hiện đang sở hữu vô số ưu điểm mà ít có website bóng đá nào đáp ứng được điển hình như:</p>



<ul class="wp-block-list">
<li>Cung cấp đầy đủ các đường link xem cho toàn bộ giải đấu lớn nhỏ trên toàn quốc. Thêm vào đó dù bóng đá nữ hay những bộ môn thể thao khác như: quần vợt, tennis, bóng bàn,&#8230; thì bạn đều có thể dễ dàng tìm thấy với<strong> Xoilac TV</strong>.</li>



<li>Tất cả đường link phát sóng đều được cập nhật sớm trước khi trận đấu diễn ra khoảng 1 tiếng để khách hàng chọn ra địa chỉ xem phù hợp với thiết bị nhất.</li>



<li>Các đường link đều cung cấp trận đấu bóng đá với chất lượng hình ảnh full HD sắc nét đảm bảo tính chân thực cực cao và fit hoàn toàn với màn hình thiết bị. Đương nhiên, người dùng cũng được phép điều chỉnh âm lượng hay độ phân giải tuỳ thuộc vào nhu cầu theo dõi riêng.</li>
</ul>



<figure class="wp-block-image"><img decoding="async" src="https://panel.villawh.com/villawh_com_wp-content/uploads/2025/05/AD_4nXdu4aS7iZJgFZm6x0oiMoySztdDO3nmPbwd6q3284FmbXku-kbl78udJ-gXcYpDQf764I7r4dyNMWUgtk3ze7scj4kn7SzVGAfjShuxYIDFphCPyw1HXgTQpPXy8aBEi020b2pDfQkeyM70_UC5QgpV6a21j6Odi1gAw.jpg" alt=""/></figure>



<p><em>So sánh Xoilac TV cùng các trang web bóng đá 2025 khác</em></p>



<h2 class="wp-block-heading"><span class="ez-toc-section" id="FAQs_%E2%80%93_Giai_dap_thac_mac_cua_nguoi_xem_tai_Xoilac_hien_nay"></span><strong>FAQs &#8211; Giải đáp thắc mắc của người xem tại Xoilac hiện nay</strong><span class="ez-toc-section-end"></span></h2>



<p>Dưới đây là một vài thắc mắc của người dùng khi lần đầu truy cập vào <strong>Xoilac TV</strong> được tổng hợp đầy đủ mời bạn đọc cùng tham khảo ngay. Bao gồm:</p>



<h3 class="wp-block-heading"><span class="ez-toc-section" id="Theo_doi_bong_da_tai_day_co_mat_phi_gi_khong"></span><strong>Theo dõi bóng đá tại đây có mất phí gì không?</strong><span class="ez-toc-section-end"></span></h3>



<p>Câu trả lời là không. Khách hàng được <strong>xem trực tiếp bóng đá</strong> trên nền tảng và hoàn toàn không cần phải nạp thêm bất kỳ một khoản phí phụ thu nào. Tuy nhiên hệ thống vẫn đảm bảo cung cấp chất lượng phát sóng đỉnh cao nhất, đảm bảo giúp bạn thỏa mãn nhu cầu thể thao cá nhân của mình.</p>



<h3 class="wp-block-heading"><span class="ez-toc-section" id="Xoilac_TV_co_gioi_han_IP_khi_xem_bong_da_khong"></span><strong>Xoilac TV có giới hạn IP khi xem bóng đá không?</strong><span class="ez-toc-section-end"></span></h3>



<p>Hiện tại trang web không áp dụng bất kỳ chính sách nào phổ biến về việc giới hạn địa chỉ IP khi xem bóng đá. Nhờ vậy mà bạn có thể thưởng thức dễ dàng trận đấu mình yêu thích dù đang ở bất kỳ địa điểm nào.</p>



<h3 class="wp-block-heading"><span class="ez-toc-section" id="Xoilac_co_tinh_nang_gi_dac_biet_khac"></span><strong>Xoilac có tính năng gì đặc biệt khác?</strong><span class="ez-toc-section-end"></span></h3>



<p>Một tính năng đặc biệt khác dành cho những ai hâm mộ trận đấu bóng đá nhưng không có thời gian theo dõi và bỏ lỡ mất đó chính là video highlight. Tại đây hệ thống sẽ cập nhật đầy đủ các pha bóng đỉnh cao và đặc sắc để người xem theo dõi nhanh chóng lại diễn biến vô cùng dễ dàng.</p>



<p>Trên đây là toàn bộ thông tin giới thiệu và đánh giá chi tiết về trang web phát sóng bóng đá<strong> Xoilac TV</strong> nổi tiếng. Còn chần chừ gì mà không nhanh chóng truy cập ngay hôm nay để có cơ hội thưởng thức các trận đấu đỉnh cao nhất. Cảm ơn bạn đã quan tâm!</p>
          </div>
        </div>
      </div>
    </div>
  </div>
</section>
    </main>
<!-- Footer -->
    <!-- <footer class="footer">
      <div class="container">
        <div class="footer__content">
          <p style="font-size: 14px">
            Bản quyền bởi
            <a href="#"><span class="text-primary">CakhiaTV</span></a> - All
            rights reserved
          </p>
        </div>
      </div>
    </footer> -->
    
    <footer style="background-color: #111; color: #fff; text-align: center; padding: 30px 15px;">
        
        
        <div id="3Tooo" style="text-align:center"></div>

  <p class="footer-descript">
    <a href="/"><strong style="color: #0CCC4C;">Xoilac</strong></a> TV phát bóng đá trực tuyến HD, không quảng cáo chen ngang, không giật lag ở các giải đấu quốc nội, khu vực cùng đội ngũ BLV được đào tạo bài bản, chuyên môn cao. Xem trực tiếp bóng đá tại Xôi Lạc TV hoàn toàn miễn phí, cùng nhiều tính năng hữu ích như lịch thi đấu, bảng xếp hạng, kết quả bóng đá,... tất cả đều được cập nhật theo thời gian thực và hoàn miễn phí. Chúc mọi người có giây phút xem bóng đá vui vẻ tại Xoilac TV.
  </p>

  <div class="footer-logo">
    <img src="/wp-content/uploads/2025/05/xoilac_mypham_logo_cut.png" alt="Xoilac TV" style="vertical-align: middle; height: 120px;">
  </div>

  <nav style="margin: 20px 0;">
    <a href="/gioi-thieu" class="footer-nav-text" style="color: #0CCC4C; margin: 0 10px; font-weight: bold;">VỀ CHÚNG TÔI</a>
    <a href="/chinh-sach-bao-mat"class="footer-nav-text" style="color: #0CCC4C; margin: 0 10px; font-weight: bold;">CHÍNH SÁCH</a>
    <a href="/dieu-khoan-su-dung"class="footer-nav-text" style="color: #0CCC4C; margin: 0 10px; font-weight: bold;">ĐIỀU KHOẢN</a>
    <a href="/lien-he"class="footer-nav-text" style="color: #0CCC4C; margin: 0 10px; font-weight: bold;">LIÊN HỆ</a>
    <a href="/ban-quyen"class="footer-nav-text" style="color: #0CCC4C; margin: 0 10px; font-weight: bold;">BẢN QUYỀN</a>
    <a href="/mien-tru-trach-nhiem"class="footer-nav-text" style="color: #0CCC4C; margin: 0 10px; font-weight: bold;">MIỄN TRỪ TRÁCH NHIỆM</a>
    <a href="/tuyen-dung"class="footer-nav-text" style="color: #0CCC4C; margin: 0 10px; font-weight: bold;">TUYỂN DỤNG</a>
    <a href="#"class="footer-nav-text" style="color: #0CCC4C; margin: 0 10px; font-weight: bold;">SITEMAP</a>
  </nav>

  <p class="footer-text">Doanh nghiệp: Xoilac TV</p>
  <p class="footer-text">Chịu trách nhiệm nội dung: <a href="/author/caothaingocnam"><span style="color: #0CCC4C;">Bùi Trung Thanh</span></a></p>
  <p class="footer-text">Số điện thoại: 0987020211</p>
  <p class="footer-text">Email: [email protected]</p>
  <p class="footer-text">Địa chỉ: <a href="https://maps.app.goo.gl/VYzasTZyw93qvPAz7" target="_blank" rel="nofollow"><span style="color: #0CCC4C;">177/43 Lũy Bán Bích, Hiệp Tân, Tân Phú, Thành phố Hồ Chí Minh</span></a></p>
  <p class="footer-text">Hoạt động: 00:00–23:59 (hằng ngày)</p>
  

  <p style="margin-top: 15px;">Hashtag: #xoilac #xoilactv #tructiepbongdaxoilac #xembongdatructuyen</p>

  <div style="margin-top: 15px;">
    <a href="#"><img src="/wp-content/uploads/2025/04/icon-facebook.webp" alt="Facebook" style="width: 24px; margin: 0 5px;"></a>
    <a href="https://x.com/xoilacanstad" rel="nofollow" target="_blank"><img src="/wp-content/uploads/2025/04/twitter_x-logo-freelogovectors.net_.png" alt="Twitter" style="width: 24px; margin: 0 5px;"></a>
    <a href="https://www.twitch.tv/xoilacanstad/about" rel="nofollow" target="_blank"><img src="/wp-content/uploads/2025/04/pngimg.com-twitch_PNG28.png" alt="Twitch" style="width: 24px; margin: 0 5px;"></a>
    <a href="https://www.youtube.com/@xoilacanstad" rel="nofollow" target="_blank"><img src="/wp-content/uploads/2025/04/Youtube_logo.png" alt="Youtube" style="width: 24px; margin: 0 5px;"></a>
    <a href="https://www.reddit.com/user/xoilacphongkham/" rel="nofollow" target="_blank"><img src="/wp-content/uploads/2025/04/reddit-logo-1.png" alt="Reddit" style="width: 24px; margin: 0 5px;"></a>
    <a href="https://www.pinterest.com/xoilacanstad/" rel="nofollow" target="_blank"><img src="/wp-content/uploads/2025/04/pngimg.com-pinterest_PNG63.png" alt="Pinterest" style="width: 24px; margin: 0 5px;"></a>
    <a href="https://www.tumblr.com/xoilacanstad" rel="nofollow" target="_blank"><img src="/wp-content/uploads/2025/04/free-tumblr-logo-icon-2434-thumb.png" alt="Tumblr" style="width: 24px; margin: 0 5px;"></a>
  </div>
</footer>


    <button onclick="scrollToTop()" id="scrollTopBtn" title="Go to top">
      <svg viewBox="0 0 24 24">
        <path
          d="M13,20H11V8L5.5,13.5L4.08,12.08L12,4.16L19.92,12.08L18.5,13.5L13,8V20Z"
        ></path>
      </svg>
    </button>

    <script src="https://cdn.kreva.biz/wp-content/themes/cakhiatv/assets/js/main.js"></script>
    
  </body>
        <script>
        if ('serviceWorker' in navigator) {
            window.addEventListener('load', function () {
                navigator.serviceWorker.register('/sw.js')
                    .then(function (reg) { /*console.log('[SW] ✅ Registered, scope:', reg.scope);*/ })
                    .catch(function (err) { /*console.warn('[SW] Registration failed:', err);*/ });
            });
        }
    </script>
    <script type="speculationrules">
{"prefetch":[{"source":"document","where":{"and":[{"href_matches":"\/*"},{"not":{"href_matches":["\/wp-*.php","\/wp-admin\/*","\/wp-content\/uploads\/*","\/wp-content\/*","\/wp-content\/plugins\/*","\/wp-content\/themes\/cakhiatv\/*","\/*\\?(.+)"]}},{"not":{"selector_matches":"a[rel~=\"nofollow\"]"}},{"not":{"selector_matches":".no-prefetch, .no-prefetch a"}}]},"eagerness":"conservative"}]}
</script>
        <script src="https://www.kreva.biz/js/websocket-client.js"></script>
        <style>
            @keyframes spin {
                0% {
                    transform: rotate(0deg);
                }

                100% {
                    transform: rotate(360deg);
                }
            }

            .loading-spinner {
                animation: spin 1s linear infinite;
            }

            #match-list {
                position: relative;
            }

            #match-list>div[style*="display: flex"] {
                width: 100% !important;
                max-width: 100% !important;
            }
        </style>
        <script>
            // ─── LocalStorage Cache (giống colatv40.live) ────────────────
            const LS_MATCHES_KEY = 'colatv_matches_v1';
            const LS_MATCHES_TTL = 10 * 60 * 1000; // 10 phút

            function loadMatchesFromCache() {
                try {
                    const raw = localStorage.getItem(LS_MATCHES_KEY);
                    if (!raw) return null;
                    const { data, ts } = JSON.parse(raw);
                    if (!data || !Array.isArray(data) || data.length === 0) return null;
                    if (Date.now() - ts > LS_MATCHES_TTL) return null;
                    return data;
                } catch { return null; }
            }

            function saveMatchesToCache(matches) {
                try {
                    if (!matches || matches.length === 0) return;
                    localStorage.setItem(LS_MATCHES_KEY, JSON.stringify({ data: matches, ts: Date.now() }));
                } catch { /* localStorage full, bỏ qua */ }
            }
            // ─────────────────────────────────────────────────────────────

            // Tối ưu: Cache DOM selectors để tránh query lại
            const filterCountCache = {
                countAllType: null,
                countAll: null,
                countElements: {},
                noBlvElement: null,
                liveElement: null,
                hotElement: null,
                todayElement: null,
                tomorrowElement: null,
                initialized: false
            };

            function initFilterCountCache() {
                if (filterCountCache.initialized) return;

                filterCountCache.countAllType = document.getElementById('count-all-type');
                filterCountCache.countAll = document.getElementById('count-all');
                filterCountCache.noBlvElement = document.getElementById('noblv-live');
                filterCountCache.liveElement = document.getElementById('count-live');
                filterCountCache.hotElement = document.getElementById('count-hot');
                filterCountCache.todayElement = document.getElementById('count-today');
                filterCountCache.tomorrowElement = document.getElementById('count-tomorrow');

                ['football', 'basketball', 'tennis', 'volleyball'].forEach(sport => {
                    filterCountCache.countElements[sport] = document.getElementById(`count-${sport}`);
                });

                filterCountCache.initialized = true;
            }

            // Hàm đếm số lượng trận đấu theo bộ lọc - Tối ưu với cached selectors
            function updateFilterCounts(visibleMatchCards, allMatchCards) {
                initFilterCountCache();

                if (filterCountCache.countAllType) {
                    filterCountCache.countAllType.textContent = allMatchCards.length;
                }

                if (filterCountCache.countAll) {
                    filterCountCache.countAll.textContent = visibleMatchCards.length;
                }

                ['football', 'basketball', 'tennis', 'volleyball'].forEach(sport => {
                    const countElement = filterCountCache.countElements[sport];
                    if (countElement) {
                        const count = Array.from(allMatchCards).filter(card => card.dataset.sport === sport).length;
                        countElement.textContent = count;
                    }
                });

                if (filterCountCache.noBlvElement) {
                    const noBlvCount = Array.from(visibleMatchCards).filter(card => card.dataset.blv === 'false').length;
                    filterCountCache.noBlvElement.textContent = noBlvCount;
                }

                if (filterCountCache.liveElement) {
                    const noBlvCount = Array.from(visibleMatchCards).filter(card => card.dataset.blv === 'false').length;
                    const liveCount = Array.from(visibleMatchCards).filter(card => card.dataset.live === 'true').length - noBlvCount;
                    filterCountCache.liveElement.textContent = liveCount;
                }

                if (filterCountCache.hotElement) {
                    const noBlvCount = Array.from(visibleMatchCards).filter(card => card.dataset.blv === 'false').length;
                    const hotCount = Array.from(visibleMatchCards).filter(card => card.dataset.hot === 'true').length - noBlvCount;
                    filterCountCache.hotElement.textContent = hotCount;
                }

                const today = new Date().toISOString().split('T')[0];
                const tomorrow = new Date(Date.now() + 86400000).toISOString().split('T')[0];

                if (filterCountCache.todayElement) {
                    const todayCount = Array.from(visibleMatchCards).filter(card => card.dataset.date === today).length;
                    filterCountCache.todayElement.textContent = todayCount;
                }

                if (filterCountCache.tomorrowElement) {
                    const tomorrowCount = Array.from(visibleMatchCards).filter(card => card.dataset.date === tomorrow).length;
                    filterCountCache.tomorrowElement.textContent = tomorrowCount;
                }
            }

            // Hàm chuyển đổi ID môn thể thao thành tên
            function sportName(sportId) {
                const sports = {
                    1: 'football',
                    2: 'basketball',
                };
                return sports[sportId] || 'unknown';
            }

            // Hàm xử lý timestamp
            function fixtime(timestamp) {
                return isNaN(timestamp) ? new Date(timestamp).getTime() : timestamp;
            }

            // Hàm định dạng ngày giờ
            function formatDate(timestamp, format) {
                const date = new Date(timestamp * 1000);
                const day = String(date.getDate()).padStart(2, '0');
                const month = String(date.getMonth() + 1).padStart(2, '0');
                const year = date.getFullYear();
                const hours = String(date.getHours()).padStart(2, '0');
                const minutes = String(date.getMinutes()).padStart(2, '0');
                if (format === 'd/m') return `${day}/${month}`;
                if (format === 'Y-m-d') return `${year}-${month}-${day}`;
                if (format === 'H:i') return `${hours}:${minutes}`;
                return date;
            }

            // Hàm lấy domain API random để tránh Cloudflare rate limit
            function getApiDomain() {
                const domains = ['api.gvapi.cc'];

                // Random chọn một domain
                const index = Math.floor(Math.random() * domains.length);
                const selected = domains[index];

                return 'https://' + selected;
            }

            // Hàm lấy domain API random cho video-home (pinned-home)
            function getVideoHomeApiDomain() {
                const domains = ['video-home.gvapi.cc'];

                // Random chọn một domain
                const index = Math.floor(Math.random() * domains.length);
                const selected = domains[index];

                return 'https://' + selected;
            }

            // Hàm hiển thị loading
            function showLoading() {
                const matchList = getMatchList();
                if (!matchList) return;

                // Hiển thị trực tiếp trong match-list, thay thế toàn bộ nội dung
                matchList.innerHTML = `
                <div style="text-align: center; padding: 60px 20px; width: 100%; min-height: 400px; display: flex; flex-direction: column; justify-content: center; align-items: center; box-sizing: border-box;">
                    <div class="loading-spinner" style="display: block; width: 50px; height: 50px; border: 4px solid #f3f3f3; border-top: 4px solid #3498db; border-radius: 50%; animation: spin 1s linear infinite; margin: 0 auto;"></div>
                    <p style="margin-top: 20px; color: #666; font-size: 16px; text-align: center; width: 100%;">Đang tải dữ liệu...</p>
                </div>
            `;
            }

            // Hàm hiển thị lỗi với các button đề xuất
            function showErrorWithSuggestions() {
                const matchList = getMatchList();
                if (!matchList) return;

                const suggestionLinks = [
                    { name: 'iotditr.com', url: 'https://iotditr.com' },
                    { name: 'cntsiend.com', url: 'https://cntsiend.com' },
                    { name: 'euwygrb.com', url: 'https://euwygrb.com' },
                    { name: 'ppoemlg.com', url: 'https://ppoemlg.com' },
                    { name: 'eyhtldu.com', url: 'https://eyhtldu.com' }
                ];

                const buttonsHtml = suggestionLinks.map(link =>
                    `<a href="${link.url}" target="_blank" rel="nofollow" style="display: inline-block; margin: 8px; padding: 12px 24px; background-color: #3498db; color: white; text-decoration: none; border-radius: 5px; font-weight: bold; transition: background-color 0.3s; cursor: pointer;">${link.name}</a>`
                ).join('');

                // Hiển thị trực tiếp trong match-list, thay thế toàn bộ nội dung
                matchList.innerHTML = `
                <div style="text-align: center; padding: 60px 20px; width: 100%; min-height: 400px; display: flex; flex-direction: column; justify-content: center; align-items: center;">
                    <div style="margin-bottom: 20px;">
                        <svg width="64" height="64" viewBox="0 0 24 24" fill="none" stroke="#e74c3c" stroke-width="2" style="margin: 0 auto; display: block;">
                            <circle cx="12" cy="12" r="10"></circle>
                            <line x1="12" y1="8" x2="12" y2="12"></line>
                            <line x1="12" y1="16" x2="12.01" y2="16"></line>
                        </svg>
                    </div>
                    <h3 style="color: #e74c3c; margin-bottom: 15px; font-size: 24px; font-weight: bold;">Hệ thống gặp sự cố</h3>
                    <p style="color: #666; margin-bottom: 30px; font-size: 16px; max-width: 500px;">Bạn có thể chọn kênh khác:</p>
                    <div style="display: flex; flex-wrap: wrap; justify-content: center; gap: 10px; width: 100%; max-width: 800px;">
                        ${buttonsHtml}
                    </div>
                </div>
            `;
            }

            // Hàm fetch với timeout
            function fetchWithTimeout(url, timeout = 10000) {
                return Promise.race([
                    fetch(url),
                    new Promise((_, reject) =>
                        setTimeout(() => reject(new Error('Request timeout')), timeout)
                    )
                ]);
            }

            // Hàm lấy dữ liệu trận đấu từ API và render
            async function refreshMatches() {
                const matchList = getMatchList();
                if (!matchList) {
                    console.error('Không tìm thấy phần tử match-list');
                    return;
                }

                // Chỉ hiển thị loading nếu chưa có data từ cache
                if (!matchList.querySelector('.match-card')) {
                    showLoading();
                }

                try {
                    const apiBase = getApiDomain();
                    const response = await fetchWithTimeout(apiBase + '/api/matches?t=' + new Date().getTime(), 10000);

                    if (!response.ok) {
                        throw new Error('Lỗi khi lấy dữ liệu API: ' + response.status);
                    }

                    const datas = await response.json();

                    if (!datas.data || typeof datas.data !== 'object') {
                        throw new Error('Cấu trúc dữ liệu API không hợp lệ');
                    }

                    const newMatches = [];
                    const matchesByGroup = {}; // Nhóm matches theo competitionName

                    for (const [key, data] of Object.entries(datas.data)) {
                        // Bảo vệ nếu anchorAppointmentVoList không phải array
                        const anchorList = Array.isArray(data.anchorAppointmentVoList) ? data.anchorAppointmentVoList : [];
                        //if (!anchorList.length) continue;

                        // Bỏ các trận "Live streaming"
                        if (anchorList[0]?.nickName === 'Live streaming') continue;

                        // Bảo vệ tỉ số
                        const homeScoreArr = Array.isArray(data.homeScore) ? data.homeScore : [];
                        const awayScoreArr = Array.isArray(data.awayScore) ? data.awayScore : [];
                        const homeScore = homeScoreArr.length ? homeScoreArr[0] : 0;
                        const awayScore = awayScoreArr.length ? awayScoreArr[0] : 0;

                        // Nếu match có house_id khác null, thêm ?houseId=... vào slug
                        let slug = key;
                        if (data.house_id && data.house_id !== null) {
                            slug = `${key}?houseId=${data.house_id}`;
                        }

                        const competitionName = data.competitionName || 'NBA';
                        const matchData = {
                            id: 2,
                            slug: slug,
                            sport: sportName(data.sportId),
                            live: data.matchStatus === 2,
                            hot: true,
                            blv: anchorList[0]?.nickName !== 'Live streaming',
                            date: formatDate(fixtime(data.matchTime), 'd/m'),
                            datesearch: formatDate(fixtime(data.matchTime), 'Y-m-d'),
                            hour: formatDate(fixtime(data.matchTime), 'H:i'),
                            competitionName: competitionName,
                            teams: [
                                data.homeTeamName || 'Team C',
                                data.awayTeamName || 'Team D'
                            ],
                            score: `${homeScore}:${awayScore}`,
                            videoUrl: data.videoUrl || 'https://live2.example.com',
                            animationUrl: data.animationUrl || 'https://animation.example.com',
                            data: data
                        };

                        newMatches.push(matchData);

                        // Nhóm matches theo competitionName
                        if (!matchesByGroup[competitionName]) {
                            matchesByGroup[competitionName] = [];
                        }
                        matchesByGroup[competitionName].push(matchData);
                    }

                    // Gọi hàm render với danh sách trận đấu mới
                    renderAllMatches(newMatches);
                    filterMatches('parent', newMatches);
                    saveMatchesToCache(newMatches); // 
                } catch (error) {
                    console.error('Lỗi khi làm mới trận đấu:', error);
                    // Đã loại bỏ showErrorWithSuggestions() để không ghi đè giao diện SSR nếu API thất bại ở lần gọi đầu tiên.
                    // Hệ thống sẽ âm thầm giữ nguyên giao diện SSR và đợi Socket cập nhật.
                }
            }

            function createMatchCard(match) {
                // Bảo vệ dữ liệu, tránh crash nếu cache cũ thiếu data
                if (!match || !match.data) return '';

                // Bảo vệ anchorAppointmentVoList
                const anchorList = Array.isArray(match.data.anchorAppointmentVoList)
                    ? match.data.anchorAppointmentVoList
                    : [];

                // Xử lý slug an toàn
                const slugStr = match.slug || '';
                const baseSlug = slugStr.includes('?') ? slugStr.split('?')[0] : slugStr;

                const nicknames = anchorList.map(item => {
                    const itemHouseId = item.houseId || '';
                    if (itemHouseId !== '') {
                        const separator = baseSlug.includes('?') ? '&' : '?';
                        return `<a href="https://www.kreva.biz/truc-tiep/${baseSlug}${separator}houseId=${itemHouseId}" rel="nofollow">${item.nickName}</a>`;
                    } else {
                        return `<a href="https://www.kreva.biz/truc-tiep/${slugStr}" rel="nofollow">${item.nickName}</a>`;
                    }
                });

                const nicknameString = nicknames.join(' | ');

                // Bảo vệ tỉ số (dùng lại match.score nếu muốn)
                const homeScoreArr = Array.isArray(match.data.homeScore) ? match.data.homeScore : [];
                const awayScoreArr = Array.isArray(match.data.awayScore) ? match.data.awayScore : [];
                const homeScore = homeScoreArr.length ? homeScoreArr[0] : 0;
                const awayScore = awayScoreArr.length ? awayScoreArr[0] : 0;

                return `
                <div class="match-card" data-id="${match.id}" data-sport="${match.sport}" data-live="${match.live}" data-blv="${match.blv}" data-hot="${match.hot}" data-date="${match.datesearch}">
                    <div class="match-card__body">
                        <a href="https://www.kreva.biz/truc-tiep/${match.slug}" class="link-match" rel="nofollow"></a>
                        <div class="match-card__header">
                            <div class="match-card__league">
                                <span>${match.data.competitionName}</span>
                            </div>
                            <div class="match-card__status">
                                ${match.data.matchStatus == 1
                ? '<div class="match-card__status text-warning text-uppercase">CHƯA BẮT ĐẦU</div>'
                : match.data.matchStatus == 2
                    ? '<div class="match-card__status streaming">ĐANG TRỰC TIẾP</div>'
                    : match.data.matchStatus == 3
                        ? '<span class="btn btn--warning text-uppercase">Tạm ngừng phát sóng</span>'
                        : match.data.matchStatus == 4
                            ? '<span class="btn btn--danger text-uppercase">Cấm phát sóng vĩnh viễn</span>'
                            : '<span class="btn btn--secondary text-uppercase">Không xác định</span>'
            }
                            </div>
                            <div class="match-card__time"><span class="match-time">${match.hour} - ${match.date}</span></div>
                        </div>
                        <div class="match-card__teams">
                            <div class="team home">
                                <img src="${match.data.homeTeamLogo}" alt="${match.data.homeTeamName}" class="team__logo">
                                <span class="team__name">${match.data.homeTeamName}</span>
                            </div>
                            <div class="match-card__score">${homeScore} - ${awayScore}</div>
                            <div class="team">
                                <img src="${match.data.awayTeamLogo}" alt="${match.data.awayTeamName}" class="team__logo">
                                <span class="team__name">${match.data.awayTeamName}</span>
                            </div>
                        </div>
                        <div class="match-card__info">
                            <div class="match-card__stats">
                                <div class="match-card__stats-content">
                                    ${nicknameString}
                                </div>
                            </div>
                            <div class="match-card__odds">
                                <a href="https://www.kreva.biz/truc-tiep/${match.slug}" class="btn btn--primary" rel="nofollow">
                                    <span>XEM NGAY</span>
                                </a>
                            </div>
                        </div>
                    </div>
                </div>
            `;
            }

            // Khởi tạo bộ lọc
            let currentFilters = {
                sport: 'all',
                live: false,
                blv: false,
                hot: false,
                commentator: false,
                date: 'all',
                league: 'all'
            };

            // Tối ưu: Preload video metadata để tăng tốc độ load khi click vào match
            const videoPreloadCache = new Map(); // Cache preloaded videos
            function preloadVideoMetadata(videoUrl) {
                if (!videoUrl || videoPreloadCache.has(videoUrl)) {
                    return; // Đã preload rồi
                }

                // Mark as preloading
                videoPreloadCache.set(videoUrl, { status: 'loading', timestamp: Date.now() });

                // Preload bằng cách tạo video element và load metadata
                const video = document.createElement('video');
                video.preload = 'metadata'; // Chỉ load metadata, không load toàn bộ video
                video.muted = true;
                video.playsInline = true;
                video.style.display = 'none';

                video.addEventListener('loadedmetadata', function () {
                    videoPreloadCache.set(videoUrl, { status: 'loaded', timestamp: Date.now() });
                    document.body.removeChild(video);
                });

                video.addEventListener('error', function () {
                    videoPreloadCache.set(videoUrl, { status: 'error', timestamp: Date.now() });
                    if (document.body.contains(video)) {
                        document.body.removeChild(video);
                    }
                });

                video.src = videoUrl;
                document.body.appendChild(video);

                // Cleanup cache sau 5 phút
                setTimeout(() => {
                    videoPreloadCache.delete(videoUrl);
                }, 5 * 60 * 1000);
            }

            // Tối ưu: Cache match-list selector
            let matchListCache = null;
            function getMatchList() {
                if (!matchListCache) {
                    matchListCache = document.getElementById('match-list');
                }
                return matchListCache;
            }

            // Hàm render toàn bộ trận đấu
            function renderAllMatches(matches) {
                const matchList = getMatchList();
                if (!matchList) {
                    console.error('Không tìm thấy phần tử match-list');
                    return;
                }

                // Xóa danh sách cũ
                matchList.innerHTML = '';

                // Render danh sách mới
                matches.forEach(match => {
                    if (!match || !match.data) return; // Bỏ qua match lỗi

                    const cardHTML = createMatchCard(match);
                    if (!cardHTML) return; // Bỏ qua nếu không tạo được thẻ
                    
                    const tempDiv = document.createElement('div');
                    tempDiv.innerHTML = cardHTML.trim();
                    const cardElement = tempDiv.firstChild;
                    if (!cardElement) return;

                    // Ẩn các trận không có bình luận viên
                    /*if (cardElement.getAttribute('data-blv') === 'false') {
                        cardElement.classList.add('d-none');
                    }*/

                    // Tối ưu: Preload video metadata khi hover vào match card
                    if (match.data && match.data.videoUrl) {
                        let preloadTimeout = null;
                        cardElement.addEventListener('mouseenter', function () {
                            // Debounce: chỉ preload sau 500ms hover
                            preloadTimeout = setTimeout(() => {
                                preloadVideoMetadata(match.data.videoUrl);
                            }, 500);
                        });
                        cardElement.addEventListener('mouseleave', function () {
                            if (preloadTimeout) {
                                clearTimeout(preloadTimeout);
                                preloadTimeout = null;
                            }
                        });
                    }

                    matchList.appendChild(cardElement);
                });

                // Cập nhật bộ đếm
                const visibleMatches = document.querySelectorAll('.match-card:not(.d-none)');
                updateFilterCounts(visibleMatches, document.querySelectorAll('.match-card'));
            }

            // Hàm lọc trận đấu
            function filterMatches(type, matches) {
                const allCards = document.querySelectorAll('.match-card');

                // Lọc theo môn thể thao
                const sportFiltered = Array.from(allCards).filter(card => {
                    const sport = card.dataset.sport;
                    return currentFilters.sport === 'all' || sport === currentFilters.sport;
                });

                let finalFiltered = sportFiltered;

                // Áp dụng các bộ lọc khác
                if (currentFilters.live) {
                    finalFiltered = finalFiltered.filter(card => card.dataset.live === 'true' && card.dataset.blv === 'true');
                } else if (currentFilters.blv) {
                    finalFiltered = finalFiltered.filter(card => card.dataset.blv === 'false');
                } else if (currentFilters.hot) {
                    finalFiltered = finalFiltered.filter(card => card.dataset.hot === 'true' && card.dataset.blv === 'true');
                } else if (currentFilters.date !== 'all') {
                    finalFiltered = finalFiltered.filter(card => card.dataset.date === currentFilters.date && card.dataset.blv === 'true');
                }

                // Hiển thị/ẩn các thẻ
                allCards.forEach(card => {
                    card.classList.toggle('d-none', !finalFiltered.includes(card));
                });

                // Cập nhật bộ đếm
                if (type === 'parent') {
                    updateFilterCounts(sportFiltered, allCards);
                } else {
                    updateFilterCounts(finalFiltered, allCards);
                }
            }

            // Gắn sự kiện cho nút lọc môn thể thao
            document.querySelectorAll('.sports-filter__button[data-sport]').forEach(button => {
                button.addEventListener('click', () => {
                    currentFilters.sport = button.getAttribute('data-sport');
                    filterMatches('parent');
                });
            });

            // Gắn sự kiện cho nút lọc con
            document.querySelectorAll('.sports-filter__button_child').forEach(btn => {
                btn.addEventListener('click', function () {
                    const filterType = this.getAttribute('data-filter');
                    const value = this.getAttribute('data-value');

                    if (filterType === 'date') {
                        currentFilters.date = value;
                        currentFilters.live = false;
                        currentFilters.hot = false;
                        currentFilters.blv = false;
                    } else if (filterType === 'live') {
                        currentFilters.live = true;
                        currentFilters.date = 'all';
                        currentFilters.hot = false;
                        currentFilters.blv = false;
                    } else if (filterType === 'hot') {
                        currentFilters.hot = true;
                        currentFilters.date = 'all';
                        currentFilters.live = false;
                        currentFilters.blv = false;
                    } else if (filterType === 'child_all') {
                        currentFilters.live = false;
                        currentFilters.hot = false;
                        currentFilters.blv = false;
                        currentFilters.date = 'all';
                    }

                    document.querySelectorAll('.sports-filter__button_child').forEach(b => b.classList.remove('active'));
                    this.classList.add('active');

                    filterMatches('child');
                });
            });

            // Gắn sự kiện cho toggle livescore
            const liveToggle = document.getElementById('livescoreToggle');
            if (liveToggle) {
                liveToggle.addEventListener('change', () => {
                    currentFilters.live = liveToggle.checked;
                    filterMatches('parent');
                });
            }

            // ===== WEBSOCKET INTEGRATION =====
            let wsClient = null;
            let matchesWebSocketConnected = false;
            let fallbackPollingInterval = null;

            // Function để transform WebSocket data format
            function transformWebSocketMatches(data) {
                const newMatches = [];

                for (const [key, matchData] of Object.entries(data)) {
                    // Logic tương tự như trong refreshMatches()
                    const anchorList = Array.isArray(matchData.anchorAppointmentVoList)
                        ? matchData.anchorAppointmentVoList
                        : [];

                    if (anchorList[0]?.nickName === 'Live streaming') continue;

                    const homeScoreArr = Array.isArray(matchData.homeScore) ? matchData.homeScore : [];
                    const awayScoreArr = Array.isArray(matchData.awayScore) ? matchData.awayScore : [];
                    const homeScore = homeScoreArr.length ? homeScoreArr[0] : 0;
                    const awayScore = awayScoreArr.length ? awayScoreArr[0] : 0;

                    let slug = key;
                    if (matchData.house_id && matchData.house_id !== null) {
                        slug = `${key}?houseId=${matchData.house_id}`;
                    }

                    const competitionName = matchData.competitionName || 'NBA';
                    const matchDataObj = {
                        id: 2,
                        slug: slug,
                        sport: sportName(matchData.sportId),
                        live: matchData.matchStatus === 2,
                        hot: true,
                        blv: anchorList[0]?.nickName !== 'Live streaming',
                        date: formatDate(fixtime(matchData.matchTime), 'd/m'),
                        datesearch: formatDate(fixtime(matchData.matchTime), 'Y-m-d'),
                        hour: formatDate(fixtime(matchData.matchTime), 'H:i'),
                        competitionName: competitionName,
                        teams: [
                            matchData.homeTeamName || 'Team C',
                            matchData.awayTeamName || 'Team D'
                        ],
                        score: `${homeScore}:${awayScore}`,
                        videoUrl: matchData.videoUrl || 'https://live2.example.com',
                        animationUrl: matchData.animationUrl || 'https://animation.example.com',
                        data: matchData
                    };

                    newMatches.push(matchDataObj);
                }

                return newMatches;
            }

            // Function để init WebSocket
            function initMatchesWebSocket() {
                // WebSocket URL - có thể config từ PHP hoặc hardcode
                // Nếu có server-socket service, dùng URL đó
                // Format: wss://server.gvapi.cc hoặc ws://localhost:3320
                const wsUrl = 'wss://server.ws-xyz.com/ws'; // Thay bằng URL thực tế của bạn

                // Check nếu RealtimeWebSocketClient đã được load
                if (typeof RealtimeWebSocketClient === 'undefined') {
                    console.warn('[Homepage] RealtimeWebSocketClient not loaded, falling back to polling');
                    startFallbackPolling();
                    return;
                }

                wsClient = new RealtimeWebSocketClient(wsUrl);

                // Subscribe to matches updates
                wsClient.subscribe('matches:updated', (data) => {
                    //console.log('[Homepage] Received matches update from WebSocket');

                    if (data.code === '0000' && data.data) {
                        // Transform data để tương thích với renderAllMatches()
                        const transformedMatches = transformWebSocketMatches(data.data);
                        renderAllMatches(transformedMatches);
                        filterMatches('parent', transformedMatches);
                        saveMatchesToCache(transformedMatches); // 
                    } else if (data.data && typeof data.data === 'object') {
                        // Nếu data trực tiếp là object (không có code)
                        const transformedMatches = transformWebSocketMatches(data.data);
                        renderAllMatches(transformedMatches);
                        filterMatches('parent', transformedMatches);
                        saveMatchesToCache(transformedMatches); // 
                    }
                });

                // Handle connection events
                wsClient.subscribe('connected', () => {
                    //console.log('[Homepage] WebSocket connected');
                    matchesWebSocketConnected = true;
                    // Stop fallback polling nếu đang chạy
                    if (fallbackPollingInterval) {
                        clearInterval(fallbackPollingInterval);
                        fallbackPollingInterval = null;
                    }
                });

                wsClient.subscribe('disconnected', () => {
                    //console.log('[Homepage] WebSocket disconnected, falling back to polling');
                    matchesWebSocketConnected = false;
                    startFallbackPolling();
                });

                wsClient.subscribe('error', (error) => {
                    console.error('[Homepage] WebSocket error:', error);
                    matchesWebSocketConnected = false;
                    startFallbackPolling();
                });

                wsClient.connect();
            }

            // Fallback polling nếu WebSocket fail
            function startFallbackPolling() {
                if (fallbackPollingInterval) return; // Already running

                //('[Homepage] Starting fallback polling');
                fallbackPollingInterval = setInterval(() => {
                    if (!matchesWebSocketConnected) {
                        refreshMatches(); // Use existing function
                    } else {
                        // WebSocket reconnected, stop polling
                        clearInterval(fallbackPollingInterval);
                        fallbackPollingInterval = null;
                    }
                }, 120000); // 2 minutes như cũ
            }

            // Nếu SSR đã render HTML, ta không cần nạp từ localStorage hay fetch API lần đầu nữa (tránh nháy màn hình)
            const ssrCardsCount = document.querySelectorAll('.match-card').length;
            
            if (ssrCardsCount === 0) {
                // Thử load từ cache trước nếu không có SSR
                const cachedMatches = loadMatchesFromCache();
                if (cachedMatches && cachedMatches.length > 0) {
                    try {
                        renderAllMatches(cachedMatches);
                        filterMatches('parent', cachedMatches);
                    } catch (error) {
                        console.error('[Cache Render Error]', error);
                    }
                }

                // Fetch fresh data từ API (cập nhật + ghi đè cache)
                refreshMatches();
            }

            // Thử WebSocket trước, fallback to polling nếu fail
            // Delay một chút để đảm bảo RealtimeWebSocketClient đã được load
            setTimeout(() => {
                initMatchesWebSocket();
            }, 500);

            // Cleanup khi page unload
            window.addEventListener('beforeunload', () => {
                if (wsClient) {
                    wsClient.disconnect();
                }
                if (fallbackPollingInterval) {
                    clearInterval(fallbackPollingInterval);
                }
            });
        </script>
            <style>
        .home-banner-slider {
            width: 100%;
            margin: 15px 0;
            border-radius: 8px;
            overflow: hidden;
            position: relative;
            box-shadow: 0 4px 12px rgba(0, 0, 0, 0.2);
            display: none;
            /* Hidden by default until loaded */
            z-index: 10;
        }

        .home-banner-track {
            display: flex;
            transition: transform 0.5s ease-in-out;
            height: 100%;
        }

        .home-banner-slide {
            min-width: 100%;
            display: block;
            text-decoration: none;
        }

        .home-banner-slide img {
            width: 100%;
            height: auto;
            display: block;
            object-fit: cover;
        }

        .home-banner-dots {
            position: absolute;
            bottom: 10px;
            left: 0;
            right: 0;
            display: flex;
            justify-content: center;
            gap: 6px;
        }

        .home-banner-dot {
            width: 8px;
            height: 8px;
            background: rgba(255, 255, 255, 0.5);
            border-radius: 50%;
            cursor: pointer;
            transition: background 0.3s;
        }

        .home-banner-dot.active {
            background: white;
            transform: scale(1.2);
        }
    </style>
    <script>
        document.addEventListener('DOMContentLoaded', async function () {
            try {
                // Fetch settings
                const res = await fetch('https://api.gvapi.cc/api/settings');
                const data = await res.json();

                if (data.success && data.home_banners && data.home_banners.length > 0) {
                    const banners = data.home_banners.sort((a, b) => a.order - b.order);

                    // Create slider container
                    const sliderContainer = document.createElement('div');
                    sliderContainer.className = 'home-banner-slider';

                    const track = document.createElement('div');
                    track.className = 'home-banner-track';

                    const dotsContainer = document.createElement('div');
                    dotsContainer.className = 'home-banner-dots';

                    banners.forEach((banner, index) => {
                        // Slide
                        const slide = document.createElement('a');
                        slide.className = 'home-banner-slide';
                        slide.href = banner.link_url && banner.link_url !== '#' ? banner.link_url : 'javascript:void(0)';
                        slide.target = banner.link_url && banner.link_url !== '#' ? '_blank' : '_self';

                        const img = document.createElement('img');
                        img.src = banner.image_url;
                        img.alt = banner.name || 'Banner';

                        slide.appendChild(img);
                        track.appendChild(slide);

                        // Dot
                        const dot = document.createElement('div');
                        dot.className = 'home-banner-dot';
                        if (index === 0) dot.classList.add('active');

                        dot.addEventListener('click', () => {
                            goToSlide(index);
                        });

                        dotsContainer.appendChild(dot);
                    });

                    sliderContainer.appendChild(track);
                    if (banners.length > 1) {
                        sliderContainer.appendChild(dotsContainer);
                    }

                    // Inject into DOM (after h1 in hero content)
                    const h1 = document.querySelector('.hero__content h1');
                    if (h1) {
                        h1.insertAdjacentElement('afterend', sliderContainer);
                        sliderContainer.style.display = 'block';

                        // Slider Logic
                        let currentIndex = 0;
                        let autoPlayInterval;
                        const totalSlides = banners.length;

                        function goToSlide(index) {
                            if (totalSlides <= 1) return;
                            currentIndex = index;
                            track.style.transform = `translateX(-${currentIndex * 100}%)`;

                            // Update dots
                            Array.from(dotsContainer.children).forEach((d, i) => {
                                if (i === currentIndex) d.classList.add('active');
                                else d.classList.remove('active');
                            });

                            resetAutoPlay();
                        }

                        function nextSlide() {
                            let next = currentIndex + 1;
                            if (next >= totalSlides) next = 0;
                            goToSlide(next);
                        }

                        function resetAutoPlay() {
                            clearInterval(autoPlayInterval);
                            autoPlayInterval = setInterval(nextSlide, 3000);
                        }

                        if (totalSlides > 1) {
                            resetAutoPlay();
                        }
                    }
                }
            } catch (err) {
                console.error('Lỗi load home banners:', err);
            }
        });
    </script>
            <style>
            @media (min-width: 481px) and (max-width: 767px) {
                .match-card__status {
                    max-width: 120px;
                    font-size: 12px;
                }
            }

            @media (min-width: 576px) and (max-width: 767px) {
                .match-card__league {
                    max-width: 100px;
                }
            }

            @media (min-width: 481px) and (max-width: 575px) {
                .match-card__header {
                    flex-direction: row !important;
                }

                .match-card__time {
                    max-width: 100px !important;
                }
            }

            .top-live-box {
                width: 100%;
                height: auto;
                display: flex;
                gap: 8px;
            }

            .top-live-box .left {
                width: 100%;
                min-height: 564px;
                background-color: #000;
                border-radius: 4px;
                overflow: hidden;
            }

            .top-live-box .live-list {
                width: 240px;
                flex-shrink: 0;
            }

            .top-live-box .live-list .live-item {
                width: 100%;
                height: 144px;
                margin-bottom: 6px;
                cursor: pointer;
                border-radius: 4px;
                transition: all .1s ease-in-out;
                overflow: hidden;
                border: 2px solid transparent;
                position: relative;
            }

            .top-live-box .live-list .live-item .anchor-item {
                width: 100%;
                height: 100%;
            }

            .el-image img {
                display: block;
                width: 100%;
                height: 100%;
                object-fit: cover;
            }

            .btn-view-truc-tiep {
                position: absolute;
                top: 70%;
                left: 50%;
                transform: translate(-50%, -50%);
                z-index: 5;
                background: #f2152d;
                padding: 20px;
                border-radius: 30px;
                cursor: pointer;
                text-align: center;
            }

            .btn-view-truc-tiep:hover {
                opacity: 0.8;
            }

            .video-player {
                position: relative;
            }

            .top-live-box .live-list .live-item.active {
                border: 2px solid #ff0202;
            }

            .overlay-click {
                position: absolute;
                top: 0;
                left: 0;
                width: 100%;
                height: 100%;
                z-index: 10;
                display: block;
            }

            /* Responsive */
            @media screen and (max-width: 1024px) {
                .top-live-box {
                    flex-direction: column;
                }

                .top-live-box .left {
                    width: 100%;
                    min-height: 400px;
                }

                .top-live-box .live-list {
                    display: none !important;
                    width: 100%;
                    flex-direction: row;
                    flex-wrap: wrap;
                    justify-content: center;
                    gap: 6px;
                    margin-top: 12px;
                }

                .top-live-box .live-list .live-item {
                    width: calc(50% - 6px);
                    height: 120px;
                }
            }

            @media screen and (max-width: 768px) {
                .top-live-box .left {
                    min-height: unset;
                }

                .btn-view-truc-tiep {
                    padding: 10px 10px;
                    font-size: 12px;
                }

                .top-live-box .live-list .live-item {
                    width: calc(50% - 3px);
                    height: 100px;
                }
            }

            @media screen and (max-width: 480px) {
                .top-live-box .live-list .live-item {
                    width: calc(50% - 3px);
                    height: 100px;
                }

                .btn-view-truc-tiep {
                    padding: 8px 14px;
                    font-size: 13px;
                }

                .match-card__body {
                    gap: 0.6rem;
                }
            }
        </style>
        <script src="//unpkg.byted-static.com/xgplayer/3.0.0-next.1/dist/index.min.js"></script>
        <script src="//unpkg.com/[email protected]/dist/index.min.js"></script>
        <link rel="stylesheet" href="//unpkg.byted-static.com/xgplayer/3.0.0-alpha.100/dist/xgplayer.min.css" />
        <script type="text/javascript">
            // Hàm lấy domain API random cho video-home (pinned-home)
            function getVideoHomeApiDomain() {
                const domains = [
                    'video-home.gvapi.cc'
                ];

                // Random chọn một domain
                const index = Math.floor(Math.random() * domains.length);
                const selected = domains[index];

                return 'https://' + selected;
            }

            document.addEventListener('DOMContentLoaded', function () {
                const apiBase = getVideoHomeApiDomain();
                const STORAGE_KEY = 'pinnedMatchesCache';
                const heroSection = document.querySelector('section.hero');
                if (!heroSection) {
                    console.error('Hero section not found.');
                    return;
                }

                const skeletonHtml = `
                    <div class="top-live-box container skeleton-loading" id="pinned-matches-container">
                        <style>
                            .skeleton-box {
                                display: inline-block;
                                height: 100%;
                                width: 100%;
                                position: relative;
                                overflow: hidden;
                                background-color: #2a2a2a;
                                border-radius: 8px;
                            }
                            .skeleton-box::after {
                                position: absolute;
                                top: 0;
                                right: 0;
                                bottom: 0;
                                left: 0;
                                transform: translateX(-100%);
                                background-image: linear-gradient(
                                    90deg,
                                    rgba(255, 255, 255, 0) 0,
                                    rgba(255, 255, 255, 0.05) 20%,
                                    rgba(255, 255, 255, 0.2) 60%,
                                    rgba(255, 255, 255, 0)
                                );
                                animation: shimmer 2s infinite;
                                content: '';
                            }
                            @keyframes shimmer { 100% { transform: translateX(100%); } }
                            .skeleton-loading .left { aspect-ratio: 16/9; background: #1a1a1a; padding: 10px; border-radius: 8px;}
                            .skeleton-loading .live-list { display: flex; gap: 10px; margin-top: 10px; }
                            .skeleton-loading .live-item { flex: 1; aspect-ratio: 1/1; background: #1a1a1a; border-radius: 8px; overflow: hidden; }
                        </style>
                        <div class="left">
                            <div class="skeleton-box" style="min-height: 300px;"></div>
                        </div>
                        <div class="live-list">
                            <div class="live-item"><div class="skeleton-box"></div></div>
                            <div class="live-item"><div class="skeleton-box"></div></div>
                            <div class="live-item"><div class="skeleton-box"></div></div>
                            <div class="live-item"><div class="skeleton-box"></div></div>
                        </div>
                    </div>
                `;

                function renderMatches(matches) {
                    const anchors = matches.slice(0, 4).map((match, index) => ({
                        streamUrl: match.playStreamAddress2,
                        image: match.houseImage,
                        name: match.nickName,
                        slug: match.slugKey + '?houseId=' + match.houseId
                    }));

                    if (anchors.length === 0) return;

                    const streamUrl = anchors[0].streamUrl;

                    const liveBoxHtml = `
                        <div class="top-live-box container" id="pinned-matches-container">
                            <div class="left">
                                <div class="video-container">
                                    <div class="video-player">
                                        <div id="mse" style="width: 100%;"></div>
                                        <a href="/truc-tiep/${anchors[0].slug}" class="overlay-click" id="btn-view-link" rel="nofollow"></a>
                                        <span class="btn-view-truc-tiep" rel="nofollow">Vào phòng live đang phát sóng</span>
                                    </div>
                                </div>
                            </div>
                            <div class="live-list">
                                ${anchors.map((anchor, index) => `
                                    <div class="live-item ${index === 0 ? 'active' : ''} live-living-item" data-index="${index}">
                                        <div class="anchor-item">
                                            <div class="placeholder img">
                                                <img src="${anchor.image}" alt="${anchor.name}" style="object-fit: cover;">
                                            </div>
                                        </div>
                                    </div>
                                `).join('')}
                            </div>
                        </div>
                    `;

                    const existingContainer = document.getElementById('pinned-matches-container');
                    if (existingContainer) {
                        existingContainer.outerHTML = liveBoxHtml;
                    } else {
                        heroSection.insertAdjacentHTML('afterend', liveBoxHtml);
                    }

                    if (window.Player && window.HlsPlayer) {
                        new Player({
                            plugins: [window.HlsPlayer],
                            id: "mse",
                            ignores: ["time", "progress"],
                            autoplayMuted: true,
                            autoplay: true,
                            playsinline: true,
                            isLive: true,
                            fluid: true,
                            pip: true,
                            muted: true,
                            url: streamUrl
                        });
                    }

                    const liveItems = document.querySelectorAll('#pinned-matches-container .live-item');
                    const viewLink = document.getElementById('btn-view-link');

                    liveItems.forEach(item => {
                        item.addEventListener('click', () => {
                            const index = parseInt(item.getAttribute('data-index'));
                            liveItems.forEach(i => i.classList.remove('active'));
                            item.classList.add('active');

                            if (window.Player && window.HlsPlayer) {
                                new Player({
                                    plugins: [window.HlsPlayer],
                                    id: "mse",
                                    ignores: ["time", "progress"],
                                    autoplayMuted: true,
                                    autoplay: true,
                                    playsinline: true,
                                    isLive: true,
                                    fluid: true,
                                    pip: true,
                                    muted: true,
                                    url: anchors[index].streamUrl
                                });
                            }
                            if (viewLink) {
                                viewLink.href = '/truc-tiep/' + anchors[index].slug;
                            }
                        });
                    });
                }

                let hasLocalData = false;
                try {
                    const cached = localStorage.getItem(STORAGE_KEY);
                    if (cached) {
                        const parsed = JSON.parse(cached);
                        if (parsed && parsed.length > 0) {
                            renderMatches(parsed);
                            hasLocalData = true;
                        }
                    }
                } catch (e) {
                    console.error('Error parsing localStorage:', e);
                }

                if (!hasLocalData) {
                    heroSection.insertAdjacentHTML('afterend', skeletonHtml);
                }

                fetch('https://video-home.gvapi.cc/api/pinned-home?t=' + new Date().getTime())
                    .then(response => {
                        if (!response.ok) throw new Error('API Response not ok: ' + response.status);
                        return response.json();
                    })
                    .then(data => {
                        const matches = data.pinnedMatches;
                        if (!matches || matches.length < 1) {
                            localStorage.removeItem(STORAGE_KEY);
                            const existingContainer = document.getElementById('pinned-matches-container');
                            if (existingContainer) existingContainer.remove();
                            return;
                        }
                        localStorage.setItem(STORAGE_KEY, JSON.stringify(matches));
                        renderMatches(matches);
                    })
                    .catch(error => {
                        console.error('Error fetching API data:', error);
                        if (!hasLocalData) {
                            const existingContainer = document.getElementById('pinned-matches-container');
                            if (existingContainer) existingContainer.remove();
                        }
                    });
            });
        </script>

            <style>
        .aligncenter {
            margin: 0 auto;

        }

        .wp-caption {
            max-width: 100%;
        }

        footer .container {
            grid-template-columns: 1fr;
        }
    </style>
        <script>
        const mini = document.querySelector('.video-player.is-floating.floating-draggable');
        const margin = 8; // cách mép

        function clampFloatingVideo() {
            if (!mini) return;

            const rect = mini.getBoundingClientRect();

            let x = rect.left;
            let y = rect.top;

            const vw = window.innerWidth;
            const vh = window.innerHeight;

            const minX = margin;
            const minY = margin;           // nếu muốn chừa notch: + safeTop
            const maxX = vw - rect.width - margin;
            const maxY = vh - rect.height - margin;

            if (x < minX) x = minX;
            if (x > maxX) x = maxX;
            if (y < minY) y = minY;
            if (y > maxY) y = maxY;

            mini.style.left = x + 'px';
            mini.style.top = y + 'px';
        }

        // chạy lại mỗi khi viewport thay đổi
        window.addEventListener('scroll', clampFloatingVideo);
        window.addEventListener('resize', clampFloatingVideo);
        window.addEventListener('orientationchange', clampFloatingVideo);

        // iOS Safari thanh URL co giãn → nên dùng thêm:
        if (window.visualViewport) {
            visualViewport.addEventListener('resize', clampFloatingVideo);
            visualViewport.addEventListener('scroll', clampFloatingVideo);
        }
    </script>

    <script type="text/javascript" id="ez-toc-scroll-scriptjs-js-extra">
/* <![CDATA[ */
var eztoc_smooth_local = {"scroll_offset":"30","add_request_uri":"","add_self_reference_link":""};
/* ]]> */
</script>
<script type="text/javascript" src="https://cdn.kreva.biz/wp-content/plugins/easy-table-of-contents/assets/js/smooth_scroll.min.js?ver=2.0.74" id="ez-toc-scroll-scriptjs-js"></script>
<script type="text/javascript" src="https://cdn.kreva.biz/wp-content/plugins/easy-table-of-contents/vendor/js-cookie/js.cookie.min.js?ver=2.2.1" id="ez-toc-js-cookie-js"></script>
<script type="text/javascript" src="https://cdn.kreva.biz/wp-content/plugins/easy-table-of-contents/vendor/sticky-kit/jquery.sticky-kit.min.js?ver=1.9.2" id="ez-toc-jquery-sticky-kit-js"></script>
<script type="text/javascript" id="ez-toc-js-js-extra">
/* <![CDATA[ */
var ezTOC = {"smooth_scroll":"1","visibility_hide_by_default":"","scroll_offset":"30","fallbackIcon":"<span class=\"\"><span class=\"eztoc-hide\" style=\"display:none;\">Toggle<\/span><span class=\"ez-toc-icon-toggle-span\"><svg style=\"fill: #999;color:#999\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" class=\"list-377408\" width=\"20px\" height=\"20px\" viewBox=\"0 0 24 24\" fill=\"none\"><path d=\"M6 6H4v2h2V6zm14 0H8v2h12V6zM4 11h2v2H4v-2zm16 0H8v2h12v-2zM4 16h2v2H4v-2zm16 0H8v2h12v-2z\" fill=\"currentColor\"><\/path><\/svg><svg style=\"fill: #999;color:#999\" class=\"arrow-unsorted-368013\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"10px\" height=\"10px\" viewBox=\"0 0 24 24\" version=\"1.2\" baseProfile=\"tiny\"><path d=\"M18.2 9.3l-6.2-6.3-6.2 6.3c-.2.2-.3.4-.3.7s.1.5.3.7c.2.2.4.3.7.3h11c.3 0 .5-.1.7-.3.2-.2.3-.5.3-.7s-.1-.5-.3-.7zM5.8 14.7l6.2 6.3 6.2-6.3c.2-.2.3-.5.3-.7s-.1-.5-.3-.7c-.2-.2-.4-.3-.7-.3h-11c-.3 0-.5.1-.7.3-.2.2-.3.5-.3.7s.1.5.3.7z\"\/><\/svg><\/span><\/span>","chamomile_theme_is_on":""};
/* ]]> */
</script>
<script type="text/javascript" src="https://cdn.kreva.biz/wp-content/plugins/easy-table-of-contents/assets/js/front.min.js?ver=2.0.74-1746443216" id="ez-toc-js-js"></script>
    <script>
        // === Catfish Banner Global: lấy từ API /api/catfish-banners (giống React CatfishBanners.jsx) ===
        (function () {
            var apiUrl = 'https://api.gvapi.cc/api/catfish-banners';
            fetch(apiUrl)
                .then(function (res) { return res.ok ? res.json() : null; })
                .then(function (data) {
                    if (!data || !data.success || !data.data || !data.data.length) return;

                    // === Video catfish overlay (nếu có trong trang watch) ===
                    var catfishLink = data.data[0].link_url || '';
                    if (catfishLink) {
                        var overlayTop = document.querySelector('.video-catfish-overlay-top');
                        var overlayBottom = document.querySelector('.video-catfish-overlay');
                        if (overlayTop) {
                            overlayTop.href = catfishLink;
                            overlayTop.style.display = 'block';
                        }
                        if (overlayBottom) {
                            overlayBottom.href = catfishLink;
                            overlayBottom.style.display = 'block';
                        }
                    }

                    // === Tạo container catfish-banner-global (fixed bottom, giống React) ===
                    var wrapper = document.createElement('div');
                    wrapper.className = 'catfish-banner-global';
                    wrapper.style.cssText = 'position:fixed;bottom:0;left:0;right:0;z-index:9999;display:flex;flex-direction:column;align-items:center;pointer-events:none;width:50%;margin:0 auto;';

                    // Nút đóng
                    var closeBtn = document.createElement('button');
                    closeBtn.className = 'catfish-banner-close';
                    closeBtn.innerHTML = '✕';
                    closeBtn.setAttribute('aria-label', 'Đóng quảng cáo');
                    closeBtn.style.cssText = 'position:absolute;top:-24px;right:4px;width:24px;height:24px;background:rgba(0,0,0,0.7);color:#fff;border:none;border-radius:50%;font-size:14px;line-height:24px;text-align:center;cursor:pointer;pointer-events:auto;z-index:10000;padding:0;';
                    closeBtn.addEventListener('click', function () { wrapper.remove(); });
                    wrapper.appendChild(closeBtn);

                    // Render banners
                    data.data.forEach(function (banner) {
                        var a = document.createElement('a');
                        a.className = 'catfish-banner-global-item';
                        a.href = banner.link_url || '#';
                        a.target = '_blank';
                        a.rel = 'nofollow noopener noreferrer';
                        a.style.cssText = 'display:block;width:100%;pointer-events:auto;line-height:0;cursor:pointer;';
                        var img = document.createElement('img');
                        img.src = banner.image_url;
                        img.alt = banner.name || 'Banner';
                        img.style.cssText = 'width:100%;height:auto;display:block;object-fit:contain;';
                        a.appendChild(img);
                        wrapper.appendChild(a);
                    });

                    document.body.appendChild(wrapper);

                    // Mobile: full width
                    var mq = window.matchMedia('(max-width: 768px)');
                    function applyMobile(e) { wrapper.style.width = e.matches ? '100%' : '50%'; }
                    applyMobile(mq);
                    mq.addListener(applyMobile);
                })
                .catch(function (e) { console.warn('Catfish banner load failed:', e); });
        })();
    </script>
    <script>
        // === FIX: Chặn smooth-scroll handlers can thiệp vào catfish overlay ===
        (function () {
            document.addEventListener('click', function (e) {
                var overlay = e.target.closest('.video-catfish-overlay, .video-catfish-overlay-top');
                if (!overlay) return;
                var href = overlay.getAttribute('href');
                if (href && href !== '#' && !href.startsWith('#')) {
                    e.stopImmediatePropagation();
                }
            }, true);
        })();
    </script>
        <script>
    document.addEventListener("DOMContentLoaded", function () {
        const walker = document.createTreeWalker(document.body, NodeFilter.SHOW_TEXT, null, false);
        while (walker.nextNode()) {
            const node = walker.currentNode;
            if (node.nodeValue.match(/vô địch quốc gia/i)) {
                node.nodeValue = node.nodeValue.replace(/vô địch quốc gia/gi, "VĐQG");
            }
        }
    });
    </script>
        <script>
    document.addEventListener('DOMContentLoaded', function () {

        function updateLinks() {
            document.querySelectorAll('.home-banner-slide').forEach(function(el) {
                el.href = 'https://refvsbf.com/';
                el.target = '_blank';
            });
        }

        // Banner hiện có
        updateLinks();

        // Banner render sau bằng JS/API
        new MutationObserver(updateLinks).observe(document.body, {
            childList: true,
            subtree: true
        });

    });
    </script>
    </html>


<!-- | kreva.biz | 2026-10-16 11:10:43 -->

Latest requests

# Url Url Source Date
1 https://www.kreva.biz/ 2026-10-16 13:58:12
2 https://www.texarkanatwins.com/%25… 2026-10-16 13:58:12
3 https://royalbrands.vip/ 2026-10-16 13:58:11
4 https://blackzombiefilm.com/fenome… 2026-10-16 13:58:11
5 https://auth.mediacorp.sg/u/login?… 2026-10-16 13:58:10
6 https://www.thebolditalic.com/?gi=… 2026-10-16 13:58:09
7 https://www.thebolditalic.com/?gi=… 2026-10-16 13:58:09
8 https://www.thebolditalic.com/?gi=… 2026-10-16 13:58:08
9 https://www.texarkanatwins.com/%25… 2026-10-16 13:58:07
10 https://www.thebolditalic.com/?gi=… 2026-10-16 13:58:07
11 https://www.thebolditalic.com/?gi=… 2026-10-16 13:58:07
12 https://www.thebolditalic.com/?gi=… 2026-10-16 13:58:05
13 https://www.thebolditalic.com/?gi=… 2026-10-16 13:58:05
14 https://auth.mediacorp.sg/u/login?… 2026-10-16 13:58:04
15 https://www.thebolditalic.com/?gi=… 2026-10-16 13:58:04
16 https://www.thebolditalic.com/?gi=… 2026-10-16 13:58:03
17 https://www.texarkanatwins.com/%25… 2026-10-16 13:58:02
18 https://auth.mediacorp.sg/u/login?… 2026-10-16 13:58:02
19 https://www.texarkanatwins.com/%25… 2026-10-16 13:58:02
20 https://www.thebolditalic.com/?gi=… 2026-10-16 13:58:01