{"project":{"id":"AbifYBV","userId":"davidyarham@gmail.com","username":null,"userPicture":null,"name":"Super Voxel Football","thumbnail":"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","visible":true,"contributors":"","githubRepo":null,"forkedFrom":null,"isTemplate":false,"tags":"","files":{"folder":"","files":[{"name":"index.html","content":"<!DOCTYPE html>\n<html lang=\"en\">\n<head>\n<meta charset=\"utf-8\">\n<meta name=\"viewport\" content=\"width=device-width, initial-scale=1\">\n<title>Super Voxel Football</title>\n<link rel=\"preconnect\" href=\"https://fonts.googleapis.com\">\n<link rel=\"preconnect\" href=\"https://fonts.gstatic.com\" crossorigin>\n<link href=\"https://fonts.googleapis.com/css2?family=Archivo+Black&family=Space+Grotesk:wght@400;600;700&display=swap\" rel=\"stylesheet\">\n<link rel=\"stylesheet\" href=\"css/styles.css\">\n</head>\n<body>\n<div id=\"app\">\n  <div id=\"vignette\"></div>\n\n  <div id=\"hud\" class=\"hidden\">\n    <div id=\"hud-top\">\n      <div id=\"score-chip\">\n        <span id=\"half-chip\">FIRST HALF</span>\n        <span id=\"score-line\">\n          <span class=\"dot home\"></span>\n          <span id=\"score-home-name\">VOX</span>\n          <span id=\"score-home\">0</span>\n          <span class=\"vs\">&mdash;</span>\n          <span id=\"score-away\">0</span>\n          <span id=\"score-away-name\">DYN</span>\n          <span class=\"dot away\"></span>\n        </span>\n      </div>\n      <div id=\"timer\">00:00</div>\n    </div>\n    <div id=\"center-msg\"></div>\n    <div id=\"popup\"></div>\n    <div id=\"meters\">\n      <div id=\"power-wrap\" class=\"hidden\">\n        <div id=\"power-fill\"></div>\n        <span class=\"meter-label\" id=\"power-label\">SHOOT POWER</span>\n      </div>\n    </div>\n  </div>\n\n  <div id=\"card\" class=\"overlay hidden\">\n    <div class=\"card-box\">\n      <div class=\"card-kicker\" id=\"card-no\"></div>\n      <h2 id=\"card-name\"></h2>\n      <p id=\"card-desc\"></p>\n      <div class=\"card-hint blink\">PRESS <b>ENTER</b> TO START</div>\n    </div>\n  </div>\n\n  <div id=\"results\" class=\"overlay hidden\">\n    <div class=\"card-box\">\n      <div class=\"card-kicker\" id=\"results-kicker\">HALF TIME</div>\n      <h2 id=\"results-title\">0 &mdash; 0</h2>\n      <div id=\"results-table\"></div>\n      <div class=\"card-hint blink\" id=\"results-hint\">PRESS <b>ENTER</b> TO CONTINUE</div>\n    </div>\n  </div>\n\n  <div id=\"title\" class=\"overlay\">\n    <div class=\"title-box\">\n      <div class=\"title-kicker\">TERRACES &middot; TURF &middot; GLORY</div>\n      <h1>SUPER<br>VOXEL<br>FOOTBALL</h1>\n      <p class=\"title-sub\">A voxel love-letter to Sensible Soccer &amp; Kick Off.<br>5-a-side. Two halves. No VAR.</p>\n      <div class=\"card-hint blink\">PRESS <b>ENTER</b> TO KICK OFF</div>\n      <div class=\"title-controls\">ARROWS / WASD MOVE &nbsp;&middot;&nbsp; SPACE TAP PASS &middot; HOLD SHOOT &nbsp;&middot;&nbsp; NO BALL? SPACE SLIDES</div>\n      <div class=\"title-controls touch-only\">LEFT STICK MOVE &nbsp;&middot;&nbsp; BUTTON TAP PASS &middot; HOLD SHOOT &nbsp;&middot;&nbsp; BEST IN LANDSCAPE</div>\n    </div>\n  </div>\n\n  <div id=\"touch-ui\">\n    <div id=\"t-stick\"><div id=\"t-nub\"></div></div>\n    <button id=\"t-action\">KICK</button>\n  </div>\n</div>\n\n<script src=\"./js/main.js\" type=\"module\"></script>\n\n</body>\n</html>\n"},{"name":"README.md","content":"# Super Voxel Football\n\nA voxel 3D 5-a-side football game in the spirit of Sensible Soccer and\nKick Off — same stadium DNA as Super Voxel Olympics: big-headed voxel\nplayers, instanced crowd, synthesized WebAudio terraces.\n\nVOXEL UTD (you, in red) vs DYNAMO BLU. Two halves of 45 scaled minutes\n(2 real minutes each), kick-offs, throw-ins, corners, goal kicks, diving\nkeepers, slide tackles and goal celebrations with confetti.\n\n## Controls\n\n- **ARROWS / WASD** — move (control auto-switches to the red player nearest the ball)\n- **SPACE tap** — pass to the best-placed teammate\n- **SPACE hold + release** — shoot (power meter appears)\n- **SPACE without the ball** — slide tackle\n- **ENTER** — advance screens\n- Touch: left drag-stick to move, KICK button (tap pass / hold shoot)\n\n## Code layout\n\n- `js/lib.js` — three.js + shared helpers\n- `js/world.js` — the ground (pitch, markings, goals, stands, crowd, floodlights)\n- `js/athlete.js` — articulated voxel footballer + animation modes (run, kick, tackle, dive…)\n- `js/ball.js` — arcade ball physics (bounce, posts, net)\n- `js/ai.js` — team brains: formation, chasing, passing, shooting, keepers\n- `js/core.js` — renderer, camera, squads, shared state\n- `js/hud.js`, `js/audio.js`, `js/fx.js`\n- `js/main.js` — match flow, input, camera, render loop\n"}],"folders":[{"folder":"css","files":[{"name":"styles.css","content":":root {\n  --accent: #ff4b3a;\n  --amber: #ffb020;\n  --lime: #7ce34a;\n  --blue: #4aa3ff;\n  --ink: #0b1120;\n  --glass: rgba(10, 16, 30, 0.72);\n  --glass-line: rgba(255, 255, 255, 0.14);\n  font-size: 16px;\n}\n\n* { margin: 0; padding: 0; box-sizing: border-box; }\n\nhtml, body {\n  width: 100%;\n  height: 100%;\n  overflow: hidden;\n  background: #0b1120;\n  font-family: 'Space Grotesk', system-ui, sans-serif;\n  color: #fff;\n  user-select: none;\n  -webkit-user-select: none;\n}\n\n#app { position: fixed; inset: 0; }\n#app canvas { display: block; }\n\n#vignette {\n  position: absolute; inset: 0;\n  pointer-events: none;\n  background: radial-gradient(ellipse at center, transparent 58%, rgba(5, 9, 20, 0.42) 100%);\n  z-index: 5;\n}\n\n.hidden { display: none !important; }\n\n/* ---------- HUD ---------- */\n#hud { position: absolute; inset: 0; z-index: 10; pointer-events: none; }\n\n#hud-top {\n  position: absolute; top: 22px; left: 26px; right: 26px;\n  display: flex; justify-content: space-between; align-items: flex-start;\n}\n\n#score-chip {\n  display: flex; flex-direction: column; gap: 3px;\n  background: var(--glass);\n  border: 1px solid var(--glass-line);\n  border-left: 4px solid var(--accent);\n  border-radius: 12px;\n  padding: 10px 18px 12px;\n  backdrop-filter: blur(8px);\n  box-shadow: 0 10px 30px rgba(0,0,0,.35);\n}\n#half-chip {\n  font-size: 0.65rem; letter-spacing: 3px; font-weight: 700;\n  color: var(--amber);\n}\n#score-line {\n  font-family: 'Archivo Black', sans-serif;\n  font-size: 1.35rem; letter-spacing: 1px;\n  display: flex; align-items: center; gap: 10px;\n  font-variant-numeric: tabular-nums;\n}\n#score-line .dot {\n  width: 12px; height: 12px; border-radius: 3px;\n  display: inline-block;\n}\n#score-line .dot.home { background: var(--accent); }\n#score-line .dot.away { background: #2563eb; }\n#score-line .vs { color: #8fa3c8; font-size: 0.9rem; }\n\n#timer {\n  font-family: 'Archivo Black', sans-serif;\n  font-size: 2.2rem;\n  letter-spacing: 1px;\n  background: var(--glass);\n  border: 1px solid var(--glass-line);\n  border-radius: 14px;\n  padding: 8px 20px;\n  backdrop-filter: blur(8px);\n  font-variant-numeric: tabular-nums;\n  box-shadow: 0 10px 30px rgba(0,0,0,.35);\n}\n\n/* power meter */\n#meters {\n  position: absolute; bottom: 34px; left: 50%;\n  transform: translateX(-50%);\n  display: flex; flex-direction: column; gap: 14px;\n  width: min(420px, 74vw);\n}\n#power-wrap {\n  position: relative;\n  height: 20px;\n  background: var(--glass);\n  border: 1px solid var(--glass-line);\n  border-radius: 999px;\n  overflow: hidden;\n  backdrop-filter: blur(8px);\n  box-shadow: 0 10px 30px rgba(0,0,0,.35);\n}\n#power-fill {\n  height: 100%; width: 0%;\n  background: linear-gradient(90deg, var(--lime), var(--amber) 60%, var(--accent));\n  border-radius: 999px;\n  transition: width 40ms linear;\n}\n.meter-label {\n  position: absolute; inset: 0;\n  display: grid; place-items: center;\n  font-size: 0.62rem; font-weight: 700; letter-spacing: 3px;\n  color: rgba(255,255,255,.92);\n  text-shadow: 0 1px 4px rgba(0,0,0,.6);\n}\n\n/* center message (GOAL!, KICK OFF, FULL TIME) */\n#center-msg {\n  position: absolute; top: 34%; left: 50%;\n  transform: translate(-50%, -50%);\n  font-family: 'Archivo Black', sans-serif;\n  font-size: clamp(3rem, 11vw, 8rem);\n  letter-spacing: 4px;\n  text-shadow: 0 6px 0 rgba(0,0,0,.28), 0 18px 60px rgba(0,0,0,.5);\n  opacity: 0;\n  white-space: nowrap;\n  z-index: 12;\n}\n#center-msg.pop {\n  animation: msgpop 1.1s cubic-bezier(.2,1.6,.35,1) forwards;\n}\n#center-msg.go { color: var(--lime); }\n#center-msg.bad { color: var(--accent); }\n@keyframes msgpop {\n  0%   { opacity: 0; transform: translate(-50%,-50%) scale(2.2); }\n  18%  { opacity: 1; transform: translate(-50%,-50%) scale(1); }\n  75%  { opacity: 1; }\n  100% { opacity: 0; transform: translate(-50%,-50%) scale(.92); }\n}\n\n/* floating popup (scorer, corner, save) */\n#popup {\n  position: absolute; top: 46%; left: 50%;\n  transform: translateX(-50%);\n  font-family: 'Archivo Black', sans-serif;\n  font-size: clamp(1.4rem, 4vw, 2.6rem);\n  color: var(--amber);\n  text-shadow: 0 4px 0 rgba(0,0,0,.3), 0 12px 40px rgba(0,0,0,.5);\n  opacity: 0;\n  white-space: nowrap;\n  z-index: 12;\n}\n#popup.rise { animation: rise 1.6s ease-out forwards; }\n#popup.bad { color: var(--accent); }\n@keyframes rise {\n  0%   { opacity: 0; transform: translate(-50%, 26px) scale(.7); }\n  15%  { opacity: 1; transform: translate(-50%, 0) scale(1); }\n  70%  { opacity: 1; }\n  100% { opacity: 0; transform: translate(-50%, -46px) scale(.96); }\n}\n\n/* ---------- Overlays ---------- */\n.overlay {\n  position: absolute; inset: 0; z-index: 20;\n  display: grid; place-items: center;\n  background: radial-gradient(ellipse at center, rgba(6,10,22,.25) 0%, rgba(6,10,22,.68) 100%);\n  backdrop-filter: blur(3px);\n}\n\n.card-box, .title-box {\n  background: var(--glass);\n  border: 1px solid var(--glass-line);\n  border-radius: 24px;\n  padding: 42px 58px;\n  text-align: center;\n  max-width: min(620px, 90vw);\n  box-shadow: 0 30px 90px rgba(0,0,0,.55);\n  backdrop-filter: blur(14px);\n  animation: cardin .45s cubic-bezier(.2,1.4,.4,1);\n}\n@keyframes cardin {\n  from { opacity: 0; transform: translateY(26px) scale(.96); }\n  to   { opacity: 1; transform: none; }\n}\n\n.card-kicker, .title-kicker {\n  font-size: 0.7rem; font-weight: 700;\n  letter-spacing: 5px;\n  color: var(--amber);\n  margin-bottom: 12px;\n}\n\n.card-box h2 {\n  font-family: 'Archivo Black', sans-serif;\n  font-size: clamp(2rem, 6vw, 3.4rem);\n  letter-spacing: 2px;\n  line-height: 1.02;\n  background: linear-gradient(120deg, #fff 30%, #ffd9a0);\n  -webkit-background-clip: text;\n  background-clip: text;\n  -webkit-text-fill-color: transparent;\n  margin-bottom: 14px;\n}\n\n.card-hint {\n  font-size: 0.78rem; font-weight: 700; letter-spacing: 3px;\n  color: #e8eefc;\n}\n.card-hint b { color: var(--lime); }\n.blink { animation: blink 1.4s step-end infinite; }\n@keyframes blink { 50% { opacity: 0.25; } }\n\n/* title screen — floats free over the stadium, no modal */\n#title {\n  background: transparent;\n  backdrop-filter: none;\n}\n#title .title-box {\n  background: transparent;\n  border: none;\n  box-shadow: none;\n  backdrop-filter: none;\n  padding: 0;\n  max-width: none;\n}\n.title-box h1 {\n  font-family: 'Archivo Black', sans-serif;\n  font-size: clamp(3rem, 9.5vw, 5.4rem);\n  line-height: 0.95;\n  letter-spacing: 3px;\n  /* generous padding so background-clip:text never crops edge glyphs */\n  padding: 0.06em 0.2em;\n  background: linear-gradient(160deg, #ffffff 10%, #ffc46b 45%, var(--accent) 90%);\n  -webkit-background-clip: text;\n  background-clip: text;\n  -webkit-text-fill-color: transparent;\n  margin-bottom: 18px;\n  filter: drop-shadow(0 6px 0 rgba(0,0,0,.35)) drop-shadow(0 16px 34px rgba(0,0,0,.5));\n}\n.title-kicker,\n.title-sub,\n#title .card-hint,\n.title-controls {\n  text-shadow: 0 2px 10px rgba(0,0,0,.75), 0 0 30px rgba(0,0,0,.5);\n}\n.title-sub {\n  color: #e6eeff;\n  font-size: 0.95rem;\n  line-height: 1.5;\n  margin-bottom: 28px;\n}\n.title-controls {\n  margin-top: 22px;\n  font-size: 0.68rem; letter-spacing: 2.5px; font-weight: 600;\n  color: #c6d4ee;\n}\n\n/* results table */\n#results-table { margin: 6px 0 26px; max-height: 40vh; overflow-y: auto; }\n.res-row {\n  display: grid;\n  grid-template-columns: 52px 1fr auto;\n  gap: 14px;\n  align-items: center;\n  padding: 10px 18px;\n  margin-bottom: 8px;\n  background: rgba(255,255,255,.05);\n  border: 1px solid rgba(255,255,255,.08);\n  border-radius: 12px;\n  text-align: left;\n  font-weight: 600;\n}\n.res-row.player {\n  border-color: rgba(255,75,58,.6);\n  background: rgba(255,75,58,.12);\n}\n.res-pos {\n  font-family: 'Archivo Black', sans-serif;\n  font-size: 1.05rem;\n  color: var(--amber);\n  font-variant-numeric: tabular-nums;\n}\n.res-name { letter-spacing: 1px; }\n.res-mark { font-variant-numeric: tabular-nums; color: #cfe0ff; font-weight: 700; letter-spacing: 2px; }\n\n/* ---------- touch controls ---------- */\n#touch-ui { position: fixed; inset: 0; z-index: 30; pointer-events: none; }\n#t-stick {\n  pointer-events: auto;\n  position: absolute; left: 22px; bottom: 24px;\n  width: 132px; height: 132px;\n  border-radius: 50%;\n  border: 1px solid rgba(255,255,255,.28);\n  background: rgba(10,16,30,.45);\n  backdrop-filter: blur(6px);\n  touch-action: none;\n  -webkit-tap-highlight-color: transparent;\n  display: grid; place-items: center;\n}\n#t-nub {\n  width: 54px; height: 54px;\n  border-radius: 50%;\n  background: rgba(255,255,255,.28);\n  border: 1px solid rgba(255,255,255,.4);\n  pointer-events: none;\n}\n#t-action {\n  pointer-events: auto;\n  position: absolute; right: 22px; bottom: 24px;\n  width: 108px; height: 108px;\n  border-radius: 50%;\n  border: 1px solid rgba(255,75,58,.65);\n  background: rgba(255,75,58,.35);\n  color: #fff;\n  font-family: 'Space Grotesk', sans-serif;\n  font-weight: 700;\n  font-size: 0.72rem;\n  letter-spacing: 2px;\n  backdrop-filter: blur(6px);\n  touch-action: none;\n  -webkit-tap-highlight-color: transparent;\n}\n#t-action:active { background: rgba(255,75,58,.6); transform: scale(.93); }\n#touch-ui { display: none; }\nbody.touch #touch-ui { display: block; }\n.touch-only { display: none; }\nbody.touch .touch-only { display: block; }\nbody.touch #meters { bottom: 158px; width: min(320px, 50vw); }\n\n/* ---------- small screens ---------- */\n@media (max-width: 680px) {\n  #hud-top { top: 10px; left: 10px; right: 10px; }\n  #score-chip { padding: 6px 12px 8px; }\n  #score-line { font-size: 1rem; gap: 7px; }\n  #half-chip { font-size: 0.55rem; }\n  #timer { font-size: 1.5rem; padding: 4px 12px; }\n  .card-box, .title-box { padding: 24px 20px; max-width: 94vw; }\n  .card-box h2 { font-size: 1.6rem; }\n  .res-row { padding: 5px 10px; margin-bottom: 4px; font-size: 0.78rem; gap: 8px; grid-template-columns: 36px 1fr auto; }\n  .res-pos { font-size: 0.9rem; }\n}\n"}],"folders":[]},{"folder":"js","files":[{"name":"ai.js","content":"// ai.js — team brains: formation shape, chasing, passing, shooting, keepers.\n// Every player gets a.tv (target velocity) each frame; main.js integrates.\nimport { THREE, clamp } from './lib.js';\nimport { TEAMS, game, PITCH, targetGoalZ, ownGoalZ } from './core.js';\nimport { ball, BALL_R } from './ball.js';\nimport { audio } from './audio.js';\n\nconst V = new THREE.Vector3();\n\nexport const SPEED = { gk: 6.2, df: 7.3, at: 7.7, human: 8.1 };\n\nexport function dist2D(ax, az, bx, bz) { return Math.hypot(ax - bx, az - bz); }\n\nexport function ballDist(a) { return dist2D(a.pos.x, a.pos.z, ball.pos.x, ball.pos.z); }\n\n// may this athlete touch the ball right now? (restart restriction)\nexport function mayTouch(a) {\n  return game.restrictT <= 0 || a.team.id === game.restrictTeam;\n}\n\nexport function hasBall(a) {\n  if (ball.owner === a) return true;\n  return !ball.owner && ballDist(a) < 1.4 && ball.pos.y < 1.2 && ball.groundSpeed() < 9 && !ball.held;\n}\n\n// closest outfielder of a team to the ball\nexport function nearestToBall(team) {\n  let best = null, bd = 1e9;\n  for (const a of team.athletes) {\n    if (a.role === 'gk') continue;\n    const d = ballDist(a);\n    if (d < bd) { bd = d; best = a; }\n  }\n  return best;\n}\n\n// ---------------- kicking helpers (shared by human + AI)\nexport function bestPassTarget(a) {\n  const dir = game.attackDir[a.team.id];\n  let best = null, bs = -1e9;\n  for (const m of a.team.athletes) {\n    if (m === a || m.role === 'gk') continue;\n    const d = dist2D(a.pos.x, a.pos.z, m.pos.x, m.pos.z);\n    if (d < 3 || d > 34) continue;\n    let score = 20 - Math.abs(d - 14) * 0.6;\n    score += (m.pos.z - a.pos.z) * dir * 1.4; // forward is better\n    // interception risk: opponents near the passing lane\n    const other = TEAMS[1 - a.team.id];\n    const lx = m.pos.x - a.pos.x, lz = m.pos.z - a.pos.z;\n    const ll = Math.hypot(lx, lz);\n    for (const o of other.athletes) {\n      const t = clamp(((o.pos.x - a.pos.x) * lx + (o.pos.z - a.pos.z) * lz) / (ll * ll), 0, 1);\n      const px = a.pos.x + lx * t, pz = a.pos.z + lz * t;\n      const od = dist2D(o.pos.x, o.pos.z, px, pz);\n      if (od < 2.2) score -= (2.2 - od) * 9;\n    }\n    if (score > bs) { bs = score; best = m; }\n  }\n  return best;\n}\n\nexport function doPass(a) {\n  const m = bestPassTarget(a);\n  a.kickT = 0.26;\n  if (!m) { doClear(a); return null; }\n  // lead the runner a touch\n  const tx = m.pos.x + m.vel.x * 0.35;\n  const tz = m.pos.z + m.vel.z * 0.35;\n  const d = dist2D(ball.pos.x, ball.pos.z, tx, tz);\n  ball.kick(tx - ball.pos.x, tz - ball.pos.z, clamp(d * 1.35, 10, 20), d > 20 ? 3.2 : 0.4);\n  game.lastTouch = a;\n  audio.kick(0.45);\n  return m;\n}\n\nexport function doShoot(a, power = 0.7) {\n  a.kickT = 0.3;\n  const gz = targetGoalZ(a.team);\n  const keeper = TEAMS[1 - a.team.id].athletes[0];\n  // aim for the half of the goal the keeper isn't in, with a little scatter\n  let aimX = (keeper.pos.x > 0 ? -1 : 1) * PITCH.goalHW * (0.35 + Math.random() * 0.4);\n  aimX += (Math.random() - 0.5) * 2.4 * (1.15 - power);\n  const dx = aimX - ball.pos.x, dz = gz - ball.pos.z;\n  const d = Math.hypot(dx, dz);\n  ball.kick(dx, dz, 15 + power * 12, clamp(1 + d * 0.08 + power * 2.2, 1, 5));\n  game.lastTouch = a;\n  audio.kick(0.85 + power * 0.15);\n  return d;\n}\n\nexport function doClear(a) {\n  a.kickT = 0.28;\n  const dir = game.attackDir[a.team.id];\n  ball.kick((Math.random() - 0.5) * 8, dir * 20, 17 + Math.random() * 5, 4.5);\n  game.lastTouch = a;\n  audio.kick(0.8);\n}\n\n// ---------------- per-frame AI\nexport function updateAI(dt) {\n  const playing = game.state === 'play';\n  for (const team of TEAMS) {\n    const dir = game.attackDir[team.id];\n    const chaser = nearestToBall(team);\n    for (const a of team.athletes) {\n      if (a === game.controlled && game.humanActive) continue; // human is steering\n      a.decideT = (a.decideT || 0) - dt;\n      if (a.stunT > 0 || a.tackleT > 0) continue; // main handles those\n      if (!playing) { a.tv.set(0, 0, 0); continue; }\n\n      if (a.role === 'gk') { keeperBrain(a, dir, dt); continue; }\n\n      const bd = ballDist(a);\n\n      // ---- on the ball (we own it): dribble / pass / shoot\n      if (ball.owner === a) {\n        const gz = targetGoalZ(a.team);\n        const goalD = dist2D(a.pos.x, a.pos.z, 0, gz);\n        const opp = TEAMS[1 - team.id];\n        let pressD = 1e9;\n        for (const o of opp.athletes) pressD = Math.min(pressD, dist2D(a.pos.x, a.pos.z, o.pos.x, o.pos.z));\n\n        if (a.decideT <= 0) {\n          a.decideT = 0.18;\n          if (goalD < 16 + Math.random() * 5) {\n            doShoot(a, 0.6 + Math.random() * 0.35);\n            continue;\n          }\n          if (pressD < 2.4 && Math.random() < 0.8) {\n            const own = Math.abs(a.pos.z - ownGoalZ(a.team)) < 14;\n            if (own && Math.random() < 0.4) doClear(a);\n            else doPass(a);\n            continue;\n          }\n        }\n        // dribble toward goal, weaving off the press\n        const wx = Math.sin(game.time * 2.1 + a.phase) * 3.5;\n        V.set(clamp(0 + wx, -PITCH.hw + 3, PITCH.hw - 3) - a.pos.x, 0, gz - a.pos.z).normalize();\n        a.tv.set(V.x, 0, V.z).multiplyScalar(SPEED[a.role] * 0.92);\n        continue;\n      }\n\n      // ---- chasing the ball\n      const shouldChase = a === chaser && !ball.held;\n      if (shouldChase && mayTouch(a)) {\n        const lead = clamp(bd * 0.12, 0, 0.5);\n        const tx = ball.pos.x + ball.vel.x * lead;\n        const tz = ball.pos.z + ball.vel.z * lead;\n        V.set(tx - a.pos.x, 0, tz - a.pos.z);\n        const d = V.length() || 1;\n        a.tv.copy(V.multiplyScalar(SPEED[a.role] / d));\n        continue;\n      }\n\n      // ---- hold formation, sliding with the ball\n      const weHaveIt = game.lastTouch && game.lastTouch.team === team;\n      const push = weHaveIt ? dir * -3.5 : 0; // note: homeZ already encodes defence(+)\n      let hz = ball.pos.z * 0.55 - dir * a.homeZ + dir * (weHaveIt ? 6 : 0);\n      hz = clamp(hz, -PITCH.hl + 3, PITCH.hl - 3);\n      const hx = clamp(a.homeX + ball.pos.x * 0.25, -PITCH.hw + 2, PITCH.hw - 2);\n      V.set(hx - a.pos.x, 0, hz - a.pos.z);\n      const d = V.length();\n      if (d < 0.6) a.tv.set(0, 0, 0);\n      else a.tv.copy(V.multiplyScalar(Math.min(SPEED[a.role] * 0.85, d * 2.2) / d));\n    }\n  }\n}\n\nfunction keeperBrain(a, dir, dt) {\n  const gz = ownGoalZ(a.team);\n  const lineZ = gz - dir * -1 * 0; // stands on the line\n  a.diveT = Math.max(0, (a.diveT || 0) - dt);\n\n  // holding the ball: countdown then punt upfield\n  if (ball.held === a) {\n    a.holdT = (a.holdT || 1.1) - dt;\n    a.tv.set(0, 0, 0);\n    if (a.holdT <= 0) {\n      a.holdT = null;\n      ball.held = null;\n      const mates = a.team.athletes.filter((m) => m.role === 'at');\n      const m = mates[Math.floor(Math.random() * mates.length)];\n      a.kickT = 0.3;\n      ball.pos.y = 1.0;\n      ball.kick(m.pos.x - a.pos.x, m.pos.z - a.pos.z, 19, 5.5);\n      game.lastTouch = a;\n      audio.kick(0.9);\n    }\n    return;\n  }\n  if (a.holdT != null) a.holdT = null;\n\n  const bd = ballDist(a);\n  const towardUs = ball.vel.z * dir < -6; // ball travelling at our goal\n  const distToLine = Math.abs(ball.pos.z - gz);\n\n  // dive: shot incoming, close, predicted inside the frame\n  if (a.diveT <= 0 && towardUs && distToLine < 11 && ball.groundSpeed() > 11) {\n    const t = distToLine / Math.abs(ball.vel.z);\n    const px = ball.pos.x + ball.vel.x * t;\n    if (Math.abs(px) < PITCH.goalHW + 1.2 && t < 0.75) {\n      a.diveT = 0.65;\n      a.diveDir = Math.sign(px - a.pos.x) || 1;\n      V.set(px - a.pos.x, 0, ball.pos.z + ball.vel.z * t * 0.5 - a.pos.z).normalize();\n      a.tv.copy(V).multiplyScalar(10.5);\n      return;\n    }\n  }\n  if (a.diveT > 0) return; // keep lunging with current tv\n\n  // sweep up a loose ball in the box\n  if (bd < 7 && !ball.held && ball.groundSpeed() < 10 && mayTouch(a)) {\n    V.set(ball.pos.x - a.pos.x, 0, ball.pos.z - a.pos.z);\n    const d = V.length() || 1;\n    a.tv.copy(V.multiplyScalar(SPEED.gk / d));\n    return;\n  }\n\n  // shuffle along the line, tracking the ball\n  const tx = clamp(ball.pos.x * 0.55, -PITCH.goalHW + 0.5, PITCH.goalHW - 0.5);\n  const tz = gz + dir * 0.9;\n  V.set(tx - a.pos.x, 0, tz - a.pos.z);\n  const d = V.length();\n  if (d < 0.3) a.tv.set(0, 0, 0);\n  else a.tv.copy(V.multiplyScalar(Math.min(SPEED.gk, d * 3) / d));\n}\n"},{"name":"athlete.js","content":"// athlete.js — Sensible-Soccer-proportioned voxel footballer: enormous head\n// (mostly hair from the top-down camera), no neck to speak of, stubby limbs,\n// solid kits, black boots. Fully articulated with joint caps and ankles so\n// the figure stays connected and fluid. ~1.78m world height.\nimport { THREE, boxMesh } from './lib.js';\n\nexport class Athlete {\n  constructor({\n    kit = '#ff4b3a', shorts = '#ffffff', skin = '#c98e5a', hair = '#20140e',\n    hairStyle = 'crop', name = 'YOU', num = 0,\n  } = {}) {\n    this.name = name;\n    this.group = new THREE.Group();\n    this.body = new THREE.Group();\n    this.group.add(this.body);\n    this.group.rotation.y = Math.PI / 2; // face +X\n    this.group.scale.setScalar(0.27);    // -> ~1.78m, stocky\n\n    // ----- stubby legs: hip cap -> thigh -> knee cap -> calf -> ankle -> boot\n    const buildLeg = () => {\n      const hip = new THREE.Group();\n      const hipCap = boxMesh(0.82, 0.82, 0.82, shorts);\n      hipCap.position.y = 0;\n      const thigh = boxMesh(0.78, 1.1, 0.78, skin);\n      thigh.position.y = -0.42;\n      const knee = new THREE.Group();\n      knee.position.y = -0.95;\n      const kneeCap = boxMesh(0.72, 0.72, 0.72, skin);\n      kneeCap.position.y = 0;\n      const calf = boxMesh(0.68, 0.95, 0.68, skin);\n      calf.position.y = -0.32;\n      const sock = boxMesh(0.72, 0.42, 0.72, shorts);\n      sock.position.y = -0.52;\n      const ankle = new THREE.Group();\n      ankle.position.y = -0.75;\n      const boot = boxMesh(0.95, 0.4, 1.3, '#22262c', { roughness: 0.55 }); // black boots!\n      boot.position.set(0, 0.02, 0.26);\n      const sole = boxMesh(0.98, 0.12, 1.33, '#dfe3e8', { roughness: 0.6 });\n      sole.position.set(0, -0.15, 0.26);\n      ankle.add(boot, sole);\n      knee.add(kneeCap, calf, sock, ankle);\n      hip.add(hipCap, thigh, knee);\n      return { hip, knee, ankle };\n    };\n    const lL = buildLeg(), lR = buildLeg();\n    this.legL = lL.hip; this.kneeL = lL.knee; this.ankleL = lL.ankle;\n    this.legR = lR.hip; this.kneeR = lR.knee; this.ankleR = lR.ankle;\n    this.legL.position.set(-0.52, 1.9, 0);\n    this.legR.position.set(0.52, 1.9, 0);\n\n    // ----- stocky trunk: solid shorts, solid kit, minimal trim\n    const shortsBox = boxMesh(1.95, 0.85, 1.15, shorts);\n    shortsBox.position.y = 2.1;\n    const torso = boxMesh(1.95, 1.5, 1.1, kit);\n    torso.position.y = 3.0;\n    const collar = boxMesh(1.15, 0.16, 0.92, shorts);\n    collar.position.y = 3.8;\n    const neck = boxMesh(0.7, 0.35, 0.7, skin); // barely there — Sensible style\n    neck.position.y = 3.85;\n\n    // ----- stubby arms: shoulder cap -> upper -> elbow cap -> forearm + fist\n    const buildArm = () => {\n      const shoulder = new THREE.Group();\n      const sleeve = boxMesh(0.72, 0.72, 0.72, kit);\n      sleeve.position.y = -0.1;\n      const upper = boxMesh(0.56, 0.85, 0.56, skin);\n      upper.position.y = -0.45;\n      const elbow = new THREE.Group();\n      elbow.position.y = -0.85;\n      const elbowCap = boxMesh(0.52, 0.52, 0.52, skin);\n      elbowCap.position.y = 0;\n      const forearm = boxMesh(0.5, 0.7, 0.5, skin);\n      forearm.position.y = -0.25;\n      const fist = boxMesh(0.6, 0.45, 0.6, skin);\n      fist.position.y = -0.68;\n      elbow.add(elbowCap, forearm, fist);\n      shoulder.add(sleeve, upper, elbow);\n      return { shoulder, elbow };\n    };\n    const aL = buildArm(), aR = buildArm();\n    this.armL = aL.shoulder; this.elbowL = aL.elbow;\n    this.armR = aR.shoulder; this.elbowR = aR.elbow;\n    this.armL.position.set(-1.3, 3.65, 0);\n    this.armR.position.set(1.3, 3.65, 0);\n\n    // ----- the enormous head, sat straight on the shoulders\n    this.head = new THREE.Group();\n    this.head.position.y = 3.95;\n    const headBox = boxMesh(2.2, 2.2, 2.2, skin);\n    headBox.position.y = 1.15;\n    // minimal sprite face: eyes + expressive brows, nothing else\n    this.eyeL = boxMesh(0.3, 0.34, 0.1, '#181818');\n    this.eyeL.position.set(-0.48, 1.25, 1.12);\n    this.eyeR = this.eyeL.clone();\n    this.eyeR.position.x = 0.48;\n    this.browL = boxMesh(0.42, 0.12, 0.08, hair);\n    this.browL.position.set(-0.48, 1.62, 1.14);\n    this.browR = this.browL.clone();\n    this.browR.position.x = 0.48;\n    this.head.add(headBox, this.eyeL, this.eyeR, this.browL, this.browR);\n\n    // hair dominates the top-down view — thick crown, fringe, and back\n    const addHair = (mesh) => this.head.add(mesh);\n    const fringe = boxMesh(2.28, 0.4, 0.2, hair);\n    fringe.position.set(0, 2.05, 1.08);\n    addHair(fringe);\n    if (hairStyle === 'afro') {\n      const fro = boxMesh(2.65, 1.3, 2.65, hair);\n      fro.position.set(0, 2.55, -0.05);\n      addHair(fro);\n      const froB = boxMesh(2.4, 0.9, 0.55, hair);\n      froB.position.set(0, 1.6, -1.1);\n      addHair(froB);\n    } else {\n      const crown = boxMesh(2.35, 0.65, 2.35, hair);\n      crown.position.set(0, 2.4, -0.05);\n      addHair(crown);\n      const hairBack = boxMesh(2.3, 1.15, 0.45, hair);\n      hairBack.position.set(0, 1.55, -1.06);\n      addHair(hairBack);\n      if (hairStyle === 'spike') {\n        for (const [sx, sz] of [[-0.65, 0.25], [0, -0.3], [0.65, 0.18]]) {\n          const spike = boxMesh(0.48, 0.55, 0.48, hair);\n          spike.position.set(sx, 2.95, sz);\n          addHair(spike);\n        }\n      } else if (hairStyle === 'pony') {\n        const tail = boxMesh(0.55, 1.5, 0.45, hair);\n        tail.position.set(0, 1.05, -1.45);\n        addHair(tail);\n      } else if (hairStyle === 'band') {\n        const band = boxMesh(2.4, 0.3, 2.4, kit);\n        band.position.set(0, 1.95, -0.05);\n        addHair(band);\n      }\n    }\n\n    this.body.add(\n      this.legL, this.legR, shortsBox, torso, collar, neck,\n      this.armL, this.armR, this.head\n    );\n\n    // squad number printed straight on the back of the shirt\n    if (num > 0) {\n      const bc = document.createElement('canvas');\n      bc.width = 64; bc.height = 64;\n      const bctx = bc.getContext('2d');\n      bctx.font = '900 46px \"Archivo Black\", sans-serif';\n      bctx.textAlign = 'center';\n      bctx.textBaseline = 'middle';\n      bctx.lineWidth = 8;\n      bctx.lineJoin = 'round';\n      bctx.strokeStyle = 'rgba(10,14,24,0.85)';\n      bctx.strokeText(String(num), 32, 36);\n      bctx.fillStyle = '#f5f1e6';\n      bctx.fillText(String(num), 32, 36);\n      const bibTex = new THREE.CanvasTexture(bc);\n      bibTex.colorSpace = THREE.SRGBColorSpace;\n      const bib = new THREE.Mesh(\n        new THREE.PlaneGeometry(1.0, 1.0),\n        new THREE.MeshStandardMaterial({ map: bibTex, roughness: 0.9, transparent: true })\n      );\n      bib.position.set(0, 3.05, -0.575);\n      bib.rotation.y = Math.PI;\n      this.body.add(bib);\n    }\n\n    this.phase = Math.random() * Math.PI * 2;\n    this._tempo = 0.93 + Math.random() * 0.14;\n    this._impact = 0;\n    this._t = 0;\n    this._mt = 0;\n    this._lastMode = 'idle';\n    this._blink = 0;\n    this._nextBlink = 1.5 + Math.random() * 3;\n    this._s = {\n      hipL: 0, hipR: 0, kneeL: 0.08, kneeR: 0.08,\n      shL: 0, shR: 0, elL: -0.3, elR: -0.3, armZL: 0.12, armZR: -0.12,\n      bobY: 0, bobZ: 0, roll: 0, twist: 0,\n      hx: 0, hy: 0, hz: 0, sy: 1, sxz: 1,\n      browA: 0, browY: 0,\n    };\n  }\n\n  // mode: idle | run | kick | tackle | dive | air | crouch | celebrate |\n  //       dejected | exhausted | charge\n  update(dt, mode = 'idle', opt = {}) {\n    this._t += dt;\n    if (mode !== this._lastMode) {\n      if (this._lastMode === 'air') this._impact = 0.16;\n      this._lastMode = mode;\n      this._mt = 0;\n    }\n    this._mt += dt;\n    const t = this._t;\n    const mt = this._mt;\n\n    const P = {\n      hipL: 0, hipR: 0, kneeL: 0.08, kneeR: 0.08,\n      shL: 0, shR: 0, elL: -0.3, elR: -0.3, armZL: 0.12, armZR: -0.12,\n      bobY: 0, bobZ: 0, roll: 0, twist: 0,\n      hx: 0, hy: 0, hz: 0, sy: 1, sxz: 1,\n      browA: 0, browY: 0,\n    };\n    let lean = 0;\n\n    if (mode === 'run') {\n      const speed = opt.speed || 0;\n      this.phase += dt * (4 + speed * 1.9) * this._tempo;\n      const amp = Math.min(1, speed / 9) * 1.15 + 0.15;\n      const s = Math.sin(this.phase);\n      const c = Math.cos(this.phase);\n      P.hipL = s * amp;\n      P.hipR = -s * amp;\n      P.kneeL = 0.3 * amp + Math.max(0, -c) * 1.5 * amp;\n      P.kneeR = 0.3 * amp + Math.max(0, c) * 1.5 * amp;\n      P.shL = -s * amp;\n      P.shR = s * amp;\n      P.elL = -(0.85 + Math.abs(s) * 0.35 * amp);\n      P.elR = -(0.85 + Math.abs(s) * 0.35 * amp);\n      P.armZL = 0.2; P.armZR = -0.2;\n      P.bobY = Math.abs(c) * 0.32 * amp;   // extra Sensible bounce\n      lean = Math.min(0.28, speed * 0.026);\n      P.roll = s * 0.05 * amp;\n      P.twist = s * 0.09 * amp;\n      P.hx = -lean * 0.5;\n      P.hz = -s * 0.09 * amp;\n      P.sy = 1 + Math.abs(c) * 0.05 * amp;\n      P.sxz = 1 - Math.abs(c) * 0.02 * amp;\n      P.browA = Math.min(0.3, speed * 0.03);\n      P.browY = -0.04;\n    } else if (mode === 'kick') {\n      // right-foot strike: backswing already happened, leg whips through\n      const k = Math.min(1, mt / 0.16);\n      P.hipR = -1.35 + k * 2.6;\n      P.kneeR = Math.max(0.1, 1.25 - k * 1.15);\n      P.hipL = 0.3 - k * 0.4;\n      P.kneeL = 0.4;\n      P.shL = -1.3 + k * 0.9;\n      P.shR = 0.9 - k * 1.5;\n      P.armZL = 0.3; P.armZR = -0.3;\n      lean = 0.16;\n      P.hx = -0.22;\n      P.bobY = -0.14;\n      P.browA = 0.35;\n    } else if (mode === 'tackle') {\n      // sliding on his backside, feet-first, arms thrown\n      P.bobY = -1.55;\n      P.bobZ = 0.25;\n      lean = -1.05;\n      P.hipL = 1.15; P.kneeL = 0.15;\n      P.hipR = 0.65; P.kneeR = 0.95;\n      P.shL = -0.4; P.shR = -2.3;\n      P.elL = -0.9; P.elR = -0.25;\n      P.armZL = 0.25; P.armZR = 0.35;\n      P.hx = 0.6;\n      P.browA = 0.4;\n    } else if (mode === 'dive') {\n      // keeper full-stretch — direction (left/right) via opt.dir\n      const d = opt.dir || 1;\n      P.roll = -d * 1.4;\n      P.bobY = -0.5;\n      P.shL = -2.7; P.shR = -2.7;\n      P.elL = -0.15; P.elR = -0.15;\n      P.armZL = -0.3; P.armZR = 0.3;\n      P.hipL = 0.35; P.hipR = -0.25;\n      P.kneeL = 0.55; P.kneeR = 0.3;\n      P.hz = -d * 0.3;\n      P.browY = 0.1;\n    } else if (mode === 'air') {\n      const pedal = Math.sin(t * 9);\n      P.hipL = 0.95 + pedal * 0.25;  P.kneeL = 0.4;\n      P.hipR = -0.8 - pedal * 0.25;  P.kneeR = 1.5;\n      P.shL = -2.3; P.shR = -1.5; P.elL = -0.6; P.elR = -0.9;\n      P.armZL = -0.35; P.armZR = 0.35;\n      lean = 0.12;\n      P.hx = -0.25;\n      P.sy = 1.07; P.sxz = 0.96;\n      P.browY = 0.1;\n    } else if (mode === 'crouch') {\n      // keeper set position: low, wide, arms ready\n      P.bobY = -0.55;\n      P.hipL = 0.75; P.kneeL = 1.0;\n      P.hipR = 0.75; P.kneeR = 1.0;\n      P.shL = -0.85; P.shR = -0.85;\n      P.elL = -1.1; P.elR = -1.1;\n      P.armZL = 0.55; P.armZR = -0.55;\n      lean = 0.28;\n      P.hx = -0.3;\n      P.sy = 0.94; P.sxz = 1.05;\n      P.browA = 0.3;\n    } else if (mode === 'celebrate') {\n      const seg = Math.floor(mt / 1.7) % 4;\n      const tp = (mt % 1.7) / 1.7;\n      P.browY = 0.12;\n      if (seg === 0) {\n        const hop = Math.abs(Math.sin(mt * 6.5));\n        const pump = Math.sin(mt * 10);\n        P.bobY = hop * 0.95;\n        P.shL = -2.9 + pump * 0.6; P.shR = -2.9 - pump * 0.6;\n        P.elL = -0.45; P.elR = -0.45;\n        P.armZL = -0.5; P.armZR = 0.5;\n        P.hipL = hop * 0.35; P.hipR = -hop * 0.35;\n        P.kneeL = hop * 0.5; P.kneeR = hop * 0.5;\n        P.hz = Math.sin(mt * 5) * 0.22;\n        P.hx = -0.2;\n        P.sy = 1 + Math.cos(mt * 6.5) * 0.06;\n      } else if (seg === 1) {\n        P.bobY = Math.abs(Math.sin(mt * 3)) * 0.25;\n        P.shL = -2.75; P.shR = -2.75;\n        P.elL = -0.12; P.elR = -0.12;\n        P.armZL = -0.75; P.armZR = 0.75;\n        P.hx = -0.5;\n        lean = -0.12;\n        P.hipL = 0.1; P.hipR = -0.1;\n      } else if (seg === 2) {\n        const sway = Math.sin(mt * 6);\n        P.twist = sway * 0.55;\n        P.bobY = Math.abs(Math.sin(mt * 6)) * 0.35;\n        P.shL = -2.2; P.shR = -2.2;\n        P.elL = -1.15; P.elR = -1.15;\n        P.armZL = -0.35; P.armZR = 0.35;\n        P.hz = sway * 0.15;\n        P.kneeL = 0.4; P.kneeR = 0.4;\n        P.roll = sway * 0.06;\n      } else {\n        const th = -Math.PI * 2 * tp;\n        const H = 2.6; // waist height on the stocky build\n        P.bobY = Math.sin(Math.PI * tp) * 1.6 + H * (1 - Math.cos(th));\n        P.bobZ = -H * Math.sin(th);\n        lean = th;\n        P.hipL = 1.1; P.hipR = 1.1;\n        P.kneeL = 1.9; P.kneeR = 1.9;\n        P.shL = -0.5; P.shR = -0.5;\n        P.elL = -1.8; P.elR = -1.8;\n        P.sy = 0.95; P.sxz = 1.02;\n        P.hx = -0.3;\n      }\n    } else if (mode === 'dejected') {\n      const seg = Math.floor(mt / 2.2) % 2;\n      const w = Math.sin(mt * 1.2);\n      P.browA = -0.35;\n      P.browY = 0.06;\n      if (seg === 0) {\n        P.bobY = -0.3;\n        P.hipL = 0.12; P.hipR = -0.08;\n        P.kneeL = 0.25; P.kneeR = 0.2;\n        P.shL = 0.45; P.shR = 0.45;\n        P.elL = -0.15; P.elR = -0.15;\n        P.armZL = 0.05; P.armZR = -0.05;\n        lean = 0.3;\n        P.hx = 0.6;\n        P.hz = w * 0.06;\n        P.roll = w * 0.03;\n      } else {\n        P.bobY = -0.18;\n        P.shL = -2.6; P.shR = -2.6;\n        P.elL = -2.0; P.elR = -2.0;\n        P.armZL = -0.2; P.armZR = 0.2;\n        P.hx = 0.45;\n        P.hz = w * 0.08;\n        P.roll = w * 0.04;\n        P.kneeL = 0.2; P.kneeR = 0.2;\n      }\n    } else if (mode === 'exhausted') {\n      const breath = Math.sin(mt * 4.2);\n      P.bobY = -0.5;\n      P.hipL = 0.35; P.hipR = 0.35;\n      P.kneeL = 0.55; P.kneeR = 0.55;\n      P.shL = 0.95; P.shR = 0.95;\n      P.elL = -0.25; P.elR = -0.25;\n      P.armZL = 0.15; P.armZR = -0.15;\n      lean = 0.55;\n      P.hx = 0.35 + breath * 0.1;\n      P.sy = 1 + breath * 0.035;\n      P.browA = -0.2;\n      P.browY = 0.1;\n    } else if (mode === 'charge') {\n      // winding up a big shot: planted, coiled\n      P.bobY = -0.3;\n      P.hipL = 0.55; P.kneeL = 0.75;\n      P.hipR = -0.9; P.kneeR = 0.9;\n      P.shL = -0.7; P.elL = -0.5;\n      P.shR = 0.7; P.elR = -0.4;\n      lean = 0.1;\n      P.hx = -0.3;\n      P.sy = 0.95; P.sxz = 1.03;\n      P.browA = 0.35;\n    } else { // idle — shifty and alive, waves at the crowd now and then\n      const w = Math.sin(t * 1.15 + this.phase);\n      P.bobY = Math.sin(t * 2.4 + this.phase) * 0.08;\n      P.shL = Math.sin(t * 2.4 + this.phase) * 0.12;\n      P.shR = -Math.sin(t * 2.4 + this.phase) * 0.12;\n      P.roll = w * 0.045;\n      P.hy = Math.sin(t * 0.65 + this.phase * 2) * 0.55;\n      P.hz = w * 0.05;\n      const waveCycle = (t + this.phase * 3) % 9;\n      if (waveCycle < 1.6) {\n        const k = Math.min(1, waveCycle / 0.3) * Math.min(1, (1.6 - waveCycle) / 0.3);\n        P.shR = -2.6 * k;\n        P.elR = (-0.4 + Math.sin(t * 11) * 0.4) * k;\n        P.armZR = 0.4 * k;\n        P.hy = 0.3 * k;\n        P.hz = 0.12 * k;\n        P.browY = 0.1 * k;\n      }\n    }\n\n    if (this._impact > 0) {\n      this._impact -= dt;\n      P.sy *= 0.85;\n      P.sxz *= 1.1;\n    }\n\n    const fast = mode === 'run' || mode === 'kick' || mode === 'tackle' || mode === 'dive' || mode === 'air';\n    const k = Math.min(1, dt * (fast ? 30 : 12));\n    const s = this._s;\n    for (const key in s) s[key] += (P[key] - s[key]) * k;\n\n    // blinking (all modes)\n    this._blink += dt;\n    if (this._blink > this._nextBlink + 0.13) {\n      this._blink = 0;\n      this._nextBlink = 1.5 + Math.random() * 3;\n    }\n    const blinking = this._blink > this._nextBlink;\n    this.eyeL.scale.y = this.eyeR.scale.y = blinking ? 0.12 : 1;\n\n    this.browL.rotation.z = -s.browA;\n    this.browR.rotation.z = s.browA;\n    this.browL.position.y = this.browR.position.y = 1.62 + s.browY;\n\n    this.legL.rotation.x = s.hipL;\n    this.legR.rotation.x = s.hipR;\n    this.kneeL.rotation.x = s.kneeL;\n    this.kneeR.rotation.x = s.kneeR;\n    this.ankleL.rotation.x = Math.max(-1.1, Math.min(1.1, -(s.hipL + s.kneeL) * 0.5));\n    this.ankleR.rotation.x = Math.max(-1.1, Math.min(1.1, -(s.hipR + s.kneeR) * 0.5));\n    this.armL.rotation.x = s.shL;\n    this.armR.rotation.x = s.shR;\n    this.elbowL.rotation.x = s.elL;\n    this.elbowR.rotation.x = s.elR;\n    this.armL.rotation.z = s.armZL;\n    this.armR.rotation.z = s.armZR;\n    this.body.position.y = s.bobY;\n    this.body.position.z = s.bobZ;\n    this.body.rotation.x = lean;\n    this.body.rotation.z = s.roll;\n    this.body.rotation.y = s.twist;\n    this.body.scale.set(s.sxz, s.sy, s.sxz);\n    this.head.rotation.set(s.hx, s.hy, s.hz);\n  }\n}\n"},{"name":"audio.js","content":"// audio.js — the stadium soundscape, all synthesized in WebAudio:\n//  - warm crowd murmur that breathes (brown noise + slow LFO, no hiss)\n//  - random whoops / shouts / whistles / clap bursts / air horns, stereo-\n//    panned around the ground, more frequent as excitement rises\n//  - cheers on a dedicated swell channel, referee whistle, ball thumps\nexport const audio = {\n  ctx: null, master: null, murmurGain: null, cheerGain: null,\n  _ambT: 0,\n\n  ensure() {\n    if (this.ctx) { if (this.ctx.state === 'suspended') this.ctx.resume(); return; }\n    const AC = window.AudioContext || window.webkitAudioContext;\n    if (!AC) return;\n    this.ctx = new AC();\n    this.master = this.ctx.createGain();\n    this.master.gain.value = 1;\n    this.master.connect(this.ctx.destination);\n\n    // shared noise buffers\n    const sr = this.ctx.sampleRate;\n    const len = sr * 2;\n    this._white = this.ctx.createBuffer(1, len, sr);\n    const wd = this._white.getChannelData(0);\n    for (let i = 0; i < len; i++) wd[i] = Math.random() * 2 - 1;\n    this._brown = this.ctx.createBuffer(1, len, sr);\n    const bd = this._brown.getChannelData(0);\n    let lastV = 0;\n    for (let i = 0; i < len; i++) {\n      lastV = (lastV + 0.02 * (Math.random() * 2 - 1)) / 1.02;\n      bd[i] = lastV * 3.5;\n    }\n\n    // murmur bed: brown noise, warm lowpass, slow breathing LFO\n    const mSrc = this.ctx.createBufferSource();\n    mSrc.buffer = this._brown; mSrc.loop = true;\n    const mLp = this.ctx.createBiquadFilter();\n    mLp.type = 'lowpass'; mLp.frequency.value = 340; mLp.Q.value = 0.4;\n    this.murmurGain = this.ctx.createGain();\n    this.murmurGain.gain.value = 0.05;\n    mSrc.connect(mLp).connect(this.murmurGain).connect(this.master);\n    mSrc.start();\n    const lfo = this.ctx.createOscillator();\n    lfo.frequency.value = 0.13;\n    const lfoAmt = this.ctx.createGain();\n    lfoAmt.gain.value = 0.018;\n    lfo.connect(lfoAmt).connect(this.murmurGain.gain);\n    lfo.start();\n\n    // cheer swell channel\n    const cSrc = this.ctx.createBufferSource();\n    cSrc.buffer = this._white; cSrc.loop = true;\n    const cBp = this.ctx.createBiquadFilter();\n    cBp.type = 'bandpass'; cBp.frequency.value = 850; cBp.Q.value = 0.6;\n    this.cheerGain = this.ctx.createGain();\n    this.cheerGain.gain.value = 0;\n    cSrc.connect(cBp).connect(this.cheerGain).connect(this.master);\n    cSrc.start();\n  },\n\n  _out(pan) {\n    if (!this.ctx.createStereoPanner) return this.master;\n    const p = this.ctx.createStereoPanner();\n    p.pan.value = pan != null ? pan : (Math.random() * 2 - 1) * 0.8;\n    p.connect(this.master);\n    return p;\n  },\n\n  _noiseHit({ buf = 'white', dur = 0.2, type = 'bandpass', freq = 800, q = 1, vol = 0.1, pan = null, attack = 0.01 }) {\n    if (!this.ctx) return;\n    const src = this.ctx.createBufferSource();\n    src.buffer = buf === 'brown' ? this._brown : this._white;\n    src.loop = true;\n    src.playbackRate.value = 0.9 + Math.random() * 0.2;\n    const f = this.ctx.createBiquadFilter();\n    f.type = type; f.frequency.value = freq; f.Q.value = q;\n    const g = this.ctx.createGain();\n    const t = this.ctx.currentTime;\n    g.gain.setValueAtTime(0.0001, t);\n    g.gain.linearRampToValueAtTime(vol, t + attack);\n    g.gain.exponentialRampToValueAtTime(0.0001, t + attack + dur);\n    src.connect(f).connect(g).connect(this._out(pan));\n    src.start(); src.stop(t + attack + dur + 0.05);\n  },\n\n  beep(freq = 440, dur = 0.14, type = 'square', vol = 0.16) {\n    if (!this.ctx) return;\n    const o = this.ctx.createOscillator();\n    const g = this.ctx.createGain();\n    o.type = type; o.frequency.value = freq;\n    g.gain.setValueAtTime(vol, this.ctx.currentTime);\n    g.gain.exponentialRampToValueAtTime(0.001, this.ctx.currentTime + dur);\n    o.connect(g).connect(this.master);\n    o.start(); o.stop(this.ctx.currentTime + dur);\n  },\n\n  // ball struck: thump body + leathery snap, volume scales with power\n  kick(p = 0.5) {\n    if (!this.ctx) return;\n    this._noiseHit({ buf: 'brown', dur: 0.09, type: 'lowpass', freq: 300 + p * 250, vol: 0.18 + p * 0.25, pan: 0, attack: 0.003 });\n    this.beep(70 + p * 40, 0.09, 'sine', 0.16 + p * 0.2);\n  },\n\n  bounce() {\n    this._noiseHit({ buf: 'brown', dur: 0.05, type: 'lowpass', freq: 260, vol: 0.07, pan: 0, attack: 0.003 });\n  },\n\n  post() {\n    this.beep(1180, 0.4, 'sine', 0.2);\n    this.beep(590, 0.3, 'triangle', 0.12);\n  },\n\n  // referee whistle: n blasts (1 long for goals/half, 2 short for restarts)\n  ref(n = 1, long = false) {\n    if (!this.ctx) return;\n    for (let i = 0; i < n; i++) {\n      setTimeout(() => {\n        const t = this.ctx.currentTime;\n        const dur = long ? 0.75 : 0.22;\n        const o = this.ctx.createOscillator();\n        o.type = 'square'; o.frequency.value = 2350;\n        const trill = this.ctx.createOscillator();\n        trill.frequency.value = 38;\n        const trillAmt = this.ctx.createGain();\n        trillAmt.gain.value = 160;\n        trill.connect(trillAmt).connect(o.frequency);\n        const g = this.ctx.createGain();\n        g.gain.setValueAtTime(0.0001, t);\n        g.gain.linearRampToValueAtTime(0.11, t + 0.02);\n        g.gain.setValueAtTime(0.11, t + dur - 0.04);\n        g.gain.exponentialRampToValueAtTime(0.0001, t + dur);\n        o.connect(g).connect(this.master);\n        o.start(); trill.start();\n        o.stop(t + dur + 0.05); trill.stop(t + dur + 0.05);\n      }, i * (long ? 900 : 320));\n    }\n  },\n\n  cheer() {\n    if (!this.ctx || !this.cheerGain) return;\n    const t = this.ctx.currentTime;\n    this.cheerGain.gain.cancelScheduledValues(t);\n    this.cheerGain.gain.setValueAtTime(Math.max(this.cheerGain.gain.value, 0.001), t);\n    this.cheerGain.gain.linearRampToValueAtTime(0.5, t + 0.12);\n    this.cheerGain.gain.exponentialRampToValueAtTime(0.001, t + 3.6);\n    for (let i = 0; i < 4; i++) setTimeout(() => this.whoop(0.09), i * 160 + Math.random() * 120);\n    setTimeout(() => this.clapBurst(7), 250);\n  },\n\n  // the big one — roar + horns + a snatch of fanfare\n  goal() {\n    this.cheer();\n    setTimeout(() => this.cheer(), 900);\n    this.horn();\n    setTimeout(() => this.horn(), 500);\n    const notes = [\n      [523.25, 0.00, 0.16],\n      [523.25, 0.20, 0.16],\n      [587.33, 0.40, 0.11],\n      [659.25, 0.52, 0.11],\n      [783.99, 0.66, 0.55],\n    ];\n    for (const [f, at, dur] of notes) {\n      setTimeout(() => {\n        this.beep(f, dur, 'square', 0.18);\n        this.beep(f / 2, dur, 'triangle', 0.12);\n      }, at * 1000 + 350);\n    }\n  },\n\n  groan() {\n    if (!this.ctx || !this.cheerGain) return;\n    // the crowd deflates: low swell that sags\n    this._noiseHit({ buf: 'brown', dur: 1.1, type: 'lowpass', freq: 300, vol: 0.16, pan: 0, attack: 0.12 });\n    for (let i = 0; i < 3; i++) {\n      setTimeout(() => {\n        const o = this.ctx.createOscillator();\n        o.type = 'triangle';\n        const t = this.ctx.currentTime;\n        const f0 = 260 + Math.random() * 80;\n        o.frequency.setValueAtTime(f0, t);\n        o.frequency.exponentialRampToValueAtTime(f0 * 0.6, t + 0.5);\n        const g = this.ctx.createGain();\n        g.gain.setValueAtTime(0.0001, t);\n        g.gain.linearRampToValueAtTime(0.05, t + 0.08);\n        g.gain.exponentialRampToValueAtTime(0.0001, t + 0.55);\n        o.connect(g).connect(this._out());\n        o.start(); o.stop(t + 0.6);\n      }, i * 90);\n    }\n  },\n\n  thud() {\n    this.beep(80, 0.18, 'sine', 0.32);\n    this._noiseHit({ buf: 'brown', dur: 0.12, type: 'lowpass', freq: 250, vol: 0.25, pan: 0, attack: 0.004 });\n  },\n\n  whoosh() {\n    if (!this.ctx) return;\n    const src = this.ctx.createBufferSource();\n    src.buffer = this._white; src.loop = true;\n    const f = this.ctx.createBiquadFilter();\n    f.type = 'bandpass'; f.Q.value = 1.2;\n    const t = this.ctx.currentTime;\n    f.frequency.setValueAtTime(300, t);\n    f.frequency.exponentialRampToValueAtTime(1600, t + 0.28);\n    const g = this.ctx.createGain();\n    g.gain.setValueAtTime(0.0001, t);\n    g.gain.linearRampToValueAtTime(0.12, t + 0.08);\n    g.gain.exponentialRampToValueAtTime(0.0001, t + 0.32);\n    src.connect(f).connect(g).connect(this.master);\n    src.start(); src.stop(t + 0.36);\n  },\n\n  // footstep on the turf — quiet tap + tiny thump, pitch-jittered\n  step() {\n    if (!this.ctx) return;\n    this._noiseHit({ dur: 0.045, type: 'lowpass', freq: 420 + Math.random() * 160, vol: 0.05, pan: 0, attack: 0.003 });\n    this.beep(85 + Math.random() * 25, 0.05, 'sine', 0.045);\n  },\n\n  // ---- crowd one-shots, panned around the ground\n  whoop(vol = 0.07) {\n    if (!this.ctx) return;\n    const o = this.ctx.createOscillator();\n    o.type = 'triangle';\n    const t = this.ctx.currentTime;\n    const f0 = 320 + Math.random() * 220;\n    o.frequency.setValueAtTime(f0, t);\n    o.frequency.exponentialRampToValueAtTime(f0 * (1.8 + Math.random() * 0.5), t + 0.18);\n    o.frequency.exponentialRampToValueAtTime(f0 * 1.2, t + 0.38);\n    const g = this.ctx.createGain();\n    g.gain.setValueAtTime(0.0001, t);\n    g.gain.linearRampToValueAtTime(vol, t + 0.05);\n    g.gain.exponentialRampToValueAtTime(0.0001, t + 0.42);\n    o.connect(g).connect(this._out());\n    o.start(); o.stop(t + 0.45);\n  },\n\n  shout() {\n    this._noiseHit({ dur: 0.28, type: 'bandpass', freq: 550 + Math.random() * 750, q: 1.6, vol: 0.05 + Math.random() * 0.045, attack: 0.02 });\n  },\n\n  whistleCrowd() {\n    if (!this.ctx) return;\n    const base = 2100 + Math.random() * 700;\n    for (let i = 0; i < 2; i++) {\n      setTimeout(() => this.beep(base + (Math.random() - 0.5) * 120, 0.09, 'sine', 0.035), i * 150);\n    }\n  },\n\n  clapBurst(n = 5) {\n    if (!this.ctx) return;\n    let at = 0;\n    for (let i = 0; i < n; i++) {\n      at += 45 + Math.random() * 55;\n      setTimeout(() => this._noiseHit({ dur: 0.022, type: 'highpass', freq: 1600, vol: 0.05, attack: 0.002 }), at);\n    }\n  },\n\n  horn() {\n    if (!this.ctx) return;\n    const t = this.ctx.currentTime;\n    const g = this.ctx.createGain();\n    g.gain.setValueAtTime(0.0001, t);\n    g.gain.linearRampToValueAtTime(0.055, t + 0.06);\n    g.gain.setValueAtTime(0.055, t + 0.55);\n    g.gain.exponentialRampToValueAtTime(0.0001, t + 0.75);\n    const lp = this.ctx.createBiquadFilter();\n    lp.type = 'lowpass'; lp.frequency.value = 900;\n    const out = this._out();\n    lp.connect(g).connect(out);\n    for (const f of [233, 236.5]) {\n      const o = this.ctx.createOscillator();\n      o.type = 'sawtooth'; o.frequency.value = f;\n      o.connect(lp);\n      o.start(); o.stop(t + 0.8);\n    }\n  },\n\n  // a terrace chant: rhythmic claps + a rough four-note terrace melody\n  chant() {\n    if (!this.ctx) return;\n    const beat = 280;\n    for (let i = 0; i < 8; i++) {\n      setTimeout(() => this.clapBurst(3), i * beat);\n    }\n    const line = [262, 262, 294, 330, 294, 262];\n    line.forEach((f, i) => {\n      setTimeout(() => {\n        this._noiseHit({ dur: 0.22, type: 'bandpass', freq: f * 2, q: 4, vol: 0.06, attack: 0.03 });\n        this.beep(f, 0.2, 'triangle', 0.04);\n      }, i * beat + 100);\n    });\n  },\n\n  setAmbience(excitement) {\n    if (this.murmurGain) this.murmurGain.gain.value = 0.05 + excitement * 0.16;\n  },\n\n  ambient(dt, excitement) {\n    if (!this.ctx) return;\n    this._ambT -= dt;\n    if (this._ambT > 0) return;\n    this._ambT = 0.35 + Math.random() * Math.max(0.5, 2.8 - excitement * 2.2);\n    const r = Math.random();\n    if (excitement > 0.5 && r < 0.05) this.horn();\n    else if (r < 0.1 && excitement > 0.35) this.chant();\n    else if (r < 0.42) this.whoop();\n    else if (r < 0.72) this.shout();\n    else if (r < 0.83) this.whistleCrowd();\n    else this.clapBurst(3 + Math.floor(Math.random() * 3 + excitement * 4));\n  },\n};\n"},{"name":"ball.js","content":"// ball.js — the voxel match ball: white core with black patches, arcade physics\nimport { THREE, boxMesh } from './lib.js';\nimport { scene, PITCH } from './core.js';\n\nexport const BALL_R = 0.36;\n\nconst group = new THREE.Group();\nconst core = boxMesh(0.62, 0.62, 0.62, '#f6f4ee', { roughness: 0.55 });\ngroup.add(core);\nfor (const [x, y, z] of [[0.26, 0.26, 0.26], [-0.26, -0.26, 0.26], [0.26, -0.26, -0.26], [-0.26, 0.26, -0.26], [0.3, 0, 0], [0, 0.3, 0]]) {\n  const patch = boxMesh(0.24, 0.24, 0.24, '#1b1f26', { roughness: 0.6 });\n  patch.position.set(x, y, z);\n  group.add(patch);\n}\nscene.add(group);\n\nexport const ball = {\n  group,\n  pos: new THREE.Vector3(0, BALL_R, 0),\n  vel: new THREE.Vector3(),\n  spin: new THREE.Vector3(),\n  held: null,     // keeper holding it\n  owner: null,    // dribbler the ball is glued to\n  noStickT: 0,    // just kicked — don't re-stick immediately\n\n  reset(x = 0, z = 0) {\n    this.pos.set(x, BALL_R, z);\n    this.vel.set(0, 0, 0);\n    this.held = null;\n    this.owner = null;\n    this.noStickT = 0;\n  },\n\n  kick(dx, dz, speed, vy = 0) {\n    const len = Math.hypot(dx, dz) || 1;\n    this.vel.set((dx / len) * speed, vy, (dz / len) * speed);\n    this.held = null;\n    this.owner = null;\n    this.noStickT = 0.3;\n  },\n\n  update(dt) {\n    this.noStickT = Math.max(0, this.noStickT - dt);\n    // close control: the ball rides a stiff spring to a point just ahead\n    // of the owner's boots, so it genuinely sticks while dribbling\n    if (this.owner && !this.held) {\n      const o = this.owner;\n      const lead = 0.55 + o.speed * 0.085;\n      const fx = o.pos.x + Math.cos(o.heading) * lead;\n      const fz = o.pos.z + Math.sin(o.heading) * lead;\n      this.vel.x = o.vel.x + (fx - this.pos.x) * 13;\n      this.vel.z = o.vel.z + (fz - this.pos.z) * 13;\n      const sp = Math.hypot(this.vel.x, this.vel.z);\n      const cap = Math.max(o.speed + 4.5, 6);\n      if (sp > cap) { this.vel.x *= cap / sp; this.vel.z *= cap / sp; }\n    }\n    if (this.held) {\n      // glued to the keeper's chest\n      const h = this.held;\n      this.pos.set(\n        h.pos.x + Math.cos(h.heading) * 0.5,\n        1.05,\n        h.pos.z + Math.sin(h.heading) * 0.5\n      );\n      this.vel.set(0, 0, 0);\n    } else {\n      this.vel.y -= 22 * dt; // heavy arcade gravity\n      this.pos.addScaledVector(this.vel, dt);\n\n      // bounce + roll friction\n      if (this.pos.y < BALL_R) {\n        this.pos.y = BALL_R;\n        if (this.vel.y < -1.2) this.vel.y = -this.vel.y * 0.52;\n        else this.vel.y = 0;\n        // ground friction\n        const f = Math.max(0, 1 - dt * 1.35);\n        this.vel.x *= f;\n        this.vel.z *= f;\n      } else {\n        // light air drag\n        const f = Math.max(0, 1 - dt * 0.12);\n        this.vel.x *= f;\n        this.vel.z *= f;\n      }\n\n      // goal frame: posts + crossbar are solid-ish (cheap sphere-vs-post)\n      for (const e of [-1, 1]) {\n        const gl = PITCH.hl * e;\n        if (Math.abs(this.pos.z - gl) < 0.5) {\n          for (const s of [-1, 1]) {\n            const px = s * PITCH.goalHW;\n            if (Math.abs(this.pos.x - px) < 0.45 && this.pos.y < PITCH.goalH + 0.3) {\n              this.vel.x *= -0.5;\n              this.pos.x = px + Math.sign(this.pos.x - px) * 0.46;\n              if (this.groundSpeed() > 6) this.hitPost = true;\n            }\n          }\n          if (Math.abs(this.pos.y - PITCH.goalH) < 0.35 && Math.abs(this.pos.x) < PITCH.goalHW + 0.3 && this.vel.y > 0) {\n            this.vel.y *= -0.5;\n            if (this.groundSpeed() > 6) this.hitPost = true;\n          }\n        }\n        // net catches the ball\n        if (e * this.pos.z > gl + 0.4 && e * this.pos.z < gl + 2.1 && Math.abs(this.pos.x) < PITCH.goalHW + 0.2 && this.pos.y < 2.4) {\n          this.vel.multiplyScalar(Math.max(0, 1 - dt * 12));\n          if (e * this.pos.z > gl + 1.6) this.pos.z = (gl + 1.6) * e;\n        }\n      }\n    }\n\n    group.position.copy(this.pos);\n    // roll: rotate against travel\n    group.rotation.x += this.vel.z * dt / BALL_R;\n    group.rotation.z -= this.vel.x * dt / BALL_R;\n  },\n\n  groundSpeed() { return Math.hypot(this.vel.x, this.vel.z); },\n};\n"},{"name":"core.js","content":"// core.js — renderer, scene, camera, teams, shared match state\nimport { THREE, clamp } from './lib.js';\nimport { buildStadium, PITCH, CENTER } from './world.js';\nimport { Athlete } from './athlete.js';\n\nexport const app = document.getElementById('app');\n\nexport const IS_TOUCH = window.matchMedia('(pointer: coarse)').matches || 'ontouchstart' in window;\n\nexport const renderer = new THREE.WebGLRenderer({ antialias: true });\nrenderer.setPixelRatio(Math.min(window.devicePixelRatio, IS_TOUCH ? 1.3 : 1.75));\nrenderer.setSize(window.innerWidth, window.innerHeight);\nrenderer.shadowMap.enabled = true;\nrenderer.shadowMap.type = THREE.PCFSoftShadowMap;\nrenderer.toneMapping = THREE.ACESFilmicToneMapping;\nrenderer.toneMappingExposure = 1.12;\nrenderer.outputColorSpace = THREE.SRGBColorSpace;\napp.insertBefore(renderer.domElement, app.firstChild);\n\nexport const scene = new THREE.Scene();\nexport const camera = new THREE.PerspectiveCamera(30, window.innerWidth / window.innerHeight, 1, 1200);\ncamera.position.set(0, 150, 170);\ncamera.lookAt(CENTER);\n\nwindow.addEventListener('resize', () => {\n  camera.aspect = window.innerWidth / window.innerHeight;\n  camera.updateProjectionMatrix();\n  renderer.setSize(window.innerWidth, window.innerHeight);\n});\n\nexport const stadium = buildStadium(scene);\n\n// ---------------- the two squads: 1 keeper, 2 defenders, 2 attackers each\nexport const TEAMS = [\n  {\n    id: 0, name: 'VOXEL UTD', short: 'VOX', color: '#ff4b3a', human: true,\n    players: [\n      { name: 'SAFE HANDS', role: 'gk', kit: '#ffb020', shorts: '#111827', skin: '#e8b48c', hair: '#c9c9c9', num: 1 },\n      { name: 'TERRY TACKLE', role: 'df', hx: -7, hz: 15, kit: '#ff4b3a', shorts: '#ffffff', skin: '#8a5a33', hair: '#101010', num: 2 },\n      { name: 'BRICK WALL', role: 'df', hx: 7, hz: 15, kit: '#ff4b3a', shorts: '#ffffff', skin: '#f0c8a0', hair: '#5b3a1e', hairStyle: 'band', num: 5 },\n      { name: 'DAVEY BOOT', role: 'at', hx: -5, hz: -4, kit: '#ff4b3a', shorts: '#ffffff', skin: '#c98e5a', hair: '#20140e', hairStyle: 'spike', num: 7 },\n      { name: 'RIO VOXEL', role: 'at', hx: 5, hz: -4, kit: '#ff4b3a', shorts: '#ffffff', skin: '#6b4226', hair: '#101010', hairStyle: 'afro', num: 9 },\n    ],\n  },\n  {\n    id: 1, name: 'DYNAMO BLU', short: 'DYN', color: '#2563eb', human: false,\n    players: [\n      { name: 'IRON GLOVE', role: 'gk', kit: '#10b981', shorts: '#111827', skin: '#c98e5a', hair: '#3b2b1a', num: 1 },\n      { name: 'COLD STEEL', role: 'df', hx: -7, hz: 15, kit: '#2563eb', shorts: '#111827', skin: '#f0c8a0', hair: '#7a3b12', num: 4 },\n      { name: 'BIG UNIT', role: 'df', hx: 7, hz: 15, kit: '#2563eb', shorts: '#111827', skin: '#8a5a33', hair: '#101010', hairStyle: 'afro', num: 6 },\n      { name: 'SILKY S.', role: 'at', hx: -5, hz: -4, kit: '#2563eb', shorts: '#111827', skin: '#e8b48c', hair: '#c9c9c9', hairStyle: 'pony', num: 10 },\n      { name: 'TURBO T.', role: 'at', hx: 5, hz: -4, kit: '#2563eb', shorts: '#111827', skin: '#6b4226', hair: '#20140e', hairStyle: 'spike', num: 11 },\n    ],\n  },\n];\n\n// build athletes; each gets sim fields bolted on\nexport const players = [];\nfor (const team of TEAMS) {\n  team.athletes = team.players.map((p) => {\n    const a = new Athlete(p);\n    a.team = team;\n    a.role = p.role;\n    a.homeX = p.hx || 0;\n    a.homeZ = p.hz || 0;\n    a.pos = new THREE.Vector3();\n    a.vel = new THREE.Vector3();\n    a.heading = 0;           // radians, atan2(dz,dx) style direction of travel\n    a.speed = 0;\n    a.mode = 'idle';\n    a.modeOpt = {};\n    a.kickT = 0;             // time left in kick animation\n    a.tackleT = 0;           // time left sliding\n    a.tackleCd = 0;\n    a.diveT = 0;\n    a.stunT = 0;             // knocked over / recovering\n    scene.add(a.group);\n    players.push(a);\n    return a;\n  });\n}\n\nexport const gks = [TEAMS[0].athletes[0], TEAMS[1].athletes[0]];\n\n// ---------------- shared match state\nexport const game = {\n  state: 'title',   // title | kickoff | play | goal | half | full\n  half: 1,\n  clock: 0,          // real seconds elapsed this half\n  HALF_LEN: 120,     // real seconds per half (displayed as 45:00)\n  score: [0, 0],\n  goals: [],         // {team, name, min}\n  lastTouch: null,   // athlete who touched last\n  restrictTeam: -1,  // only this team may take the first touch (restarts)\n  restrictT: 0,\n  controlled: null,  // the athlete the human is driving\n  timeScale: 1, tsTarget: 1, tsTimer: 0,\n  excitement: 0.25,\n  shake: 0,\n  time: 0,\n  attackDir: [-1, 1], // team 0 attacks -z in the first half\n  stateT: 0,\n};\n\nexport const cam = {\n  pos: camera.position.clone(),\n  look: CENTER.clone(),\n  mode: 'orbit',\n  orbitAngle: 0.6,\n  focus: null, // athlete to orbit during goal celebrations\n};\n\nexport function setSlowmo(scale, realSeconds) {\n  game.tsTarget = scale;\n  game.tsTimer = realSeconds;\n}\n\nexport function ownGoalZ(team) { return -game.attackDir[team.id] * PITCH.hl; }\nexport function targetGoalZ(team) { return game.attackDir[team.id] * PITCH.hl; }\n\nexport { clamp, PITCH };\n"},{"name":"fx.js","content":"// fx.js — instanced particle system (confetti, turf, chalk dust)\nimport { THREE } from './lib.js';\nimport { scene } from './core.js';\n\nexport const CONFETTI = ['#ff4b3a', '#ffb020', '#4aa3ff', '#7ce34a', '#f5f1e6', '#c084fc'];\nexport const TURF = ['#5fae3f', '#4b9231', '#7a5c3a'];\nexport const CHALK = ['#f3efe2', '#e8e4d4', '#ffffff'];\n\nconst P_MAX = 800;\nconst pGeo = new THREE.BoxGeometry(0.22, 0.22, 0.22);\nconst pMesh = new THREE.InstancedMesh(pGeo, new THREE.MeshStandardMaterial({ roughness: 0.8 }), P_MAX);\npMesh.frustumCulled = false;\nscene.add(pMesh);\nconst parts = [];\nconst pDummy = new THREE.Object3D();\nconst pColor = new THREE.Color();\n\nexport function spawnParticles(pos, colors, n, opt = {}) {\n  for (let i = 0; i < n; i++) {\n    if (parts.length >= P_MAX) parts.shift();\n    parts.push({\n      x: pos.x + (Math.random() - 0.5) * (opt.spread || 1),\n      y: pos.y + Math.random() * 0.5,\n      z: pos.z + (Math.random() - 0.5) * (opt.spread || 1),\n      vx: (Math.random() - 0.5) * (opt.vel || 5),\n      vy: (opt.up != null ? opt.up : 4) * (0.4 + Math.random() * 0.8),\n      vz: (Math.random() - 0.5) * (opt.vel || 5),\n      g: opt.g != null ? opt.g : 14,\n      life: (opt.life || 1) * (0.6 + Math.random() * 0.7),\n      rot: Math.random() * Math.PI,\n      rv: (Math.random() - 0.5) * 8,\n      s: (opt.size || 1) * (0.6 + Math.random() * 0.8),\n      color: colors[Math.floor(Math.random() * colors.length)],\n    });\n  }\n}\n\nexport function updateParticles(dt) {\n  for (let i = parts.length - 1; i >= 0; i--) {\n    const p = parts[i];\n    p.life -= dt;\n    if (p.life <= 0 || p.y < -1) { parts.splice(i, 1); continue; }\n    p.vy -= p.g * dt;\n    p.x += p.vx * dt; p.y += p.vy * dt; p.z += p.vz * dt;\n    p.rot += p.rv * dt;\n  }\n  for (let i = 0; i < P_MAX; i++) {\n    if (i < parts.length) {\n      const p = parts[i];\n      pDummy.position.set(p.x, p.y, p.z);\n      pDummy.rotation.set(p.rot, p.rot * 0.7, 0);\n      pDummy.scale.setScalar(p.s);\n      pDummy.updateMatrix();\n      pMesh.setMatrixAt(i, pDummy.matrix);\n      pMesh.setColorAt(i, pColor.set(p.color));\n    } else {\n      pDummy.position.set(0, -50, 0);\n      pDummy.scale.setScalar(0.001);\n      pDummy.updateMatrix();\n      pMesh.setMatrixAt(i, pDummy.matrix);\n    }\n  }\n  pMesh.instanceMatrix.needsUpdate = true;\n  if (pMesh.instanceColor) pMesh.instanceColor.needsUpdate = true;\n}\n"},{"name":"hud.js","content":"// hud.js — DOM overlay helpers\nconst $ = (id) => document.getElementById(id);\nconst clamp01 = (v) => Math.max(0, Math.min(1, v));\n\nexport const hud = {\n  root: $('hud'), timer: $('timer'), halfChip: $('half-chip'),\n  scoreHome: $('score-home'), scoreAway: $('score-away'),\n  scoreHomeName: $('score-home-name'), scoreAwayName: $('score-away-name'),\n  msg: $('center-msg'), popup: $('popup'),\n  powerWrap: $('power-wrap'), powerFill: $('power-fill'), powerLabel: $('power-label'),\n  card: $('card'), cardNo: $('card-no'), cardName: $('card-name'), cardDesc: $('card-desc'),\n  results: $('results'), resultsTitle: $('results-title'), resultsTable: $('results-table'),\n  resultsKicker: $('results-kicker'), resultsHint: $('results-hint'),\n  title: $('title'),\n};\n\nexport function showMsg(text, cls = '') {\n  hud.msg.textContent = text;\n  hud.msg.className = '';\n  void hud.msg.offsetWidth;\n  hud.msg.className = 'pop ' + cls;\n}\n\nexport function showPopup(text, bad = false) {\n  hud.popup.textContent = text;\n  hud.popup.className = bad ? 'bad' : '';\n  void hud.popup.offsetWidth;\n  hud.popup.className = (bad ? 'bad ' : '') + 'rise';\n}\n\nexport function setPower(v01, show, label) {\n  hud.powerWrap.classList.toggle('hidden', !show);\n  hud.powerFill.style.width = (clamp01(v01) * 100).toFixed(1) + '%';\n  if (label) hud.powerLabel.textContent = label;\n}\n\nexport function setScore(s0, s1) {\n  hud.scoreHome.textContent = s0;\n  hud.scoreAway.textContent = s1;\n}\n\nexport function setClock(text) { hud.timer.textContent = text; }\nexport function setHalf(text) { hud.halfChip.textContent = text; }\n"},{"name":"lib.js","content":"// lib.js — three.js + tiny shared helpers used by every module\nimport * as THREE from 'https://cdn.jsdelivr.net/npm/three@0.160.0/build/three.module.js';\n\nexport { THREE };\n\nexport const BOX = new THREE.BoxGeometry(1, 1, 1);\n\nexport const clamp = (v, a, b) => Math.max(a, Math.min(b, v));\n\nexport function stdMat(color, opts = {}) {\n  return new THREE.MeshStandardMaterial(Object.assign({ color, roughness: 0.92, metalness: 0.0 }, opts));\n}\n\nexport function boxMesh(w, h, d, color, opts = {}) {\n  const m = new THREE.Mesh(BOX, stdMat(color, opts));\n  m.scale.set(w, h, d);\n  m.castShadow = true;\n  m.receiveShadow = true;\n  return m;\n}\n\n// Build one InstancedMesh from a list of {x,y,z,sx,sy,sz,color,ry}\nexport function buildTiles(list, { shadowCast = false, matOpts = null } = {}) {\n  const mat = new THREE.MeshStandardMaterial(Object.assign({ roughness: 0.95, metalness: 0 }, matOpts || {}));\n  const mesh = new THREE.InstancedMesh(BOX, mat, list.length);\n  const d = new THREE.Object3D();\n  const c = new THREE.Color();\n  list.forEach((t, i) => {\n    d.position.set(t.x, t.y, t.z);\n    d.scale.set(t.sx, t.sy, t.sz);\n    d.rotation.set(0, t.ry || 0, 0);\n    d.updateMatrix();\n    mesh.setMatrixAt(i, d.matrix);\n    mesh.setColorAt(i, c.set(t.color));\n  });\n  if (mesh.instanceColor) mesh.instanceColor.needsUpdate = true;\n  mesh.castShadow = shadowCast;\n  mesh.receiveShadow = true;\n  return mesh;\n}\n"},{"name":"main.js","content":"// main.js — Super Voxel Football: match flow, input, camera, render loop\nimport { THREE, clamp } from './lib.js';\nimport {\n  renderer, scene, camera, game, cam, stadium, TEAMS, players, gks,\n  setSlowmo, IS_TOUCH, PITCH, targetGoalZ, ownGoalZ,\n} from './core.js';\nimport { CENTER, headingFor } from './world.js';\nimport { ball, BALL_R } from './ball.js';\nimport * as hud from './hud.js';\nimport { audio } from './audio.js';\nimport { spawnParticles, updateParticles, CONFETTI, TURF } from './fx.js';\nimport {\n  updateAI, doPass, doShoot, ballDist, mayTouch, hasBall, dist2D, SPEED,\n} from './ai.js';\n\nconst HUMAN = TEAMS[0];\nconst AWAY = TEAMS[1];\nfor (const a of players) a.tv = new THREE.Vector3();\n\nhud.hud.scoreHomeName.textContent = HUMAN.short;\nhud.hud.scoreAwayName.textContent = AWAY.short;\n\n// ---------------------------------------------------------------- \"YOU\" marker\nconst markerCanvas = document.createElement('canvas');\nmarkerCanvas.width = 256; markerCanvas.height = 128;\nconst mctx = markerCanvas.getContext('2d');\nmctx.font = '900 74px \"Archivo Black\", sans-serif';\nmctx.textAlign = 'center';\nmctx.textBaseline = 'middle';\nmctx.lineWidth = 16;\nmctx.lineJoin = 'round';\nmctx.strokeStyle = 'rgba(10, 16, 30, 0.92)';\nmctx.strokeText('YOU', 128, 66);\nmctx.fillStyle = '#ffd24a';\nmctx.fillText('YOU', 128, 66);\nconst markerTex = new THREE.CanvasTexture(markerCanvas);\nmarkerTex.colorSpace = THREE.SRGBColorSpace;\nconst marker = new THREE.Sprite(new THREE.SpriteMaterial({ map: markerTex, transparent: true, opacity: 0.95 }));\nmarker.scale.set(1.8, 0.9, 1);\nmarker.visible = false;\nscene.add(marker);\n\n// ---------------------------------------------------------------- input\nconst keys = {};\nlet chargeT = -1;        // >= 0 while SPACE is held\nlet enterQueued = false;\n\nwindow.addEventListener('keydown', (e) => {\n  if (['ArrowLeft', 'ArrowRight', 'ArrowUp', 'ArrowDown', ' '].includes(e.key)) e.preventDefault();\n  audio.ensure();\n  const k = e.key.toLowerCase();\n  keys[k] = true;\n  if (e.key === 'Enter') enterQueued = true;\n  if (e.key === ' ' && chargeT < 0 && !e.repeat) chargeT = 0;\n});\nwindow.addEventListener('keyup', (e) => {\n  const k = e.key.toLowerCase();\n  keys[k] = false;\n  if (e.key === ' ' && chargeT >= 0) { playerAction(chargeT); chargeT = -1; }\n});\n\nfunction inputVec() {\n  let x = 0, z = 0;\n  if (keys['arrowleft'] || keys['a']) x -= 1;\n  if (keys['arrowright'] || keys['d']) x += 1;\n  if (keys['arrowup'] || keys['w']) z -= 1;\n  if (keys['arrowdown'] || keys['s']) z += 1;\n  if (stick.active) { x = stick.x; z = stick.z; }\n  const l = Math.hypot(x, z);\n  return l > 1 ? { x: x / l, z: z / l } : { x, z };\n}\n\n// touch: drag-stick on the left, action button on the right\nconst stick = { active: false, x: 0, z: 0, ox: 0, oy: 0 };\nif (IS_TOUCH) document.body.classList.add('touch');\nconst stickEl = document.getElementById('t-stick');\nconst nubEl = document.getElementById('t-nub');\nconst actEl = document.getElementById('t-action');\nif (stickEl) {\n  stickEl.addEventListener('touchstart', (e) => {\n    e.preventDefault(); audio.ensure();\n    const t = e.changedTouches[0];\n    stick.active = true; stick.ox = t.clientX; stick.oy = t.clientY;\n  }, { passive: false });\n  stickEl.addEventListener('touchmove', (e) => {\n    e.preventDefault();\n    const t = e.changedTouches[0];\n    const dx = t.clientX - stick.ox, dy = t.clientY - stick.oy;\n    const l = Math.hypot(dx, dy);\n    const k = l > 40 ? 40 / l : 1;\n    stick.x = (dx * k) / 40; stick.z = (dy * k) / 40;\n    nubEl.style.transform = `translate(${dx * k}px, ${dy * k}px)`;\n  }, { passive: false });\n  const end = (e) => {\n    e.preventDefault();\n    stick.active = false; stick.x = 0; stick.z = 0;\n    nubEl.style.transform = '';\n  };\n  stickEl.addEventListener('touchend', end, { passive: false });\n  stickEl.addEventListener('touchcancel', end, { passive: false });\n}\nif (actEl) {\n  actEl.addEventListener('touchstart', (e) => {\n    e.preventDefault(); audio.ensure();\n    if (game.state === 'title' || game.state === 'half' || game.state === 'full') { enterQueued = true; return; }\n    if (chargeT < 0) chargeT = 0;\n  }, { passive: false });\n  actEl.addEventListener('touchend', (e) => {\n    e.preventDefault();\n    if (chargeT >= 0) { playerAction(chargeT); chargeT = -1; }\n  }, { passive: false });\n}\nwindow.addEventListener('pointerdown', () => audio.ensure(), { once: true });\n\n// ---------------------------------------------------------------- flow\nfunction fmtClock() {\n  const scaled = clamp(game.clock / game.HALF_LEN, 0, 1) * 45 * 60 + (game.half === 2 ? 45 * 60 : 0);\n  const m = Math.floor(scaled / 60), s = Math.floor(scaled % 60);\n  return String(m).padStart(2, '0') + ':' + String(s).padStart(2, '0');\n}\n\nfunction updateScoreboardScreen(sub) {\n  stadium.scoreboard(`${HUMAN.short} ${game.score[0]}-${game.score[1]} ${AWAY.short}`, sub);\n}\n\nfunction setupKickoff(kickingId) {\n  ball.reset(0, 0);\n  game.restrictTeam = kickingId;\n  game.restrictT = 5;\n  game.kickingId = kickingId;\n  for (const team of TEAMS) {\n    const dir = game.attackDir[team.id];\n    const kicking = team.id === kickingId;\n    const ats = team.athletes.filter((a) => a.role === 'at');\n    const dfs = team.athletes.filter((a) => a.role === 'df');\n    const gk = team.athletes[0];\n    gk.pos.set(0, 0, -dir * (PITCH.hl - 0.8));\n    dfs[0].pos.set(-7, 0, -dir * 17);\n    dfs[1].pos.set(7, 0, -dir * 17);\n    if (kicking) {\n      ats[0].pos.set(0.5, 0, -dir * 1.1);\n      ats[1].pos.set(-5.5, 0, -dir * 4.5);\n    } else {\n      ats[0].pos.set(-4.5, 0, -dir * 8.5);\n      ats[1].pos.set(4.5, 0, -dir * 8.5);\n    }\n    for (const a of team.athletes) {\n      a.vel.set(0, 0, 0);\n      a.tv.set(0, 0, 0);\n      a.heading = Math.atan2(dir, 0);\n      a.kickT = 0; a.tackleT = 0; a.diveT = 0; a.stunT = 0;\n    }\n  }\n  game.controlled = null;\n  pickControlled(true);\n  game.state = 'kickoff';\n  game.stateT = 1.3;\n}\n\nfunction beginMatch() {\n  game.score = [0, 0];\n  game.goals = [];\n  game.half = 1;\n  game.clock = 0;\n  game.attackDir = [-1, 1];\n  hud.setScore(0, 0);\n  hud.setHalf('FIRST HALF');\n  updateScoreboardScreen('FIRST HALF');\n  hud.hud.title.classList.add('hidden');\n  hud.hud.results.classList.add('hidden');\n  hud.hud.root.classList.remove('hidden');\n  setupKickoff(0);\n  audio.ref(1);\n  hud.showMsg('KICK OFF', 'go');\n  cam.mode = 'follow';\n}\n\nfunction onGoal(scoringId) {\n  const conceding = 1 - scoringId;\n  game.score[scoringId]++;\n  hud.setScore(game.score[0], game.score[1]);\n  const scorer = game.lastTouch || TEAMS[scoringId].athletes[3];\n  const og = scorer.team.id !== scoringId;\n  const min = Math.max(1, Math.round((game.clock / game.HALF_LEN) * 45 + (game.half === 2 ? 45 : 0)));\n  game.goals.push({ team: scoringId, name: scorer.name + (og ? ' (OG)' : ''), min });\n  game.scorer = og ? TEAMS[scoringId].athletes[3 + Math.floor(Math.random() * 2)] : scorer;\n  game.state = 'goal';\n  game.stateT = 4.4;\n  for (const p of players) { p.tv.set(0, 0, 0); p.vel.multiplyScalar(0.2); }\n  game.concededId = conceding;\n  game.exciteBoost = 1;\n  game.shake = 0.7;\n  setSlowmo(0.35, 0.9);\n  hud.showMsg('GOAL!', scoringId === 0 ? 'go' : 'bad');\n  hud.showPopup(`${scorer.name} ${min}'`, scoringId !== 0);\n  audio.ref(1, true);\n  if (scoringId === 0) audio.goal(); else { audio.groan(); setTimeout(() => audio.clapBurst(4), 800); }\n  spawnParticles(ball.pos, CONFETTI, scoringId === 0 ? 90 : 25, { up: 9, vel: 8, g: 9, life: 2.2, spread: 3 });\n  updateScoreboardScreen(scoringId === 0 ? 'GOOOAL!' : 'OH NO...');\n  cam.mode = 'goalcam';\n  chargeT = -1;\n}\n\nfunction endHalf() {\n  if (game.half === 1) {\n    game.state = 'half';\n    audio.ref(1, true);\n    hud.showMsg('HALF TIME', '');\n    showResults('HALF TIME', 'PRESS ENTER FOR THE SECOND HALF');\n    updateScoreboardScreen('HALF TIME');\n  } else {\n    game.state = 'full';\n    audio.ref(3);\n    const win = game.score[0] > game.score[1];\n    const draw = game.score[0] === game.score[1];\n    hud.showMsg('FULL TIME', win ? 'go' : draw ? '' : 'bad');\n    showResults('FULL TIME', 'PRESS ENTER FOR A REMATCH');\n    updateScoreboardScreen(win ? `${HUMAN.short} WIN!` : draw ? 'A DRAW' : `${AWAY.short} WIN`);\n    if (win) { audio.goal(); game.exciteBoost = 1; }\n  }\n  chargeT = -1;\n  cam.mode = 'orbit';\n}\n\nfunction showResults(kicker, hint) {\n  hud.hud.resultsKicker.textContent = kicker;\n  hud.hud.resultsTitle.textContent = `${HUMAN.short} ${game.score[0]} — ${game.score[1]} ${AWAY.short}`;\n  let rows = '';\n  if (game.goals.length === 0) {\n    rows = '<div class=\"res-row\"><span class=\"res-pos\">—</span><span class=\"res-name\">NO GOALS YET</span><span class=\"res-mark\"></span></div>';\n  }\n  for (const g of game.goals) {\n    rows += `<div class=\"res-row ${g.team === 0 ? 'player' : ''}\">\n      <span class=\"res-pos\">${g.min}'</span>\n      <span class=\"res-name\">${g.name}</span>\n      <span class=\"res-mark\">${TEAMS[g.team].short}</span>\n    </div>`;\n  }\n  hud.hud.resultsTable.innerHTML = rows;\n  hud.hud.resultsHint.innerHTML = hint.replace('ENTER', '<b>ENTER</b>');\n  hud.hud.results.classList.remove('hidden');\n}\n\nfunction handleEnter() {\n  if (game.state === 'title') beginMatch();\n  else if (game.state === 'half') {\n    hud.hud.results.classList.add('hidden');\n    game.half = 2;\n    game.clock = 0;\n    game.attackDir = [1, -1];\n    hud.setHalf('SECOND HALF');\n    updateScoreboardScreen('SECOND HALF');\n    setupKickoff(1);\n    audio.ref(1);\n    hud.showMsg('KICK OFF', 'go');\n    cam.mode = 'follow';\n  } else if (game.state === 'full') {\n    hud.hud.results.classList.add('hidden');\n    hud.hud.root.classList.add('hidden');\n    hud.hud.title.classList.remove('hidden');\n    game.state = 'title';\n    cam.mode = 'orbit';\n    setupTitleScene();\n  }\n}\n\nfunction setupTitleScene() {\n  // players warm up in loose formation while the camera drifts\n  for (const team of TEAMS) {\n    const dir = team.id === 0 ? -1 : 1;\n    team.athletes.forEach((a, i) => {\n      a.pos.set(-8 + i * 4, 0, dir * (8 + (i % 2) * 5));\n      a.vel.set(0, 0, 0); a.tv.set(0, 0, 0);\n      a.heading = Math.atan2(-dir, 0);\n    });\n  }\n  ball.reset(0, 0);\n  game.state = 'title';\n}\n\n// ---------------------------------------------------------------- player control\nfunction pickControlled(force = false) {\n  let best = null, bd = 1e9;\n  for (const a of HUMAN.athletes) {\n    if (a.role === 'gk') continue;\n    const d = ballDist(a);\n    if (d < bd) { bd = d; best = a; }\n  }\n  const cur = game.controlled;\n  if (force || !cur || cur.role === 'gk') { game.controlled = best; return; }\n  if (best !== cur && bd < ballDist(cur) - 1.4) game.controlled = best;\n}\n\nfunction playerAction(charge) {\n  const a = game.controlled;\n  if (!a || (game.state !== 'play' && game.state !== 'kickoff')) return;\n  const near = (ball.owner === a || ballDist(a) < 1.8) && ball.pos.y < 1.6 && !ball.held;\n  if (near && mayTouch(a)) {\n    if (charge < 0.24) {\n      doPass(a);\n      hud.setPower(0, false);\n    } else {\n      const p = clamp(charge / 0.9, 0.3, 1);\n      doShoot(a, p);\n      game.shake = Math.max(game.shake, p * 0.25);\n      game.fovKick = p * 3.5;\n      hud.setPower(0, false);\n    }\n  } else if (a.tackleCd <= 0 && a.tackleT <= 0) {\n    // slide tackle\n    a.tackleT = 0.5;\n    a.tackleCd = 1.25;\n    const th = a.heading;\n    a.vel.set(Math.cos(th) * 11, 0, Math.sin(th) * 11);\n    audio.whoosh();\n    spawnParticles(a.pos, TURF, 8, { up: 2.5, vel: 3, life: 0.7 });\n    hud.setPower(0, false);\n  }\n}\n\n// ---------------------------------------------------------------- simulation\nfunction integrateAthletes(sdt) {\n  for (const a of players) {\n    a.kickT = Math.max(0, a.kickT - sdt);\n    a.tackleCd = Math.max(0, (a.tackleCd || 0) - sdt);\n    a.stunT = Math.max(0, (a.stunT || 0) - sdt);\n    a.touchCd = Math.max(0, (a.touchCd || 0) - sdt);\n\n    if (a.tackleT > 0) {\n      a.tackleT -= sdt;\n      a.vel.multiplyScalar(Math.max(0, 1 - sdt * 3.2));\n      // the slide can win the ball or dump the carrier\n      if (ballDist(a) < 1.15 && ball.pos.y < 1 && mayTouch(a)) {\n        const th = a.heading;\n        ball.kick(Math.cos(th), Math.sin(th), 8.5, 1.2);\n        game.lastTouch = a;\n        audio.kick(0.4);\n      }\n      const opp = TEAMS[1 - a.team.id];\n      for (const o of opp.athletes) {\n        if (o.stunT <= 0 && dist2D(a.pos.x, a.pos.z, o.pos.x, o.pos.z) < 1.0) {\n          o.stunT = 0.85;\n          o.stunDir = Math.random() < 0.5 ? -1 : 1;\n          o.vel.set(0, 0, 0);\n          audio.thud();\n          spawnParticles(o.pos, TURF, 6, { up: 2, vel: 3, life: 0.6 });\n        }\n      }\n    } else if (a.stunT > 0) {\n      a.vel.multiplyScalar(Math.max(0, 1 - sdt * 6));\n    } else {\n      // human control overrides tv (only while actually steering —\n      // hands-off, your player falls back to team AI, Sensible style)\n      if (a === game.controlled && game.humanActive && (game.state === 'play' || game.state === 'kickoff')) {\n        const iv = inputVec();\n        let sp = SPEED.human;\n        if (chargeT >= 0) sp *= 0.5;\n        if (hasBall(a)) sp *= 0.93;\n        a.tv.set(iv.x * sp, 0, iv.z * sp);\n      }\n      const k = 1 - Math.exp(-sdt * 8);\n      a.vel.x += (a.tv.x - a.vel.x) * k;\n      a.vel.z += (a.tv.z - a.vel.z) * k;\n    }\n\n    a.pos.x += a.vel.x * sdt;\n    a.pos.z += a.vel.z * sdt;\n    a.pos.x = clamp(a.pos.x, -PITCH.hw - 1.5, PITCH.hw + 1.5);\n    a.pos.z = clamp(a.pos.z, -PITCH.hl - 1.5, PITCH.hl + 1.5);\n    a.speed = Math.hypot(a.vel.x, a.vel.z);\n    if (a.speed > 0.7 && a.tackleT <= 0) a.heading = Math.atan2(a.vel.z, a.vel.x);\n  }\n\n  // gentle shoulder-to-shoulder separation\n  for (let i = 0; i < players.length; i++) {\n    for (let j = i + 1; j < players.length; j++) {\n      const A = players[i], B = players[j];\n      const dx = B.pos.x - A.pos.x, dz = B.pos.z - A.pos.z;\n      const d = Math.hypot(dx, dz);\n      if (d > 0.001 && d < 0.85) {\n        const push = (0.85 - d) * 0.5;\n        A.pos.x -= (dx / d) * push; A.pos.z -= (dz / d) * push;\n        B.pos.x += (dx / d) * push; B.pos.z += (dz / d) * push;\n      }\n    }\n  }\n}\n\nfunction ballTouches() {\n  if (ball.held) return;\n\n  // drop possession if the owner can no longer keep it\n  const o = ball.owner;\n  if (o && (o.stunT > 0 || o.tackleT > 0 || ballDist(o) > 2.1 || ball.pos.y > 1.35)) {\n    ball.owner = null;\n  }\n\n  for (const a of players) {\n    if (a === ball.owner) continue;\n    if (a.touchCd > 0 || a.stunT > 0 || a.kickT > 0.12 || a.tackleT > 0) continue;\n    if (!mayTouch(a)) continue;\n    if (ball.noStickT > 0 && game.lastTouch === a) continue; // your kick is away — let it run\n    const reach = a.diveT > 0 ? 1.55 : 0.95;\n    if (ballDist(a) > reach || ball.pos.y > (a.diveT > 0 ? 2.3 : 1.35)) continue;\n\n    if (a.role === 'gk') {\n      const gz = ownGoalZ(a.team);\n      const inBox = Math.abs(a.pos.z - gz) < PITCH.boxD && Math.abs(a.pos.x) < PITCH.boxW;\n      if (inBox) {\n        if (ball.groundSpeed() < 16) {\n          // safe hands: gather and hold\n          ball.held = a;\n          ball.owner = null;\n          a.holdT = 1.15;\n          a.diveT = 0;\n          game.lastTouch = a;\n          if (game.restrictT > 0 && a.team.id === game.restrictTeam) game.restrictT = 0;\n          a.touchCd = 0.5;\n        } else {\n          // too hot to hold — parry it away (sometimes straight into danger)\n          const away = Math.sign(gz) * -1;\n          const weak = Math.random() < 0.3;\n          ball.owner = null;\n          ball.noStickT = 0.25;\n          ball.vel.set(\n            (Math.sign(ball.pos.x - a.pos.x) || (Math.random() < 0.5 ? -1 : 1)) * (3 + Math.random() * 6),\n            2 + Math.random() * 1.5,\n            away * (weak ? 2.5 : 5 + Math.random() * 5)\n          );\n          game.lastTouch = a;\n          hud.showPopup('WHAT A SAVE!', a.team.id !== 0);\n          audio.cheer();\n          game.exciteBoost = Math.max(game.exciteBoost || 0, 0.7);\n          game.shake = Math.max(game.shake, 0.2);\n          a.touchCd = 0.45;\n        }\n        continue;\n      }\n    }\n\n    // a rocket can't be trapped — it deflects off the body and runs loose\n    if (ball.groundSpeed() > 14) {\n      ball.vel.x = ball.vel.x * 0.35 + (Math.random() - 0.5) * 4;\n      ball.vel.z = ball.vel.z * 0.35 + (Math.random() - 0.5) * 4;\n      if (ball.vel.y > 1.5) ball.vel.y *= 0.4;\n      game.lastTouch = a;\n      if (game.restrictT > 0 && a.team.id === game.restrictTeam) game.restrictT = 0;\n      a.touchCd = 0.35;\n      continue;\n    }\n\n    // win the ball — it now sticks to this player's boots\n    const stolenFrom = ball.owner;\n    ball.owner = a;\n    if (ball.groundSpeed() > 7) {\n      // cushioned first touch kills the pace\n      ball.vel.x *= 0.3;\n      ball.vel.z *= 0.3;\n      if (ball.vel.y > 1.5) ball.vel.y *= 0.35;\n    }\n    game.lastTouch = a;\n    if (game.restrictT > 0 && a.team.id === game.restrictTeam) game.restrictT = 0;\n    a.touchCd = 0.3;\n    if (stolenFrom && stolenFrom.team !== a.team) {\n      stolenFrom.touchCd = 0.6; // no instant win-back — makes tackles feel real\n      if (a === game.controlled || stolenFrom === game.controlled) audio.bounce();\n    }\n  }\n}\n\nfunction checkBallOut() {\n  const { hw, hl, goalHW, goalH } = PITCH;\n  const bx = ball.pos.x, bz = ball.pos.z;\n\n  // goal?\n  if (Math.abs(bz) > hl + 0.3 && Math.abs(bx) < goalHW && ball.pos.y < goalH) {\n    const scoringId = game.attackDir[0] === Math.sign(bz) ? 0 : 1;\n    onGoal(scoringId);\n    return;\n  }\n\n  // throw-in\n  if (Math.abs(bx) > hw + 0.5) {\n    const toTeam = game.lastTouch ? 1 - game.lastTouch.team.id : 0;\n    ball.reset(Math.sign(bx) * (hw - 0.4), clamp(bz, -hl + 2, hl - 2));\n    game.restrictTeam = toTeam;\n    game.restrictT = 2.6;\n    hud.showPopup('THROW IN', false);\n    audio.ref(1);\n    return;\n  }\n\n  // over the goal line, wide of the frame\n  if (Math.abs(bz) > hl + 1.9 || (Math.abs(bz) > hl + 0.5 && (Math.abs(bx) >= goalHW || ball.pos.y >= goalH))) {\n    const defId = game.attackDir[0] === Math.sign(bz) ? 1 : 0; // team defending this end\n    const lastId = game.lastTouch ? game.lastTouch.team.id : defId;\n    if (lastId === defId) {\n      // corner to the attackers\n      const atkId = 1 - defId;\n      ball.reset(Math.sign(bx || 1) * (hw - 0.6), Math.sign(bz) * (hl - 0.6));\n      game.restrictTeam = atkId;\n      game.restrictT = 2.6;\n      hud.showPopup('CORNER!', atkId !== 0);\n      audio.ref(1);\n      game.exciteBoost = Math.max(game.exciteBoost || 0, 0.45);\n    } else {\n      // goal kick\n      ball.reset(0, Math.sign(bz) * (hl - 4.5));\n      game.restrictTeam = defId;\n      game.restrictT = 2.6;\n      hud.showPopup('GOAL KICK', false);\n      audio.ref(1);\n    }\n  }\n}\n\n// ---------------------------------------------------------------- camera\nfunction camDesired() {\n  if (cam.mode === 'orbit') {\n    return {\n      pos: new THREE.Vector3(Math.cos(cam.orbitAngle) * 120, 78, Math.sin(cam.orbitAngle) * 100),\n      look: new THREE.Vector3(0, 2, 0),\n    };\n  }\n  if (cam.mode === 'goalcam' && game.scorer) {\n    const a = game.time * 0.55;\n    const s = game.scorer.pos;\n    return {\n      pos: new THREE.Vector3(s.x + Math.cos(a) * 8.5, 4.2, s.z + Math.sin(a) * 8.5),\n      look: new THREE.Vector3(s.x, 1.4, s.z),\n    };\n  }\n  // follow: Sensible-style raised chase cam, play runs up the screen\n  const bx = clamp(ball.pos.x, -14, 14);\n  const bz = clamp(ball.pos.z, -PITCH.hl + 2, PITCH.hl - 2);\n  return {\n    pos: new THREE.Vector3(bx * 0.75, 50, bz * 0.86 + 30),\n    look: new THREE.Vector3(bx * 0.92, 0.5, bz * 0.94 + 1),\n  };\n}\n\n// ---------------------------------------------------------------- main loop\nlet last = performance.now();\ngame.fovKick = 0;\ngame.exciteBoost = 0;\nlet stepPhase = 0;\n\nsetupTitleScene();\nhud.hud.root.classList.add('hidden');\n\n// live handle for quick inspection from the console\nwindow.__svf = { game, ball, players, TEAMS };\n\nfunction frame(now) {\n  requestAnimationFrame(frame);\n  const dt = Math.min(0.05, (now - last) / 1000);\n  last = now;\n  game.time += dt;\n\n  // timescale (slow-mo after goals)\n  if (game.tsTimer > 0) {\n    game.tsTimer -= dt;\n    if (game.tsTimer <= 0) game.tsTarget = 1;\n  }\n  game.timeScale += (game.tsTarget - game.timeScale) * Math.min(1, dt * 6);\n  const sdt = dt * game.timeScale;\n\n  if (enterQueued) { enterQueued = false; handleEnter(); }\n\n  // is the human actually steering? (with a short grace period so the AI\n  // doesn't snatch the ball between your direction changes)\n  const ivNow = inputVec();\n  if (Math.hypot(ivNow.x, ivNow.z) > 0.08 || chargeT >= 0) game.lastInputT = game.time;\n  game.humanActive = game.lastInputT != null && game.time - game.lastInputT < 0.6;\n\n  // charge meter\n  if (chargeT >= 0) {\n    chargeT += dt;\n    const p = clamp(chargeT / 0.9, 0, 1);\n    if (chargeT > 0.12) hud.setPower(p, true, p > 0.26 ? 'SHOOT POWER' : 'RELEASE TO PASS');\n  }\n\n  // state timers\n  game.restrictT = Math.max(0, game.restrictT - sdt);\n  if (game.state === 'kickoff') {\n    game.stateT -= dt;\n    if (game.stateT <= 0) { game.state = 'play'; }\n  } else if (game.state === 'goal') {\n    game.stateT -= dt;\n    if (game.stateT <= 0) {\n      setupKickoff(game.concededId);\n      cam.mode = 'follow';\n      audio.ref(1);\n      hud.showMsg('KICK OFF', 'go');\n    }\n  } else if (game.state === 'play') {\n    game.clock += dt;\n    if (game.clock >= game.HALF_LEN) endHalf();\n  }\n\n  const inMatch = game.state === 'play' || game.state === 'kickoff';\n\n  // simulation\n  if (inMatch || game.state === 'goal') {\n    if (inMatch) {\n      pickControlled();\n      updateAI(sdt);\n    }\n    integrateAthletes(sdt);\n    ball.update(sdt);\n    if (game.state === 'play') {\n      ballTouches();\n      checkBallOut();\n    }\n  } else {\n    ball.update(sdt);\n  }\n\n  // post / crossbar clang\n  if (ball.hitPost) {\n    ball.hitPost = false;\n    audio.post();\n    hud.showPopup('OFF THE WOODWORK!', false);\n    game.exciteBoost = Math.max(game.exciteBoost || 0, 0.6);\n  }\n\n  // excitement: proximity to either box + event spikes\n  game.exciteBoost = Math.max(0, (game.exciteBoost || 0) - dt * 0.25);\n  const nearGoal = Math.min(\n    dist2D(ball.pos.x, ball.pos.z, 0, -PITCH.hl),\n    dist2D(ball.pos.x, ball.pos.z, 0, PITCH.hl)\n  );\n  const ex = clamp(0.22 + (1 - clamp(nearGoal / 26, 0, 1)) * 0.4 + game.exciteBoost, 0, 1);\n  game.excitement = ex;\n  audio.setAmbience(ex);\n  if (game.state !== 'title') audio.ambient(dt, ex);\n\n  // footsteps for your player\n  const ctl = game.controlled;\n  if (ctl && inMatch && ctl.speed > 3) {\n    stepPhase += sdt * (4 + ctl.speed * 1.9);\n    if (stepPhase > Math.PI) { stepPhase -= Math.PI; audio.step(); }\n  }\n\n  // ---------------- athlete visuals\n  for (const a of players) {\n    let mode = 'idle';\n    const opt = {};\n    if (game.state === 'goal') {\n      const scored = game.scorer && a.team === game.scorer.team;\n      mode = a.role === 'gk' && !scored ? 'dejected' : scored ? 'celebrate' : 'dejected';\n    } else if (a.stunT > 0) {\n      mode = 'dive'; opt.dir = a.stunDir || 1;\n    } else if (a.tackleT > 0) {\n      mode = 'tackle';\n    } else if (a.kickT > 0) {\n      mode = 'kick';\n    } else if (a.diveT > 0) {\n      a.diveT -= sdt;\n      mode = 'dive'; opt.dir = a.diveDir || 1;\n    } else if (a === ctl && chargeT > 0.26 && a.speed < 2) {\n      mode = 'charge';\n    } else if (a.speed > 0.9) {\n      mode = 'run'; opt.speed = a.speed;\n    } else if (a.role === 'gk' && inMatch && ballDist(a) < 20) {\n      mode = 'crouch';\n    }\n    a.update(sdt, mode, opt);\n    a.group.position.set(a.pos.x, 0, a.pos.z);\n    const dx = Math.cos(a.heading), dz = Math.sin(a.heading);\n    a.group.rotation.y = headingFor(dx, dz);\n  }\n\n  // marker over your player\n  if (ctl && inMatch) {\n    marker.visible = true;\n    marker.position.set(ctl.pos.x, 3.3 + Math.sin(game.time * 3) * 0.12, ctl.pos.z);\n  } else marker.visible = false;\n\n  // ---------------- HUD\n  if (game.state !== 'title') hud.setClock(fmtClock());\n\n  // ---------------- camera\n  if (cam.mode === 'orbit') cam.orbitAngle += dt * 0.05;\n  const want = camDesired();\n  const ck = 1 - Math.exp(-dt * (cam.mode === 'goalcam' ? 3 : 4.5));\n  cam.pos.lerp(want.pos, ck);\n  cam.look.lerp(want.look, ck);\n  game.shake = Math.max(0, game.shake - dt * 1.6);\n  const sh = game.shake * game.shake;\n  camera.position.set(\n    cam.pos.x + (Math.random() - 0.5) * sh * 1.6,\n    cam.pos.y + (Math.random() - 0.5) * sh * 1.2,\n    cam.pos.z + (Math.random() - 0.5) * sh * 1.6\n  );\n  camera.lookAt(cam.look);\n  game.fovKick = Math.max(0, (game.fovKick || 0) - dt * 9);\n  camera.fov = 30 + game.fovKick;\n  camera.updateProjectionMatrix();\n\n  // world + particles\n  stadium.tick(game.time, dt, ex);\n  updateParticles(sdt);\n\n  renderer.render(scene, camera);\n}\nrequestAnimationFrame(frame);\n"},{"name":"world.js","content":"// world.js — the voxel football ground. 1 unit = 1 metre.\n// A tight British-style box: four rectangular stands with open corners,\n// floodlight pylons in the gaps, mown-stripe pitch, proper markings.\n// Play runs along Z — goals at z = ±29.\nimport { THREE, BOX, boxMesh, buildTiles } from './lib.js';\n\nexport const PITCH = {\n  hw: 19,      // half width  (x)\n  hl: 29,      // half length (z)\n  goalHW: 3.8, // goal mouth half width\n  goalH: 2.5,  // crossbar height\n  boxW: 11,    // penalty area half width\n  boxD: 9,     // penalty area depth\n  sixW: 6,     // six-yard half width\n  sixD: 3.5,\n  spot: 7.5,   // penalty spot distance\n};\nexport const CENTER = new THREE.Vector3(0, 0, 0);\n\n// heading (group.rotation.y) for a direction — athlete model faces +X at PI/2\nexport function headingFor(dx, dz) { return Math.PI / 2 - Math.atan2(dz, dx); }\n\nexport function buildStadium(scene) {\n  const skyCol = new THREE.Color('#a5ddff');\n  scene.background = skyCol;\n  scene.fog = new THREE.Fog(skyCol, 300, 560);\n\n  const hemi = new THREE.HemisphereLight(0xcfe8ff, 0x5e7a4a, 0.95);\n  scene.add(hemi);\n  const rim = new THREE.DirectionalLight(0x9fc4ff, 0.55);\n  rim.position.set(-70, 55, 85);\n  scene.add(rim);\n  const sun = new THREE.DirectionalLight(0xfff2dd, 1.7);\n  sun.position.set(90, 140, -60);\n  sun.target.position.set(0, 0, 0);\n  sun.castShadow = true;\n  sun.shadow.mapSize.set(2048, 2048);\n  sun.shadow.camera.left = -95;\n  sun.shadow.camera.right = 95;\n  sun.shadow.camera.top = 95;\n  sun.shadow.camera.bottom = -95;\n  sun.shadow.camera.near = 20;\n  sun.shadow.camera.far = 420;\n  sun.shadow.normalBias = 0.4;\n  scene.add(sun, sun.target);\n\n  const ground = boxMesh(380, 1, 380, '#4a8438');\n  ground.position.y = -0.75;\n  ground.castShadow = false;\n  scene.add(ground);\n\n  const { hw, hl, goalHW, goalH, boxW, boxD, sixW, sixD, spot } = PITCH;\n\n  // -------- the pitch: mown stripes across the length, subtle flecks\n  const grass = [];\n  for (let x = -hw - 3; x <= hw + 3; x += 2) {\n    for (let z = -hl - 4; z <= hl + 4; z += 2) {\n      const stripe = Math.floor((z + hl) / 5.8) % 2 === 0;\n      let col = stripe ? '#5fae3f' : '#54a137';\n      if (Math.random() < 0.035) col = '#4b9231';\n      grass.push({ x, y: -0.5, z, sx: 2, sy: 1, sz: 2, color: col });\n    }\n  }\n  scene.add(buildTiles(grass));\n\n  // -------- markings, all little white voxels sitting on the turf\n  const M = [];\n  const W = '#f3efe2';\n  const line = (x1, z1, x2, z2) => {\n    const dx = x2 - x1, dz = z2 - z1;\n    const len = Math.hypot(dx, dz);\n    M.push({\n      x: (x1 + x2) / 2, y: 0.06, z: (z1 + z2) / 2,\n      sx: Math.abs(dx) > Math.abs(dz) ? len : 0.14,\n      sy: 0.05,\n      sz: Math.abs(dz) >= Math.abs(dx) ? len : 0.14,\n      color: W,\n    });\n  };\n  // touchlines + goal lines\n  line(-hw, -hl, hw, -hl); line(-hw, hl, hw, hl);\n  line(-hw, -hl, -hw, hl); line(hw, -hl, hw, hl);\n  // halfway + centre circle + spot\n  line(-hw, 0, hw, 0);\n  for (let a = 0; a < Math.PI * 2; a += 0.09) {\n    M.push({ x: Math.cos(a) * 6, y: 0.06, z: Math.sin(a) * 6, sx: 0.32, sy: 0.05, sz: 0.32, color: W });\n  }\n  M.push({ x: 0, y: 0.07, z: 0, sx: 0.55, sy: 0.05, sz: 0.55, color: W });\n  for (const e of [-1, 1]) {\n    const gl = hl * e;\n    // penalty area\n    line(-boxW, gl, -boxW, gl - boxD * e);\n    line(boxW, gl, boxW, gl - boxD * e);\n    line(-boxW, gl - boxD * e, boxW, gl - boxD * e);\n    // six-yard box\n    line(-sixW, gl, -sixW, gl - sixD * e);\n    line(sixW, gl, sixW, gl - sixD * e);\n    line(-sixW, gl - sixD * e, sixW, gl - sixD * e);\n    // spot + arc outside the area\n    M.push({ x: 0, y: 0.07, z: gl - spot * e, sx: 0.5, sy: 0.05, sz: 0.5, color: W });\n    for (let a = 0; a < Math.PI * 2; a += 0.07) {\n      const px = Math.cos(a) * 6, pz = (gl - spot * e) + Math.sin(a) * 6;\n      if (e > 0 ? pz < gl - boxD : pz > gl + boxD) continue; // hmm — keep only outside box\n      if (Math.abs(pz - gl) > boxD || Math.abs(px) > boxW) {\n        if (e > 0 ? pz <= gl - boxD : pz >= gl + boxD) {\n          M.push({ x: px, y: 0.06, z: pz, sx: 0.3, sy: 0.05, sz: 0.3, color: W });\n        }\n      }\n    }\n    // corner arcs\n    for (const s of [-1, 1]) {\n      for (let a = 0; a < Math.PI / 2; a += 0.22) {\n        M.push({\n          x: s * hw - s * Math.cos(a) * 1.2, y: 0.06,\n          z: gl - e * Math.sin(a) * 1.2,\n          sx: 0.22, sy: 0.05, sz: 0.22, color: W,\n        });\n      }\n      // corner flag\n      const g = new THREE.Group();\n      const pole = boxMesh(0.09, 1.7, 0.09, '#f5f1e6');\n      pole.position.y = 0.85;\n      const flag = boxMesh(0.55, 0.4, 0.06, '#ff4b3a');\n      flag.position.set(0.3, 1.45, 0);\n      g.add(pole, flag);\n      g.position.set(s * hw, 0, gl);\n      scene.add(g);\n    }\n  }\n  scene.add(buildTiles(M));\n\n  // -------- goals: white frame + translucent voxel netting\n  const netTiles = [];\n  for (const e of [-1, 1]) {\n    const gl = hl * e;\n    const frame = [];\n    const postC = '#f8f8f8';\n    for (const s of [-1, 1]) {\n      frame.push({ x: s * goalHW, y: goalH / 2, z: gl, sx: 0.22, sy: goalH, sz: 0.22, color: postC });\n      // side net frame slanting back\n      frame.push({ x: s * goalHW, y: 0.55, z: gl + e * 0.9, sx: 0.14, sy: 1.1, sz: 0.14, color: postC });\n    }\n    frame.push({ x: 0, y: goalH, z: gl, sx: goalHW * 2 + 0.22, sy: 0.22, sz: 0.22, color: postC });\n    scene.add(buildTiles(frame, { shadowCast: true }));\n\n    // net: back panel + roof + sides, thin translucent bars\n    const bz = gl + e * 1.7;\n    for (let x = -goalHW; x <= goalHW + 0.01; x += 0.55) {\n      netTiles.push({ x, y: 0.85, z: bz, sx: 0.05, sy: 1.7, sz: 0.05, color: '#ffffff' });\n    }\n    for (let y = 0.15; y <= 1.7; y += 0.42) {\n      netTiles.push({ x: 0, y, z: bz, sx: goalHW * 2, sy: 0.05, sz: 0.05, color: '#ffffff' });\n    }\n    // sloping roof net from crossbar to back frame\n    for (let x = -goalHW; x <= goalHW + 0.01; x += 0.55) {\n      netTiles.push({ x, y: (goalH + 1.7) / 2, z: gl + e * 0.85, sx: 0.05, sy: 0.06, sz: 1.95, ry: 0, color: '#ffffff' });\n    }\n    // side panels\n    for (const s of [-1, 1]) {\n      for (let y = 0.2; y <= goalH - 0.2; y += 0.5) {\n        netTiles.push({ x: s * goalHW, y, z: gl + e * 0.85, sx: 0.05, sy: 0.05, sz: 1.7, color: '#ffffff' });\n      }\n    }\n  }\n  scene.add(buildTiles(netTiles, { matOpts: { transparent: true, opacity: 0.42, roughness: 1 } }));\n\n  // -------- ad boards ringing the pitch\n  const ads = [];\n  const adCols = ['#1f9e8e', '#f5f1e6', '#ff4b3a', '#2b6cb0', '#f5f1e6', '#ffb020'];\n  let adI = 0;\n  for (let z = -hl - 1; z <= hl + 1; z += 5.2) {\n    for (const s of [-1, 1]) {\n      ads.push({ x: s * (hw + 3.2), y: 0.55, z, sx: 0.35, sy: 1.1, sz: 4.6, color: adCols[adI++ % adCols.length] });\n    }\n  }\n  for (let x = -hw - 1; x <= hw + 1; x += 5.2) {\n    for (const s of [-1, 1]) {\n      if (s > 0 && Math.abs(x) < 6) continue; // gap behind the south goal for the tunnel\n      ads.push({ x, y: 0.55, z: s * (hl + 3.6), sx: 4.6, sy: 1.1, sz: 0.35, color: adCols[adI++ % adCols.length] });\n    }\n  }\n  scene.add(buildTiles(ads, { shadowCast: true }));\n\n  // -------- four rectangular stands with open corners + crowd\n  const tiers = [];\n  const crowdList = [];\n  const crowdCols = ['#ff5a5f', '#ffb020', '#4aa3ff', '#7ce34a', '#f5f1e6', '#c084fc', '#ff8a3c', '#39d4c8', '#e6e6e6', '#274690'];\n  const TIERS = 10, STEP_UP = 1.15, STEP_OUT = 1.9;\n  const SIDE_OFF = hw + 8;   // east/west stands\n  const END_OFF = hl + 7.5;  // north/south stands\n  const rimY = 0.9 + (TIERS - 1) * STEP_UP;\n\n  // seat + crowd row helper: position p along the wall, wall normal (nx,nz)\n  function standRow(t, px, pz, ry, dirX, dirZ, secCols, sec) {\n    const y = 0.9 + t * STEP_UP;\n    tiers.push({ x: px, y, z: pz, sx: 3.0, sy: 1.15, sz: 1.9, ry, color: t % 2 === 0 ? '#b9bfc9' : '#aab0bb' });\n    for (const s of [-1.05, 0, 1.05]) {\n      if (Math.random() < 0.92) {\n        crowdList.push({\n          x: px + dirX * s + (Math.random() - 0.5) * 0.25,\n          y: y + 0.95,\n          z: pz + dirZ * s + (Math.random() - 0.5) * 0.25,\n          color: Math.random() < 0.68\n            ? secCols[sec % secCols.length]\n            : crowdCols[Math.floor(Math.random() * crowdCols.length)],\n        });\n      }\n    }\n  }\n  const secCols = ['#ff4b3a', '#f5f1e6', '#274690', '#ffb020', '#1f9e8e', '#e6e6e6'];\n  for (let t = 0; t < TIERS; t++) {\n    // east & west (long sides): rows run along z\n    const offX = SIDE_OFF + t * STEP_OUT;\n    for (let z = -(hl + 1.5); z <= hl + 1.5; z += 3.2) {\n      standRow(t, offX, z, Math.PI / 2, 0, -1, secCols, Math.floor((z + hl) / 12));\n      standRow(t, -offX, z, Math.PI / 2, 0, -1, secCols, Math.floor((z + hl) / 12) + 3);\n    }\n    // north & south (behind the goals): rows run along x\n    const offZ = END_OFF + t * STEP_OUT;\n    for (let x = -(hw + 1); x <= hw + 1; x += 3.2) {\n      standRow(t, x, -offZ, 0, 1, 0, secCols, Math.floor((x + hw) / 10) + 1);\n      standRow(t, x, offZ, 0, 1, 0, secCols, Math.floor((x + hw) / 10) + 4);\n    }\n  }\n  // back walls\n  for (let z = -(hl + 1.5); z <= hl + 1.5; z += 3.2) {\n    for (const s of [-1, 1]) {\n      tiers.push({ x: s * (SIDE_OFF + (TIERS - 1) * STEP_OUT + 1.6), y: rimY + 1.3, z, sx: 0.6, sy: 1.6, sz: 3.2, color: '#9aa1ad' });\n    }\n  }\n  for (let x = -(hw + 1); x <= hw + 1; x += 3.2) {\n    for (const s of [-1, 1]) {\n      tiers.push({ x, y: rimY + 1.3, z: s * (END_OFF + (TIERS - 1) * STEP_OUT + 1.6), sx: 3.2, sy: 1.6, sz: 0.6, color: '#9aa1ad' });\n    }\n  }\n  scene.add(buildTiles(tiers, { shadowCast: true }));\n\n  // floating roof canopies, high so the follow camera sees under the lip\n  const roofTiles = [];\n  const roofY = rimY + 8.2;\n  const roofDepth = TIERS * STEP_OUT + 1;\n  for (let z = -(hl + 1.5); z <= hl + 1.5; z += 3.3) {\n    for (const s of [-1, 1]) {\n      roofTiles.push({ x: s * (SIDE_OFF + (TIERS - 1) * STEP_OUT / 2 + 2.5), y: roofY, z, sx: roofDepth, sy: 0.35, sz: 3.3, color: '#e8ebf0' });\n    }\n  }\n  for (let x = -(hw + 1); x <= hw + 1; x += 3.3) {\n    for (const s of [-1, 1]) {\n      roofTiles.push({ x, y: roofY, z: s * (END_OFF + (TIERS - 1) * STEP_OUT / 2 + 2.5), sx: 3.3, sy: 0.35, sz: roofDepth, color: '#e8ebf0' });\n    }\n  }\n  // roof support columns\n  for (const s of [-1, 1]) {\n    for (const z of [-hl, 0, hl]) {\n      roofTiles.push({ x: s * (SIDE_OFF + (TIERS - 1) * STEP_OUT + 2.4), y: roofY / 2, z, sx: 0.8, sy: roofY, sz: 0.8, color: '#9aa1ad' });\n    }\n    for (const x of [-hw, 0, hw]) {\n      roofTiles.push({ x, y: roofY / 2, z: s * (END_OFF + (TIERS - 1) * STEP_OUT + 2.4), sx: 0.8, sy: roofY, sz: 0.8, color: '#9aa1ad' });\n    }\n  }\n  scene.add(buildTiles(roofTiles, { shadowCast: true }));\n\n  // -------- little spectator sprites (4 instanced layers, animated in tick)\n  const skinCols = ['#c98e5a', '#8a5a33', '#e8b48c', '#f0c8a0', '#6b4226'];\n  const hairCols = ['#20140e', '#3b2b1a', '#5b3a1e', '#101010', '#c9c9c9', '#8a5a33'];\n  const N = crowdList.length;\n  function crowdLayer() {\n    const m = new THREE.InstancedMesh(BOX, new THREE.MeshStandardMaterial({ roughness: 0.9 }), N);\n    m.castShadow = false;\n    m.receiveShadow = false;\n    m.frustumCulled = false; // matrices move every tick — never let it cull\n    scene.add(m);\n    return m;\n  }\n  const crowdBody = crowdLayer();\n  const crowdHead = crowdLayer();\n  const crowdHair = crowdLayer();\n  const crowdArms = crowdLayer();\n  const crowdBase = new Float32Array(N * 3);\n  const crowdPhase = new Float32Array(N);\n  const crowdRot = new Float32Array(N);\n  {\n    const c = new THREE.Color();\n    crowdList.forEach((p, i) => {\n      crowdBase[i * 3] = p.x; crowdBase[i * 3 + 1] = p.y; crowdBase[i * 3 + 2] = p.z;\n      crowdPhase[i] = Math.random() * Math.PI * 2;\n      crowdRot[i] = (Math.random() - 0.5) * 0.8;\n      crowdBody.setColorAt(i, c.set(p.color));\n      const skin = skinCols[Math.floor(Math.random() * skinCols.length)];\n      crowdHead.setColorAt(i, c.set(skin));\n      crowdHair.setColorAt(i, c.set(hairCols[Math.floor(Math.random() * hairCols.length)]));\n      crowdArms.setColorAt(i, c.set(skin));\n    });\n    for (const m of [crowdBody, crowdHead, crowdHair, crowdArms]) {\n      if (m.instanceColor) m.instanceColor.needsUpdate = true;\n    }\n  }\n\n  // -------- flags on the stand rims\n  const flags = [];\n  const flagCols = ['#ff4b3a', '#ffb020', '#4aa3ff', '#7ce34a', '#f5f1e6', '#c084fc'];\n  let fi = 0;\n  const flagSpots = [];\n  for (let z = -hl; z <= hl; z += 13) {\n    flagSpots.push([SIDE_OFF + (TIERS - 1) * STEP_OUT + 1.6, z]);\n    flagSpots.push([-(SIDE_OFF + (TIERS - 1) * STEP_OUT + 1.6), z]);\n  }\n  for (let x = -hw; x <= hw; x += 13) {\n    flagSpots.push([x, END_OFF + (TIERS - 1) * STEP_OUT + 1.6]);\n    flagSpots.push([x, -(END_OFF + (TIERS - 1) * STEP_OUT + 1.6)]);\n  }\n  for (const [x, z] of flagSpots) {\n    const g = new THREE.Group();\n    const pole = boxMesh(0.16, 3.4, 0.16, '#e8e8e8', { roughness: 0.5 });\n    pole.position.y = 1.7;\n    const flag = boxMesh(1.5, 0.9, 0.12, flagCols[fi % flagCols.length]);\n    flag.position.set(0.8, 2.9, 0);\n    g.add(pole, flag);\n    g.position.set(x, rimY + 2.1, z);\n    g.userData.flag = flag;\n    scene.add(g);\n    flags.push(g);\n    fi++;\n  }\n\n  // -------- floodlight pylons in the four open corners\n  for (const [tx, tz] of [[-(hw + 16), -(hl + 13)], [-(hw + 16), hl + 13], [hw + 16, -(hl + 13)], [hw + 16, hl + 13]]) {\n    const g = new THREE.Group();\n    const pole = boxMesh(1.4, 30, 1.4, '#8b93a0', { roughness: 0.6 });\n    pole.position.y = 15;\n    g.add(pole);\n    const head = new THREE.Group();\n    for (let r = 0; r < 3; r++) for (let c = 0; c < 4; c++) {\n      const lamp = boxMesh(1.4, 1.4, 0.5, '#ffffff', { emissive: new THREE.Color('#fff7d6'), emissiveIntensity: 1.6, roughness: 0.3 });\n      lamp.position.set((c - 1.5) * 1.6, r * 1.6, 0);\n      head.add(lamp);\n    }\n    const back = boxMesh(7, 5.2, 0.5, '#39404c');\n    back.position.set(0, 1.6, -0.5);\n    head.add(back);\n    head.position.y = 30.5;\n    head.rotation.y = Math.atan2(-tx, -tz);\n    head.rotation.x = 0.35;\n    g.add(head);\n    g.position.set(tx, 0, tz);\n    scene.add(g);\n  }\n\n  // -------- trees around the outside\n  for (let i = 0; i < 26; i++) {\n    const a = (i / 26) * Math.PI * 2;\n    const x = Math.cos(a) * (hw + 42) + (Math.random() - 0.5) * 8;\n    const z = Math.sin(a) * (hl + 36) + (Math.random() - 0.5) * 8;\n    const g = new THREE.Group();\n    const trunk = boxMesh(0.55, 2.6, 0.55, '#6e4a2a');\n    trunk.position.y = 1.3;\n    const c1 = boxMesh(3.0, 2.2, 3.0, '#4c8f3a');\n    c1.position.y = 3.4;\n    const c2 = boxMesh(2.0, 1.5, 2.0, '#579f43');\n    c2.position.y = 4.9;\n    g.add(trunk, c1, c2);\n    g.position.set(x, 0, z);\n    scene.add(g);\n  }\n\n  // -------- drifting voxel clouds\n  const clouds = [];\n  for (let i = 0; i < 8; i++) {\n    const g = new THREE.Group();\n    const n = 3 + Math.floor(Math.random() * 3);\n    for (let k = 0; k < n; k++) {\n      const puff = boxMesh(\n        7 + Math.random() * 9, 2.2 + Math.random() * 1.6, 4 + Math.random() * 4,\n        '#ffffff', {\n          roughness: 1,\n          emissive: new THREE.Color('#dfe9f5'), emissiveIntensity: 0.35,\n          transparent: true, opacity: 0.45, depthWrite: false,\n        }\n      );\n      puff.castShadow = false;\n      puff.receiveShadow = false;\n      puff.position.set((Math.random() - 0.5) * 14, (Math.random() - 0.5) * 2.4, (Math.random() - 0.5) * 8);\n      g.add(puff);\n    }\n    g.position.set(-220 + Math.random() * 440, 96 + Math.random() * 34, -160 + Math.random() * 320);\n    scene.add(g);\n    clouds.push(g);\n  }\n\n  // -------- big screen above the north stand (the end you attack first)\n  const sbCanvas = document.createElement('canvas');\n  sbCanvas.width = 512; sbCanvas.height = 288;\n  const sbCtx = sbCanvas.getContext('2d');\n  const sbTex = new THREE.CanvasTexture(sbCanvas);\n  sbTex.colorSpace = THREE.SRGBColorSpace;\n  function drawScoreboard(line1, line2) {\n    sbCtx.fillStyle = '#0c1220';\n    sbCtx.fillRect(0, 0, 512, 288);\n    sbCtx.strokeStyle = '#1f2c48';\n    sbCtx.lineWidth = 8;\n    sbCtx.strokeRect(8, 8, 496, 272);\n    sbCtx.fillStyle = '#ffb020';\n    sbCtx.font = '900 44px \"Archivo Black\", sans-serif';\n    sbCtx.textAlign = 'center';\n    sbCtx.fillText(line1, 256, 120);\n    sbCtx.fillStyle = '#e8eefc';\n    sbCtx.font = '700 30px \"Space Grotesk\", sans-serif';\n    sbCtx.fillText(line2, 256, 190);\n    sbTex.needsUpdate = true;\n  }\n  drawScoreboard('VOXEL PARK', 'WELCOME');\n  const sbGroup = new THREE.Group();\n  const sbFrame = boxMesh(20, 11, 1.4, '#232a36', { roughness: 0.5 });\n  const sbScreen = new THREE.Mesh(new THREE.PlaneGeometry(18.5, 9.8), new THREE.MeshBasicMaterial({ map: sbTex }));\n  sbScreen.position.z = 0.75;\n  sbGroup.add(sbFrame, sbScreen);\n  const sLegL = boxMesh(0.9, 9, 0.9, '#5a6270'); sLegL.position.set(-7, -9.5, 0);\n  const sLegR = boxMesh(0.9, 9, 0.9, '#5a6270'); sLegR.position.set(7, -9.5, 0);\n  sbGroup.add(sLegL, sLegR);\n  sbGroup.position.set(0, rimY + 11, -(END_OFF + (TIERS - 1) * STEP_OUT + 4));\n  scene.add(sbGroup);\n\n  // ---------------- per-frame tick\n  const dummy = new THREE.Object3D();\n  let tickFrame = 0;\n  function tick(time, dt, excitement) {\n    for (const cl of clouds) {\n      cl.position.x += dt * 1.4;\n      if (cl.position.x > 240) cl.position.x = -240;\n    }\n\n    // crowd animates at half rate — chibi proportions matching the players\n    tickFrame++;\n    if (tickFrame % 2 === 0) {\n      const amp = 0.12 + excitement * 0.45;\n      const freq = 4 + excitement * 4;\n      for (let i = 0; i < N; i++) {\n        const wave = Math.max(0, Math.sin(time * freq + crowdPhase[i]));\n        const bx = crowdBase[i * 3], by = crowdBase[i * 3 + 1] + wave * amp, bz = crowdBase[i * 3 + 2];\n        const ry = crowdRot[i] + Math.sin(time * 0.7 + crowdPhase[i]) * 0.25;\n        dummy.rotation.set(0, ry, 0);\n        dummy.position.set(bx, by, bz);\n        dummy.scale.set(0.64, 0.72, 0.46);\n        dummy.updateMatrix();\n        crowdBody.setMatrixAt(i, dummy.matrix);\n        dummy.position.set(bx, by + 0.58, bz);\n        dummy.scale.set(0.56, 0.56, 0.56);\n        dummy.updateMatrix();\n        crowdHead.setMatrixAt(i, dummy.matrix);\n        dummy.position.set(bx, by + 0.87, bz);\n        dummy.scale.set(0.62, 0.3, 0.62);\n        dummy.updateMatrix();\n        crowdHair.setMatrixAt(i, dummy.matrix);\n        const lift = Math.max(0, wave - 0.35) * (0.9 + excitement * 0.5);\n        dummy.position.set(bx, by + 0.3 + lift, bz);\n        dummy.scale.set(1.0, 0.18, 0.24);\n        dummy.updateMatrix();\n        crowdArms.setMatrixAt(i, dummy.matrix);\n      }\n      crowdBody.instanceMatrix.needsUpdate = true;\n      crowdHead.instanceMatrix.needsUpdate = true;\n      crowdHair.instanceMatrix.needsUpdate = true;\n      crowdArms.instanceMatrix.needsUpdate = true;\n    }\n\n    for (let i = 0; i < flags.length; i++) {\n      const f = flags[i].userData.flag;\n      f.rotation.y = Math.sin(time * 2.2 + i * 1.3) * 0.35;\n      f.scale.y = 1 + Math.sin(time * 5 + i) * 0.06;\n    }\n  }\n\n  return { tick, scoreboard: drawScoreboard, hemi, sun };\n}\n"}],"folders":[]},{"folder":"other","files":[{"name":"main.sketch","content":""}],"folders":[],"collapsed":true}]},"variants":null,"createdAt":"2026-07-15T13:55:49.000Z","updatedAt":"2026-07-15T15:38:55.876Z"}}