{
  "product": "motorcycle-ergonomics",
  "methodVersion": "1.0.0",
  "planVersion": 1,
  "studioVersion": 1,
  "runtime": "Static site. Import model() from assets/studio.mjs for local calculations; no remote compute endpoint.",
  "units": "Canonical lengths are millimeters. Angles are degrees from vertical for lean and internal joint angles for elbow/knee.",
  "coordinates": {
    "origin": "hip",
    "positiveX": "forward",
    "positiveY": "up",
    "pegDrop": "positive distance below hip"
  },
  "fields": [
    {
      "key": "torso",
      "label": "Hip-to-shoulder length",
      "value": 560,
      "unit": "mm",
      "min": 100,
      "max": 1000,
      "step": "any",
      "help": "Hip joint to shoulder joint.",
      "type": "number"
    },
    {
      "key": "upperArm",
      "label": "Upper arm length",
      "value": 320,
      "unit": "mm",
      "min": 100,
      "max": 700,
      "step": "any",
      "help": "Shoulder joint to elbow.",
      "type": "number"
    },
    {
      "key": "forearm",
      "label": "Forearm + hand reach",
      "value": 340,
      "unit": "mm",
      "min": 100,
      "max": 800,
      "step": "any",
      "help": "Elbow to the center of your grip.",
      "type": "number"
    },
    {
      "key": "thigh",
      "label": "Hip-to-knee length",
      "value": 450,
      "unit": "mm",
      "min": 100,
      "max": 1000,
      "step": "any",
      "help": "Hip joint to knee joint.",
      "type": "number"
    },
    {
      "key": "shin",
      "label": "Knee-to-foot length",
      "value": 450,
      "unit": "mm",
      "min": 100,
      "max": 1000,
      "step": "any",
      "help": "Knee to the footpeg contact point.",
      "type": "number"
    },
    {
      "key": "lean",
      "label": "Torso forward lean",
      "value": 15,
      "unit": "°",
      "min": -10,
      "max": 70,
      "step": "any",
      "help": "From vertical. An assumption you choose, not a predicted posture.",
      "type": "number"
    },
    {
      "key": "barX",
      "label": "Bar reach from hip",
      "value": 450,
      "unit": "mm",
      "min": -300,
      "max": 1500,
      "step": "any",
      "help": "Horizontal. Positive is forward of your hip.",
      "type": "number"
    },
    {
      "key": "barY",
      "label": "Bar height above hip",
      "value": 300,
      "unit": "mm",
      "min": -500,
      "max": 1000,
      "step": "any",
      "help": "Vertical. Negative means below your hip.",
      "type": "number"
    },
    {
      "key": "pegX",
      "label": "Footpeg forward of hip",
      "value": 180,
      "unit": "mm",
      "min": -800,
      "max": 1200,
      "step": "any",
      "help": "Horizontal. Negative means behind your hip.",
      "type": "number"
    },
    {
      "key": "pegDrop",
      "label": "Footpeg below hip",
      "value": 500,
      "unit": "mm",
      "min": 1,
      "max": 1500,
      "step": "any",
      "help": "Vertical distance below your hip; enter a positive value.",
      "type": "number"
    },
    {
      "key": "seat",
      "label": "Seat height",
      "value": 820,
      "unit": "mm",
      "min": 100,
      "max": 1500,
      "step": "any",
      "help": "Ground to seat. Not a prediction of ground reach.",
      "type": "number"
    },
    {
      "key": "inseam",
      "label": "Rider inseam",
      "value": 840,
      "unit": "mm",
      "min": 300,
      "max": 1200,
      "step": "any",
      "help": "Crotch to floor. Used only for the seat-height comparison.",
      "type": "number"
    }
  ],
  "example": {
    "product": "motorcycle-ergonomics",
    "version": 1,
    "fields": {
      "torso": 560,
      "upperArm": 320,
      "forearm": 340,
      "thigh": 450,
      "shin": 450,
      "lean": 15,
      "barX": 450,
      "barY": 300,
      "pegX": 180,
      "pegDrop": 500,
      "seat": 820,
      "inseam": 840
    },
    "tables": {},
    "demo": true,
    "methodVersion": "1.0.0",
    "ui": {
      "version": 1,
      "units": "mm",
      "baseline": null
    }
  },
  "limitations": "A two-dimensional diagram cannot guarantee comfort, footing, control reach, clearance, or safe operation. A real-world fit check is essential.",
  "selectors": {
    "form": "#planner",
    "inputs": "#field-{key}",
    "results": "#results",
    "errors": "#input-error",
    "status": "#fit-announcement"
  }
}