{
  "version": "1.0.0",
  "canonicalOwner": "https://gamepad-tester.app/controller-deadzone",
  "inputDomain": "Each x,y in [-1,1]; threshold d in [0,0.95]. These are mathematical example coordinates, not device measurements.",
  "boundaryConvention": "Values equal to the threshold are inside the zero region. Different software can choose other conventions.",
  "models": {
    "axial": "Each component a becomes 0 if abs(a)<=d; otherwise retain a. No rescaling.",
    "radial": "Let r=hypot(x,y). If r<=d return (0,0); otherwise retain (x,y). No rescaling.",
    "scaled_radial": "Let r=hypot(x,y). If r<=d or r=0 return (0,0). Otherwise m=min(1,(r-d)/(1-d)); output (x/r*m,y/r*m)."
  },
  "outerRangePolicy": "Only scaled_radial caps output magnitude at 1; example input vectors may have magnitude up to sqrt(2). Axial/radial retain outside-region components.",
  "sources": {
    "microsoft-xinput": "https://learn.microsoft.com/en-us/windows/win32/xinput/getting-started-with-xinput",
    "directxtk": "https://github.com/microsoft/DirectXTK/wiki/GamePad",
    "sutphin": "https://joshsutphin.com/blog/doing-thumbstick-dead-zones-right.html",
    "godot": "https://docs.godotengine.org/en/stable/tutorials/inputs/controllers_gamepads_joysticks.html"
  },
  "attribution": "Definitions are standard deadzone models explained by the sources. Original contribution is the versioned side-by-side harness, selected cases and independently reproducible numerical outputs, not invention of the algorithms."
}
