      ctx.fillStyle = grad;
        ctx.beginPath(); ctx.arc(0, 0, p.r, 0, Math.PI*2); ctx.fill();
        ctx.restore();
      }
    }

    function updatePuffs(dt){
      for (let i = puffs.length - 1; i >= 0; i--) {
        const p = puffs[i];
        p.x += (p.vx||0) * dt;
        if (p.x < -400*DPR || p.x > W + 400*DPR || p.y < -400*DPR || p.y > H + 400*DPR) {
          puffs.splice(i,1);
        }
      }
    }

    const planes = [];
    function spawnPlane(){
      const fromLeft = Math.random() < 0