{
  "models": [
    {
      "url": "https://bitbybit.dev/files/site/learn/composer/composer.tutorial/catamaran-20m.ae949303.glb",
      "id": "boat",
      "name": "catamaran-20m",
      "variantMatch": [
        {
          "name": "boat_length",
          "value": "20_m"
        }
      ],
      "gltfStructure": {
        "nodes": [
          {
            "name": "unit scale",
            "type": "transform",
            "children": [
              {
                "name": "Catamaran",
                "type": "transform",
                "children": [
                  {
                    "name": "Options",
                    "type": "transform",
                    "children": [
                      {
                        "name": "Option - Lower helm, classic",
                        "type": "transform",
                        "variantMatch": [
                          {
                            "name": "helm_style",
                            "value": "classic"
                          }
                        ]
                      },
                      {
                        "name": "Option - Upper helm, classic",
                        "type": "transform",
                        "variantMatch": [
                          {
                            "name": "helm_style",
                            "value": "classic"
                          }
                        ]
                      },
                      {
                        "name": "Option - Lower helm, ergonomic",
                        "type": "transform",
                        "variantMatch": [
                          {
                            "name": "helm_style",
                            "value": "ergonomic"
                          }
                        ]
                      },
                      {
                        "name": "Option - Upper helm, ergonomic",
                        "type": "transform",
                        "variantMatch": [
                          {
                            "name": "helm_style",
                            "value": "ergonomic"
                          }
                        ]
                      },
                      {
                        "name": "Option - Lower helm, sport",
                        "type": "transform",
                        "variantMatch": [
                          {
                            "name": "helm_style",
                            "value": "sport"
                          }
                        ]
                      },
                      {
                        "name": "Option - Upper helm, sport",
                        "type": "transform",
                        "variantMatch": [
                          {
                            "name": "helm_style",
                            "value": "sport"
                          }
                        ]
                      },
                      {
                        "name": "Option - Foredeck sun beds",
                        "type": "transform",
                        "variantMatch": [
                          {
                            "name": "aboard__foredeck",
                            "value": true
                          }
                        ]
                      },
                      {
                        "name": "Option - Flybridge sun bed",
                        "type": "transform",
                        "variantMatch": [
                          {
                            "name": "aboard__flybridge",
                            "value": true
                          }
                        ]
                      },
                      {
                        "name": "Option - Beach club, starboard",
                        "type": "transform",
                        "variantMatch": [
                          {
                            "name": "aboard__beach_starboard",
                            "value": true
                          }
                        ]
                      },
                      {
                        "name": "Option - Beach club, port",
                        "type": "transform",
                        "variantMatch": [
                          {
                            "name": "aboard__beach_port",
                            "value": true
                          }
                        ]
                      },
                      {
                        "name": "Option - Tender",
                        "type": "transform",
                        "variantMatch": [
                          {
                            "name": "aboard__tender",
                            "value": true
                          }
                        ]
                      },
                      {
                        "name": "Option - Tender helm, classic",
                        "type": "transform",
                        "variantMatch": [
                          {
                            "name": "aboard__tender",
                            "value": true
                          },
                          {
                            "name": "helm_style",
                            "value": "classic"
                          }
                        ]
                      },
                      {
                        "name": "Option - Tender helm, ergonomic",
                        "type": "transform",
                        "variantMatch": [
                          {
                            "name": "aboard__tender",
                            "value": true
                          },
                          {
                            "name": "helm_style",
                            "value": "ergonomic"
                          }
                        ]
                      },
                      {
                        "name": "Option - Tender helm, sport",
                        "type": "transform",
                        "variantMatch": [
                          {
                            "name": "aboard__tender",
                            "value": true
                          },
                          {
                            "name": "helm_style",
                            "value": "sport"
                          }
                        ]
                      }
                    ],
                    "variantMatch": [
                      {
                        "name": "boat_view",
                        "value": "whole"
                      }
                    ]
                  },
                  {
                    "name": "Option - Shell",
                    "type": "transform",
                    "variantMatch": [
                      {
                        "name": "boat_view",
                        "value": "whole"
                      }
                    ]
                  },
                  {
                    "name": "Option - Structure",
                    "type": "transform",
                    "variantMatch": [
                      {
                        "name": "boat_view",
                        "value": "whole"
                      }
                    ]
                  }
                ]
              }
            ]
          }
        ],
        "variantStrategy": "hierarchical",
        "materialVariants": [
          {
            "name": "Deck: Natural teak",
            "variantMatch": [
              {
                "name": "deck",
                "value": "natural_teak"
              }
            ]
          },
          {
            "name": "Deck: Silver teak",
            "variantMatch": [
              {
                "name": "deck",
                "value": "silver_teak"
              }
            ]
          },
          {
            "name": "Deck: Synthetic teak",
            "variantMatch": [
              {
                "name": "deck",
                "value": "synthetic_teak"
              }
            ]
          },
          {
            "name": "Deck: Pearl non-slip",
            "variantMatch": [
              {
                "name": "deck",
                "value": "pearl_non_slip"
              }
            ]
          }
        ],
        "materials": [
          {
            "name": "Hull paint",
            "colorVariants": [
              {
                "name": "Noir",
                "color": "#121316",
                "variantMatch": [
                  {
                    "name": "collection",
                    "value": "noir"
                  }
                ]
              },
              {
                "name": "Midnight",
                "color": "#1A2C4E",
                "variantMatch": [
                  {
                    "name": "collection",
                    "value": "midnight"
                  }
                ]
              },
              {
                "name": "Regatta",
                "color": "#F3F3F0",
                "variantMatch": [
                  {
                    "name": "collection",
                    "value": "regatta"
                  }
                ]
              }
            ]
          },
          {
            "name": "Hull stripe",
            "colorVariants": [
              {
                "name": "Noir",
                "color": "#2A2D31",
                "variantMatch": [
                  {
                    "name": "collection",
                    "value": "noir"
                  }
                ]
              },
              {
                "name": "Midnight",
                "color": "#101B30",
                "variantMatch": [
                  {
                    "name": "collection",
                    "value": "midnight"
                  }
                ]
              },
              {
                "name": "Regatta",
                "color": "#1D2B3D",
                "variantMatch": [
                  {
                    "name": "collection",
                    "value": "regatta"
                  }
                ]
              }
            ]
          }
        ]
      }
    },
    {
      "url": "https://bitbybit.dev/files/site/learn/composer/composer.tutorial/catamaran-25m.3ca370dd.glb",
      "id": "catamaran25m",
      "name": "catamaran-25m",
      "variantMatch": [
        {
          "name": "boat_length",
          "value": "25_m"
        }
      ],
      "gltfStructure": {
        "nodes": [
          {
            "name": "unit scale",
            "type": "transform",
            "children": [
              {
                "name": "Catamaran",
                "type": "transform",
                "children": [
                  {
                    "name": "Options",
                    "type": "transform",
                    "children": [
                      {
                        "name": "Option - Lower helm, classic",
                        "type": "transform",
                        "variantMatch": [
                          {
                            "name": "helm_style",
                            "value": "classic"
                          }
                        ]
                      },
                      {
                        "name": "Option - Upper helm, classic",
                        "type": "transform",
                        "variantMatch": [
                          {
                            "name": "helm_style",
                            "value": "classic"
                          }
                        ]
                      },
                      {
                        "name": "Option - Lower helm, ergonomic",
                        "type": "transform",
                        "variantMatch": [
                          {
                            "name": "helm_style",
                            "value": "ergonomic"
                          }
                        ]
                      },
                      {
                        "name": "Option - Upper helm, ergonomic",
                        "type": "transform",
                        "variantMatch": [
                          {
                            "name": "helm_style",
                            "value": "ergonomic"
                          }
                        ]
                      },
                      {
                        "name": "Option - Lower helm, sport",
                        "type": "transform",
                        "variantMatch": [
                          {
                            "name": "helm_style",
                            "value": "sport"
                          }
                        ]
                      },
                      {
                        "name": "Option - Upper helm, sport",
                        "type": "transform",
                        "variantMatch": [
                          {
                            "name": "helm_style",
                            "value": "sport"
                          }
                        ]
                      },
                      {
                        "name": "Option - Foredeck sun beds",
                        "type": "transform",
                        "variantMatch": [
                          {
                            "name": "aboard__foredeck",
                            "value": true
                          }
                        ]
                      },
                      {
                        "name": "Option - Flybridge sun bed",
                        "type": "transform",
                        "variantMatch": [
                          {
                            "name": "aboard__flybridge",
                            "value": true
                          }
                        ]
                      },
                      {
                        "name": "Option - Beach club, starboard",
                        "type": "transform",
                        "variantMatch": [
                          {
                            "name": "aboard__beach_starboard",
                            "value": true
                          }
                        ]
                      },
                      {
                        "name": "Option - Beach club, port",
                        "type": "transform",
                        "variantMatch": [
                          {
                            "name": "aboard__beach_port",
                            "value": true
                          }
                        ]
                      },
                      {
                        "name": "Option - Tender",
                        "type": "transform",
                        "variantMatch": [
                          {
                            "name": "aboard__tender",
                            "value": true
                          }
                        ]
                      },
                      {
                        "name": "Option - Tender helm, classic",
                        "type": "transform",
                        "variantMatch": [
                          {
                            "name": "aboard__tender",
                            "value": true
                          },
                          {
                            "name": "helm_style",
                            "value": "classic"
                          }
                        ]
                      },
                      {
                        "name": "Option - Tender helm, ergonomic",
                        "type": "transform",
                        "variantMatch": [
                          {
                            "name": "aboard__tender",
                            "value": true
                          },
                          {
                            "name": "helm_style",
                            "value": "ergonomic"
                          }
                        ]
                      },
                      {
                        "name": "Option - Tender helm, sport",
                        "type": "transform",
                        "variantMatch": [
                          {
                            "name": "aboard__tender",
                            "value": true
                          },
                          {
                            "name": "helm_style",
                            "value": "sport"
                          }
                        ]
                      }
                    ],
                    "variantMatch": [
                      {
                        "name": "boat_view",
                        "value": "whole"
                      }
                    ]
                  },
                  {
                    "name": "Option - Shell",
                    "type": "transform",
                    "variantMatch": [
                      {
                        "name": "boat_view",
                        "value": "whole"
                      }
                    ]
                  },
                  {
                    "name": "Option - Structure",
                    "type": "transform",
                    "variantMatch": [
                      {
                        "name": "boat_view",
                        "value": "whole"
                      }
                    ]
                  }
                ]
              }
            ]
          }
        ],
        "variantStrategy": "hierarchical",
        "materialVariants": [
          {
            "name": "Deck: Natural teak",
            "variantMatch": [
              {
                "name": "deck",
                "value": "natural_teak"
              }
            ]
          },
          {
            "name": "Deck: Silver teak",
            "variantMatch": [
              {
                "name": "deck",
                "value": "silver_teak"
              }
            ]
          },
          {
            "name": "Deck: Synthetic teak",
            "variantMatch": [
              {
                "name": "deck",
                "value": "synthetic_teak"
              }
            ]
          },
          {
            "name": "Deck: Pearl non-slip",
            "variantMatch": [
              {
                "name": "deck",
                "value": "pearl_non_slip"
              }
            ]
          }
        ],
        "materials": [
          {
            "name": "Hull paint",
            "colorVariants": [
              {
                "name": "Noir",
                "color": "#121316",
                "variantMatch": [
                  {
                    "name": "collection",
                    "value": "noir"
                  }
                ]
              },
              {
                "name": "Midnight",
                "color": "#1A2C4E",
                "variantMatch": [
                  {
                    "name": "collection",
                    "value": "midnight"
                  }
                ]
              },
              {
                "name": "Regatta",
                "color": "#F3F3F0",
                "variantMatch": [
                  {
                    "name": "collection",
                    "value": "regatta"
                  }
                ]
              }
            ]
          },
          {
            "name": "Hull stripe",
            "colorVariants": [
              {
                "name": "Noir",
                "color": "#2A2D31",
                "variantMatch": [
                  {
                    "name": "collection",
                    "value": "noir"
                  }
                ]
              },
              {
                "name": "Midnight",
                "color": "#101B30",
                "variantMatch": [
                  {
                    "name": "collection",
                    "value": "midnight"
                  }
                ]
              },
              {
                "name": "Regatta",
                "color": "#1D2B3D",
                "variantMatch": [
                  {
                    "name": "collection",
                    "value": "regatta"
                  }
                ]
              }
            ]
          }
        ]
      }
    },
    {
      "url": "https://bitbybit.dev/files/site/learn/composer/composer.tutorial/catamaran-15m.31ba4329.glb",
      "id": "catamaran15m",
      "name": "catamaran-15m",
      "variantMatch": [
        {
          "name": "boat_length",
          "value": "15_m"
        }
      ],
      "gltfStructure": {
        "nodes": [
          {
            "name": "unit scale",
            "type": "transform",
            "children": [
              {
                "name": "Catamaran",
                "type": "transform",
                "children": [
                  {
                    "name": "Options",
                    "type": "transform",
                    "children": [
                      {
                        "name": "Option - Lower helm, classic",
                        "type": "transform",
                        "variantMatch": [
                          {
                            "name": "helm_style",
                            "value": "classic"
                          }
                        ]
                      },
                      {
                        "name": "Option - Upper helm, classic",
                        "type": "transform",
                        "variantMatch": [
                          {
                            "name": "helm_style",
                            "value": "classic"
                          }
                        ]
                      },
                      {
                        "name": "Option - Lower helm, ergonomic",
                        "type": "transform",
                        "variantMatch": [
                          {
                            "name": "helm_style",
                            "value": "ergonomic"
                          }
                        ]
                      },
                      {
                        "name": "Option - Upper helm, ergonomic",
                        "type": "transform",
                        "variantMatch": [
                          {
                            "name": "helm_style",
                            "value": "ergonomic"
                          }
                        ]
                      },
                      {
                        "name": "Option - Lower helm, sport",
                        "type": "transform",
                        "variantMatch": [
                          {
                            "name": "helm_style",
                            "value": "sport"
                          }
                        ]
                      },
                      {
                        "name": "Option - Upper helm, sport",
                        "type": "transform",
                        "variantMatch": [
                          {
                            "name": "helm_style",
                            "value": "sport"
                          }
                        ]
                      },
                      {
                        "name": "Option - Flybridge sun bed",
                        "type": "transform",
                        "variantMatch": [
                          {
                            "name": "aboard__flybridge",
                            "value": true
                          }
                        ]
                      },
                      {
                        "name": "Option - Beach club, starboard",
                        "type": "transform",
                        "variantMatch": [
                          {
                            "name": "aboard__beach_starboard",
                            "value": true
                          }
                        ]
                      },
                      {
                        "name": "Option - Beach club, port",
                        "type": "transform",
                        "variantMatch": [
                          {
                            "name": "aboard__beach_port",
                            "value": true
                          }
                        ]
                      }
                    ],
                    "variantMatch": [
                      {
                        "name": "boat_view",
                        "value": "whole"
                      }
                    ]
                  },
                  {
                    "name": "Option - Shell",
                    "type": "transform",
                    "variantMatch": [
                      {
                        "name": "boat_view",
                        "value": "whole"
                      }
                    ]
                  },
                  {
                    "name": "Option - Structure",
                    "type": "transform",
                    "variantMatch": [
                      {
                        "name": "boat_view",
                        "value": "whole"
                      }
                    ]
                  }
                ]
              }
            ]
          }
        ],
        "variantStrategy": "hierarchical",
        "materialVariants": [
          {
            "name": "Deck: Natural teak",
            "variantMatch": [
              {
                "name": "deck",
                "value": "natural_teak"
              }
            ]
          },
          {
            "name": "Deck: Silver teak",
            "variantMatch": [
              {
                "name": "deck",
                "value": "silver_teak"
              }
            ]
          },
          {
            "name": "Deck: Synthetic teak",
            "variantMatch": [
              {
                "name": "deck",
                "value": "synthetic_teak"
              }
            ]
          },
          {
            "name": "Deck: Pearl non-slip",
            "variantMatch": [
              {
                "name": "deck",
                "value": "pearl_non_slip"
              }
            ]
          }
        ],
        "materials": [
          {
            "name": "Hull paint",
            "colorVariants": [
              {
                "name": "Noir",
                "color": "#121316",
                "variantMatch": [
                  {
                    "name": "collection",
                    "value": "noir"
                  }
                ]
              },
              {
                "name": "Midnight",
                "color": "#1A2C4E",
                "variantMatch": [
                  {
                    "name": "collection",
                    "value": "midnight"
                  }
                ]
              },
              {
                "name": "Regatta",
                "color": "#F3F3F0",
                "variantMatch": [
                  {
                    "name": "collection",
                    "value": "regatta"
                  }
                ]
              }
            ]
          },
          {
            "name": "Hull stripe",
            "colorVariants": [
              {
                "name": "Noir",
                "color": "#2A2D31",
                "variantMatch": [
                  {
                    "name": "collection",
                    "value": "noir"
                  }
                ]
              },
              {
                "name": "Midnight",
                "color": "#101B30",
                "variantMatch": [
                  {
                    "name": "collection",
                    "value": "midnight"
                  }
                ]
              },
              {
                "name": "Regatta",
                "color": "#1D2B3D",
                "variantMatch": [
                  {
                    "name": "collection",
                    "value": "regatta"
                  }
                ]
              }
            ]
          }
        ]
      }
    }
  ],
  "advancedBackground": {
    "type": "solidColor",
    "color": "#dcdcdc"
  },
  "arcRotateCamera": {
    "position": [
      -39.3,
      3.6,
      23.3
    ],
    "target": [
      -9.7,
      3.4,
      -1.3
    ],
    "angularSensibilityX": 700,
    "angularSensibilityY": 700,
    "lowerRadiusLimit": 0.27336,
    "upperRadiusLimit": 61.507,
    "lowerBetaLimit": 1,
    "upperBetaLimit": 179,
    "panningSensibility": 1267.2,
    "wheelPrecision": 0.95041,
    "maxZ": 2733.6,
    "minZ": 0.027336,
    "pinchDeltaPercentage": 0,
    "pinchPrecision": 12,
    "useNaturalPinchZoom": false,
    "fov": 45.84,
    "inertia": 0.85
  },
  "skybox": {
    "type": "sunset",
    "size": 1000,
    "rotation": 180
  },
  "environment": {
    "preset": "goldenHour",
    "brightness": 0.65,
    "ground": "water"
  },
  "sceneVariants": [
    {
      "id": "scene_Studio",
      "name": "Studio",
      "variantMatch": [
        {
          "name": "boat_scene",
          "value": "studio"
        }
      ],
      "skybox": null,
      "environment": {
        "preset": "studioSoft",
        "ground": "shadowCatcher"
      },
      "backgroundColor": "#eef0f2"
    },
    {
      "id": "scene_Daytime",
      "name": "Daytime",
      "variantMatch": [
        {
          "name": "boat_scene",
          "value": "daytime"
        }
      ],
      "skybox": {
        "type": "clearDay"
      },
      "environment": {
        "preset": "outdoorDay"
      }
    }
  ],
  "directionalLights": [
    {
      "direction": [
        -14.995,
        -29.99,
        -22.493
      ],
      "intensity": 1,
      "diffuse": "#ffffff",
      "specular": "#ffffff",
      "shadowGeneratorMapSize": 2048,
      "enableShadows": true,
      "shadowRefreshRate": 1,
      "shadowDarkness": 0,
      "shadowUsePercentageCloserFiltering": true,
      "shadowContactHardeningLightSizeUVRatio": 0.2,
      "shadowBias": 0.0005,
      "shadowNormalBias": 0.010935,
      "shadowMaxZ": 82.009,
      "shadowMinZ": 20.502,
      "transparencyShadow": false
    },
    {
      "direction": [
        22.732,
        -22.732,
        34.098
      ],
      "intensity": 0.6,
      "diffuse": "#d4e0f0",
      "specular": "#a0b0c0",
      "shadowGeneratorMapSize": 1024,
      "enableShadows": false,
      "shadowRefreshRate": 4,
      "shadowDarkness": 0,
      "shadowUsePercentageCloserFiltering": true,
      "shadowContactHardeningLightSizeUVRatio": 0.2,
      "shadowBias": 0.0001,
      "shadowNormalBias": 0.002,
      "shadowMaxZ": 1000,
      "shadowMinZ": 0,
      "transparencyShadow": false
    }
  ],
  "loadingSettings": {
    "overlay": {
      "color": "#FFFFFF"
    },
    "fadeOutTime": 2,
    "logo": {
      "width": 100,
      "height": 100
    },
    "progressBar": {
      "showProgressBar": true,
      "height": 20
    },
    "text": {
      "showText": true,
      "title": "Loading...",
      "fontSize": 24
    },
    "modelLoading": "whenShown",
    "switchIndicator": {
      "title": "Bringing your boat alongside"
    }
  },
  "navigation": {
    "focals": [
      {
        "name": "The name",
        "cameraTarget": [
          -1.7,
          1.25,
          5.1
        ],
        "cameraPosition": [
          -0.5,
          2.4,
          11
        ],
        "id": "foc_Thename",
        "triggerOnChangeOf": [
          "boat_name"
        ]
      },
      {
        "name": "Side on",
        "cameraTarget": [
          -8.3,
          2.5,
          -0.2
        ],
        "cameraPosition": [
          -14.3,
          14.5,
          39.8
        ],
        "id": "foc_Sideon",
        "variantMatch": [
          {
            "name": "show_sizes",
            "value": true
          }
        ],
        "triggerOnChangeOf": [
          "show_sizes"
        ],
        "fitToModels": true
      },
      {
        "name": "The decks from above",
        "cameraTarget": [
          -9.2,
          1.5,
          -0.2
        ],
        "cameraPosition": [
          -13.7,
          11,
          19.8
        ],
        "id": "foc_Thedecksfromabove",
        "triggerOnChangeOf": [
          "deck"
        ],
        "fitToModels": true
      },
      {
        "name": "The hull in the sun",
        "cameraTarget": [
          -7.6,
          2.4,
          0.9
        ],
        "cameraPosition": [
          19.6,
          6.3,
          -26.3
        ],
        "id": "foc_Thehullinthesun",
        "triggerOnChangeOf": [
          "collection"
        ],
        "fitToModels": true
      },
      {
        "name": "The whole boat",
        "cameraTarget": [
          -9.7,
          3.4,
          -1.3
        ],
        "cameraPosition": [
          -39.3,
          3.6,
          23.3
        ],
        "id": "foc_Thewholeboat",
        "triggerOnChangeOf": [
          "boat_length"
        ],
        "fitToModels": true
      }
    ]
  },
  "gui": {
    "controls": [
      {
        "key": "boat_name",
        "label": "Boat name",
        "type": "text",
        "placeholder": "Up to 16 letters",
        "maxLength": 16,
        "renderMode": "rendered",
        "orderProperty": {
          "include": true
        }
      },
      {
        "key": "show_sizes",
        "label": "Show measurements",
        "type": "switch",
        "renderMode": "rendered",
        "orderProperty": {
          "include": false
        }
      },
      {
        "key": "boat_view",
        "label": "View",
        "type": "radio",
        "options": [
          {
            "label": "Whole boat",
            "value": "whole",
            "isDefault": true,
            "imageUrl": "https://bitbybit.dev/files/site/learn/composer/composer.tutorial/view-whole-boat.d463a155.jpg",
            "description": "As she is built"
          },
          {
            "label": "Saloon",
            "value": "saloon",
            "imageUrl": "https://bitbybit.dev/files/site/learn/composer/composer.tutorial/view-saloon.928d7dda.jpg",
            "description": "The interior, with the hull lifted away"
          }
        ],
        "optionDisplay": "card",
        "optionCardAspect": "wide",
        "renderMode": "rendered",
        "orderProperty": {
          "include": false
        }
      },
      {
        "key": "boat_scene",
        "label": "Scene",
        "type": "radio",
        "options": [
          {
            "label": "Sunset",
            "value": "sunset",
            "isDefault": true,
            "imageUrl": "https://bitbybit.dev/files/site/learn/composer/composer.tutorial/scene-sunset.62baa091.jpg",
            "description": "Warm low sun on open water"
          },
          {
            "label": "Daytime",
            "value": "daytime",
            "imageUrl": "https://bitbybit.dev/files/site/learn/composer/composer.tutorial/scene-daytime.b37183f7.jpg",
            "description": "Clear sky and a high sun"
          },
          {
            "label": "Studio",
            "value": "studio",
            "imageUrl": "https://bitbybit.dev/files/site/learn/composer/composer.tutorial/scene-studio.834870b7.jpg",
            "description": "No water, true colours"
          }
        ],
        "optionDisplay": "card",
        "optionCardAspect": "wide",
        "renderMode": "rendered",
        "orderProperty": {
          "include": false
        }
      },
      {
        "key": "boat_length",
        "label": "Length",
        "type": "radio",
        "options": [
          {
            "label": "15 m",
            "value": "15_m"
          },
          {
            "label": "20 m",
            "value": "20_m",
            "isDefault": true
          },
          {
            "label": "25 m",
            "value": "25_m"
          }
        ],
        "optionDisplay": "pill",
        "renderMode": "rendered",
        "orderProperty": {
          "include": true
        }
      },
      {
        "key": "aboard",
        "label": "On deck",
        "type": "checkbox",
        "options": [
          {
            "label": "Foredeck sun beds",
            "value": "foredeck",
            "isDefault": true,
            "imageUrl": "https://bitbybit.dev/files/site/learn/composer/composer.tutorial/deck-foredeck.17e3dc88.jpg",
            "description": "Double beds ahead of the saloon"
          },
          {
            "label": "Flybridge sun bed",
            "value": "flybridge",
            "isDefault": true,
            "imageUrl": "https://bitbybit.dev/files/site/learn/composer/composer.tutorial/deck-flybridge.ce4b83c0.jpg",
            "description": "Under the sunroof"
          },
          {
            "label": "Starboard beach club",
            "value": "beach_starboard",
            "isDefault": true,
            "imageUrl": "https://bitbybit.dev/files/site/learn/composer/composer.tutorial/deck-beach-starboard.c912ee53.jpg",
            "description": "Loungers on the swim platform"
          },
          {
            "label": "Port beach club",
            "value": "beach_port",
            "imageUrl": "https://bitbybit.dev/files/site/learn/composer/composer.tutorial/deck-beach-port.1a0c5668.jpg",
            "description": "Loungers on the swim platform"
          },
          {
            "label": "Tender",
            "value": "tender",
            "isDefault": true,
            "imageUrl": "https://bitbybit.dev/files/site/learn/composer/composer.tutorial/deck-tender.812062b6.jpg",
            "description": "A small boat for going ashore"
          }
        ],
        "optionDisplay": "card",
        "optionCardAspect": "wide",
        "renderMode": "rendered",
        "orderProperty": {
          "include": true
        }
      },
      {
        "key": "helm_style",
        "label": "Helm",
        "type": "radio",
        "options": [
          {
            "label": "Classic",
            "value": "classic",
            "imageUrl": "https://bitbybit.dev/files/site/learn/composer/composer.tutorial/helm-classic.d1c22bea.jpg",
            "description": "Teak wheel, chrome levers"
          },
          {
            "label": "Ergonomic",
            "value": "ergonomic",
            "imageUrl": "https://bitbybit.dev/files/site/learn/composer/composer.tutorial/helm-ergonomic.803c2775.jpg",
            "description": "Leather wheel, black grips"
          },
          {
            "label": "Sport",
            "value": "sport",
            "isDefault": true,
            "imageUrl": "https://bitbybit.dev/files/site/learn/composer/composer.tutorial/helm-sport.060d7205.jpg",
            "description": "Carbon wheel, billet paddles"
          }
        ],
        "optionDisplay": "card",
        "optionCardAspect": "wide",
        "renderMode": "rendered",
        "orderProperty": {
          "include": true
        }
      },
      {
        "key": "collection",
        "label": "Collection",
        "type": "radio",
        "options": [
          {
            "label": "Regatta",
            "value": "regatta",
            "isDefault": true,
            "color": "#f3f3f0"
          },
          {
            "label": "Midnight",
            "value": "midnight",
            "color": "#1a2c4e"
          },
          {
            "label": "Noir",
            "value": "noir",
            "color": "#121316"
          }
        ],
        "optionDisplay": "swatch",
        "renderMode": "rendered",
        "orderProperty": {
          "include": true
        }
      },
      {
        "key": "deck",
        "label": "Planks",
        "type": "radio",
        "options": [
          {
            "label": "Natural teak",
            "value": "natural_teak",
            "isDefault": true,
            "imageUrl": "https://bitbybit.dev/files/site/learn/composer/composer.tutorial/planks-natural-teak.6208e1a5.jpg",
            "description": "Warm, oiled planks"
          },
          {
            "label": "Silver teak",
            "value": "silver_teak",
            "imageUrl": "https://bitbybit.dev/files/site/learn/composer/composer.tutorial/planks-silver-teak.5373af6e.jpg",
            "description": "Weathered to a soft grey"
          },
          {
            "label": "Synthetic teak",
            "value": "synthetic_teak",
            "imageUrl": "https://bitbybit.dev/files/site/learn/composer/composer.tutorial/planks-synthetic-teak.66434644.jpg",
            "description": "No oiling, ever"
          },
          {
            "label": "Pearl non-slip",
            "value": "pearl_non_slip",
            "imageUrl": "https://bitbybit.dev/files/site/learn/composer/composer.tutorial/planks-pearl-non-slip.a8d071b9.jpg",
            "description": "Moulded, easy to rinse"
          }
        ],
        "optionDisplay": "card",
        "optionCardAspect": "wide",
        "renderMode": "rendered",
        "orderProperty": {
          "include": true
        }
      }
    ],
    "elements": [
      {
        "id": "el_boat_length",
        "type": "control",
        "controlKey": "boat_length",
        "area": "canvas-top-left"
      },
      {
        "id": "el_Finishes",
        "type": "section",
        "children": [
          {
            "id": "el_collection",
            "type": "control",
            "controlKey": "collection"
          },
          {
            "id": "el_deck",
            "type": "control",
            "controlKey": "deck"
          }
        ],
        "title": "Finishes"
      },
      {
        "id": "el_Equipment",
        "type": "section",
        "children": [
          {
            "id": "el_aboard",
            "type": "control",
            "controlKey": "aboard"
          },
          {
            "id": "el_helm_style",
            "type": "control",
            "controlKey": "helm_style"
          }
        ],
        "title": "Equipment"
      },
      {
        "id": "el_Seeit",
        "type": "section",
        "children": [
          {
            "id": "el_show_sizes",
            "type": "control",
            "controlKey": "show_sizes"
          },
          {
            "id": "el_boat_scene",
            "type": "control",
            "controlKey": "boat_scene"
          },
          {
            "id": "el_boat_view",
            "type": "control",
            "controlKey": "boat_view"
          }
        ],
        "title": "See it"
      },
      {
        "id": "el_Hername",
        "type": "section",
        "children": [
          {
            "id": "el_boat_name",
            "type": "control",
            "controlKey": "boat_name"
          }
        ],
        "title": "Her name"
      }
    ],
    "areas": [
      {
        "id": "canvas-top-left",
        "stacked": {
          "placement": "pinned"
        }
      }
    ],
    "theme": {
      "colors": {
        "accent": "#8a6d4b",
        "text": "#2d2a26",
        "mutedText": "#8c857b",
        "border": "#e6e0d8"
      },
      "typography": {
        "heading": {
          "fontFamily": "Georgia, 'Times New Roman', serif",
          "fontSizePx": 20,
          "fontWeight": 500
        },
        "price": {
          "fontFamily": "Georgia, 'Times New Roman', serif",
          "fontSizePx": 21,
          "fontWeight": 500
        },
        "label": {
          "fontSizePx": 12,
          "fontWeight": 500,
          "textTransform": "uppercase",
          "letterSpacingPx": 1.2
        }
      },
      "input": {
        "borderColor": "#d8d0c4",
        "borderRadiusPx": 2,
        "focusBorderColor": "#8a6d4b"
      },
      "swatch": {
        "shape": "circle",
        "selectedBorderColor": "#8a6d4b"
      },
      "accordion": {
        "borderColor": "#e6e0d8",
        "borderRadiusPx": 2,
        "headerBackgroundColor": "#faf8f5"
      },
      "button": {
        "backgroundColor": "#2d2a26",
        "borderRadiusPx": 2,
        "heightPx": 48
      },
      "areaCard": {
        "backgroundColor": "#ffffff",
        "paddingPx": 10,
        "borderRadiusPx": 8
      },
      "optionCard": {
        "widthPx": 165
      }
    }
  },
  "dimensions": {
    "boundingBoxDimensions": [
      {
        "name": "Length and beam",
        "widthDimension": {
          "enabled": true,
          "position": "back-top",
          "offset": 0,
          "length": 1.2,
          "labelOffset": 0.5,
          "decimalPlaces": 1,
          "labelSuffix": " m",
          "labelOverwrite": "1*val",
          "style": {
            "lineColor": "#000000",
            "extensionLineLength": 0.2,
            "showArrows": true,
            "arrowColor": "#000000",
            "arrowTailLength": 0.2,
            "textColor": "#313131",
            "textFontWeight": 400,
            "textBackgroundColor": "#ffffff",
            "textBackgroundStroke": false,
            "textBackgroundStrokeThickness": 8,
            "textBackgroundRadius": 40,
            "textStableSize": false,
            "textBillboard": true,
            "alwaysOnTop": false,
            "lineThickness": 0.03,
            "arrowSize": 0.2,
            "textSize": 30,
            "textBackgroundOpacity": 0.9
          }
        },
        "heightDimension": {
          "enabled": false,
          "position": "front-left",
          "offset": 0,
          "length": 0.2,
          "labelOffset": 0.1,
          "decimalPlaces": 2,
          "labelSuffix": "mm",
          "labelOverwrite": "1*val"
        },
        "depthDimension": {
          "enabled": true,
          "position": "left-top",
          "offset": 0,
          "length": 1.2,
          "labelOffset": 0.5,
          "decimalPlaces": 1,
          "labelSuffix": " m",
          "labelOverwrite": "1*val",
          "style": {
            "lineColor": "#000000",
            "extensionLineLength": 0.2,
            "showArrows": true,
            "arrowColor": "#000000",
            "arrowTailLength": 0.2,
            "textColor": "#313131",
            "textFontWeight": 400,
            "textBackgroundColor": "#ffffff",
            "textBackgroundStroke": false,
            "textBackgroundStrokeThickness": 8,
            "textBackgroundRadius": 40,
            "textStableSize": false,
            "textBillboard": true,
            "alwaysOnTop": false,
            "lineThickness": 0.03,
            "arrowSize": 0.2,
            "textSize": 30,
            "textBackgroundOpacity": 0.9
          }
        },
        "id": "dim_Lengthandbeam",
        "includedNodes": [
          {
            "modelId": "boat",
            "nodePath": [
              "unit scale",
              "Catamaran",
              "Option - Shell",
              "Hull platform"
            ]
          },
          {
            "modelId": "catamaran25m",
            "nodePath": [
              "unit scale",
              "Catamaran",
              "Option - Shell",
              "Hull platform"
            ]
          },
          {
            "modelId": "catamaran15m",
            "nodePath": [
              "unit scale",
              "Catamaran",
              "Option - Shell",
              "Hull platform"
            ]
          }
        ],
        "variantMatch": [
          {
            "name": "show_sizes",
            "value": true
          }
        ]
      }
    ]
  },
  "personalization": {
    "decals": [
      {
        "id": "dcl_Name20m",
        "kind": "text",
        "position": [
          -1.65,
          1.21,
          5.09
        ],
        "size": [
          2.1,
          0.52,
          0.6
        ],
        "projectionDirection": [
          0,
          0,
          -1
        ],
        "name": "Name, 20 m",
        "angle": 0,
        "inputKey": "boat_name",
        "text": {
          "fallbackText": "Aurora",
          "maxLength": 16,
          "fontSizePx": 96,
          "color": "#d9a860",
          "align": "center"
        },
        "variantMatch": [
          {
            "name": "boat_length",
            "value": "20_m"
          }
        ]
      },
      {
        "id": "dcl_Name25m",
        "kind": "text",
        "position": [
          -2.05,
          1.42,
          6.34
        ],
        "size": [
          2.6,
          0.65,
          0.6
        ],
        "projectionDirection": [
          0,
          0,
          -1
        ],
        "name": "Name, 25 m",
        "angle": 0,
        "inputKey": "boat_name",
        "text": {
          "fallbackText": "Aurora",
          "maxLength": 16,
          "fontSizePx": 96,
          "color": "#d9a860",
          "align": "center"
        },
        "variantMatch": [
          {
            "name": "boat_length",
            "value": "25_m"
          }
        ]
      },
      {
        "id": "dcl_Name15m",
        "kind": "text",
        "position": [
          -1.25,
          1,
          3.84
        ],
        "size": [
          1.6,
          0.4,
          0.6
        ],
        "projectionDirection": [
          0,
          0,
          -1
        ],
        "name": "Name, 15 m",
        "angle": 0,
        "inputKey": "boat_name",
        "text": {
          "fallbackText": "Aurora",
          "maxLength": 16,
          "fontSizePx": 96,
          "color": "#d9a860",
          "align": "center"
        },
        "variantMatch": [
          {
            "name": "boat_length",
            "value": "15_m"
          }
        ]
      }
    ]
  },
  "logic": {
    "rules": [
      {
        "id": "rule_1",
        "trigger": "while-matching",
        "effects": [
          {
            "type": "setOptionState",
            "controlKey": "aboard",
            "optionValue": "beach_port",
            "enabled": false,
            "hint": "The tender stows here"
          }
        ],
        "name": "The tender takes the port side",
        "when": {
          "logicalOperator": "AND",
          "conditions": [
            {
              "name": "aboard__tender",
              "operator": "==",
              "value": true
            }
          ]
        }
      },
      {
        "id": "rule_2",
        "trigger": "while-matching",
        "effects": [
          {
            "type": "setOptionState",
            "controlKey": "aboard",
            "optionValue": "tender",
            "visible": false
          },
          {
            "type": "setOptionState",
            "controlKey": "aboard",
            "optionValue": "foredeck",
            "visible": false
          }
        ],
        "name": "No foredeck beds or tender at 15 m",
        "when": {
          "logicalOperator": "AND",
          "conditions": [
            {
              "name": "boat_length",
              "operator": "==",
              "value": "15_m"
            }
          ]
        }
      }
    ]
  }
}
