{
  "version": 3,
  "sources": ["/cdn/shop/t/7/assets/kochkult-desert-run.js?game_v=1785965775"],
  "sourcesContent": ["(function(){\n\"use strict\";\n\n/* ================= Setup ================= */\nconst canvas = document.getElementById(\"game\");\n// The desert fills every pixel, so an opaque context lets the compositor skip blending.\nconst ctx = canvas.getContext(\"2d\", { alpha:false });\nconst stage = document.getElementById(\"stage\");\n\nlet W = 0, H = 0, DPR = 1;\nlet worldReady = false;\n// Resizing the canvas clears it, so this resets whenever the size changes.\nlet hasDrawn = false;\nfunction resize(){\n  DPR = Math.min(window.devicePixelRatio || 1, 2);\n  const nw = stage.clientWidth, nh = stage.clientHeight;\n  if(nw === W && nh === H) return;\n  const oldW = W;\n  W = nw; H = nh;\n  canvas.width = Math.max(1, Math.round(W * DPR));\n  canvas.height = Math.max(1, Math.round(H * DPR));\n  ctx.setTransform(DPR, 0, 0, DPR, 0, 0);\n  hasDrawn = false;\n  if(W > 0 && H > 0){\n    buildSandGradient();\n    // Rebuild the scenery when the stage first gets real size or changes width a lot,\n    // otherwise decorations stay bunched at the old edge.\n    if(!worldReady || Math.abs(W - oldW) > 40){\n      initWorld();\n      worldReady = true;\n    }\n    if(oldW > 0){\n      player.x *= W / oldW;\n      player.targetX *= W / oldW;\n    }else{\n      player.x = player.targetX = W/2;\n    }\n    // Paint one frame right here. requestAnimationFrame never fires while the\n    // page is hidden, so without this a canvas that was just cleared by the\n    // resize would stay black until the tab is first looked at.\n    draw();\n    hasDrawn = true;\n  }\n}\nwindow.addEventListener(\"resize\", resize);\nwindow.addEventListener(\"orientationchange\", () => setTimeout(resize, 120));\nif(typeof ResizeObserver !== \"undefined\"){\n  new ResizeObserver(resize).observe(stage);\n}\n\n/* ================= State ================= */\nconst STATE = { MENU: 0, PLAY: 1, DEAD: 2 };\nlet state = STATE.MENU;\n\nconst HS_KEY = \"kochkult_desert_run_best\";\nlet best = parseInt(localStorage.getItem(HS_KEY) || \"0\", 10) || 0;\nconst COIN_KEY = \"kochkult_desert_run_coins\";\nconst SKINS_KEY = \"kochkult_desert_run_skins\";\nconst EQUIPPED_SKIN_KEY = \"kochkult_desert_run_equipped_skin\";\nconst SKINS = [\n  { id:\"sand\", name:\"SAND\", price:0, colors:[\"#c89454\",\"#a87839\",\"#dbab6b\"] },\n  { id:\"midnight\", name:\"NACHT\", price:12, colors:[\"#48536d\",\"#30394f\",\"#71809c\"] },\n  { id:\"rose\", name:\"ROS\u00C9\", price:28, colors:[\"#b75f69\",\"#87404b\",\"#df8e97\"] },\n  { id:\"jade\", name:\"JADE\", price:55, colors:[\"#4f957d\",\"#34705d\",\"#82c4a7\"] },\n  { id:\"royal\", name:\"ROYAL\", price:90, colors:[\"#7563b0\",\"#4e3c85\",\"#a495dd\"] },\n  { id:\"gold\", name:\"GOLD\", price:150, colors:[\"#d1a144\",\"#9f701c\",\"#f1cd70\"] }\n];\nconst ANIMALS = [\n  { id:\"camel\", name:\"KAMEL\", price:0, trait:\"AUSGEWOGEN\", speed:1, accel:1, hitbox:1 },\n  { id:\"alpaca\", name:\"ALPAKA\", price:70, trait:\"+12% TEMPO \u00B7 -18% HITBOX\", speed:1.12, accel:1.10, hitbox:0.82 }\n];\nlet coins = parseInt(localStorage.getItem(COIN_KEY) || \"0\", 10) || 0;\nlet ownedSkins = JSON.parse(localStorage.getItem(SKINS_KEY) || '[\"sand\"]');\nif(!Array.isArray(ownedSkins) || !ownedSkins.includes(\"sand\")) ownedSkins = [\"sand\"];\nlet equippedSkin = ownedSkins.includes(localStorage.getItem(EQUIPPED_SKIN_KEY)) ? localStorage.getItem(EQUIPPED_SKIN_KEY) : \"sand\";\nconst ANIMALS_KEY = \"kochkult_desert_run_animals\";\nconst EQUIPPED_ANIMAL_KEY = \"kochkult_desert_run_equipped_animal\";\nlet ownedAnimals = JSON.parse(localStorage.getItem(ANIMALS_KEY) || '[\"camel\"]');\nif(!Array.isArray(ownedAnimals) || !ownedAnimals.includes(\"camel\")) ownedAnimals = [\"camel\"];\nlet equippedAnimal = ownedAnimals.includes(localStorage.getItem(EQUIPPED_ANIMAL_KEY)) ? localStorage.getItem(EQUIPPED_ANIMAL_KEY) : \"camel\";\nconst ARCHIVE_KEY = \"kochkult_desert_run_archive\";\nconst ARCHIVE_ITEMS = [\n  [\"cactus-saguaro\",\"\uD83C\uDF35\",\"SAGUARO\"],[\"cactus-tall\",\"\uD83C\uDF35\",\"HOHER KAKTUS\"],[\"cactus-barrel\",\"\uD83C\uDF35\",\"FASSKAKTUS\"],[\"cactus-bloom\",\"\uD83C\uDF38\",\"BL\u00DCTENKAKTUS\"],\n  [\"rockBig\",\"\uD83D\uDDFF\",\"GROSSER FELS\"],[\"rockSm\",\"\uD83D\uDDFF\",\"KLEINER FELS\"],[\"bush\",\"\uD83C\uDF3E\",\"W\u00DCSTENBUSCH\"],[\"sign\",\"\uD83D\uDEA9\",\"WEGSCHILD\"],[\"hole\",\"\uD83D\uDD73\uFE0F\",\"SANDLOCH\"],[\"caravan\",\"\uD83D\uDC2A\",\"KARAWANE\"],\n  [\"teapot\",\"\u2615\",\"TEEKANNE\"],[\"glass\",\"\uD83C\uDF75\",\"TEEGLAS\"],[\"gift\",\"\uD83C\uDF81\",\"GESCHENK\"],[\"coin\",\"\uD83D\uDCB0\",\"M\u00DCNZE\"],[\"scorpion\",\"\uD83E\uDD82\",\"SKORPION\"]\n];\nlet discovered = JSON.parse(localStorage.getItem(ARCHIVE_KEY) || \"[]\");\nif(!Array.isArray(discovered)) discovered = [];\nconst RUNS_KEY = \"kochkult_desert_run_runs\";\nlet runs = JSON.parse(localStorage.getItem(RUNS_KEY) || \"[]\");\nif(!Array.isArray(runs)) runs = [];\nconst SETTINGS_KEY = \"kochkult_desert_run_settings\";\nconst settings = Object.assign(\n  { shake:true, particles:true, banner:true },\n  JSON.parse(localStorage.getItem(SETTINGS_KEY) || \"{}\")\n);\nlet roundCoins = 0;\n\nlet score = 0;\nlet distAcc = 0;\nlet elapsed = 0;\nlet baseSpeed = 270;        // px/s: demanding opening pace\nlet speedMul = 1;\nlet shake = 0;\nlet deathAnim = 0;\nlet stingTimer = 0;\n\nconst player = {\n  x: 0, y: 0, w: 60, h: 78,\n  targetX: 0,\n  vx: 0,\n  bob: 0,\n  legPhase: 0\n};\n\nlet obstacles = [];\nlet collectibles = [];\nlet particles = [];\nlet popups = [];\nlet decos = [];         // background sand details\nlet tracks = [];        // camel footprints\n\nlet spawnTimer = 0;\nlet collectTimer = 3;\nlet scorpionTimer = 18;\nlet caravanTimer = 38;\nlet decoTimer = 0;\n\n/* ================= Helpers ================= */\n/* Every gradient below is defined in fixed local coordinates, so it can be built\n   once and reused. Creating them per entity per frame was the main allocation churn. */\nconst GRADS = new Map();\nfunction grad(key, make){\n  let g = GRADS.get(key);\n  if(g === undefined){ g = make(); GRADS.set(key, g); }\n  return g;\n}\nconst rand = (a,b) => a + Math.random()*(b-a);\nconst clamp = (v,a,b) => v<a?a:(v>b?b:v);\nfunction fmt(n){ return String(n).padStart(6,\"0\") + \" m\"; }\n\n/* ================= DOM refs ================= */\nconst hud = document.getElementById(\"hud\");\nconst brandInGame = document.getElementById(\"brandInGame\");\nconst hudScore = document.getElementById(\"hudScore\");\nconst hudBest = document.getElementById(\"hudBest\");\nconst speedTag = document.getElementById(\"speedTag\");\nconst startScreen = document.getElementById(\"startScreen\");\nconst overScreen = document.getElementById(\"overScreen\");\nconst overScore = document.getElementById(\"overScore\");\nconst overBest = document.getElementById(\"overBest\");\nconst newBest = document.getElementById(\"newBest\");\nconst coinTag = document.getElementById(\"coinTag\");\nconst coinSummary = document.getElementById(\"coinSummary\");\nconst shopScreen = document.getElementById(\"shopScreen\");\nconst shopWallet = document.getElementById(\"shopWallet\");\nconst skinGrid = document.getElementById(\"skinGrid\");\nconst menuWallet = document.getElementById(\"menuWallet\");\nconst menuSkinGrid = document.getElementById(\"menuSkinGrid\");\nconst milestoneBanner = document.getElementById(\"milestoneBanner\");\nconst controlsToast = document.getElementById(\"controlsToast\");\nconst archiveScreen = document.getElementById(\"archiveScreen\");\nconst archiveGrid = document.getElementById(\"archiveGrid\");\nconst archiveCount = document.getElementById(\"archiveCount\");\nconst scoresScreen = document.getElementById(\"scoresScreen\");\nconst scoresList = document.getElementById(\"scoresList\");\nconst accountBox = document.getElementById(\"accountBox\");\nconst globalList = document.getElementById(\"globalList\");\nconst rewardsScreen = document.getElementById(\"rewardsScreen\");\nconst rewardsList = document.getElementById(\"rewardsList\");\nconst rewardsWallet = document.getElementById(\"rewardsWallet\");\nconst settingsScreen = document.getElementById(\"settingsScreen\");\nconst aboutScreen = document.getElementById(\"aboutScreen\");\nconst bottomNav = document.getElementById(\"bottomNav\");\nlet nextMilestone = 100;\nlet bannerTimeout = null;\nhudBest.textContent = fmt(best);\n\n/* ================= Shop-Konto =================\n   The page hands us the logged-in customer via window.KOCHKULT_CUSTOMER (Liquid\n   fills it from the `customer` object). Without a login the game stays fully\n   playable, but the run only counts locally \u2014 the global board needs an account. */\nconst account = Object.assign(\n  { loggedIn:false, id:null, name:\"\" },\n  (typeof window !== \"undefined\" && window.KOCHKULT_CUSTOMER) || {}\n);\nconst API_BASE = (typeof window !== \"undefined\" && window.KOCHKULT_API) || \"\";\nconst LOGIN_URL = (typeof window !== \"undefined\" && window.KOCHKULT_LOGIN_URL) || \"/account/login\";\n// off = no account or no endpoint, syncing = request in flight, ok / error otherwise.\nlet syncState = account.loggedIn ? (API_BASE ? \"syncing\" : \"off\") : \"off\";\nlet leaderboard = null;\n\n/* Where \"BACK TO SHOP\" / \"ZUM SHOP\" points. On Shopify \"/\" is the storefront home;\n   change it here to link a specific collection instead. */\nconst SHOP_URL = \"/\";\nfor(const link of [document.getElementById(\"backToShop\"), document.getElementById(\"aboutShopLink\")]){\n  link.setAttribute(\"href\", SHOP_URL);\n}\n\n/* ================= Screen routing ================= */\nconst SCREENS = {\n  start: startScreen,\n  over: overScreen,\n  shop: shopScreen,\n  sammlung: archiveScreen,\n  scores: scoresScreen,\n  rewards: rewardsScreen,\n  settings: settingsScreen,\n  about: aboutScreen\n};\n// Screens reachable from the bottom bar highlight their tab; the rest just clear it.\nconst NAV_SCREENS = [\"scores\",\"rewards\",\"settings\",\"about\"];\nlet currentScreen = \"start\";\n\nfunction showScreen(name){\n  currentScreen = name;\n  // Leaving the result card returns the world to its idle menu state.\n  if(name !== \"over\" && state === STATE.DEAD){\n    state = STATE.MENU;\n    renderShop();\n  }\n  for(const key in SCREENS) SCREENS[key].classList.toggle(\"kk-hidden\", key !== name);\n  SCREENS[name].scrollTop = 0;\n  // The bar is menu chrome: it stays out of the way of the run and the result card.\n  bottomNav.classList.toggle(\"kk-hidden\", name === \"over\");\n  for(const btn of bottomNav.querySelectorAll(\".nav-btn\")){\n    btn.classList.toggle(\"kk-active\", btn.dataset.goto === name);\n  }\n  if(name === \"sammlung\") renderArchive();\n  if(name === \"scores\") renderScores();\n  if(name === \"rewards\") renderRewards();\n}\nfunction hideAllScreens(){\n  for(const key in SCREENS) SCREENS[key].classList.add(\"kk-hidden\");\n  bottomNav.classList.add(\"kk-hidden\");\n  currentScreen = \"\";\n}\ndocument.addEventListener(\"click\", e => {\n  const target = e.target.closest(\"[data-goto]\");\n  if(!target || target.tagName === \"A\") return;\n  showScreen(target.dataset.goto);\n});\n\nfunction saveShop(){\n  pushProgress();\n  localStorage.setItem(COIN_KEY, String(coins));\n  localStorage.setItem(SKINS_KEY, JSON.stringify(ownedSkins));\n  localStorage.setItem(EQUIPPED_SKIN_KEY, equippedSkin);\n  localStorage.setItem(ANIMALS_KEY, JSON.stringify(ownedAnimals));\n  localStorage.setItem(EQUIPPED_ANIMAL_KEY, equippedAnimal);\n}\nfunction discover(id){\n  if(discovered.includes(id)) return;\n  discovered.push(id);\n  localStorage.setItem(ARCHIVE_KEY, JSON.stringify(discovered));\n}\nfunction renderArchive(){\n  archiveCount.textContent = discovered.length + \" von \" + ARCHIVE_ITEMS.length + \" entdeckt\";\n  archiveGrid.innerHTML = ARCHIVE_ITEMS.map(([id, icon, name]) => {\n    const seen = discovered.includes(id);\n    return `<div class=\"archive-card ${seen ? \"\" : \"unknown\"}\"><div class=\"archive-icon\">${seen ? icon : \"?\"}</div><div class=\"archive-name\">${seen ? name : \"UNENTDECKT\"}</div>${seen ? \"<small>ENTDECKT</small>\" : \"\"}</div>`;\n  }).join(\"\");\n}\nfunction updateCoins(){\n  coinTag.textContent = \"M\u00DCNZEN \" + coins;\n  shopWallet.textContent = coins;\n  menuWallet.textContent = coins;\n  rewardsWallet.textContent = coins;\n}\nfunction camelPreview(colors){\n  return `<svg viewBox=\"0 0 60 50\" aria-hidden=\"true\"><ellipse cx=\"31\" cy=\"37\" rx=\"22\" ry=\"6\" fill=\"rgba(74,52,35,.18)\"/><path d=\"M17 34c0-12 7-20 17-20 9 0 15 8 15 18v7H17z\" fill=\"${colors[0]}\"/><path d=\"M27 18c0-9 2-14 6-16 4 3 5 8 5 16\" fill=\"${colors[0]}\"/><ellipse cx=\"35\" cy=\"5\" rx=\"6\" ry=\"7\" fill=\"${colors[2]}\"/><path d=\"M18 29c8 4 19 4 29 0\" stroke=\"${colors[1]}\" stroke-width=\"4\" fill=\"none\"/><circle cx=\"33\" cy=\"4\" r=\"1.3\" fill=\"#392719\"/></svg>`;\n}\nfunction alpacaPreview(){\n  return `<svg viewBox=\"0 0 60 50\" aria-hidden=\"true\"><ellipse cx=\"31\" cy=\"38\" rx=\"22\" ry=\"6\" fill=\"rgba(74,52,35,.18)\"/><ellipse cx=\"28\" cy=\"30\" rx=\"17\" ry=\"13\" fill=\"#eee0c7\"/><path d=\"M27 25c0-12 2-19 7-21 5 4 6 11 5 21\" fill=\"#eee0c7\"/><ellipse cx=\"36\" cy=\"7\" rx=\"6\" ry=\"8\" fill=\"#fff5e5\"/><path d=\"M32 3l-3-7M39 3l3-7\" stroke=\"#a88c72\" stroke-width=\"3\" stroke-linecap=\"round\"/><circle cx=\"34\" cy=\"6\" r=\"1.3\" fill=\"#392719\"/></svg>`;\n}\nfunction saddlePreview(colors){\n  return `<svg viewBox=\"0 0 60 50\" aria-hidden=\"true\">`\n    + `<ellipse cx=\"30\" cy=\"45\" rx=\"21\" ry=\"4\" fill=\"rgba(74,52,35,.16)\"/>`\n    + `<path d=\"M9 9h42l-6 27H15z\" fill=\"${colors[0]}\"/>`\n    + `<path d=\"M9 9h42l-1.4 6H10.4z\" fill=\"${colors[2]}\"/>`\n    + `<path d=\"M30 17l6 7-6 7-6-7z\" fill=\"${colors[2]}\"/>`\n    + `<path d=\"M18 21l3 3.5-3 3.5-3-3.5zM42 21l3 3.5-3 3.5-3-3.5z\" fill=\"${colors[1]}\"/>`\n    + `<path d=\"M15 36h30l-1.4 4H16.4z\" fill=\"${colors[1]}\"/>`\n    + `<g fill=\"#c9962e\"><circle cx=\"18\" cy=\"43\" r=\"2\"/><circle cx=\"24\" cy=\"43\" r=\"2\"/><circle cx=\"30\" cy=\"43\" r=\"2\"/><circle cx=\"36\" cy=\"43\" r=\"2\"/><circle cx=\"42\" cy=\"43\" r=\"2\"/></g>`\n    + `</svg>`;\n}\nfunction lockTile(req, extra){\n  return `<div class=\"tile locked${extra || \"\"}\"><svg class=\"lock\" aria-hidden=\"true\"><use href=\"#ic-lock\"/></svg><div class=\"tile-req\">${req}</div></div>`;\n}\nfunction shopTile(kind, id, name, art, owned, equipped, price){\n  if(!owned){\n    // Locked tiles keep the reward hidden and show only what it costs \u2014 as in the design.\n    const affordable = coins >= price ? \" affordable\" : \"\";\n    return `<button class=\"tile locked${affordable}\" data-${kind}=\"${id}\" title=\"${name}\">`\n      + `<svg class=\"lock\" aria-hidden=\"true\"><use href=\"#ic-lock\"/></svg>`\n      + `<div class=\"tile-req\">${price} M\u00DCNZEN</div></button>`;\n  }\n  return `<button class=\"tile${equipped ? \" selected\" : \"\"}\" data-${kind}=\"${id}\">`\n    + (equipped ? `<span class=\"kk-badge\"><svg class=\"ico\" aria-hidden=\"true\"><use href=\"#ic-check\"/></svg></span>` : \"\")\n    + `<div class=\"tile-art\">${art}</div>`\n    + `<div class=\"tile-name\">${name}</div>`\n    + `<div class=\"tile-price\">${equipped ? \"AUSGEW\u00C4HLT\" : \"AUSW\u00C4HLEN\"}</div></button>`;\n}\nfunction renderShop(){\n  updateCoins();\n  const activeSkin = SKINS.find(s => s.id === equippedSkin) || SKINS[0];\n  const alpaca = ANIMALS[1];\n  const animalTiles =\n    shopTile(\"animal\", \"camel\", \"KAMEL\", camelPreview(activeSkin.colors), true, equippedAnimal === \"camel\", 0)\n    + shopTile(\"animal\", alpaca.id, \"ALPAKA\", alpacaPreview(), ownedAnimals.includes(alpaca.id), equippedAnimal === alpaca.id, alpaca.price)\n    + lockTile(\"BALD MEHR\");\n  const skinTiles = SKINS.map(s => shopTile(\n    \"skin\", s.id, s.name, saddlePreview(s.colors),\n    ownedSkins.includes(s.id), s.id === equippedSkin, s.price\n  )).join(\"\");\n  const shopMarkup = `\n    <section class=\"shop-sec\">\n      <div class=\"sec-head\">\n        <span class=\"sec-title\"><span class=\"dia\">\u2726</span>DEIN TIER</span>\n        <span class=\"sec-note\">W\u00C4HLE DEINEN REISEBEGLEITER</span>\n      </div>\n      <div class=\"tile-grid\">${animalTiles}</div>\n    </section>\n    <section class=\"shop-sec\">\n      <div class=\"sec-head\">\n        <span class=\"sec-title\"><span class=\"dia\">\u2726</span>DEIN SATTEL-LOOK</span>\n        <span class=\"sec-note\">FELL \u00B7 SATTEL \u00B7 BORTE</span>\n      </div>\n      <div class=\"tile-grid\">${skinTiles}</div>\n    </section>`;\n  skinGrid.innerHTML = shopMarkup;\n  menuSkinGrid.innerHTML = shopMarkup;\n}\n\n/* ================= Konto-Sync =================\n   All four calls degrade to \"nothing happens\" when no endpoint is configured or\n   the request fails \u2014 the game never blocks on the network. */\nasync function apiCall(path, options){\n  if(!API_BASE || !account.loggedIn) return null;\n  try{\n    const res = await fetch(API_BASE.replace(/\\/$/, \"\") + path, Object.assign({\n      headers: { \"Content-Type\": \"application/json\" },\n      credentials: \"same-origin\"\n    }, options));\n    if(!res.ok) return null;\n    return await res.json();\n  }catch(err){\n    return null;\n  }\n}\nfunction progressPayload(){\n  return {\n    name: account.name,\n    best: best,\n    coins: coins,\n    skins: ownedSkins,\n    animals: ownedAnimals,\n    equippedSkin: equippedSkin,\n    equippedAnimal: equippedAnimal,\n    discovered: discovered,\n    runs: runs\n  };\n}\nfunction uniq(a, b){\n  const out = Array.isArray(a) ? a.slice() : [];\n  for(const v of (Array.isArray(b) ? b : [])) if(!out.includes(v)) out.push(v);\n  return out;\n}\n/* Pulls the account state and merges it with whatever this device has. The rule is\n   \"keep the better of the two\" so switching devices never costs you anything;\n   coins are taken as max rather than summed so a re-sync cannot mint currency. */\nasync function syncAccount(){\n  if(!account.loggedIn || !API_BASE){ syncState = \"off\"; return; }\n  syncState = \"syncing\";\n  renderScores();\n  const remote = await apiCall(\"/progress\");\n  if(remote){\n    best = Math.max(best, remote.best | 0);\n    coins = Math.max(coins, remote.coins | 0);\n    ownedSkins = uniq(ownedSkins, remote.skins);\n    ownedAnimals = uniq(ownedAnimals, remote.animals);\n    discovered = uniq(discovered, remote.discovered);\n    if(Array.isArray(remote.runs)){\n      runs = runs.concat(remote.runs).sort((a, b) => b.d - a.d).slice(0, 5);\n    }\n    localStorage.setItem(HS_KEY, String(best));\n    localStorage.setItem(ARCHIVE_KEY, JSON.stringify(discovered));\n    localStorage.setItem(RUNS_KEY, JSON.stringify(runs));\n    saveShop();\n    hudBest.textContent = fmt(best);\n    renderShop();\n    syncState = \"ok\";\n    pushProgress();\n  }else{\n    syncState = \"error\";\n  }\n  await loadLeaderboard();\n  renderScores();\n}\nlet pushTimer = null;\nfunction pushProgress(){\n  if(!account.loggedIn || !API_BASE) return;\n  clearTimeout(pushTimer);\n  pushTimer = setTimeout(async () => {\n    const ok = await apiCall(\"/progress\", { method:\"POST\", body: JSON.stringify(progressPayload()) });\n    syncState = ok ? \"ok\" : \"error\";\n  }, 400);\n}\nasync function submitRun(distance, earned){\n  if(!account.loggedIn || !API_BASE) return;\n  const res = await apiCall(\"/score\", {\n    method: \"POST\",\n    body: JSON.stringify({ name: account.name, distance: distance, coins: earned })\n  });\n  syncState = res ? \"ok\" : \"error\";\n  if(res && Array.isArray(res.leaderboard)) leaderboard = res.leaderboard;\n  pushProgress();\n}\nasync function loadLeaderboard(){\n  const res = await apiCall(\"/leaderboard?limit=10\");\n  if(res && Array.isArray(res.entries)) leaderboard = res.entries;\n  else if(Array.isArray(res)) leaderboard = res;\n}\n\n/* ================= Bestenliste / Belohnungen ================= */\nfunction accountBoxMarkup(){\n  if(!account.loggedIn){\n    return `<div class=\"gate\">\n        <div class=\"gate-title\">NUR MIT SHOP-KONTO</div>\n        <div class=\"gate-text\">Melde dich mit deinem KochKult-Konto an, um in der globalen\n          Bestenliste zu erscheinen. Dein Fortschritt wird dann im Konto gespeichert\n          und ist auf jedem Ger\u00E4t verf\u00FCgbar.</div>\n        <a class=\"btn btn-gold gate-btn\" href=\"${LOGIN_URL}\">ANMELDEN</a>\n      </div>`;\n  }\n  const label = {\n    ok: \"Fortschritt im Konto gespeichert\",\n    syncing: \"Fortschritt wird abgeglichen \u2026\",\n    error: \"Konto erreichbar, Abgleich fehlgeschlagen\",\n    off: \"Ranglisten-Server noch nicht verbunden\"\n  }[syncState];\n  return `<div class=\"account-chip\">\n      <span class=\"kk-dot ${syncState}\"></span>\n      <span class=\"who\">${escapeHtml(account.name || \"ANGEMELDET\")}</span>\n      <span class=\"state\">${label}</span>\n    </div>`;\n}\nfunction escapeHtml(s){\n  return String(s).replace(/[&<>\"']/g, c => ({\n    \"&\":\"&amp;\", \"<\":\"&lt;\", \">\":\"&gt;\", '\"':\"&quot;\", \"'\":\"&#39;\"\n  })[c]);\n}\nfunction renderGlobalList(){\n  if(!account.loggedIn){\n    globalList.innerHTML = \"\";\n    return;\n  }\n  if(!leaderboard){\n    globalList.innerHTML = `<div class=\"empty\">${\n      syncState === \"syncing\" ? \"Rangliste wird geladen \u2026\" : \"Rangliste derzeit nicht erreichbar.\"\n    }</div>`;\n    return;\n  }\n  if(!leaderboard.length){\n    globalList.innerHTML = `<div class=\"empty\">Noch keine Eintr\u00E4ge.<br>Sei der Erste.</div>`;\n    return;\n  }\n  globalList.innerHTML = leaderboard.map((e, i) => {\n    const rank = e.rank || i + 1;\n    const mine = e.me || (account.id != null && String(e.id) === String(account.id));\n    return `<div class=\"row${mine ? \" me\" : \"\"}\">\n        <div class=\"rank${rank === 1 ? \" top\" : \"\"}\">${rank}</div>\n        <div class=\"rtext\">\n          <div class=\"rtitle\">${escapeHtml(e.name || \"ANONYM\")}</div>\n          <div class=\"rsub\">${mine ? \"DAS BIST DU\" : (e.coins != null ? e.coins + \" M\u00DCNZEN\" : \"&nbsp;\")}</div>\n        </div>\n        <div class=\"rval\">${(e.best | 0).toLocaleString(\"de-DE\")} m</div>\n      </div>`;\n  }).join(\"\");\n}\nfunction renderScores(){\n  accountBox.innerHTML = accountBoxMarkup();\n  renderGlobalList();\n  const rows = runs.slice(0, 5).map((r, i) => `\n    <div class=\"row\">\n      <div class=\"rank${i === 0 ? \" top\" : \"\"}\">${i + 1}</div>\n      <div class=\"rtext\">\n        <div class=\"rtitle\">${r.d.toLocaleString(\"de-DE\")} m</div>\n        <div class=\"rsub\">${r.c} M\u00DCNZEN GESAMMELT</div>\n      </div>\n      <div class=\"rval\">${i === 0 ? \"BEST\" : \"\"}</div>\n    </div>`).join(\"\");\n  scoresList.innerHTML = (rows || `<div class=\"empty\">Noch keine Reise beendet.<br>Starte deinen ersten Lauf.</div>`)\n    + `<div class=\"row\">\n         <div class=\"rtext\">\n           <div class=\"rtitle\">M\u00DCNZ-BANK</div>\n           <div class=\"rsub\">Gesammelt \u00FCber alle L\u00E4ufe</div>\n         </div>\n         <div class=\"rval\">${coins}</div>\n       </div>\n       <div class=\"row\">\n         <div class=\"rtext\">\n           <div class=\"rtitle\">SAMMLUNG</div>\n           <div class=\"rsub\">Entdeckte Fundst\u00FCcke</div>\n         </div>\n         <div class=\"rval\">${discovered.length}/${ARCHIVE_ITEMS.length}</div>\n       </div>`;\n}\nfunction progressRow(title, sub, have, need, unit){\n  const done = have >= need;\n  const pct = Math.min(100, Math.round(have / need * 100));\n  return `<div class=\"row${done ? \" done\" : \"\"}\">\n      <div class=\"rtext\">\n        <div class=\"rtitle\">${title}</div>\n        <div class=\"rsub\">${done ? \"FREIGESCHALTET\" : sub}</div>\n        ${done ? \"\" : `<div class=\"bar\"><i style=\"width:${pct}%\"></i></div>`}\n      </div>\n      <div class=\"rval\">${done ? \"\u2713\" : have + \"/\" + need + \" \" + unit}</div>\n    </div>`;\n}\nfunction renderRewards(){\n  updateCoins();\n  const skinRows = SKINS.filter(s => s.price > 0).map(s =>\n    progressRow(\"SATTEL \u00B7 \" + s.name, s.price + \" M\u00DCNZEN\", ownedSkins.includes(s.id) ? s.price : coins, s.price, \"MZ\")\n  ).join(\"\");\n  const alpaca = ANIMALS[1];\n  const animalRow = progressRow(\n    \"REISEBEGLEITER \u00B7 ALPAKA\", alpaca.trait,\n    ownedAnimals.includes(alpaca.id) ? alpaca.price : coins, alpaca.price, \"MZ\"\n  );\n  const milestones = [500, 1000, 2500, 5000].map(m =>\n    progressRow(\"MEILENSTEIN \u00B7 \" + (m >= 1000 ? (m / 1000).toLocaleString(\"de-DE\") + \" KM\" : m + \" M\"),\n      \"Beste Distanz erreichen\", Math.min(best, m), m, \"M\")\n  ).join(\"\");\n  rewardsList.innerHTML = animalRow + skinRows + milestones\n    + progressRow(\"SAMMLUNG KOMPLETT\", \"Alle Fundst\u00FCcke entdecken\", discovered.length, ARCHIVE_ITEMS.length, \"ST\");\n}\n\n/* ================= Einstellungen ================= */\nfunction renderSettings(){\n  for(const [key, el] of Object.entries(SETTING_TOGGLES)){\n    el.classList.toggle(\"on\", !!settings[key]);\n    el.setAttribute(\"aria-checked\", settings[key] ? \"true\" : \"false\");\n  }\n  settingsAccount.innerHTML = accountBoxMarkup()\n    + (account.loggedIn\n      ? `<a class=\"btn btn-ghost back-btn\" style=\"display:inline-block;text-decoration:none;margin-top:16px\" href=\"/account/logout\">ABMELDEN</a>`\n      : \"\");\n}\nconst settingsAccount = document.getElementById(\"settingsAccount\");\nconst SETTING_TOGGLES = {\n  shake: document.getElementById(\"setShake\"),\n  particles: document.getElementById(\"setParticles\"),\n  banner: document.getElementById(\"setBanner\")\n};\nfor(const [key, el] of Object.entries(SETTING_TOGGLES)){\n  const toggle = () => {\n    settings[key] = !settings[key];\n    localStorage.setItem(SETTINGS_KEY, JSON.stringify(settings));\n    renderSettings();\n  };\n  el.addEventListener(\"click\", toggle);\n  el.addEventListener(\"keydown\", e => {\n    if(e.key === \" \" || e.key === \"Enter\"){ e.preventDefault(); toggle(); }\n  });\n}\ndocument.getElementById(\"resetBtn\").addEventListener(\"click\", () => {\n  if(!confirm(\"Wirklich den gesamten Fortschritt l\u00F6schen? M\u00FCnzen, Bestwerte, Sammlung und gekaufte Looks gehen verloren.\")) return;\n  for(const key of [HS_KEY, COIN_KEY, SKINS_KEY, EQUIPPED_SKIN_KEY, ANIMALS_KEY, EQUIPPED_ANIMAL_KEY, ARCHIVE_KEY, RUNS_KEY]){\n    localStorage.removeItem(key);\n  }\n  best = 0; coins = 0; roundCoins = 0;\n  ownedSkins = [\"sand\"]; equippedSkin = \"sand\";\n  ownedAnimals = [\"camel\"]; equippedAnimal = \"camel\";\n  discovered = []; runs = [];\n  hudBest.textContent = fmt(best);\n  renderShop();\n  showScreen(\"start\");\n});\nrenderSettings();\n\n/* ================= Input ================= */\nconst input = { left:false, right:false };\n\nwindow.addEventListener(\"keydown\", e => {\n  if(e.repeat) return;\n  const k = e.key.toLowerCase();\n  if(k === \"arrowleft\" || k === \"a\") input.left = true;\n  if(k === \"arrowright\" || k === \"d\") input.right = true;\n  if((k === \" \" || k === \"enter\")){\n    if(state === STATE.MENU && currentScreen === \"start\") startGame();\n    else if(state === STATE.DEAD && deathAnim > 0.7) startGame();\n  }\n});\nwindow.addEventListener(\"keyup\", e => {\n  const k = e.key.toLowerCase();\n  if(k === \"arrowleft\" || k === \"a\") input.left = false;\n  if(k === \"arrowright\" || k === \"d\") input.right = false;\n});\nwindow.addEventListener(\"blur\", () => {\n  // Never leave movement active when focus changes while a key is held.\n  input.left = input.right = false;\n  player.vx = 0;\n});\n\n/* Touch: hold left/right half OR drag horizontally */\nlet touchId = null, touchStartX = 0, touchPlayerX = 0, touchMoved = false;\ncanvas.style.pointerEvents = \"auto\";\n\nstage.addEventListener(\"touchstart\", e => {\n  if(state !== STATE.PLAY) return;\n  const t = e.changedTouches[0];\n  touchId = t.identifier;\n  touchStartX = t.clientX;\n  touchPlayerX = player.targetX;\n  touchMoved = false;\n  const rect = stage.getBoundingClientRect();\n  if(t.clientX < rect.left + rect.width/2) input.left = true;\n  else input.right = true;\n}, {passive:true});\n\nstage.addEventListener(\"touchmove\", e => {\n  if(touchId === null) return;\n  for(const t of e.changedTouches){\n    if(t.identifier !== touchId) continue;\n    const dx = t.clientX - touchStartX;\n    if(Math.abs(dx) > 12) touchMoved = true;\n    if(touchMoved){\n      input.left = input.right = false;\n      player.targetX = clamp(touchPlayerX + dx * 1.6, player.w/2 + 8, W - player.w/2 - 8);\n    }\n  }\n}, {passive:true});\n\nfunction endTouch(e){\n  for(const t of e.changedTouches){\n    if(t.identifier === touchId){\n      touchId = null;\n      input.left = input.right = false;\n    }\n  }\n}\nstage.addEventListener(\"touchend\", endTouch, {passive:true});\nstage.addEventListener(\"touchcancel\", endTouch, {passive:true});\n\n// Mouse support keeps the standalone game playable on desktop without a keyboard.\nlet mouseDown = false;\nfunction setMouseDirection(e){\n  const rect = stage.getBoundingClientRect();\n  input.left = e.clientX < rect.left + rect.width / 2;\n  input.right = !input.left;\n}\nstage.addEventListener(\"mousedown\", e => {\n  if(state !== STATE.PLAY || e.button !== 0) return;\n  mouseDown = true;\n  setMouseDirection(e);\n});\nwindow.addEventListener(\"mousemove\", e => {\n  if(mouseDown && state === STATE.PLAY) setMouseDirection(e);\n});\nwindow.addEventListener(\"mouseup\", () => {\n  mouseDown = false;\n  input.left = input.right = false;\n});\n\ndocument.getElementById(\"startBtn\").addEventListener(\"click\", startGame);\ndocument.getElementById(\"retryBtn\").addEventListener(\"click\", startGame);\ndocument.getElementById(\"toShopBtn\").addEventListener(\"click\", () => showScreen(\"shop\"));\nfunction handleShopClick(e){\n  const card = e.target.closest(\"[data-skin], [data-animal]\");\n  if(!card) return;\n  if(card.dataset.animal){\n    const animal = ANIMALS.find(a => a.id === card.dataset.animal);\n    if(!animal) return;\n    if(!ownedAnimals.includes(animal.id)){\n      if(coins < animal.price) return;\n      coins -= animal.price;\n      ownedAnimals.push(animal.id);\n    }\n    equippedAnimal = animal.id;\n    saveShop();\n    renderShop();\n    return;\n  }\n  const skin = SKINS.find(s => s.id === card.dataset.skin);\n  if(!skin) return;\n  if(!ownedSkins.includes(skin.id)){\n    if(coins < skin.price) return;\n    coins -= skin.price;\n    ownedSkins.push(skin.id);\n  }\n  equippedAnimal = \"camel\";\n  equippedSkin = skin.id;\n  saveShop();\n  renderShop();\n}\nskinGrid.addEventListener(\"click\", handleShopClick);\nmenuSkinGrid.addEventListener(\"click\", handleShopClick);\nrenderShop();\n\n/* ================= World generation ================= */\nfunction initWorld(){\n  decos = [];\n  tracks = [];\n  buildSandGradient();\n  for(let i=0;i<26;i++) decos.push(makeDeco(rand(-40, H+40)));\n}\n\nlet sandGradient = null;\nfunction buildSandGradient(){\n  if(H < 2) return;\n  const g = ctx.createLinearGradient(0,0,0,H);\n  g.addColorStop(0,\"#eccf98\");\n  g.addColorStop(0.5,\"#e4c188\");\n  g.addColorStop(1,\"#d8b274\");\n  sandGradient = g;\n}\n\nfunction makeDeco(y){\n  const r = Math.random();\n  // The desert gets visibly harsher over time: more fissures, not more noise.\n  const crackChance = Math.min(0.30, 0.08 + elapsed * 0.008);\n  let type;\n  if(r < 0.38) type = \"pebble\";\n  else if(r < 0.56) type = \"grass\";\n  else if(r < 0.88 - crackChance) type = \"ripple\";\n  else if(r < 0.88) type = \"bone\";\n  else if(r < 0.88 + crackChance) type = \"crack\";\n  else type = \"bone\";\n  return {\n    type,\n    x: rand(10, W-10),\n    y,\n    s: rand(0.6, 1.3),\n    rot: rand(0, Math.PI*2),\n    variant: (Math.random() * 3) | 0   // picks one of the pre-rendered tints\n  };\n}\n\n/* Obstacle definitions: type, half-width, half-height (collision box) */\nconst OBSTACLE_TYPES = [\n  { type:\"cactus\", variant:\"saguaro\", w:42, h:64, cw:24, ch:40 },\n  { type:\"cactus\", variant:\"tall\",    w:40, h:78, cw:22, ch:49 },\n  { type:\"cactus\", variant:\"barrel\",  w:56, h:46, cw:32, ch:24 },\n  { type:\"cactus\", variant:\"bloom\",   w:48, h:60, cw:28, ch:36 },\n  { type:\"rockBig\", w:70, h:54, cw:52, ch:32 },\n  { type:\"rockSm\",  w:42, h:32, cw:29, ch:19 },\n  { type:\"bush\",    w:53, h:43, cw:35, ch:24 },\n  { type:\"sign\",    w:43, h:67, cw:19, ch:40 },\n  { type:\"hole\",    w:72, h:42, cw:48, ch:22 }\n];\n\nlet lastGapCenter = 0.5; // 0..1 \u2014 kept as guaranteed free corridor\n\nfunction spawnObstacleRow(){\n  // Fair spawn: choose a free corridor near the previous one so a path always exists.\n  const corridorW = 110;\n  const maxShift = 0.28;\n  let gap = lastGapCenter + rand(-maxShift, maxShift);\n  gap = clamp(gap, 0.16, 0.84);\n  lastGapCenter = gap;\n  const gapPx = gap * W;\n\n  const density = clamp(2 + Math.floor(elapsed / 10), 2, 5);\n  const count = 1 + Math.floor(Math.random() * density);\n\n  const placed = [];\n  for(let i=0;i<count;i++){\n    const def = OBSTACLE_TYPES[Math.floor(Math.random()*OBSTACLE_TYPES.length)];\n    let x = rand(def.w, W - def.w);\n    let ok = true;\n    // keep corridor free\n    if(Math.abs(x - gapPx) < corridorW/2 + def.cw) ok = false;\n    // avoid overlap with same row\n    for(const p of placed){\n      if(Math.abs(x - p.x) < p.cw + def.cw + 18) ok = false;\n    }\n    if(!ok){\n      // second try\n      x = rand(def.w, W - def.w);\n      if(Math.abs(x - gapPx) < corridorW/2 + def.cw) continue;\n      let clash = false;\n      for(const p of placed){\n        if(Math.abs(x - p.x) < p.cw + def.cw + 18) clash = true;\n      }\n      if(clash) continue;\n    }\n    const ob = {\n      ...def,\n      x,\n      y: -rand(60, 140),\n      wob: rand(0, Math.PI*2)\n    };\n    placed.push(ob);\n    discover(ob.type === \"cactus\" ? \"cactus-\" + ob.variant : ob.type);\n    obstacles.push(ob);\n  }\n}\n\nconst COLLECT_TYPES = [\"teapot\",\"glass\",\"gift\",\"coin\"];\nfunction spawnCollectible(){\n  // Prefer spawning in / near the free corridor so items are reachable.\n  const gx = lastGapCenter * W + rand(-60, 60);\n  const item = {\n    type: COLLECT_TYPES[Math.floor(Math.random()*COLLECT_TYPES.length)],\n    x: clamp(gx, 30, W-30),\n    y: -80,\n    r: 27,\n    t: rand(0, Math.PI*2),\n    oasis: false\n  };\n  discover(item.type);\n  collectibles.push(item);\n}\nfunction spawnScorpion(){\n  // Rare, but placed near the route so it remains a risky event.\n  discover(\"scorpion\");\n  collectibles.push({\n    type: \"scorpion\",\n    x: clamp(lastGapCenter * W + rand(-45,45), 34, W-34),\n    y: -100,\n    r: 28,\n    t: rand(0, Math.PI*2),\n    oasis: false\n  });\n}\nfunction spawnCaravan(){\n  discover(\"caravan\");\n  obstacles.push({type:\"caravan\", w:110, h:46, cw:68, ch:25, x:rand(80, W-80), y:-100, wob:0, vx:Math.random()<0.5?-24:24});\n}\nfunction showMilestone(meters){\n  if(!settings.banner) return;\n  milestoneBanner.textContent = meters % 1000 === 0 ? (meters / 1000) + \" KM!\" : meters + \" M\";\n  milestoneBanner.classList.add(\"show\");\n  clearTimeout(bannerTimeout);\n  bannerTimeout = setTimeout(() => milestoneBanner.classList.remove(\"show\"), 1300);\n}\n/* ================= Game control ================= */\nfunction startGame(){\n  score = 0; distAcc = 0; elapsed = 0; roundCoins = 0;\n  nextMilestone = 100;\n  speedMul = 1; shake = 0; deathAnim = 0; stingTimer = 0;\n  obstacles = []; collectibles = []; particles = []; popups = []; tracks = [];\n  spawnTimer = 1.4; collectTimer = 2.5; scorpionTimer = rand(20, 34); caravanTimer = rand(38, 58);\n  player.x = player.targetX = W/2;\n  player.vx = 0;\n  player.y = H * 0.72;\n  state = STATE.PLAY;\n  hudScoreShown = -1; hudSpeedShown = \"\";\n  hideAllScreens();\n  hud.classList.add(\"show\");\n  brandInGame.classList.add(\"show\");\n  hudBest.textContent = fmt(best);\n  updateCoins();\n  controlsToast.classList.add(\"show\");\n  setTimeout(() => controlsToast.classList.remove(\"show\"), 2800);\n}\n\nfunction gameOver(){\n  state = STATE.DEAD;\n  shake = 14;\n  deathAnim = 0;\n  const isNew = score > best;\n  if(isNew){\n    best = score;\n    localStorage.setItem(HS_KEY, String(best));\n  }\n  // Local top list: five best runs, newest wins ties so a repeat feels rewarded.\n  runs.push({ d: score, c: roundCoins });\n  runs.sort((a, b) => b.d - a.d);\n  runs = runs.slice(0, 5);\n  localStorage.setItem(RUNS_KEY, JSON.stringify(runs));\n  submitRun(score, roundCoins);\n  // impact particles\n  for(let i=0;i<22;i++){\n    particles.push({\n      x: player.x, y: player.y,\n      vx: rand(-140,140), vy: rand(-180,20),\n      life: rand(0.4,0.9), t: 0,\n      r: rand(2,5), col: \"rgba(160,120,70,\"\n    });\n  }\n  setTimeout(()=>{\n    overScore.textContent = score.toLocaleString(\"de-DE\") + \" m\";\n    overBest.textContent = best.toLocaleString(\"de-DE\") + \" m\";\n    newBest.style.display = isNew ? \"block\" : \"none\";\n    coinSummary.textContent = \"M\u00DCNZEN +\" + roundCoins + \" \u00B7 BANK \" + coins;\n    showScreen(\"over\");\n    hud.classList.remove(\"show\");\n  }, 650);\n}\n\nfunction collect(c){\n  if(c.type === \"scorpion\"){\n    stingTimer = 3;\n    shake = 8;\n    popups.push({x:c.x, y:c.y, text:\"STICH!\", t:0, gold:false});\n    for(let i=0;i<20;i++) particles.push({x:c.x,y:c.y,vx:rand(-130,130),vy:rand(-150,-15),life:rand(0.35,0.8),t:0,r:rand(2,4),col:\"rgba(210,45,35,\"});\n    return;\n  }\n  if(c.type === \"coin\"){\n    roundCoins++;\n    coins++;\n    saveShop();\n    updateCoins();\n    popups.push({x:c.x, y:c.y, text:\"+1 M\u00DCNZE\", t:0, gold:true});\n  }else{\n    popups.push({x:c.x, y:c.y, text:\"FUNDST\u00DCCK\", t:0, gold:false});\n  }\n  for(let i=0;i<14;i++){\n    particles.push({\n      x:c.x, y:c.y,\n      vx: rand(-90,90), vy: rand(-140,-20),\n      life: rand(0.35,0.8), t:0, r: rand(1.5,3.5),\n      col: \"rgba(214,166,60,\"\n    });\n  }\n}\n\n/* ================= Update ================= */\nfunction update(dt){\n  const stung = stingTimer > 0;\n  const menuScroll = state === STATE.MENU ? 60 : 0;\n  let speed;\n  if(state === STATE.PLAY){\n    const activeAnimal = ANIMALS.find(a => a.id === equippedAnimal) || ANIMALS[0];\n    elapsed += dt;\n    speedMul = 1 + Math.min(elapsed / 11 * 0.22, 2.1); // ramps quickly to 3.1x\n    speed = baseSpeed * speedMul * activeAnimal.speed * (stung ? 1.7 : 1);\n  }else if(state === STATE.DEAD){\n    deathAnim += dt;\n    speed = Math.max(0, baseSpeed * speedMul * (1 - deathAnim*2.5));\n  }else{\n    speed = menuScroll;\n  }\n\n  /* -- world scroll -- */\n  for(const d of decos){\n    d.y += speed * dt;\n    if(d.y > H + 40){\n      Object.assign(d, makeDeco(-rand(20,80)));\n    }\n  }\n  for(const t of tracks){\n    t.y += speed * dt;\n    t.t += dt;\n  }\n  tracks = tracks.filter(t => t.y < H + 20 && t.t < 6);\n\n  if(state === STATE.PLAY){\n    /* -- player -- */\n    const activeAnimal = ANIMALS.find(a => a.id === equippedAnimal) || ANIMALS[0];\n    const accel = 3100 * activeAnimal.accel, maxV = 620 * activeAnimal.accel;\n    if(input.left)  player.vx = Math.max(player.vx - accel*dt, -maxV);\n    else if(input.right) player.vx = Math.min(player.vx + accel*dt, maxV);\n    else player.vx *= Math.pow(0.0001, dt); // strong damping\n\n    if(input.left || input.right){\n      player.targetX = clamp(player.targetX + player.vx*dt, player.w/2+8, W-player.w/2-8);\n    }\n    // smooth follow (also serves drag mode)\n    player.x += (player.targetX - player.x) * Math.min(1, dt*18);\n\n    player.legPhase += dt * (7 + speedMul*2.5) * (stung ? 1.8 : 1);\n    player.bob = Math.sin(player.legPhase) * 2.2;\n\n    // footprints\n    if(Math.floor(player.legPhase / Math.PI) !== Math.floor((player.legPhase - dt*(7+speedMul*2.5)) / Math.PI)){\n      const side = (Math.floor(player.legPhase/Math.PI) % 2) ? 9 : -9;\n      tracks.push({x: player.x + side, y: player.y + 26, t: 0});\n    }\n\n    // dust behind camel\n    if(Math.random() < dt*24){\n      particles.push({\n        x: player.x + rand(-10,10), y: player.y + 26,\n        vx: rand(-16,16), vy: rand(20,60),\n        life: rand(0.5,1.0), t: 0, r: rand(2.5,5.5),\n        col: \"rgba(205,175,125,\"\n      });\n    }\n\n    /* -- score -- */\n    // The visual game pace rises sharply for challenge, but real travel pace stays plausible.\n    const distanceSpeed = (stung ? 8 : 3 + Math.min(elapsed * 0.03, 2.5)) * activeAnimal.speed;\n    distAcc += distanceSpeed * dt;\n    if(distAcc >= 1){\n      const add = Math.floor(distAcc);\n      score += add;\n      distAcc -= add;\n      while(score >= nextMilestone){\n        showMilestone(nextMilestone);\n        nextMilestone += 100;\n      }\n    }\n\n    /* -- spawns -- */\n    spawnTimer -= dt;\n    if(spawnTimer <= 0){\n      spawnObstacleRow();\n      const interval = clamp(1.05 - elapsed*0.010, 0.58, 1.05);\n      spawnTimer = interval * rand(0.85, 1.2);\n    }\n    collectTimer -= dt;\n    if(collectTimer <= 0){\n      spawnCollectible();\n      collectTimer = rand(2.6, 5.2);\n    }\n    scorpionTimer -= dt;\n    if(scorpionTimer <= 0){\n      spawnScorpion();\n      scorpionTimer = rand(26, 42);\n    }\n    caravanTimer -= dt;\n    if(caravanTimer <= 0){\n      spawnCaravan();\n      caravanTimer = rand(48, 72);\n    }\n\n    /* -- collisions -- */\n    const px = player.x, py = player.y;\n    const pw = 18 * activeAnimal.hitbox, ph = 23 * activeAnimal.hitbox;\n    for(const ob of obstacles){\n      if(Math.abs(ob.x - px) < ob.cw + pw && Math.abs(ob.y - py) < ob.ch + ph){\n        gameOver();\n        break;\n      }\n    }\n    for(const c of collectibles){\n      if(!c.hit && Math.abs(c.x - px) < c.r + 20 && Math.abs(c.y - py) < c.r + 24){\n        c.hit = true;\n        collect(c);\n      }\n    }\n  }\n\n  /* -- move objects -- */\n  for(const ob of obstacles){\n    ob.y += speed * dt; ob.wob += dt;\n    if(ob.type === \"caravan\"){\n      ob.x += ob.vx * dt;\n      if(ob.x < 68 || ob.x > W - 68) ob.vx *= -1;\n    }\n  }\n  obstacles = obstacles.filter(o => o.y < H + 90);\n  for(const c of collectibles){ c.y += speed * dt; c.t += dt*3; }\n  collectibles = collectibles.filter(c => c.y < H + 100 && !c.hit);\n\n  /* -- particles & popups -- */\n  if(!settings.particles && particles.length) particles.length = 0;\n  for(const p of particles){\n    p.t += dt;\n    p.x += p.vx*dt;\n    p.y += (p.vy + speed*0.5)*dt;\n    p.vy += 60*dt;\n  }\n  particles = particles.filter(p => p.t < p.life);\n  for(const pop of popups){ pop.t += dt; pop.y -= 46*dt; }\n  popups = popups.filter(p => p.t < 1.1);\n\n  if(shake > 0) shake = Math.max(0, shake - dt*26);\n  if(stingTimer > 0) stingTimer = Math.max(0, stingTimer - dt);\n  const stungNow = stingTimer > 0;\n  if(stungNow !== stungClass){\n    stage.classList.toggle(\"stung\", stungNow);\n    stungClass = stungNow;\n  }\n\n  /* -- HUD: only touch the DOM when the rendered text actually changes,\n        a textContent write per frame forces a layout pass. -- */\n  if(state === STATE.PLAY){\n    if(score !== hudScoreShown){\n      hudScoreShown = score;\n      hudScore.textContent = fmt(score);\n      if(score > best) hudBest.textContent = fmt(score);\n    }\n    const speedText = speedMul.toFixed(1);\n    if(speedText !== hudSpeedShown){\n      hudSpeedShown = speedText;\n      speedTag.textContent = \"SPEED \" + speedText + \"x\";\n    }\n  }\n}\nlet stungClass = false;\nlet hudScoreShown = -1;\nlet hudSpeedShown = \"\";\n\n/* ================= Drawing ================= */\nconst drawList = [];\nconst byDepth = (a, b) => a._sy - b._sy;\nfunction draw(){\n  // camera shake\n  let sx = 0, sy = 0;\n  if(shake > 0 && settings.shake){\n    sx = rand(-shake, shake);\n    sy = rand(-shake, shake);\n  }\n  ctx.save();\n  ctx.translate(sx, sy);\n\n  drawDesert();\n  drawTracks();\n\n  // Depth-sort: objects further up are drawn first. The list is reused and the\n  // entities are tagged in place \u2014 the old version allocated an object and a\n  // closure per entity per frame.\n  drawList.length = 0;\n  for(const ob of obstacles){ ob._sy = ob.y + ob.ch; ob._kind = 0; drawList.push(ob); }\n  for(const c of collectibles){ c._sy = c.y + c.r; c._kind = 1; drawList.push(c); }\n  if(state !== STATE.MENU){ player._sy = player.y + 28; player._kind = 2; drawList.push(player); }\n  drawList.sort(byDepth);\n  for(const e of drawList){\n    if(e._kind === 0) drawObstacle(e);\n    else if(e._kind === 1) drawCollectible(e);\n    else drawCamel();\n  }\n\n  drawParticles();\n  drawPopups();\n\n  ctx.restore();\n}\n\nfunction drawDesert(){\n  // Flat sand base: one cached gradient, no per-frame allocation.\n  ctx.fillStyle = sandGradient || \"#e4c188\";\n  ctx.fillRect(-20,-20,W+40,H+40);\n\n  // small decorations\n  for(const d of decos) drawDeco(d);\n}\n\n/* Decorations are pre-rendered once into small offscreen canvases and then blitted.\n   Rebuilding those paths 26x per frame was the most expensive part of the background. */\nconst DECO_SPRITES = {};\nfunction decoSprite(type, variant){\n  const key = type + variant;\n  if(DECO_SPRITES[key]) return DECO_SPRITES[key];\n  const size = 48;                       // covers the largest deco (ripple, 36px wide)\n  const half = size / 2;\n  const c = document.createElement(\"canvas\");\n  c.width = c.height = size * 2;         // 2x supersample keeps rotated sprites crisp\n  const g = c.getContext(\"2d\");\n  g.setTransform(2, 0, 0, 2, half * 2, half * 2);\n  switch(type){\n    case \"pebble\":{\n      const tint = variant * 9;\n      g.fillStyle = `rgb(${182+tint},${148+tint},${101+tint})`;\n      g.beginPath(); g.ellipse(0,0,4,3,0,0,7); g.fill();\n      g.fillStyle = \"rgba(255,255,255,0.18)\";\n      g.beginPath(); g.ellipse(-1,-1,2,1.2,0,0,7); g.fill();\n      break;\n    }\n    case \"grass\":\n      g.strokeStyle = \"rgba(148,142,80,0.75)\";\n      g.lineWidth = 1.6;\n      g.lineCap = \"round\";\n      for(let i=-2;i<=2;i++){\n        g.beginPath();\n        g.moveTo(i*2.4, 4);\n        g.quadraticCurveTo(i*3.5, -4, i*4.6, -9);\n        g.stroke();\n      }\n      break;\n    case \"ripple\":\n      g.strokeStyle = \"rgba(170,132,82,0.25)\";\n      g.lineWidth = 2;\n      g.lineCap = \"round\";\n      for(let i=0;i<3;i++){\n        g.beginPath();\n        g.moveTo(-18, i*6-6);\n        g.quadraticCurveTo(0, i*6-10, 18, i*6-6);\n        g.stroke();\n      }\n      break;\n    case \"crack\":\n      g.strokeStyle = \"rgba(150,112,66,0.3)\";\n      g.lineWidth = 1.4;\n      g.beginPath();\n      g.moveTo(-10,0); g.lineTo(-3,2); g.lineTo(3,-2); g.lineTo(10,1);\n      g.stroke();\n      break;\n    case \"bone\":\n      g.fillStyle = \"rgba(240,230,205,0.8)\";\n      g.beginPath(); g.ellipse(0,0,7,2,0,0,7); g.fill();\n      g.beginPath(); g.arc(-7,-1.5,2,0,7); g.fill();\n      g.beginPath(); g.arc(-7, 1.5,2,0,7); g.fill();\n      g.beginPath(); g.arc( 7,-1.5,2,0,7); g.fill();\n      g.beginPath(); g.arc( 7, 1.5,2,0,7); g.fill();\n      break;\n  }\n  DECO_SPRITES[key] = { canvas: c, half };\n  return DECO_SPRITES[key];\n}\nfunction drawDeco(d){\n  const sprite = decoSprite(d.type, d.variant);\n  ctx.save();\n  ctx.translate(d.x, d.y);\n  if(d.rot) ctx.rotate(d.rot);\n  const s = d.s * sprite.half;\n  ctx.drawImage(sprite.canvas, -s, -s, s*2, s*2);\n  ctx.restore();\n}\n\nfunction drawTracks(){\n  for(const t of tracks){\n    const a = Math.max(0, 0.28 * (1 - t.t/6));\n    ctx.fillStyle = \"rgba(150,115,70,\" + a + \")\";\n    ctx.beginPath();\n    ctx.ellipse(t.x, t.y, 4.5, 6, 0, 0, 7);\n    ctx.fill();\n  }\n}\n\nfunction shadow(x, y, rx, ry, alpha){\n  ctx.fillStyle = \"rgba(120,85,45,\" + alpha + \")\";\n  ctx.beginPath();\n  ctx.ellipse(x, y, rx, ry, 0, 0, 7);\n  ctx.fill();\n}\n\n/* ---------- Obstacles ---------- */\nfunction drawObstacle(o){\n  ctx.save();\n  ctx.translate(o.x, o.y);\n  ctx.scale(1.2, 1.2);\n  switch(o.type){\n    case \"cactus\": drawCactus(o); break;\n    case \"rockBig\": drawRock(o, 1); break;\n    case \"rockSm\": drawRock(o, 0.6); break;\n    case \"bush\": drawBush(o); break;\n    case \"sign\": drawSign(o); break;\n    case \"hole\": drawHole(o); break;\n    case \"caravan\": drawCaravan(o); break;\n  }\n  ctx.restore();\n}\n\nfunction drawCactus(o){\n  if(o.variant === \"barrel\"){\n    shadow(2, 20, 28, 8, 0.18);\n    ctx.fillStyle = grad(\"bushBody\", () => {\n      const g = ctx.createRadialGradient(-8,-8,3, 0,0,27);\n      g.addColorStop(0,\"#88ad58\"); g.addColorStop(1,\"#3f713d\");\n      return g;\n    });\n    ctx.beginPath(); ctx.ellipse(0, 1, 23, 20, 0, 0, 7); ctx.fill();\n    ctx.strokeStyle = \"rgba(225,240,170,0.48)\";\n    ctx.lineWidth = 1.4;\n    for(let x=-14;x<=14;x+=7){ ctx.beginPath(); ctx.ellipse(x,1,5,18,0,0,7); ctx.stroke(); }\n    ctx.fillStyle = \"#e77d94\";\n    for(let i=0;i<5;i++){ const a=i*Math.PI*0.4; ctx.beginPath(); ctx.arc(Math.cos(a)*4, -19+Math.sin(a)*3, 3, 0, 7); ctx.fill(); }\n    ctx.fillStyle = \"#f3c052\"; ctx.beginPath(); ctx.arc(0,-19,2.5,0,7); ctx.fill();\n    return;\n  }\n  shadow(3, 32, 22, 8, 0.18);\n  const sway = Math.sin(o.wob*1.5)*0.02;\n  ctx.rotate(sway);\n  if(o.variant === \"tall\") ctx.scale(0.82, 1.28);\n  // trunk\n  ctx.fillStyle = \"#5d8a4a\";\n  roundRect(-8, -34, 16, 62, 8);\n  // arms\n  ctx.fillStyle = \"#548044\";\n  roundRect(-24, -14, 10, 26, 5);\n  roundRect(-24, -14, 24, 10, 5);\n  ctx.fillStyle = \"#679455\";\n  roundRect(14, -24, 10, 30, 5);\n  roundRect(2, -24, 22, 10, 5);\n  // highlight\n  ctx.fillStyle = \"rgba(255,255,255,0.14)\";\n  roundRect(-6, -32, 5, 56, 3);\n  // spines\n  ctx.strokeStyle = \"rgba(255,255,240,0.5)\";\n  ctx.lineWidth = 1;\n  for(let i=0;i<5;i++){\n    const yy = -26 + i*12;\n    ctx.beginPath(); ctx.moveTo(-9, yy); ctx.lineTo(-12, yy-2); ctx.stroke();\n    ctx.beginPath(); ctx.moveTo(9, yy+5); ctx.lineTo(12, yy+3); ctx.stroke();\n  }\n  // flower\n  ctx.fillStyle = \"#d9738a\";\n  ctx.beginPath(); ctx.arc(0,-34,4,0,7); ctx.fill();\n  ctx.fillStyle = \"#f0a5b5\";\n  ctx.beginPath(); ctx.arc(-1,-35,1.8,0,7); ctx.fill();\n  if(o.variant === \"bloom\"){\n    ctx.fillStyle = \"#ec6888\";\n    for(let i=0;i<6;i++){\n      const a = i * Math.PI / 3;\n      ctx.beginPath(); ctx.arc(Math.cos(a)*5, -34 + Math.sin(a)*5, 3.2, 0, 7); ctx.fill();\n    }\n    ctx.fillStyle = \"#f4c35a\"; ctx.beginPath(); ctx.arc(0,-34,2.5,0,7); ctx.fill();\n  }\n}\n\nfunction drawRock(o, s){\n  ctx.scale(s, s);\n  shadow(4, 30, 46, 12, 0.18);\n  ctx.fillStyle = \"#9a8264\";\n  ctx.beginPath();\n  ctx.moveTo(-44, 26);\n  ctx.lineTo(-34, -8);\n  ctx.lineTo(-12, -26);\n  ctx.lineTo(18, -22);\n  ctx.lineTo(42, 0);\n  ctx.lineTo(46, 26);\n  ctx.closePath();\n  ctx.fill();\n  ctx.fillStyle = \"#b09876\";\n  ctx.beginPath();\n  ctx.moveTo(-34, -8);\n  ctx.lineTo(-12, -26);\n  ctx.lineTo(18, -22);\n  ctx.lineTo(6, 0);\n  ctx.lineTo(-20, 4);\n  ctx.closePath();\n  ctx.fill();\n  ctx.fillStyle = \"rgba(255,255,255,0.15)\";\n  ctx.beginPath();\n  ctx.moveTo(-12,-26);\n  ctx.lineTo(18,-22);\n  ctx.lineTo(10,-14);\n  ctx.lineTo(-8,-18);\n  ctx.closePath();\n  ctx.fill();\n  ctx.strokeStyle = \"rgba(90,70,45,0.3)\";\n  ctx.lineWidth = 1.5;\n  ctx.beginPath();\n  ctx.moveTo(6,0); ctx.lineTo(2,26);\n  ctx.moveTo(-20,4); ctx.lineTo(-24,26);\n  ctx.stroke();\n}\n\nfunction drawBush(o){\n  shadow(2, 22, 30, 9, 0.16);\n  const sway = Math.sin(o.wob*2)*0.03;\n  ctx.rotate(sway);\n  ctx.strokeStyle = \"#8d7448\";\n  ctx.lineWidth = 3;\n  ctx.lineCap = \"round\";\n  for(let i=0;i<7;i++){\n    const a = -Math.PI/2 + (i-3)*0.34;\n    ctx.beginPath();\n    ctx.moveTo(0, 20);\n    ctx.quadraticCurveTo(Math.cos(a)*14, 4 + Math.sin(a)*10, Math.cos(a)*30, Math.sin(a)*26);\n    ctx.stroke();\n  }\n  ctx.strokeStyle = \"#a68a58\";\n  ctx.lineWidth = 1.8;\n  for(let i=0;i<5;i++){\n    const a = -Math.PI/2 + (i-2)*0.42;\n    ctx.beginPath();\n    ctx.moveTo(Math.cos(a)*16, 8 + Math.sin(a)*14);\n    ctx.lineTo(Math.cos(a)*26, 2 + Math.sin(a)*22);\n    ctx.stroke();\n  }\n}\n\nfunction drawSign(o){\n  shadow(2, 36, 18, 7, 0.18);\n  // post\n  ctx.fillStyle = \"#7c6142\";\n  roundRect(-3, -20, 6, 56, 2);\n  // boards\n  ctx.save();\n  ctx.rotate(-0.06);\n  ctx.fillStyle = \"#a58459\";\n  roundRect(-26, -34, 52, 14, 3);\n  ctx.fillStyle = \"rgba(255,255,255,0.12)\";\n  roundRect(-26, -34, 52, 4, 2);\n  // arrow tip\n  ctx.fillStyle = \"#a58459\";\n  ctx.beginPath();\n  ctx.moveTo(26,-34); ctx.lineTo(34,-27); ctx.lineTo(26,-20);\n  ctx.closePath(); ctx.fill();\n  ctx.fillStyle = \"rgba(74,52,35,0.65)\";\n  ctx.font = \"700 9px 'Segoe UI',sans-serif\";\n  ctx.textAlign = \"center\";\n  ctx.fillText(\"OASIS\", 0, -24);\n  ctx.restore();\n  ctx.save();\n  ctx.rotate(0.05);\n  ctx.fillStyle = \"#94754c\";\n  roundRect(-22, -16, 44, 12, 3);\n  ctx.fillStyle = \"rgba(74,52,35,0.55)\";\n  ctx.font = \"700 7px 'Segoe UI',sans-serif\";\n  ctx.textAlign = \"center\";\n  ctx.fillText(\"12 KM\", 0, -7.5);\n  ctx.restore();\n}\n\nfunction drawHole(o){\n  // Strong bright rim plus dark center makes the hazard readable at high speed.\n  ctx.fillStyle = \"rgba(255,240,190,0.8)\";\n  ctx.beginPath();\n  ctx.ellipse(0, 3, 54, 24, 0, 0, 7);\n  ctx.fill();\n  ctx.fillStyle = grad(\"teapotBody\", () => {\n    const g = ctx.createRadialGradient(-10,-5,3, 0,4,46);\n    g.addColorStop(0,\"#7e5939\");\n    g.addColorStop(0.55,\"#563b29\");\n    g.addColorStop(1,\"#a87849\");\n    return g;\n  });\n  ctx.beginPath();\n  ctx.ellipse(0, 3, 47, 19, 0, 0, 7);\n  ctx.fill();\n  ctx.strokeStyle = \"rgba(70,45,28,0.7)\";\n  ctx.lineWidth = 3;\n  ctx.beginPath();\n  ctx.ellipse(0, 3, 47, 19, 0, 0, 7);\n  ctx.stroke();\n  ctx.strokeStyle = \"rgba(255,235,180,0.55)\";\n  ctx.lineWidth = 2;\n  ctx.beginPath();\n  ctx.arc(-18, -7, 26, Math.PI*1.05, Math.PI*1.7);\n  ctx.stroke();\n}\n\nfunction drawCaravan(o){\n  shadow(0, 26, 68, 10, 0.2);\n  const sway = Math.sin(o.wob*2)*1.2;\n  for(let i=-1;i<=1;i++){\n    ctx.save();\n    ctx.translate(i*37, sway + (i%2)*3);\n    ctx.fillStyle = i === 0 ? \"#b77a3f\" : \"#ce9654\";\n    ctx.beginPath(); ctx.ellipse(0,3,13,17,0,0,7); ctx.fill();\n    ctx.fillStyle = \"#a56532\";\n    ctx.beginPath(); ctx.moveTo(-5,-6);ctx.quadraticCurveTo(-4,-22,0,-27);ctx.quadraticCurveTo(5,-22,5,-6);ctx.closePath();ctx.fill();\n    ctx.fillStyle = \"#7f5130\";\n    ctx.fillRect(-12,4,24,8);\n    ctx.fillStyle = \"#c9962e\";\n    ctx.fillRect(-11,6,22,2);\n    ctx.restore();\n  }\n}\n\n/* ---------- Collectibles ---------- */\nfunction drawCollectible(c){\n  ctx.save();\n  ctx.translate(c.x, c.y);\n  const bob = Math.sin(c.t)*3;\n  const pulse = 1 + Math.sin(c.t*1.4)*0.05;\n\n  if(c.type === \"oasis\"){\n    drawOasis(c);\n    ctx.restore();\n    return;\n  }\n\n  shadow(0, 16, 13, 4.5, 0.16);\n  ctx.translate(0, bob - 6);\n  ctx.scale(pulse * 1.35, pulse * 1.35);\n\n  // glow\n  ctx.fillStyle = grad(\"collectGlow\", () => {\n    const g = ctx.createRadialGradient(0,0,4, 0,0,26);\n    g.addColorStop(0,\"rgba(255,220,140,0.35)\");\n    g.addColorStop(1,\"rgba(255,220,140,0)\");\n    return g;\n  });\n  ctx.beginPath(); ctx.arc(0,0,26,0,7); ctx.fill();\n\n  switch(c.type){\n    case \"teapot\": drawTeapot(); break;\n    case \"glass\": drawTeaGlass(); break;\n    case \"gift\": drawGift(); break;\n    case \"coin\": drawCoin(c.t); break;\n    case \"scorpion\": drawScorpion(c.t); break;\n  }\n\n  // sparkle\n  const sp = (c.t*0.7) % (Math.PI*2);\n  if(sp < 0.9){\n    const sa = Math.sin(sp/0.9*Math.PI);\n    ctx.save();\n    ctx.translate(9, -12);\n    ctx.rotate(sp*2);\n    ctx.strokeStyle = \"rgba(255,255,255,\" + (sa*0.9) + \")\";\n    ctx.lineWidth = 1.6;\n    ctx.lineCap = \"round\";\n    const l = 5*sa;\n    ctx.beginPath();\n    ctx.moveTo(-l,0); ctx.lineTo(l,0);\n    ctx.moveTo(0,-l); ctx.lineTo(0,l);\n    ctx.stroke();\n    ctx.restore();\n  }\n  ctx.restore();\n}\n\nfunction drawTeapot(){\n  ctx.fillStyle = \"#b4552d\";\n  // body\n  ctx.beginPath();\n  ctx.ellipse(0, 4, 12, 9.5, 0, 0, 7);\n  ctx.fill();\n  // spout\n  ctx.beginPath();\n  ctx.moveTo(10, 1);\n  ctx.quadraticCurveTo(18, -3, 17, -8);\n  ctx.lineTo(14, -8);\n  ctx.quadraticCurveTo(14, -2, 8, 3);\n  ctx.closePath();\n  ctx.fill();\n  // handle\n  ctx.strokeStyle = \"#8f3f1f\";\n  ctx.lineWidth = 2.5;\n  ctx.beginPath();\n  ctx.arc(-12, 2, 5.5, Math.PI*0.5, Math.PI*1.6);\n  ctx.stroke();\n  // lid\n  ctx.fillStyle = \"#8f3f1f\";\n  ctx.beginPath();\n  ctx.ellipse(0, -5.5, 6.5, 3, 0, 0, 7);\n  ctx.fill();\n  ctx.fillStyle = \"#c9962e\";\n  ctx.beginPath(); ctx.arc(0, -8.5, 2.2, 0, 7); ctx.fill();\n  // shine\n  ctx.fillStyle = \"rgba(255,255,255,0.3)\";\n  ctx.beginPath();\n  ctx.ellipse(-4.5, 1, 3, 5, -0.4, 0, 7);\n  ctx.fill();\n  // gold band\n  ctx.strokeStyle = \"rgba(201,150,46,0.8)\";\n  ctx.lineWidth = 1.4;\n  ctx.beginPath();\n  ctx.ellipse(0, 8, 10.5, 4.5, 0, Math.PI*0.15, Math.PI*0.85);\n  ctx.stroke();\n}\n\nfunction drawTeaGlass(){\n  // glass body (typical arabic tea glass shape)\n  ctx.fillStyle = \"rgba(200,230,235,0.75)\";\n  ctx.beginPath();\n  ctx.moveTo(-7.5, -10);\n  ctx.quadraticCurveTo(-8.5, -1, -5.5, 4);\n  ctx.lineTo(-5.5, 11);\n  ctx.lineTo(5.5, 11);\n  ctx.lineTo(5.5, 4);\n  ctx.quadraticCurveTo(8.5, -1, 7.5, -10);\n  ctx.closePath();\n  ctx.fill();\n  // tea\n  ctx.fillStyle = \"#c67a35\";\n  ctx.beginPath();\n  ctx.moveTo(-6.6, -6);\n  ctx.quadraticCurveTo(-7.6, 0, -4.8, 4.5);\n  ctx.lineTo(-4.8, 9.5);\n  ctx.lineTo(4.8, 9.5);\n  ctx.lineTo(4.8, 4.5);\n  ctx.quadraticCurveTo(7.6, 0, 6.6, -6);\n  ctx.closePath();\n  ctx.fill();\n  // gold rim + pattern\n  ctx.strokeStyle = \"#c9962e\";\n  ctx.lineWidth = 1.8;\n  ctx.beginPath(); ctx.moveTo(-7.7,-10); ctx.lineTo(7.7,-10); ctx.stroke();\n  ctx.lineWidth = 1.2;\n  ctx.beginPath(); ctx.moveTo(-5.7,6.5); ctx.lineTo(5.7,6.5); ctx.stroke();\n  // steam\n  ctx.strokeStyle = \"rgba(255,255,255,0.55)\";\n  ctx.lineWidth = 1.4;\n  ctx.lineCap = \"round\";\n  ctx.beginPath();\n  ctx.moveTo(-2, -13);\n  ctx.quadraticCurveTo(-4, -17, -2, -20);\n  ctx.moveTo(3, -13);\n  ctx.quadraticCurveTo(1, -17, 3, -21);\n  ctx.stroke();\n  // shine\n  ctx.fillStyle = \"rgba(255,255,255,0.4)\";\n  ctx.beginPath();\n  ctx.ellipse(-4, -1, 1.4, 6, 0.1, 0, 7);\n  ctx.fill();\n}\n\nfunction drawGift(){\n  ctx.fillStyle = \"#a34a56\";\n  roundRect(-10, -6, 20, 16, 2.5);\n  ctx.fillStyle = \"#b95864\";\n  roundRect(-11.5, -9, 23, 5, 2);\n  // ribbon\n  ctx.fillStyle = \"#c9962e\";\n  ctx.fillRect(-2, -9, 4, 19);\n  ctx.fillRect(-2, -6.2, 4, 1.6);\n  // bow\n  ctx.strokeStyle = \"#c9962e\";\n  ctx.lineWidth = 2.4;\n  ctx.beginPath();\n  ctx.arc(-4, -11.5, 3.2, 0, 7);\n  ctx.arc(4, -11.5, 3.2, 0, 7);\n  ctx.stroke();\n  // shine\n  ctx.fillStyle = \"rgba(255,255,255,0.22)\";\n  roundRect(-8.5, -4.5, 3.5, 12, 1.5);\n}\n\nfunction drawCoin(t){\n  const squash = Math.abs(Math.cos(t*1.2));\n  ctx.save();\n  ctx.scale(Math.max(squash, 0.15), 1);\n  ctx.fillStyle = grad(\"coinFace\", () => {\n    const g = ctx.createLinearGradient(0,-12,0,12);\n    g.addColorStop(0,\"#e8bc55\");\n    g.addColorStop(1,\"#b8862a\");\n    return g;\n  });\n  ctx.beginPath(); ctx.arc(0,0,12,0,7); ctx.fill();\n  ctx.strokeStyle = \"#8f6a1e\";\n  ctx.lineWidth = 1.6;\n  ctx.beginPath(); ctx.arc(0,0,9,0,7); ctx.stroke();\n  ctx.fillStyle = \"#8f6a1e\";\n  ctx.font = \"800 11px 'Segoe UI',sans-serif\";\n  ctx.textAlign = \"center\";\n  ctx.textBaseline = \"middle\";\n  ctx.fillText(\"K\", 0, 1);\n  ctx.restore();\n  ctx.fillStyle = \"rgba(255,255,255,0.4)\";\n  ctx.beginPath();\n  ctx.ellipse(-4*Math.max(squash,0.15), -5, 2.5*Math.max(squash,0.15), 3, -0.5, 0, 7);\n  ctx.fill();\n}\n\nfunction drawScorpion(t){\n  const sway = Math.sin(t*1.7)*0.15;\n  ctx.save();\n  ctx.rotate(sway);\n  ctx.fillStyle = \"#482d25\";\n  ctx.beginPath(); ctx.ellipse(0, 2, 9, 13, 0, 0, 7); ctx.fill();\n  ctx.fillStyle = \"#6e4031\";\n  ctx.beginPath(); ctx.ellipse(0, -8, 7, 7, 0, 0, 7); ctx.fill();\n  ctx.strokeStyle = \"#432a23\";\n  ctx.lineWidth = 2.4; ctx.lineCap = \"round\";\n  for(const side of [-1,1]){\n    for(let i=0;i<3;i++){\n      const y = -4 + i*7;\n      ctx.beginPath(); ctx.moveTo(side*6,y); ctx.lineTo(side*15,y+4); ctx.lineTo(side*18,y+10); ctx.stroke();\n    }\n    ctx.beginPath(); ctx.moveTo(side*5,-10); ctx.lineTo(side*15,-16); ctx.lineTo(side*19,-12); ctx.stroke();\n  }\n  ctx.beginPath(); ctx.moveTo(0,13); ctx.quadraticCurveTo(14,18,10,27); ctx.quadraticCurveTo(7,31,5,26); ctx.stroke();\n  ctx.fillStyle = \"#cf3f31\"; ctx.beginPath(); ctx.arc(5,26,2.8,0,7); ctx.fill();\n  ctx.restore();\n}\n\nfunction drawOasis(c){\n  const t = c.t;\n  // water pool\n  shadow(0, 30, 52, 12, 0.10);\n  ctx.fillStyle = grad(\"oasisWater\", () => {\n    const g = ctx.createRadialGradient(0,8,6, 0,8,44);\n    g.addColorStop(0,\"#7fd4c8\");\n    g.addColorStop(0.7,\"#3ba393\");\n    g.addColorStop(1,\"#2c8578\");\n    return g;\n  });\n  ctx.beginPath();\n  ctx.ellipse(0, 8, 44, 22, 0, 0, 7);\n  ctx.fill();\n  // shore\n  ctx.strokeStyle = \"rgba(240,220,170,0.9)\";\n  ctx.lineWidth = 3;\n  ctx.beginPath();\n  ctx.ellipse(0, 8, 44, 22, 0, 0, 7);\n  ctx.stroke();\n  // ripples\n  ctx.strokeStyle = \"rgba(255,255,255,0.35)\";\n  ctx.lineWidth = 1.4;\n  for(let i=0;i<2;i++){\n    const rr = 12 + ((t*8 + i*14) % 28);\n    const a = 1 - rr/40;\n    ctx.strokeStyle = \"rgba(255,255,255,\" + (a*0.4) + \")\";\n    ctx.beginPath();\n    ctx.ellipse(0, 8, rr, rr*0.45, 0, 0, 7);\n    ctx.stroke();\n  }\n  // palms\n  drawPalm(-34, -6, 1, t);\n  drawPalm(36, -2, -1, t);\n  // sparkle text hint\n  ctx.fillStyle = \"rgba(255,255,255,\" + (0.5+0.3*Math.sin(t*2)) + \")\";\n  ctx.font = \"700 10px 'Segoe UI',sans-serif\";\n  ctx.textAlign = \"center\";\n  ctx.fillText(\"+500\", 0, 12);\n}\n\nfunction drawPalm(px, py, dir, t){\n  ctx.save();\n  ctx.translate(px, py);\n  ctx.rotate(Math.sin(t*0.8)*0.03*dir);\n  // trunk\n  ctx.strokeStyle = \"#8d6b42\";\n  ctx.lineWidth = 4;\n  ctx.lineCap = \"round\";\n  ctx.beginPath();\n  ctx.moveTo(0, 10);\n  ctx.quadraticCurveTo(dir*4, -6, dir*8, -18);\n  ctx.stroke();\n  // leaves\n  ctx.strokeStyle = \"#3e7d4e\";\n  ctx.lineWidth = 3;\n  for(let i=0;i<5;i++){\n    const a = -Math.PI/2 + (i-2)*0.55;\n    ctx.beginPath();\n    ctx.moveTo(dir*8, -18);\n    ctx.quadraticCurveTo(\n      dir*8 + Math.cos(a)*10, -18 + Math.sin(a)*8 - 4,\n      dir*8 + Math.cos(a)*20, -18 + Math.sin(a)*14 + 3\n    );\n    ctx.stroke();\n  }\n  ctx.restore();\n}\n\n/* ---------- Camel ---------- */\nfunction drawCamel(){\n  if(equippedAnimal === \"alpaca\"){\n    drawAlpaca();\n    return;\n  }\n  const x = player.x, y = player.y;\n  const bob = player.bob;\n  const lp = player.legPhase;\n  const dead = state === STATE.DEAD;\n  const lean = clamp((player.targetX - player.x) * 0.008, -0.22, 0.22);\n\n  ctx.save();\n  ctx.translate(x, y);\n\n  // shadow (breathes with bob)\n  const shScale = 1 - bob*0.02;\n  shadow(0, 28, 20*shScale, 7*shScale, 0.22);\n\n  ctx.rotate(lean);\n  ctx.translate(0, bob);\n  ctx.scale(1.3, 1.3);\n  if(dead) ctx.rotate(Math.min(deathAnim*1.4, 0.5));\n\n  const activeSkin = SKINS.find(s => s.id === equippedSkin) || SKINS[0];\n  const [fur, furDark, furLight] = activeSkin.colors;\n\n  // -- legs (seen from top-behind: small stepping feet) --\n  if(!dead){\n    const step = Math.sin(lp);\n    const step2 = Math.sin(lp + Math.PI);\n    ctx.fillStyle = furDark;\n    // back feet\n    ctx.beginPath(); ctx.ellipse(-9, 22 + step*3, 4.5, 5.5, 0, 0, 7); ctx.fill();\n    ctx.beginPath(); ctx.ellipse( 9, 22 + step2*3, 4.5, 5.5, 0, 0, 7); ctx.fill();\n    // front feet (peek out beside neck)\n    ctx.beginPath(); ctx.ellipse(-11, -6 + step2*2.5, 3.8, 4.6, 0, 0, 7); ctx.fill();\n    ctx.beginPath(); ctx.ellipse( 11, -6 + step*2.5, 3.8, 4.6, 0, 0, 7); ctx.fill();\n  }\n\n  // -- tail --\n  ctx.strokeStyle = furDark;\n  ctx.lineWidth = 3.5;\n  ctx.lineCap = \"round\";\n  ctx.beginPath();\n  ctx.moveTo(0, 24);\n  ctx.quadraticCurveTo(Math.sin(lp*0.5)*4, 30, Math.sin(lp*0.5)*6, 33);\n  ctx.stroke();\n  ctx.fillStyle = \"#7d5626\";\n  ctx.beginPath();\n  ctx.arc(Math.sin(lp*0.5)*6, 34, 2.6, 0, 7);\n  ctx.fill();\n\n  // -- body (top-down teardrop) --\n  ctx.fillStyle = grad(\"camelBody\" + activeSkin.id, () => {\n    const g = ctx.createRadialGradient(-4,-4,4, 0,4,30);\n    g.addColorStop(0, furLight);\n    g.addColorStop(0.65, fur);\n    g.addColorStop(1, furDark);\n    return g;\n  });\n  ctx.beginPath();\n  ctx.moveTo(0, -14);\n  ctx.bezierCurveTo(14, -13, 17, 2, 15, 12);\n  ctx.bezierCurveTo(13, 22, 6, 26, 0, 26);\n  ctx.bezierCurveTo(-6, 26, -13, 22, -15, 12);\n  ctx.bezierCurveTo(-17, 2, -14, -13, 0, -14);\n  ctx.fill();\n\n  // -- humps --\n  ctx.fillStyle = grad(\"camelHump\" + activeSkin.id, () => {\n    const g = ctx.createRadialGradient(-2,6,1, 0,8,12);\n    g.addColorStop(0, \"#e2b475\");\n    g.addColorStop(1, furDark);\n    return g;\n  });\n  ctx.beginPath(); ctx.ellipse(0, 13, 9, 8, 0, 0, 7); ctx.fill();\n  ctx.fillStyle = grad(\"camelHump2\", () => {\n    const g = ctx.createRadialGradient(-2,-1,1, 0,1,11);\n    g.addColorStop(0, \"#e8bc80\");\n    g.addColorStop(1, \"#b3854a\");\n    return g;\n  });\n  ctx.beginPath(); ctx.ellipse(0, 2, 8, 7, 0, 0, 7); ctx.fill();\n  ctx.fillStyle = \"rgba(255,240,210,0.35)\";\n  ctx.beginPath(); ctx.ellipse(-2.5, -0.5, 3, 2.4, 0, 0, 7); ctx.fill();\n\n  // -- saddle blanket edge --\n  ctx.strokeStyle = \"rgba(180,85,45,0.85)\";\n  ctx.lineWidth = 3;\n  ctx.beginPath();\n  ctx.moveTo(-13.5, 9);\n  ctx.quadraticCurveTo(0, 13, 13.5, 9);\n  ctx.stroke();\n  ctx.strokeStyle = \"rgba(201,150,46,0.9)\";\n  ctx.lineWidth = 1.3;\n  ctx.beginPath();\n  ctx.moveTo(-13, 11.5);\n  ctx.quadraticCurveTo(0, 15.5, 13, 11.5);\n  ctx.stroke();\n\n  // -- neck & head (pointing up/forward) --\n  const headSway = dead ? 0 : Math.sin(lp*0.5)*1.2;\n  ctx.save();\n  ctx.translate(headSway*0.4, 0);\n  // neck\n  ctx.fillStyle = fur;\n  ctx.beginPath();\n  ctx.moveTo(-6, -10);\n  ctx.quadraticCurveTo(-5, -22, headSway-4, -30);\n  ctx.lineTo(headSway+4, -30);\n  ctx.quadraticCurveTo(5, -22, 6, -10);\n  ctx.closePath();\n  ctx.fill();\n  ctx.fillStyle = \"rgba(255,240,210,0.2)\";\n  ctx.beginPath();\n  ctx.moveTo(-3, -12);\n  ctx.quadraticCurveTo(-2.5, -22, headSway-1.5, -29);\n  ctx.lineTo(headSway, -29);\n  ctx.quadraticCurveTo(0, -20, 0, -12);\n  ctx.closePath();\n  ctx.fill();\n\n  // head\n  ctx.translate(headSway, -33);\n  ctx.fillStyle = grad(\"camelHead\" + activeSkin.id, () => {\n    const g = ctx.createRadialGradient(-2,-2,1, 0,0,9);\n    g.addColorStop(0, furLight);\n    g.addColorStop(1, fur);\n    return g;\n  });\n  ctx.beginPath();\n  ctx.ellipse(0, 0, 7, 8.5, 0, 0, 7);\n  ctx.fill();\n  // snout\n  ctx.fillStyle = furDark;\n  ctx.beginPath();\n  ctx.ellipse(0, -6.5, 4.5, 4, 0, 0, 7);\n  ctx.fill();\n  ctx.fillStyle = \"rgba(60,40,20,0.5)\";\n  ctx.beginPath(); ctx.ellipse(-2, -8, 0.9, 1.4, 0.3, 0, 7); ctx.fill();\n  ctx.beginPath(); ctx.ellipse( 2, -8, 0.9, 1.4, -0.3, 0, 7); ctx.fill();\n  // ears\n  ctx.fillStyle = furDark;\n  ctx.beginPath(); ctx.ellipse(-6, 3, 2.2, 3.4, -0.5, 0, 7); ctx.fill();\n  ctx.beginPath(); ctx.ellipse( 6, 3, 2.2, 3.4, 0.5, 0, 7); ctx.fill();\n  // eyes (visible from top as dark dots at sides)\n  ctx.fillStyle = \"#3a2812\";\n  ctx.beginPath(); ctx.arc(-4.6, -1.5, 1.3, 0, 7); ctx.fill();\n  ctx.beginPath(); ctx.arc( 4.6, -1.5, 1.3, 0, 7); ctx.fill();\n  // bridle\n  ctx.strokeStyle = \"rgba(180,85,45,0.9)\";\n  ctx.lineWidth = 1.4;\n  ctx.beginPath();\n  ctx.moveTo(-5.5, -3);\n  ctx.quadraticCurveTo(0, -5.5, 5.5, -3);\n  ctx.stroke();\n  ctx.restore();\n\n  ctx.restore();\n}\n\nfunction drawAlpaca(){\n  const bob = player.bob, lp = player.legPhase;\n  const dead = state === STATE.DEAD;\n  const lean = clamp((player.targetX - player.x) * 0.008, -0.22, 0.22);\n  ctx.save();\n  ctx.translate(player.x, player.y);\n  shadow(0, 28, 18, 6.5, 0.22);\n  ctx.rotate(lean);\n  ctx.translate(0, bob);\n  ctx.scale(1.16, 1.16);\n  if(dead) ctx.rotate(Math.min(deathAnim*1.4, 0.5));\n  const fur = \"#eee0c7\", dark = \"#a88c72\", light = \"#fff5e5\";\n  if(!dead){\n    const step = Math.sin(lp);\n    ctx.fillStyle = dark;\n    ctx.beginPath(); ctx.ellipse(-10, 23 + step*3, 3.8, 6, 0, 0, 7); ctx.fill();\n    ctx.beginPath(); ctx.ellipse(10, 23 - step*3, 3.8, 6, 0, 0, 7); ctx.fill();\n  }\n  ctx.fillStyle = fur;\n  ctx.beginPath(); ctx.ellipse(0, 8, 17, 21, 0, 0, 7); ctx.fill();\n  ctx.fillStyle = light;\n  for(let i=0;i<7;i++){\n    const a = i*Math.PI*2/7;\n    ctx.beginPath(); ctx.arc(Math.cos(a)*12, 8 + Math.sin(a)*15, 6.5, 0, 7); ctx.fill();\n  }\n  ctx.fillStyle = fur;\n  ctx.beginPath();\n  ctx.moveTo(-6, -7); ctx.quadraticCurveTo(-6,-26,-3,-35); ctx.lineTo(4,-35); ctx.quadraticCurveTo(7,-25,6,-7); ctx.closePath(); ctx.fill();\n  ctx.translate(0,-39);\n  ctx.fillStyle = fur; ctx.beginPath(); ctx.ellipse(0,0,8,10,0,0,7); ctx.fill();\n  ctx.fillStyle = dark;\n  ctx.beginPath(); ctx.ellipse(-5,-7,2.3,6,-0.35,0,7); ctx.fill();\n  ctx.beginPath(); ctx.ellipse(5,-7,2.3,6,0.35,0,7); ctx.fill();\n  ctx.fillStyle = \"#443126\"; ctx.beginPath(); ctx.arc(-3,-1,1.2,0,7); ctx.fill(); ctx.beginPath(); ctx.arc(3,-1,1.2,0,7); ctx.fill();\n  ctx.restore();\n}\n\n/* ---------- FX ---------- */\nfunction drawParticles(){\n  for(const p of particles){\n    const a = Math.max(0, 1 - p.t/p.life);\n    ctx.fillStyle = p.col + (a*0.7) + \")\";\n    ctx.beginPath();\n    ctx.arc(p.x, p.y, p.r * (0.6 + a*0.4), 0, 7);\n    ctx.fill();\n  }\n}\n\nfunction drawPopups(){\n  for(const p of popups){\n    const a = p.t < 0.15 ? p.t/0.15 : Math.max(0, 1-(p.t-0.5)/0.6);\n    const s = p.t < 0.15 ? 0.6 + (p.t/0.15)*0.4 : 1;\n    ctx.save();\n    ctx.translate(p.x, p.y);\n    ctx.scale(s, s);\n    ctx.font = \"800 \" + (p.gold ? 22 : 17) + \"px 'Segoe UI',sans-serif\";\n    ctx.textAlign = \"center\";\n    ctx.lineWidth = 4;\n    ctx.strokeStyle = \"rgba(253,246,234,\" + (a*0.9) + \")\";\n    ctx.strokeText(p.text, 0, 0);\n    ctx.fillStyle = (p.gold ? \"rgba(180,120,20,\" : \"rgba(143,63,31,\") + a + \")\";\n    ctx.fillText(p.text, 0, 0);\n    ctx.restore();\n  }\n}\n\nfunction roundRect(x, y, w, h, r){\n  ctx.beginPath();\n  ctx.moveTo(x+r, y);\n  ctx.arcTo(x+w, y, x+w, y+h, r);\n  ctx.arcTo(x+w, y+h, x, y+h, r);\n  ctx.arcTo(x, y+h, x, y, r);\n  ctx.arcTo(x, y, x+w, y, r);\n  ctx.closePath();\n  ctx.fill();\n}\n\n/* ================= Main loop ================= */\nlet lastT = performance.now();\n// On a storefront page the game can sit far below the fold \u2014 no reason to burn\n// frames there, and resuming must not replay the skipped time as one huge step.\nlet visible = true;\nif(typeof IntersectionObserver !== \"undefined\"){\n  new IntersectionObserver(entries => {\n    const wasVisible = visible;\n    visible = entries[entries.length - 1].isIntersecting;\n    if(visible && !wasVisible) lastT = performance.now();\n  }, { threshold: 0.05 }).observe(stage);\n}\ndocument.addEventListener(\"visibilitychange\", () => {\n  if(!document.hidden) lastT = performance.now();\n});\nfunction loop(now){\n  let dt = (now - lastT) / 1000;\n  lastT = now;\n  if(dt > 0.05) dt = 0.05; // clamp on tab-switch\n  if(W < 2 || H < 2){ requestAnimationFrame(loop); return; }\n  if(!worldReady){ initWorld(); worldReady = true; }\n  if(!visible || document.hidden){\n    // A paused loop still has to leave a finished picture behind. The context is\n    // opaque, so a canvas that was never drawn is plain black \u2014 and that black\n    // shows straight through the menu overlay.\n    if(!hasDrawn){ draw(); hasDrawn = true; }\n    requestAnimationFrame(loop);\n    return;\n  }\n  // reposition player if canvas size changed\n  if(state === STATE.PLAY){\n    player.y = H * 0.72;\n    player.targetX = clamp(player.targetX, player.w/2+8, W-player.w/2-8);\n  }\n  update(dt);\n  draw();\n  hasDrawn = true;\n  requestAnimationFrame(loop);\n}\n\nresize();\nif(!worldReady && W > 0 && H > 0){ initWorld(); worldReady = true; }\nsyncAccount();\nrequestAnimationFrame(loop);\n})();\n"],
  "mappings": "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",
  "names": []
}
