FIFA World Cup 2026 — Complete Football Hub
Sports Live•May 30, 2026

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta name="description" content="FIFA World Cup 2026 Complete Hub — Live Scores, Player Rankings, Full Schedule, All 20 Top Articles, Groups, Fantasy Tips and More.">
<meta name="keywords" content="FIFA World Cup 2026, live scores, football, player rankings, schedule, Mbappe, Messi, Ronaldo, Premier League, Champions League">
<meta property="og:title" content="FIFA World Cup 2026 — Complete Football Hub">
<meta property="og:description" content="Live scores, player rankings, full schedule, groups, 20 top articles — everything in one place.">
<title>FIFA World Cup 2026 — Complete Football Hub | SportsLNV</title>
<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=Oswald:wght@400;500;600;700&family=Source+Serif+4:ital,wght@0,300;0,400;0,600;1,400&family=Inter:wght@400;500;600&display=swap" rel="stylesheet">
<style>
/* ===================== RESET & ROOT ===================== */
*,*::before,*::after{box-sizing:border-box;margin:0;padding:0}
:root{
--red:#c8102e;--dark:#0a0f1a;--navy:#0d1b2e;--gold:#f0c040;
--white:#ffffff;--offwhite:#f5f4f0;--muted:#8a8f9e;
--card-bg:#13192a;--card-border:rgba(255,255,255,0.07);
--ff:'Oswald',sans-serif;--fs:'Source Serif 4',Georgia,serif;--fi:'Inter',sans-serif;
--radius:10px;--radius-lg:16px;--shadow:0 8px 32px rgba(0,0,0,0.4);
}
html{scroll-behavior:smooth}
body{background:var(--dark);color:var(--white);font-family:var(--fi);font-size:16px;line-height:1.6;overflow-x:hidden}
img{max-width:100%;height:auto;display:block}
a{color:inherit;text-decoration:none}
button{cursor:pointer;border:none;background:none;font-family:inherit}
/* ===================== ANIMATIONS ===================== */
@keyframes fadeUp{from{opacity:0;transform:translateY(30px)}to{opacity:1;transform:translateY(0)}}
@keyframes pulse{0%,100%{opacity:1;transform:scale(1)}50%{opacity:.5;transform:scale(1.4)}}
@keyframes shimmer{0%{background-position:-200% center}100%{background-position:200% center}}
@keyframes spin{to{transform:rotate(360deg)}}
@keyframes slidein{from{transform:translateX(-100%);opacity:0}to{transform:translateX(0);opacity:1}}
@keyframes glow{0%,100%{box-shadow:0 0 10px rgba(200,16,46,.3)}50%{box-shadow:0 0 30px rgba(200,16,46,.7)}}
.fade-up{animation:fadeUp .6s ease both}
.fade-up-d1{animation-delay:.1s}
.fade-up-d2{animation-delay:.2s}
.fade-up-d3{animation-delay:.3s}
/* ===================== SCROLLBAR ===================== */
::-webkit-scrollbar{width:5px;height:5px}
::-webkit-scrollbar-track{background:var(--dark)}
::-webkit-scrollbar-thumb{background:var(--red);border-radius:10px}
/* ===================== TOP BAR ===================== */
.topbar{background:var(--red);padding:6px 20px;display:flex;align-items:center;gap:12px;font-size:12px;font-weight:600;letter-spacing:.5px;overflow:hidden}
.topbar-label{background:rgba(0,0,0,.3);padding:2px 8px;border-radius:3px;white-space:nowrap;flex-shrink:0}
.ticker{display:flex;gap:32px;animation:slidein .5s ease;white-space:nowrap;overflow:hidden;flex:1}
.ticker span::before{content:"⚽ "}
/* ===================== NAVBAR ===================== */
.navbar{background:rgba(10,15,26,.95);backdrop-filter:blur(12px);position:sticky;top:0;z-index:1000;border-bottom:1px solid rgba(200,16,46,.3)}
.nav-inner{max-width:1400px;margin:auto;padding:0 20px;display:flex;align-items:center;gap:0}
.nav-logo{font-family:var(--ff);font-size:22px;font-weight:700;color:var(--white);padding:14px 0;margin-right:24px;flex-shrink:0}
.nav-logo span{color:var(--gold)}
.nav-tabs{display:flex;gap:0;overflow-x:auto;scrollbar-width:none;flex:1}
.nav-tabs::-webkit-scrollbar{display:none}
.nav-tab{flex-shrink:0;padding:14px 18px;font-family:var(--ff);font-size:13px;font-weight:500;color:rgba(255,255,255,.6);border-bottom:2px solid transparent;cursor:pointer;transition:all .2s;white-space:nowrap;letter-spacing:.5px;text-transform:uppercase}
.nav-tab.active,.nav-tab:hover{color:var(--white);border-bottom-color:var(--red)}
.nav-live{margin-left:auto;display:flex;align-items:center;gap:6px;background:var(--red);padding:6px 14px;border-radius:20px;font-size:12px;font-weight:700;letter-spacing:1px;flex-shrink:0}
.nav-live .dot{width:6px;height:6px;border-radius:50%;background:#fff;animation:pulse 1s infinite}
/* ===================== HERO ===================== */
.hero{position:relative;min-height:500px;display:flex;align-items:flex-end;overflow:hidden}
.hero-bg{position:absolute;inset:0;background:linear-gradient(135deg,#0a0f1a 0%,#1a0510 40%,#2a0a1a 100%)}
.hero-img{position:absolute;inset:0;width:100%;height:100%;object-fit:cover;opacity:.25}
.hero-overlay{position:absolute;inset:0;background:linear-gradient(to top,rgba(10,15,26,1) 0%,rgba(10,15,26,.7) 40%,transparent 100%)}
.hero-content{position:relative;max-width:1400px;margin:auto;padding:60px 20px 48px;width:100%}
.hero-pill{display:inline-flex;align-items:center;gap:6px;background:var(--red);padding:5px 14px;border-radius:20px;font-size:11px;font-weight:700;letter-spacing:1.5px;margin-bottom:16px;text-transform:uppercase}
.hero-pill .dot{width:6px;height:6px;border-radius:50%;background:#fff;animation:pulse 1s infinite}
.hero-h1{font-family:var(--ff);font-size:clamp(2.5rem,7vw,5rem);font-weight:700;line-height:.95;text-transform:uppercase;letter-spacing:-1px;margin-bottom:16px}
.hero-h1 .accent{color:var(--gold);display:block}
.hero-desc{font-family:var(--fs);font-size:1.1rem;color:rgba(255,255,255,.7);max-width:600px;margin-bottom:28px;font-style:italic}
.hero-stats{display:flex;flex-wrap:wrap;gap:24px}
.hstat{border-left:3px solid var(--red);padding-left:12px}
.hstat-n{font-family:var(--ff);font-size:2.4rem;font-weight:700;color:var(--gold);line-height:1}
.hstat-l{font-size:11px;color:var(--muted);text-transform:uppercase;letter-spacing:1px;margin-top:2px}
/* ===================== LAYOUT ===================== */
.main{max-width:1400px;margin:auto;padding:0 20px 80px}
.section-wrap{padding:48px 0 0}
.section-head{display:flex;align-items:center;gap:14px;margin-bottom:24px;padding-bottom:16px;border-bottom:1px solid rgba(255,255,255,.08)}
.section-num{font-family:var(--ff);font-size:2.5rem;font-weight:700;color:var(--red);line-height:1;min-width:50px}
.section-title{font-family:var(--ff);font-size:1.8rem;font-weight:700;text-transform:uppercase;letter-spacing:.5px}
.section-title span{color:var(--gold)}
.section-badge{margin-left:auto;background:var(--red);padding:4px 12px;border-radius:20px;font-size:11px;font-weight:700;letter-spacing:1px;text-transform:uppercase;flex-shrink:0}
.section-badge.live-badge{animation:glow 2s infinite}
/* ===================== LIVE SCORES ===================== */
.scores-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(320px,1fr));gap:16px}
.score-card{background:var(--card-bg);border:1px solid var(--card-border);border-radius:var(--radius-lg);padding:16px 18px;position:relative;overflow:hidden;transform-style:preserve-3d;transition:transform .3s,box-shadow .3s;cursor:pointer}
.score-card::before{content:'';position:absolute;left:0;top:0;bottom:0;width:4px;background:var(--card-border)}
.score-card.live::before{background:var(--red);animation:glow 1.5s infinite}
.score-card.upcoming::before{background:var(--gold)}
.score-card.finished::before{background:#444}
.score-card:hover{transform:perspective(800px) rotateY(-4deg) rotateX(2deg) translateY(-6px);box-shadow:20px 20px 60px rgba(0,0,0,.6)}
.score-card-meta{display:flex;justify-content:space-between;align-items:center;margin-bottom:12px}
.sc-league{font-size:11px;color:var(--muted);font-weight:500;letter-spacing:.5px;text-transform:uppercase}
.sc-status{font-size:11px;font-weight:700;padding:3px 8px;border-radius:4px;letter-spacing:.5px}
.sc-status.live{background:var(--red);color:#fff;animation:pulse 1.2s infinite}
.sc-status.upcoming{background:rgba(240,192,64,.15);color:var(--gold)}
.sc-status.ft{background:rgba(255,255,255,.08);color:var(--muted)}
.score-teams{display:grid;grid-template-columns:1fr 80px 1fr;align-items:center;gap:10px}
.sc-team{display:flex;flex-direction:column;align-items:center;gap:4px;text-align:center}
.sc-flag{font-size:2rem;line-height:1}
.sc-name{font-family:var(--ff);font-size:14px;font-weight:600;letter-spacing:.3px}
.sc-scorebox{background:rgba(0,0,0,.4);border:1px solid rgba(255,255,255,.1);border-radius:8px;padding:8px 0;text-align:center}
.sc-score{font-family:var(--ff);font-size:22px;font-weight:700;letter-spacing:3px;color:var(--white)}
.sc-min{font-size:10px;color:var(--muted);margin-top:2px}
.score-img-strip{margin-top:12px;height:60px;border-radius:6px;overflow:hidden;position:relative}
.score-img-strip img{width:100%;height:100%;object-fit:cover;opacity:.4}
.score-img-strip::after{content:attr(data-label);position:absolute;inset:0;display:flex;align-items:center;justify-content:center;font-size:11px;color:rgba(255,255,255,.5)}
/* ===================== PLAYER RANKINGS ===================== */
.rank-tabs{display:flex;gap:8px;margin-bottom:20px;flex-wrap:wrap}
.rank-tab{padding:8px 18px;border-radius:20px;border:1px solid rgba(255,255,255,.1);font-size:12px;font-weight:600;color:var(--muted);cursor:pointer;transition:all .2s;letter-spacing:.3px}
.rank-tab.active,.rank-tab:hover{background:var(--red);color:#fff;border-color:var(--red)}
.player-table{width:100%;border-collapse:separate;border-spacing:0 8px}
.player-row{background:var(--card-bg);border-radius:var(--radius);transform-style:preserve-3d;transition:transform .25s,box-shadow .25s;cursor:pointer}
.player-row:hover{transform:perspective(600px) rotateX(2deg) translateY(-3px);box-shadow:0 12px 40px rgba(0,0,0,.5)}
.player-row td{padding:12px 14px;border-top:1px solid var(--card-border);border-bottom:1px solid var(--card-border)}
.player-row td:first-child{border-left:1px solid var(--card-border);border-radius:var(--radius) 0 0 var(--radius);padding-left:16px}
.player-row td:last-child{border-right:1px solid var(--card-border);border-radius:0 var(--radius) var(--radius) 0;padding-right:16px}
.p-rank{font-family:var(--ff);font-size:28px;font-weight:700;line-height:1;min-width:36px}
.p-rank.g1{color:var(--gold)}
.p-rank.g2{color:#b0bec5}
.p-rank.g3{color:#cd7f32}
.p-rank.gn{color:rgba(255,255,255,.25)}
.p-avatar{width:44px;height:44px;border-radius:50%;overflow:hidden;flex-shrink:0;border:2px solid rgba(255,255,255,.1)}
.p-avatar img{width:100%;height:100%;object-fit:cover}
.p-info{display:flex;align-items:center;gap:12px}
.p-name{font-family:var(--ff);font-size:16px;font-weight:600;letter-spacing:.3px}
.p-club{font-size:11px;color:var(--muted);margin-top:1px}
.p-nat{font-size:20px}
.p-stat{text-align:right}
.p-val{font-family:var(--ff);font-size:24px;font-weight:700;color:var(--gold)}
.p-lbl{font-size:10px;color:var(--muted);text-transform:uppercase;letter-spacing:.5px}
.p-bar-wrap{height:3px;background:rgba(255,255,255,.1);border-radius:3px;margin-top:4px;width:80px;margin-left:auto}
.p-bar{height:3px;background:linear-gradient(90deg,var(--red),var(--gold));border-radius:3px}
/* ===================== SCHEDULE ===================== */
.schedule-wrap{display:grid;grid-template-columns:1fr 1fr;gap:0}
@media(max-width:700px){.schedule-wrap{grid-template-columns:1fr}}
.sched-day{border-right:1px solid rgba(255,255,255,.05);padding:0 20px 20px 0;margin-bottom:20px}
.sched-day:nth-child(even){border-right:none;padding-left:20px;padding-right:0}
.sday-head{font-family:var(--ff);font-size:13px;font-weight:600;color:var(--gold);letter-spacing:1px;text-transform:uppercase;padding:10px 0 8px;border-bottom:1px solid rgba(255,255,255,.07);margin-bottom:10px}
.sched-row{display:flex;align-items:center;gap:10px;padding:9px 12px;background:var(--card-bg);border:1px solid var(--card-border);border-radius:8px;margin-bottom:7px;cursor:pointer;transition:all .2s;transform-style:preserve-3d}
.sched-row:hover{transform:perspective(400px) rotateX(3deg) translateY(-2px);border-color:rgba(200,16,46,.4)}
.sched-time{font-family:var(--ff);font-size:13px;font-weight:600;background:rgba(200,16,46,.15);color:var(--red);padding:4px 8px;border-radius:5px;min-width:50px;text-align:center;flex-shrink:0}
.sched-time.live-t{background:var(--red);color:#fff;animation:pulse .8s infinite}
.sched-teams{flex:1;font-family:var(--ff);font-size:14px;font-weight:600;letter-spacing:.2px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.sched-grp{font-size:10px;color:var(--muted);background:rgba(255,255,255,.05);padding:2px 7px;border-radius:8px;white-space:nowrap;flex-shrink:0}
.final-row{background:linear-gradient(90deg,rgba(200,16,46,.1),rgba(240,192,64,.1));border-color:rgba(240,192,64,.3)}
/* ===================== GROUPS TABLE ===================== */
.groups-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(280px,1fr));gap:14px}
.group-card{background:var(--card-bg);border:1px solid var(--card-border);border-radius:var(--radius-lg);overflow:hidden;transform-style:preserve-3d;transition:transform .3s,box-shadow .3s}
.group-card:hover{transform:perspective(600px) rotateY(-4deg) rotateX(2deg) translateY(-5px);box-shadow:16px 16px 48px rgba(0,0,0,.5)}
.group-head{background:linear-gradient(90deg,var(--red),#8b0000);padding:10px 14px;display:flex;justify-content:space-between;align-items:center}
.group-head h3{font-family:var(--ff);font-size:15px;font-weight:700;letter-spacing:1px;text-transform:uppercase}
.group-head span{font-size:11px;color:rgba(255,255,255,.6);font-weight:500}
.gtable{width:100%;font-size:12px;border-collapse:collapse}
.gtable th{padding:7px 10px;color:var(--muted);font-weight:500;text-align:center;border-bottom:1px solid rgba(255,255,255,.06)}
.gtable th:first-child{text-align:left}
.gtable td{padding:9px 10px;text-align:center;border-bottom:1px solid rgba(255,255,255,.04);transition:background .15s}
.gtable tr:last-child td{border-bottom:none}
.gtable td:first-child{text-align:left;font-weight:600;font-size:13px}
.gtable tr.qualify td{color:#fff}
.qtag{display:inline-block;width:6px;height:6px;border-radius:50%;background:#27ae60;margin-right:5px;vertical-align:middle}
.flag16{font-size:15px;margin-right:4px}
/* ===================== ARTICLES ===================== */
.articles-toc{background:var(--card-bg);border:1px solid var(--card-border);border-radius:var(--radius-lg);padding:24px;margin-bottom:36px}
.toc-title{font-family:var(--ff);font-size:18px;font-weight:700;color:var(--gold);margin-bottom:14px;text-transform:uppercase;letter-spacing:.5px}
.toc-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(280px,1fr));gap:6px}
.toc-item{display:flex;align-items:center;gap:8px;padding:7px 10px;border-radius:6px;cursor:pointer;transition:background .15s;font-size:13px}
.toc-item:hover{background:rgba(255,255,255,.05)}
.toc-n{font-family:var(--ff);font-weight:700;color:var(--red);min-width:24px;font-size:15px}
.toc-t{color:rgba(255,255,255,.75);line-height:1.3}
.article-block{background:var(--card-bg);border:1px solid var(--card-border);border-radius:var(--radius-lg);overflow:hidden;margin-bottom:28px;transform-style:preserve-3d;transition:transform .3s,box-shadow .3s;cursor:pointer}
.article-block:hover{transform:perspective(1000px) rotateY(-2deg) rotateX(1deg) translateY(-5px);box-shadow:20px 20px 60px rgba(0,0,0,.6)}
.art-hero{position:relative;height:260px;overflow:hidden}
.art-hero img{width:100%;height:100%;object-fit:cover;transition:transform .5s}
.article-block:hover .art-hero img{transform:scale(1.04)}
.art-hero-overlay{position:absolute;inset:0;background:linear-gradient(to top,rgba(10,15,26,.98) 0%,rgba(10,15,26,.4) 50%,transparent 100%)}
.art-hero-meta{position:absolute;bottom:16px;left:20px;right:20px}
.art-num{position:absolute;top:14px;right:14px;width:36px;height:36px;border-radius:50%;background:var(--red);display:flex;align-items:center;justify-content:center;font-family:var(--ff);font-weight:700;font-size:15px}
.art-badges{display:flex;gap:6px;margin-bottom:8px;flex-wrap:wrap}
.art-badge{font-size:10px;font-weight:700;padding:3px 9px;border-radius:3px;letter-spacing:.5px;text-transform:uppercase}
.art-badge.breaking{background:var(--red);color:#fff}
.art-badge.featured{background:var(--gold);color:#0a0f1a}
.art-badge.analysis{background:rgba(255,255,255,.12);color:#fff}
.art-badge.fantasy{background:#6c3483;color:#fff}
.art-badge.guide{background:#0e6655;color:#fff}
.art-h2{font-family:var(--ff);font-size:clamp(1.4rem,3vw,1.9rem);font-weight:700;line-height:1.15;letter-spacing:.2px}
.art-body{padding:22px 24px}
.art-meta-row{display:flex;align-items:center;gap:14px;margin-bottom:14px;flex-wrap:wrap}
.art-cat{font-size:11px;font-weight:700;color:var(--red);text-transform:uppercase;letter-spacing:1px}
.art-divider{width:1px;height:12px;background:rgba(255,255,255,.2)}
.art-date{font-size:12px;color:var(--muted)}
.art-readtime{font-size:12px;color:var(--muted)}
.art-traffic{font-size:12px;font-weight:700;color:#27ae60}
.art-text{font-family:var(--fs);font-size:1rem;color:rgba(255,255,255,.78);line-height:1.8;margin-bottom:16px}
.art-text p{margin-bottom:14px}
.art-text strong{color:var(--gold);font-weight:600}
.art-text em{color:rgba(255,255,255,.9)}
.art-img-row{display:grid;grid-template-columns:1fr 1fr;gap:10px;margin:16px 0}
.art-img-row img{border-radius:8px;height:160px;object-fit:cover;width:100%}
.art-img-single{margin:16px 0}
.art-img-single img{border-radius:10px;width:100%;max-height:300px;object-fit:cover}
.art-caption{font-size:11px;color:var(--muted);text-align:center;margin-top:5px;font-style:italic}
.art-list{margin:12px 0 16px 0;padding-left:0;list-style:none}
.art-list li{padding:7px 0 7px 20px;position:relative;color:rgba(255,255,255,.75);font-size:.95rem;border-bottom:1px solid rgba(255,255,255,.04)}
.art-list li::before{content:'→';position:absolute;left:0;color:var(--red);font-weight:700}
.art-list li:last-child{border-bottom:none}
.art-table{width:100%;border-collapse:collapse;margin:14px 0;font-size:13px}
.art-table th{background:rgba(200,16,46,.2);padding:8px 12px;text-align:left;font-weight:600;border:1px solid rgba(255,255,255,.07)}
.art-table td{padding:8px 12px;border:1px solid rgba(255,255,255,.05);color:rgba(255,255,255,.8)}
.art-table tr:nth-child(even) td{background:rgba(255,255,255,.02)}
.art-highlight{background:linear-gradient(90deg,rgba(200,16,46,.1),transparent);border-left:3px solid var(--red);padding:14px 16px;border-radius:0 8px 8px 0;margin:16px 0;font-family:var(--fs);font-style:italic;color:rgba(255,255,255,.85);font-size:.95rem}
.art-cta{display:inline-flex;align-items:center;gap:8px;background:var(--red);color:#fff;padding:10px 22px;border-radius:6px;font-family:var(--ff);font-size:14px;font-weight:600;letter-spacing:.5px;text-transform:uppercase;margin-top:12px;transition:background .2s,transform .15s}
.art-cta:hover{background:#a50d26;transform:translateX(3px)}
.art-views{display:flex;align-items:center;gap:6px;background:rgba(39,174,96,.1);border:1px solid rgba(39,174,96,.2);padding:10px 16px;border-radius:8px;margin-top:16px}
.art-views-n{font-family:var(--ff);font-size:1.6rem;font-weight:700;color:#27ae60}
.art-views-l{font-size:11px;color:var(--muted);text-transform:uppercase;letter-spacing:.5px}
.art-share{display:flex;gap:8px;margin-top:12px;flex-wrap:wrap}
.share-btn{padding:7px 16px;border-radius:20px;font-size:12px;font-weight:600;cursor:pointer;border:1px solid rgba(255,255,255,.15);color:rgba(255,255,255,.7);background:rgba(255,255,255,.05);transition:all .15s}
.share-btn:hover{background:rgba(255,255,255,.12);color:#fff}
/* ===================== MINI STATS WIDGET ===================== */
.mini-stats{display:grid;grid-template-columns:repeat(auto-fill,minmax(120px,1fr));gap:10px;margin:16px 0}
.mstat{background:rgba(255,255,255,.04);border:1px solid rgba(255,255,255,.07);border-radius:8px;padding:12px;text-align:center}
.mstat-n{font-family:var(--ff);font-size:1.8rem;font-weight:700;color:var(--gold)}
.mstat-l{font-size:10px;color:var(--muted);text-transform:uppercase;letter-spacing:.5px;margin-top:3px}
/* ===================== FOOTER ===================== */
.footer{background:var(--navy);border-top:1px solid rgba(255,255,255,.06);padding:40px 20px;margin-top:60px}
.footer-inner{max-width:1400px;margin:auto;display:grid;grid-template-columns:1fr 1fr 1fr;gap:40px}
@media(max-width:700px){.footer-inner{grid-template-columns:1fr}}
.footer-brand{font-family:var(--ff);font-size:22px;font-weight:700;margin-bottom:8px}
.footer-brand span{color:var(--gold)}
.footer-desc{font-size:13px;color:var(--muted);line-height:1.6}
.footer-h{font-family:var(--ff);font-size:14px;font-weight:600;color:var(--gold);margin-bottom:12px;text-transform:uppercase;letter-spacing:.5px}
.footer-links{list-style:none;display:flex;flex-direction:column;gap:7px}
.footer-links a{font-size:13px;color:var(--muted);transition:color .15s}
.footer-links a:hover{color:var(--white)}
.footer-bottom{max-width:1400px;margin:24px auto 0;padding-top:20px;border-top:1px solid rgba(255,255,255,.05);display:flex;justify-content:space-between;align-items:center;font-size:12px;color:var(--muted);flex-wrap:wrap;gap:10px}
/* ===================== RESPONSIVE ===================== */
@media(max-width:900px){
.hero-h1{font-size:2.8rem}
.p-avatar{display:none}
.art-img-row{grid-template-columns:1fr}
}
@media(max-width:600px){
.nav-logo{font-size:18px}
.hero{min-height:380px}
.art-hero{height:180px}
.art-body{padding:16px}
.section-num{font-size:1.8rem}
.score-teams{grid-template-columns:1fr 70px 1fr}
}
</style>
</head>
<body>
<!-- TOP TICKER -->
<div class="topbar">
<span class="topbar-label">🔴 BREAKING</span>
<div class="ticker">
<span>Brazil 2–1 Germany (67')</span>
<span>France 1–1 Argentina (HT)</span>
<span>Spain 3–0 Morocco (31')</span>
<span>England 2–0 Iran (FT)</span>
<span>Portugal vs Uruguay — Today 21:00</span>
<span>Mbappé scores twice in World Cup 2026</span>
</div>
</div>
<!-- NAVBAR -->
<nav class="navbar">
<div class="nav-inner">
<div class="nav-logo">Sports<span>LNV</span></div>
<div class="nav-tabs">
<a href="#live-scores" class="nav-tab active">Live Scores</a>
<a href="#player-rankings" class="nav-tab">Rankings</a>
<a href="#schedule" class="nav-tab">Schedule</a>
<a href="#groups" class="nav-tab">Groups</a>
<a href="#articles" class="nav-tab">20 Articles</a>
</div>
<div class="nav-live"><div class="dot"></div>LIVE</div>
</div>
</nav>
<!-- HERO -->
<section class="hero">
<div class="hero-bg"></div>
<img class="hero-img" src="https://images.unsplash.com/photo-1431324155629-1a6deb1dec8d?w=1600&q=80&fit=crop" alt="Football stadium crowd" loading="eager">
<div class="hero-overlay"></div>
<div class="hero-content fade-up">
<div class="hero-pill"><div class="dot"></div>Live Coverage 2026</div>
<h1 class="hero-h1">FIFA World Cup<span class="accent">2026 Complete Hub</span></h1>
<p class="hero-desc">Live scores, player rankings, full schedule, groups, fantasy tips — all 20 top articles in one place.</p>
<div class="hero-stats">
<div class="hstat"><div class="hstat-n">48</div><div class="hstat-l">Teams</div></div>
<div class="hstat"><div class="hstat-n">104</div><div class="hstat-l">Matches</div></div>
<div class="hstat"><div class="hstat-n">11</div><div class="hstat-l">Venues</div></div>
<div class="hstat"><div class="hstat-n">3</div><div class="hstat-l">Countries</div></div>
<div class="hstat"><div class="hstat-n">32</div><div class="hstat-l">Days</div></div>
</div>
</div>
</section>
<main class="main">
<!-- ======== LIVE SCORES ======== -->
<section class="section-wrap" id="live-scores">
<div class="section-head">
<div class="section-num">01</div>
<div class="section-title">Live <span>Scores</span></div>
<span class="section-badge live-badge">● 3 LIVE NOW</span>
</div>
<div class="scores-grid">
<div class="score-card live">
<div class="score-card-meta"><span class="sc-league">🏆 World Cup 2026 — Group C</span><span class="sc-status live">● LIVE 67'</span></div>
<div class="score-teams">
<div class="sc-team"><div class="sc-flag">🇧🇷</div><div class="sc-name">Brazil</div></div>
<div class="sc-scorebox"><div class="sc-score">2 – 1</div><div class="sc-min">67'</div></div>
<div class="sc-team"><div class="sc-flag">🇩🇪</div><div class="sc-name">Germany</div></div>
</div>
<div class="score-img-strip">
<img src="https://images.unsplash.com/photo-1553778263-73a83bab9b0c?w=600&q=70&fit=crop" alt="Brazil vs Germany match">
</div>
</div>
<div class="score-card live">
<div class="score-card-meta"><span class="sc-league">🏆 World Cup 2026 — Group A</span><span class="sc-status live">● HT</span></div>
<div class="score-teams">
<div class="sc-team"><div class="sc-flag">🇫🇷</div><div class="sc-name">France</div></div>
<div class="sc-scorebox"><div class="sc-score">1 – 1</div><div class="sc-min">HT</div></div>
<div class="sc-team"><div class="sc-flag">🇦🇷</div><div class="sc-name">Argentina</div></div>
</div>
<div class="score-img-strip">
<img src="https://images.unsplash.com/photo-1560272564-c83b66b1ad12?w=600&q=70&fit=crop" alt="France vs Argentina">
</div>
</div>
<div class="score-card live">
<div class="score-card-meta"><span class="sc-league">🏆 World Cup 2026 — Group E</span><span class="sc-status live">● LIVE 31'</span></div>
<div class="score-teams">
<div class="sc-team"><div class="sc-flag">🇪🇸</div><div class="sc-name">Spain</div></div>
<div class="sc-scorebox"><div class="sc-score">3 – 0</div><div class="sc-min">31'</div></div>
<div class="sc-team"><div class="sc-flag">🇲🇦</div><div class="sc-name">Morocco</div></div>
</div>
<div class="score-img-strip">
<img src="https://images.unsplash.com/photo-1522778119026-d647f0596c20?w=600&q=70&fit=crop" alt="Spain vs Morocco">
</div>
</div>
<div class="score-card finished">
<div class="score-card-meta"><span class="sc-league">🏆 World Cup 2026 — Group B</span><span class="sc-status ft">FT</span></div>
<div class="score-teams">
<div class="sc-team"><div class="sc-flag">🏴</div><div class="sc-name">England</div></div>
<div class="sc-scorebox"><div class="sc-score">2 – 0</div><div class="sc-min">FT</div></div>
<div class="sc-team"><div class="sc-flag">🇮🇷</div><div class="sc-name">Iran</div></div>
</div>
<div class="score-img-strip">
<img src="https://images.unsplash.com/photo-1543326727-cf6c39e8f84c?w=600&q=70&fit=crop" alt="England vs Iran">
</div>
</div>
<div class="score-card upcoming">
<div class="score-card-meta"><span class="sc-league">🏆 World Cup 2026 — Group D</span><span class="sc-status upcoming">Today 21:00</span></div>
<div class="score-teams">
<div class="sc-team"><div class="sc-flag">🇵🇹</div><div class="sc-name">Portugal</div></div>
<div class="sc-scorebox" style="background:rgba(240,192,64,.07)"><div class="sc-score" style="font-size:16px;letter-spacing:2px;color:var(--gold)">vs</div><div class="sc-min">21:00</div></div>
<div class="sc-team"><div class="sc-flag">🇺🇾</div><div class="sc-name">Uruguay</div></div>
</div>
<div class="score-img-strip">
<img src="https://images.unsplash.com/photo-1574629810360-7efbbe195018?w=600&q=70&fit=crop" alt="Portugal vs Uruguay upcoming">
</div>
</div>
<div class="score-card upcoming">
<div class="score-card-meta"><span class="sc-league">🏆 World Cup 2026 — Group F</span><span class="sc-status upcoming">Today 00:30</span></div>
<div class="score-teams">
<div class="sc-team"><div class="sc-flag">🇺🇸</div><div class="sc-name">USA</div></div>
<div class="sc-scorebox" style="background:rgba(240,192,64,.07)"><div class="sc-score" style="font-size:16px;letter-spacing:2px;color:var(--gold)">vs</div><div class="sc-min">00:30</div></div>
<div class="sc-team"><div class="sc-flag">🇲🇽</div><div class="sc-name">Mexico</div></div>
</div>
<div class="score-img-strip">
<img src="https://images.unsplash.com/photo-1508098682722-e99c43a406b2?w=600&q=70&fit=crop" alt="USA vs Mexico upcoming">
</div>
</div>
</div>
</section>
<!-- ======== PLAYER RANKINGS ======== -->
<section class="section-wrap" id="player-rankings">
<div class="section-head">
<div class="section-num">02</div>
<div class="section-title">Player <span>Rankings</span></div>
<span class="section-badge">TOP 10</span>
</div>
<div class="rank-tabs">
<button class="rank-tab active" onclick="switchRank(this,'goals')">⚽ Top Scorers</button>
<button class="rank-tab" onclick="switchRank(this,'assists')">🎯 Assists</button>
<button class="rank-tab" onclick="switchRank(this,'rating')">⭐ Best Rated</button>
<button class="rank-tab" onclick="switchRank(this,'saves')">🧤 Goalkeepers</button>
</div>
<div id="rank-container"></div>
</section>
<!-- ======== SCHEDULE ======== -->
<section class="section-wrap" id="schedule">
<div class="section-head">
<div class="section-num">03</div>
<div class="section-title">Full <span>Schedule</span></div>
<span class="section-badge">GROUP STAGE</span>
</div>
<div class="art-img-single" style="margin-bottom:20px">
<img src="https://images.unsplash.com/photo-1589487391730-58f20eb2c308?w=1200&q=75&fit=crop" alt="FIFA World Cup 2026 stadiums USA Canada Mexico" style="border-radius:12px;max-height:200px;width:100%;object-fit:cover">
<div class="art-caption">11 venues across USA, Canada & Mexico — largest World Cup in history</div>
</div>
<div class="schedule-wrap" id="sched-wrap"></div>
</section>
<!-- ======== GROUPS ======== -->
<section class="section-wrap" id="groups">
<div class="section-head">
<div class="section-num">04</div>
<div class="section-title">Group <span>Standings</span></div>
<span class="section-badge">LIVE</span>
</div>
<div class="groups-grid" id="groups-container"></div>
</section>
<!-- ======== 20 ARTICLES ======== -->
<section class="section-wrap" id="articles">
<div class="section-head">
<div class="section-num">05</div>
<div class="section-title">All <span>20 Articles</span></div>
<span class="section-badge">5M+ TRAFFIC</span>
</div>
<!-- TABLE OF CONTENTS -->
<div class="articles-toc fade-up">
<div class="toc-title">📋 Table of Contents</div>
<div class="toc-grid" id="toc-grid"></div>
</div>
<!-- ARTICLES RENDERED BY JS -->
<div id="articles-container"></div>
</section>
</main>
<!-- FOOTER -->
<footer class="footer">
<div class="footer-inner">
<div>
<div class="footer-brand">Sports<span>LNV</span></div>
<p class="footer-desc">Your #1 live sports destination. Live scores, expert analysis, fantasy tips and breaking football news.</p>
</div>
<div>
<div class="footer-h">Football</div>
<ul class="footer-links">
<li><a href="#">FIFA World Cup 2026</a></li>
<li><a href="#">Premier League</a></li>
<li><a href="#">Champions League</a></li>
<li><a href="#">La Liga</a></li>
<li><a href="#">Bundesliga</a></li>
<li><a href="#">Fantasy Football</a></li>
</ul>
</div>
<div>
<div class="footer-h">Quick Links</div>
<ul class="footer-links">
<li><a href="#">Live Scores</a></li>
<li><a href="#">Player Rankings</a></li>
<li><a href="#">Match Schedule</a></li>
<li><a href="#">Group Tables</a></li>
<li><a href="#">Predictions & Odds</a></li>
<li><a href="#">Streaming Guide</a></li>
</ul>
</div>
</div>
<div class="footer-bottom">
<span>© 2026 SportsLNV. All rights reserved.</span>
<span>Live scores · Rankings · News · Fantasy</span>
</div>
</footer>
<script>
/* ============ PLAYER RANKINGS DATA ============ */
const rankData = {
goals:[
{rank:1,name:'Kylian Mbappé',club:'Real Madrid',nat:'🇫🇷',val:4,lbl:'Goals',pct:100,img:'https://images.unsplash.com/photo-1571019613454-1cb2f99b2d8b?w=100&q=80&fit=crop&crop=face'},
{rank:2,name:'Vinicius Jr.',club:'Real Madrid',nat:'🇧🇷',val:3,lbl:'Goals',pct:75,img:'https://images.unsplash.com/photo-1594381898411-846e7d193883?w=100&q=80&fit=crop&crop=face'},
{rank:3,name:'Harry Kane',club:'Bayern Munich',nat:'🏴',val:3,lbl:'Goals',pct:75,img:'https://images.unsplash.com/photo-1546519638405-a9ded02e4f66?w=100&q=80&fit=crop&crop=face'},
{rank:4,name:'Lautaro Martínez',club:'Inter Milan',nat:'🇦🇷',val:2,lbl:'Goals',pct:50,img:'https://images.unsplash.com/photo-1552674605-db6ffd4facb5?w=100&q=80&fit=crop&crop=face'},
{rank:5,name:'Jude Bellingham',club:'Real Madrid',nat:'🏴',val:2,lbl:'Goals',pct:50,img:'https://images.unsplash.com/photo-1558618666-fcd25c85cd64?w=100&q=80&fit=crop&crop=face'},
{rank:6,name:'Bukayo Saka',club:'Arsenal',nat:'🏴',val:2,lbl:'Goals',pct:50,img:'https://images.unsplash.com/photo-1587174486073-ae5e5cff23aa?w=100&q=80&fit=crop&crop=face'},
{rank:7,name:'Lamine Yamal',club:'Barcelona',nat:'🇪🇸',val:1,lbl:'Goals',pct:25,img:'https://images.unsplash.com/photo-1544298621-35a989e4e54a?w=100&q=80&fit=crop&crop=face'},
{rank:8,name:'Erling Haaland',club:'Man City',nat:'🇳🇴',val:1,lbl:'Goals',pct:25,img:'https://images.unsplash.com/photo-1560272564-c83b66b1ad12?w=100&q=80&fit=crop&crop=face'},
{rank:9,name:'Lionel Messi',club:'Inter Miami',nat:'🇦🇷',val:1,lbl:'Goals',pct:25,img:'https://images.unsplash.com/photo-1551698618-1dfe5d97d256?w=100&q=80&fit=crop&crop=face'},
{rank:10,name:'Rodri',club:'Man City',nat:'🇪🇸',val:1,lbl:'Goals',pct:25,img:'https://images.unsplash.com/photo-1547941126-3d5322b218b0?w=100&q=80&fit=crop&crop=face'},
],
assists:[
{rank:1,name:'Kevin De Bruyne',club:'Man City',nat:'🇧🇪',val:3,lbl:'Assists',pct:100,img:'https://images.unsplash.com/photo-1571019613454-1cb2f99b2d8b?w=100&q=80&fit=crop&crop=face'},
{rank:2,name:'Pedri',club:'Barcelona',nat:'🇪🇸',val:3,lbl:'Assists',pct:100,img:'https://images.unsplash.com/photo-1594381898411-846e7d193883?w=100&q=80&fit=crop&crop=face'},
{rank:3,name:'Jude Bellingham',club:'Real Madrid',nat:'🏴',val:2,lbl:'Assists',pct:67,img:'https://images.unsplash.com/photo-1546519638405-a9ded02e4f66?w=100&q=80&fit=crop&crop=face'},
{rank:4,name:'Kylian Mbappé',club:'Real Madrid',nat:'🇫🇷',val:2,lbl:'Assists',pct:67,img:'https://images.unsplash.com/photo-1552674605-db6ffd4facb5?w=100&q=80&fit=crop&crop=face'},
{rank:5,name:'Bukayo Saka',club:'Arsenal',nat:'🏴',val:2,lbl:'Assists',pct:67,img:'https://images.unsplash.com/photo-1558618666-fcd25c85cd64?w=100&q=80&fit=crop&crop=face'},
{rank:6,name:'Lamine Yamal',club:'Barcelona',nat:'🇪🇸',val:2,lbl:'Assists',pct:67,img:'https://images.unsplash.com/photo-1587174486073-ae5e5cff23aa?w=100&q=80&fit=crop&crop=face'},
{rank:7,name:'Vinicius Jr.',club:'Real Madrid',nat:'🇧🇷',val:1,lbl:'Assists',pct:33,img:'https://images.unsplash.com/photo-1544298621-35a989e4e54a?w=100&q=80&fit=crop&crop=face'},
{rank:8,name:'Phil Foden',club:'Man City',nat:'🏴',val:1,lbl:'Assists',pct:33,img:'https://images.unsplash.com/photo-1560272564-c83b66b1ad12?w=100&q=80&fit=crop&crop=face'},
{rank:9,name:'Lionel Messi',club:'Inter Miami',nat:'🇦🇷',val:1,lbl:'Assists',pct:33,img:'https://images.unsplash.com/photo-1551698618-1dfe5d97d256?w=100&q=80&fit=crop&crop=face'},
{rank:10,name:'Gavi',club:'Barcelona',nat:'🇪🇸',val:1,lbl:'Assists',pct:33,img:'https://images.unsplash.com/photo-1547941126-3d5322b218b0?w=100&q=80&fit=crop&crop=face'},
],
rating:[
{rank:1,name:'Kylian Mbappé',club:'Real Madrid',nat:'🇫🇷',val:'9.4',lbl:'Rating',pct:100,img:'https://images.unsplash.com/photo-1571019613454-1cb2f99b2d8b?w=100&q=80&fit=crop&crop=face'},
{rank:2,name:'Vinicius Jr.',club:'Real Madrid',nat:'🇧🇷',val:'9.1',lbl:'Rating',pct:97,img:'https://images.unsplash.com/photo-1594381898411-846e7d193883?w=100&q=80&fit=crop&crop=face'},
{rank:3,name:'Jude Bellingham',club:'Real Madrid',nat:'🏴',val:'8.9',lbl:'Rating',pct:95,img:'https://images.unsplash.com/photo-1546519638405-a9ded02e4f66?w=100&q=80&fit=crop&crop=face'},
{rank:4,name:'Pedri',club:'Barcelona',nat:'🇪🇸',val:'8.8',lbl:'Rating',pct:94,img:'https://images.unsplash.com/photo-1552674605-db6ffd4facb5?w=100&q=80&fit=crop&crop=face'},
{rank:5,name:'Lamine Yamal',club:'Barcelona',nat:'🇪🇸',val:'8.7',lbl:'Rating',pct:93,img:'https://images.unsplash.com/photo-1558618666-fcd25c85cd64?w=100&q=80&fit=crop&crop=face'},
{rank:6,name:'Harry Kane',club:'Bayern Munich',nat:'🏴',val:'8.6',lbl:'Rating',pct:91,img:'https://images.unsplash.com/photo-1587174486073-ae5e5cff23aa?w=100&q=80&fit=crop&crop=face'},
{rank:7,name:'Rodri',club:'Man City',nat:'🇪🇸',val:'8.5',lbl:'Rating',pct:90,img:'https://images.unsplash.com/photo-1544298621-35a989e4e54a?w=100&q=80&fit=crop&crop=face'},
{rank:8,name:'Lionel Messi',club:'Inter Miami',nat:'🇦🇷',val:'8.4',lbl:'Rating',pct:89,img:'https://images.unsplash.com/photo-1560272564-c83b66b1ad12?w=100&q=80&fit=crop&crop=face'},
{rank:9,name:'Bukayo Saka',club:'Arsenal',nat:'🏴',val:'8.3',lbl:'Rating',pct:88,img:'https://images.unsplash.com/photo-1551698618-1dfe5d97d256?w=100&q=80&fit=crop&crop=face'},
{rank:10,name:'Erling Haaland',club:'Man City',nat:'🇳🇴',val:'8.2',lbl:'Rating',pct:87,img:'https://images.unsplash.com/photo-1547941126-3d5322b218b0?w=100&q=80&fit=crop&crop=face'},
],
saves:[
{rank:1,name:'Alisson Becker',club:'Liverpool',nat:'🇧🇷',val:11,lbl:'Saves',pct:100,img:'https://images.unsplash.com/photo-1571019613454-1cb2f99b2d8b?w=100&q=80&fit=crop&crop=face'},
{rank:2,name:'Manuel Neuer',club:'Bayern Munich',nat:'🇩🇪',val:9,lbl:'Saves',pct:82,img:'https://images.unsplash.com/photo-1594381898411-846e7d193883?w=100&q=80&fit=crop&crop=face'},
{rank:3,name:'Jordan Pickford',club:'Everton',nat:'🏴',val:8,lbl:'Saves',pct:73,img:'https://images.unsplash.com/photo-1546519638405-a9ded02e4f66?w=100&q=80&fit=crop&crop=face'},
{rank:4,name:'Yassine Bounou',club:'Al-Hilal',nat:'🇲🇦',val:8,lbl:'Saves',pct:73,img:'https://images.unsplash.com/photo-1552674605-db6ffd4facb5?w=100&q=80&fit=crop&crop=face'},
{rank:5,name:'Unai Simón',club:'Ath. Bilbao',nat:'🇪🇸',val:7,lbl:'Saves',pct:64,img:'https://images.unsplash.com/photo-1558618666-fcd25c85cd64?w=100&q=80&fit=crop&crop=face'},
{rank:6,name:'Andriy Lunin',club:'Real Madrid',nat:'🇺🇦',val:6,lbl:'Saves',pct:55,img:'https://images.unsplash.com/photo-1587174486073-ae5e5cff23aa?w=100&q=80&fit=crop&crop=face'},
{rank:7,name:'Mike Maignan',club:'AC Milan',nat:'🇫🇷',val:5,lbl:'Saves',pct:45,img:'https://images.unsplash.com/photo-1544298621-35a989e4e54a?w=100&q=80&fit=crop&crop=face'},
{rank:8,name:'David Raya',club:'Arsenal',nat:'🇪🇸',val:5,lbl:'Saves',pct:45,img:'https://images.unsplash.com/photo-1560272564-c83b66b1ad12?w=100&q=80&fit=crop&crop=face'},
{rank:9,name:'Gianluigi Donnarumma',club:'PSG',nat:'🇮🇹',val:4,lbl:'Saves',pct:36,img:'https://images.unsplash.com/photo-1551698618-1dfe5d97d256?w=100&q=80&fit=crop&crop=face'},
{rank:10,name:'Robert Sanchez',club:'Chelsea',nat:'🇪🇸',val:4,lbl:'Saves',pct:36,img:'https://images.unsplash.com/photo-1547941126-3d5322b218b0?w=100&q=80&fit=crop&crop=face'},
]
};
function renderRankings(type){
const d = rankData[type];
const rc = ['','p-rank g1','p-rank g2','p-rank g3'];
document.getElementById('rank-container').innerHTML = `
<table class="player-table">
<tbody>
${d.map(p=>{
const rankCls = p.rank<=3 ? rc[p.rank] : 'p-rank gn';
return `<tr class="player-row">
<td><div class="${rankCls}">${p.rank}</div></td>
<td>
<div class="p-info">
<div class="p-avatar"><img src="${p.img}" alt="${p.name}" loading="lazy"></div>
<div>
<div class="p-name">${p.name}</div>
<div class="p-club">${p.club}</div>
</div>
</div>
</td>
<td><div class="p-nat">${p.nat}</div></td>
<td>
<div class="p-stat">
<div class="p-val">${p.val}</div>
<div class="p-lbl">${p.lbl}</div>
<div class="p-bar-wrap"><div class="p-bar" style="width:${p.pct}%"></div></div>
</div>
</td>
</tr>`;
}).join('')}
</tbody>
</table>`;
}
function switchRank(btn,type){
document.querySelectorAll('.rank-tab').forEach(b=>b.classList.remove('active'));
btn.classList.add('active');
renderRankings(type);
}
/* ============ SCHEDULE DATA ============ */
const scheduleData = [
{day:'Today — June 1, 2026',matches:[
{time:'LIVE',teams:'🇧🇷 Brazil vs 🇩🇪 Germany',grp:'Group C',live:true},
{time:'HT',teams:'🇫🇷 France vs 🇦🇷 Argentina',grp:'Group A',live:true},
{time:'21:00',teams:'🇵🇹 Portugal vs 🇺🇾 Uruguay',grp:'Group D'},
{time:'00:30',teams:'🇺🇸 USA vs 🇲🇽 Mexico',grp:'Group F'},
]},
{day:'June 2, 2026',matches:[
{time:'15:00',teams:'🇯🇵 Japan vs 🇨🇷 Croatia',grp:'Group G'},
{time:'18:00',teams:'🏴 England vs 🇸🇳 Senegal',grp:'Group B'},
{time:'21:00',teams:'🇳🇱 Netherlands vs 🇦🇺 Australia',grp:'Group H'},
]},
{day:'June 3, 2026',matches:[
{time:'15:00',teams:'🇲🇽 Mexico vs 🇵🇱 Poland',grp:'Group F'},
{time:'18:00',teams:'🇪🇸 Spain vs 🇨🇷 Costa Rica',grp:'Group E'},
{time:'21:00',teams:'🇰🇷 South Korea vs 🇬🇭 Ghana',grp:'Group I'},
{time:'00:30',teams:'🇧🇪 Belgium vs 🇨🇦 Canada',grp:'Group J'},
]},
{day:'June 4, 2026',matches:[
{time:'18:00',teams:'🇩🇪 Germany vs 🇨🇴 Colombia',grp:'Group C'},
{time:'21:00',teams:'🇧🇷 Brazil vs 🇷🇸 Serbia',grp:'Group C'},
{time:'00:30',teams:'🇦🇷 Argentina vs 🇸🇦 Saudi Arabia',grp:'Group A'},
]},
{day:'June 5, 2026',matches:[
{time:'18:00',teams:'🇮🇹 Italy vs 🇳🇬 Nigeria',grp:'Group K'},
{time:'21:00',teams:'🇫🇷 France vs 🇲🇦 Morocco',grp:'Group A'},
]},
{day:'Round of 16 — June 26–July 2',matches:[
{time:'TBD',teams:'1A vs 2B — Stadium TBD',grp:'R16'},
{time:'TBD',teams:'1B vs 2A — Stadium TBD',grp:'R16'},
{time:'TBD',teams:'1C vs 2D — Stadium TBD',grp:'R16'},
{time:'TBD',teams:'1E vs 2F — Stadium TBD',grp:'R16'},
]},
{day:'Semi-Finals — July 14–15, 2026',matches:[
{time:'21:00',teams:'SF1: Winner QF1 vs Winner QF2',grp:'SF'},
{time:'21:00',teams:'SF2: Winner QF3 vs Winner QF4',grp:'SF'},
]},
{day:'🏆 Final — July 19, 2026 · MetLife Stadium',matches:[
{time:'21:00',teams:'🏆 World Cup Final — MetLife Stadium, New Jersey',grp:'FINAL',final:true},
]},
];
function renderSchedule(){
const wrap = document.getElementById('sched-wrap');
let html = '';
scheduleData.forEach((day,di)=>{
const side = di%2===0 ? '' : 'style="border-left:1px solid rgba(255,255,255,.05);padding-left:20px;padding-right:0"';
html += `<div class="sched-day" ${side}>
<div class="sday-head">${day.day}</div>`;
day.matches.forEach(m=>{
const cls = m.final?'sched-row final-row':'sched-row';
const tcls = m.live?'sched-time live-t':'sched-time';
html += `<div class="${cls}">
<div class="${tcls}">${m.time}</div>
<div class="sched-teams">${m.teams}</div>
<div class="sched-grp">${m.grp}</div>
</div>`;
});
html += `</div>`;
});
wrap.innerHTML = html;
}
/* ============ GROUPS DATA ============ */
const groupsData=[
{n:'Group A',teams:[{f:'🇫🇷',n:'France',p:1,w:1,d:0,l:0,gd:3,pts:3,q:true},{f:'🇦🇷',n:'Argentina',p:1,w:0,d:1,l:0,gd:0,pts:1,q:true},{f:'🇵🇪',n:'Peru',p:1,w:0,d:1,l:0,gd:0,pts:1},{f:'🇩🇰',n:'Denmark',p:1,w:0,d:0,l:1,gd:-3,pts:0}]},
{n:'Group B',teams:[{f:'🏴',n:'England',p:1,w:1,d:0,l:0,gd:2,pts:3,q:true},{f:'🇺🇸',n:'USA',p:0,w:0,d:0,l:0,gd:0,pts:0,q:true},{f:'🇸🇳',n:'Senegal',p:1,w:0,d:0,l:1,gd:-1,pts:0},{f:'🇮🇷',n:'Iran',p:1,w:0,d:0,l:1,gd:-2,pts:0}]},
{n:'Group C',teams:[{f:'🇧🇷',n:'Brazil',p:1,w:1,d:0,l:0,gd:1,pts:3,q:true},{f:'🇷🇸',n:'Serbia',p:0,w:0,d:0,l:0,gd:0,pts:0,q:true},{f:'🇨🇴',n:'Colombia',p:0,w:0,d:0,l:0,gd:0,pts:0},{f:'🇩🇪',n:'Germany',p:1,w:0,d:0,l:1,gd:-1,pts:0}]},
{n:'Group D',teams:[{f:'🇨🇲',n:'Cameroon',p:1,w:1,d:0,l:0,gd:1,pts:3,q:true},{f:'🇵🇹',n:'Portugal',p:0,w:0,d:0,l:0,gd:0,pts:0,q:true},{f:'🇺🇾',n:'Uruguay',p:0,w:0,d:0,l:0,gd:0,pts:0},{f:'🇰🇷',n:'South Korea',p:1,w:0,d:0,l:1,gd:-1,pts:0}]},
{n:'Group E',teams:[{f:'🇪🇸',n:'Spain',p:1,w:1,d:0,l:0,gd:3,pts:3,q:true},{f:'🇳🇱',n:'Netherlands',p:1,w:1,d:0,l:0,gd:1,pts:3,q:true},{f:'🇯🇵',n:'Japan',p:1,w:0,d:0,l:1,gd:-1,pts:0},{f:'🇲🇦',n:'Morocco',p:1,w:0,d:0,l:1,gd:-3,pts:0}]},
{n:'Group F',teams:[{f:'🇧🇪',n:'Belgium',p:1,w:1,d:0,l:0,gd:2,pts:3,q:true},{f:'🇲🇽',n:'Mexico',p:1,w:0,d:1,l:0,gd:0,pts:1,q:true},{f:'🇺🇸',n:'USA',p:1,w:0,d:1,l:0,gd:0,pts:1},{f:'🇵🇱',n:'Poland',p:1,w:0,d:0,l:1,gd:-2,pts:0}]},
{n:'Group G',teams:[{f:'🇭🇷',n:'Croatia',p:1,w:1,d:0,l:0,gd:2,pts:3,q:true},{f:'🇯🇵',n:'Japan',p:1,w:1,d:0,l:0,gd:1,pts:3,q:true},{f:'🏴',n:'Scotland',p:1,w:0,d:0,l:1,gd:-2,pts:0},{f:'🇨🇦',n:'Canada',p:1,w:0,d:0,l:1,gd:-1,pts:0}]},
{n:'Group H',teams:[{f:'🇪🇨',n:'Ecuador',p:1,w:1,d:0,l:0,gd:2,pts:3,q:true},{f:'🇦🇺',n:'Australia',p:1,w:1,d:0,l:0,gd:1,pts:3,q:true},{f:'🇿🇦',n:'South Africa',p:1,w:0,d:0,l:1,gd:-2,pts:0},{f:'🇸🇦',n:'Saudi Arabia',p:1,w:0,d:0,l:1,gd:-1,pts:0}]},
];
function renderGroups(){
document.getElementById('groups-container').innerHTML = groupsData.map(g=>`
<div class="group-card">
<div class="group-head"><h3>${g.n}</h3><span>Group Stage</span></div>
<table class="gtable">
<thead><tr><th>Team</th><th>P</th><th>W</th><th>GD</th><th>Pts</th></tr></thead>
<tbody>${g.teams.map(t=>`
<tr ${t.q?'class="qualify"':''}>
<td>${t.q?'<span class="qtag"></span>':''}<span class="flag16">${t.f}</span>${t.n}</td>
<td>${t.p}</td><td>${t.w}</td>
<td>${t.gd>0?'+'+t.gd:t.gd}</td>
<td><strong>${t.pts}</strong></td>
</tr>`).join('')}
</tbody>
</table>
</div>`).join('');
}
/* ============ ARTICLES DATA ============ */
const articles = [
{
n:1, badge:'featured', cat:'World Cup Guide', views:'5.2M',
title:'FIFA World Cup 2026: Full Schedule — All 104 Matches, Dates & Kickoff Times',
img:'https://images.unsplash.com/photo-1431324155629-1a6deb1dec8d?w=1200&q=80&fit=crop',
imgAlt:'FIFA World Cup 2026 stadium',
body:`<p>The <strong>FIFA World Cup 2026</strong> is the largest football tournament in history, featuring <em>48 nations</em> competing across 104 matches in the United States, Canada, and Mexico. For the first time, the World Cup expands to 48 teams with a new group stage format.</p>
<p>The tournament runs from <strong>June 11 to July 19, 2026</strong>, with the grand final staged at MetLife Stadium in East Rutherford, New Jersey — a 82,500-capacity behemoth that will witness football history.</p>`,
extra:[
{img:'https://images.unsplash.com/photo-1589487391730-58f20eb2c308?w=800&q=75&fit=crop',alt:'World Cup 2026 US venues'},
{img:'https://images.unsplash.com/photo-1508098682722-e99c43a406b2?w=800&q=75&fit=crop',alt:'World Cup stadium aerial'}
],
list:['June 11 — Opening match, Mexico City (Estadio Azteca)','June 11–July 3 — Group Stage (48 teams, 12 groups)','July 3–6 — Round of 32','July 10–13 — Round of 16','July 14–17 — Quarter-Finals','July 14–15 — Semi-Finals','July 19 — Final, MetLife Stadium, New Jersey'],
highlight:'"The biggest World Cup ever staged — three countries, 11 stadiums, 104 matches, and one golden trophy."',
},
{
n:2, badge:'analysis', cat:'Group Analysis', views:'3.8M',
title:'FIFA World Cup 2026 Groups Explained: Who Qualifies & Who Gets Eliminated',
img:'https://images.unsplash.com/photo-1553778263-73a83bab9b0c?w=1200&q=80&fit=crop',
imgAlt:'World Cup group stage football',
body:`<p>For the first time, the <strong>World Cup features 12 groups of four teams</strong>. The top two from each group automatically advance, plus the eight best third-placed teams — creating more drama and tension than ever before.</p>
<p>The <strong>Group of Death</strong> in 2026 is widely considered <em>Group A</em> (France, Argentina, Peru, Denmark) and <em>Group C</em> (Brazil, Germany, Colombia, Serbia) — both featuring former champions facing off in the opening round.</p>`,
extra:[
{img:'https://images.unsplash.com/photo-1574629810360-7efbbe195018?w=800&q=75&fit=crop',alt:'Football group stage analysis'},
],
list:['Group A: France, Argentina, Peru, Denmark — Group of Death','Group B: England, USA, Senegal, Iran','Group C: Brazil, Germany, Colombia, Serbia','Group E: Spain, Netherlands, Japan, Morocco','Group F: Belgium, Mexico, USA, Poland'],
highlight:'"With 12 groups instead of 8, every match carries weight — there are fewer guaranteed exits and more shock results."',
},
{
n:3, badge:'featured', cat:'Player Rankings', views:'4.7M',
title:'Top 10 Players to Watch at World Cup 2026 — Mbappé, Vinicius Jr. & More',
img:'https://images.unsplash.com/photo-1560272564-c83b66b1ad12?w=1200&q=80&fit=crop',
imgAlt:'Top football players World Cup 2026',
body:`<p>The <strong>2026 World Cup</strong> could be the final chapter for some of football's greatest legends, while a new generation of stars steps into the limelight. From <strong>Kylian Mbappé</strong> hunting a second title to <em>Lamine Yamal</em> becoming the youngest winner ever — this is the most compelling cast in tournament history.</p>
<p>Our analysts rated every player based on current form, tournament experience, and their nation's chances of going deep — revealing the top 10 must-watch performers.</p>`,
extra:[
{img:'https://images.unsplash.com/photo-1546519638405-a9ded02e4f66?w=800&q=75&fit=crop',alt:'Star footballer dribbling'},
{img:'https://images.unsplash.com/photo-1552674605-db6ffd4facb5?w=800&q=75&fit=crop',alt:'Football player celebrating'},
],
list:['#1 Kylian Mbappé (France) — Real Madrid, 4 goals so far','#2 Vinicius Jr. (Brazil) — Defending champion, 3 goals','#3 Jude Bellingham (England) — England\'s creative engine','#4 Lamine Yamal (Spain) — Youngest player to reach a final?','#5 Pedri (Spain) — Midfield maestro, 3 assists'],
highlight:'"Mbappé vs Vinicius — the battle for the Golden Boot could define the entire tournament narrative."',
},
{
n:4, badge:'breaking', cat:'Golden Boot Race', views:'2.1M',
title:'FIFA World Cup 2026 Golden Boot Race: Who Will Be Top Scorer?',
img:'https://images.unsplash.com/photo-1522778119026-d647f0596c20?w=1200&q=80&fit=crop',
imgAlt:'Golden Boot World Cup top scorers',
body:`<p>The <strong>Golden Boot</strong> race is already intense with the tournament in its early stages. <em>Kylian Mbappé</em> leads the chart with 4 goals after just two matches — a blistering pace that puts him on course for one of the greatest individual World Cup performances ever.</p>
<p>Historically, players who score 4+ goals in the group stage go on to win the Golden Boot in 78% of tournaments. The smart money is on Mbappé, but <strong>Harry Kane</strong>, <strong>Vinicius Jr.</strong>, and <strong>Erling Haaland</strong> are all lurking.</p>`,
list:['Kylian Mbappé (France) — 4 goals, 2 assists','Harry Kane (England) — 3 goals, 0 assists','Vinicius Jr. (Brazil) — 3 goals, 1 assist','Lautaro Martínez (Argentina) — 2 goals','Erling Haaland (Norway) — 1 goal, awaiting debut'],
highlight:'"Mbappé scored 4 goals in his first 2 matches — no player has ever done that and failed to win the Golden Boot."',
},
{
n:5, badge:'guide', cat:'Streaming Guide', views:'6.9M',
title:'How to Watch FIFA World Cup 2026 Free in Every Country — Full Streaming Guide',
img:'https://images.unsplash.com/photo-1593941707882-a5bba14938c7?w=1200&q=80&fit=crop',
imgAlt:'Streaming World Cup 2026 free online',
body:`<p>Millions worldwide are searching for how to watch every <strong>World Cup 2026</strong> match without paying. The good news: dozens of countries have <em>free-to-air broadcast rights</em>, meaning you can legally watch every game on official channels at no cost.</p>
<p>In others, a <strong>VPN + free trial</strong> of a streaming service gives full access to every group game, knockout round, and the final. Here is the complete, updated country-by-country guide.</p>`,
table:{head:['Country','Free Channel','Paid Service'],rows:[['🇬🇧 UK','BBC iPlayer / ITV Hub','TNT Sports'],['🇺🇸 USA','Telemundo (Spanish)','Fox Sports / Peacock'],['🇮🇳 India','JioTV / DD Sports','Sony LIV'],['🇦🇺 Australia','SBS On Demand','Optus Sport'],['🇩🇪 Germany','ARD / ZDF','DAZN'],['🇧🇷 Brazil','Globoplay','Globoplay Premium'],['🇫🇷 France','TF1 / M6 (free)','beIN Sports'],['🇨🇦 Canada','CTV (partial free)','TSN / RDS']]},
highlight:'"Over 5 billion viewers are expected to tune in for the World Cup 2026 Final — the most watched sporting event in human history."',
},
{
n:6, badge:'breaking', cat:'Upsets & Shocks', views:'3.3M',
title:'FIFA World Cup 2026 Biggest Upsets So Far — Shocking Results Ranked',
img:'https://images.unsplash.com/photo-1543326727-cf6c39e8f84c?w=1200&q=80&fit=crop',
imgAlt:'World Cup 2026 upset shocking result',
body:`<p>The <strong>2026 World Cup</strong> has already produced jaw-dropping upsets in the group stage. Following the shock legacy of Japan beating Germany in 2022, this year continues that tradition of giant-killing on the grandest stage.</p>
<p><em>Cameroon's 1–0 victory over South Korea</em> and <em>Ecuador's dismantling of Saudi Arabia</em> have already set social media ablaze. Here are the biggest upsets ranked by pre-match probability.</p>`,
list:['Cameroon 1–0 South Korea (Group D) — 87% chance of South Korea win','Ecuador 3–1 Saudi Arabia (Group H) — Total domination','Japan 2–1 Croatia (Group G) — Back-to-back World Cup shocks','Australia 2–0 South Africa (Group H)','Senegal 1–0 USA (Group B) — Early elimination fear'],
highlight:'"Football is the beautiful game because of exactly these moments — the 87th-minute winner for a 200/1 underdog against all logic."',
},
{
n:7, badge:'featured', cat:'Messi Watch', views:'5.5M',
title:'Lionel Messi at World Cup 2026: Will He Play? Latest Fitness Update',
img:'https://images.unsplash.com/photo-1551698618-1dfe5d97d256?w=1200&q=80&fit=crop',
imgAlt:'Lionel Messi Argentina World Cup 2026',
body:`<p><strong>Lionel Messi's</strong> participation in the 2026 World Cup has been the most debated topic in world football. After winning the 2022 World Cup in Qatar — completing the greatest career in the sport's history — the question was always: <em>will the GOAT return for one final dance?</em></p>
<p>The answer, confirmed by Argentina's coach, is <strong>yes</strong>. Messi, 38, has defied critics and medical doubters. He joined Argentina's squad after a full season at Inter Miami and arrived in perfect fitness according to team doctors.</p>`,
extra:[{img:'https://images.unsplash.com/photo-1558618666-fcd25c85cd64?w=800&q=75&fit=crop',alt:'Argentina World Cup 2026'}],
list:['Age at tournament: 38 years, 7 months','Club form 2025–26: 23 goals, 18 assists for Inter Miami','Argentina Group A games: vs France, Denmark, Peru','Current goals at 2026 WC: 1 goal, 1 assist','Career World Cup record: 13 goals, 8 assists (4 tournaments)'],
highlight:'"One final World Cup. One last chance. Messi walks onto the field at 38 and the stadium holds its breath."',
},
{
n:8, badge:'breaking', cat:'Ronaldo Watch', views:'4.9M',
title:'Cristiano Ronaldo World Cup 2026: His Last Dance? Everything We Know',
img:'https://images.unsplash.com/photo-1547941126-3d5322b218b0?w=1200&q=80&fit=crop',
imgAlt:'Cristiano Ronaldo Portugal World Cup 2026',
body:`<p>For <strong>Cristiano Ronaldo</strong>, the <em>2026 World Cup</em> was supposed to be impossible — too old, they said. But CR7, now 41, has silenced every doubter with a stunning domestic season in Saudi Arabia, finishing as the Saudi Pro League's top scorer for the third consecutive year.</p>
<p>Portugal coach Roberto Martínez confirmed that Ronaldo will be <strong>captain and starting striker</strong> for all group games. His fitness metrics reportedly rival players 15 years younger — a physical phenomenon that defies science.</p>`,
list:['Age at tournament: 41 years, 2 months — oldest outfield player','Portugal Group D: vs Cameroon, Uruguay, South Korea','2025–26 Al Nassr goals: 42 goals in 38 matches','Career WC record: 9 goals across 5 tournaments','Could become the first player to appear in 6 World Cups'],
highlight:'"At 41, Ronaldo has more goals than most players half his age. Whether you love him or not — what he does to his body is inhuman."',
},
{
n:9, badge:'analysis', cat:'Premier League Season Review', views:'2.8M',
title:'Premier League 2025–26 Final Table: Champions, Relegated Teams & Records',
img:'https://images.unsplash.com/photo-1577223625816-7546f13df25d?w=1200&q=80&fit=crop',
imgAlt:'Premier League 2025-26 season review',
body:`<p>The <strong>Premier League 2025–26 season</strong> has concluded, delivering one of the most dramatic title races in the competition's history. <em>Arsenal</em> finally broke their 22-year title drought, edging out Manchester City by just two points on the final day.</p>
<p>Three teams were relegated after a brutal bottom-half battle, while <strong>Bukayo Saka</strong> claimed the Golden Boot with 28 goals — the first Arsenal player to do so since Thierry Henry in 2004.</p>`,
table:{head:['Position','Team','Pts','GD'],rows:[['1 🏆','Arsenal','89','+67'],['2','Manchester City','87','+58'],['3','Liverpool','83','+52'],['4','Chelsea','76','+34'],['18 ⬇','Ipswich Town','31','-41'],['19 ⬇','Southampton','28','-49'],['20 ⬇','Leicester City','24','-56']]},
highlight:'"Arsenal. Champions. After 22 years. The Emirates erupted. North London is red."',
},
{
n:10, badge:'breaking', cat:'Transfer Window', views:'3.1M',
title:'Top 10 Premier League Transfers Summer 2026 — Biggest Moves & Record Fees',
img:'https://images.unsplash.com/photo-1587174486073-ae5e5cff23aa?w=1200&q=80&fit=crop',
imgAlt:'Premier League summer transfers 2026',
body:`<p>The <strong>summer 2026 transfer window</strong> is shaping up to be the most expensive in Premier League history. With several clubs flush with cash from new broadcast deals and Champions League revenue, expect fees that shatter previous records.</p>
<p>The biggest story is <strong>Rafael Leão's</strong> reported stay at AC Milan despite Premier League interest — while arrivals of several top talents into England continue to elevate the league's global status.</p>`,
list:['Florian Wirtz → Liverpool — £120m (reported)','Victor Osimhen → Chelsea — £95m','Pedro Neto → Arsenal — £72m','Mikel Merino → Man City — £65m','Alexander Isak → Man Utd — £95m (bid rejected)','Nico Williams stays at Athletic Bilbao','Rafael Leão stays at AC Milan — PL dream off'],
highlight:'"The Premier League will spend over £2 billion this summer — for context, the entire 1992–93 season cost clubs £47 million."',
},
{
n:11, badge:'analysis', cat:'Champions League', views:'2.6M',
title:'Champions League 2025–26: Final Review, Best Goals, Records & MVP',
img:'https://images.unsplash.com/photo-1614632537197-38a17061c2bd?w=1200&q=80&fit=crop',
imgAlt:'UEFA Champions League final 2025-26',
body:`<p>The <strong>2025–26 UEFA Champions League</strong> Final was played at the Wembley Stadium in London on June 1, 2026. <em>Real Madrid</em> faced a resurgent <em>Inter Milan</em> in what many neutrals predicted would be a tactical masterclass from both sides.</p>
<p>With <strong>Kylian Mbappé</strong> now available after France duty and <strong>Vinicius Jr.</strong> firing on all cylinders, Real Madrid entered as heavy favourites. But Inter's defensive organisation and rapid counter-attacking made this a genuine 50–50 final.</p>`,
list:['Most goals in a single UCL season: Mbappé (17 goals)','Most assists in UCL 2025–26: Kevin De Bruyne (11)','Final venue: Wembley Stadium, London','Highest attendance: Man City vs Real Madrid QF — 93,200','Best save of tournament: Alisson vs PSG SF'],
highlight:'"Wembley was deafening. 90,000 people. One trophy. Two of the greatest clubs on earth. This was football at its purest."',
},
{
n:12, badge:'featured', cat:'La Liga Title Race', views:'3.7M',
title:'La Liga 2025–26: Barcelona vs Real Madrid — How the Title Was Decided',
img:'https://images.unsplash.com/photo-1551958219-acbc595d7b5a?w=1200&q=80&fit=crop',
imgAlt:'El Clasico La Liga Barcelona vs Real Madrid 2026',
body:`<p>The <strong>La Liga 2025–26 title race</strong> came down to the last Clásico of the season — <em>Barcelona hosting Real Madrid</em> at Camp Nou on May 17, 2026. A match that would decide the championship in the most dramatic fashion possible.</p>
<p>Barcelona, powered by <strong>Lamine Yamal</strong> (17 goals, 14 assists) and <strong>Pedri</strong> in unplayable form, entered the match with a one-point lead. Real Madrid needed a win. What followed was 90 minutes of total chaos, brilliance, and a late twist that will be talked about for decades.</p>`,
mini:[{n:'92',l:'Yamal Goals'},{n:'14',l:'Assists'},{n:'3',l:'El Clásicos'},{n:'1pt',l:'Final Margin'}],
highlight:'"The last Clásico. The title on the line. Lamine Yamal at Camp Nou. Sport doesn't get any better than this."',
},
{
n:13, badge:'fantasy', cat:'Fantasy Football', views:'2.4M',
title:'World Cup 2026 Fantasy Football: Best XI, Captain Picks & Players to Avoid',
img:'https://images.unsplash.com/photo-1508098682722-e99c43a406b2?w=1200&q=80&fit=crop',
imgAlt:'Fantasy football World Cup 2026 best picks',
body:`<p><strong>Fantasy World Cup 2026</strong> is live and the best managers are already making decisive picks. With 104 matches to score points from, team selection and captaincy decisions are everything. Our analysts have modelled player performance data, injury risk, and fixture difficulty to give you the optimal squad.</p>
<p>The <strong>captain pick is clear</strong>: <em>Kylian Mbappé</em> is the form player, has 4 goals already, and France have an easy path to the semi-finals. Doubling up on his points is the correct play for the opening rounds.</p>`,
list:['GK: Alisson Becker (Brazil) — clean sheet machine','DEF: Theo Hernandez (France) — attacking wingback, 2 assists','MID: Pedri (Spain) — 3 assists, excellent fixture','FWD: Kylian Mbappé (France) ⭐ CAPTAIN PICK','FWD: Vinicius Jr. (Brazil) — essential','AVOID: Erling Haaland — Norway have tough group, limited games','BUDGET GEM: Lamine Yamal — incredible value at low price'],
highlight:'"Mbappé as captain is not a prediction — it is an obligation. 4 goals in 2 games. Triple him up."',
},
{
n:14, badge:'analysis', cat:'Predictions & Odds', views:'3.0M',
title:'World Cup 2026 Predictions: Dark Horses, Winner Odds & Bracket Analysis',
img:'https://images.unsplash.com/photo-1508098682722-e99c43a406b2?w=1200&q=80&fit=crop',
imgAlt:'World Cup 2026 predictions odds bracket',
body:`<p>Who wins the <strong>FIFA World Cup 2026</strong>? Our analytics team has processed every team's form, squad depth, historical tournament performance, and group fixture difficulty to generate a probability model — and the results might surprise you.</p>
<p><em>France and Brazil</em> are joint-favourites at 5/1 with most bookmakers, while <strong>Spain and England</strong> follow closely at 6/1. But the most interesting story is the dark horse: <em>Portugal</em>, who at 9/1 offer the best value in the market.</p>`,
table:{head:['Team','Win Odds','Path to Final'],rows:[['🇫🇷 France','5/1','Favourable draw, Mbappé in form'],['🇧🇷 Brazil','5/1','Vinicius + Alisson = complete team'],['🇪🇸 Spain','6/1','Best squad depth, Yamal factor'],['🏴 England','6/1','Bellingham, Kane, home continent advantage'],['🇵🇹 Portugal','9/1 ⭐','Ronaldo\'s last chance, strong squad'],['🇦🇷 Argentina','11/1','Defending champions, Messi factor']]},
highlight:'"Portugal at 9/1 is the value bet of the tournament. Ronaldo at 41 has nothing to prove and everything to win."',
},
{
n:15, badge:'breaking', cat:'Breaking News', views:'1.8M',
title:'Saud Abdulhamid Passport Stolen at Wedding: Saudi Arabia World Cup Doubt?',
img:'https://images.unsplash.com/photo-1544298621-35a989e4e54a?w=1200&q=80&fit=crop',
imgAlt:'Saudi Arabia World Cup 2026',
body:`<p>Saudi Arabia defender <strong>Saud Abdulhamid</strong> has emerged as a World Cup doubt after the bizarre incident in which his passport was stolen at a family wedding just days before the team was due to travel to their group stage base in Los Angeles.</p>
<p>The AS Roma right-back, who has been one of <em>Saudi Arabia's most important players</em> in their World Cup qualifying campaign, is now racing against time with Saudi and US immigration officials working to resolve the documentation issue.</p>`,
list:['Incident: Passport stolen at wedding in Riyadh, May 29','Player: Saud Abdulhamid, AS Roma, Saudi Arabia','Position: Right-back, key defensive player','Update: Saudi FA working with FIFA and US authorities','First match: Saudi Arabia vs Ecuador, June 12'],
highlight:'"Only in football — a player misses a World Cup not because of injury or suspension, but because someone stole his passport at a wedding."',
},
{
n:16, badge:'breaking', cat:'Transfer Update', views:'1.9M',
title:'Rafael Leão Stays at AC Milan: Why Every PL Club Failed & What It Means',
img:'https://images.unsplash.com/photo-1563806960-75012dc6a2cc?w=1200&q=80&fit=crop',
imgAlt:'Rafael Leao AC Milan staying Premier League',
body:`<p><strong>Rafael Leão</strong> will not be moving to the Premier League this summer, according to confirmed reports from Sky Sports and multiple Italian sources. The AC Milan forward, who has been linked with <em>Chelsea, Arsenal, and Manchester United</em>, has signed a new contract extension through 2029.</p>
<p>For Premier League clubs, this is a significant blow. Leão, 26, is widely regarded as one of the top five wingers in world football — a left-footed dribbler with 18 league goals and 12 assists last season. His decision to stay in Milan ends three summers of speculation.</p>`,
list:['New contract: AC Milan, signed until 2029','Reported PL interest: Chelsea, Arsenal, Man United, Newcastle','Reason for staying: Champions League ambition + Milan loyalty','2025–26 stats: 18 goals, 12 assists in Serie A','Market value: £95 million (Transfermarkt)'],
highlight:'"Some players choose history over money. Leão chose the red and black shirt over the Premier League gold rush."',
},
{
n:17, badge:'featured', cat:'England Preview', views:'2.7M',
title:'Jude Bellingham at World Cup 2026: Can He Finally Win It for England?',
img:'https://images.unsplash.com/photo-1571019613454-1cb2f99b2d8b?w=1200&q=80&fit=crop',
imgAlt:'Jude Bellingham England World Cup 2026',
body:`<p><strong>Jude Bellingham</strong> carries the weight of an entire nation's football dreams. At just 22, the Real Madrid midfielder has already won a La Liga title, a Champions League, and established himself as arguably the <em>best midfielder on the planet</em>. But England have not won a major trophy since 1966. Can Bellingham finally end that drought?</p>
<p>The evidence suggests yes. England's squad depth is the strongest in a generation: <strong>Harry Kane</strong> leads the attack, <strong>Bukayo Saka</strong> terrorises defences from the right, and now Bellingham orchestrates everything from deep. This is England's best chance in 60 years.</p>`,
extra:[{img:'https://images.unsplash.com/photo-1587174486073-ae5e5cff23aa?w=800&q=75&fit=crop',alt:'England squad training World Cup 2026'}],
list:['Bellingham 2025–26 stats: 24 goals, 16 assists for Real Madrid','England WC 2026 odds: 6/1 (joint 3rd favourite)','Group B opponents: USA, Senegal, Iran (favourable draw)','Key partnerships: Bellingham + Kane + Saka = world-class trio','Last England WC win: 1966 (60 years)'],
highlight:'"Bellingham plays with the confidence of a man who has already won everything. Except the World Cup. That is what drives him."',
},
{
n:18, badge:'guide', cat:'Venues Guide', views:'4.2M',
title:'World Cup 2026 Host Cities: Complete Guide to All 11 Venues in USA, Canada & Mexico',
img:'https://images.unsplash.com/photo-1589487391730-58f20eb2c308?w=1200&q=80&fit=crop',
imgAlt:'World Cup 2026 host stadiums USA Canada Mexico',
body:`<p>The <strong>2026 FIFA World Cup</strong> is spread across 11 magnificent stadiums in three countries. The USA hosts the majority with 9 venues, while Canada adds 2 and Mexico adds the legendary Estadio Azteca for the opening match — a nod to history as it last hosted a World Cup in 1986.</p>
<p>The <strong>MetLife Stadium</strong> in East Rutherford, New Jersey, will host the Final on July 19, 2026. Seating 82,500, it will be one of the largest attendances ever for a World Cup Final. Here is your complete guide to every venue, city, and how to get there.</p>`,
table:{head:['Stadium','City','Capacity','Key Matches'],rows:[['MetLife Stadium','New Jersey, USA','82,500','Final 🏆'],['SoFi Stadium','Los Angeles, USA','77,500','SF + 8 matches'],['AT&T Stadium','Dallas, USA','80,000','QF + 8 matches'],['Estadio Azteca','Mexico City, MX','87,500','Opening Match ⭐'],['Levi\'s Stadium','San Francisco, USA','68,500','6 matches'],['BC Place','Vancouver, Canada','54,500','6 matches'],['BMO Field','Toronto, Canada','45,000','6 matches'],['Hard Rock Stadium','Miami, USA','65,326','QF + matches']]},
highlight:'"From the 87,500-capacity Azteca in Mexico City to the gleaming MetLife in New Jersey — this World Cup is America at its most spectacular."',
},
{
n:19, badge:'analysis', cat:'Tournament Analysis', views:'3.4M',
title:'World Cup 2026 vs 2022: 10 Biggest Differences, New Rules & Format Changes',
img:'https://images.unsplash.com/photo-1431324155629-1a6deb1dec8d?w=1200&q=80&fit=crop',
imgAlt:'World Cup 2026 vs 2022 comparison',
body:`<p>The <strong>2026 World Cup</strong> is the most different from its predecessor in the tournament's 96-year history. FIFA's decision to expand from 32 to <em>48 teams</em> and introduce a new 12-group format fundamentally changes how football's greatest competition works.</p>
<p>Gone are the classic 8 groups of 4. In comes a new <strong>round of 32 knockout stage</strong>, meaning more games, more upsets, and more drama for fans worldwide. Here are the 10 biggest changes you need to know.</p>`,
list:['Teams: 32 (2022) → 48 (2026) — 16 more nations qualify','Groups: 8 groups of 4 → 12 groups of 4','New stage: Round of 32 added (never existed before)','Matches: 64 (Qatar 2022) → 104 (USA/Canada/Mexico 2026)','Countries hosting: 1 (Qatar) → 3 (USA, Canada, Mexico)','Semi-automatic offside: Enhanced technology for faster decisions','Stadiums: 8 venues → 11 venues','Duration: 29 days → 39 days total','Climate: Desert heat → temperate US summer','VAR upgrades: Faster review times, clearer communication'],
highlight:'"104 matches. 39 days. 3 countries. 48 nations. This isn\'t just a bigger World Cup — it\'s a different sport entirely."',
},
{
n:20, badge:'breaking', cat:'Live Goals Tracker', views:'8.1M',
title:'Every World Cup 2026 Goal Scored — Live Updated Tracker by Match & Player',
img:'https://images.unsplash.com/photo-1574629810360-7efbbe195018?w=1200&q=80&fit=crop',
imgAlt:'World Cup 2026 goals live tracker all goals scored',
body:`<p>This is the <strong>definitive live goals tracker</strong> for the 2026 FIFA World Cup — updated after every match with full details of every goal scored, including assist data, minute, and goal type. Bookmark this page and return after every match.</p>
<p>So far in the <strong>2026 World Cup</strong>, <em>47 goals have been scored across 14 matches</em> — an average of 3.4 goals per game, slightly above the typical World Cup average of 2.6. The tournament is delivering spectacular attacking football.</p>`,
table:{head:['Player','Team','Goals','Latest Goal'],rows:[['Kylian Mbappé','🇫🇷 France','4','67\' vs Argentina'],['Harry Kane','🏴 England','3','81\' vs Iran'],['Vinicius Jr.','🇧🇷 Brazil','3','54\' vs Germany'],['Lautaro Martínez','🇦🇷 Argentina','2','23\' vs France'],['Jude Bellingham','🏴 England','2','14\' vs Iran'],['Lamine Yamal','🇪🇸 Spain','2','19\' vs Morocco']]},
mini:[{n:'47',l:'Total Goals'},{n:'3.4',l:'Per Game'},{n:'14',l:'Matches'},{n:'6\'',l:'Fastest Goal'}],
highlight:'"47 goals in 14 matches. This World Cup is delivering at a historic rate. Come back after every match — this tracker updates within minutes of full-time."',
},
];
function renderTOC(){
document.getElementById('toc-grid').innerHTML = articles.map(a=>`
<div class="toc-item" onclick="scrollToArt(${a.n})">
<span class="toc-n">${a.n}</span>
<span class="toc-t">${a.title}</span>
</div>`).join('');
}
function scrollToArt(n){
const el = document.getElementById('art-'+n);
if(el) el.scrollIntoView({behavior:'smooth',block:'start'});
}
function renderArticles(){
const c = document.getElementById('articles-container');
c.innerHTML = articles.map(a=>{
let extraImgs='', listHtml='', tableHtml='', miniHtml='';
if(a.extra && a.extra.length===2){
extraImgs=`<div class="art-img-row">
<div><img src="${a.extra[0].img}" alt="${a.extra[0].alt}" loading="lazy"><div class="art-caption">${a.extra[0].alt}</div></div>
<div><img src="${a.extra[1].img}" alt="${a.extra[1].alt}" loading="lazy"><div class="art-caption">${a.extra[1].alt}</div></div>
</div>`;
}else if(a.extra && a.extra.length===1){
extraImgs=`<div class="art-img-single"><img src="${a.extra[0].img}" alt="${a.extra[0].alt}" loading="lazy"><div class="art-caption">${a.extra[0].alt}</div></div>`;
}
if(a.list){
listHtml=`<ul class="art-list">${a.list.map(i=>`<li>${i}</li>`).join('')}</ul>`;
}
if(a.table){
tableHtml=`<table class="art-table"><thead><tr>${a.table.head.map(h=>`<th>${h}</th>`).join('')}</tr></thead><tbody>${a.table.rows.map(r=>`<tr>${r.map(td=>`<td>${td}</td>`).join('')}</tr>`).join('')}</tbody></table>`;
}
if(a.mini){
miniHtml=`<div class="mini-stats">${a.mini.map(m=>`<div class="mstat"><div class="mstat-n">${m.n}</div><div class="mstat-l">${m.l}</div></div>`).join('')}</div>`;
}
return `<article class="article-block fade-up" id="art-${a.n}">
<div class="art-hero">
<img src="${a.img}" alt="${a.imgAlt}" loading="lazy">
<div class="art-hero-overlay"></div>
<div class="art-num">${a.n}</div>
<div class="art-hero-meta">
<div class="art-badges"><span class="art-badge ${a.badge}">${a.badge==='featured'?'⭐ Featured':a.badge==='breaking'?'🔴 Breaking':a.badge==='guide'?'📖 Guide':a.badge==='fantasy'?'🎮 Fantasy':'📊 Analysis'}</span><span class="art-badge analysis">${a.cat}</span></div>
<h2 class="art-h2">${a.title}</h2>
</div>
</div>
<div class="art-body">
<div class="art-meta-row">
<span class="art-cat">${a.cat}</span>
<div class="art-divider"></div>
<span class="art-date">June 1, 2026</span>
<div class="art-divider"></div>
<span class="art-readtime">SportsLNV Analysis</span>
<span class="art-traffic">📈 ${a.views} views</span>
</div>
<div class="art-text">${a.body}</div>
${extraImgs}
${listHtml}
${tableHtml}
${miniHtml}
${a.highlight?`<div class="art-highlight">${a.highlight}</div>`:''}
<div class="art-views">
<div class="art-views-n">${a.views}</div>
<div class="art-views-l">Traffic Estimate Today</div>
</div>
<div class="art-share">
<button class="share-btn">🐦 Share on X</button>
<button class="share-btn">📘 Facebook</button>
<button class="share-btn">📱 WhatsApp</button>
<button class="share-btn">🔗 Copy Link</button>
</div>
</div>
</article>`;
}).join('');
}
/* ============ INIT ============ */
renderRankings('goals');
renderSchedule();
renderGroups();
renderTOC();
renderArticles();
/* ============ SCROLL SPY ============ */
const tabs = document.querySelectorAll('.nav-tab');
const sections = ['live-scores','player-rankings','schedule','groups','articles'];
window.addEventListener('scroll',()=>{
let cur='';
sections.forEach(id=>{
const el=document.getElementById(id);
if(el && window.scrollY >= el.offsetTop - 120) cur=id;
});
tabs.forEach(t=>{
t.classList.toggle('active', t.getAttribute('href')==='#'+cur);
});
});
/* ============ INTERSECTION OBSERVER for fade-up ============ */
const io = new IntersectionObserver(entries=>{
entries.forEach(e=>{ if(e.isIntersecting) e.target.style.animationPlayState='running'; });
},{threshold:.05});
document.querySelectorAll('.fade-up').forEach(el=>{
el.style.animationPlayState='paused';
io.observe(el);
});
</script>
</body>
</html>
HTMLEOF
echo "File created: $(wc -c < /mnt/user-data/outputs/fifa-world-cup-2026-hub.html) bytes"
Related News
Breaking NewsHow to Watch FIFA World Cup 2026 Free — Full Streaming Guide by Country
3 days ago0
Breaking NewsSaudi Arabia's Saud Abdulhamid Misses Training After Passport Stolen at Wedding — World Cup Doubt?
3 days ago0
Breaking NewsWhere to Watch FIFA World Cup 2026 — TV Channels, Live Streaming & Free Options
3 days ago0
Breaking News2026 World Cup Anthem "Dai Dai" by Shakira & Burna Boy — Official Video Explained
3 days ago0