{
  "id": "farm",
  "title": "Cultivation Loom",
  "subtitle": "A crop-manufacturing cell, not a robot inside a greenhouse.",
  "overview": "A proposed fixture-first farm for lettuce and selected herbs: indexed seed carriers, visible root cassettes, a Cartesian cut-and-hold robot, separate wet loops, crop passports and one honestly bounded maintenance exchange. Every dimension is proposed; this is an explanatory engineering model, not a validated autonomous machine.",
  "camera": {
    "position": [
      4.2,
      3.2,
      4.7
    ],
    "target": [
      0,
      1,
      0
    ]
  },
  "groups": [
    {
      "id": "gantry-x",
      "parent": null,
      "position": [
        0.45,
        2.0,
        0.0
      ],
      "rotation": [
        0,
        0,
        0
      ],
      "explode": [
        0,
        0.35,
        0
      ],
      "label": "X bridge"
    },
    {
      "id": "traverse-z",
      "parent": "gantry-x",
      "position": [
        0,
        0,
        0.16
      ],
      "rotation": [
        0,
        0,
        0
      ],
      "explode": [
        0,
        0,
        0
      ],
      "label": "Z cross-slide"
    },
    {
      "id": "lift",
      "parent": "traverse-z",
      "position": [
        0,
        -0.12,
        0
      ],
      "rotation": [
        0,
        0,
        0
      ],
      "explode": [
        0,
        0,
        0
      ],
      "label": "Vertical lift + tool"
    },
    {
      "id": "row-0",
      "parent": null,
      "position": [
        0,
        0.9,
        -0.48
      ],
      "rotation": [
        0,
        0,
        0
      ],
      "explode": [
        0,
        0.0,
        -0.21000000000000002
      ],
      "label": "Root cassette 1"
    },
    {
      "id": "row-1",
      "parent": null,
      "position": [
        0,
        0.9,
        -0.16
      ],
      "rotation": [
        0,
        0,
        0
      ],
      "explode": [
        0,
        0.08,
        -0.07
      ],
      "label": "Root cassette 2"
    },
    {
      "id": "row-2",
      "parent": null,
      "position": [
        0,
        0.9,
        0.16
      ],
      "rotation": [
        0,
        0,
        0
      ],
      "explode": [
        0,
        0.16,
        0.07
      ],
      "label": "Root cassette 3"
    },
    {
      "id": "row-3",
      "parent": null,
      "position": [
        0,
        0.9,
        0.48
      ],
      "rotation": [
        0,
        0,
        0
      ],
      "explode": [
        0,
        0.24,
        0.21000000000000002
      ],
      "label": "Root cassette 4"
    },
    {
      "id": "pump-cartridge",
      "parent": null,
      "position": [
        -1.5,
        0.76,
        0.75
      ],
      "rotation": [
        0,
        0,
        0
      ],
      "explode": [
        -0.35,
        0,
        0.15
      ],
      "label": "Removable isolated pump cartridge"
    },
    {
      "id": "jaw-left",
      "parent": "lift",
      "position": [
        -0.07,
        -0.21,
        0
      ],
      "rotation": [
        0,
        0,
        -20
      ],
      "explode": [
        0,
        0,
        0
      ],
      "label": "Left compliant jaw pivot"
    },
    {
      "id": "jaw-right",
      "parent": "lift",
      "position": [
        0.07,
        -0.21,
        0
      ],
      "rotation": [
        0,
        0,
        20
      ],
      "explode": [
        0,
        0,
        0
      ],
      "label": "Right compliant jaw pivot"
    },
    {
      "id": "blade-slide",
      "parent": "lift",
      "position": [
        0,
        -0.283,
        0.07
      ],
      "rotation": [
        0,
        0,
        0
      ],
      "explode": [
        0,
        0,
        0
      ],
      "label": "Guarded push-cutter slide"
    }
  ],
  "parts": [
    {
      "id": "floor",
      "component": "frame",
      "type": "box",
      "group": null,
      "color": "#15282e",
      "material": "dark",
      "position": [
        0,
        -0.04,
        0
      ],
      "size": [
        4.3,
        0.06,
        3.4
      ],
      "selectable": false
    },
    {
      "id": "column--1.9--1.4",
      "component": "frame",
      "type": "box",
      "group": null,
      "color": "#c8d4d8",
      "material": "metal",
      "position": [
        -1.9,
        1,
        -1.4
      ],
      "size": [
        0.075,
        2,
        0.075
      ]
    },
    {
      "id": "foot--1.9--1.4",
      "component": "frame",
      "type": "box",
      "group": null,
      "color": "#263f45",
      "material": "metal",
      "position": [
        -1.9,
        0.05,
        -1.4
      ],
      "size": [
        0.18,
        0.05,
        0.18
      ]
    },
    {
      "id": "column--1.9-1.4",
      "component": "frame",
      "type": "box",
      "group": null,
      "color": "#c8d4d8",
      "material": "metal",
      "position": [
        -1.9,
        1,
        1.4
      ],
      "size": [
        0.075,
        2,
        0.075
      ]
    },
    {
      "id": "foot--1.9-1.4",
      "component": "frame",
      "type": "box",
      "group": null,
      "color": "#263f45",
      "material": "metal",
      "position": [
        -1.9,
        0.05,
        1.4
      ],
      "size": [
        0.18,
        0.05,
        0.18
      ]
    },
    {
      "id": "column-1.9--1.4",
      "component": "frame",
      "type": "box",
      "group": null,
      "color": "#c8d4d8",
      "material": "metal",
      "position": [
        1.9,
        1,
        -1.4
      ],
      "size": [
        0.075,
        2,
        0.075
      ]
    },
    {
      "id": "foot-1.9--1.4",
      "component": "frame",
      "type": "box",
      "group": null,
      "color": "#263f45",
      "material": "metal",
      "position": [
        1.9,
        0.05,
        -1.4
      ],
      "size": [
        0.18,
        0.05,
        0.18
      ]
    },
    {
      "id": "column-1.9-1.4",
      "component": "frame",
      "type": "box",
      "group": null,
      "color": "#c8d4d8",
      "material": "metal",
      "position": [
        1.9,
        1,
        1.4
      ],
      "size": [
        0.075,
        2,
        0.075
      ]
    },
    {
      "id": "foot-1.9-1.4",
      "component": "frame",
      "type": "box",
      "group": null,
      "color": "#263f45",
      "material": "metal",
      "position": [
        1.9,
        0.05,
        1.4
      ],
      "size": [
        0.18,
        0.05,
        0.18
      ]
    },
    {
      "id": "x-rail--1.4",
      "component": "gantry",
      "type": "box",
      "group": null,
      "color": "#263f45",
      "material": "metal",
      "position": [
        0,
        2.03,
        -1.4
      ],
      "size": [
        3.9,
        0.055,
        0.06
      ]
    },
    {
      "id": "x-belt--1.4",
      "component": "gantry",
      "type": "box",
      "group": null,
      "color": "#292e30",
      "material": "dark",
      "position": [
        0,
        2.07,
        -1.4
      ],
      "size": [
        3.8,
        0.014,
        0.018
      ]
    },
    {
      "id": "x-rail-1.4",
      "component": "gantry",
      "type": "box",
      "group": null,
      "color": "#263f45",
      "material": "metal",
      "position": [
        0,
        2.03,
        1.4
      ],
      "size": [
        3.9,
        0.055,
        0.06
      ]
    },
    {
      "id": "x-belt-1.4",
      "component": "gantry",
      "type": "box",
      "group": null,
      "color": "#292e30",
      "material": "dark",
      "position": [
        0,
        2.07,
        1.4
      ],
      "size": [
        3.8,
        0.014,
        0.018
      ]
    },
    {
      "id": "roof-z--1.9",
      "component": "frame",
      "type": "box",
      "group": null,
      "color": "#c8d4d8",
      "material": "metal",
      "position": [
        -1.9,
        2.02,
        0
      ],
      "size": [
        0.06,
        0.06,
        2.85
      ]
    },
    {
      "id": "roof-z-1.9",
      "component": "frame",
      "type": "box",
      "group": null,
      "color": "#c8d4d8",
      "material": "metal",
      "position": [
        1.9,
        2.02,
        0
      ],
      "size": [
        0.06,
        0.06,
        2.85
      ]
    },
    {
      "id": "bench-leg--0.95--0.72",
      "component": "frame",
      "type": "box",
      "group": null,
      "color": "#c8d4d8",
      "material": "metal",
      "position": [
        -0.95,
        0.43,
        -0.72
      ],
      "size": [
        0.055,
        0.86,
        0.055
      ]
    },
    {
      "id": "bench-leg--0.95-0.72",
      "component": "frame",
      "type": "box",
      "group": null,
      "color": "#c8d4d8",
      "material": "metal",
      "position": [
        -0.95,
        0.43,
        0.72
      ],
      "size": [
        0.055,
        0.86,
        0.055
      ]
    },
    {
      "id": "bench-leg-0.95--0.72",
      "component": "frame",
      "type": "box",
      "group": null,
      "color": "#c8d4d8",
      "material": "metal",
      "position": [
        0.95,
        0.43,
        -0.72
      ],
      "size": [
        0.055,
        0.86,
        0.055
      ]
    },
    {
      "id": "bench-leg-0.95-0.72",
      "component": "frame",
      "type": "box",
      "group": null,
      "color": "#c8d4d8",
      "material": "metal",
      "position": [
        0.95,
        0.43,
        0.72
      ],
      "size": [
        0.055,
        0.86,
        0.055
      ]
    },
    {
      "id": "bench-edge--0.72",
      "component": "frame",
      "type": "box",
      "group": null,
      "color": "#c8d4d8",
      "material": "metal",
      "position": [
        0,
        0.84,
        -0.72
      ],
      "size": [
        2.05,
        0.06,
        0.05
      ]
    },
    {
      "id": "bench-edge-0.72",
      "component": "frame",
      "type": "box",
      "group": null,
      "color": "#c8d4d8",
      "material": "metal",
      "position": [
        0,
        0.84,
        0.72
      ],
      "size": [
        2.05,
        0.06,
        0.05
      ]
    },
    {
      "id": "bench-cross--0.95",
      "component": "frame",
      "type": "box",
      "group": null,
      "color": "#c8d4d8",
      "material": "metal",
      "position": [
        -0.95,
        0.84,
        0
      ],
      "size": [
        0.05,
        0.06,
        1.5
      ]
    },
    {
      "id": "bench-cross-0.95",
      "component": "frame",
      "type": "box",
      "group": null,
      "color": "#c8d4d8",
      "material": "metal",
      "position": [
        0.95,
        0.84,
        0
      ],
      "size": [
        0.05,
        0.06,
        1.5
      ]
    },
    {
      "id": "light--0.65",
      "component": "frame",
      "type": "box",
      "group": null,
      "color": "#e8ece6",
      "material": "metal",
      "position": [
        -0.65,
        1.83,
        0
      ],
      "size": [
        0.09,
        0.035,
        1.32
      ]
    },
    {
      "id": "light-emitter--0.65",
      "component": "frame",
      "type": "box",
      "group": null,
      "color": "#b7edba",
      "material": "metal",
      "position": [
        -0.65,
        1.807,
        0
      ],
      "size": [
        0.07,
        0.008,
        1.25
      ],
      "emissive": true
    },
    {
      "id": "light-0",
      "component": "frame",
      "type": "box",
      "group": null,
      "color": "#e8ece6",
      "material": "metal",
      "position": [
        0,
        1.83,
        0
      ],
      "size": [
        0.09,
        0.035,
        1.32
      ]
    },
    {
      "id": "light-emitter-0",
      "component": "frame",
      "type": "box",
      "group": null,
      "color": "#b7edba",
      "material": "metal",
      "position": [
        0,
        1.807,
        0
      ],
      "size": [
        0.07,
        0.008,
        1.25
      ],
      "emissive": true
    },
    {
      "id": "light-0.65",
      "component": "frame",
      "type": "box",
      "group": null,
      "color": "#e8ece6",
      "material": "metal",
      "position": [
        0.65,
        1.83,
        0
      ],
      "size": [
        0.09,
        0.035,
        1.32
      ]
    },
    {
      "id": "light-emitter-0.65",
      "component": "frame",
      "type": "box",
      "group": null,
      "color": "#b7edba",
      "material": "metal",
      "position": [
        0.65,
        1.807,
        0
      ],
      "size": [
        0.07,
        0.008,
        1.25
      ],
      "emissive": true
    },
    {
      "id": "rear-splashguard",
      "component": "frame",
      "type": "box",
      "group": null,
      "color": "#7d9b9d",
      "material": "glass",
      "position": [
        0,
        1.12,
        -1.47
      ],
      "size": [
        3.75,
        1.65,
        0.018
      ],
      "cutaway": true
    },
    {
      "id": "x-bearing--1.4",
      "component": "gantry",
      "type": "box",
      "group": "gantry-x",
      "color": "#263f45",
      "material": "metal",
      "position": [
        0,
        0.015,
        -1.4
      ],
      "size": [
        0.2,
        0.1,
        0.14
      ]
    },
    {
      "id": "x-wheel--1.4",
      "component": "gantry",
      "type": "cylinder",
      "group": "gantry-x",
      "color": "#c8d4d8",
      "material": "metal",
      "position": [
        0,
        -0.025,
        -1.4
      ],
      "radius": 0.06,
      "height": 0.11,
      "axis": "z"
    },
    {
      "id": "x-bearing-1.4",
      "component": "gantry",
      "type": "box",
      "group": "gantry-x",
      "color": "#263f45",
      "material": "metal",
      "position": [
        0,
        0.015,
        1.4
      ],
      "size": [
        0.2,
        0.1,
        0.14
      ]
    },
    {
      "id": "x-wheel-1.4",
      "component": "gantry",
      "type": "cylinder",
      "group": "gantry-x",
      "color": "#c8d4d8",
      "material": "metal",
      "position": [
        0,
        -0.025,
        1.4
      ],
      "radius": 0.06,
      "height": 0.11,
      "axis": "z"
    },
    {
      "id": "bridge-z-rail",
      "component": "gantry",
      "type": "box",
      "group": "gantry-x",
      "color": "#c8d4d8",
      "material": "metal",
      "position": [
        0,
        0.07,
        0
      ],
      "size": [
        0.08,
        0.07,
        2.85
      ]
    },
    {
      "id": "bridge-z-belt",
      "component": "gantry",
      "type": "box",
      "group": "gantry-x",
      "color": "#262e32",
      "material": "dark",
      "position": [
        0.055,
        0.09,
        0
      ],
      "size": [
        0.018,
        0.018,
        2.7
      ]
    },
    {
      "id": "bridge-drive",
      "component": "gantry",
      "type": "box",
      "group": "gantry-x",
      "color": "#263f45",
      "material": "metal",
      "position": [
        0,
        0.13,
        -1.3
      ],
      "size": [
        0.16,
        0.14,
        0.18
      ]
    },
    {
      "id": "z-carriage",
      "component": "gantry",
      "type": "box",
      "group": "traverse-z",
      "color": "#263f45",
      "material": "metal",
      "position": [
        0,
        -0.02,
        0
      ],
      "size": [
        0.23,
        0.11,
        0.2
      ]
    },
    {
      "id": "lift-guide--0.065",
      "component": "gantry",
      "type": "cylinder",
      "group": "traverse-z",
      "color": "#c8d4d8",
      "material": "metal",
      "position": [
        -0.065,
        -0.39,
        0
      ],
      "radius": 0.013,
      "height": 0.78,
      "axis": "y"
    },
    {
      "id": "lift-guide-0.065",
      "component": "gantry",
      "type": "cylinder",
      "group": "traverse-z",
      "color": "#c8d4d8",
      "material": "metal",
      "position": [
        0.065,
        -0.39,
        0
      ],
      "radius": 0.013,
      "height": 0.78,
      "axis": "y"
    },
    {
      "id": "lift-motor",
      "component": "gantry",
      "type": "box",
      "group": "traverse-z",
      "color": "#263f45",
      "material": "metal",
      "position": [
        0,
        0.065,
        0.055
      ],
      "size": [
        0.14,
        0.13,
        0.14
      ]
    },
    {
      "id": "rgbd-camera",
      "component": "sensing",
      "type": "box",
      "group": "traverse-z",
      "color": "#263f45",
      "material": "metal",
      "position": [
        0.13,
        -0.1,
        0.03
      ],
      "size": [
        0.12,
        0.05,
        0.055
      ]
    },
    {
      "id": "camera-lens-0.1",
      "component": "sensing",
      "type": "cylinder",
      "group": "traverse-z",
      "color": "#60b8dd",
      "material": "glass",
      "position": [
        0.1,
        -0.128,
        0.06
      ],
      "radius": 0.012,
      "height": 0.01,
      "axis": "y"
    },
    {
      "id": "camera-lens-0.15",
      "component": "sensing",
      "type": "cylinder",
      "group": "traverse-z",
      "color": "#60b8dd",
      "material": "glass",
      "position": [
        0.15,
        -0.128,
        0.06
      ],
      "radius": 0.012,
      "height": 0.01,
      "axis": "y"
    },
    {
      "id": "lift-carriage",
      "component": "gantry",
      "type": "box",
      "group": "lift",
      "color": "#263f45",
      "material": "metal",
      "position": [
        0,
        -0.04,
        0
      ],
      "size": [
        0.19,
        0.09,
        0.15
      ]
    },
    {
      "id": "tool-master",
      "component": "dock",
      "type": "cylinder",
      "group": "lift",
      "color": "#c8d4d8",
      "material": "metal",
      "position": [
        0,
        -0.115,
        0
      ],
      "radius": 0.082,
      "height": 0.045,
      "axis": "y"
    },
    {
      "id": "tool-slave",
      "component": "dock",
      "type": "cylinder",
      "group": "lift",
      "color": "#e4b16b",
      "material": "metal",
      "position": [
        0,
        -0.15,
        0
      ],
      "radius": 0.074,
      "height": 0.025,
      "axis": "y"
    },
    {
      "id": "dock-seat-0",
      "component": "dock",
      "type": "cylinder",
      "group": "lift",
      "color": "#263f45",
      "material": "metal",
      "position": [
        0.056,
        -0.145,
        0.0
      ],
      "radius": 0.008,
      "height": 0.024,
      "axis": "y"
    },
    {
      "id": "dock-seat-1",
      "component": "dock",
      "type": "cylinder",
      "group": "lift",
      "color": "#263f45",
      "material": "metal",
      "position": [
        -0.02799999999999999,
        -0.145,
        0.04849742261192857
      ],
      "radius": 0.008,
      "height": 0.024,
      "axis": "y"
    },
    {
      "id": "dock-seat-2",
      "component": "dock",
      "type": "cylinder",
      "group": "lift",
      "color": "#263f45",
      "material": "metal",
      "position": [
        -0.028000000000000025,
        -0.145,
        -0.04849742261192855
      ],
      "radius": 0.008,
      "height": 0.024,
      "axis": "y"
    },
    {
      "id": "tool-lock-sensor",
      "component": "dock",
      "type": "box",
      "group": "lift",
      "color": "#80d5bf",
      "material": "metal",
      "position": [
        0.085,
        -0.12,
        0
      ],
      "size": [
        0.018,
        0.026,
        0.025
      ]
    },
    {
      "id": "cutter-actuator",
      "component": "harvest",
      "type": "box",
      "group": "lift",
      "color": "#263f45",
      "material": "metal",
      "position": [
        0,
        -0.2,
        0
      ],
      "size": [
        0.075,
        0.06,
        0.065
      ]
    },
    {
      "id": "holding-finger--0.052",
      "component": "harvest",
      "type": "box",
      "group": "jaw-left",
      "color": "#e8ece6",
      "material": "polymer",
      "position": [
        0.01800000000000001,
        -0.04000000000000001,
        0
      ],
      "size": [
        0.024,
        0.09,
        0.09
      ]
    },
    {
      "id": "holding-pad--0.052",
      "component": "harvest",
      "type": "box",
      "group": "jaw-left",
      "color": "#80d5bf",
      "material": "polymer",
      "position": [
        0.031000000000000007,
        -0.06500000000000003,
        0
      ],
      "size": [
        0.012,
        0.043,
        0.07
      ]
    },
    {
      "id": "holding-finger-0.052",
      "component": "harvest",
      "type": "box",
      "group": "jaw-right",
      "color": "#e8ece6",
      "material": "polymer",
      "position": [
        -0.01800000000000001,
        -0.04000000000000001,
        0
      ],
      "size": [
        0.024,
        0.09,
        0.09
      ]
    },
    {
      "id": "holding-pad-0.052",
      "component": "harvest",
      "type": "box",
      "group": "jaw-right",
      "color": "#80d5bf",
      "material": "polymer",
      "position": [
        -0.031000000000000007,
        -0.06500000000000003,
        0
      ],
      "size": [
        0.012,
        0.043,
        0.07
      ]
    },
    {
      "id": "guarded-push-blade",
      "component": "harvest",
      "type": "box",
      "group": "blade-slide",
      "color": "#e9f1ef",
      "material": "metal",
      "position": [
        0,
        0,
        0
      ],
      "size": [
        0.11,
        0.005,
        0.035
      ]
    },
    {
      "id": "blade-guard",
      "component": "harvest",
      "type": "box",
      "group": "lift",
      "color": "#e4b16b",
      "material": "polymer",
      "position": [
        0,
        -0.268,
        0.063
      ],
      "size": [
        0.13,
        0.035,
        0.012
      ]
    },
    {
      "id": "channel-floor-0",
      "component": "root",
      "type": "box",
      "group": "row-0",
      "color": "#e8ece6",
      "material": "polymer",
      "position": [
        0,
        0,
        0
      ],
      "size": [
        1.95,
        0.028,
        0.24
      ]
    },
    {
      "id": "channel-wall-0--1",
      "component": "root",
      "type": "box",
      "group": "row-0",
      "color": "#e8ece6",
      "material": "polymer",
      "position": [
        0,
        0.055,
        -0.115
      ],
      "size": [
        1.95,
        0.11,
        0.015
      ]
    },
    {
      "id": "channel-wall-0-1",
      "component": "root",
      "type": "box",
      "group": "row-0",
      "color": "#e8ece6",
      "material": "polymer",
      "position": [
        0,
        0.055,
        0.115
      ],
      "size": [
        1.95,
        0.11,
        0.015
      ]
    },
    {
      "id": "channel-lid-0",
      "component": "root",
      "type": "box",
      "group": "row-0",
      "color": "#bccfc6",
      "material": "polymer",
      "position": [
        0,
        0.115,
        0
      ],
      "size": [
        1.95,
        0.018,
        0.24
      ],
      "cutaway": true
    },
    {
      "id": "nutrient-film-0",
      "component": "nutrient",
      "type": "box",
      "group": "row-0",
      "color": "#60b8dd",
      "material": "water",
      "position": [
        0,
        0.022,
        0
      ],
      "size": [
        1.9,
        0.008,
        0.2
      ]
    },
    {
      "id": "plant-collar-0-0",
      "component": "root",
      "type": "cylinder",
      "group": "row-0",
      "color": "#263f45",
      "material": "polymer",
      "position": [
        -0.75,
        0.122,
        0
      ],
      "radius": 0.056,
      "height": 0.025,
      "axis": "y"
    },
    {
      "id": "plant-plug-0-0",
      "component": "nursery",
      "type": "cylinder",
      "group": "row-0",
      "color": "#a08d67",
      "material": "sorbent",
      "position": [
        -0.75,
        0.08,
        0
      ],
      "radius": 0.024,
      "height": 0.11,
      "axis": "y"
    },
    {
      "id": "root-bundle-0-0",
      "component": "root",
      "type": "pipe",
      "group": "row-0",
      "color": "#d5c8a1",
      "material": "plant",
      "path": [
        [
          -0.75,
          0.07,
          0
        ],
        [
          -0.732,
          0.045,
          0.015
        ],
        [
          -0.762,
          0.03,
          0.028
        ],
        [
          -0.705,
          0.025,
          0.04
        ]
      ],
      "radius": 0.009
    },
    {
      "id": "plant-stem-0-0",
      "component": "root",
      "type": "cylinder",
      "group": "row-0",
      "color": "#81aa68",
      "material": "plant",
      "position": [
        -0.75,
        0.18,
        0
      ],
      "radius": 0.012,
      "height": 0.12,
      "axis": "y"
    },
    {
      "id": "leaf-0-0-0",
      "component": "root",
      "type": "panel",
      "group": "row-0",
      "color": "#77a767",
      "material": "plant",
      "vertices": [
        [
          -0.75,
          0.18,
          0
        ],
        [
          -0.8250000000000001,
          0.24,
          -0.057999999999999996
        ],
        [
          -0.8,
          0.29,
          -0.018
        ],
        [
          -0.775,
          0.24,
          0.027
        ]
      ],
      "thickness": 0.003
    },
    {
      "id": "leaf-0-0-1",
      "component": "root",
      "type": "panel",
      "group": "row-0",
      "color": "#9cbb71",
      "material": "plant",
      "vertices": [
        [
          -0.75,
          0.18,
          0
        ],
        [
          -0.725,
          0.24,
          -0.015
        ],
        [
          -0.7,
          0.29,
          0.025
        ],
        [
          -0.6749999999999999,
          0.24,
          0.07
        ]
      ],
      "thickness": 0.003
    },
    {
      "id": "plant-collar-0-1",
      "component": "root",
      "type": "cylinder",
      "group": "row-0",
      "color": "#263f45",
      "material": "polymer",
      "position": [
        -0.45,
        0.122,
        0
      ],
      "radius": 0.056,
      "height": 0.025,
      "axis": "y"
    },
    {
      "id": "plant-plug-0-1",
      "component": "nursery",
      "type": "cylinder",
      "group": "row-0",
      "color": "#a08d67",
      "material": "sorbent",
      "position": [
        -0.45,
        0.08,
        0
      ],
      "radius": 0.024,
      "height": 0.11,
      "axis": "y"
    },
    {
      "id": "root-bundle-0-1",
      "component": "root",
      "type": "pipe",
      "group": "row-0",
      "color": "#d5c8a1",
      "material": "plant",
      "path": [
        [
          -0.45,
          0.07,
          0
        ],
        [
          -0.432,
          0.045,
          0.015
        ],
        [
          -0.462,
          0.03,
          0.028
        ],
        [
          -0.405,
          0.025,
          0.04
        ]
      ],
      "radius": 0.009
    },
    {
      "id": "plant-stem-0-1",
      "component": "root",
      "type": "cylinder",
      "group": "row-0",
      "color": "#81aa68",
      "material": "plant",
      "position": [
        -0.45,
        0.18,
        0
      ],
      "radius": 0.012,
      "height": 0.12,
      "axis": "y"
    },
    {
      "id": "leaf-0-1-0",
      "component": "root",
      "type": "panel",
      "group": "row-0",
      "color": "#77a767",
      "material": "plant",
      "vertices": [
        [
          -0.45,
          0.18,
          0
        ],
        [
          -0.525,
          0.24,
          -0.057999999999999996
        ],
        [
          -0.5,
          0.29,
          -0.018
        ],
        [
          -0.475,
          0.24,
          0.027
        ]
      ],
      "thickness": 0.003
    },
    {
      "id": "leaf-0-1-1",
      "component": "root",
      "type": "panel",
      "group": "row-0",
      "color": "#9cbb71",
      "material": "plant",
      "vertices": [
        [
          -0.45,
          0.18,
          0
        ],
        [
          -0.42500000000000004,
          0.24,
          -0.015
        ],
        [
          -0.4,
          0.29,
          0.025
        ],
        [
          -0.375,
          0.24,
          0.07
        ]
      ],
      "thickness": 0.003
    },
    {
      "id": "plant-collar-0-2",
      "component": "root",
      "type": "cylinder",
      "group": "row-0",
      "color": "#263f45",
      "material": "polymer",
      "position": [
        -0.15,
        0.122,
        0
      ],
      "radius": 0.056,
      "height": 0.025,
      "axis": "y"
    },
    {
      "id": "plant-plug-0-2",
      "component": "nursery",
      "type": "cylinder",
      "group": "row-0",
      "color": "#a08d67",
      "material": "sorbent",
      "position": [
        -0.15,
        0.08,
        0
      ],
      "radius": 0.024,
      "height": 0.11,
      "axis": "y"
    },
    {
      "id": "root-bundle-0-2",
      "component": "root",
      "type": "pipe",
      "group": "row-0",
      "color": "#d5c8a1",
      "material": "plant",
      "path": [
        [
          -0.15,
          0.07,
          0
        ],
        [
          -0.132,
          0.045,
          0.015
        ],
        [
          -0.162,
          0.03,
          0.028
        ],
        [
          -0.105,
          0.025,
          0.04
        ]
      ],
      "radius": 0.009
    },
    {
      "id": "plant-stem-0-2",
      "component": "root",
      "type": "cylinder",
      "group": "row-0",
      "color": "#81aa68",
      "material": "plant",
      "position": [
        -0.15,
        0.18,
        0
      ],
      "radius": 0.012,
      "height": 0.12,
      "axis": "y"
    },
    {
      "id": "leaf-0-2-0",
      "component": "root",
      "type": "panel",
      "group": "row-0",
      "color": "#77a767",
      "material": "plant",
      "vertices": [
        [
          -0.15,
          0.18,
          0
        ],
        [
          -0.225,
          0.24,
          -0.057999999999999996
        ],
        [
          -0.2,
          0.29,
          -0.018
        ],
        [
          -0.17500000000000002,
          0.24,
          0.027
        ]
      ],
      "thickness": 0.003
    },
    {
      "id": "leaf-0-2-1",
      "component": "root",
      "type": "panel",
      "group": "row-0",
      "color": "#9cbb71",
      "material": "plant",
      "vertices": [
        [
          -0.15,
          0.18,
          0
        ],
        [
          -0.125,
          0.24,
          -0.015
        ],
        [
          -0.09999999999999999,
          0.29,
          0.025
        ],
        [
          -0.07499999999999998,
          0.24,
          0.07
        ]
      ],
      "thickness": 0.003
    },
    {
      "id": "plant-collar-0-3",
      "component": "root",
      "type": "cylinder",
      "group": "row-0",
      "color": "#263f45",
      "material": "polymer",
      "position": [
        0.15,
        0.122,
        0
      ],
      "radius": 0.056,
      "height": 0.025,
      "axis": "y"
    },
    {
      "id": "plant-plug-0-3",
      "component": "nursery",
      "type": "cylinder",
      "group": "row-0",
      "color": "#a08d67",
      "material": "sorbent",
      "position": [
        0.15,
        0.08,
        0
      ],
      "radius": 0.024,
      "height": 0.11,
      "axis": "y"
    },
    {
      "id": "root-bundle-0-3",
      "component": "root",
      "type": "pipe",
      "group": "row-0",
      "color": "#d5c8a1",
      "material": "plant",
      "path": [
        [
          0.15,
          0.07,
          0
        ],
        [
          0.16799999999999998,
          0.045,
          0.015
        ],
        [
          0.13799999999999998,
          0.03,
          0.028
        ],
        [
          0.195,
          0.025,
          0.04
        ]
      ],
      "radius": 0.009
    },
    {
      "id": "plant-stem-0-3",
      "component": "root",
      "type": "cylinder",
      "group": "row-0",
      "color": "#81aa68",
      "material": "plant",
      "position": [
        0.15,
        0.18,
        0
      ],
      "radius": 0.012,
      "height": 0.12,
      "axis": "y"
    },
    {
      "id": "leaf-0-3-0",
      "component": "root",
      "type": "panel",
      "group": "row-0",
      "color": "#77a767",
      "material": "plant",
      "vertices": [
        [
          0.15,
          0.18,
          0
        ],
        [
          0.07499999999999998,
          0.24,
          -0.057999999999999996
        ],
        [
          0.09999999999999999,
          0.29,
          -0.018
        ],
        [
          0.125,
          0.24,
          0.027
        ]
      ],
      "thickness": 0.003
    },
    {
      "id": "leaf-0-3-1",
      "component": "root",
      "type": "panel",
      "group": "row-0",
      "color": "#9cbb71",
      "material": "plant",
      "vertices": [
        [
          0.15,
          0.18,
          0
        ],
        [
          0.17500000000000002,
          0.24,
          -0.015
        ],
        [
          0.2,
          0.29,
          0.025
        ],
        [
          0.225,
          0.24,
          0.07
        ]
      ],
      "thickness": 0.003
    },
    {
      "id": "plant-collar-0-4",
      "component": "root",
      "type": "cylinder",
      "group": "row-0",
      "color": "#263f45",
      "material": "polymer",
      "position": [
        0.45,
        0.122,
        0
      ],
      "radius": 0.056,
      "height": 0.025,
      "axis": "y"
    },
    {
      "id": "plant-plug-0-4",
      "component": "nursery",
      "type": "cylinder",
      "group": "row-0",
      "color": "#a08d67",
      "material": "sorbent",
      "position": [
        0.45,
        0.08,
        0
      ],
      "radius": 0.024,
      "height": 0.11,
      "axis": "y"
    },
    {
      "id": "root-bundle-0-4",
      "component": "root",
      "type": "pipe",
      "group": "row-0",
      "color": "#d5c8a1",
      "material": "plant",
      "path": [
        [
          0.45,
          0.07,
          0
        ],
        [
          0.468,
          0.045,
          0.015
        ],
        [
          0.438,
          0.03,
          0.028
        ],
        [
          0.495,
          0.025,
          0.04
        ]
      ],
      "radius": 0.009
    },
    {
      "id": "plant-stem-0-4",
      "component": "root",
      "type": "cylinder",
      "group": "row-0",
      "color": "#81aa68",
      "material": "plant",
      "position": [
        0.45,
        0.18,
        0
      ],
      "radius": 0.012,
      "height": 0.12,
      "axis": "y"
    },
    {
      "id": "leaf-0-4-0",
      "component": "root",
      "type": "panel",
      "group": "row-0",
      "color": "#77a767",
      "material": "plant",
      "vertices": [
        [
          0.45,
          0.18,
          0
        ],
        [
          0.375,
          0.24,
          -0.057999999999999996
        ],
        [
          0.4,
          0.29,
          -0.018
        ],
        [
          0.42500000000000004,
          0.24,
          0.027
        ]
      ],
      "thickness": 0.003
    },
    {
      "id": "leaf-0-4-1",
      "component": "root",
      "type": "panel",
      "group": "row-0",
      "color": "#9cbb71",
      "material": "plant",
      "vertices": [
        [
          0.45,
          0.18,
          0
        ],
        [
          0.475,
          0.24,
          -0.015
        ],
        [
          0.5,
          0.29,
          0.025
        ],
        [
          0.525,
          0.24,
          0.07
        ]
      ],
      "thickness": 0.003
    },
    {
      "id": "plant-collar-0-5",
      "component": "root",
      "type": "cylinder",
      "group": "row-0",
      "color": "#263f45",
      "material": "polymer",
      "position": [
        0.75,
        0.122,
        0
      ],
      "radius": 0.056,
      "height": 0.025,
      "axis": "y"
    },
    {
      "id": "plant-plug-0-5",
      "component": "nursery",
      "type": "cylinder",
      "group": "row-0",
      "color": "#a08d67",
      "material": "sorbent",
      "position": [
        0.75,
        0.08,
        0
      ],
      "radius": 0.024,
      "height": 0.11,
      "axis": "y"
    },
    {
      "id": "root-bundle-0-5",
      "component": "root",
      "type": "pipe",
      "group": "row-0",
      "color": "#d5c8a1",
      "material": "plant",
      "path": [
        [
          0.75,
          0.07,
          0
        ],
        [
          0.768,
          0.045,
          0.015
        ],
        [
          0.738,
          0.03,
          0.028
        ],
        [
          0.795,
          0.025,
          0.04
        ]
      ],
      "radius": 0.009
    },
    {
      "id": "plant-stem-0-5",
      "component": "root",
      "type": "cylinder",
      "group": "row-0",
      "color": "#81aa68",
      "material": "plant",
      "position": [
        0.75,
        0.18,
        0
      ],
      "radius": 0.012,
      "height": 0.12,
      "axis": "y"
    },
    {
      "id": "leaf-0-5-0",
      "component": "root",
      "type": "panel",
      "group": "row-0",
      "color": "#77a767",
      "material": "plant",
      "vertices": [
        [
          0.75,
          0.18,
          0
        ],
        [
          0.6749999999999999,
          0.24,
          -0.057999999999999996
        ],
        [
          0.7,
          0.29,
          -0.018
        ],
        [
          0.725,
          0.24,
          0.027
        ]
      ],
      "thickness": 0.003
    },
    {
      "id": "leaf-0-5-1",
      "component": "root",
      "type": "panel",
      "group": "row-0",
      "color": "#9cbb71",
      "material": "plant",
      "vertices": [
        [
          0.75,
          0.18,
          0
        ],
        [
          0.775,
          0.24,
          -0.015
        ],
        [
          0.8,
          0.29,
          0.025
        ],
        [
          0.8250000000000001,
          0.24,
          0.07
        ]
      ],
      "thickness": 0.003
    },
    {
      "id": "row-inlet-0",
      "component": "nutrient",
      "type": "pipe",
      "group": null,
      "color": "#60b8dd",
      "material": "water",
      "path": [
        [
          -1.08,
          0.98,
          -0.48
        ],
        [
          -0.99,
          0.98,
          -0.48
        ],
        [
          -0.96,
          0.925,
          -0.48
        ]
      ],
      "radius": 0.012
    },
    {
      "id": "row-return-0",
      "component": "nutrient",
      "type": "pipe",
      "group": null,
      "color": "#60b8dd",
      "material": "water",
      "path": [
        [
          0.96,
          0.92,
          -0.48
        ],
        [
          1.06,
          0.88,
          -0.48
        ],
        [
          1.06,
          0.63,
          -0.48
        ]
      ],
      "radius": 0.018
    },
    {
      "id": "row-valve-0",
      "component": "nutrient",
      "type": "cylinder",
      "group": null,
      "color": "#e4b16b",
      "material": "metal",
      "position": [
        -1.045,
        0.98,
        -0.48
      ],
      "radius": 0.025,
      "height": 0.04,
      "axis": "x"
    },
    {
      "id": "channel-floor-1",
      "component": "root",
      "type": "box",
      "group": "row-1",
      "color": "#e8ece6",
      "material": "polymer",
      "position": [
        0,
        0,
        0
      ],
      "size": [
        1.95,
        0.028,
        0.24
      ]
    },
    {
      "id": "channel-wall-1--1",
      "component": "root",
      "type": "box",
      "group": "row-1",
      "color": "#e8ece6",
      "material": "polymer",
      "position": [
        0,
        0.055,
        -0.115
      ],
      "size": [
        1.95,
        0.11,
        0.015
      ]
    },
    {
      "id": "channel-wall-1-1",
      "component": "root",
      "type": "box",
      "group": "row-1",
      "color": "#e8ece6",
      "material": "polymer",
      "position": [
        0,
        0.055,
        0.115
      ],
      "size": [
        1.95,
        0.11,
        0.015
      ]
    },
    {
      "id": "channel-lid-1",
      "component": "root",
      "type": "box",
      "group": "row-1",
      "color": "#bccfc6",
      "material": "polymer",
      "position": [
        0,
        0.115,
        0
      ],
      "size": [
        1.95,
        0.018,
        0.24
      ],
      "cutaway": true
    },
    {
      "id": "nutrient-film-1",
      "component": "nutrient",
      "type": "box",
      "group": "row-1",
      "color": "#60b8dd",
      "material": "water",
      "position": [
        0,
        0.022,
        0
      ],
      "size": [
        1.9,
        0.008,
        0.2
      ]
    },
    {
      "id": "plant-collar-1-0",
      "component": "root",
      "type": "cylinder",
      "group": "row-1",
      "color": "#263f45",
      "material": "polymer",
      "position": [
        -0.75,
        0.122,
        0
      ],
      "radius": 0.056,
      "height": 0.025,
      "axis": "y"
    },
    {
      "id": "plant-plug-1-0",
      "component": "nursery",
      "type": "cylinder",
      "group": "row-1",
      "color": "#a08d67",
      "material": "sorbent",
      "position": [
        -0.75,
        0.08,
        0
      ],
      "radius": 0.024,
      "height": 0.11,
      "axis": "y"
    },
    {
      "id": "root-bundle-1-0",
      "component": "root",
      "type": "pipe",
      "group": "row-1",
      "color": "#d5c8a1",
      "material": "plant",
      "path": [
        [
          -0.75,
          0.07,
          0
        ],
        [
          -0.732,
          0.045,
          0.015
        ],
        [
          -0.762,
          0.03,
          0.028
        ],
        [
          -0.705,
          0.025,
          0.04
        ]
      ],
      "radius": 0.009
    },
    {
      "id": "plant-stem-1-0",
      "component": "root",
      "type": "cylinder",
      "group": "row-1",
      "color": "#81aa68",
      "material": "plant",
      "position": [
        -0.75,
        0.18,
        0
      ],
      "radius": 0.012,
      "height": 0.12,
      "axis": "y"
    },
    {
      "id": "leaf-1-0-0",
      "component": "root",
      "type": "panel",
      "group": "row-1",
      "color": "#77a767",
      "material": "plant",
      "vertices": [
        [
          -0.75,
          0.18,
          0
        ],
        [
          -0.8250000000000001,
          0.24,
          -0.057999999999999996
        ],
        [
          -0.8,
          0.29,
          -0.018
        ],
        [
          -0.775,
          0.24,
          0.027
        ]
      ],
      "thickness": 0.003
    },
    {
      "id": "leaf-1-0-1",
      "component": "root",
      "type": "panel",
      "group": "row-1",
      "color": "#9cbb71",
      "material": "plant",
      "vertices": [
        [
          -0.75,
          0.18,
          0
        ],
        [
          -0.725,
          0.24,
          -0.015
        ],
        [
          -0.7,
          0.29,
          0.025
        ],
        [
          -0.6749999999999999,
          0.24,
          0.07
        ]
      ],
      "thickness": 0.003
    },
    {
      "id": "plant-collar-1-1",
      "component": "root",
      "type": "cylinder",
      "group": "row-1",
      "color": "#263f45",
      "material": "polymer",
      "position": [
        -0.45,
        0.122,
        0
      ],
      "radius": 0.056,
      "height": 0.025,
      "axis": "y"
    },
    {
      "id": "plant-plug-1-1",
      "component": "nursery",
      "type": "cylinder",
      "group": "row-1",
      "color": "#a08d67",
      "material": "sorbent",
      "position": [
        -0.45,
        0.08,
        0
      ],
      "radius": 0.024,
      "height": 0.11,
      "axis": "y"
    },
    {
      "id": "root-bundle-1-1",
      "component": "root",
      "type": "pipe",
      "group": "row-1",
      "color": "#d5c8a1",
      "material": "plant",
      "path": [
        [
          -0.45,
          0.07,
          0
        ],
        [
          -0.432,
          0.045,
          0.015
        ],
        [
          -0.462,
          0.03,
          0.028
        ],
        [
          -0.405,
          0.025,
          0.04
        ]
      ],
      "radius": 0.009
    },
    {
      "id": "plant-stem-1-1",
      "component": "root",
      "type": "cylinder",
      "group": "row-1",
      "color": "#81aa68",
      "material": "plant",
      "position": [
        -0.45,
        0.18,
        0
      ],
      "radius": 0.012,
      "height": 0.12,
      "axis": "y"
    },
    {
      "id": "leaf-1-1-0",
      "component": "root",
      "type": "panel",
      "group": "row-1",
      "color": "#77a767",
      "material": "plant",
      "vertices": [
        [
          -0.45,
          0.18,
          0
        ],
        [
          -0.525,
          0.24,
          -0.057999999999999996
        ],
        [
          -0.5,
          0.29,
          -0.018
        ],
        [
          -0.475,
          0.24,
          0.027
        ]
      ],
      "thickness": 0.003
    },
    {
      "id": "leaf-1-1-1",
      "component": "root",
      "type": "panel",
      "group": "row-1",
      "color": "#9cbb71",
      "material": "plant",
      "vertices": [
        [
          -0.45,
          0.18,
          0
        ],
        [
          -0.42500000000000004,
          0.24,
          -0.015
        ],
        [
          -0.4,
          0.29,
          0.025
        ],
        [
          -0.375,
          0.24,
          0.07
        ]
      ],
      "thickness": 0.003
    },
    {
      "id": "plant-collar-1-2",
      "component": "root",
      "type": "cylinder",
      "group": "row-1",
      "color": "#263f45",
      "material": "polymer",
      "position": [
        -0.15,
        0.122,
        0
      ],
      "radius": 0.056,
      "height": 0.025,
      "axis": "y"
    },
    {
      "id": "plant-plug-1-2",
      "component": "nursery",
      "type": "cylinder",
      "group": "row-1",
      "color": "#a08d67",
      "material": "sorbent",
      "position": [
        -0.15,
        0.08,
        0
      ],
      "radius": 0.024,
      "height": 0.11,
      "axis": "y"
    },
    {
      "id": "root-bundle-1-2",
      "component": "root",
      "type": "pipe",
      "group": "row-1",
      "color": "#d5c8a1",
      "material": "plant",
      "path": [
        [
          -0.15,
          0.07,
          0
        ],
        [
          -0.132,
          0.045,
          0.015
        ],
        [
          -0.162,
          0.03,
          0.028
        ],
        [
          -0.105,
          0.025,
          0.04
        ]
      ],
      "radius": 0.009
    },
    {
      "id": "plant-stem-1-2",
      "component": "root",
      "type": "cylinder",
      "group": "row-1",
      "color": "#81aa68",
      "material": "plant",
      "position": [
        -0.15,
        0.18,
        0
      ],
      "radius": 0.012,
      "height": 0.12,
      "axis": "y"
    },
    {
      "id": "leaf-1-2-0",
      "component": "root",
      "type": "panel",
      "group": "row-1",
      "color": "#77a767",
      "material": "plant",
      "vertices": [
        [
          -0.15,
          0.18,
          0
        ],
        [
          -0.225,
          0.24,
          -0.057999999999999996
        ],
        [
          -0.2,
          0.29,
          -0.018
        ],
        [
          -0.17500000000000002,
          0.24,
          0.027
        ]
      ],
      "thickness": 0.003
    },
    {
      "id": "leaf-1-2-1",
      "component": "root",
      "type": "panel",
      "group": "row-1",
      "color": "#9cbb71",
      "material": "plant",
      "vertices": [
        [
          -0.15,
          0.18,
          0
        ],
        [
          -0.125,
          0.24,
          -0.015
        ],
        [
          -0.09999999999999999,
          0.29,
          0.025
        ],
        [
          -0.07499999999999998,
          0.24,
          0.07
        ]
      ],
      "thickness": 0.003
    },
    {
      "id": "plant-collar-1-3",
      "component": "root",
      "type": "cylinder",
      "group": "row-1",
      "color": "#263f45",
      "material": "polymer",
      "position": [
        0.15,
        0.122,
        0
      ],
      "radius": 0.056,
      "height": 0.025,
      "axis": "y"
    },
    {
      "id": "plant-plug-1-3",
      "component": "nursery",
      "type": "cylinder",
      "group": "row-1",
      "color": "#a08d67",
      "material": "sorbent",
      "position": [
        0.15,
        0.08,
        0
      ],
      "radius": 0.024,
      "height": 0.11,
      "axis": "y"
    },
    {
      "id": "root-bundle-1-3",
      "component": "root",
      "type": "pipe",
      "group": "row-1",
      "color": "#d5c8a1",
      "material": "plant",
      "path": [
        [
          0.15,
          0.07,
          0
        ],
        [
          0.16799999999999998,
          0.045,
          0.015
        ],
        [
          0.13799999999999998,
          0.03,
          0.028
        ],
        [
          0.195,
          0.025,
          0.04
        ]
      ],
      "radius": 0.009
    },
    {
      "id": "plant-stem-1-3",
      "component": "root",
      "type": "cylinder",
      "group": "row-1",
      "color": "#81aa68",
      "material": "plant",
      "position": [
        0.15,
        0.18,
        0
      ],
      "radius": 0.012,
      "height": 0.12,
      "axis": "y"
    },
    {
      "id": "leaf-1-3-0",
      "component": "root",
      "type": "panel",
      "group": "row-1",
      "color": "#77a767",
      "material": "plant",
      "vertices": [
        [
          0.15,
          0.18,
          0
        ],
        [
          0.07499999999999998,
          0.24,
          -0.057999999999999996
        ],
        [
          0.09999999999999999,
          0.29,
          -0.018
        ],
        [
          0.125,
          0.24,
          0.027
        ]
      ],
      "thickness": 0.003
    },
    {
      "id": "leaf-1-3-1",
      "component": "root",
      "type": "panel",
      "group": "row-1",
      "color": "#9cbb71",
      "material": "plant",
      "vertices": [
        [
          0.15,
          0.18,
          0
        ],
        [
          0.17500000000000002,
          0.24,
          -0.015
        ],
        [
          0.2,
          0.29,
          0.025
        ],
        [
          0.225,
          0.24,
          0.07
        ]
      ],
      "thickness": 0.003
    },
    {
      "id": "plant-collar-1-4",
      "component": "root",
      "type": "cylinder",
      "group": "row-1",
      "color": "#263f45",
      "material": "polymer",
      "position": [
        0.45,
        0.122,
        0
      ],
      "radius": 0.056,
      "height": 0.025,
      "axis": "y"
    },
    {
      "id": "plant-plug-1-4",
      "component": "nursery",
      "type": "cylinder",
      "group": "row-1",
      "color": "#a08d67",
      "material": "sorbent",
      "position": [
        0.45,
        0.08,
        0
      ],
      "radius": 0.024,
      "height": 0.11,
      "axis": "y"
    },
    {
      "id": "root-bundle-1-4",
      "component": "root",
      "type": "pipe",
      "group": "row-1",
      "color": "#d5c8a1",
      "material": "plant",
      "path": [
        [
          0.45,
          0.07,
          0
        ],
        [
          0.468,
          0.045,
          0.015
        ],
        [
          0.438,
          0.03,
          0.028
        ],
        [
          0.495,
          0.025,
          0.04
        ]
      ],
      "radius": 0.009
    },
    {
      "id": "plant-stem-1-4",
      "component": "root",
      "type": "cylinder",
      "group": "row-1",
      "color": "#81aa68",
      "material": "plant",
      "position": [
        0.45,
        0.18,
        0
      ],
      "radius": 0.012,
      "height": 0.12,
      "axis": "y"
    },
    {
      "id": "leaf-1-4-0",
      "component": "root",
      "type": "panel",
      "group": "row-1",
      "color": "#77a767",
      "material": "plant",
      "vertices": [
        [
          0.45,
          0.18,
          0
        ],
        [
          0.375,
          0.24,
          -0.057999999999999996
        ],
        [
          0.4,
          0.29,
          -0.018
        ],
        [
          0.42500000000000004,
          0.24,
          0.027
        ]
      ],
      "thickness": 0.003
    },
    {
      "id": "leaf-1-4-1",
      "component": "root",
      "type": "panel",
      "group": "row-1",
      "color": "#9cbb71",
      "material": "plant",
      "vertices": [
        [
          0.45,
          0.18,
          0
        ],
        [
          0.475,
          0.24,
          -0.015
        ],
        [
          0.5,
          0.29,
          0.025
        ],
        [
          0.525,
          0.24,
          0.07
        ]
      ],
      "thickness": 0.003
    },
    {
      "id": "plant-collar-1-5",
      "component": "root",
      "type": "cylinder",
      "group": "row-1",
      "color": "#263f45",
      "material": "polymer",
      "position": [
        0.75,
        0.122,
        0
      ],
      "radius": 0.056,
      "height": 0.025,
      "axis": "y"
    },
    {
      "id": "plant-plug-1-5",
      "component": "nursery",
      "type": "cylinder",
      "group": "row-1",
      "color": "#a08d67",
      "material": "sorbent",
      "position": [
        0.75,
        0.08,
        0
      ],
      "radius": 0.024,
      "height": 0.11,
      "axis": "y"
    },
    {
      "id": "root-bundle-1-5",
      "component": "root",
      "type": "pipe",
      "group": "row-1",
      "color": "#d5c8a1",
      "material": "plant",
      "path": [
        [
          0.75,
          0.07,
          0
        ],
        [
          0.768,
          0.045,
          0.015
        ],
        [
          0.738,
          0.03,
          0.028
        ],
        [
          0.795,
          0.025,
          0.04
        ]
      ],
      "radius": 0.009
    },
    {
      "id": "plant-stem-1-5",
      "component": "root",
      "type": "cylinder",
      "group": "row-1",
      "color": "#81aa68",
      "material": "plant",
      "position": [
        0.75,
        0.18,
        0
      ],
      "radius": 0.012,
      "height": 0.12,
      "axis": "y"
    },
    {
      "id": "leaf-1-5-0",
      "component": "root",
      "type": "panel",
      "group": "row-1",
      "color": "#77a767",
      "material": "plant",
      "vertices": [
        [
          0.75,
          0.18,
          0
        ],
        [
          0.6749999999999999,
          0.24,
          -0.057999999999999996
        ],
        [
          0.7,
          0.29,
          -0.018
        ],
        [
          0.725,
          0.24,
          0.027
        ]
      ],
      "thickness": 0.003
    },
    {
      "id": "leaf-1-5-1",
      "component": "root",
      "type": "panel",
      "group": "row-1",
      "color": "#9cbb71",
      "material": "plant",
      "vertices": [
        [
          0.75,
          0.18,
          0
        ],
        [
          0.775,
          0.24,
          -0.015
        ],
        [
          0.8,
          0.29,
          0.025
        ],
        [
          0.8250000000000001,
          0.24,
          0.07
        ]
      ],
      "thickness": 0.003
    },
    {
      "id": "row-inlet-1",
      "component": "nutrient",
      "type": "pipe",
      "group": null,
      "color": "#60b8dd",
      "material": "water",
      "path": [
        [
          -1.08,
          0.98,
          -0.16
        ],
        [
          -0.99,
          0.98,
          -0.16
        ],
        [
          -0.96,
          0.925,
          -0.16
        ]
      ],
      "radius": 0.012
    },
    {
      "id": "row-return-1",
      "component": "nutrient",
      "type": "pipe",
      "group": null,
      "color": "#60b8dd",
      "material": "water",
      "path": [
        [
          0.96,
          0.92,
          -0.16
        ],
        [
          1.06,
          0.88,
          -0.16
        ],
        [
          1.06,
          0.63,
          -0.16
        ]
      ],
      "radius": 0.018
    },
    {
      "id": "row-valve-1",
      "component": "nutrient",
      "type": "cylinder",
      "group": null,
      "color": "#e4b16b",
      "material": "metal",
      "position": [
        -1.045,
        0.98,
        -0.16
      ],
      "radius": 0.025,
      "height": 0.04,
      "axis": "x"
    },
    {
      "id": "channel-floor-2",
      "component": "root",
      "type": "box",
      "group": "row-2",
      "color": "#e8ece6",
      "material": "polymer",
      "position": [
        0,
        0,
        0
      ],
      "size": [
        1.95,
        0.028,
        0.24
      ]
    },
    {
      "id": "channel-wall-2--1",
      "component": "root",
      "type": "box",
      "group": "row-2",
      "color": "#e8ece6",
      "material": "polymer",
      "position": [
        0,
        0.055,
        -0.115
      ],
      "size": [
        1.95,
        0.11,
        0.015
      ]
    },
    {
      "id": "channel-wall-2-1",
      "component": "root",
      "type": "box",
      "group": "row-2",
      "color": "#e8ece6",
      "material": "polymer",
      "position": [
        0,
        0.055,
        0.115
      ],
      "size": [
        1.95,
        0.11,
        0.015
      ]
    },
    {
      "id": "channel-lid-2",
      "component": "root",
      "type": "box",
      "group": "row-2",
      "color": "#bccfc6",
      "material": "polymer",
      "position": [
        0,
        0.115,
        0
      ],
      "size": [
        1.95,
        0.018,
        0.24
      ],
      "cutaway": true
    },
    {
      "id": "nutrient-film-2",
      "component": "nutrient",
      "type": "box",
      "group": "row-2",
      "color": "#60b8dd",
      "material": "water",
      "position": [
        0,
        0.022,
        0
      ],
      "size": [
        1.9,
        0.008,
        0.2
      ]
    },
    {
      "id": "plant-collar-2-0",
      "component": "root",
      "type": "cylinder",
      "group": "row-2",
      "color": "#263f45",
      "material": "polymer",
      "position": [
        -0.75,
        0.122,
        0
      ],
      "radius": 0.056,
      "height": 0.025,
      "axis": "y"
    },
    {
      "id": "plant-plug-2-0",
      "component": "nursery",
      "type": "cylinder",
      "group": "row-2",
      "color": "#a08d67",
      "material": "sorbent",
      "position": [
        -0.75,
        0.08,
        0
      ],
      "radius": 0.024,
      "height": 0.11,
      "axis": "y"
    },
    {
      "id": "root-bundle-2-0",
      "component": "root",
      "type": "pipe",
      "group": "row-2",
      "color": "#d5c8a1",
      "material": "plant",
      "path": [
        [
          -0.75,
          0.07,
          0
        ],
        [
          -0.732,
          0.045,
          0.015
        ],
        [
          -0.762,
          0.03,
          0.028
        ],
        [
          -0.705,
          0.025,
          0.04
        ]
      ],
      "radius": 0.009
    },
    {
      "id": "plant-stem-2-0",
      "component": "root",
      "type": "cylinder",
      "group": "row-2",
      "color": "#81aa68",
      "material": "plant",
      "position": [
        -0.75,
        0.18,
        0
      ],
      "radius": 0.012,
      "height": 0.12,
      "axis": "y"
    },
    {
      "id": "leaf-2-0-0",
      "component": "root",
      "type": "panel",
      "group": "row-2",
      "color": "#77a767",
      "material": "plant",
      "vertices": [
        [
          -0.75,
          0.18,
          0
        ],
        [
          -0.8250000000000001,
          0.24,
          -0.057999999999999996
        ],
        [
          -0.8,
          0.29,
          -0.018
        ],
        [
          -0.775,
          0.24,
          0.027
        ]
      ],
      "thickness": 0.003
    },
    {
      "id": "leaf-2-0-1",
      "component": "root",
      "type": "panel",
      "group": "row-2",
      "color": "#9cbb71",
      "material": "plant",
      "vertices": [
        [
          -0.75,
          0.18,
          0
        ],
        [
          -0.725,
          0.24,
          -0.015
        ],
        [
          -0.7,
          0.29,
          0.025
        ],
        [
          -0.6749999999999999,
          0.24,
          0.07
        ]
      ],
      "thickness": 0.003
    },
    {
      "id": "plant-collar-2-1",
      "component": "root",
      "type": "cylinder",
      "group": "row-2",
      "color": "#263f45",
      "material": "polymer",
      "position": [
        -0.45,
        0.122,
        0
      ],
      "radius": 0.056,
      "height": 0.025,
      "axis": "y"
    },
    {
      "id": "plant-plug-2-1",
      "component": "nursery",
      "type": "cylinder",
      "group": "row-2",
      "color": "#a08d67",
      "material": "sorbent",
      "position": [
        -0.45,
        0.08,
        0
      ],
      "radius": 0.024,
      "height": 0.11,
      "axis": "y"
    },
    {
      "id": "root-bundle-2-1",
      "component": "root",
      "type": "pipe",
      "group": "row-2",
      "color": "#d5c8a1",
      "material": "plant",
      "path": [
        [
          -0.45,
          0.07,
          0
        ],
        [
          -0.432,
          0.045,
          0.015
        ],
        [
          -0.462,
          0.03,
          0.028
        ],
        [
          -0.405,
          0.025,
          0.04
        ]
      ],
      "radius": 0.009
    },
    {
      "id": "plant-stem-2-1",
      "component": "root",
      "type": "cylinder",
      "group": "row-2",
      "color": "#81aa68",
      "material": "plant",
      "position": [
        -0.45,
        0.18,
        0
      ],
      "radius": 0.012,
      "height": 0.12,
      "axis": "y"
    },
    {
      "id": "leaf-2-1-0",
      "component": "root",
      "type": "panel",
      "group": "row-2",
      "color": "#77a767",
      "material": "plant",
      "vertices": [
        [
          -0.45,
          0.18,
          0
        ],
        [
          -0.525,
          0.24,
          -0.057999999999999996
        ],
        [
          -0.5,
          0.29,
          -0.018
        ],
        [
          -0.475,
          0.24,
          0.027
        ]
      ],
      "thickness": 0.003
    },
    {
      "id": "leaf-2-1-1",
      "component": "root",
      "type": "panel",
      "group": "row-2",
      "color": "#9cbb71",
      "material": "plant",
      "vertices": [
        [
          -0.45,
          0.18,
          0
        ],
        [
          -0.42500000000000004,
          0.24,
          -0.015
        ],
        [
          -0.4,
          0.29,
          0.025
        ],
        [
          -0.375,
          0.24,
          0.07
        ]
      ],
      "thickness": 0.003
    },
    {
      "id": "plant-collar-2-2",
      "component": "root",
      "type": "cylinder",
      "group": "row-2",
      "color": "#263f45",
      "material": "polymer",
      "position": [
        -0.15,
        0.122,
        0
      ],
      "radius": 0.056,
      "height": 0.025,
      "axis": "y"
    },
    {
      "id": "plant-plug-2-2",
      "component": "nursery",
      "type": "cylinder",
      "group": "row-2",
      "color": "#a08d67",
      "material": "sorbent",
      "position": [
        -0.15,
        0.08,
        0
      ],
      "radius": 0.024,
      "height": 0.11,
      "axis": "y"
    },
    {
      "id": "root-bundle-2-2",
      "component": "root",
      "type": "pipe",
      "group": "row-2",
      "color": "#d5c8a1",
      "material": "plant",
      "path": [
        [
          -0.15,
          0.07,
          0
        ],
        [
          -0.132,
          0.045,
          0.015
        ],
        [
          -0.162,
          0.03,
          0.028
        ],
        [
          -0.105,
          0.025,
          0.04
        ]
      ],
      "radius": 0.009
    },
    {
      "id": "plant-stem-2-2",
      "component": "root",
      "type": "cylinder",
      "group": "row-2",
      "color": "#81aa68",
      "material": "plant",
      "position": [
        -0.15,
        0.18,
        0
      ],
      "radius": 0.012,
      "height": 0.12,
      "axis": "y"
    },
    {
      "id": "leaf-2-2-0",
      "component": "root",
      "type": "panel",
      "group": "row-2",
      "color": "#77a767",
      "material": "plant",
      "vertices": [
        [
          -0.15,
          0.18,
          0
        ],
        [
          -0.225,
          0.24,
          -0.057999999999999996
        ],
        [
          -0.2,
          0.29,
          -0.018
        ],
        [
          -0.17500000000000002,
          0.24,
          0.027
        ]
      ],
      "thickness": 0.003
    },
    {
      "id": "leaf-2-2-1",
      "component": "root",
      "type": "panel",
      "group": "row-2",
      "color": "#9cbb71",
      "material": "plant",
      "vertices": [
        [
          -0.15,
          0.18,
          0
        ],
        [
          -0.125,
          0.24,
          -0.015
        ],
        [
          -0.09999999999999999,
          0.29,
          0.025
        ],
        [
          -0.07499999999999998,
          0.24,
          0.07
        ]
      ],
      "thickness": 0.003
    },
    {
      "id": "plant-collar-2-3",
      "component": "root",
      "type": "cylinder",
      "group": "row-2",
      "color": "#263f45",
      "material": "polymer",
      "position": [
        0.15,
        0.122,
        0
      ],
      "radius": 0.056,
      "height": 0.025,
      "axis": "y"
    },
    {
      "id": "plant-plug-2-3",
      "component": "nursery",
      "type": "cylinder",
      "group": "row-2",
      "color": "#a08d67",
      "material": "sorbent",
      "position": [
        0.15,
        0.08,
        0
      ],
      "radius": 0.024,
      "height": 0.11,
      "axis": "y"
    },
    {
      "id": "root-bundle-2-3",
      "component": "root",
      "type": "pipe",
      "group": "row-2",
      "color": "#d5c8a1",
      "material": "plant",
      "path": [
        [
          0.15,
          0.07,
          0
        ],
        [
          0.16799999999999998,
          0.045,
          0.015
        ],
        [
          0.13799999999999998,
          0.03,
          0.028
        ],
        [
          0.195,
          0.025,
          0.04
        ]
      ],
      "radius": 0.009
    },
    {
      "id": "plant-stem-2-3",
      "component": "root",
      "type": "cylinder",
      "group": "row-2",
      "color": "#81aa68",
      "material": "plant",
      "position": [
        0.15,
        0.18,
        0
      ],
      "radius": 0.012,
      "height": 0.12,
      "axis": "y"
    },
    {
      "id": "leaf-2-3-0",
      "component": "root",
      "type": "panel",
      "group": "row-2",
      "color": "#77a767",
      "material": "plant",
      "vertices": [
        [
          0.15,
          0.18,
          0
        ],
        [
          0.07499999999999998,
          0.24,
          -0.057999999999999996
        ],
        [
          0.09999999999999999,
          0.29,
          -0.018
        ],
        [
          0.125,
          0.24,
          0.027
        ]
      ],
      "thickness": 0.003
    },
    {
      "id": "leaf-2-3-1",
      "component": "root",
      "type": "panel",
      "group": "row-2",
      "color": "#9cbb71",
      "material": "plant",
      "vertices": [
        [
          0.15,
          0.18,
          0
        ],
        [
          0.17500000000000002,
          0.24,
          -0.015
        ],
        [
          0.2,
          0.29,
          0.025
        ],
        [
          0.225,
          0.24,
          0.07
        ]
      ],
      "thickness": 0.003
    },
    {
      "id": "plant-collar-2-4",
      "component": "root",
      "type": "cylinder",
      "group": "row-2",
      "color": "#263f45",
      "material": "polymer",
      "position": [
        0.45,
        0.122,
        0
      ],
      "radius": 0.056,
      "height": 0.025,
      "axis": "y"
    },
    {
      "id": "plant-plug-2-4",
      "component": "nursery",
      "type": "cylinder",
      "group": "row-2",
      "color": "#a08d67",
      "material": "sorbent",
      "position": [
        0.45,
        0.08,
        0
      ],
      "radius": 0.024,
      "height": 0.11,
      "axis": "y"
    },
    {
      "id": "root-bundle-2-4",
      "component": "root",
      "type": "pipe",
      "group": "row-2",
      "color": "#d5c8a1",
      "material": "plant",
      "path": [
        [
          0.45,
          0.07,
          0
        ],
        [
          0.468,
          0.045,
          0.015
        ],
        [
          0.438,
          0.03,
          0.028
        ],
        [
          0.495,
          0.025,
          0.04
        ]
      ],
      "radius": 0.009
    },
    {
      "id": "plant-stem-2-4",
      "component": "root",
      "type": "cylinder",
      "group": "row-2",
      "color": "#81aa68",
      "material": "plant",
      "position": [
        0.45,
        0.18,
        0
      ],
      "radius": 0.012,
      "height": 0.12,
      "axis": "y"
    },
    {
      "id": "leaf-2-4-0",
      "component": "root",
      "type": "panel",
      "group": "row-2",
      "color": "#77a767",
      "material": "plant",
      "vertices": [
        [
          0.45,
          0.18,
          0
        ],
        [
          0.375,
          0.24,
          -0.057999999999999996
        ],
        [
          0.4,
          0.29,
          -0.018
        ],
        [
          0.42500000000000004,
          0.24,
          0.027
        ]
      ],
      "thickness": 0.003
    },
    {
      "id": "leaf-2-4-1",
      "component": "root",
      "type": "panel",
      "group": "row-2",
      "color": "#9cbb71",
      "material": "plant",
      "vertices": [
        [
          0.45,
          0.18,
          0
        ],
        [
          0.475,
          0.24,
          -0.015
        ],
        [
          0.5,
          0.29,
          0.025
        ],
        [
          0.525,
          0.24,
          0.07
        ]
      ],
      "thickness": 0.003
    },
    {
      "id": "plant-collar-2-5",
      "component": "root",
      "type": "cylinder",
      "group": "row-2",
      "color": "#263f45",
      "material": "polymer",
      "position": [
        0.75,
        0.122,
        0
      ],
      "radius": 0.056,
      "height": 0.025,
      "axis": "y"
    },
    {
      "id": "plant-plug-2-5",
      "component": "nursery",
      "type": "cylinder",
      "group": "row-2",
      "color": "#a08d67",
      "material": "sorbent",
      "position": [
        0.75,
        0.08,
        0
      ],
      "radius": 0.024,
      "height": 0.11,
      "axis": "y"
    },
    {
      "id": "root-bundle-2-5",
      "component": "root",
      "type": "pipe",
      "group": "row-2",
      "color": "#d5c8a1",
      "material": "plant",
      "path": [
        [
          0.75,
          0.07,
          0
        ],
        [
          0.768,
          0.045,
          0.015
        ],
        [
          0.738,
          0.03,
          0.028
        ],
        [
          0.795,
          0.025,
          0.04
        ]
      ],
      "radius": 0.009
    },
    {
      "id": "plant-stem-2-5",
      "component": "root",
      "type": "cylinder",
      "group": "row-2",
      "color": "#81aa68",
      "material": "plant",
      "position": [
        0.75,
        0.18,
        0
      ],
      "radius": 0.012,
      "height": 0.12,
      "axis": "y"
    },
    {
      "id": "leaf-2-5-0",
      "component": "root",
      "type": "panel",
      "group": "row-2",
      "color": "#77a767",
      "material": "plant",
      "vertices": [
        [
          0.75,
          0.18,
          0
        ],
        [
          0.6749999999999999,
          0.24,
          -0.057999999999999996
        ],
        [
          0.7,
          0.29,
          -0.018
        ],
        [
          0.725,
          0.24,
          0.027
        ]
      ],
      "thickness": 0.003
    },
    {
      "id": "leaf-2-5-1",
      "component": "root",
      "type": "panel",
      "group": "row-2",
      "color": "#9cbb71",
      "material": "plant",
      "vertices": [
        [
          0.75,
          0.18,
          0
        ],
        [
          0.775,
          0.24,
          -0.015
        ],
        [
          0.8,
          0.29,
          0.025
        ],
        [
          0.8250000000000001,
          0.24,
          0.07
        ]
      ],
      "thickness": 0.003
    },
    {
      "id": "row-inlet-2",
      "component": "nutrient",
      "type": "pipe",
      "group": null,
      "color": "#60b8dd",
      "material": "water",
      "path": [
        [
          -1.08,
          0.98,
          0.16
        ],
        [
          -0.99,
          0.98,
          0.16
        ],
        [
          -0.96,
          0.925,
          0.16
        ]
      ],
      "radius": 0.012
    },
    {
      "id": "row-return-2",
      "component": "nutrient",
      "type": "pipe",
      "group": null,
      "color": "#60b8dd",
      "material": "water",
      "path": [
        [
          0.96,
          0.92,
          0.16
        ],
        [
          1.06,
          0.88,
          0.16
        ],
        [
          1.06,
          0.63,
          0.16
        ]
      ],
      "radius": 0.018
    },
    {
      "id": "row-valve-2",
      "component": "nutrient",
      "type": "cylinder",
      "group": null,
      "color": "#e4b16b",
      "material": "metal",
      "position": [
        -1.045,
        0.98,
        0.16
      ],
      "radius": 0.025,
      "height": 0.04,
      "axis": "x"
    },
    {
      "id": "channel-floor-3",
      "component": "root",
      "type": "box",
      "group": "row-3",
      "color": "#e8ece6",
      "material": "polymer",
      "position": [
        0,
        0,
        0
      ],
      "size": [
        1.95,
        0.028,
        0.24
      ]
    },
    {
      "id": "channel-wall-3--1",
      "component": "root",
      "type": "box",
      "group": "row-3",
      "color": "#e8ece6",
      "material": "polymer",
      "position": [
        0,
        0.055,
        -0.115
      ],
      "size": [
        1.95,
        0.11,
        0.015
      ]
    },
    {
      "id": "channel-wall-3-1",
      "component": "root",
      "type": "box",
      "group": "row-3",
      "color": "#e8ece6",
      "material": "polymer",
      "position": [
        0,
        0.055,
        0.115
      ],
      "size": [
        1.95,
        0.11,
        0.015
      ]
    },
    {
      "id": "channel-lid-3",
      "component": "root",
      "type": "box",
      "group": "row-3",
      "color": "#bccfc6",
      "material": "polymer",
      "position": [
        0,
        0.115,
        0
      ],
      "size": [
        1.95,
        0.018,
        0.24
      ],
      "cutaway": true
    },
    {
      "id": "nutrient-film-3",
      "component": "nutrient",
      "type": "box",
      "group": "row-3",
      "color": "#60b8dd",
      "material": "water",
      "position": [
        0,
        0.022,
        0
      ],
      "size": [
        1.9,
        0.008,
        0.2
      ]
    },
    {
      "id": "plant-collar-3-0",
      "component": "root",
      "type": "cylinder",
      "group": "row-3",
      "color": "#263f45",
      "material": "polymer",
      "position": [
        -0.75,
        0.122,
        0
      ],
      "radius": 0.056,
      "height": 0.025,
      "axis": "y"
    },
    {
      "id": "plant-plug-3-0",
      "component": "nursery",
      "type": "cylinder",
      "group": "row-3",
      "color": "#a08d67",
      "material": "sorbent",
      "position": [
        -0.75,
        0.08,
        0
      ],
      "radius": 0.024,
      "height": 0.11,
      "axis": "y"
    },
    {
      "id": "root-bundle-3-0",
      "component": "root",
      "type": "pipe",
      "group": "row-3",
      "color": "#d5c8a1",
      "material": "plant",
      "path": [
        [
          -0.75,
          0.07,
          0
        ],
        [
          -0.732,
          0.045,
          0.015
        ],
        [
          -0.762,
          0.03,
          0.028
        ],
        [
          -0.705,
          0.025,
          0.04
        ]
      ],
      "radius": 0.009
    },
    {
      "id": "plant-stem-3-0",
      "component": "root",
      "type": "cylinder",
      "group": "row-3",
      "color": "#81aa68",
      "material": "plant",
      "position": [
        -0.75,
        0.18,
        0
      ],
      "radius": 0.012,
      "height": 0.12,
      "axis": "y"
    },
    {
      "id": "leaf-3-0-0",
      "component": "root",
      "type": "panel",
      "group": "row-3",
      "color": "#77a767",
      "material": "plant",
      "vertices": [
        [
          -0.75,
          0.18,
          0
        ],
        [
          -0.8250000000000001,
          0.24,
          -0.057999999999999996
        ],
        [
          -0.8,
          0.29,
          -0.018
        ],
        [
          -0.775,
          0.24,
          0.027
        ]
      ],
      "thickness": 0.003
    },
    {
      "id": "leaf-3-0-1",
      "component": "root",
      "type": "panel",
      "group": "row-3",
      "color": "#9cbb71",
      "material": "plant",
      "vertices": [
        [
          -0.75,
          0.18,
          0
        ],
        [
          -0.725,
          0.24,
          -0.015
        ],
        [
          -0.7,
          0.29,
          0.025
        ],
        [
          -0.6749999999999999,
          0.24,
          0.07
        ]
      ],
      "thickness": 0.003
    },
    {
      "id": "plant-collar-3-1",
      "component": "root",
      "type": "cylinder",
      "group": "row-3",
      "color": "#263f45",
      "material": "polymer",
      "position": [
        -0.45,
        0.122,
        0
      ],
      "radius": 0.056,
      "height": 0.025,
      "axis": "y"
    },
    {
      "id": "plant-plug-3-1",
      "component": "nursery",
      "type": "cylinder",
      "group": "row-3",
      "color": "#a08d67",
      "material": "sorbent",
      "position": [
        -0.45,
        0.08,
        0
      ],
      "radius": 0.024,
      "height": 0.11,
      "axis": "y"
    },
    {
      "id": "root-bundle-3-1",
      "component": "root",
      "type": "pipe",
      "group": "row-3",
      "color": "#d5c8a1",
      "material": "plant",
      "path": [
        [
          -0.45,
          0.07,
          0
        ],
        [
          -0.432,
          0.045,
          0.015
        ],
        [
          -0.462,
          0.03,
          0.028
        ],
        [
          -0.405,
          0.025,
          0.04
        ]
      ],
      "radius": 0.009
    },
    {
      "id": "plant-stem-3-1",
      "component": "root",
      "type": "cylinder",
      "group": "row-3",
      "color": "#81aa68",
      "material": "plant",
      "position": [
        -0.45,
        0.18,
        0
      ],
      "radius": 0.012,
      "height": 0.12,
      "axis": "y"
    },
    {
      "id": "leaf-3-1-0",
      "component": "root",
      "type": "panel",
      "group": "row-3",
      "color": "#77a767",
      "material": "plant",
      "vertices": [
        [
          -0.45,
          0.18,
          0
        ],
        [
          -0.525,
          0.24,
          -0.057999999999999996
        ],
        [
          -0.5,
          0.29,
          -0.018
        ],
        [
          -0.475,
          0.24,
          0.027
        ]
      ],
      "thickness": 0.003
    },
    {
      "id": "leaf-3-1-1",
      "component": "root",
      "type": "panel",
      "group": "row-3",
      "color": "#9cbb71",
      "material": "plant",
      "vertices": [
        [
          -0.45,
          0.18,
          0
        ],
        [
          -0.42500000000000004,
          0.24,
          -0.015
        ],
        [
          -0.4,
          0.29,
          0.025
        ],
        [
          -0.375,
          0.24,
          0.07
        ]
      ],
      "thickness": 0.003
    },
    {
      "id": "plant-collar-3-2",
      "component": "root",
      "type": "cylinder",
      "group": "row-3",
      "color": "#263f45",
      "material": "polymer",
      "position": [
        -0.15,
        0.122,
        0
      ],
      "radius": 0.056,
      "height": 0.025,
      "axis": "y"
    },
    {
      "id": "plant-plug-3-2",
      "component": "nursery",
      "type": "cylinder",
      "group": "row-3",
      "color": "#a08d67",
      "material": "sorbent",
      "position": [
        -0.15,
        0.08,
        0
      ],
      "radius": 0.024,
      "height": 0.11,
      "axis": "y"
    },
    {
      "id": "root-bundle-3-2",
      "component": "root",
      "type": "pipe",
      "group": "row-3",
      "color": "#d5c8a1",
      "material": "plant",
      "path": [
        [
          -0.15,
          0.07,
          0
        ],
        [
          -0.132,
          0.045,
          0.015
        ],
        [
          -0.162,
          0.03,
          0.028
        ],
        [
          -0.105,
          0.025,
          0.04
        ]
      ],
      "radius": 0.009
    },
    {
      "id": "plant-stem-3-2",
      "component": "root",
      "type": "cylinder",
      "group": "row-3",
      "color": "#81aa68",
      "material": "plant",
      "position": [
        -0.15,
        0.18,
        0
      ],
      "radius": 0.012,
      "height": 0.12,
      "axis": "y"
    },
    {
      "id": "leaf-3-2-0",
      "component": "root",
      "type": "panel",
      "group": "row-3",
      "color": "#77a767",
      "material": "plant",
      "vertices": [
        [
          -0.15,
          0.18,
          0
        ],
        [
          -0.225,
          0.24,
          -0.057999999999999996
        ],
        [
          -0.2,
          0.29,
          -0.018
        ],
        [
          -0.17500000000000002,
          0.24,
          0.027
        ]
      ],
      "thickness": 0.003
    },
    {
      "id": "leaf-3-2-1",
      "component": "root",
      "type": "panel",
      "group": "row-3",
      "color": "#9cbb71",
      "material": "plant",
      "vertices": [
        [
          -0.15,
          0.18,
          0
        ],
        [
          -0.125,
          0.24,
          -0.015
        ],
        [
          -0.09999999999999999,
          0.29,
          0.025
        ],
        [
          -0.07499999999999998,
          0.24,
          0.07
        ]
      ],
      "thickness": 0.003
    },
    {
      "id": "plant-collar-3-3",
      "component": "root",
      "type": "cylinder",
      "group": "row-3",
      "color": "#263f45",
      "material": "polymer",
      "position": [
        0.15,
        0.122,
        0
      ],
      "radius": 0.056,
      "height": 0.025,
      "axis": "y"
    },
    {
      "id": "plant-plug-3-3",
      "component": "nursery",
      "type": "cylinder",
      "group": "row-3",
      "color": "#a08d67",
      "material": "sorbent",
      "position": [
        0.15,
        0.08,
        0
      ],
      "radius": 0.024,
      "height": 0.11,
      "axis": "y"
    },
    {
      "id": "root-bundle-3-3",
      "component": "root",
      "type": "pipe",
      "group": "row-3",
      "color": "#d5c8a1",
      "material": "plant",
      "path": [
        [
          0.15,
          0.07,
          0
        ],
        [
          0.16799999999999998,
          0.045,
          0.015
        ],
        [
          0.13799999999999998,
          0.03,
          0.028
        ],
        [
          0.195,
          0.025,
          0.04
        ]
      ],
      "radius": 0.009
    },
    {
      "id": "plant-stem-3-3",
      "component": "root",
      "type": "cylinder",
      "group": "row-3",
      "color": "#81aa68",
      "material": "plant",
      "position": [
        0.15,
        0.18,
        0
      ],
      "radius": 0.012,
      "height": 0.12,
      "axis": "y"
    },
    {
      "id": "leaf-3-3-0",
      "component": "root",
      "type": "panel",
      "group": "row-3",
      "color": "#77a767",
      "material": "plant",
      "vertices": [
        [
          0.15,
          0.18,
          0
        ],
        [
          0.07499999999999998,
          0.24,
          -0.057999999999999996
        ],
        [
          0.09999999999999999,
          0.29,
          -0.018
        ],
        [
          0.125,
          0.24,
          0.027
        ]
      ],
      "thickness": 0.003
    },
    {
      "id": "leaf-3-3-1",
      "component": "root",
      "type": "panel",
      "group": "row-3",
      "color": "#9cbb71",
      "material": "plant",
      "vertices": [
        [
          0.15,
          0.18,
          0
        ],
        [
          0.17500000000000002,
          0.24,
          -0.015
        ],
        [
          0.2,
          0.29,
          0.025
        ],
        [
          0.225,
          0.24,
          0.07
        ]
      ],
      "thickness": 0.003
    },
    {
      "id": "plant-collar-3-4",
      "component": "root",
      "type": "cylinder",
      "group": "row-3",
      "color": "#263f45",
      "material": "polymer",
      "position": [
        0.45,
        0.122,
        0
      ],
      "radius": 0.056,
      "height": 0.025,
      "axis": "y"
    },
    {
      "id": "plant-plug-3-4",
      "component": "nursery",
      "type": "cylinder",
      "group": "row-3",
      "color": "#a08d67",
      "material": "sorbent",
      "position": [
        0.45,
        0.08,
        0
      ],
      "radius": 0.024,
      "height": 0.11,
      "axis": "y"
    },
    {
      "id": "root-bundle-3-4",
      "component": "root",
      "type": "pipe",
      "group": "row-3",
      "color": "#d5c8a1",
      "material": "plant",
      "path": [
        [
          0.45,
          0.07,
          0
        ],
        [
          0.468,
          0.045,
          0.015
        ],
        [
          0.438,
          0.03,
          0.028
        ],
        [
          0.495,
          0.025,
          0.04
        ]
      ],
      "radius": 0.009
    },
    {
      "id": "plant-stem-3-4",
      "component": "root",
      "type": "cylinder",
      "group": "row-3",
      "color": "#81aa68",
      "material": "plant",
      "position": [
        0.45,
        0.18,
        0
      ],
      "radius": 0.012,
      "height": 0.12,
      "axis": "y"
    },
    {
      "id": "leaf-3-4-0",
      "component": "root",
      "type": "panel",
      "group": "row-3",
      "color": "#77a767",
      "material": "plant",
      "vertices": [
        [
          0.45,
          0.18,
          0
        ],
        [
          0.375,
          0.24,
          -0.057999999999999996
        ],
        [
          0.4,
          0.29,
          -0.018
        ],
        [
          0.42500000000000004,
          0.24,
          0.027
        ]
      ],
      "thickness": 0.003
    },
    {
      "id": "leaf-3-4-1",
      "component": "root",
      "type": "panel",
      "group": "row-3",
      "color": "#9cbb71",
      "material": "plant",
      "vertices": [
        [
          0.45,
          0.18,
          0
        ],
        [
          0.475,
          0.24,
          -0.015
        ],
        [
          0.5,
          0.29,
          0.025
        ],
        [
          0.525,
          0.24,
          0.07
        ]
      ],
      "thickness": 0.003
    },
    {
      "id": "plant-collar-3-5",
      "component": "root",
      "type": "cylinder",
      "group": "row-3",
      "color": "#263f45",
      "material": "polymer",
      "position": [
        0.75,
        0.122,
        0
      ],
      "radius": 0.056,
      "height": 0.025,
      "axis": "y"
    },
    {
      "id": "plant-plug-3-5",
      "component": "nursery",
      "type": "cylinder",
      "group": "row-3",
      "color": "#a08d67",
      "material": "sorbent",
      "position": [
        0.75,
        0.08,
        0
      ],
      "radius": 0.024,
      "height": 0.11,
      "axis": "y"
    },
    {
      "id": "root-bundle-3-5",
      "component": "root",
      "type": "pipe",
      "group": "row-3",
      "color": "#d5c8a1",
      "material": "plant",
      "path": [
        [
          0.75,
          0.07,
          0
        ],
        [
          0.768,
          0.045,
          0.015
        ],
        [
          0.738,
          0.03,
          0.028
        ],
        [
          0.795,
          0.025,
          0.04
        ]
      ],
      "radius": 0.009
    },
    {
      "id": "plant-stem-3-5",
      "component": "root",
      "type": "cylinder",
      "group": "row-3",
      "color": "#81aa68",
      "material": "plant",
      "position": [
        0.75,
        0.18,
        0
      ],
      "radius": 0.012,
      "height": 0.12,
      "axis": "y"
    },
    {
      "id": "leaf-3-5-0",
      "component": "root",
      "type": "panel",
      "group": "row-3",
      "color": "#77a767",
      "material": "plant",
      "vertices": [
        [
          0.75,
          0.18,
          0
        ],
        [
          0.6749999999999999,
          0.24,
          -0.057999999999999996
        ],
        [
          0.7,
          0.29,
          -0.018
        ],
        [
          0.725,
          0.24,
          0.027
        ]
      ],
      "thickness": 0.003
    },
    {
      "id": "leaf-3-5-1",
      "component": "root",
      "type": "panel",
      "group": "row-3",
      "color": "#9cbb71",
      "material": "plant",
      "vertices": [
        [
          0.75,
          0.18,
          0
        ],
        [
          0.775,
          0.24,
          -0.015
        ],
        [
          0.8,
          0.29,
          0.025
        ],
        [
          0.8250000000000001,
          0.24,
          0.07
        ]
      ],
      "thickness": 0.003
    },
    {
      "id": "row-inlet-3",
      "component": "nutrient",
      "type": "pipe",
      "group": null,
      "color": "#60b8dd",
      "material": "water",
      "path": [
        [
          -1.08,
          0.98,
          0.48
        ],
        [
          -0.99,
          0.98,
          0.48
        ],
        [
          -0.96,
          0.925,
          0.48
        ]
      ],
      "radius": 0.012
    },
    {
      "id": "row-return-3",
      "component": "nutrient",
      "type": "pipe",
      "group": null,
      "color": "#60b8dd",
      "material": "water",
      "path": [
        [
          0.96,
          0.92,
          0.48
        ],
        [
          1.06,
          0.88,
          0.48
        ],
        [
          1.06,
          0.63,
          0.48
        ]
      ],
      "radius": 0.018
    },
    {
      "id": "row-valve-3",
      "component": "nutrient",
      "type": "cylinder",
      "group": null,
      "color": "#e4b16b",
      "material": "metal",
      "position": [
        -1.045,
        0.98,
        0.48
      ],
      "radius": 0.025,
      "height": 0.04,
      "axis": "x"
    },
    {
      "id": "seed-station-base",
      "component": "seeding",
      "type": "box",
      "group": null,
      "color": "#263f45",
      "material": "metal",
      "position": [
        -1.42,
        0.88,
        -0.93
      ],
      "size": [
        0.62,
        0.08,
        0.52
      ]
    },
    {
      "id": "seed-cassette",
      "component": "seeding",
      "type": "box",
      "group": null,
      "color": "#e8ece6",
      "material": "polymer",
      "position": [
        -1.52,
        1.08,
        -1.04
      ],
      "size": [
        0.28,
        0.24,
        0.18
      ],
      "cutaway": true
    },
    {
      "id": "seed-meter-disk",
      "component": "seeding",
      "type": "cylinder",
      "group": null,
      "color": "#e4b16b",
      "material": "polymer",
      "position": [
        -1.52,
        1.02,
        -0.93
      ],
      "radius": 0.105,
      "height": 0.025,
      "axis": "z"
    },
    {
      "id": "seed-pocket-0",
      "component": "seeding",
      "type": "cylinder",
      "group": null,
      "color": "#645535",
      "material": "sorbent",
      "position": [
        -1.52,
        1.095,
        -0.91
      ],
      "radius": 0.012,
      "height": 0.018,
      "axis": "z"
    },
    {
      "id": "seed-pocket-1",
      "component": "seeding",
      "type": "cylinder",
      "group": null,
      "color": "#645535",
      "material": "sorbent",
      "position": [
        -1.455048094716167,
        1.0575,
        -0.91
      ],
      "radius": 0.012,
      "height": 0.018,
      "axis": "z"
    },
    {
      "id": "seed-pocket-2",
      "component": "seeding",
      "type": "cylinder",
      "group": null,
      "color": "#645535",
      "material": "sorbent",
      "position": [
        -1.455048094716167,
        0.9825,
        -0.91
      ],
      "radius": 0.012,
      "height": 0.018,
      "axis": "z"
    },
    {
      "id": "seed-pocket-3",
      "component": "seeding",
      "type": "cylinder",
      "group": null,
      "color": "#645535",
      "material": "sorbent",
      "position": [
        -1.52,
        0.9450000000000001,
        -0.91
      ],
      "radius": 0.012,
      "height": 0.018,
      "axis": "z"
    },
    {
      "id": "seed-pocket-4",
      "component": "seeding",
      "type": "cylinder",
      "group": null,
      "color": "#645535",
      "material": "sorbent",
      "position": [
        -1.584951905283833,
        0.9824999999999999,
        -0.91
      ],
      "radius": 0.012,
      "height": 0.018,
      "axis": "z"
    },
    {
      "id": "seed-pocket-5",
      "component": "seeding",
      "type": "cylinder",
      "group": null,
      "color": "#645535",
      "material": "sorbent",
      "position": [
        -1.584951905283833,
        1.0575,
        -0.91
      ],
      "radius": 0.012,
      "height": 0.018,
      "axis": "z"
    },
    {
      "id": "seed-chute",
      "component": "seeding",
      "type": "pipe",
      "group": null,
      "color": "#e8ece6",
      "material": "polymer",
      "path": [
        [
          -1.52,
          0.95,
          -0.9
        ],
        [
          -1.42,
          0.94,
          -0.79
        ],
        [
          -1.33,
          0.93,
          -0.79
        ]
      ],
      "radius": 0.018
    },
    {
      "id": "germination-carrier",
      "component": "nursery",
      "type": "box",
      "group": null,
      "color": "#e8ece6",
      "material": "polymer",
      "position": [
        -1.4,
        0.94,
        -0.72
      ],
      "size": [
        0.46,
        0.035,
        0.22
      ]
    },
    {
      "id": "empty-seed-plug-0",
      "component": "nursery",
      "type": "cylinder",
      "group": null,
      "color": "#9b8b6d",
      "material": "sorbent",
      "position": [
        -1.57,
        0.965,
        -0.72
      ],
      "radius": 0.035,
      "height": 0.03,
      "axis": "y"
    },
    {
      "id": "empty-seed-plug-1",
      "component": "nursery",
      "type": "cylinder",
      "group": null,
      "color": "#9b8b6d",
      "material": "sorbent",
      "position": [
        -1.46,
        0.965,
        -0.72
      ],
      "radius": 0.035,
      "height": 0.03,
      "axis": "y"
    },
    {
      "id": "empty-seed-plug-2",
      "component": "nursery",
      "type": "cylinder",
      "group": null,
      "color": "#9b8b6d",
      "material": "sorbent",
      "position": [
        -1.35,
        0.965,
        -0.72
      ],
      "radius": 0.035,
      "height": 0.03,
      "axis": "y"
    },
    {
      "id": "empty-seed-plug-3",
      "component": "nursery",
      "type": "cylinder",
      "group": null,
      "color": "#9b8b6d",
      "material": "sorbent",
      "position": [
        -1.24,
        0.965,
        -0.72
      ],
      "radius": 0.035,
      "height": 0.03,
      "axis": "y"
    },
    {
      "id": "nursery-humidity-cover",
      "component": "nursery",
      "type": "box",
      "group": null,
      "color": "#a6c5bf",
      "material": "glass",
      "position": [
        -1.4,
        1.1,
        -0.73
      ],
      "size": [
        0.48,
        0.25,
        0.24
      ],
      "cutaway": true
    },
    {
      "id": "tool-magazine-slot-0",
      "component": "dock",
      "type": "box",
      "group": null,
      "color": "#263f45",
      "material": "metal",
      "position": [
        -0.6,
        1.07,
        -1.08
      ],
      "size": [
        0.2,
        0.045,
        0.22
      ]
    },
    {
      "id": "parked-tool-dock-0",
      "component": "dock",
      "type": "cylinder",
      "group": null,
      "color": "#e4b16b",
      "material": "metal",
      "position": [
        -0.6,
        1.11,
        -1.08
      ],
      "radius": 0.07,
      "height": 0.03,
      "axis": "y"
    },
    {
      "id": "tool-magazine-slot-1",
      "component": "dock",
      "type": "box",
      "group": null,
      "color": "#263f45",
      "material": "metal",
      "position": [
        -0.28,
        1.07,
        -1.08
      ],
      "size": [
        0.2,
        0.045,
        0.22
      ]
    },
    {
      "id": "parked-tool-dock-1",
      "component": "dock",
      "type": "cylinder",
      "group": null,
      "color": "#e4b16b",
      "material": "metal",
      "position": [
        -0.28,
        1.11,
        -1.08
      ],
      "radius": 0.07,
      "height": 0.03,
      "axis": "y"
    },
    {
      "id": "tool-magazine-slot-2",
      "component": "dock",
      "type": "box",
      "group": null,
      "color": "#263f45",
      "material": "metal",
      "position": [
        0.04,
        1.07,
        -1.08
      ],
      "size": [
        0.2,
        0.045,
        0.22
      ]
    },
    {
      "id": "parked-tool-dock-2",
      "component": "dock",
      "type": "cylinder",
      "group": null,
      "color": "#e4b16b",
      "material": "metal",
      "position": [
        0.04,
        1.11,
        -1.08
      ],
      "radius": 0.07,
      "height": 0.03,
      "axis": "y"
    },
    {
      "id": "parked-seeder-body",
      "component": "seeding",
      "type": "box",
      "group": null,
      "color": "#e8ece6",
      "material": "polymer",
      "position": [
        -0.6,
        1.2,
        -1.08
      ],
      "size": [
        0.1,
        0.14,
        0.1
      ]
    },
    {
      "id": "parked-vacuum-needle",
      "component": "seeding",
      "type": "cylinder",
      "group": null,
      "color": "#c8d4d8",
      "material": "metal",
      "position": [
        -0.6,
        1.3,
        -1.08
      ],
      "radius": 0.006,
      "height": 0.09,
      "axis": "y"
    },
    {
      "id": "parked-vacuum-line",
      "component": "seeding",
      "type": "pipe",
      "group": null,
      "color": "#80d5bf",
      "material": "polymer",
      "path": [
        [
          -0.6,
          1.22,
          -1.08
        ],
        [
          -0.63,
          1.24,
          -1.2
        ],
        [
          -0.7,
          1.15,
          -1.2
        ]
      ],
      "radius": 0.007
    },
    {
      "id": "parked-soft-gripper--0.325",
      "component": "harvest",
      "type": "box",
      "group": null,
      "color": "#80d5bf",
      "material": "polymer",
      "position": [
        -0.325,
        1.21,
        -1.08
      ],
      "size": [
        0.025,
        0.18,
        0.07
      ]
    },
    {
      "id": "parked-soft-gripper--0.235",
      "component": "harvest",
      "type": "box",
      "group": null,
      "color": "#80d5bf",
      "material": "polymer",
      "position": [
        -0.235,
        1.21,
        -1.08
      ],
      "size": [
        0.025,
        0.18,
        0.07
      ]
    },
    {
      "id": "spare-cutter",
      "component": "harvest",
      "type": "box",
      "group": null,
      "color": "#e8ece6",
      "material": "polymer",
      "position": [
        0.04,
        1.18,
        -1.08
      ],
      "size": [
        0.11,
        0.09,
        0.08
      ]
    },
    {
      "id": "reservoir",
      "component": "nutrient",
      "type": "box",
      "group": null,
      "color": "#5a7c80",
      "material": "glass",
      "position": [
        -0.58,
        0.34,
        -0.05
      ],
      "size": [
        0.64,
        0.48,
        0.65
      ],
      "cutaway": true
    },
    {
      "id": "reservoir-water",
      "component": "nutrient",
      "type": "box",
      "group": null,
      "color": "#60b8dd",
      "material": "water",
      "position": [
        -0.58,
        0.27,
        -0.05
      ],
      "size": [
        0.6,
        0.32,
        0.61
      ]
    },
    {
      "id": "reservoir-lid",
      "component": "nutrient",
      "type": "box",
      "group": null,
      "color": "#263f45",
      "material": "metal",
      "position": [
        -0.58,
        0.59,
        -0.05
      ],
      "size": [
        0.68,
        0.035,
        0.68
      ],
      "cutaway": true
    },
    {
      "id": "return-screen",
      "component": "nutrient",
      "type": "cylinder",
      "group": null,
      "color": "#e8ece6",
      "material": "polymer",
      "position": [
        -0.34,
        0.53,
        0.1
      ],
      "radius": 0.07,
      "height": 0.16,
      "axis": "y"
    },
    {
      "id": "return-header",
      "component": "nutrient",
      "type": "pipe",
      "group": null,
      "color": "#60b8dd",
      "material": "water",
      "path": [
        [
          1.06,
          0.63,
          -0.48
        ],
        [
          1.06,
          0.63,
          0.48
        ],
        [
          0.88,
          0.63,
          0.7
        ],
        [
          -0.3,
          0.63,
          0.7
        ],
        [
          -0.3,
          0.54,
          0.2
        ]
      ],
      "radius": 0.025
    },
    {
      "id": "supply-header",
      "component": "nutrient",
      "type": "pipe",
      "group": null,
      "color": "#60b8dd",
      "material": "water",
      "path": [
        [
          -1.08,
          0.98,
          -0.48
        ],
        [
          -1.08,
          0.98,
          0.48
        ]
      ],
      "radius": 0.017
    },
    {
      "id": "concentrate-bottle-0",
      "component": "dosing",
      "type": "cylinder",
      "group": null,
      "color": "#c6b382",
      "material": "polymer",
      "position": [
        -1.55,
        0.35,
        -0.55
      ],
      "radius": 0.09,
      "height": 0.4,
      "axis": "y"
    },
    {
      "id": "doser-0",
      "component": "dosing",
      "type": "box",
      "group": null,
      "color": "#e8ece6",
      "material": "polymer",
      "position": [
        -1.55,
        0.64,
        -0.55
      ],
      "size": [
        0.14,
        0.12,
        0.14
      ]
    },
    {
      "id": "doser-head-0",
      "component": "dosing",
      "type": "cylinder",
      "group": null,
      "color": "#e4b16b",
      "material": "polymer",
      "position": [
        -1.45,
        0.64,
        -0.55
      ],
      "radius": 0.045,
      "height": 0.04,
      "axis": "x"
    },
    {
      "id": "dose-line-0",
      "component": "dosing",
      "type": "pipe",
      "group": null,
      "color": "#c6b382",
      "material": "polymer",
      "path": [
        [
          -1.55,
          0.52,
          -0.55
        ],
        [
          -1.55,
          0.64,
          -0.55
        ],
        [
          -1.35,
          0.64,
          -0.55
        ],
        [
          -0.82,
          0.64,
          -0.55
        ],
        [
          -0.82,
          0.51,
          -0.05
        ]
      ],
      "radius": 0.006
    },
    {
      "id": "concentrate-bottle-1",
      "component": "dosing",
      "type": "cylinder",
      "group": null,
      "color": "#a28eb7",
      "material": "polymer",
      "position": [
        -1.55,
        0.35,
        -0.25
      ],
      "radius": 0.09,
      "height": 0.4,
      "axis": "y"
    },
    {
      "id": "doser-1",
      "component": "dosing",
      "type": "box",
      "group": null,
      "color": "#e8ece6",
      "material": "polymer",
      "position": [
        -1.55,
        0.64,
        -0.25
      ],
      "size": [
        0.14,
        0.12,
        0.14
      ]
    },
    {
      "id": "doser-head-1",
      "component": "dosing",
      "type": "cylinder",
      "group": null,
      "color": "#e4b16b",
      "material": "polymer",
      "position": [
        -1.45,
        0.64,
        -0.25
      ],
      "radius": 0.045,
      "height": 0.04,
      "axis": "x"
    },
    {
      "id": "dose-line-1",
      "component": "dosing",
      "type": "pipe",
      "group": null,
      "color": "#a28eb7",
      "material": "polymer",
      "path": [
        [
          -1.55,
          0.52,
          -0.25
        ],
        [
          -1.55,
          0.64,
          -0.25
        ],
        [
          -1.35,
          0.64,
          -0.25
        ],
        [
          -0.82,
          0.64,
          -0.25
        ],
        [
          -0.82,
          0.51,
          -0.05
        ]
      ],
      "radius": 0.006
    },
    {
      "id": "concentrate-bottle-2",
      "component": "dosing",
      "type": "cylinder",
      "group": null,
      "color": "#da9b7d",
      "material": "polymer",
      "position": [
        -1.55,
        0.35,
        0.05
      ],
      "radius": 0.09,
      "height": 0.4,
      "axis": "y"
    },
    {
      "id": "doser-2",
      "component": "dosing",
      "type": "box",
      "group": null,
      "color": "#e8ece6",
      "material": "polymer",
      "position": [
        -1.55,
        0.64,
        0.05
      ],
      "size": [
        0.14,
        0.12,
        0.14
      ]
    },
    {
      "id": "doser-head-2",
      "component": "dosing",
      "type": "cylinder",
      "group": null,
      "color": "#e4b16b",
      "material": "polymer",
      "position": [
        -1.45,
        0.64,
        0.05
      ],
      "radius": 0.045,
      "height": 0.04,
      "axis": "x"
    },
    {
      "id": "dose-line-2",
      "component": "dosing",
      "type": "pipe",
      "group": null,
      "color": "#da9b7d",
      "material": "polymer",
      "path": [
        [
          -1.55,
          0.52,
          0.05
        ],
        [
          -1.55,
          0.64,
          0.05
        ],
        [
          -1.35,
          0.64,
          0.05
        ],
        [
          -0.82,
          0.64,
          0.05
        ],
        [
          -0.82,
          0.51,
          -0.05
        ]
      ],
      "radius": 0.006
    },
    {
      "id": "probe-0",
      "component": "sensing",
      "type": "cylinder",
      "group": null,
      "color": "#263f45",
      "material": "metal",
      "position": [
        -0.8,
        0.52,
        0.08
      ],
      "radius": 0.012,
      "height": 0.19,
      "axis": "y"
    },
    {
      "id": "probe-head-0",
      "component": "sensing",
      "type": "box",
      "group": null,
      "color": "#80d5bf",
      "material": "polymer",
      "position": [
        -0.8,
        0.64,
        0.08
      ],
      "size": [
        0.055,
        0.045,
        0.055
      ]
    },
    {
      "id": "probe-1",
      "component": "sensing",
      "type": "cylinder",
      "group": null,
      "color": "#263f45",
      "material": "metal",
      "position": [
        -0.65,
        0.52,
        0.08
      ],
      "radius": 0.012,
      "height": 0.19,
      "axis": "y"
    },
    {
      "id": "probe-head-1",
      "component": "sensing",
      "type": "box",
      "group": null,
      "color": "#80d5bf",
      "material": "polymer",
      "position": [
        -0.65,
        0.64,
        0.08
      ],
      "size": [
        0.055,
        0.045,
        0.055
      ]
    },
    {
      "id": "probe-2",
      "component": "sensing",
      "type": "cylinder",
      "group": null,
      "color": "#263f45",
      "material": "metal",
      "position": [
        -0.5,
        0.52,
        0.08
      ],
      "radius": 0.012,
      "height": 0.19,
      "axis": "y"
    },
    {
      "id": "probe-head-2",
      "component": "sensing",
      "type": "box",
      "group": null,
      "color": "#80d5bf",
      "material": "polymer",
      "position": [
        -0.5,
        0.64,
        0.08
      ],
      "size": [
        0.055,
        0.045,
        0.055
      ]
    },
    {
      "id": "level-sensor",
      "component": "sensing",
      "type": "box",
      "group": null,
      "color": "#80d5bf",
      "material": "metal",
      "position": [
        -0.58,
        0.58,
        -0.31
      ],
      "size": [
        0.07,
        0.05,
        0.04
      ]
    },
    {
      "id": "control-cabinet",
      "component": "sensing",
      "type": "box",
      "group": null,
      "color": "#263f45",
      "material": "metal",
      "position": [
        -1.72,
        1.35,
        -0.25
      ],
      "size": [
        0.22,
        0.38,
        0.36
      ],
      "cutaway": true
    },
    {
      "id": "controller",
      "component": "sensing",
      "type": "box",
      "group": null,
      "color": "#80d5bf",
      "material": "polymer",
      "position": [
        -1.64,
        1.36,
        -0.25
      ],
      "size": [
        0.055,
        0.19,
        0.22
      ]
    },
    {
      "id": "service-dock",
      "component": "service",
      "type": "box",
      "group": null,
      "color": "#263f45",
      "material": "metal",
      "position": [
        -1.5,
        0.68,
        0.75
      ],
      "size": [
        0.38,
        0.06,
        0.38
      ]
    },
    {
      "id": "drip-well",
      "component": "service",
      "type": "box",
      "group": null,
      "color": "#e4b16b",
      "material": "polymer",
      "position": [
        -1.5,
        0.62,
        0.75
      ],
      "size": [
        0.44,
        0.045,
        0.45
      ]
    },
    {
      "id": "fixed-fluid-coupler-0.65",
      "component": "service",
      "type": "cylinder",
      "group": null,
      "color": "#60b8dd",
      "material": "polymer",
      "position": [
        -1.5,
        0.73,
        0.65
      ],
      "radius": 0.026,
      "height": 0.065,
      "axis": "y"
    },
    {
      "id": "fixed-fluid-coupler-0.85",
      "component": "service",
      "type": "cylinder",
      "group": null,
      "color": "#60b8dd",
      "material": "polymer",
      "position": [
        -1.5,
        0.73,
        0.85
      ],
      "radius": 0.026,
      "height": 0.065,
      "axis": "y"
    },
    {
      "id": "pump-suction",
      "component": "nutrient",
      "type": "pipe",
      "group": null,
      "color": "#60b8dd",
      "material": "water",
      "path": [
        [
          -0.82,
          0.25,
          0.15
        ],
        [
          -1.25,
          0.25,
          0.15
        ],
        [
          -1.5,
          0.25,
          0.65
        ],
        [
          -1.5,
          0.72,
          0.65
        ]
      ],
      "radius": 0.014
    },
    {
      "id": "pump-discharge",
      "component": "nutrient",
      "type": "pipe",
      "group": null,
      "color": "#60b8dd",
      "material": "water",
      "path": [
        [
          -1.5,
          0.72,
          0.85
        ],
        [
          -1.7,
          0.72,
          0.85
        ],
        [
          -1.7,
          1.02,
          0.48
        ],
        [
          -1.08,
          1.02,
          0.48
        ],
        [
          -1.08,
          0.98,
          0.48
        ]
      ],
      "radius": 0.014
    },
    {
      "id": "pump-cartridge-body",
      "component": "service",
      "type": "box",
      "group": "pump-cartridge",
      "color": "#e8ece6",
      "material": "polymer",
      "position": [
        0,
        0.085,
        0
      ],
      "size": [
        0.27,
        0.16,
        0.27
      ]
    },
    {
      "id": "pump-motor",
      "component": "service",
      "type": "cylinder",
      "group": "pump-cartridge",
      "color": "#263f45",
      "material": "metal",
      "position": [
        0,
        0.09,
        0
      ],
      "radius": 0.065,
      "height": 0.17,
      "axis": "x"
    },
    {
      "id": "pump-mobile-coupler--0.1",
      "component": "service",
      "type": "cylinder",
      "group": "pump-cartridge",
      "color": "#60b8dd",
      "material": "polymer",
      "position": [
        0,
        0,
        -0.1
      ],
      "radius": 0.024,
      "height": 0.05,
      "axis": "y"
    },
    {
      "id": "pump-mobile-coupler-0.1",
      "component": "service",
      "type": "cylinder",
      "group": "pump-cartridge",
      "color": "#60b8dd",
      "material": "polymer",
      "position": [
        0,
        0,
        0.1
      ],
      "radius": 0.024,
      "height": 0.05,
      "axis": "y"
    },
    {
      "id": "pump-handle-post--0.07",
      "component": "service",
      "type": "box",
      "group": "pump-cartridge",
      "color": "#c8d4d8",
      "material": "metal",
      "position": [
        -0.035,
        0.2,
        0
      ],
      "size": [
        0.02,
        0.1,
        0.025
      ]
    },
    {
      "id": "pump-handle-post-0.07",
      "component": "service",
      "type": "box",
      "group": "pump-cartridge",
      "color": "#c8d4d8",
      "material": "metal",
      "position": [
        0.035,
        0.2,
        0
      ],
      "size": [
        0.02,
        0.1,
        0.025
      ]
    },
    {
      "id": "pump-handle",
      "component": "service",
      "type": "box",
      "group": "pump-cartridge",
      "color": "#e4b16b",
      "material": "metal",
      "position": [
        0,
        0.25,
        0
      ],
      "size": [
        0.08,
        0.025,
        0.03
      ]
    },
    {
      "id": "dry-electrical-contact",
      "component": "service",
      "type": "box",
      "group": "pump-cartridge",
      "color": "#80d5bf",
      "material": "polymer",
      "position": [
        0.15,
        0.09,
        0
      ],
      "size": [
        0.025,
        0.08,
        0.1
      ]
    },
    {
      "id": "service-lock",
      "component": "service",
      "type": "box",
      "group": null,
      "color": "#e4b16b",
      "material": "metal",
      "position": [
        -1.7,
        0.82,
        0.75
      ],
      "size": [
        0.035,
        0.08,
        0.1
      ]
    },
    {
      "id": "spare-pump-pocket",
      "component": "service",
      "type": "box",
      "group": null,
      "color": "#263f45",
      "material": "metal",
      "position": [
        -1.5,
        0.7,
        1.15
      ],
      "size": [
        0.36,
        0.07,
        0.3
      ]
    },
    {
      "id": "spare-pump",
      "component": "service",
      "type": "box",
      "group": null,
      "color": "#e8ece6",
      "material": "polymer",
      "position": [
        -1.5,
        0.83,
        1.15
      ],
      "size": [
        0.25,
        0.18,
        0.23
      ]
    },
    {
      "id": "produce-scale",
      "component": "output",
      "type": "box",
      "group": null,
      "color": "#263f45",
      "material": "metal",
      "position": [
        1.48,
        0.89,
        0.95
      ],
      "size": [
        0.55,
        0.12,
        0.46
      ]
    },
    {
      "id": "produce-tray",
      "component": "output",
      "type": "box",
      "group": null,
      "color": "#e8ece6",
      "material": "polymer",
      "position": [
        1.48,
        0.98,
        0.95
      ],
      "size": [
        0.52,
        0.065,
        0.44
      ]
    },
    {
      "id": "output-tray-wall-1.24",
      "component": "output",
      "type": "box",
      "group": null,
      "color": "#e8ece6",
      "material": "polymer",
      "position": [
        1.24,
        1.04,
        0.95
      ],
      "size": [
        0.018,
        0.11,
        0.43
      ]
    },
    {
      "id": "output-tray-wall-1.72",
      "component": "output",
      "type": "box",
      "group": null,
      "color": "#e8ece6",
      "material": "polymer",
      "position": [
        1.72,
        1.04,
        0.95
      ],
      "size": [
        0.018,
        0.11,
        0.43
      ]
    },
    {
      "id": "wash-bath",
      "component": "wash",
      "type": "box",
      "group": null,
      "color": "#263f45",
      "material": "metal",
      "position": [
        0.15,
        0.83,
        1.05
      ],
      "size": [
        0.64,
        0.24,
        0.45
      ],
      "cutaway": true
    },
    {
      "id": "wash-fluid",
      "component": "wash",
      "type": "box",
      "group": null,
      "color": "#60b8dd",
      "material": "water",
      "position": [
        0.15,
        0.85,
        1.05
      ],
      "size": [
        0.58,
        0.14,
        0.39
      ]
    },
    {
      "id": "wash-spray--0.08",
      "component": "wash",
      "type": "pipe",
      "group": null,
      "color": "#c8d4d8",
      "material": "metal",
      "path": [
        [
          -0.08,
          0.9,
          0.87
        ],
        [
          -0.08,
          1.0,
          0.87
        ],
        [
          -0.08,
          1.0,
          1.03
        ]
      ],
      "radius": 0.008
    },
    {
      "id": "wash-spray-0.38",
      "component": "wash",
      "type": "pipe",
      "group": null,
      "color": "#c8d4d8",
      "material": "metal",
      "path": [
        [
          0.38,
          0.9,
          0.87
        ],
        [
          0.38,
          1.0,
          0.87
        ],
        [
          0.38,
          1.0,
          1.03
        ]
      ],
      "radius": 0.008
    },
    {
      "id": "debris-basket",
      "component": "wash",
      "type": "box",
      "group": null,
      "color": "#7d8b84",
      "material": "metal",
      "position": [
        0.15,
        0.75,
        1.05
      ],
      "size": [
        0.4,
        0.035,
        0.28
      ]
    },
    {
      "id": "wash-waste-tank",
      "component": "wash",
      "type": "box",
      "group": null,
      "color": "#988b71",
      "material": "polymer",
      "position": [
        0.15,
        0.27,
        1.05
      ],
      "size": [
        0.46,
        0.42,
        0.35
      ]
    },
    {
      "id": "wash-drain",
      "component": "wash",
      "type": "pipe",
      "group": null,
      "color": "#b2a17b",
      "material": "polymer",
      "path": [
        [
          0.3,
          0.73,
          1.1
        ],
        [
          0.3,
          0.47,
          1.1
        ]
      ],
      "radius": 0.025
    },
    {
      "id": "quarantine-tray",
      "component": "wash",
      "type": "box",
      "group": null,
      "color": "#c58e6d",
      "material": "polymer",
      "position": [
        -0.65,
        0.91,
        1.05
      ],
      "size": [
        0.43,
        0.08,
        0.44
      ]
    },
    {
      "id": "quarantine-cover",
      "component": "wash",
      "type": "box",
      "group": null,
      "color": "#cfb087",
      "material": "glass",
      "position": [
        -0.65,
        1.09,
        1.05
      ],
      "size": [
        0.44,
        0.26,
        0.45
      ],
      "cutaway": true
    },
    {
      "id": "clean-dry-carrier-buffer",
      "component": "wash",
      "type": "box",
      "group": null,
      "color": "#e8ece6",
      "material": "polymer",
      "position": [
        0.72,
        0.96,
        1.05
      ],
      "size": [
        0.35,
        0.1,
        0.43
      ]
    },
    {
      "id": "dehumidifier-housing",
      "component": "condensate",
      "type": "box",
      "group": null,
      "color": "#263f45",
      "material": "metal",
      "position": [
        1.5,
        1.14,
        -0.83
      ],
      "size": [
        0.5,
        0.63,
        0.45
      ],
      "cutaway": true
    },
    {
      "id": "coil-fin-0",
      "component": "condensate",
      "type": "box",
      "group": null,
      "color": "#c8d4d8",
      "material": "metal",
      "position": [
        1.3,
        1.15,
        -0.81
      ],
      "size": [
        0.008,
        0.42,
        0.3
      ]
    },
    {
      "id": "coil-fin-1",
      "component": "condensate",
      "type": "box",
      "group": null,
      "color": "#c8d4d8",
      "material": "metal",
      "position": [
        1.355,
        1.15,
        -0.81
      ],
      "size": [
        0.008,
        0.42,
        0.3
      ]
    },
    {
      "id": "coil-fin-2",
      "component": "condensate",
      "type": "box",
      "group": null,
      "color": "#c8d4d8",
      "material": "metal",
      "position": [
        1.4100000000000001,
        1.15,
        -0.81
      ],
      "size": [
        0.008,
        0.42,
        0.3
      ]
    },
    {
      "id": "coil-fin-3",
      "component": "condensate",
      "type": "box",
      "group": null,
      "color": "#c8d4d8",
      "material": "metal",
      "position": [
        1.465,
        1.15,
        -0.81
      ],
      "size": [
        0.008,
        0.42,
        0.3
      ]
    },
    {
      "id": "coil-fin-4",
      "component": "condensate",
      "type": "box",
      "group": null,
      "color": "#c8d4d8",
      "material": "metal",
      "position": [
        1.52,
        1.15,
        -0.81
      ],
      "size": [
        0.008,
        0.42,
        0.3
      ]
    },
    {
      "id": "coil-fin-5",
      "component": "condensate",
      "type": "box",
      "group": null,
      "color": "#c8d4d8",
      "material": "metal",
      "position": [
        1.5750000000000002,
        1.15,
        -0.81
      ],
      "size": [
        0.008,
        0.42,
        0.3
      ]
    },
    {
      "id": "coil-fin-6",
      "component": "condensate",
      "type": "box",
      "group": null,
      "color": "#c8d4d8",
      "material": "metal",
      "position": [
        1.6300000000000001,
        1.15,
        -0.81
      ],
      "size": [
        0.008,
        0.42,
        0.3
      ]
    },
    {
      "id": "coil-fin-7",
      "component": "condensate",
      "type": "box",
      "group": null,
      "color": "#c8d4d8",
      "material": "metal",
      "position": [
        1.685,
        1.15,
        -0.81
      ],
      "size": [
        0.008,
        0.42,
        0.3
      ]
    },
    {
      "id": "coil-refrigerant",
      "component": "condensate",
      "type": "pipe",
      "group": null,
      "color": "#c39e6c",
      "material": "metal",
      "path": [
        [
          1.3,
          1.32,
          -0.81
        ],
        [
          1.7,
          1.32,
          -0.81
        ],
        [
          1.7,
          1.15,
          -0.81
        ],
        [
          1.3,
          1.15,
          -0.81
        ],
        [
          1.3,
          0.99,
          -0.81
        ],
        [
          1.7,
          0.99,
          -0.81
        ]
      ],
      "radius": 0.011
    },
    {
      "id": "condensate-pan",
      "component": "condensate",
      "type": "box",
      "group": null,
      "color": "#e8ece6",
      "material": "polymer",
      "position": [
        1.5,
        0.88,
        -0.83
      ],
      "size": [
        0.48,
        0.035,
        0.39
      ]
    },
    {
      "id": "condensate-buffer",
      "component": "condensate",
      "type": "box",
      "group": null,
      "color": "#73b9bc",
      "material": "glass",
      "position": [
        1.5,
        0.36,
        -0.83
      ],
      "size": [
        0.38,
        0.46,
        0.36
      ],
      "cutaway": true
    },
    {
      "id": "condensate-drain",
      "component": "condensate",
      "type": "pipe",
      "group": null,
      "color": "#60b8dd",
      "material": "water",
      "path": [
        [
          1.7,
          0.89,
          -0.83
        ],
        [
          1.75,
          0.65,
          -0.83
        ],
        [
          1.5,
          0.6,
          -0.83
        ]
      ],
      "radius": 0.012
    },
    {
      "id": "condensate-release-valve",
      "component": "condensate",
      "type": "box",
      "group": null,
      "color": "#e4b16b",
      "material": "metal",
      "position": [
        1.72,
        0.25,
        -0.83
      ],
      "size": [
        0.09,
        0.06,
        0.09
      ]
    },
    {
      "id": "row-datum--0.95--0.48",
      "component": "root",
      "type": "box",
      "group": null,
      "color": "#e4b16b",
      "material": "polymer",
      "position": [
        -0.95,
        0.87,
        -0.48
      ],
      "size": [
        0.06,
        0.045,
        0.1
      ]
    },
    {
      "id": "row-datum--0.95--0.16",
      "component": "root",
      "type": "box",
      "group": null,
      "color": "#e4b16b",
      "material": "polymer",
      "position": [
        -0.95,
        0.87,
        -0.16
      ],
      "size": [
        0.06,
        0.045,
        0.1
      ]
    },
    {
      "id": "row-datum--0.95-0.16",
      "component": "root",
      "type": "box",
      "group": null,
      "color": "#e4b16b",
      "material": "polymer",
      "position": [
        -0.95,
        0.87,
        0.16
      ],
      "size": [
        0.06,
        0.045,
        0.1
      ]
    },
    {
      "id": "row-datum--0.95-0.48",
      "component": "root",
      "type": "box",
      "group": null,
      "color": "#e4b16b",
      "material": "polymer",
      "position": [
        -0.95,
        0.87,
        0.48
      ],
      "size": [
        0.06,
        0.045,
        0.1
      ]
    },
    {
      "id": "row-datum-0.95--0.48",
      "component": "root",
      "type": "box",
      "group": null,
      "color": "#e4b16b",
      "material": "polymer",
      "position": [
        0.95,
        0.87,
        -0.48
      ],
      "size": [
        0.06,
        0.045,
        0.1
      ]
    },
    {
      "id": "row-datum-0.95--0.16",
      "component": "root",
      "type": "box",
      "group": null,
      "color": "#e4b16b",
      "material": "polymer",
      "position": [
        0.95,
        0.87,
        -0.16
      ],
      "size": [
        0.06,
        0.045,
        0.1
      ]
    },
    {
      "id": "row-datum-0.95-0.16",
      "component": "root",
      "type": "box",
      "group": null,
      "color": "#e4b16b",
      "material": "polymer",
      "position": [
        0.95,
        0.87,
        0.16
      ],
      "size": [
        0.06,
        0.045,
        0.1
      ]
    },
    {
      "id": "row-datum-0.95-0.48",
      "component": "root",
      "type": "box",
      "group": null,
      "color": "#e4b16b",
      "material": "polymer",
      "position": [
        0.95,
        0.87,
        0.48
      ],
      "size": [
        0.06,
        0.045,
        0.1
      ]
    },
    {
      "id": "bench-load-cell--0.65",
      "component": "sensing",
      "type": "box",
      "group": null,
      "color": "#80d5bf",
      "material": "metal",
      "position": [
        0,
        0.8,
        -0.65
      ],
      "size": [
        0.18,
        0.03,
        0.055
      ]
    },
    {
      "id": "bench-load-cell-0.65",
      "component": "sensing",
      "type": "box",
      "group": null,
      "color": "#80d5bf",
      "material": "metal",
      "position": [
        0,
        0.8,
        0.65
      ],
      "size": [
        0.18,
        0.03,
        0.055
      ]
    },
    {
      "id": "jaw-pivot-pin-left",
      "component": "harvest",
      "type": "cylinder",
      "group": "jaw-left",
      "position": [
        0,
        0,
        0
      ],
      "radius": 0.009,
      "height": 0.028,
      "axis": "z",
      "color": "#e4b16b",
      "material": "metal"
    },
    {
      "id": "jaw-pivot-pin-right",
      "component": "harvest",
      "type": "cylinder",
      "group": "jaw-right",
      "position": [
        0,
        0,
        0
      ],
      "radius": 0.009,
      "height": 0.028,
      "axis": "z",
      "color": "#e4b16b",
      "material": "metal"
    },
    {
      "id": "blade-guide--0.035",
      "component": "harvest",
      "type": "cylinder",
      "group": "lift",
      "position": [
        -0.035,
        -0.262,
        0.035
      ],
      "radius": 0.006,
      "height": 0.15,
      "axis": "z",
      "color": "#c8d4d8",
      "material": "metal"
    },
    {
      "id": "blade-guide-0.035",
      "component": "harvest",
      "type": "cylinder",
      "group": "lift",
      "position": [
        0.035,
        -0.262,
        0.035
      ],
      "radius": 0.006,
      "height": 0.15,
      "axis": "z",
      "color": "#c8d4d8",
      "material": "metal"
    },
    {
      "id": "blade-slide-block",
      "component": "harvest",
      "type": "box",
      "group": "blade-slide",
      "position": [
        0,
        0.015,
        0.04
      ],
      "size": [
        0.06,
        0.025,
        0.03
      ],
      "color": "#263f45",
      "material": "metal"
    }
  ],
  "flows": [
    {
      "id": "root-supply",
      "label": "Reservoir \u2192 pump \u2192 selected row",
      "path": [
        [
          -0.58,
          0.3,
          0.1
        ],
        [
          -1.5,
          0.3,
          0.65
        ],
        [
          -1.5,
          0.83,
          0.75
        ],
        [
          -1.7,
          1.02,
          0.48
        ],
        [
          -1.08,
          0.98,
          0.48
        ],
        [
          -1.08,
          0.98,
          0.16
        ],
        [
          -0.95,
          0.93,
          0.16
        ]
      ],
      "color": "#60b8dd",
      "stages": [
        "approach",
        "capture",
        "lift",
        "deliver"
      ],
      "kind": "liquid",
      "component": "nutrient",
      "closed": false
    },
    {
      "id": "root-return",
      "label": "Gravity return \u2192 screened reservoir",
      "path": [
        [
          0.95,
          0.925,
          0.16
        ],
        [
          1.06,
          0.63,
          0.16
        ],
        [
          1.06,
          0.63,
          0.7
        ],
        [
          -0.3,
          0.63,
          0.7
        ],
        [
          -0.3,
          0.54,
          0.2
        ],
        [
          -0.58,
          0.3,
          0.1
        ]
      ],
      "color": "#589dbe",
      "stages": [
        "approach",
        "capture",
        "lift",
        "deliver"
      ],
      "kind": "liquid",
      "component": "nutrient",
      "closed": false
    },
    {
      "id": "seed-path",
      "label": "Metered seed \u2192 plug carrier",
      "path": [
        [
          -1.52,
          1.04,
          -0.93
        ],
        [
          -1.52,
          0.95,
          -0.9
        ],
        [
          -1.33,
          0.93,
          -0.79
        ],
        [
          -1.35,
          0.96,
          -0.72
        ]
      ],
      "color": "#e4b16b",
      "stages": [
        "seed"
      ],
      "kind": "material",
      "component": "seeding",
      "closed": false
    },
    {
      "id": "dose-path",
      "label": "Metered concentrate \u2192 mixing zone",
      "path": [
        [
          -1.55,
          0.35,
          -0.55
        ],
        [
          -1.55,
          0.64,
          -0.55
        ],
        [
          -0.82,
          0.64,
          -0.55
        ],
        [
          -0.82,
          0.51,
          -0.05
        ]
      ],
      "color": "#cbb279",
      "stages": [
        "approach"
      ],
      "kind": "liquid",
      "component": "dosing",
      "closed": false
    },
    {
      "id": "inspection-data",
      "label": "Crop image \u2192 bounded local controller",
      "path": [
        [
          0.58,
          1.9,
          0.19
        ],
        [
          0.45,
          2.08,
          0.16
        ],
        [
          -1.72,
          1.55,
          -0.25
        ],
        [
          -1.64,
          1.36,
          -0.25
        ]
      ],
      "color": "#80d5bf",
      "stages": [
        "approach",
        "capture",
        "dock"
      ],
      "kind": "data",
      "component": "sensing",
      "closed": false
    },
    {
      "id": "wash-reject",
      "label": "Spent wash \u2192 captured waste",
      "path": [
        [
          0.15,
          0.85,
          1.05
        ],
        [
          0.3,
          0.73,
          1.1
        ],
        [
          0.3,
          0.47,
          1.1
        ],
        [
          0.15,
          0.27,
          1.05
        ]
      ],
      "color": "#c2a577",
      "stages": [
        "wash"
      ],
      "kind": "liquid",
      "component": "wash",
      "closed": false
    },
    {
      "id": "vapor-recovery",
      "label": "Crop transpiration \u2192 coil \u2192 untreated buffer",
      "path": [
        [
          0.45,
          1.25,
          0.16
        ],
        [
          1.25,
          1.5,
          -0.4
        ],
        [
          1.5,
          1.15,
          -0.83
        ],
        [
          1.7,
          0.89,
          -0.83
        ],
        [
          1.5,
          0.36,
          -0.83
        ]
      ],
      "color": "#9ad9d3",
      "stages": [
        "approach",
        "capture",
        "lift",
        "deliver"
      ],
      "kind": "vapor",
      "component": "condensate",
      "closed": false
    }
  ],
  "stages": [
    {
      "id": "seed",
      "title": "01 / Meter, germinate, identify",
      "duration": 7,
      "explanation": "An indexed seed disk drops into a known substrate plug. The fixed station, not the harvest blade, does the seeding. Germination and transfer take days and are compressed into this explanatory state; a human initially transfers nursery carriers.",
      "activeComponents": [
        "seeding",
        "nursery",
        "sensing"
      ],
      "poses": {
        "gantry-x": {
          "position": [
            -1.35,
            2,
            0
          ],
          "rotation": [
            0,
            0,
            0
          ]
        },
        "traverse-z": {
          "position": [
            0,
            0,
            -0.72
          ],
          "rotation": [
            0,
            0,
            0
          ]
        },
        "lift": {
          "position": [
            0,
            -0.12,
            0
          ],
          "rotation": [
            0,
            0,
            0
          ]
        },
        "pump-cartridge": {
          "position": [
            -1.5,
            0.76,
            0.75
          ],
          "rotation": [
            0,
            0,
            0
          ]
        },
        "jaw-left": {
          "position": [
            -0.07,
            -0.21,
            0
          ],
          "rotation": [
            0,
            0,
            -20
          ]
        },
        "jaw-right": {
          "position": [
            0.07,
            -0.21,
            0
          ],
          "rotation": [
            0,
            0,
            20
          ]
        },
        "blade-slide": {
          "position": [
            0,
            -0.283,
            0.07
          ],
          "rotation": [
            0,
            0,
            0
          ]
        }
      },
      "observable": "Seed occupancy and carrier identity checked; nursery water remains separate.",
      "inputs": "Clean carrier, seed lot, substrate, approved recipe.",
      "outputs": "A traceable young-plant carrier; biological time is not simulated.",
      "failure": "Doubles, absent emergence or mixed IDs go to inspection, not automatic acceptance."
    },
    {
      "id": "approach",
      "title": "02 / Survey a growing row",
      "duration": 6,
      "explanation": "The X bridge carries a Z slide and vertical lift above a surveyed crop collar. Four root channels irrigate below; camera and mass observations update the crop passport. Growth over weeks is represented, not simulated.",
      "activeComponents": [
        "gantry",
        "root",
        "nutrient",
        "dosing",
        "sensing",
        "condensate"
      ],
      "poses": {
        "gantry-x": {
          "position": [
            0.45,
            2,
            0
          ],
          "rotation": [
            0,
            0,
            0
          ]
        },
        "traverse-z": {
          "position": [
            0,
            0,
            0.16
          ],
          "rotation": [
            0,
            0,
            0
          ]
        },
        "lift": {
          "position": [
            0,
            -0.12,
            0
          ],
          "rotation": [
            0,
            0,
            0
          ]
        },
        "pump-cartridge": {
          "position": [
            -1.5,
            0.76,
            0.75
          ],
          "rotation": [
            0,
            0,
            0
          ]
        },
        "jaw-left": {
          "position": [
            -0.07,
            -0.21,
            0
          ],
          "rotation": [
            0,
            0,
            -20
          ]
        },
        "jaw-right": {
          "position": [
            0.07,
            -0.21,
            0
          ],
          "rotation": [
            0,
            0,
            20
          ]
        },
        "blade-slide": {
          "position": [
            0,
            -0.283,
            0.07
          ],
          "rotation": [
            0,
            0,
            0
          ]
        }
      },
      "observable": "Tool held above the canopy; inlet and return routes visible.",
      "inputs": "Calibrated position, crop envelope, root flow and harvest decision.",
      "outputs": "Verified safe approach pose and separate water/energy observations.",
      "failure": "Occluded stem or crop beyond envelope cancels descent."
    },
    {
      "id": "capture",
      "title": "03 / Capture before cut",
      "duration": 5,
      "explanation": "First descend vertically at the surveyed crop collar, then close the compliant holding pads, then push the guarded blade across the supported stem. Per-pose timing windows separate these actions; this remains an explanatory mechanism sequence, not a validated autonomous harvest.",
      "activeComponents": [
        "gantry",
        "harvest",
        "dock",
        "sensing"
      ],
      "poses": {
        "gantry-x": {
          "position": [
            0.45,
            2,
            0
          ],
          "rotation": [
            0,
            0,
            0
          ]
        },
        "traverse-z": {
          "position": [
            0,
            0,
            0.16
          ],
          "rotation": [
            0,
            0,
            0
          ]
        },
        "lift": {
          "position": [
            0,
            -0.65,
            0
          ],
          "rotation": [
            0,
            0,
            0
          ],
          "window": [
            0,
            0.45
          ]
        },
        "pump-cartridge": {
          "position": [
            -1.5,
            0.76,
            0.75
          ],
          "rotation": [
            0,
            0,
            0
          ]
        },
        "jaw-left": {
          "position": [
            -0.07,
            -0.21,
            0
          ],
          "rotation": [
            0,
            0,
            0
          ],
          "window": [
            0.45,
            0.7
          ]
        },
        "jaw-right": {
          "position": [
            0.07,
            -0.21,
            0
          ],
          "rotation": [
            0,
            0,
            0
          ],
          "window": [
            0.45,
            0.7
          ]
        },
        "blade-slide": {
          "position": [
            0,
            -0.283,
            -0.025
          ],
          "rotation": [
            0,
            0,
            0
          ],
          "window": [
            0.7,
            1
          ]
        }
      },
      "observable": "Tool reaches the crop collar at approximately Y=1.07 m.",
      "inputs": "Retention confirmation and exclusion-zone clear.",
      "outputs": "A cut-and-held head if all checks pass.",
      "failure": "No blind re-cut: uncertain retention or high force sends a bounded exception."
    },
    {
      "id": "lift",
      "title": "04 / Clear the canopy",
      "duration": 5,
      "explanation": "Raise vertically before any traverse. A second image and tool/load observation distinguish a severed retained head from a connected stem or empty grip. The illustrative crop remains visible for comparison.",
      "activeComponents": [
        "gantry",
        "harvest",
        "sensing"
      ],
      "poses": {
        "gantry-x": {
          "position": [
            0.45,
            2,
            0
          ],
          "rotation": [
            0,
            0,
            0
          ]
        },
        "traverse-z": {
          "position": [
            0,
            0,
            0.16
          ],
          "rotation": [
            0,
            0,
            0
          ]
        },
        "lift": {
          "position": [
            0,
            -0.12,
            0
          ],
          "rotation": [
            0,
            0,
            0
          ],
          "window": [
            0.25,
            1
          ]
        },
        "pump-cartridge": {
          "position": [
            -1.5,
            0.76,
            0.75
          ],
          "rotation": [
            0,
            0,
            0
          ]
        },
        "jaw-left": {
          "position": [
            -0.07,
            -0.21,
            0
          ],
          "rotation": [
            0,
            0,
            0
          ]
        },
        "jaw-right": {
          "position": [
            0.07,
            -0.21,
            0
          ],
          "rotation": [
            0,
            0,
            0
          ]
        },
        "blade-slide": {
          "position": [
            0,
            -0.283,
            0.07
          ],
          "rotation": [
            0,
            0,
            0
          ],
          "window": [
            0,
            0.25
          ]
        }
      },
      "observable": "No lateral motion until the end effector is above the declared crop envelope.",
      "inputs": "Cut confirmation, retention and lift clearance.",
      "outputs": "Verified carried produce or a recorded exception.",
      "failure": "Unexpected tension stops lift; do not pull a still-rooted crop across the bed."
    },
    {
      "id": "deliver",
      "title": "05 / Deliver to clean output",
      "duration": 7,
      "explanation": "Traverse in clearance above the bed, then enter the open produce lane. The receiving scale and camera confirm release. Endpoint interpolation illustrates the trip; production motion must insert a clearance waypoint before descent.",
      "activeComponents": [
        "gantry",
        "output",
        "harvest"
      ],
      "poses": {
        "gantry-x": {
          "position": [
            1.48,
            2,
            0
          ],
          "rotation": [
            0,
            0,
            0
          ],
          "window": [
            0,
            0.8
          ]
        },
        "traverse-z": {
          "position": [
            0,
            0,
            0.95
          ],
          "rotation": [
            0,
            0,
            0
          ],
          "window": [
            0,
            0.8
          ]
        },
        "lift": {
          "position": [
            0,
            -0.45,
            0
          ],
          "rotation": [
            0,
            0,
            0
          ],
          "window": [
            0,
            0.8
          ]
        },
        "pump-cartridge": {
          "position": [
            -1.5,
            0.76,
            0.75
          ],
          "rotation": [
            0,
            0,
            0
          ]
        },
        "jaw-left": {
          "position": [
            -0.07,
            -0.21,
            0
          ],
          "rotation": [
            0,
            0,
            -20
          ],
          "window": [
            0.8,
            1
          ]
        },
        "jaw-right": {
          "position": [
            0.07,
            -0.21,
            0
          ],
          "rotation": [
            0,
            0,
            20
          ],
          "window": [
            0.8,
            1
          ]
        },
        "blade-slide": {
          "position": [
            0,
            -0.283,
            0.07
          ],
          "rotation": [
            0,
            0,
            0
          ]
        }
      },
      "observable": "Tool above the separate right-hand receiving tray.",
      "inputs": "Clean receiving tray with free capacity.",
      "outputs": "Weighed accepted harvest; packing and cold storage remain explicit support tasks.",
      "failure": "Absent mass increase or tray backlog prevents an accepted-harvest record."
    },
    {
      "id": "wash",
      "title": "06 / Wash dirty hardware",
      "duration": 7,
      "explanation": "The front service corridor keeps the dirty tool away from crop foliage. Root removal, cleaning, validated sanitation and drying are distinct steps; only a representative wash position is animated.",
      "activeComponents": [
        "wash",
        "harvest"
      ],
      "poses": {
        "gantry-x": {
          "position": [
            0.15,
            2,
            0
          ],
          "rotation": [
            0,
            0,
            0
          ]
        },
        "traverse-z": {
          "position": [
            0,
            0,
            1.05
          ],
          "rotation": [
            0,
            0,
            0
          ]
        },
        "lift": {
          "position": [
            0,
            -0.75,
            0
          ],
          "rotation": [
            0,
            0,
            0
          ]
        },
        "pump-cartridge": {
          "position": [
            -1.5,
            0.76,
            0.75
          ],
          "rotation": [
            0,
            0,
            0
          ]
        },
        "jaw-left": {
          "position": [
            -0.07,
            -0.21,
            0
          ],
          "rotation": [
            0,
            0,
            -20
          ]
        },
        "jaw-right": {
          "position": [
            0.07,
            -0.21,
            0
          ],
          "rotation": [
            0,
            0,
            20
          ]
        },
        "blade-slide": {
          "position": [
            0,
            -0.283,
            0.07
          ],
          "rotation": [
            0,
            0,
            0
          ]
        }
      },
      "observable": "Tool at the wash bath; effluent terminates in a separate waste tank.",
      "inputs": "A dirty tool or empty carrier; approved cleaning cycle and consumables.",
      "outputs": "A pending-clean item, not an automatically sterile item.",
      "failure": "Missing cycle evidence or residue prohibits return to clean inventory."
    },
    {
      "id": "quarantine",
      "title": "07 / Isolate an exception",
      "duration": 5,
      "explanation": "A separate lidded quarantine tray holds rejected crop or suspect hardware. The line can continue on healthy independent rows while a bounded diagnostic agent prepares an inspection request.",
      "activeComponents": [
        "wash",
        "sensing"
      ],
      "poses": {
        "gantry-x": {
          "position": [
            -0.65,
            2,
            0
          ],
          "rotation": [
            0,
            0,
            0
          ]
        },
        "traverse-z": {
          "position": [
            0,
            0,
            1.05
          ],
          "rotation": [
            0,
            0,
            0
          ]
        },
        "lift": {
          "position": [
            0,
            -0.75,
            0
          ],
          "rotation": [
            0,
            0,
            0
          ]
        },
        "pump-cartridge": {
          "position": [
            -1.5,
            0.76,
            0.75
          ],
          "rotation": [
            0,
            0,
            0
          ]
        },
        "jaw-left": {
          "position": [
            -0.07,
            -0.21,
            0
          ],
          "rotation": [
            0,
            0,
            -20
          ]
        },
        "jaw-right": {
          "position": [
            0.07,
            -0.21,
            0
          ],
          "rotation": [
            0,
            0,
            20
          ]
        },
        "blade-slide": {
          "position": [
            0,
            -0.283,
            0.07
          ],
          "rotation": [
            0,
            0,
            0
          ]
        }
      },
      "observable": "Reject lane is physically separate from clean receiving and nutrient tank.",
      "inputs": "Rejected batch/item ID and explicit reason.",
      "outputs": "A retained exception record; human review remains available.",
      "failure": "Unknown item identity stops release rather than erasing uncertainty."
    },
    {
      "id": "isolate",
      "title": "08 / Isolate selected pump",
      "duration": 6,
      "explanation": "Raise and approach the accessible pump dock. Stop pump power, close upstream/downstream isolation and verify depressurization and captured drain before touching the retention latch. This maintenance transaction is a proposed second-stage experiment.",
      "activeComponents": [
        "service",
        "nutrient",
        "gantry",
        "sensing"
      ],
      "poses": {
        "gantry-x": {
          "position": [
            -1.5,
            2,
            0
          ],
          "rotation": [
            0,
            0,
            0
          ]
        },
        "traverse-z": {
          "position": [
            0,
            0,
            0.75
          ],
          "rotation": [
            0,
            0,
            0
          ]
        },
        "lift": {
          "position": [
            0,
            -0.12,
            0
          ],
          "rotation": [
            0,
            0,
            0
          ]
        },
        "pump-cartridge": {
          "position": [
            -1.5,
            0.76,
            0.75
          ],
          "rotation": [
            0,
            0,
            0
          ]
        },
        "jaw-left": {
          "position": [
            -0.07,
            -0.21,
            0
          ],
          "rotation": [
            0,
            0,
            -20
          ]
        },
        "jaw-right": {
          "position": [
            0.07,
            -0.21,
            0
          ],
          "rotation": [
            0,
            0,
            20
          ]
        },
        "blade-slide": {
          "position": [
            0,
            -0.283,
            0.07
          ],
          "rotation": [
            0,
            0,
            0
          ]
        }
      },
      "observable": "High approach directly above the pump handle and drip well.",
      "inputs": "Authorized maintenance job, spare identity and healthy backup/root contingency.",
      "outputs": "Verified isolated and drain-safe cartridge.",
      "failure": "Any pressure, power or valve-state disagreement prevents unlatching."
    },
    {
      "id": "dock",
      "title": "09 / Grip the service handle",
      "duration": 5,
      "explanation": "Descend vertically onto the real cartridge handle. The carrier-grip jaws can engage this standardized handle without a fictional free-floating arm. Confirm grip before releasing the separate service retention latch.",
      "activeComponents": [
        "service",
        "dock",
        "harvest",
        "gantry"
      ],
      "poses": {
        "gantry-x": {
          "position": [
            -1.5,
            2,
            0
          ],
          "rotation": [
            0,
            0,
            0
          ]
        },
        "traverse-z": {
          "position": [
            0,
            0,
            0.75
          ],
          "rotation": [
            0,
            0,
            0
          ]
        },
        "lift": {
          "position": [
            0,
            -0.72,
            0
          ],
          "rotation": [
            0,
            0,
            0
          ]
        },
        "pump-cartridge": {
          "position": [
            -1.5,
            0.76,
            0.75
          ],
          "rotation": [
            0,
            0,
            0
          ]
        },
        "jaw-left": {
          "position": [
            -0.07,
            -0.21,
            0
          ],
          "rotation": [
            0,
            0,
            0
          ]
        },
        "jaw-right": {
          "position": [
            0.07,
            -0.21,
            0
          ],
          "rotation": [
            0,
            0,
            0
          ]
        },
        "blade-slide": {
          "position": [
            0,
            -0.283,
            0.07
          ],
          "rotation": [
            0,
            0,
            0
          ]
        }
      },
      "observable": "Tool jaw center and cartridge handle align at about Y=1.01 m.",
      "inputs": "Isolation proof, open extraction path and confirmed mechanical capture.",
      "outputs": "A held isolated module ready for straight withdrawal.",
      "failure": "Latch resistance or absent grip inhibits movement."
    },
    {
      "id": "withdraw",
      "title": "10 / Withdraw, inspect, then replace",
      "duration": 7,
      "explanation": "The pump and tool rise by the same 0.32 m along the vertical extraction axis. Two valved ports separate into the drip well. Parking the old cassette, fetching the spare, leak testing and controlled restart are required follow-on operations, not silently claimed by this animation.",
      "activeComponents": [
        "service",
        "gantry",
        "sensing"
      ],
      "poses": {
        "gantry-x": {
          "position": [
            -1.5,
            2,
            0
          ],
          "rotation": [
            0,
            0,
            0
          ]
        },
        "traverse-z": {
          "position": [
            0,
            0,
            0.75
          ],
          "rotation": [
            0,
            0,
            0
          ]
        },
        "lift": {
          "position": [
            0,
            -0.4,
            0
          ],
          "rotation": [
            0,
            0,
            0
          ]
        },
        "pump-cartridge": {
          "position": [
            -1.5,
            1.08,
            0.75
          ],
          "rotation": [
            0,
            0,
            0
          ]
        },
        "jaw-left": {
          "position": [
            -0.07,
            -0.21,
            0
          ],
          "rotation": [
            0,
            0,
            0
          ]
        },
        "jaw-right": {
          "position": [
            0.07,
            -0.21,
            0
          ],
          "rotation": [
            0,
            0,
            0
          ]
        },
        "blade-slide": {
          "position": [
            0,
            -0.283,
            0.07
          ],
          "rotation": [
            0,
            0,
            0
          ]
        }
      },
      "observable": "Actual pump cartridge separates from fixed fluid couplers while held at its handle.",
      "inputs": "Confirmed grip, latch released and safe isolation.",
      "outputs": "Accessible old module; exchange transaction remains incomplete until spare installation and leak test.",
      "failure": "Coupler drag, uncaptured drips or unexpected load stops withdrawal."
    }
  ],
  "components": [
    {
      "id": "frame",
      "name": "Datum frame + light canopy",
      "role": "Hold the crop and robot in a shared measured coordinate system.",
      "principle": "A stiff fixture makes plants legible to a simple Cartesian robot; light bars mount outside the moving envelope.",
      "materials": "Anodized aluminum frame, stainless fasteners, washable opaque covers.",
      "interfaces": "Surveyed carrier datum; segregated low-voltage cable tray; guarded travel envelope.",
      "failure": "Racking drift, rail sag or a person entering the work envelope.",
      "test": "Measure full-stroke deflection and repeatability under wet payload; prove interlock stop before unattended operation.",
      "evidence": [
        "F02",
        "F03"
      ],
      "status": "Proposed integration"
    },
    {
      "id": "gantry",
      "name": "X / Z / vertical-lift robot",
      "role": "Move only between surveyed crop and station locations.",
      "principle": "Orthogonal linear axes trade generality for predictable reach and a maintainable robot.",
      "materials": "Linear rails, belt or screw drive, encoder motors, drag chain and guarded lift.",
      "interfaces": "X parent \u2192 Z cross-slide \u2192 Y lift; independent travel and lift limits.",
      "failure": "Lost steps, belt slip, dropped load or collision with oversized crop.",
      "test": "1000 dry cycles plus measured loaded repeatability; loss of encoder/limit input must inhibit descent.",
      "evidence": [
        "F02",
        "F03",
        "F06"
      ],
      "status": "Proposed integration"
    },
    {
      "id": "dock",
      "name": "Positive-lock universal tool dock",
      "role": "Separate mechanical location, load retention and utilities.",
      "principle": "Three geometric seats align before a cam lock closes; independent sensor confirms retention before motion.",
      "materials": "Stainless locating seats, polymer shroud, replaceable contact insert.",
      "interfaces": "Carrier-grip/cut tool mounted; seeder and soft-gripper spares parked; dry data/power above wet ports.",
      "failure": "Partial seating, contaminated contact, false lock or incompatible tool identity.",
      "test": "Pull-test and 1000 docking cycles; jam and wrong-ID trials must fail closed.",
      "evidence": [
        "F01",
        "F07",
        "F08"
      ],
      "status": "Proposed integration"
    },
    {
      "id": "seeding",
      "name": "Indexed seed cassette",
      "role": "Place pelleted lettuce seed into known plug locations.",
      "principle": "An indexed pocket disk meters seed into a short chute; a camera checks zero/one/multiple occupancy.",
      "materials": "Cleanable cassette, replaceable pocket disk, substrate plugs.",
      "interfaces": "Seed lot ID, plug-carrier barcode, fixed seed chute, tool-bay vacuum seeder option.",
      "failure": "Bridging, doubles, empty pockets or the wrong crop recipe.",
      "test": "Count 500 pockets with ground truth; reject unknown or multiple seeds rather than hide misses.",
      "evidence": [
        "F01",
        "F15"
      ],
      "status": "Proposed integration"
    },
    {
      "id": "nursery",
      "name": "Germination + spacing carrier",
      "role": "Bring young plants to the grow fixture without moving a heavy reservoir.",
      "principle": "Compact germination carriers dock into a larger washable rack; growth spacing is an external setup operation.",
      "materials": "Opaque removable lid, reusable PP carrier and substrate-specific inserts.",
      "interfaces": "Shared carrier corner datum, separate nursery water supply and sanitation state.",
      "failure": "Uneven emergence, stretched seedlings, damaged roots or mixed batches.",
      "test": "Complete three real propagation cycles and record germination, survival and transfer labor.",
      "evidence": [
        "F03",
        "F12",
        "F15"
      ],
      "status": "Proposed integration"
    },
    {
      "id": "root",
      "name": "Drainable root-zone cassette",
      "role": "Support each crop row and deliver a shallow nutrient film.",
      "principle": "Removable lid and collars expose roots; inlet is upstream, gravity return downstream; movement requires isolation and drainage.",
      "materials": "Opaque food-contact-suitable PP/HDPE channels, replaceable collars, non-shedding supports.",
      "interfaces": "Four independently valved rows; lower return header; mechanically keyed inlet and return.",
      "failure": "Root mat blocks return, channel sags, oxygen loss or cross-batch contamination.",
      "test": "Flood/drain and blockage trials with mature roots; validate cleaning and retained volume.",
      "evidence": [
        "F03",
        "F12"
      ],
      "status": "Proposed integration"
    },
    {
      "id": "nutrient",
      "name": "Reservoir, filter + recirculation loop",
      "role": "Supply roots without mixing the farm with potable or wash circuits.",
      "principle": "A low reservoir, screened return, pump and valved supply header form a closed batch circuit.",
      "materials": "Opaque removable reservoir, service screen, selected pump, separate drain tray.",
      "interfaces": "Checkable supply, gravity return, sample bypass, controlled reject drain.",
      "failure": "Pump loss, blocked filter, return leak or shared pathogen transport.",
      "test": "Measure head/flow at every row and recovery during pump failure; challenge bypass detection.",
      "evidence": [
        "F09",
        "F12"
      ],
      "status": "Proposed integration"
    },
    {
      "id": "dosing",
      "name": "Independent concentrate dosing",
      "role": "Add measured inputs only after stable observations.",
      "principle": "Peristaltic pumps meter separate concentrates into a mixing zone; verify before and after response.",
      "materials": "Dedicated tubing, acid/base-compatible containers, spill containment.",
      "interfaces": "A/B concentrates never touch before dilution; pH correction isolated; bounded controller budget.",
      "failure": "Stuck dosing, tube wear, drift or precipitate from incompatible concentrates.",
      "test": "Gravimetric calibration, stuck-on injection and sensor disagreement tests with safe surrogate fluid.",
      "evidence": [
        "F12",
        "F13"
      ],
      "status": "Proposed integration"
    },
    {
      "id": "sensing",
      "name": "Metrology + crop passport",
      "role": "Make biological state and maintenance burden inspectable.",
      "principle": "Combine RGB-D crop position, tray mass, EC/pH/temperature, reservoir level and leak observation.",
      "materials": "Protected cameras, replaceable probes, load-cell supports, local controller.",
      "interfaces": "Timestamped measurements, uncertainty, calibration ID and batch record; no direct agent-to-motor channel.",
      "failure": "Glare, occlusion, probe drift or plausible but false readings.",
      "test": "Obscure camera and offset probes; independent bounds must stop dosing and queue inspection.",
      "evidence": [
        "F06",
        "F11",
        "F12"
      ],
      "status": "Proposed integration"
    },
    {
      "id": "harvest",
      "name": "Capture-before-cut cartridge",
      "role": "Retain a leafy head before severing its stem.",
      "principle": "Compliant fingers locate around a supported crop collar; a guarded push cutter traverses only after retention.",
      "materials": "Removable stainless blade, replaceable compliant pads, sealed actuator outside wash path.",
      "interfaces": "Shared dock; carrier handle grip plus crop pads; optional seeder/gripper cartridges in magazine.",
      "failure": "Leaf bruising, missed stem, incomplete cut or dropped produce.",
      "test": "Measure complete approach\u2192capture\u2192cut\u2192deliver success, bruising and blade cleanability on real plants.",
      "evidence": [
        "F04",
        "F05",
        "F06"
      ],
      "status": "Proposed integration"
    },
    {
      "id": "output",
      "name": "Clean produce output",
      "role": "Weigh and transfer accepted harvest out of the wet service zone.",
      "principle": "A dedicated receiving tray provides a known release height and final retention confirmation.",
      "materials": "Removable food-contact tray, load cells, clean-side cover.",
      "interfaces": "Clean produce lane separate from spent roots and wash effluent.",
      "failure": "Crop drop, packaging backlog, dirty tray or acceptance without mass change.",
      "test": "Verify delivery mass and independent camera receipt; log packing and cold-chain labor.",
      "evidence": [
        "F06",
        "F15"
      ],
      "status": "Proposed integration"
    },
    {
      "id": "wash",
      "name": "Wash / quarantine boundary",
      "role": "Return only verified clean carriers to seed stock.",
      "principle": "Physical removal, wash, validated sanitation, rinse if required and drying are separate states; rejects remain isolated.",
      "materials": "Removable wash trough, spray manifold, debris basket, segregated quarantine tray.",
      "interfaces": "Dedicated wash tank/drain; no direct wash-return or quarantine-return connection to nutrient supply.",
      "failure": "Biofilm in dead legs, incomplete root removal, aerosol transfer or ambiguous clean-state record.",
      "test": "Soil/coupon cleaning validation and external microbiological review before food operation; reject missing cycle evidence.",
      "evidence": [
        "F09",
        "F11",
        "F15"
      ],
      "status": "Proposed integration"
    },
    {
      "id": "condensate",
      "name": "Condensate recovery buffer",
      "role": "Recover dehumidifier water without assuming that clear water is safe.",
      "principle": "A cold coil condenses transpired vapor into a monitored buffer; treatment and quality release precede reuse.",
      "materials": "Corrosion-compatible coil, sloped pan, air filter, separate buffer and transfer valve.",
      "interfaces": "Untreated condensate never cross-connects directly to crop or potable loop.",
      "failure": "Coil fouling, metal leachate, microbial growth or unmeasured treatment energy.",
      "test": "Measure recovered volume, energy and contaminants over crop cycles; withhold reuse if release criteria fail.",
      "evidence": [
        "F10",
        "F12"
      ],
      "status": "Proposed integration"
    },
    {
      "id": "service",
      "name": "Isolatable pump cartridge",
      "role": "Demonstrate one bounded maintenance transaction, not a self-repairing farm.",
      "principle": "Stop and isolate flow, verify drain/pressure, open the positive retention latch, lift a keyed spare cassette and leak-test before restart.",
      "materials": "Replaceable pump and fluid manifold, non-spill couplings, drip well, accessible handle.",
      "interfaces": "Vertical extraction path; dry electrical plug above two fluid ports; service identity and isolation record.",
      "failure": "Coupler residue, stuck latch, trapped pressure or false electrical isolation.",
      "test": "100 water-only exchange cycles with captured drips, false-isolation faults and measured restart flow.",
      "evidence": [
        "F07",
        "F08",
        "F14"
      ],
      "status": "Proposed integration"
    }
  ],
  "calculations": {
    "status": "Transparent engineering assumptions for sensitivity; not measured performance.",
    "defaults": {
      "canopyAreaM2": 2.0,
      "plantsPerM2": 12,
      "harvestMassKg": 0.15,
      "cycleDays": 35,
      "saleableFraction": 0.85,
      "dliMolM2Day": 16,
      "ledEfficacyUmolJ": 2.8,
      "transpirationLM2Day": 3,
      "condensateRecoveryFraction": 0.8,
      "purgeLDay": 1,
      "pumpHeadM": 1.8,
      "pumpFlowLMin": 1.2,
      "pumpEfficiency": 0.2,
      "gantrySpeedMS": 0.15,
      "gantryAccelerationMS2": 0.3,
      "freshLettuceKcal100g": 15
    },
    "equations": [
      {
        "id": "yield",
        "label": "Illustrative fresh yield",
        "formula": "A \u00d7 density \u00d7 head mass \u00d7 saleable fraction / cycle days",
        "unit": "kg/day",
        "baseline": 0.08743,
        "boundary": "24 crop sites / 35 days; cultivar and real cycle must be measured."
      },
      {
        "id": "lighting",
        "label": "Idealized LED electricity",
        "formula": "A \u00d7 DLI / (3.6 \u00d7 efficacy)",
        "unit": "kWh/day",
        "baseline": 3.1746,
        "boundary": "No sunlight credit; excludes HVAC, pumps, driver losses and control power."
      },
      {
        "id": "water",
        "label": "Illustrative make-up water",
        "formula": "A \u00d7 transpiration \u00d7 (1 \u2212 recovery) + purge",
        "unit": "L/day",
        "baseline": 2.2,
        "boundary": "Excludes produce water, leaks, wash, nursery and treatment reject."
      },
      {
        "id": "latent",
        "label": "Latent load associated with transpiration",
        "formula": "A \u00d7 transpiration \u00d7 0.68",
        "unit": "kWh thermal/day",
        "baseline": 4.08,
        "boundary": "Heat-load bookkeeping, not extra energy generated; electrical dehumidification depends on COP and conditions."
      },
      {
        "id": "pump",
        "label": "Idealized pump input",
        "formula": "1000 \u00d7 9.81 \u00d7 (flow L/min \u00f7 60000) \u00d7 head / efficiency",
        "unit": "W",
        "baseline": 1.7658,
        "boundary": "Real small pump input and standby losses can be much higher; measure at operating head."
      },
      {
        "id": "calories",
        "label": "Illustrative fresh-crop energy",
        "formula": "yield kg/day \u00d7 10 \u00d7 kcal per 100 g",
        "unit": "kcal/day",
        "baseline": 13.114,
        "boundary": "A greens cell is not a household calorie supply."
      }
    ],
    "parameters": [
      {
        "id": "canopyAreaM2",
        "label": "Active canopy",
        "min": 1,
        "max": 8,
        "step": 0.5,
        "default": 2,
        "unit": "m\u00b2"
      },
      {
        "id": "cycleDays",
        "label": "Crop cycle",
        "min": 21,
        "max": 60,
        "step": 1,
        "default": 35,
        "unit": "days"
      },
      {
        "id": "saleableFraction",
        "label": "Saleable fraction",
        "min": 0.5,
        "max": 1,
        "step": 0.01,
        "default": 0.85,
        "unit": "fraction"
      },
      {
        "id": "dliMolM2Day",
        "label": "Light integral",
        "min": 8,
        "max": 24,
        "step": 1,
        "default": 16,
        "unit": "mol/m\u00b2/day"
      },
      {
        "id": "condensateRecoveryFraction",
        "label": "Recovery of transpired vapor",
        "min": 0,
        "max": 0.95,
        "step": 0.05,
        "default": 0.8,
        "unit": "fraction"
      }
    ],
    "reliability": "At 86.1% complete harvest, 24 attempts produce about 3.3 exceptions on average; this illustrates workload, not a binomial guarantee for a different system.",
    "robotEnvelope": "Illustrative X \u00b11.6 m, Z \u00b11.15 m; vertical approach uses measured crop envelope. Production trajectories require clearance waypoints, guarding and independent stop logic."
  },
  "prototype": {
    "title": "One real row before one autonomous room",
    "phase": "Bench integration; commercial component classes + proposed assembly",
    "scope": "24 lettuce sites, four independent rows, one complete monitored crop campaign and water-only pump exchange before crop service automation.",
    "dossier": "dossier.md",
    "billOfMaterials": "prototype.json"
  },
  "limits": [
    "The scene contains proposed geometry, not manufactured CAD or stress analysis.",
    "No depicted tool swap is claimed: spare cartridges remain physically parked.",
    "Growth and cleaning durations are explanatory compression, not agronomic or sanitation process times.",
    "Plant meshes remain in place after the harvest stage; measured crop state and produce transport are not simulated.",
    "Stage interpolation is not collision planning. Executable motion needs safe-height waypoints, guards, homing and validation.",
    "Only vertical pump withdrawal is animated; complete old-module parking, spare insertion, leak test and restart remain prototype gates.",
    "Condensate, nutrient and wash loops are separate; no potable-water or food-safety certification is claimed.",
    "Initial resupply, nursery transfer, sanitation verification, packaging, remote exceptions and maintenance remain human tasks.",
    "Jaw and cutter timing uses optional per-pose window metadata; an engine that ignores it does not depict the required sequential interlocks."
  ]
}
