ction onPointerMove(e){
      const rect = canvas.getBoundingClientRect();
      pointer.x = (e.clientX - rect.left) * DPR;
      pointer.y = (e.clientY - rect.top) * DPR;
      if (!state.painting) return;
      const step = state.size * 0.35 * DPR;
      const dx = pointer.x - lastStamp.x, dy = pointer.y - lastStamp.y;
      const dist = Math.hypot(dx, dy);
      if (dist >= step) {
        const steps = Math.floor(dist / step);
        for (let i = 1; i <= steps; i++) {
          const t = i / steps;
   