/* ── Demo 54: Esports Tournament — NEXUS ── */
/* Black / Lime #a3ff12 / Orange #ff6520 / Rajdhani */
:root {
--black: #060608;
--dark: #0c0e10;
--panel: #111418;
--border: #1e2428;
--text: #e8eef0;
--muted: #6a7480;
--lime: #a3ff12;
--lime-dim: rgba(163,255,18,0.12);
--orange: #ff6520;
--cyan: #12d8ff;
--glow-lime: 0 0 10px rgba(163,255,18,0.5), 0 0 30px rgba(163,255,18,0.2);
--glow-orange: 0 0 10px rgba(255,101,32,0.5);
}
*, *::before, *::after { margin: 0; padding: 0; box-sizing: border-box; }
body { font-family: 'Rajdhani', -apple-system, sans-serif; background: var(--black); color: var(--text); -webkit-font-smoothing: antialiased; overflow-x: hidden; line-height: 1.5; }
.scanline { position: fixed; inset: 0; z-index: 200; pointer-events: none; background: repeating-linear-gradient(0deg, transparent, transparent 3px, rgba(0,0,0,0.04) 3px, rgba(0,0,0,0.04) 6px); }
.section-tag { display: block; font-family: 'JetBrains Mono', monospace; font-size: 0.65rem; letter-spacing: 0.15em; color: var(--lime); margin-bottom: 0.75rem; }
.lime-text { color: var(--lime); text-shadow: var(--glow-lime); }
.btn-lime { display: inline-block; padding: 0.85rem 2rem; background: var(--lime); color: var(--black); font-family: 'Rajdhani', sans-serif; font-size: 0.85rem; font-weight: 700; letter-spacing: 0.1em; text-transform: uppercase; text-decoration: none; clip-path: polygon(8px 0%, 100% 0%, calc(100% - 8px) 100%, 0% 100%); transition: background 0.2s, box-shadow 0.2s; }
.btn-lime:hover { background: #c0ff40; box-shadow: var(--glow-lime); }
.btn-ghost-e { display: inline-block; padding: 0.85rem 1.75rem; border: 1px solid var(--lime); color: var(--lime); font-family: 'Rajdhani', sans-serif; font-size: 0.85rem; font-weight: 700; letter-spacing: 0.1em; text-transform: uppercase; text-decoration: none; clip-path: polygon(8px 0%, 100% 0%, calc(100% - 8px) 100%, 0% 100%); transition: background 0.2s; }
.btn-ghost-e:hover { background: var(--lime-dim); }
/* Nav */
.nav { position: fixed; top: 0; left: 0; right: 0; z-index: 100; display: flex; align-items: center; justify-content: space-between; padding: 1rem 2.5rem; background: rgba(6,6,8,0.92); backdrop-filter: blur(10px); border-bottom: 1px solid var(--border); }
.nav-brand { display: flex; align-items: center; gap: 0.5rem; }
.nb-icon { font-size: 1.2rem; color: var(--lime); text-shadow: var(--glow-lime); }
.nav-brand span { font-size: 1.1rem; font-weight: 700; letter-spacing: 0.15em; color: var(--text); }
.nav-links { display: flex; gap: 2.5rem; list-style: none; }
.nav-links a { font-family: 'JetBrains Mono', monospace; font-size: 0.68rem; letter-spacing: 0.1em; color: var(--muted); text-decoration: none; transition: color 0.2s; }
.nav-links a:hover { color: var(--lime); }
.nav-live { display: flex; align-items: center; gap: 0.4rem; font-family: 'JetBrains Mono', monospace; font-size: 0.65rem; letter-spacing: 0.15em; color: var(--orange); }
.nl-dot { width: 6px; height: 6px; background: var(--orange); border-radius: 50%; animation: blink 1s step-end infinite; box-shadow: var(--glow-orange); }
@keyframes blink { 0%,100%{opacity:1} 50%{opacity:0} }
/* Hero */
.hero { position: relative; min-height: 100vh; display: flex; align-items: center; padding: 7rem 2.5rem 5rem; overflow: hidden; }
#hero-canvas { position: absolute; inset: 0; width: 100%; height: 100%; pointer-events: none; }
.hero-inner { position: relative; z-index: 1; }
.hero-badge { font-family: 'JetBrains Mono', monospace; font-size: 0.68rem; letter-spacing: 0.2em; color: var(--orange); margin-bottom: 1.5rem; display: block; }
.hero-h1 { font-size: clamp(4rem, 12vw, 10rem); font-weight: 700; line-height: 0.9; letter-spacing: -0.02em; margin-bottom: 2rem; }
.h1-lime { color: var(--lime); text-shadow: var(--glow-lime); }
.hero-prize { display: flex; flex-direction: column; gap: 0.25rem; margin-bottom: 2rem; }
.hp-label { font-family: 'JetBrains Mono', monospace; font-size: 0.65rem; letter-spacing: 0.18em; color: var(--muted); }
.hp-amount { font-family: 'JetBrains Mono', monospace; font-size: 2.5rem; font-weight: 700; color: var(--lime); line-height: 1; text-shadow: var(--glow-lime); }
.hero-ctas { display: flex; gap: 1rem; margin-bottom: 3rem; }
.hero-stats-row { display: flex; gap: 3rem; flex-wrap: wrap; }
.hsr-item { display: flex; flex-direction: column; gap: 0.2rem; }
.hsr-num { font-family: 'JetBrains Mono', monospace; font-size: 1.8rem; font-weight: 700; color: var(--text); line-height: 1; }
.hsr-label { font-size: 0.72rem; color: var(--muted); letter-spacing: 0.08em; }
/* Bracket */
.bracket-section { padding: 5rem 2.5rem; border-top: 1px solid var(--border); }
.bracket-header { margin-bottom: 2.5rem; }
.bracket-header h2 { font-size: clamp(2rem, 5vw, 4rem); font-weight: 700; line-height: 1; }
.bracket-visual { position: relative; overflow-x: auto; padding: 1rem 0; }
#bracket-canvas { position: absolute; inset: 0; width: 100%; height: 100%; pointer-events: none; }
.bracket-teams { display: grid; grid-template-columns: 180px 180px 180px; gap: 0; position: relative; z-index: 1; min-height: 320px; padding: 1rem 0; }
.bt-match { display: flex; flex-direction: column; gap: 4px; }
.bt-match.qf { grid-column: 1; }
.bt-match.sf { grid-column: 2; }
.bt-match.final { grid-column: 3; align-self: center; }
.bt-match.qf[style*="--row:1"] { grid-row: 1; }
.bt-match.qf[style*="--row:2"] { grid-row: 2; }
.bt-match.qf[style*="--row:3"] { grid-row: 3; }
.bt-match.qf[style*="--row:4"] { grid-row: 4; }
.bt-match.sf[style*="--row:1"] { grid-row: 1 / 3; align-self: center; }
.bt-match.sf[style*="--row:2"] { grid-row: 3 / 5; align-self: center; }
.bt-match.final { grid-row: 1 / 5; }
.bt-team { padding: 0.5rem 0.75rem; border: 1px solid var(--border); background: var(--panel); font-size: 0.78rem; font-weight: 700; letter-spacing: 0.1em; color: var(--muted); transition: all 0.2s; }
.bt-team--win { border-color: rgba(163,255,18,0.3); color: var(--lime); background: var(--lime-dim); }
.bt-team--active { border-color: var(--orange); color: var(--orange); animation: pulse-border 1.5s ease-in-out infinite; }
@keyframes pulse-border { 0%,100%{border-color:var(--orange)} 50%{border-color:rgba(255,101,32,0.3)} }
/* Players */
.players-section { padding: 5rem 2.5rem; border-top: 1px solid var(--border); }
.players-section h2 { font-size: clamp(2rem, 5vw, 4rem); font-weight: 700; margin-bottom: 2.5rem; }
.players-grid { display: grid; grid-template-columns: 1fr 1fr 1fr 1fr; gap: 1px; background: var(--border); border: 1px solid var(--border); }
.player-card { background: var(--dark); padding: 1.5rem; position: relative; transition: background 0.2s; }
.player-card:hover { background: var(--panel); }
.player-card--featured { border-top: 2px solid var(--lime); }
.pc-rank { font-family: 'JetBrains Mono', monospace; font-size: 0.7rem; color: var(--muted); margin-bottom: 1rem; }
.player-card--featured .pc-rank { color: var(--lime); }
.pc-avatar { width: 60px; height: 60px; border-radius: 2px; margin-bottom: 1rem; }
.pc-avatar--1 { background: linear-gradient(135deg, #1a2a10, #2a4a18, #1a3a0c); }
.pc-avatar--2 { background: linear-gradient(135deg, #1a0a20, #300a38, #200a28); }
.pc-avatar--3 { background: linear-gradient(135deg, #0a1a2a, #0a2a40, #0a1a30); }
.pc-avatar--4 { background: linear-gradient(135deg, #2a1a08, #401a08, #2a1a10); }
.pc-handle { font-size: 1.2rem; font-weight: 700; letter-spacing: 0.1em; color: var(--text); }
.pc-real { font-family: 'JetBrains Mono', monospace; font-size: 0.65rem; color: var(--muted); margin-bottom: 0.2rem; }
.pc-team { font-size: 0.72rem; font-weight: 700; letter-spacing: 0.1em; color: var(--lime); margin-bottom: 1rem; }
.pc-stats { display: flex; flex-direction: column; gap: 0.4rem; }
.pcs-item { display: flex; justify-content: space-between; }
.pcs-val { font-family: 'JetBrains Mono', monospace; font-size: 0.85rem; font-weight: 700; color: var(--text); }
.pcs-key { font-size: 0.68rem; color: var(--muted); }
/* Prize */
.prize-section { padding: 5rem 2.5rem; background: var(--dark); border-top: 1px solid var(--border); }
.prize-inner { max-width: 700px; }
.prize-section h2 { font-size: clamp(2rem, 5vw, 4rem); font-weight: 700; line-height: 1.1; margin-bottom: 3rem; }
.prize-bars { display: flex; flex-direction: column; gap: 1rem; }
.pb-item { display: grid; grid-template-columns: 60px 1fr 120px; align-items: center; gap: 1rem; }
.pb-place { font-family: 'JetBrains Mono', monospace; font-size: 0.72rem; color: var(--muted); }
.pb-bar { height: 4px; background: var(--border); }
.pb-fill { height: 100%; width: var(--w,0%); background: var(--lime); transform-origin: left; transform: scaleX(0); box-shadow: 0 0 6px var(--lime); }
.pb-amount { font-family: 'JetBrains Mono', monospace; font-size: 0.75rem; color: var(--lime); text-align: right; }
/* Footer */
.footer-e { padding: 1.5rem 2.5rem; background: var(--black); border-top: 1px solid var(--border); display: flex; align-items: center; gap: 1rem; }
.footer-e span { font-family: 'JetBrains Mono', monospace; font-size: 0.65rem; color: var(--muted); }
.footer-e span:last-child { margin-left: auto; }
@media (max-width: 900px) { .players-grid { grid-template-columns: 1fr 1fr; } }
@media (max-width: 600px) { .nav-links { display: none; } .players-grid { grid-template-columns: 1fr; } .bracket-section { padding: 4rem 1.5rem; } }
html.reduced-motion .nl-dot, html.reduced-motion .bt-team--active { animation: none !important; }
html.reduced-motion * { transition-duration: 0.01ms !important; }
if (!window.MotionPreference) {
const __mql = window.matchMedia("(prefers-reduced-motion: reduce)");
const __listeners = new Set();
const MotionPreference = {
prefersReducedMotion() {
return __mql.matches;
},
setOverride(value) {
const reduced = Boolean(value);
document.documentElement.classList.toggle("reduced-motion", reduced);
window.dispatchEvent(new CustomEvent("motion-preference", { detail: { reduced } }));
for (const listener of __listeners) {
try {
listener({ reduced, override: reduced, systemReduced: __mql.matches });
} catch {}
}
},
onChange(listener) {
__listeners.add(listener);
try {
listener({
reduced: __mql.matches,
override: null,
systemReduced: __mql.matches,
});
} catch {}
return () => __listeners.delete(listener);
},
getState() {
return { reduced: __mql.matches, override: null, systemReduced: __mql.matches };
},
};
window.MotionPreference = MotionPreference;
}
function prefersReducedMotion() {
return window.MotionPreference.prefersReducedMotion();
}
function initDemoShell() {
// No-op shim in imported standalone snippets.
}
import gsap from 'gsap';
import { ScrollTrigger } from 'gsap/ScrollTrigger';
import Lenis from 'lenis';
gsap.registerPlugin(ScrollTrigger);
initDemoShell({ title: 'NEXUS Esports Tournament', category: 'pages', tech: ['gsap', 'scroll-trigger', 'lenis', 'canvas-2d', 'rajdhani'] });
const reduced = prefersReducedMotion();
if (reduced) document.documentElement.classList.add('reduced-motion');
const lenis = new Lenis({ lerp: 0.1, smoothWheel: true });
lenis.on('scroll', ScrollTrigger.update);
gsap.ticker.add((t) => lenis.raf(t * 1000));
gsap.ticker.lagSmoothing(0);
// Hero canvas — particle field
const heroCanvas = document.getElementById('hero-canvas');
const hCtx = heroCanvas.getContext('2d');
let hW, hH;
function resizeHero() { hW = heroCanvas.width = window.innerWidth; hH = heroCanvas.height = window.innerHeight; }
resizeHero();
window.addEventListener('resize', resizeHero);
const particles = Array.from({ length: 80 }, () => ({
x: Math.random(), y: Math.random(),
vx: (Math.random() - 0.5) * 0.0003, vy: (Math.random() - 0.5) * 0.0003,
size: Math.random() * 1.5 + 0.5,
alpha: Math.random() * 0.4 + 0.1,
lime: Math.random() > 0.7,
}));
if (!reduced) {
function drawHero() {
hCtx.clearRect(0, 0, hW, hH);
particles.forEach((p) => {
p.x = (p.x + p.vx + 1) % 1;
p.y = (p.y + p.vy + 1) % 1;
hCtx.beginPath();
hCtx.arc(p.x * hW, p.y * hH, p.size, 0, Math.PI * 2);
hCtx.fillStyle = p.lime ? `rgba(163,255,18,${p.alpha})` : `rgba(232,238,240,${p.alpha * 0.4})`;
hCtx.fill();
});
// Grid lines
hCtx.strokeStyle = 'rgba(30,36,40,0.8)';
hCtx.lineWidth = 1;
for (let x = 0; x < hW; x += 60) { hCtx.beginPath(); hCtx.moveTo(x,0); hCtx.lineTo(x,hH); hCtx.stroke(); }
for (let y = 0; y < hH; y += 60) { hCtx.beginPath(); hCtx.moveTo(0,y); hCtx.lineTo(hW,y); hCtx.stroke(); }
requestAnimationFrame(drawHero);
}
requestAnimationFrame(drawHero);
}
// Prize counter
const prizeEl = document.getElementById('prize-count');
if (!reduced) {
ScrollTrigger.create({
trigger: '.hero', start: 'top top', end: 'bottom center',
onUpdate: (self) => {
const val = Math.round(2100000 * self.progress);
prizeEl.textContent = '$' + val.toLocaleString();
},
});
} else {
prizeEl.textContent = '$2,100,000';
}
// Hero stats counters
document.querySelectorAll('.hsr-num').forEach((el) => {
const target = parseInt(el.dataset.target);
if (!reduced) {
ScrollTrigger.create({
trigger: '.hero-stats-row', start: 'top 80%', end: 'top 30%',
onUpdate: (self) => {
const val = Math.round(target * self.progress);
el.textContent = target >= 1000000 ? (val / 1000000).toFixed(1) + 'M' : val.toLocaleString();
},
});
} else {
el.textContent = target >= 1000000 ? (target/1000000).toFixed(1)+'M' : target.toLocaleString();
}
});
// Hero entrance
if (!reduced) {
gsap.set(['.hero-badge', '.hero-h1', '.hero-prize', '.hero-ctas', '.hero-stats-row'], { opacity: 0, y: 30 });
gsap.timeline({ delay: 0.3, defaults: { ease: 'expo.out' } })
.to('.hero-badge', { opacity: 1, y: 0, duration: 0.6 })
.to('.hero-h1', { opacity: 1, y: 0, duration: 1 }, '-=0.3')
.to('.hero-prize', { opacity: 1, y: 0, duration: 0.7 }, '-=0.5')
.to('.hero-ctas', { opacity: 1, y: 0, duration: 0.6 }, '-=0.4')
.to('.hero-stats-row', { opacity: 1, y: 0, duration: 0.6 }, '-=0.3');
}
// Bracket reveal
if (!reduced) {
document.querySelectorAll('.bt-match').forEach((m, i) => {
gsap.set(m, { opacity: 0, x: -15 });
gsap.to(m, { opacity: 1, x: 0, duration: 0.5, ease: 'expo.out', delay: i * 0.08,
scrollTrigger: { trigger: '.bracket-teams', start: 'top 75%', toggleActions: 'play none none reverse' } });
});
}
// Players reveal
if (!reduced) {
document.querySelectorAll('.player-card').forEach((card, i) => {
gsap.set(card, { opacity: 0, y: 20 });
gsap.to(card, { opacity: 1, y: 0, duration: 0.6, ease: 'expo.out', delay: i * 0.1,
scrollTrigger: { trigger: '.players-grid', start: 'top 75%', toggleActions: 'play none none reverse' } });
});
}
// Prize bars
document.querySelectorAll('.pb-fill').forEach((fill, i) => {
if (!reduced) {
gsap.to(fill, { scaleX: 1, duration: 1.2, ease: 'expo.out', delay: i * 0.1,
scrollTrigger: { trigger: '.prize-bars', start: 'top 75%', toggleActions: 'play none none reverse' } });
} else {
fill.style.transform = 'scaleX(1)';
}
});
window.addEventListener('motion-preference', (e) => { gsap.globalTimeline.paused(e.detail.reduced); });
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>NEXUS Championship Series — Season 8</title>
<link rel="preconnect" href="https://fonts.googleapis.com">
<link href="https://fonts.googleapis.com/css2?family=Rajdhani:wght@500;600;700&family=JetBrains+Mono:wght@400;500;700&display=swap" rel="stylesheet">
<link rel="stylesheet" href="style.css">
<script type="importmap">{"imports":{"gsap":"/vendor/gsap/index.js","gsap/ScrollTrigger":"/vendor/gsap/ScrollTrigger.js","gsap/SplitText":"/vendor/gsap/SplitText.js","gsap/Flip":"/vendor/gsap/Flip.js","gsap/ScrambleTextPlugin":"/vendor/gsap/ScrambleTextPlugin.js","gsap/TextPlugin":"/vendor/gsap/TextPlugin.js","gsap/all":"/vendor/gsap/all.js","gsap/":"/vendor/gsap/","lenis":"/vendor/lenis/dist/lenis.mjs","three":"/vendor/three/build/three.module.js","three/addons/":"/vendor/three/examples/jsm/"}}</script>
<style>html.lenis,
html.lenis body {
height: auto;
}
.lenis:not(.lenis-autoToggle).lenis-stopped {
overflow: clip;
}
.lenis [data-lenis-prevent],
.lenis [data-lenis-prevent-wheel],
.lenis [data-lenis-prevent-touch] {
overscroll-behavior: contain;
}
.lenis.lenis-smooth iframe {
pointer-events: none;
}
.lenis.lenis-autoToggle {
transition-property: overflow;
transition-duration: 1ms;
transition-behavior: allow-discrete;
}</style>
</head>
<body>
<div class="scanline" aria-hidden="true"></div>
<nav class="nav">
<div class="nav-brand">
<div class="nb-icon">⬡</div>
<span>NEXUS</span>
</div>
<ul class="nav-links">
<li><a href="#bracket">Bracket</a></li>
<li><a href="#players">Players</a></li>
<li><a href="#schedule">Schedule</a></li>
<li><a href="#prize">Prize Pool</a></li>
</ul>
<div class="nav-live"><span class="nl-dot"></span>LIVE NOW</div>
</nav>
<section class="hero">
<canvas id="hero-canvas" aria-hidden="true"></canvas>
<div class="hero-inner">
<div class="hero-badge">SEASON 8 · GRAND FINALS</div>
<h1 class="hero-h1">NEXUS<br><span class="h1-lime">CHAMPIONSHIP</span><br>SERIES</h1>
<div class="hero-prize">
<span class="hp-label">PRIZE POOL</span>
<span class="hp-amount" id="prize-count">$0</span>
</div>
<div class="hero-ctas">
<a href="#bracket" class="btn-lime">View Bracket</a>
<a href="#" class="btn-ghost-e">Watch Live ▶</a>
</div>
<div class="hero-stats-row">
<div class="hsr-item"><span class="hsr-num" data-target="128">0</span><span class="hsr-label">Teams</span></div>
<div class="hsr-item"><span class="hsr-num" data-target="32">0</span><span class="hsr-label">Countries</span></div>
<div class="hsr-item"><span class="hsr-num" data-target="48">0</span><span class="hsr-label">Days</span></div>
<div class="hsr-item"><span class="hsr-num" data-target="2100000">0</span><span class="hsr-label">Peak Viewers</span></div>
</div>
</div>
</section>
<section class="bracket-section" id="bracket">
<div class="bracket-header">
<span class="section-tag">// Tournament Bracket</span>
<h2>ROAD TO<br><span class="lime-text">VICTORY</span></h2>
</div>
<div class="bracket-visual">
<canvas id="bracket-canvas" aria-label="Tournament bracket visualization"></canvas>
<div class="bracket-teams" id="bracket-teams">
<!-- Quarterfinals -->
<div class="bt-match qf" style="--row:1">
<div class="bt-team bt-team--win">PHANTOM</div>
<div class="bt-team">VORTEX</div>
</div>
<div class="bt-match qf" style="--row:2">
<div class="bt-team bt-team--win">APEX</div>
<div class="bt-team">STORM</div>
</div>
<div class="bt-match qf" style="--row:3">
<div class="bt-team bt-team--win">ZERO</div>
<div class="bt-team">BLAZE</div>
</div>
<div class="bt-match qf" style="--row:4">
<div class="bt-team">NOVA</div>
<div class="bt-team bt-team--active">CTRL</div>
</div>
<!-- Semifinals -->
<div class="bt-match sf" style="--row:1">
<div class="bt-team bt-team--win">PHANTOM</div>
<div class="bt-team">APEX</div>
</div>
<div class="bt-match sf" style="--row:2">
<div class="bt-team">ZERO</div>
<div class="bt-team bt-team--active">CTRL</div>
</div>
<!-- Finals -->
<div class="bt-match final">
<div class="bt-team bt-team--win">PHANTOM</div>
<div class="bt-team bt-team--active">CTRL</div>
</div>
</div>
</div>
</section>
<section class="players-section" id="players">
<span class="section-tag">// Featured Players</span>
<h2>TOP <span class="lime-text">COMPETITORS</span></h2>
<div class="players-grid">
<div class="player-card player-card--featured">
<div class="pc-rank">#1</div>
<div class="pc-avatar pc-avatar--1"></div>
<div class="pc-info">
<div class="pc-handle">SPECTER</div>
<div class="pc-real">Marcus Chen</div>
<div class="pc-team">PHANTOM</div>
</div>
<div class="pc-stats">
<div class="pcs-item"><span class="pcs-val">94.2%</span><span class="pcs-key">Win Rate</span></div>
<div class="pcs-item"><span class="pcs-val">3.8</span><span class="pcs-key">K/D Ratio</span></div>
<div class="pcs-item"><span class="pcs-val">2,840</span><span class="pcs-key">Kills</span></div>
</div>
</div>
<div class="player-card">
<div class="pc-rank">#2</div>
<div class="pc-avatar pc-avatar--2"></div>
<div class="pc-info">
<div class="pc-handle">GHOST</div>
<div class="pc-real">Elena Voss</div>
<div class="pc-team">CTRL</div>
</div>
<div class="pc-stats">
<div class="pcs-item"><span class="pcs-val">91.7%</span><span class="pcs-key">Win Rate</span></div>
<div class="pcs-item"><span class="pcs-val">3.5</span><span class="pcs-key">K/D Ratio</span></div>
</div>
</div>
<div class="player-card">
<div class="pc-rank">#3</div>
<div class="pc-avatar pc-avatar--3"></div>
<div class="pc-info">
<div class="pc-handle">BLITZ</div>
<div class="pc-real">Yuto Nakamura</div>
<div class="pc-team">ZERO</div>
</div>
<div class="pc-stats">
<div class="pcs-item"><span class="pcs-val">88.4%</span><span class="pcs-key">Win Rate</span></div>
<div class="pcs-item"><span class="pcs-val">3.2</span><span class="pcs-key">K/D Ratio</span></div>
</div>
</div>
<div class="player-card">
<div class="pc-rank">#4</div>
<div class="pc-avatar pc-avatar--4"></div>
<div class="pc-info">
<div class="pc-handle">SURGE</div>
<div class="pc-real">Priya Sharma</div>
<div class="pc-team">APEX</div>
</div>
<div class="pc-stats">
<div class="pcs-item"><span class="pcs-val">86.1%</span><span class="pcs-key">Win Rate</span></div>
<div class="pcs-item"><span class="pcs-val">3.0</span><span class="pcs-key">K/D Ratio</span></div>
</div>
</div>
</div>
</section>
<section class="prize-section" id="prize">
<div class="prize-inner">
<span class="section-tag">// Prize Distribution</span>
<h2>TOTAL POOL<br><span class="lime-text" id="prize-big">$2,100,000</span></h2>
<div class="prize-bars">
<div class="pb-item"><span class="pb-place">1st</span><div class="pb-bar"><div class="pb-fill" style="--w:100%"></div></div><span class="pb-amount">$1,000,000</span></div>
<div class="pb-item"><span class="pb-place">2nd</span><div class="pb-bar"><div class="pb-fill" style="--w:50%"></div></div><span class="pb-amount">$500,000</span></div>
<div class="pb-item"><span class="pb-place">3rd</span><div class="pb-bar"><div class="pb-fill" style="--w:28%"></div></div><span class="pb-amount">$300,000</span></div>
<div class="pb-item"><span class="pb-place">4th</span><div class="pb-bar"><div class="pb-fill" style="--w:14%"></div></div><span class="pb-amount">$150,000</span></div>
<div class="pb-item"><span class="pb-place">5–8th</span><div class="pb-bar"><div class="pb-fill" style="--w:7%"></div></div><span class="pb-amount">$37,500 ea</span></div>
</div>
</div>
</section>
<footer class="footer-e">
<div class="nb-icon" style="color:#a3ff12">⬡</div>
<span>NEXUS Championship Series · Season 8</span>
<span>© 2025 NEXUS Esports LLC</span>
</footer>
<script type="module" src="script.js"></script>
</body>
</html>