{
  "status": "CAD checked; physical fit pending",
  "parts": {
    "PRINT_FIRST_upper_joint_sample": {
      "size_mm": [
        48.0,
        26.950000762939453,
        12.0
      ],
      "volume_mm3": 3190.3359830655586,
      "watertight": true,
      "solid_count": 1,
      "bed_z": -2.449206090199854e-16,
      "orientation": "visible face down, bosses up"
    },
    "PRINT_FIRST_lower_joint_sample": {
      "size_mm": [
        39.99994659423828,
        26.449996948242188,
        12.0
      ],
      "volume_mm3": 2651.6376535590007,
      "watertight": true,
      "solid_count": 1,
      "bed_z": 0.0,
      "orientation": "cups up"
    },
    "PRINT_FIRST_joystick_corner": {
      "size_mm": [
        28.700000762939453,
        28.700000762939453,
        2.999999999999997
      ],
      "volume_mm3": 2217.859281254386,
      "watertight": true,
      "solid_count": 1,
      "bed_z": 3.30783264210102e-15,
      "orientation": "visible face down, bosses up"
    },
    "PRINT_joystick_adapter": {
      "size_mm": [
        21.809999465942383,
        24.520000457763672,
        4.599999904632568
      ],
      "volume_mm3": 703.5466937895835,
      "watertight": true,
      "solid_count": 1,
      "bed_z": 0.0,
      "orientation": "pegs down; support underside of adapter"
    },
    "WAIT_full_top_plate": {
      "size_mm": [
        94.0,
        94.0,
        12.0
      ],
      "volume_mm3": 17571.33609403237,
      "watertight": true,
      "solid_count": 1,
      "bed_z": 0.0,
      "orientation": "visible face down, bosses up"
    },
    "WAIT_lower_light_tray": {
      "size_mm": [
        91.0,
        45.32499694824219,
        12.0
      ],
      "volume_mm3": 7683.135677302689,
      "watertight": true,
      "solid_count": 1,
      "bed_z": 0.0,
      "orientation": "cups up"
    }
  },
  "checks": {
    "upper_vs_case": 0.0,
    "lower_vs_case": 0.0,
    "upper_vs_lower": 0.0,
    "adapter_vs_upper": 0.0,
    "adapter_vs_reference_joystick": 0.0,
    "joystick_vs_case": 0.0,
    "adapter_vs_case": 0.0,
    "joystick_vs_tray": 0.0,
    "tray_0_screw_vs_case": 0.0,
    "tray_0_screw_vs_lower": 0.0,
    "tray_0_screw_vs_adapter": 0.0,
    "tray_0_insert_vs_case": 0.0,
    "tray_0_insert_vs_lower": 0.0,
    "tray_0_insert_vs_adapter": 0.0,
    "tray_0_screw_vs_upper": 0.0,
    "insert_0_tool_access": 0.0,
    "tray_1_screw_vs_case": 0.0,
    "tray_1_screw_vs_lower": 0.0,
    "tray_1_screw_vs_adapter": 0.0,
    "tray_1_insert_vs_case": 0.0,
    "tray_1_insert_vs_lower": 0.0,
    "tray_1_insert_vs_adapter": 0.0,
    "tray_1_screw_vs_upper": 0.0,
    "insert_1_tool_access": 0.0,
    "tray_2_screw_vs_case": 0.0,
    "tray_2_screw_vs_lower": 0.0,
    "tray_2_screw_vs_adapter": 0.0,
    "tray_2_insert_vs_case": 0.0,
    "tray_2_insert_vs_lower": 0.0,
    "tray_2_insert_vs_adapter": 0.0,
    "tray_2_screw_vs_upper": 0.0,
    "insert_2_tool_access": 0.0,
    "tray_3_screw_vs_case": 0.0,
    "tray_3_screw_vs_lower": 0.0,
    "tray_3_screw_vs_adapter": 0.0,
    "tray_3_insert_vs_case": 0.0,
    "tray_3_insert_vs_lower": 0.0,
    "tray_3_insert_vs_adapter": 0.0,
    "tray_3_screw_vs_upper": 0.0,
    "insert_3_tool_access": 0.0,
    "SparkFun_A_shaft_upper": 0.0,
    "SparkFun_A_shaft_adapter": 0.0,
    "SparkFun_B_shaft_upper": 0.0,
    "SparkFun_B_shaft_adapter": 0.0,
    "community_A_shaft_upper": 0.0,
    "community_A_shaft_adapter": 0.0,
    "community_B_shaft_upper": 0.0,
    "community_B_shaft_adapter": 0.0,
    "joy_A_screw_vs_plate": 0.0,
    "joy_A_screw_vs_adapter": 0.0,
    "joy_A_screw_vs_case": 0.0,
    "joy_A_screw_vs_tray": 0.0,
    "joy_A_screw_vs_joystick": 0.0,
    "joy_A_nut_vs_plate": 0.0,
    "joy_A_nut_vs_adapter": 0.0,
    "joy_A_nut_vs_case": 0.0,
    "joy_A_nut_vs_tray": 0.0,
    "joy_A_nut_vs_joystick": 0.0,
    "joy_B_screw_vs_plate": 0.0,
    "joy_B_screw_vs_adapter": 0.0,
    "joy_B_screw_vs_case": 0.0,
    "joy_B_screw_vs_tray": 0.0,
    "joy_B_screw_vs_joystick": 0.0,
    "joy_B_nut_vs_plate": 0.0,
    "joy_B_nut_vs_adapter": 0.0,
    "joy_B_nut_vs_case": 0.0,
    "joy_B_nut_vs_tray": 0.0,
    "joy_B_nut_vs_joystick": 0.0,
    "0_switch_vs_lower": 0.0,
    "0_switch_vs_adapter": 0.0,
    "0_switch_vs_joystick": 0.0,
    "0_switch_vs_joy_hardware_0": 0.0,
    "0_switch_vs_joy_hardware_1": 0.0,
    "0_switch_vs_joy_hardware_2": 0.0,
    "0_switch_vs_joy_hardware_3": 0.0,
    "0_pins_vs_upper": 0.0,
    "0_pins_vs_lower": 0.0,
    "0_pins_vs_adapter": 0.0,
    "0_pins_vs_joystick": 0.0,
    "0_pins_vs_joy_hardware_0": 0.0,
    "0_pins_vs_joy_hardware_1": 0.0,
    "0_pins_vs_joy_hardware_2": 0.0,
    "0_pins_vs_joy_hardware_3": 0.0,
    "0_cap_vs_upper": 0.0,
    "0_cap_vs_lower": 0.0,
    "0_cap_vs_adapter": 0.0,
    "0_cap_vs_joystick": 0.0,
    "0_cap_vs_joy_hardware_0": 0.0,
    "0_cap_vs_joy_hardware_1": 0.0,
    "0_cap_vs_joy_hardware_2": 0.0,
    "0_cap_vs_joy_hardware_3": 0.0,
    "0_LED_vs_upper": 0.0,
    "0_LED_vs_lower": 0.0,
    "0_LED_vs_adapter": 0.0,
    "0_LED_vs_joystick": 0.0,
    "0_LED_vs_joy_hardware_0": 0.0,
    "0_LED_vs_joy_hardware_1": 0.0,
    "0_LED_vs_joy_hardware_2": 0.0,
    "0_LED_vs_joy_hardware_3": 0.0,
    "0_10x4_LED_access": 0.0,
    "1_switch_vs_lower": 0.0,
    "1_switch_vs_adapter": 0.0,
    "1_switch_vs_joystick": 0.0,
    "1_switch_vs_joy_hardware_0": 0.0,
    "1_switch_vs_joy_hardware_1": 0.0,
    "1_switch_vs_joy_hardware_2": 0.0,
    "1_switch_vs_joy_hardware_3": 0.0,
    "1_pins_vs_upper": 0.0,
    "1_pins_vs_lower": 0.0,
    "1_pins_vs_adapter": 0.0,
    "1_pins_vs_joystick": 0.0,
    "1_pins_vs_joy_hardware_0": 0.0,
    "1_pins_vs_joy_hardware_1": 0.0,
    "1_pins_vs_joy_hardware_2": 0.0,
    "1_pins_vs_joy_hardware_3": 0.0,
    "1_cap_vs_upper": 0.0,
    "1_cap_vs_lower": 0.0,
    "1_cap_vs_adapter": 0.0,
    "1_cap_vs_joystick": 0.0,
    "1_cap_vs_joy_hardware_0": 0.0,
    "1_cap_vs_joy_hardware_1": 0.0,
    "1_cap_vs_joy_hardware_2": 0.0,
    "1_cap_vs_joy_hardware_3": 0.0,
    "1_LED_vs_upper": 0.0,
    "1_LED_vs_lower": 0.0,
    "1_LED_vs_adapter": 0.0,
    "1_LED_vs_joystick": 0.0,
    "1_LED_vs_joy_hardware_0": 0.0,
    "1_LED_vs_joy_hardware_1": 0.0,
    "1_LED_vs_joy_hardware_2": 0.0,
    "1_LED_vs_joy_hardware_3": 0.0,
    "1_10x4_LED_access": 0.0,
    "2_switch_vs_lower": 0.0,
    "2_switch_vs_adapter": 0.0,
    "2_switch_vs_joystick": 0.0,
    "2_switch_vs_joy_hardware_0": 0.0,
    "2_switch_vs_joy_hardware_1": 0.0,
    "2_switch_vs_joy_hardware_2": 0.0,
    "2_switch_vs_joy_hardware_3": 0.0,
    "2_pins_vs_upper": 0.0,
    "2_pins_vs_lower": 0.0,
    "2_pins_vs_adapter": 0.0,
    "2_pins_vs_joystick": 0.0,
    "2_pins_vs_joy_hardware_0": 0.0,
    "2_pins_vs_joy_hardware_1": 0.0,
    "2_pins_vs_joy_hardware_2": 0.0,
    "2_pins_vs_joy_hardware_3": 0.0,
    "2_cap_vs_upper": 0.0,
    "2_cap_vs_lower": 0.0,
    "2_cap_vs_adapter": 0.0,
    "2_cap_vs_joystick": 0.0,
    "2_cap_vs_joy_hardware_0": 0.0,
    "2_cap_vs_joy_hardware_1": 0.0,
    "2_cap_vs_joy_hardware_2": 0.0,
    "2_cap_vs_joy_hardware_3": 0.0,
    "2_LED_vs_upper": 0.0,
    "2_LED_vs_lower": 0.0,
    "2_LED_vs_adapter": 0.0,
    "2_LED_vs_joystick": 0.0,
    "2_LED_vs_joy_hardware_0": 0.0,
    "2_LED_vs_joy_hardware_1": 0.0,
    "2_LED_vs_joy_hardware_2": 0.0,
    "2_LED_vs_joy_hardware_3": 0.0,
    "2_10x4_LED_access": 0.0,
    "3_switch_vs_lower": 0.0,
    "3_switch_vs_adapter": 0.0,
    "3_switch_vs_joystick": 0.0,
    "3_switch_vs_joy_hardware_0": 0.0,
    "3_switch_vs_joy_hardware_1": 0.0,
    "3_switch_vs_joy_hardware_2": 0.0,
    "3_switch_vs_joy_hardware_3": 0.0,
    "3_pins_vs_upper": 0.0,
    "3_pins_vs_lower": 0.0,
    "3_pins_vs_adapter": 0.0,
    "3_pins_vs_joystick": 0.0,
    "3_pins_vs_joy_hardware_0": 0.0,
    "3_pins_vs_joy_hardware_1": 0.0,
    "3_pins_vs_joy_hardware_2": 0.0,
    "3_pins_vs_joy_hardware_3": 0.0,
    "3_cap_vs_upper": 0.0,
    "3_cap_vs_lower": 0.0,
    "3_cap_vs_adapter": 0.0,
    "3_cap_vs_joystick": 0.0,
    "3_cap_vs_joy_hardware_0": 0.0,
    "3_cap_vs_joy_hardware_1": 0.0,
    "3_cap_vs_joy_hardware_2": 0.0,
    "3_cap_vs_joy_hardware_3": 0.0,
    "3_LED_vs_upper": 0.0,
    "3_LED_vs_lower": 0.0,
    "3_LED_vs_adapter": 0.0,
    "3_LED_vs_joystick": 0.0,
    "3_LED_vs_joy_hardware_0": 0.0,
    "3_LED_vs_joy_hardware_1": 0.0,
    "3_LED_vs_joy_hardware_2": 0.0,
    "3_LED_vs_joy_hardware_3": 0.0,
    "3_10x4_LED_access": 0.0,
    "4_switch_vs_lower": 0.0,
    "4_switch_vs_adapter": 0.0,
    "4_switch_vs_joystick": 0.0,
    "4_switch_vs_joy_hardware_0": 0.0,
    "4_switch_vs_joy_hardware_1": 0.0,
    "4_switch_vs_joy_hardware_2": 0.0,
    "4_switch_vs_joy_hardware_3": 0.0,
    "4_pins_vs_upper": 0.0,
    "4_pins_vs_lower": 0.0,
    "4_pins_vs_adapter": 0.0,
    "4_pins_vs_joystick": 0.0,
    "4_pins_vs_joy_hardware_0": 0.0,
    "4_pins_vs_joy_hardware_1": 0.0,
    "4_pins_vs_joy_hardware_2": 0.0,
    "4_pins_vs_joy_hardware_3": 0.0,
    "4_cap_vs_upper": 0.0,
    "4_cap_vs_lower": 0.0,
    "4_cap_vs_adapter": 0.0,
    "4_cap_vs_joystick": 0.0,
    "4_cap_vs_joy_hardware_0": 0.0,
    "4_cap_vs_joy_hardware_1": 0.0,
    "4_cap_vs_joy_hardware_2": 0.0,
    "4_cap_vs_joy_hardware_3": 0.0,
    "4_LED_vs_upper": 0.0,
    "4_LED_vs_lower": 0.0,
    "4_LED_vs_adapter": 0.0,
    "4_LED_vs_joystick": 0.0,
    "4_LED_vs_joy_hardware_0": 0.0,
    "4_LED_vs_joy_hardware_1": 0.0,
    "4_LED_vs_joy_hardware_2": 0.0,
    "4_LED_vs_joy_hardware_3": 0.0,
    "4_10x4_LED_access": 0.0,
    "5_switch_vs_lower": 0.0,
    "5_switch_vs_adapter": 0.0,
    "5_switch_vs_joystick": 0.0,
    "5_switch_vs_joy_hardware_0": 0.0,
    "5_switch_vs_joy_hardware_1": 0.0,
    "5_switch_vs_joy_hardware_2": 0.0,
    "5_switch_vs_joy_hardware_3": 0.0,
    "5_pins_vs_upper": 0.0,
    "5_pins_vs_lower": 0.0,
    "5_pins_vs_adapter": 0.0,
    "5_pins_vs_joystick": 0.0,
    "5_pins_vs_joy_hardware_0": 0.0,
    "5_pins_vs_joy_hardware_1": 0.0,
    "5_pins_vs_joy_hardware_2": 0.0,
    "5_pins_vs_joy_hardware_3": 0.0,
    "5_cap_vs_upper": 0.0,
    "5_cap_vs_lower": 0.0,
    "5_cap_vs_adapter": 0.0,
    "5_cap_vs_joystick": 0.0,
    "5_cap_vs_joy_hardware_0": 0.0,
    "5_cap_vs_joy_hardware_1": 0.0,
    "5_cap_vs_joy_hardware_2": 0.0,
    "5_cap_vs_joy_hardware_3": 0.0,
    "5_LED_vs_upper": 0.0,
    "5_LED_vs_lower": 0.0,
    "5_LED_vs_adapter": 0.0,
    "5_LED_vs_joystick": 0.0,
    "5_LED_vs_joy_hardware_0": 0.0,
    "5_LED_vs_joy_hardware_1": 0.0,
    "5_LED_vs_joy_hardware_2": 0.0,
    "5_LED_vs_joy_hardware_3": 0.0,
    "5_10x4_LED_access": 0.0,
    "KB2040_vs_upper": 0.0,
    "KB2040_vs_lower": 0.0,
    "KB2040_vs_adapter": 0.0,
    "encoder_vs_upper": 0.0,
    "encoder_vs_lower": 0.0,
    "encoder_vs_adapter": 0.0,
    "source_geometry_symmetric_difference_outside_mounts_mm3": 0.0
  },
  "hardware": {
    "tray": {
      "quantity": 4,
      "screw": "M3 x 8 socket cap, DIN912",
      "insert": "Adafruit M3 x 4, 4.2 mm OD",
      "lower_grip_mm": 3,
      "insert_engagement_mm": 4,
      "tip_clearance_mm": 1,
      "pilot_diameter_mm": 3.9,
      "roof_above_tip_well_mm": 6
    },
    "joystick_A": {
      "screw": "M1.6 x 10 socket cap",
      "nut": "M1.6 standard hex, AF 3.2 x 1.3 mm",
      "tip_below_nut_mm": 1.6,
      "nut_bearing_area_mm2": 4.344
    },
    "joystick_B": {
      "screw": "M1.6 x 10 socket cap",
      "nut": "M1.6 standard hex, AF 3.2 x 1.3 mm",
      "tip_below_nut_mm": 2.1,
      "nut_bearing_area_mm2": 4.344
    }
  },
  "limits": [
    "No physical fit, fatigue, heat-set pullout or strength testing performed.",
    "Ear heights A 0.5 / B 1.0 mm retained from previous fit study; confirm both tabs sit without bending.",
    "Joystick reference is a community model, not a controlled manufacturer drawing; test full thumb travel.",
    "Actual wire routing, solder blobs, underside insulation and driver access need a dry assembly check.",
    "Adapter pegs-down orientation requires support under its base; keep pegs, holes and seats clean.",
    "Both full upper and lower parts are new matched v5 geometry; do not mix with v2-v4 hardware locations."
  ]
}
