Spaces:
Running
Running
| <html lang="en"> | |
| <head> | |
| <meta charset="UTF-8"> | |
| <meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=no"> | |
| <title>FIFA FC 26 Pack Opener</title> | |
| <style> | |
| *{margin:0;padding:0;box-sizing:border-box} | |
| :root{--bg:#0a0e1a;--card-bg:#1a1e2e;--gold:#ffd700;--icon-gold:#e8b800;--epic-purple:#9b59b6;--rare-blue:#3498db;--gold2:#f1c40f;--common-green:#27ae60;--text:#fff;--accent:#ff6b35} | |
| body{font-family:'Segoe UI',system-ui,-apple-system,sans-serif;background:var(--bg);color:var(--text);min-height:100vh;overflow-x:hidden} | |
| .screen{display:none;min-height:100vh;padding:20px} | |
| .screen.active{display:block} | |
| /* Main Menu */ | |
| #menu{background:linear-gradient(135deg,#0a0e1a 0%,#1a1040 50%,#0a0e1a 100%);text-align:center;padding-top:40px} | |
| .logo{font-size:3.5em;font-weight:900;background:linear-gradient(45deg,var(--gold),#ff6b35,var(--gold));-webkit-background-clip:text;-webkit-text-fill-color:transparent;background-clip:text;text-shadow:0 0 30px rgba(255,215,0,.3);margin-bottom:5px} | |
| .subtitle{font-size:1.1em;color:#8892b0;margin-bottom:30px;letter-spacing:2px} | |
| .coins-display{background:linear-gradient(135deg,#1a1e2e,#2a2e3e);border:2px solid var(--gold);border-radius:15px;padding:15px 30px;display:inline-flex;align-items:center;gap:12px;margin-bottom:30px;box-shadow:0 0 20px rgba(255,215,0,.2)} | |
| .coins-display .coin-icon{width:30px;height:30px;background:var(--gold);border-radius:50%;display:flex;align-items:center;justify-content:center;font-weight:900;color:#000;font-size:14px} | |
| .coins-display .coin-amount{font-size:1.5em;font-weight:700;color:var(--gold)} | |
| .packs-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(280px,1fr));gap:20px;max-width:900px;margin:0 auto;padding:20px} | |
| .pack-card{background:linear-gradient(145deg,var(--card-bg),#252a3a);border-radius:16px;padding:25px;cursor:pointer;transition:all .3s;position:relative;overflow:hidden;border:2px solid transparent} | |
| .pack-card:hover{transform:translateY(-5px);box-shadow:0 15px 40px rgba(0,0,0,.4)} | |
| .pack-card.pack-icon{border-color:#e8b800}.pack-card.pack-icon:hover{box-shadow:0 0 30px rgba(232,184,0,.3)} | |
| .pack-card.pack-icon-pro{border-color:#ff6b35;background:linear-gradient(145deg,#2a1a0a,#3a2a1a)}.pack-card.pack-icon-pro:hover{box-shadow:0 0 30px rgba(255,107,53,.3)} | |
| .pack-card.pack-gold{border-color:var(--gold2)}.pack-card.pack-gold:hover{box-shadow:0 0 30px rgba(241,196,15,.3)} | |
| .pack-card.pack-rare{border-color:var(--rare-blue)}.pack-card.pack-rare:hover{box-shadow:0 0 30px rgba(52,152,219,.3)} | |
| .pack-card.pack-epic{border-color:var(--epic-purple)}.pack-card.pack-epic:hover{box-shadow:0 0 30px rgba(155,89,182,.3)} | |
| .pack-card.pack-common{border-color:var(--common-green)}.pack-card.pack-common:hover{box-shadow:0 0 30px rgba(39,174,96,.3)} | |
| .pack-card.pack-mega{border-color:#ff3366;background:linear-gradient(145deg,#1a0a1a,#2a1a2a)}.pack-card.pack-mega:hover{box-shadow:0 0 30px rgba(255,51,102,.3)} | |
| .pack-name{font-size:1.4em;font-weight:800;margin-bottom:8px} | |
| .pack-desc{font-size:.85em;color:#8892b0;margin-bottom:12px} | |
| .pack-price{display:inline-flex;align-items:center;gap:6px;background:rgba(255,215,0,.15);padding:6px 14px;border-radius:20px;font-weight:700;color:var(--gold);font-size:.9em} | |
| .pack-items{font-size:.8em;color:#667;margin-top:8px} | |
| .pack-card .spark{position:absolute;top:0;right:0;width:60px;height:60px;opacity:.15} | |
| /* Pack Opening */ | |
| #opener{background:radial-gradient(ellipse at center,#1a1040 0%,#0a0e1a 70%);text-align:center} | |
| .back-btn{position:fixed;top:15px;left:15px;z-index:100;background:rgba(26,30,46,.9);border:1px solid #333;color:var(--text);padding:8px 16px;border-radius:8px;cursor:pointer;font-size:.9em;backdrop-filter:blur(10px);transition:all .3s} | |
| .back-btn:hover{background:var(--accent);border-color:var(--accent)} | |
| .coins-bar{position:fixed;top:15px;right:15px;z-index:100;background:rgba(26,30,46,.9);border:1px solid var(--gold);padding:8px 16px;border-radius:8px;display:flex;align-items:center;gap:8px;backdrop-filter:blur(10px)} | |
| .coins-bar .coin-icon-sm{width:22px;height:22px;background:var(--gold);border-radius:50%;display:flex;align-items:center;justify-content:center;font-weight:900;color:#000;font-size:10px} | |
| .coins-bar .coin-amt{color:var(--gold);font-weight:700;font-size:.95em} | |
| /* Pack Opening Animation */ | |
| .pack-opening{display:flex;flex-direction:column;align-items:center;justify-content:center;min-height:100vh;padding:80px 20px} | |
| .pack-visual{width:250px;height:350px;border-radius:20px;display:flex;align-items:center;justify-content:center;position:relative;margin-bottom:40px;animation:float 3s ease-in-out infinite} | |
| @keyframes float{0%,100%{transform:translateY(0)}50%{transform:translateY(-15px)}} | |
| @keyframes shake{0%,100%{transform:rotate(-2deg)}50%{transform:rotate(2deg)}} | |
| @keyframes cardReveal{0%{transform:scale(.5) rotateY(90deg);opacity:0}50%{transform:scale(1.1) rotateY(-10deg);opacity:1}100%{transform:scale(1) rotateY(0);opacity:1}} | |
| @keyframes glow{0%,100%{box-shadow:0 0 30px rgba(255,215,0,.3)}50%{box-shadow:0 0 60px rgba(255,215,0,.6)}} | |
| @keyframes particle{0%{transform:translateY(0) scale(1);opacity:1}100%{transform:translateY(-200px) scale(0);opacity:0}} | |
| .open-btn{background:linear-gradient(135deg,var(--gold),#ff6b35);border:none;color:#000;padding:18px 50px;border-radius:12px;font-size:1.2em;font-weight:800;cursor:pointer;transition:all .3s;text-transform:uppercase;letter-spacing:2px;box-shadow:0 5px 25px rgba(255,107,53,.3)} | |
| .open-btn:hover{transform:scale(1.05);box-shadow:0 8px 35px rgba(255,107,53,.5)} | |
| .open-btn:active{transform:scale(.98)} | |
| .open-btn:disabled{opacity:.5;cursor:not-allowed;transform:none} | |
| /* Player Card */ | |
| .card-container{perspective:1000px;margin:20px auto} | |
| .player-card{width:100%;height:auto;min-height:100px;border-radius:16px;position:relative;overflow:hidden;margin:0 auto;animation:cardReveal .5s ease-out;transition:all .2s} | |
| .player-card:hover{transform:scale(1.03)} | |
| .player-card .card-bg{position:absolute;top:0;left:0;width:100%;height:100%} | |
| .card-icon{background:linear-gradient(180deg,#e8b800 0%,#c4960a 30%,#a07800 70%,#e8b800 100%)} | |
| .card-epic{background:linear-gradient(180deg,#9b59b6 0%,#6c3483 50%,#9b59b6 100%)} | |
| .card-gold{background:linear-gradient(180deg,#f1c40f 0%,#d4a90a 50%,#f1c40f 100%)} | |
| .card-rare{background:linear-gradient(180deg,#3498db 0%,#2471a3 50%,#3498db 100%)} | |
| .card-common{background:linear-gradient(180deg,#27ae60 0%,#1e8449 50%,#27ae60 100%)} | |
| .card-inner{position:relative;z-index:2;height:100%;display:flex;flex-direction:column;padding:12px} | |
| .card-ovr{font-size:2.8em;font-weight:900;color:#fff;text-shadow:2px 2px 4px rgba(0,0,0,.5)} | |
| .card-pos{font-size:1em;font-weight:700;color:rgba(255,255,255,.9);text-transform:uppercase;margin-bottom:4px} | |
| .card-svg-wrap{flex:1;display:flex;align-items:center;justify-content:center} | |
| .card-svg-wrap svg{width:120px;height:120px;border-radius:50%;border:3px solid rgba(255,255,255,.3);background:rgba(0,0,0,.3)} | |
| .card-name{font-size:1.15em;font-weight:800;text-align:center;color:#fff;text-shadow:2px 2px 4px rgba(0,0,0,.7);margin-top:auto;padding-top:8px;line-height:1.2} | |
| .card-meta{display:flex;justify-content:space-between;align-items:center;margin-top:6px;font-size:.8em;color:rgba(255,255,255,.8)} | |
| .card-nation{font-weight:600} | |
| .card-club{font-weight:600} | |
| /* Cards Grid */ | |
| .cards-grid{display:grid;grid-template-columns:1fr;gap:12px;max-width:500px;margin:12px auto;padding:8px} | |
| .section-title{font-size:1.5em;font-weight:800;text-align:center;margin:20px 0;color:var(--gold);text-transform:uppercase;letter-spacing:2px} | |
| /* Particles */ | |
| .particle{position:fixed;width:6px;height:6px;border-radius:50%;pointer-events:none;z-index:1000;animation:particle 1s ease-out forwards} | |
| /* Loading */ | |
| .loading{display:flex;align-items:center;justify-content:center;min-height:100vh;flex-direction:column;gap:20px} | |
| .loading-spinner{width:60px;height:60px;border:4px solid #333;border-top-color:var(--gold);border-radius:50%;animation:spin 1s linear infinite} | |
| @keyframes spin{to{transform:rotate(360deg)}} | |
| /* Scrollbar */ | |
| ::-webkit-scrollbar{width:8px} | |
| ::-webkit-scrollbar-track{background:var(--bg)} | |
| ::-webkit-scrollbar-thumb{background:#333;border-radius:4px} | |
| ::-webkit-scrollbar-thumb:hover{background:#555} | |
| @media(max-width:600px){.logo{font-size:2.5em}.packs-grid{grid-template-columns:1fr}.player-card{width:260px;height:380px}.cards-grid{grid-template-columns:1fr}} | |
| </style> | |
| </head> | |
| <body> | |
| <!-- Main Menu --> | |
| <div id="menu" class="screen active"> | |
| <div class="logo">FC 26</div> | |
| <div class="subtitle">ULTIMATE TEAM PACK OPENER</div> | |
| <div class="coins-display"> | |
| <div class="coin-icon">⚽</div> | |
| <div class="coin-amount" id="menuCoins">999,999</div> | |
| </div> | |
| <div class="packs-grid" id="packsGrid"></div> | |
| </div> | |
| <!-- Pack Opener --> | |
| <div id="opener" class="screen"> | |
| <button class="back-btn" onclick="showMenu()">← Back</button> | |
| <div class="coins-bar"> | |
| <div class="coin-icon-sm">⚽</div> | |
| <div class="coin-amt" id="openerCoins">999,999</div> | |
| </div> | |
| <div class="pack-opening" id="packContent"></div> | |
| </div> | |
| <script> | |
| // ============ SOFIFA PLAYER PHOTOS ============ | |
| const PLAYER_PHOTOS = { | |
| "Pelé": "https://cdn.sofifa.org/players/4/19/107298.png", | |
| "Zidane": "https://cdn.sofifa.org/players/4/19/240311.png", | |
| "Ronaldo Nazário": "https://cdn.sofifa.org/players/4/19/171919.png", | |
| "Henry": "https://cdn.sofifa.org/players/4/19/183442.png", | |
| "Xavi": "https://cdn.sofifa.org/players/4/19/179528.png", | |
| "Iniesta": "https://cdn.sofifa.org/players/4/19/41.png", | |
| "Mbappé": "https://cdn.sofifa.org/players/4/19/231747.png", | |
| "Vinícius Jr.": "https://cdn.sofifa.org/players/4/19/238794.png", | |
| "Salah": "https://cdn.sofifa.org/players/4/19/209331.png", | |
| "De Bruyne": "https://cdn.sofifa.org/players/4/19/192985.png", | |
| "Kane": "https://cdn.sofifa.org/players/4/19/202126.png", | |
| "Son Heung-min": "https://cdn.sofifa.org/players/4/19/210257.png", | |
| "Neymar Jr.": "https://cdn.sofifa.org/players/4/19/190871.png", | |
| "Rodri": "https://cdn.sofifa.org/players/4/19/198329.png", | |
| "Kroos": "https://cdn.sofifa.org/players/4/19/182521.png", | |
| "Bruno Fernandes": "https://cdn.sofifa.org/players/4/19/212198.png", | |
| "Alisson": "https://cdn.sofifa.org/players/4/19/212831.png", | |
| "Courtois": "https://cdn.sofifa.org/players/4/19/192119.png", | |
| "Van Dijk": "https://cdn.sofifa.org/players/4/19/203376.png", | |
| "Lewandowski": "https://cdn.sofifa.org/players/4/19/188545.png", | |
| "Benzema": "https://cdn.sofifa.org/players/4/19/165153.png", | |
| "Griezmann": "https://cdn.sofifa.org/players/4/19/194765.png", | |
| "Kanté": "https://cdn.sofifa.org/players/4/19/215914.png", | |
| "Pogba": "https://cdn.sofifa.org/players/4/19/195864.png", | |
| "Ramos": "https://cdn.sofifa.org/players/4/19/155862.png", | |
| "Casillas": "https://cdn.sofifa.org/players/4/19/5479.png", | |
| "Buffon": "https://cdn.sofifa.org/players/4/19/1179.png", | |
| "Shearer": "https://cdn.sofifa.org/players/4/19/120415.png", | |
| "Gerrard": "https://cdn.sofifa.org/players/4/19/158867.png", | |
| "Rooney": "https://cdn.sofifa.org/players/4/19/54050.png", | |
| "Vieira": "https://cdn.sofifa.org/players/4/19/229494.png", | |
| "Shevchenko": "https://cdn.sofifa.org/players/4/19/244584.png", | |
| "Suárez": "https://cdn.sofifa.org/players/4/19/176580.png", | |
| "Best": "https://cdn.sofifa.org/players/4/19/222930.png", | |
| "Roberto Carlos": "https://cdn.sofifa.org/players/4/19/183666.png", | |
| "Riquelme": "https://cdn.sofifa.org/players/4/19/238766.png" | |
| }; | |
| // ============ FALLBACK RANDOM IMAGES ============ | |
| const PLAYER_IMGS = [ | |
| "https://huggingface.co/datasets/deepa-shalini/fifa-player-images/resolve/main/100186.jpg", | |
| "https://huggingface.co/datasets/deepa-shalini/fifa-player-images/resolve/main/100199.jpg", | |
| "https://huggingface.co/datasets/deepa-shalini/fifa-player-images/resolve/main/10076.jpg", | |
| "https://huggingface.co/datasets/deepa-shalini/fifa-player-images/resolve/main/101074.jpg", | |
| "https://huggingface.co/datasets/deepa-shalini/fifa-player-images/resolve/main/101111.jpg", | |
| "https://huggingface.co/datasets/deepa-shalini/fifa-player-images/resolve/main/101345.jpg", | |
| "https://huggingface.co/datasets/deepa-shalini/fifa-player-images/resolve/main/101431.jpg", | |
| "https://huggingface.co/datasets/deepa-shalini/fifa-player-images/resolve/main/10183.jpg", | |
| "https://huggingface.co/datasets/deepa-shalini/fifa-player-images/resolve/main/10206.jpg", | |
| "https://huggingface.co/datasets/deepa-shalini/fifa-player-images/resolve/main/102193.jpg", | |
| "https://huggingface.co/datasets/deepa-shalini/fifa-player-images/resolve/main/102395.jpg", | |
| "https://huggingface.co/datasets/deepa-shalini/fifa-player-images/resolve/main/102603.jpg", | |
| "https://huggingface.co/datasets/deepa-shalini/fifa-player-images/resolve/main/103094.jpg", | |
| "https://huggingface.co/datasets/deepa-shalini/fifa-player-images/resolve/main/103099.jpg", | |
| "https://huggingface.co/datasets/deepa-shalini/fifa-player-images/resolve/main/103108.jpg" | |
| ]; | |
| // ============ POSITION EMOJIS ============ | |
| function getPosEmoji(pos){ | |
| if(pos==='GK') return '🧤'; | |
| if(pos==='CB') return '🛡️'; | |
| if(pos==='LB'||pos==='RB'||pos==='LWB'||pos==='RWB') return '⚔️'; | |
| if(pos==='CDM'||pos==='CM'||pos==='CAM'||pos==='RM'||pos==='LM') return '🎯'; | |
| if(pos==='LW'||pos==='RW') return '🏃'; | |
| if(pos==='ST'||pos==='CF') return '⚽'; | |
| return '⚽'; | |
| } | |
| // ============ COUNTRY FLAGS ============ | |
| function getFlag(code){ | |
| const flags={ | |
| 'BR':'🇧🇷','AR':'🇦🇷','FR':'🇫🇷','DE':'🇩🇪','ES':'🇪🇸','IT':'🇮🇹','NL':'🇳🇱','GB':'🇬🇧', | |
| 'PT':'🇵🇹','HU':'🇭🇺','HR':'🇭🇷','BE':'🇧🇪','NO':'🇳🇴','SE':'🇸🇪','DK':'🇩🇰','PL':'🇵🇱', | |
| 'AT':'🇦🇹','CH':'🇨🇭','RS':'🇷🇸','UA':'🇺🇦','TR':'🇹🇷','MA':'🇲🇦','EG':'🇪🇬','NG':'🇳🇬', | |
| 'CL':'🇨🇱','UY':'🇺🇾','CO':'🇨🇴','EC':'🇪🇨','US':'🇺🇸','JP':'🇯🇵','KR':'🇰🇷','GH':'🇬🇭', | |
| 'CM':'🇨🇲','ZM':'🇿🇲','GM':'🇬🇲','AL':'🇦🇱','IE':'🇮🇪','GR':'🇬🇷','SN':'🇸🇳','CR':'🇨🇷', | |
| 'CA':'🇨🇦','GE':'🇬🇪','IQ':'🇮🇶','TN':'🇹🇳','MX':'🇲🇽','DZ':'🇩🇿','JP':'🇯🇵' | |
| }; | |
| return flags[code]||'🏳️'; | |
| } | |
| // ============ GENERATE STATS ============ | |
| function genStats(ovr,pos){ | |
| const base = ovr; | |
| let pace,pass,shot,dribble,def,phys; | |
| if(pos==='GK'){ | |
| pace=30+Math.random()*20; pass=20+Math.random()*15; shot=10+Math.random()*10; | |
| dribble=15+Math.random()*15; def=20+Math.random()*15; phys=50+Math.random()*30; | |
| } else if(pos==='CB'){ | |
| pace=40+Math.random()*25; pass=40+Math.random()*20; shot=30+Math.random()*20; | |
| dribble=35+Math.random()*20; def=70+Math.random()*25; phys=70+Math.random()*25; | |
| } else if(pos.includes('B')||pos.includes('WB')){ | |
| pace=65+Math.random()*25; pass=55+Math.random()*25; shot=40+Math.random()*25; | |
| dribble=60+Math.random()*25; def=60+Math.random()*25; phys=65+Math.random()*20; | |
| } else if(pos.includes('M')){ | |
| pace=55+Math.random()*30; pass=70+Math.random()*25; shot=55+Math.random()*30; | |
| dribble=65+Math.random()*25; def=45+Math.random()*25; phys=55+Math.random()*25; | |
| } else if(pos==='LW'||pos==='RW'){ | |
| pace=80+Math.random()*18; pass=65+Math.random()*25; shot=70+Math.random()*25; | |
| dribble=80+Math.random()*18; def=25+Math.random()*20; phys=50+Math.random()*25; | |
| } else { | |
| pace=75+Math.random()*22; pass=55+Math.random()*25; shot=80+Math.random()*18; | |
| dribble=75+Math.random()*20; def=30+Math.random()*20; phys=60+Math.random()*25; | |
| } | |
| return { | |
| pace:Math.min(99,Math.round(pace)), | |
| pass:Math.min(99,Math.round(pass)), | |
| shot:Math.min(99,Math.round(shot)), | |
| dribble:Math.min(99,Math.round(dribble)), | |
| def:Math.min(99,Math.round(def)), | |
| phys:Math.min(99,Math.round(phys)) | |
| }; | |
| } | |
| // ============ REAL PLAYER DATA ============ | |
| const ALL_PLAYERS = [ | |
| // ========== ICONS (OVR 90+) ========== | |
| {name:"Pelé",ovr:98,pos:"ST",nation:"BR",club:"Santos",rarity:"icon"}, | |
| {name:"Maradona",ovr:97,pos:"CAM",nation:"AR",club:"Napoli",rarity:"icon"}, | |
| {name:"Cruyff",ovr:97,pos:"CAM",nation:"NL",club:"Barcelona",rarity:"icon"}, | |
| {name:"Di Stéfano",ovr:97,pos:"ST",nation:"AR",club:"Real Madrid",rarity:"icon"}, | |
| {name:"Zidane",ovr:97,pos:"CAM",nation:"FR",club:"Real Madrid",rarity:"icon"}, | |
| {name:"Beckenbauer",ovr:96,pos:"CB",nation:"DE",club:"Bayern",rarity:"icon"}, | |
| {name:"Puskás",ovr:96,pos:"ST",nation:"HU",club:"Real Madrid",rarity:"icon"}, | |
| {name:"Best",ovr:96,pos:"LW",nation:"GB",club:"Man Utd",rarity:"icon"}, | |
| {name:"Garrincha",ovr:96,pos:"RW",nation:"BR",club:"Botafogo",rarity:"icon"}, | |
| {name:"Eusébio",ovr:96,pos:"ST",nation:"PT",club:"Benfica",rarity:"icon"}, | |
| {name:"Van Basten",ovr:96,pos:"ST",nation:"NL",club:"AC Milan",rarity:"icon"}, | |
| {name:"G. Müller",ovr:96,pos:"ST",nation:"DE",club:"Bayern",rarity:"icon"}, | |
| {name:"Ronaldo Nazário",ovr:96,pos:"ST",nation:"BR",club:"Real Madrid",rarity:"icon"}, | |
| {name:"Ronaldinho",ovr:96,pos:"CAM",nation:"BR",club:"Barcelona",rarity:"icon"}, | |
| {name:"Henry",ovr:96,pos:"ST",nation:"FR",club:"Arsenal",rarity:"icon"}, | |
| {name:"Maldini",ovr:96,pos:"CB",nation:"IT",club:"AC Milan",rarity:"icon"}, | |
| {name:"Van Nistelrooy",ovr:96,pos:"ST",nation:"NL",club:"Real Madrid",rarity:"icon"}, | |
| {name:"Xavi",ovr:96,pos:"CM",nation:"ES",club:"Barcelona",rarity:"icon"}, | |
| {name:"Iniesta",ovr:96,pos:"CM",nation:"ES",club:"Barcelona",rarity:"icon"}, | |
| {name:"Platini",ovr:95,pos:"CAM",nation:"FR",club:"Juventus",rarity:"icon"}, | |
| {name:"Roberto Carlos",ovr:95,pos:"LB",nation:"BR",club:"Real Madrid",rarity:"icon"}, | |
| {name:"Cafu",ovr:95,pos:"RB",nation:"BR",club:"AC Milan",rarity:"icon"}, | |
| {name:"Beckham",ovr:95,pos:"RM",nation:"GB",club:"Real Madrid",rarity:"icon"}, | |
| {name:"Gerrard",ovr:95,pos:"CM",nation:"GB",club:"Liverpool",rarity:"icon"}, | |
| {name:"Lampard",ovr:95,pos:"CAM",nation:"GB",club:"Chelsea",rarity:"icon"}, | |
| {name:"Scholes",ovr:95,pos:"CM",nation:"GB",club:"Man Utd",rarity:"icon"}, | |
| {name:"Rooney",ovr:95,pos:"ST",nation:"GB",club:"Man Utd",rarity:"icon"}, | |
| {name:"Shearer",ovr:95,pos:"ST",nation:"GB",club:"Newcastle",rarity:"icon"}, | |
| {name:"Cantona",ovr:95,pos:"ST",nation:"FR",club:"Man Utd",rarity:"icon"}, | |
| {name:"Vieira",ovr:95,pos:"CDM",nation:"FR",club:"Arsenal",rarity:"icon"}, | |
| {name:"Bergkamp",ovr:95,pos:"CAM",nation:"NL",club:"Arsenal",rarity:"icon"}, | |
| {name:"Casillas",ovr:95,pos:"GK",nation:"ES",club:"Real Madrid",rarity:"icon"}, | |
| {name:"Ramos",ovr:95,pos:"CB",nation:"ES",club:"Real Madrid",rarity:"icon"}, | |
| {name:"Pirlo",ovr:95,pos:"CM",nation:"IT",club:"Juventus",rarity:"icon"}, | |
| {name:"Totti",ovr:95,pos:"ST",nation:"IT",club:"Roma",rarity:"icon"}, | |
| {name:"Del Piero",ovr:95,pos:"ST",nation:"IT",club:"Juventus",rarity:"icon"}, | |
| {name:"Buffon",ovr:95,pos:"GK",nation:"IT",club:"Juventus",rarity:"icon"}, | |
| {name:"Cannavaro",ovr:95,pos:"CB",nation:"IT",club:"Real Madrid",rarity:"icon"}, | |
| {name:"Baggio",ovr:95,pos:"CAM",nation:"IT",club:"Juventus",rarity:"icon"}, | |
| {name:"Batistuta",ovr:95,pos:"ST",nation:"AR",club:"Fiorentina",rarity:"icon"}, | |
| {name:"Riquelme",ovr:95,pos:"CAM",nation:"AR",club:"Boca",rarity:"icon"}, | |
| {name:"Shevchenko",ovr:95,pos:"ST",nation:"UA",club:"AC Milan",rarity:"icon"}, | |
| {name:"Drogba",ovr:95,pos:"ST",nation:"CI",club:"Chelsea",rarity:"icon"}, | |
| {name:"Suárez",ovr:95,pos:"ST",nation:"UY",club:"Barcelona",rarity:"icon"}, | |
| {name:"Lahm",ovr:95,pos:"RB",nation:"DE",club:"Bayern",rarity:"icon"}, | |
| {name:"Baresi",ovr:95,pos:"CB",nation:"IT",club:"AC Milan",rarity:"icon"}, | |
| {name:"Modrić",ovr:95,pos:"CM",nation:"HR",club:"Real Madrid",rarity:"icon"}, | |
| // ========== EPICS (OVR 83-89) ========== | |
| {name:"Bastoni",ovr:89,pos:"CB",nation:"IT",club:"Inter",rarity:"epic"}, | |
| {name:"Maignan",ovr:88,pos:"GK",nation:"FR",club:"AC Milan",rarity:"epic"}, | |
| {name:"Müller",ovr:88,pos:"ST",nation:"DE",club:"Bayern",rarity:"epic"}, | |
| {name:"Tchouaméni",ovr:87,pos:"CDM",nation:"FR",club:"Real Madrid",rarity:"epic"}, | |
| {name:"Müller",ovr:87,pos:"CAM",nation:"DE",club:"Dortmund",rarity:"epic"}, | |
| {name:"Kanté",ovr:86,pos:"CDM",nation:"FR",club:"Al Ittihad",rarity:"epic"}, | |
| {name:"Griezmann",ovr:86,pos:"ST",nation:"FR",club:"Atlético",rarity:"epic"}, | |
| {name:"Theo Hernández",ovr:86,pos:"LB",nation:"FR",club:"AC Milan",rarity:"epic"}, | |
| {name:"Tonali",ovr:86,pos:"CDM",nation:"IT",club:"Newcastle",rarity:"epic"}, | |
| {name:"Cuti Romero",ovr:85,pos:"CB",nation:"AR",club:"Spurs",rarity:"epic"}, | |
| {name:"Coman",ovr:85,pos:"LW",nation:"FR",club:"Bayern",rarity:"epic"}, | |
| {name:"Thuram",ovr:85,pos:"ST",nation:"FR",club:"Inter",rarity:"epic"}, | |
| {name:"Koundé",ovr:85,pos:"CB",nation:"FR",club:"Barcelona",rarity:"epic"}, | |
| {name:"Varane",ovr:85,pos:"CB",nation:"FR",club:"Man Utd",rarity:"epic"}, | |
| {name:"Müller",ovr:85,pos:"CM",nation:"DE",club:"Bayern",rarity:"epic"}, | |
| {name:"Benzema",ovr:83,pos:"ST",nation:"FR",club:"Al Ittihad",rarity:"epic"}, | |
| {name:"Pogba",ovr:83,pos:"CM",nation:"FR",club:"Juventus",rarity:"epic"}, | |
| {name:"Dembélé",ovr:84,pos:"RW",nation:"FR",club:"PSG",rarity:"epic"}, | |
| {name:"Upamecano",ovr:84,pos:"CB",nation:"FR",club:"Bayern",rarity:"epic"}, | |
| {name:"Saliba",ovr:84,pos:"CB",nation:"FR",club:"Arsenal",rarity:"epic"}, | |
| {name:"Lisandro Martínez",ovr:84,pos:"CB",nation:"AR",club:"Man Utd",rarity:"epic"}, | |
| {name:"Bono",ovr:84,pos:"GK",nation:"MA",club:"Al Hilal",rarity:"epic"}, | |
| {name:"En-Nesyri",ovr:84,pos:"ST",nation:"MA",club:"Sevilla",rarity:"epic"}, | |
| {name:"Sancho",ovr:83,pos:"LW",nation:"GB",club:"Man Utd",rarity:"epic"}, | |
| {name:"Rabiot",ovr:83,pos:"CM",nation:"FR",club:"Juventus",rarity:"epic"}, | |
| {name:"Ziyech",ovr:83,pos:"CAM",nation:"MA",club:"Galatasaray",rarity:"epic"}, | |
| {name:"Mazraoui",ovr:83,pos:"RB",nation:"MA",club:"Man Utd",rarity:"epic"}, | |
| {name:"Tagliafico",ovr:82,pos:"LB",nation:"AR",club:"Barcelona",rarity:"epic"}, | |
| {name:"Aguerd",ovr:82,pos:"CB",nation:"MA",club:"West Ham",rarity:"epic"}, | |
| {name:"Ounahi",ovr:82,pos:"CM",nation:"MA",club:"Marseille",rarity:"epic"}, | |
| {name:"Amrabat",ovr:82,pos:"CDM",nation:"MA",club:"Man Utd",rarity:"epic"}, | |
| {name:"Palacios",ovr:82,pos:"CM",nation:"CL",club:"Leverkusen",rarity:"epic"}, | |
| {name:"Correa",ovr:82,pos:"ST",nation:"AR",club:"Atlético",rarity:"epic"}, | |
| {name:"Acuña",ovr:82,pos:"LB",nation:"AR",club:"Sevilla",rarity:"epic"}, | |
| {name:"Alexis Sánchez",ovr:81,pos:"ST",nation:"CL",club:"Marseille",rarity:"epic"}, | |
| {name:"Boufal",ovr:81,pos:"LW",nation:"MA",club:"Al Ahli",rarity:"epic"}, | |
| {name:"Montiel",ovr:81,pos:"RB",nation:"AR",club:"Nottingham",rarity:"epic"}, | |
| {name:"Giroud",ovr:82,pos:"ST",nation:"FR",club:"AC Milan",rarity:"epic"}, | |
| {name:"Foyth",ovr:82,pos:"RB",nation:"AR",club:"Villarreal",rarity:"epic"}, | |
| {name:"Vidal",ovr:80,pos:"CM",nation:"CL",club:"Flamengo",rarity:"epic"}, | |
| {name:"Sissoko",ovr:80,pos:"CM",nation:"FR",club:"Watford",rarity:"epic"}, | |
| {name:"Saïss",ovr:80,pos:"CB",nation:"MA",club:"Al Shabab",rarity:"epic"}, | |
| // ========== GOLD (OVR 76-89, excluding epics above) ========== | |
| {name:"Haaland",ovr:91,pos:"ST",nation:"NO",club:"Man City",rarity:"gold"}, | |
| {name:"Mbappé",ovr:92,pos:"ST",nation:"FR",club:"Real Madrid",rarity:"gold"}, | |
| {name:"Vinícius Jr.",ovr:91,pos:"LW",nation:"BR",club:"Real Madrid",rarity:"gold"}, | |
| {name:"Bellingham",ovr:90,pos:"CAM",nation:"GB",club:"Real Madrid",rarity:"gold"}, | |
| {name:"Salah",ovr:89,pos:"RW",nation:"EG",club:"Liverpool",rarity:"gold"}, | |
| {name:"De Bruyne",ovr:90,pos:"CAM",nation:"BE",club:"Man City",rarity:"gold"}, | |
| {name:"Lewandowski",ovr:88,pos:"ST",nation:"PL",club:"Barcelona",rarity:"gold"}, | |
| {name:"Kane",ovr:89,pos:"ST",nation:"GB",club:"Bayern",rarity:"gold"}, | |
| {name:"Son Heung-min",ovr:87,pos:"LW",nation:"KR",club:"Spurs",rarity:"gold"}, | |
| {name:"Bernardo Silva",ovr:88,pos:"CAM",nation:"PT",club:"Man City",rarity:"gold"}, | |
| {name:"Neymar Jr.",ovr:87,pos:"LW",nation:"BR",club:"Al Hilal",rarity:"gold"}, | |
| {name:"Rodri",ovr:91,pos:"CDM",nation:"ES",club:"Man City",rarity:"gold"}, | |
| {name:"Kroos",ovr:88,pos:"CM",nation:"DE",club:"Real Madrid",rarity:"gold"}, | |
| {name:"Bruno Fernandes",ovr:88,pos:"CAM",nation:"PT",club:"Man Utd",rarity:"gold"}, | |
| {name:"Alisson",ovr:89,pos:"GK",nation:"BR",club:"Liverpool",rarity:"gold"}, | |
| {name:"Courtois",ovr:89,pos:"GK",nation:"BE",club:"Real Madrid",rarity:"gold"}, | |
| {name:"Donnarumma",ovr:87,pos:"GK",nation:"IT",club:"PSG",rarity:"gold"}, | |
| {name:"Núñez",ovr:84,pos:"ST",nation:"UY",club:"Liverpool",rarity:"gold"}, | |
| {name:"Pedri",ovr:87,pos:"CM",nation:"ES",club:"Barcelona",rarity:"gold"}, | |
| {name:"Gavi",ovr:84,pos:"CM",nation:"ES",club:"Barcelona",rarity:"gold"}, | |
| {name:"Foden",ovr:87,pos:"CAM",nation:"GB",club:"Man City",rarity:"gold"}, | |
| {name:"Saka",ovr:86,pos:"RW",nation:"GB",club:"Arsenal",rarity:"gold"}, | |
| {name:"Martinelli",ovr:84,pos:"LW",nation:"BR",club:"Arsenal",rarity:"gold"}, | |
| {name:"Osimhen",ovr:86,pos:"ST",nation:"NG",club:"Napoli",rarity:"gold"}, | |
| {name:"Vlahović",ovr:85,pos:"ST",nation:"RS",club:"Juventus",rarity:"gold"}, | |
| {name:"Lautaro Martínez",ovr:87,pos:"ST",nation:"AR",club:"Inter",rarity:"gold"}, | |
| {name:"Chiesa",ovr:84,pos:"LW",nation:"IT",club:"Juventus",rarity:"gold"}, | |
| {name:"Rafinha",ovr:86,pos:"RW",nation:"BR",club:"Barcelona",rarity:"gold"}, | |
| {name:"Wirtz",ovr:86,pos:"CAM",nation:"DE",club:"Leverkusen",rarity:"gold"}, | |
| {name:"Musiala",ovr:87,pos:"CAM",nation:"DE",club:"Bayern",rarity:"gold"}, | |
| {name:"Alaba",ovr:85,pos:"CB",nation:"AT",club:"Real Madrid",rarity:"gold"}, | |
| {name:"Dias",ovr:87,pos:"CB",nation:"PT",club:"Man City",rarity:"gold"}, | |
| {name:"Marquinhos",ovr:87,pos:"CB",nation:"BR",club:"PSG",rarity:"gold"}, | |
| {name:"Van Dijk",ovr:89,pos:"CB",nation:"NL",club:"Liverpool",rarity:"gold"}, | |
| {name:"Walker",ovr:85,pos:"RB",nation:"GB",club:"Man City",rarity:"gold"}, | |
| {name:"Alexander-Arnold",ovr:86,pos:"RB",nation:"GB",club:"Liverpool",rarity:"gold"}, | |
| {name:"Robertson",ovr:84,pos:"LB",nation:"GB",club:"Liverpool",rarity:"gold"}, | |
| {name:"Cancelo",ovr:85,pos:"LB",nation:"PT",club:"Barcelona",rarity:"gold"}, | |
| {name:"Hakimi",ovr:85,pos:"RB",nation:"MA",club:"PSG",rarity:"gold"}, | |
| {name:"Szczęsny",ovr:84,pos:"GK",nation:"PL",club:"Juventus",rarity:"gold"}, | |
| {name:"Ter Stegen",ovr:86,pos:"GK",nation:"DE",club:"Barcelona",rarity:"gold"}, | |
| {name:"Navas",ovr:84,pos:"GK",nation:"CR",club:"PSG",rarity:"gold"}, | |
| {name:"Mendy",ovr:84,pos:"GK",nation:"SN",club:"Real Madrid",rarity:"gold"}, | |
| {name:"Martínez",ovr:87,pos:"GK",nation:"AR",club:"Aston Villa",rarity:"gold"}, | |
| {name:"Trippier",ovr:83,pos:"RB",nation:"GB",club:"Newcastle",rarity:"gold"}, | |
| {name:"Rice",ovr:86,pos:"CDM",nation:"GB",club:"Arsenal",rarity:"gold"}, | |
| {name:"Gravenberch",ovr:83,pos:"CM",nation:"NL",club:"Liverpool",rarity:"gold"}, | |
| {name:"Kai Havertz",ovr:84,pos:"CAM",nation:"DE",club:"Arsenal",rarity:"gold"}, | |
| {name:"Ödegaard",ovr:88,pos:"CAM",nation:"NO",club:"Arsenal",rarity:"gold"}, | |
| {name:"Joselu",ovr:82,pos:"ST",nation:"ES",club:"Real Madrid",rarity:"gold"}, | |
| {name:"Isco",ovr:82,pos:"CAM",nation:"ES",club:"Real Betis",rarity:"gold"}, | |
| {name:"Morata",ovr:82,pos:"ST",nation:"ES",club:"Atlético",rarity:"gold"}, | |
| {name:"F. Torres",ovr:82,pos:"ST",nation:"ES",club:"Atlético",rarity:"gold"}, | |
| {name:"Di María",ovr:83,pos:"RW",nation:"AR",club:"Benfica",rarity:"gold"}, | |
| {name:"Hazard",ovr:82,pos:"LW",nation:"BE",club:"Retired",rarity:"gold"}, | |
| {name:"Grealish",ovr:84,pos:"LW",nation:"GB",club:"Man City",rarity:"gold"}, | |
| {name:"Raheem Sterling",ovr:83,pos:"RW",nation:"GB",club:"Chelsea",rarity:"gold"}, | |
| {name:"Rashford",ovr:84,pos:"LW",nation:"GB",club:"Man Utd",rarity:"gold"}, | |
| {name:"Mudryk",ovr:81,pos:"LW",nation:"UA",club:"Chelsea",rarity:"gold"}, | |
| {name:"Palmer",ovr:85,pos:"CAM",nation:"GB",club:"Chelsea",rarity:"gold"}, | |
| {name:"Madueke",ovr:82,pos:"RW",nation:"GB",club:"Chelsea",rarity:"gold"}, | |
| {name:"Jackson",ovr:82,pos:"ST",nation:"SN",club:"Chelsea",rarity:"gold"}, | |
| {name:"Caicedo",ovr:84,pos:"CDM",nation:"EC",club:"Chelsea",rarity:"gold"}, | |
| {name:"Enzo Fernández",ovr:84,pos:"CM",nation:"AR",club:"Chelsea",rarity:"gold"}, | |
| {name:"Szoboszlai",ovr:83,pos:"CAM",nation:"HU",club:"Liverpool",rarity:"gold"}, | |
| {name:"Díaz",ovr:83,pos:"LW",nation:"CO",club:"Liverpool",rarity:"gold"}, | |
| {name:"Jota",ovr:83,pos:"ST",nation:"PT",club:"Liverpool",rarity:"gold"}, | |
| {name:"Mbeumo",ovr:82,pos:"RW",nation:"CM",club:"Brentford",rarity:"gold"}, | |
| {name:"Toney",ovr:82,pos:"ST",nation:"GB",club:"Brentford",rarity:"gold"}, | |
| {name:"Bowen",ovr:82,pos:"RW",nation:"GB",club:"West Ham",rarity:"gold"}, | |
| {name:"Paquetá",ovr:83,pos:"CAM",nation:"BR",club:"West Ham",rarity:"gold"}, | |
| {name:"Kudus",ovr:83,pos:"CAM",nation:"GH",club:"West Ham",rarity:"gold"}, | |
| {name:"Wilson",ovr:82,pos:"ST",nation:"GB",club:"Newcastle",rarity:"gold"}, | |
| {name:"Isak",ovr:86,pos:"ST",nation:"SE",club:"Newcastle",rarity:"gold"}, | |
| {name:"Gordon",ovr:83,pos:"LW",nation:"GB",club:"Newcastle",rarity:"gold"}, | |
| {name:"Watkins",ovr:83,pos:"ST",nation:"GB",club:"Aston Villa",rarity:"gold"}, | |
| {name:"McGinn",ovr:82,pos:"CM",nation:"GB",club:"Aston Villa",rarity:"gold"}, | |
| {name:"Ollie Watkins",ovr:84,pos:"ST",nation:"GB",club:"Aston Villa",rarity:"gold"}, | |
| {name:"Diaby",ovr:82,pos:"RW",nation:"FR",club:"Aston Villa",rarity:"gold"}, | |
| {name:"Trossard",ovr:82,pos:"LW",nation:"BE",club:"Arsenal",rarity:"gold"}, | |
| {name:"Mudryk",ovr:81,pos:"LW",nation:"UA",club:"Chelsea",rarity:"gold"}, | |
| {name:"Calvert-Lewin",ovr:80,pos:"ST",nation:"GB",club:"Everton",rarity:"gold"}, | |
| {name:"Solanke",ovr:82,pos:"ST",nation:"GB",club:"Spurs",rarity:"gold"}, | |
| {name:"Richarlison",ovr:82,pos:"ST",nation:"BR",club:"Spurs",rarity:"gold"}, | |
| {name:"Maddison",ovr:83,pos:"CAM",nation:"GB",club:"Spurs",rarity:"gold"}, | |
| {name:"Mings",ovr:80,pos:"CB",nation:"GB",club:"Aston Villa",rarity:"gold"}, | |
| {name:"Gabriel",ovr:85,pos:"CB",nation:"BR",club:"Arsenal",rarity:"gold"}, | |
| {name:"White",ovr:83,pos:"CB",nation:"GB",club:"Arsenal",rarity:"gold"}, | |
| {name:"Zinchenko",ovr:82,pos:"LB",nation:"UA",club:"Arsenal",rarity:"gold"}, | |
| // ========== RARE (OVR 75-84) ========== | |
| {name:"Neto",ovr:82,pos:"RW",nation:"PT",club:"Bournemouth",rarity:"rare"}, | |
| {name:"Solanke",ovr:82,pos:"ST",nation:"GB",club:"Bournemouth",rarity:"rare"}, | |
| {name:"Andreas Pereira",ovr:80,pos:"CAM",nation:"BR",club:"Fulham",rarity:"rare"}, | |
| {name:"Jiménez",ovr:80,pos:"ST",nation:"MX",club:"Fulham",rarity:"rare"}, | |
| {name:"Eze",ovr:83,pos:"CAM",nation:"GB",club:"Crystal Palace",rarity:"rare"}, | |
| {name:"Olise",ovr:82,pos:"RW",nation:"FR",club:"Bayern",rarity:"rare"}, | |
| {name:"Mateta",ovr:80,pos:"ST",nation:"FR",club:"Crystal Palace",rarity:"rare"}, | |
| {name:"Mbeumo",ovr:82,pos:"RW",nation:"CM",club:"Brentford",rarity:"rare"}, | |
| {name:"Ait-Nouri",ovr:81,pos:"LB",nation:"DZ",club:"Wolves",rarity:"rare"}, | |
| {name:"Cunha",ovr:82,pos:"ST",nation:"BR",club:"Wolves",rarity:"rare"}, | |
| {name:"Sarabia",ovr:80,pos:"CAM",nation:"ES",club:"Wolves",rarity:"rare"}, | |
| {name:"Neto",ovr:81,pos:"LW",nation:"BR",club:"Bournemouth",rarity:"rare"}, | |
| {name:"Senesi",ovr:80,pos:"CB",nation:"AR",club:"Bournemouth",rarity:"rare"}, | |
| {name:"Dunk",ovr:80,pos:"CB",nation:"GB",club:"Brighton",rarity:"rare"}, | |
| {name:"March",ovr:80,pos:"LW",nation:"GB",club:"Brighton",rarity:"rare"}, | |
| {name:"Mitoma",ovr:82,pos:"LW",nation:"JP",club:"Brighton",rarity:"rare"}, | |
| {name:"Welbeck",ovr:79,pos:"ST",nation:"GB",club:"Brighton",rarity:"rare"}, | |
| {name:"Ramsdale",ovr:80,pos:"GK",nation:"GB",club:"Southampton",rarity:"rare"}, | |
| {name:"Adam Armstrong",ovr:78,pos:"ST",nation:"GB",club:"Southampton",rarity:"rare"}, | |
| {name:"Brennan Johnson",ovr:80,pos:"RW",nation:"GB",club:"Spurs",rarity:"rare"}, | |
| {name:"Ademola Lookman",ovr:82,pos:"RW",nation:"NG",club:"Atalanta",rarity:"rare"}, | |
| {name:"Scamacca",ovr:80,pos:"ST",nation:"IT",club:"Atalanta",rarity:"rare"}, | |
| {name:"Dovbyk",ovr:81,pos:"ST",nation:"UA",club:"Roma",rarity:"rare"}, | |
| {name:"Pellegrini",ovr:80,pos:"CAM",nation:"IT",club:"Roma",rarity:"rare"}, | |
| {name:"Broja",ovr:79,pos:"ST",nation:"AL",club:"Chelsea",rarity:"rare"}, | |
| {name:"Tammy Abraham",ovr:80,pos:"ST",nation:"GB",club:"Roma",rarity:"rare"}, | |
| {name:"Ibrahimović",ovr:80,pos:"ST",nation:"SE",club:"AC Milan",rarity:"rare"}, | |
| {name:"Okafor",ovr:80,pos:"ST",nation:"CH",club:"AC Milan",rarity:"rare"}, | |
| {name:"Zirkzee",ovr:81,pos:"ST",nation:"NL",club:"Man Utd",rarity:"rare"}, | |
| {name:"Højlund",ovr:81,pos:"ST",nation:"DK",club:"Man Utd",rarity:"rare"}, | |
| {name:"Garnacho",ovr:81,pos:"LW",nation:"AR",club:"Man Utd",rarity:"rare"}, | |
| {name:"Chinonso Obasi",ovr:77,pos:"ST",nation:"NG",club:"Leicester",rarity:"rare"}, | |
| {name:"Vardy",ovr:78,pos:"ST",nation:"GB",club:"Leicester",rarity:"rare"}, | |
| {name:"Daka",ovr:79,pos:"ST",nation:"ZM",club:"Leicester",rarity:"rare"}, | |
| {name:"Barnes",ovr:80,pos:"LW",nation:"GB",club:"Newcastle",rarity:"rare"}, | |
| {name:"Minteh",ovr:78,pos:"RW",nation:"GM",club:"Brighton",rarity:"rare"}, | |
| {name:"Semenyo",ovr:79,pos:"RW",nation:"GH",club:"Bournemouth",rarity:"rare"}, | |
| {name:"Tyler Adams",ovr:79,pos:"CDM",nation:"US",club:"Bournemouth",rarity:"rare"}, | |
| {name:"Lewis Dunk",ovr:80,pos:"CB",nation:"GB",club:"Brighton",rarity:"rare"}, | |
| {name:"Konsa",ovr:81,pos:"CB",nation:"GB",club:"Aston Villa",rarity:"rare"}, | |
| {name:"Torres",ovr:82,pos:"CB",nation:"ES",club:"Aston Villa",rarity:"rare"}, | |
| {name:"Pau Torres",ovr:83,pos:"CB",nation:"ES",club:"Aston Villa",rarity:"rare"}, | |
| {name:"Rodrigo Bentancur",ovr:81,pos:"CM",nation:"UY",club:"Spurs",rarity:"rare"}, | |
| {name:"Cody Gakpo",ovr:83,pos:"LW",nation:"NL",club:"Liverpool",rarity:"rare"}, | |
| {name:"Darwin Núñez",ovr:84,pos:"ST",nation:"UY",club:"Liverpool",rarity:"rare"}, | |
| {name:"Szoboszlai",ovr:83,pos:"CAM",nation:"HU",club:"Liverpool",rarity:"rare"}, | |
| {name:"Endo",ovr:80,pos:"CDM",nation:"JP",club:"Liverpool",rarity:"rare"}, | |
| {name:"Tsimikas",ovr:81,pos:"LB",nation:"GR",club:"Liverpool",rarity:"rare"}, | |
| {name:"Lucas Paquetá",ovr:83,pos:"CAM",nation:"BR",club:"West Ham",rarity:"rare"}, | |
| {name:"Mohammed Kudus",ovr:83,pos:"CAM",nation:"GH",club:"West Ham",rarity:"rare"}, | |
| {name:"Emerson Royal",ovr:80,pos:"RB",nation:"BR",club:"AC Milan",rarity:"rare"}, | |
| {name:"Fikayo Tomori",ovr:83,pos:"CB",nation:"GB",club:"AC Milan",rarity:"rare"}, | |
| {name:"Yacine Adli",ovr:79,pos:"CM",nation:"FR",club:"AC Milan",rarity:"rare"}, | |
| {name:"Nicolo Zaniolo",ovr:79,pos:"CAM",nation:"IT",club:"Galatasaray",rarity:"rare"}, | |
| {name:"Mauro Icardi",ovr:81,pos:"ST",nation:"AR",club:"Galatasaray",rarity:"rare"}, | |
| {name:"Dries Mertens",ovr:79,pos:"CAM",nation:"BE",club:"Galatasaray",rarity:"rare"}, | |
| {name:"Victor Osimhen",ovr:86,pos:"ST",nation:"NG",club:"Galatasaray",rarity:"rare"}, | |
| {name:"Khvicha Kvaratskhelia",ovr:85,pos:"LW",nation:"GE",club:"PSG",rarity:"rare"}, | |
| {name:"Bradley Barcola",ovr:83,pos:"LW",nation:"FR",club:"PSG",rarity:"rare"}, | |
| {name:"Gonçalo Ramos",ovr:83,pos:"ST",nation:"PT",club:"PSG",rarity:"rare"}, | |
| {name:"Asensio",ovr:81,pos:"CAM",nation:"ES",club:"PSG",rarity:"rare"}, | |
| {name:"Zaïre-Emery",ovr:81,pos:"CM",nation:"FR",club:"PSG",rarity:"rare"}, | |
| {name:"Fabian Ruiz",ovr:82,pos:"CM",nation:"ES",club:"PSG",rarity:"rare"}, | |
| {name:"Randal Kolo Muani",ovr:82,pos:"ST",nation:"FR",club:"PSG",rarity:"rare"}, | |
| {name:"Jonathan David",ovr:83,pos:"ST",nation:"CA",club:"Lille",rarity:"rare"}, | |
| {name:"Florian Wirtz",ovr:86,pos:"CAM",nation:"DE",club:"Leverkusen",rarity:"rare"}, | |
| {name:"Victor Boniface",ovr:82,pos:"ST",nation:"NG",club:"Leverkusen",rarity:"rare"}, | |
| {name:"Xhaka",ovr:82,pos:"CM",nation:"CH",club:"Leverkusen",rarity:"rare"}, | |
| {name:"Diaby",ovr:82,pos:"RW",nation:"FR",club:"Leverkusen",rarity:"rare"}, | |
| {name:"Ollie Watkins",ovr:84,pos:"ST",nation:"GB",club:"Aston Villa",rarity:"rare"}, | |
| {name:"Marcus Thuram",ovr:85,pos:"ST",nation:"FR",club:"Inter",rarity:"rare"}, | |
| {name:"Nicolò Barella",ovr:86,pos:"CM",nation:"IT",club:"Inter",rarity:"rare"}, | |
| {name:"Alessandro Bastoni",ovr:89,pos:"CB",nation:"IT",club:"Inter",rarity:"rare"}, | |
| {name:"Hakan Çalhanoğlu",ovr:85,pos:"CM",nation:"TR",club:"Inter",rarity:"rare"}, | |
| {name:"Federico Dimarco",ovr:84,pos:"LB",nation:"IT",club:"Inter",rarity:"rare"}, | |
| {name:"Denzel Dumfries",ovr:82,pos:"RB",nation:"NL",club:"Inter",rarity:"rare"}, | |
| {name:"Marcus Rashford",ovr:84,pos:"LW",nation:"GB",club:"Man Utd",rarity:"rare"}, | |
| // ========== COMMON (OVR 55-74) ========== | |
| {name:"Jorginho",ovr:78,pos:"CM",nation:"IT",club:"Arsenal",rarity:"common"}, | |
| {name:"Nketiah",ovr:77,pos:"ST",nation:"GB",club:"Crystal Palace",rarity:"common"}, | |
| {name:"Reiss Nelson",ovr:76,pos:"RW",nation:"GB",club:"Arsenal",rarity:"common"}, | |
| {name:"Eddie Nketiah",ovr:77,pos:"ST",nation:"GB",club:"Crystal Palace",rarity:"common"}, | |
| {name:"Smith Rowe",ovr:78,pos:"CAM",nation:"GB",club:"Fulham",rarity:"common"}, | |
| {name:"Rob Holding",ovr:76,pos:"CB",nation:"GB",club:"Crystal Palace",rarity:"common"}, | |
| {name:"Cedric Soares",ovr:74,pos:"RB",nation:"PT",club:"Fulham",rarity:"common"}, | |
| {name:"Matt Turner",ovr:76,pos:"GK",nation:"US",club:"Nottingham",rarity:"common"}, | |
| {name:"Freddie Ljungberg",ovr:76,pos:"RM",nation:"SE",club:"Retired",rarity:"common"}, | |
| {name:"Martin Ødegaard",ovr:88,pos:"CAM",nation:"NO",club:"Arsenal",rarity:"common"}, | |
| {name:"Curtis Jones",ovr:77,pos:"CM",nation:"GB",club:"Liverpool",rarity:"common"}, | |
| {name:"Harvey Elliott",ovr:78,pos:"CAM",nation:"GB",club:"Liverpool",rarity:"common"}, | |
| {name:"Nat Phillips",ovr:74,pos:"CB",nation:"GB",club:"Liverpool",rarity:"common"}, | |
| {name:"Rhys Williams",ovr:72,pos:"CB",nation:"GB",club:"Liverpool",rarity:"common"}, | |
| {name:"Caoimhín Kelleher",ovr:76,pos:"GK",nation:"IE",club:"Liverpool",rarity:"common"}, | |
| {name:"Fabio Carvalho",ovr:77,pos:"CAM",nation:"PT",club:"Brentford",rarity:"common"}, | |
| {name:"Tyler Morton",ovr:74,pos:"CM",nation:"GB",club:"Liverpool",rarity:"common"}, | |
| {name:"James McAtee",ovr:77,pos:"CAM",nation:"GB",club:"Man City",rarity:"common"}, | |
| {name:"Rico Lewis",ovr:79,pos:"RB",nation:"GB",club:"Man City",rarity:"common"}, | |
| {name:"Oscar Bobb",ovr:78,pos:"RW",nation:"NO",club:"Man City",rarity:"common"}, | |
| {name:"Maximo Perrone",ovr:76,pos:"CM",nation:"AR",club:"Man City",rarity:"common"}, | |
| {name:"Micah Hamilton",ovr:72,pos:"RW",nation:"GB",club:"Man City",rarity:"common"}, | |
| {name:"James Trafford",ovr:75,pos:"GK",nation:"GB",club:"Burnley",rarity:"common"}, | |
| {name:"Cole Palmer",ovr:85,pos:"CAM",nation:"GB",club:"Chelsea",rarity:"common"}, | |
| {name:"Armando Broja",ovr:79,pos:"ST",nation:"AL",club:"Chelsea",rarity:"common"}, | |
| {name:"Lesley Ugochukwu",ovr:74,pos:"CDM",nation:"FR",club:"Chelsea",rarity:"common"}, | |
| {name:"Carney Chukwuemeka",ovr:75,pos:"CM",nation:"GB",club:"Chelsea",rarity:"common"}, | |
| {name:"Noni Madueke",ovr:82,pos:"RW",nation:"GB",club:"Chelsea",rarity:"common"}, | |
| {name:"Djordje Petrović",ovr:78,pos:"GK",nation:"RS",club:"Chelsea",rarity:"common"}, | |
| {name:"Scott McTominay",ovr:80,pos:"CM",nation:"GB",club:"Napoli",rarity:"common"}, | |
| {name:"Aaron Wan-Bissaka",ovr:79,pos:"RB",nation:"GB",club:"West Ham",rarity:"common"}, | |
| {name:"Scott McTominay",ovr:80,pos:"CM",nation:"GB",club:"Napoli",rarity:"common"}, | |
| {name:"James Ward-Prowse",ovr:80,pos:"CM",nation:"GB",club:"West Ham",rarity:"common"}, | |
| {name:"Conor Gallagher",ovr:81,pos:"CM",nation:"GB",club:"Atlético",rarity:"common"}, | |
| {name:"Chalobah",ovr:78,pos:"CB",nation:"GB",club:"Chelsea",rarity:"common"}, | |
| {name:"André Onana",ovr:82,pos:"GK",nation:"CM",club:"Man Utd",rarity:"common"}, | |
| {name:"Tom Heaton",ovr:72,pos:"GK",nation:"GB",club:"Man Utd",rarity:"common"}, | |
| {name:"Jonny Evans",ovr:76,pos:"CB",nation:"GB",club:"Man Utd",rarity:"common"}, | |
| {name:"Luke Shaw",ovr:82,pos:"LB",nation:"GB",club:"Man Utd",rarity:"common"}, | |
| {name:"Tyrell Malacia",ovr:79,pos:"LB",nation:"NL",club:"Man Utd",rarity:"common"}, | |
| {name:"Kobbie Mainoo",ovr:80,pos:"CM",nation:"GB",club:"Man Utd",rarity:"common"}, | |
| {name:"Dan Gore",ovr:70,pos:"CM",nation:"GB",club:"Man Utd",rarity:"common"}, | |
| {name:"Willy Kambwala",ovr:70,pos:"CB",nation:"FR",club:"Man Utd",rarity:"common"}, | |
| {name:"Ibrahim Diaby",ovr:68,pos:"ST",nation:"FR",club:"Man Utd",rarity:"common"}, | |
| {name:"Ethan Laird",ovr:72,pos:"RB",nation:"GB",club:"Birmingham",rarity:"common"}, | |
| {name:"Brandon Williams",ovr:73,pos:"LB",nation:"GB",club:"Ipswich",rarity:"common"}, | |
| {name:"Hannibal Mejbri",ovr:74,pos:"CM",nation:"TN",club:"Burnley",rarity:"common"}, | |
| {name:"Facundo Pellistri",ovr:77,pos:"RW",nation:"UY",club:"Panathinaikos",rarity:"common"}, | |
| {name:"Zidane Iqbal",ovr:71,pos:"CAM",nation:"IQ",club:"Utrecht",rarity:"common"}, | |
| {name:"Charlie Savage",ovr:68,pos:"CM",nation:"GB",club:"Reading",rarity:"common"}, | |
| {name:"Mark Goldbridge",ovr:60,pos:"CM",nation:"GB",club:"YouTube FC",rarity:"common"} | |
| ]; | |
| // ============ PACK DEFINITIONS ========== | |
| const PACKS = [ | |
| {id:"icon",name:"ICON PACK",desc:"Contains only legendary Icon players (90+ OVR)",price:50000,items:3,rarity:"icon",iconColor:"#e8b800",class:"pack-icon"}, | |
| {id:"icon_pro",name:"ICON PRO PACK",desc:"Premium Icons - guaranteed top legends",price:100000,items:5,rarity:"icon",iconColor:"#ff6b35",class:"pack-icon-pro"}, | |
| {id:"epic",name:"EPIC PACK",desc:"Top-tier Epic players (83-89 OVR)",price:25000,items:4,rarity:"epic",iconColor:"#9b59b6",class:"pack-epic"}, | |
| {id:"gold",name:"GOLD PACK",desc:"Gold quality players (76-89 OVR)",price:7500,items:6,rarity:"gold",iconColor:"#f1c40f",class:"pack-gold"}, | |
| {id:"rare",name:"RARE PACK",desc:"Rare quality players (75-84 OVR)",price:5000,items:6,rarity:"rare",iconColor:"#3498db",class:"pack-rare"}, | |
| {id:"common",name:"COMMON PACK",desc:"Common players to build your squad",price:750,items:8,rarity:"common",iconColor:"#27ae60",class:"pack-common"}, | |
| {id:"mega",name:"MEGA PACK",desc:"12 players - mix of all rarities!",price:35000,items:12,rarity:"mega",iconColor:"#ff3366",class:"pack-mega"} | |
| ]; | |
| // ============ STATE ========== | |
| let coins = 999999; | |
| let currentPack = null; | |
| let pendingPlayers = null; | |
| // ============ HELPERS ========== | |
| function formatCoins(n){return n.toLocaleString()} | |
| function getInitials(name){ | |
| const parts = name.split(' '); | |
| if(parts.length >= 2) return (parts[0][0] + parts[parts.length-1][0]).toUpperCase(); | |
| return name.substring(0,2).toUpperCase(); | |
| } | |
| function getRarityClass(r){return 'card-'+r} | |
| function getPackRarities(pack){ | |
| if(pack.id==='icon') return ['icon']; | |
| if(pack.id==='icon_pro') return ['icon']; | |
| if(pack.id==='epic') return ['epic']; | |
| if(pack.id==='gold') return ['gold','epic']; | |
| if(pack.id==='rare') return ['rare','gold']; | |
| if(pack.id==='common') return ['common','rare']; | |
| if(pack.id==='mega') return ['icon','epic','gold','rare','common']; | |
| return ['common']; | |
| } | |
| function getPlayersForRarity(rarity){ | |
| return ALL_PLAYERS.filter(p=>p.rarity===rarity); | |
| } | |
| function shuffle(arr){ | |
| const a=[...arr]; | |
| for(let i=a.length-1;i>0;i--){const j=Math.floor(Math.random()*(i+1));[a[i],a[j]]=[a[j],a[i]];} | |
| return a; | |
| } | |
| function pickRandom(arr,n){ | |
| const s=shuffle(arr); | |
| return s.slice(0,Math.min(n,s.length)); | |
| } | |
| // ============ SVG PLAYER PORTRAIT ========== | |
| function createPlayerSVG(player,size=120){ | |
| const initials = getInitials(player.name); | |
| const rarityColors = { | |
| icon: {bg:'#e8b800',accent:'#c4960a',text:'#000'}, | |
| epic: {bg:'#9b59b6',accent:'#6c3483',text:'#fff'}, | |
| gold: {bg:'#f1c40f',accent:'#d4a90a',text:'#000'}, | |
| rare: {bg:'#3498db',accent:'#2471a3',text:'#fff'}, | |
| common: {bg:'#27ae60',accent:'#1e8449',text:'#fff'} | |
| }; | |
| const c = rarityColors[player.rarity] || rarityColors.common; | |
| return `<svg xmlns="http://www.w3.org/2000/svg" width="${size}" height="${size}" viewBox="0 0 ${size} ${size}"> | |
| <defs> | |
| <linearGradient id="bg_${player.name.replace(/[^a-zA-Z]/g,'')}" x1="0%" y1="0%" x2="100%" y2="100%"> | |
| <stop offset="0%" style="stop-color:${c.bg}"/> | |
| <stop offset="100%" style="stop-color:${c.accent}"/> | |
| </linearGradient> | |
| </defs> | |
| <circle cx="${size/2}" cy="${size/2}" r="${size/2}" fill="url(#bg_${player.name.replace(/[^a-zA-Z]/g,'')})" stroke="rgba(255,255,255,0.3)" stroke-width="3"/> | |
| <text x="${size/2}" y="${size/2}" text-anchor="middle" dominant-baseline="central" font-family="Arial,sans-serif" font-weight="900" font-size="${size*0.38}" fill="${c.text}" opacity="0.9">${initials}</text> | |
| </svg>`; | |
| } | |
| // ============ RENDER PLAYER CARD ========== | |
| function renderPlayerCard(player,idx){ | |
| const rClass = getRarityClass(player.rarity); | |
| const stats = genStats(player.ovr,player.pos); | |
| const posEmoji = getPosEmoji(player.pos); | |
| return `<div class="card-container" style="animation-delay:${idx*0.15}s"> | |
| <div class="player-card ${rClass}"> | |
| <div class="card-bg ${rClass}"></div> | |
| <div class="card-inner"> | |
| <div style="display:flex;justify-content:space-between;align-items:flex-start"> | |
| <div> | |
| <div class="card-ovr">${player.ovr}</div> | |
| <div class="card-pos">${posEmoji} ${player.pos}</div> | |
| </div> | |
| <div style="text-align:right"> | |
| <div style="font-size:.7em;color:rgba(255,255,255,.7);text-transform:uppercase">${player.rarity}</div> | |
| </div> | |
| </div> | |
| <div style="text-align:center;margin:15px 0;font-size:3em">${posEmoji}</div> | |
| <div class="card-name">${player.name}</div> | |
| <div class="card-meta"> | |
| <span class="card-nation">${getFlag(player.nation)} ${player.nation}</span> | |
| <span class="card-club">⚽ ${player.club}</span> | |
| </div> | |
| <div style="margin-top:8px;font-size:.7em;color:rgba(255,255,255,.8)"> | |
| <div style="display:grid;grid-template-columns:1fr 1fr;gap:2px 8px"> | |
| <div>⚡ ${stats.pace}</div><div>🎯 ${stats.shot}</div> | |
| <div>📬 ${stats.pass}</div><div>💫 ${stats.dribble}</div> | |
| <div>🛡️ ${stats.def}</div><div>💪 ${stats.phys}</div> | |
| </div> | |
| </div> | |
| </div> | |
| </div> | |
| </div>`; | |
| } | |
| // ============ RENDER PACKS MENU ========== | |
| function renderPacks(){ | |
| const grid = document.getElementById('packsGrid'); | |
| grid.innerHTML = PACKS.map(p=>` | |
| <div class="pack-card ${p.class}" onclick="openPack('${p.id}')"> | |
| <div style="font-size:2em;margin-bottom:10px">${p.id==='icon'?'👑':p.id==='icon_pro'?'🏆':p.id==='epic'?'💎':p.id==='gold'?'🥇':p.id==='rare'?'🔷':p.id==='common'?'🟢':'🎁'}</div> | |
| <div class="pack-name" style="color:${p.iconColor}">${p.name}</div> | |
| <div class="pack-desc">${p.desc}</div> | |
| <div class="pack-price">⚽ ${formatCoins(p.price)}</div> | |
| <div class="pack-items">${p.items} players inside</div> | |
| </div> | |
| `).join(''); | |
| } | |
| // ============ OPEN PACK ========== | |
| function openPack(packId){ | |
| const pack = PACKS.find(p=>p.id===packId); | |
| if(!pack) return; | |
| if(coins < pack.price){ | |
| alert('Not enough coins! You have '+formatCoins(coins)+' coins.'); | |
| return; | |
| } | |
| coins -= pack.price; | |
| updateCoinsDisplay(); | |
| currentPack = pack; | |
| // Pick players based on pack type | |
| const rarities = getPackRarities(pack); | |
| let players = []; | |
| rarities.forEach(r=>{ | |
| const pool = getPlayersForRarity(r); | |
| const count = r===pack.rarity ? Math.ceil(pack.items*0.5) : Math.floor(pack.items/rarities.length); | |
| players.push(...pickRandom(pool,count)); | |
| }); | |
| // Fill remaining slots | |
| while(players.length < pack.items){ | |
| const r = rarities[Math.floor(Math.random()*rarities.length)]; | |
| const pool = getPlayersForRarity(r); | |
| const pick = pool[Math.floor(Math.random()*pool.length)]; | |
| if(!players.find(p=>p.name===pick.name)){ | |
| players.push(pick); | |
| } | |
| } | |
| players = shuffle(players).slice(0,pack.items); | |
| pendingPlayers = players; | |
| // Show pack opening screen | |
| showScreen('opener'); | |
| const content = document.getElementById('packContent'); | |
| content.innerHTML = ` | |
| <div class="pack-visual" style="background:linear-gradient(145deg,${pack.iconColor}22,${pack.iconColor}44);border:3px solid ${pack.iconColor}"> | |
| <div style="font-size:4em">${pack.id==='icon'?'👑':pack.id==='icon_pro'?'🏆':pack.id==='epic'?'💎':pack.id==='gold'?'🥇':pack.id==='rare'?'🔷':pack.id==='common'?'🟢':'🎁'}</div> | |
| </div> | |
| <h2 style="color:${pack.iconColor};margin-bottom:10px;font-size:1.5em">${pack.name}</h2> | |
| <p style="color:#8892b0;margin-bottom:30px">${pack.items} players inside</p> | |
| <button class="open-btn" onclick="revealCards()">OPEN PACK</button> | |
| `; | |
| } | |
| // ============ REVEAL CARDS ========== | |
| function revealCards(){ | |
| const players = pendingPlayers; | |
| if(!players) return; | |
| const content = document.getElementById('packContent'); | |
| let html = `<div class="section-title">Your Players!</div>`; | |
| html += `<div class="cards-grid">`; | |
| players.forEach((p,i)=>{ | |
| html += renderPlayerCard(p,i); | |
| }); | |
| html += `</div>`; | |
| html += `<div style="text-align:center;margin:30px 0"> | |
| <button class="open-btn" onclick="showMenu()" style="font-size:1em;padding:14px 30px">BACK TO MENU</button> | |
| </div>`; | |
| content.innerHTML = html; | |
| // Spawn particles for high-value cards | |
| const hasIcon = players.some(p=>p.rarity==='icon'); | |
| const hasEpic = players.some(p=>p.rarity==='epic'); | |
| if(hasIcon || hasEpic){ | |
| for(let i=0;i<30;i++){ | |
| setTimeout(()=>{ | |
| const particle = document.createElement('div'); | |
| particle.className='particle'; | |
| particle.style.left=Math.random()*100+'vw'; | |
| particle.style.top=Math.random()*100+'vh'; | |
| particle.style.background=hasIcon?'#e8b800':'#9b59b6'; | |
| document.body.appendChild(particle); | |
| setTimeout(()=>particle.remove(),1000); | |
| },i*50); | |
| } | |
| } | |
| } | |
| // ============ NAVIGATION ========== | |
| function showScreen(id){ | |
| document.querySelectorAll('.screen').forEach(s=>s.classList.remove('active')); | |
| document.getElementById(id).classList.add('active'); | |
| window.scrollTo(0,0); | |
| } | |
| function showMenu(){ | |
| showScreen('menu'); | |
| updateCoinsDisplay(); | |
| } | |
| function updateCoinsDisplay(){ | |
| document.getElementById('menuCoins').textContent = formatCoins(coins); | |
| document.getElementById('openerCoins').textContent = formatCoins(coins); | |
| } | |
| // ============ INIT ========== | |
| renderPacks(); | |
| updateCoinsDisplay(); | |
| </script> | |
| </body> | |
| </html> |