{
  "meta": {
    "name": "QUADRO Teile-Katalog",
    "source": "quadroshop.com (Kupplungen + Rohre), Stand Mai 2026",
    "currency": "EUR",
    "units": "cm",
    "note": "Preise/Verfügbarkeit können abweichen. Geometrie für den Editor vereinfacht (Stecksystem als Knoten-/Kanten-Graph)."
  },
  "geometry": {
    "connectorSize": 5.0,
    "tubeRadius": 2.45,
    "armRadius": 2.1,
    "armLength": 5.0,
    "defaultTube": "T35",
    "diagonalTube": "T35",
    "defaultPanel": "panel_40x40",
    "panelThickness": 1.6,
    "comment": "Masse echt: Kupplung 50 mm, Rohr-Aussen 49 mm (tubeRadius 2.45), Kupplungs-Arme ~50 mm lang, ~42 mm Durchmesser (armRadius 2.1) -> duenner als das Rohr, greifen IN die Rohre. Knoten-Abstand (Mitte zu Mitte) = Rohrlaenge + connectorSize. 35er-Rohr -> 40 cm Raster (passend zu Platte 40x40); 15er -> 20 cm (Platte 40x20). Schraegen/Rampen/Daecher: das Bau-Werkzeug baut immer 45 Grad mit 35er-Rohr (T35). Beim Import werden nur Schraegen auf 45 Grad gezwungen, die an einer 45-Grad-Winkelkupplung (connector45_2) andocken; Doppelrohr-Verbinder-Rampen und andere Rampenformen behalten ihre Original-Geometrie."
  },
  "colors": {
    "tube": [
      {
        "id": "blue",
        "name": "Blau",
        "name_en": "Blue",
        "hex": "#1f63b5"
      },
      {
        "id": "green",
        "name": "Grün",
        "name_en": "Green",
        "hex": "#2e9e4a"
      },
      {
        "id": "yellow",
        "name": "Gelb",
        "name_en": "Yellow",
        "hex": "#f4c020"
      },
      {
        "id": "red",
        "name": "Rot",
        "name_en": "Red",
        "hex": "#d42e2e"
      }
    ],
    "connector": {
      "id": "black",
      "name": "Schwarz",
      "name_en": "Black",
      "hex": "#2b2b2b"
    }
  },
  "connectors": [
    {
      "id": "6way",
      "code": "CS6",
      "name": "Raumkupplung 6-armig",
      "name_en": "Space connector 6-way",
      "arms": 6,
      "kind": "space",
      "price": 2.49,
      "buildable": true,
      "note": "Würfel-Knoten, 6 Richtungen"
    },
    {
      "id": "5way",
      "code": "CS5",
      "name": "Raumkupplung 5-armig",
      "name_en": "Space connector 5-way",
      "arms": 5,
      "kind": "space",
      "price": 2.49,
      "buildable": true,
      "note": ""
    },
    {
      "id": "4way",
      "code": "CS4",
      "name": "Raumkupplung 4-armig",
      "name_en": "Space connector 4-way",
      "arms": 4,
      "kind": "space",
      "price": 2.49,
      "buildable": true,
      "note": "räumlich (nicht in einer Ebene)"
    },
    {
      "id": "3way",
      "code": "CS3",
      "name": "Raumkupplung 3-armig",
      "name_en": "Space connector 3-way",
      "arms": 3,
      "kind": "space",
      "price": 2.49,
      "buildable": true,
      "note": "Ecke, räumlich"
    },
    {
      "id": "cross",
      "code": "CF4",
      "name": "Flächenkupplung 4-armig",
      "name_en": "Surface connector 4-way",
      "arms": 4,
      "kind": "planar",
      "price": 2.49,
      "buildable": true,
      "note": "Kreuz in einer Ebene"
    },
    {
      "id": "t",
      "code": "CF3",
      "name": "Flächenkupplung 3-armig",
      "name_en": "Surface connector 3-way",
      "arms": 3,
      "kind": "planar",
      "price": 2.49,
      "buildable": true,
      "note": "T-Stück in einer Ebene"
    },
    {
      "id": "straight",
      "code": "CF2",
      "name": "Flächenkupplung 2-armig (180 Grad)",
      "name_en": "Surface connector 2-way (180°)",
      "arms": 2,
      "kind": "planar",
      "angle": 180,
      "price": 2.49,
      "buildable": true,
      "note": "gerade Verlängerung"
    },
    {
      "id": "elbow",
      "code": "CS2",
      "name": "Flächenkupplung 2-armig (90 Grad)",
      "name_en": "Surface connector 2-way (90°)",
      "arms": 2,
      "kind": "planar",
      "angle": 90,
      "price": 2.49,
      "buildable": true,
      "note": "Winkel 90 Grad"
    },
    {
      "id": "diagonal",
      "code": "C45",
      "name": "Winkelkupplung (45 Grad)",
      "name_en": "Angle connector (45°)",
      "arms": 1,
      "kind": "special",
      "angle": 45,
      "price": 2.49,
      "buildable": true,
      "note": "Aufsteck-Adapter: wird mit der Hülse auf eine vorhandene Kupplung gesteckt und bietet auf der Gegenseite einen einzelnen, um 45 Grad gedrehten Rohrstutzen (für Schraegen/Rampen). Wird daher zusaetzlich zur Basiskupplung gezaehlt."
    },
    {
      "id": "flexi",
      "code": "CX4",
      "name": "Flexikupplung",
      "name_en": "Flexi connector",
      "arms": 4,
      "kind": "special",
      "price": 8.99,
      "buildable": false,
      "note": "frei einstellbar"
    },
    {
      "id": "flexi_hinge",
      "code": "CXB",
      "name": "Flexikupplung Scharnier",
      "name_en": "Flexi connector hinge",
      "arms": 2,
      "kind": "special",
      "price": 2.49,
      "buildable": false,
      "note": ""
    },
    {
      "id": "flexi_bolt",
      "code": "CXA",
      "name": "Flexikupplung Bolzen",
      "name_en": "Flexi connector bolt",
      "arms": 2,
      "kind": "special",
      "price": 4.99,
      "buildable": false,
      "note": ""
    },
    {
      "id": "hole_t",
      "code": "CH3",
      "name": "Lochzapfenkupplung 3-armig",
      "name_en": "Pin connector 3-way",
      "arms": 3,
      "kind": "special",
      "price": 6.49,
      "buildable": false,
      "note": "",
      "qdf": "hole-connector4"
    },
    {
      "id": "hole_1",
      "code": "CH1",
      "name": "Lochzapfenkupplung 1-armig",
      "name_en": "Pin connector 1-way",
      "arms": 1,
      "kind": "special",
      "price": 6.49,
      "buildable": false,
      "note": ""
    },
    {
      "id": "bearing",
      "code": "CBR",
      "name": "Lagerkupplung",
      "name_en": "Bearing connector",
      "arms": 2,
      "kind": "special",
      "price": 6.49,
      "buildable": false,
      "note": "klemmt um ein Rohr und trägt eine Kupplung"
    },
    {
      "id": "double_tube",
      "code": "CDT",
      "name": "Doppelrohrverbinder",
      "name_en": "Double tube connector",
      "arms": 2,
      "kind": "special",
      "price": 4.49,
      "buildable": true,
      "note": "verbindet zwei Rohre längs; ermöglicht Klappen/bewegliche und schräge Elemente"
    },
    {
      "id": "tube_clamp",
      "code": "CCL",
      "name": "Rohrklammer",
      "name_en": "Tube clamp",
      "arms": 0,
      "kind": "special",
      "price": 2.49,
      "buildable": false,
      "note": "Klammer"
    }
  ],
  "tubes": [
    {
      "id": "T10",
      "code": "T10",
      "name": "Rohr 10 cm",
      "name_en": "Tube 10 cm",
      "length_cm": 10,
      "shape": "straight",
      "price": 3.49,
      "buildable": true,
      "colored": true
    },
    {
      "id": "T15",
      "code": "T15",
      "name": "Rohr 15 cm",
      "name_en": "Tube 15 cm",
      "length_cm": 15,
      "shape": "straight",
      "price": 1.99,
      "buildable": true,
      "colored": true
    },
    {
      "id": "T20",
      "code": "T20",
      "name": "Rohr 20 cm",
      "name_en": "Tube 20 cm",
      "length_cm": 20,
      "shape": "straight",
      "price": 3.99,
      "buildable": true,
      "colored": true
    },
    {
      "id": "T25",
      "code": "T25",
      "name": "Rohr 25 cm",
      "name_en": "Tube 25 cm",
      "length_cm": 25,
      "shape": "straight",
      "price": 2.99,
      "buildable": true,
      "colored": true
    },
    {
      "id": "T35",
      "code": "T35",
      "name": "Rohr 35 cm",
      "name_en": "Tube 35 cm",
      "length_cm": 35,
      "shape": "straight",
      "price": 2.49,
      "buildable": true,
      "colored": true
    },
    {
      "id": "T52",
      "code": "T52",
      "name": "Rohr 52 cm",
      "name_en": "Tube 52 cm",
      "length_cm": 52,
      "shape": "straight",
      "price": 9.99,
      "buildable": true,
      "colored": true
    },
    {
      "id": "T75",
      "code": "T75",
      "name": "Rohr 75 cm",
      "name_en": "Tube 75 cm",
      "length_cm": 75,
      "shape": "straight",
      "price": 9.99,
      "buildable": true,
      "colored": true
    },
    {
      "id": "TC1",
      "code": "TC1",
      "name": "Bogenrohr",
      "name_en": "Curved tube",
      "length_cm": null,
      "shape": "curved",
      "price": 11.49,
      "buildable": true,
      "colored": true
    },
    {
      "id": "TS1",
      "code": "TS1",
      "name": "Rohr 15 cm 90 Grad (4 Löcher)",
      "name_en": "Tube 15 cm 90° (4 holes)",
      "length_cm": 15,
      "shape": "angled",
      "angle": 90,
      "price": 11.49,
      "buildable": false,
      "colored": true,
      "note": "steht nicht in der Toolbar (gelochte Winkelrohre lassen sich nicht sinnvoll ins Raster bauen), zählt aber in der Stückliste vorhandener Modelle"
    },
    {
      "id": "TS2",
      "code": "TS2",
      "name": "Rohr 15 cm 135 Grad (3 Löcher)",
      "name_en": "Tube 15 cm 135° (3 holes)",
      "length_cm": 15,
      "shape": "angled",
      "angle": 135,
      "price": 11.49,
      "buildable": false,
      "colored": true,
      "note": "steht nicht in der Toolbar (gelochte Winkelrohre lassen sich nicht sinnvoll ins Raster bauen), zählt aber in der Stückliste vorhandener Modelle"
    },
    {
      "id": "TS3",
      "code": "TS3",
      "name": "Rohr 15 cm 180 Grad (4 Löcher)",
      "name_en": "Tube 15 cm 180° (4 holes)",
      "length_cm": 15,
      "shape": "angled",
      "angle": 180,
      "price": 11.49,
      "buildable": false,
      "colored": true,
      "note": "steht nicht in der Toolbar (gelochte Winkelrohre lassen sich nicht sinnvoll ins Raster bauen), zählt aber in der Stückliste vorhandener Modelle"
    },
    {
      "id": "TS4",
      "code": "TS4",
      "name": "Rohr 35 cm 90 Grad (4 Löcher)",
      "name_en": "Tube 35 cm 90° (4 holes)",
      "length_cm": 35,
      "shape": "angled",
      "angle": 90,
      "price": 11.49,
      "buildable": false,
      "colored": true,
      "note": "steht nicht in der Toolbar (gelochte Winkelrohre lassen sich nicht sinnvoll ins Raster bauen), zählt aber in der Stückliste vorhandener Modelle"
    },
    {
      "id": "TS5",
      "code": "TS5",
      "name": "Rohr 35 cm 135 Grad (3 Löcher)",
      "name_en": "Tube 35 cm 135° (3 holes)",
      "length_cm": 35,
      "shape": "angled",
      "angle": 135,
      "price": 11.49,
      "buildable": false,
      "colored": true,
      "note": "steht nicht in der Toolbar (gelochte Winkelrohre lassen sich nicht sinnvoll ins Raster bauen), zählt aber in der Stückliste vorhandener Modelle"
    },
    {
      "id": "TS6",
      "code": "TS6",
      "name": "Rohr 35 cm 180 Grad (4 Löcher)",
      "name_en": "Tube 35 cm 180° (4 holes)",
      "length_cm": 35,
      "shape": "angled",
      "angle": 180,
      "price": 11.49,
      "buildable": false,
      "colored": true,
      "note": "steht nicht in der Toolbar (gelochte Winkelrohre lassen sich nicht sinnvoll ins Raster bauen), zählt aber in der Stückliste vorhandener Modelle"
    },
    {
      "id": "TS7",
      "code": "TS7",
      "name": "Bogenrohr 135 Grad (3 Löcher)",
      "name_en": "Curved tube 135° (3 holes)",
      "length_cm": null,
      "shape": "curved",
      "angle": 135,
      "price": 22.99,
      "buildable": false,
      "colored": true,
      "note": "steht nicht in der Toolbar (gelochte Winkelrohre lassen sich nicht sinnvoll ins Raster bauen), zählt aber in der Stückliste vorhandener Modelle"
    }
  ],
  "panels": [
    {
      "id": "panel_40x40",
      "code": "PA4",
      "name": "Platte 40 x 40 cm",
      "name_en": "Panel 40 x 40 cm",
      "w": 40,
      "h": 40,
      "price": 6.99,
      "buildable": true,
      "colored": true,
      "note": "passt auf ein Feld aus vier 35er-Rohren"
    },
    {
      "id": "panel_40x20",
      "code": "PA2",
      "name": "Platte 40 x 20 cm",
      "name_en": "Panel 40 x 20 cm",
      "w": 40,
      "h": 20,
      "price": 5.99,
      "buildable": true,
      "colored": true,
      "note": "halbe Platte: 35er x 15er Feld"
    },
    {
      "id": "panel_80x80",
      "code": "PA8",
      "name": "Platte 80 x 80 cm",
      "name_en": "Panel 80 x 80 cm",
      "w": 80,
      "h": 80,
      "price": 12.99,
      "buildable": true,
      "colored": true,
      "note": "großes Feld aus vier 75er-Rohren"
    },
    {
      "id": "panel_80x20",
      "code": "PA6",
      "name": "Platte 80 x 20 cm",
      "name_en": "Panel 80 x 20 cm",
      "w": 80,
      "h": 20,
      "price": 8.99,
      "buildable": true,
      "colored": true,
      "note": "75er x 15er Feld"
    },
    {
      "id": "panel_30x30",
      "code": "PA3",
      "name": "Platte 30 x 30 cm",
      "name_en": "Panel 30 x 30 cm",
      "w": 30,
      "h": 30,
      "price": 5.99,
      "buildable": true,
      "colored": true,
      "note": "30er-Raster (25er-Rohr)"
    },
    {
      "id": "hole_panel_40x40",
      "code": "PO4",
      "name": "Lochplatte 40 x 40 cm",
      "name_en": "Perforated panel 40 x 40 cm",
      "w": 40,
      "h": 40,
      "holes": 9,
      "price": 6.99,
      "buildable": true,
      "colored": true,
      "note": "gleiches Feld wie panel_40x40, aber mit 3x3-Lochraster; holes steuert die Darstellung und hält sie beim QDF-Import aus der Größen-Zuordnung heraus"
    },
    {
      "id": "panel_70x120",
      "code": "P7C",
      "name": "Platte 70 x 120 cm",
      "name_en": "Panel 70 x 120 cm",
      "w": 70,
      "h": 120,
      "price": 0,
      "buildable": true,
      "colored": true,
      "note": "großes Rechteck-Panel; L2-fix · gehört zum Pool-/Bällebad-Set, im Shop nicht einzeln gelistet"
    },
    {
      "id": "pool_wall",
      "code": "BAD",
      "name": "Bällebad-Wand 120 x 40 cm",
      "name_en": "Ball pit wall 120 x 40 cm",
      "w": 120,
      "h": 40,
      "price": 0,
      "buildable": false,
      "colored": true,
      "note": "Bällebad-Seitenwand; feste Geometrie (pool2 in QDF) · gehört zum Pool-/Bällebad-Set, im Shop nicht einzeln gelistet"
    },
    {
      "id": "pool_floor",
      "code": "BAF",
      "name": "Bällebad-Boden",
      "name_en": "Ball pit floor",
      "w": 120,
      "h": 160,
      "price": 0,
      "buildable": false,
      "colored": true,
      "note": "Synthetischer Bällebad-Boden (pool2); scene.js rendert darüber Wasser-Volumen · gehört zum Pool-/Bällebad-Set, im Shop nicht einzeln gelistet"
    }
  ],
  "reinforcements": [
    {
      "id": "reinforce40",
      "code": "RV4",
      "name": "Verstärkungsprofil 40 cm (Holz)",
      "name_en": "Reinforcement profile 40 cm (wood)",
      "length_cm": 40,
      "material": "Holz",
      "price": 4.49,
      "note": "Stab, der in ein Rohr geschoben wird und es versteift; kommt in 40-cm-Längen; heute aus Holz (früher Alu, günstiger); nötig bei frei tragenden, von unten ungestuetzten Ebenen"
    }
  ],
  "accessories": [
    {
      "id": "wheel_bearing",
      "code": "CBR",
      "name": "Radlager",
      "name_en": "Wheel bearing",
      "price": 2.49,
      "qdf": "bearing2",
      "note": "5 cm langes Rohrstück an einer Kupplung, trägt das Multirad · Preis: quadroshop.com „Multirad Radlager“, Stand 2026-08-16"
    },
    {
      "id": "tube_cap",
      "code": "TCP",
      "name": "Rohrkappe",
      "price": 2.49,
      "note": "runde Kappe, verschließt ein offenes Rohrende",
      "name_en": "Tube cap",
      "qdf": "open-connector2"
    },
    {
      "id": "safety_clamp",
      "code": "YTC",
      "name": "Sicherungsklammer (Bodenverankerung)",
      "price": 11.49,
      "note": ""
    },
    {
      "id": "double_tube",
      "code": "CDT",
      "name": "Doppelrohrverbinder",
      "price": 4.49,
      "note": ""
    },
    {
      "id": "tube_clamp",
      "code": "CCL",
      "name": "Rohrklammer",
      "price": 2.49,
      "note": ""
    },
    {
      "id": "wheel",
      "code": "",
      "name": "Multirad",
      "name_en": "Multi wheel",
      "price": 6.99,
      "qdf": "multi-wheel2",
      "note": "schmales Speichenrad, sitzt auf einem Radlager · Preis: quadroshop.com „Multirad“, Stand 2026-08-16"
    },
    {
      "id": "wheel_floating",
      "code": "",
      "name": "Schwimmrad",
      "name_en": "Float wheel",
      "price": 13.49,
      "qdf": "floating-wheel2",
      "note": "knapp 15 cm dick, sitzt auf einem Rohr · Preis: quadroshop.com „Schwimmrad“, Stand 2026-08-16"
    },
    {
      "id": "hub_cap",
      "code": "",
      "name": "Radkappe",
      "name_en": "Wheel cap",
      "price": 2.99,
      "qdf": "hub-cap2",
      "note": "hält das Schwimmrad fest, wie die Radarretierung beim Multirad · Preis: quadroshop.com „Radkappe für Schwimmrad“, Stand 2026-08-16"
    },
    {
      "id": "caster",
      "code": "",
      "name": "Laufrolle",
      "name_en": "Caster",
      "price": 4.99,
      "qdf": "casters2",
      "note": "sitzt auf ihrem Adapter an einer Kupplung · Preis: quadroshop.com „Laufrolle Vollgummi“, Stand 2026-08-16"
    },
    {
      "id": "steering_lock",
      "code": "",
      "name": "Multirad Arretierung",
      "name_en": "Multi wheel lock",
      "price": 2.49,
      "qdf": "steering-lock2",
      "note": "sitzt am Ende eines Kupplungs-Stutzens und hält das Multirad · Preis: quadroshop.com „Multirad Arretierung“, Stand 2026-08-16"
    },
    {
      "id": "wheel_adapter",
      "code": "",
      "name": "Laufrolle Adapter",
      "name_en": "Caster adapter",
      "price": 2.49,
      "qdf": "adapter2",
      "note": "sitzt auf einem Kupplungs-Stutzen und nimmt die Laufrolle auf · Preis: quadroshop.com „Laufrolle Adapter“, Stand 2026-08-16"
    },
    {
      "id": "textile_round",
      "code": "",
      "name": "Rundwand (Textil)",
      "name_en": "Curved textile wall",
      "price": 16.99,
      "qdf": "textil-round2",
      "note": "Viertelzylinder, Radius 40 cm · Preis: quadroshop.com „Rundtextil“, Stand 2026-08-16"
    },
    {
      "id": "roof_large",
      "code": "",
      "name": "Dachtextil",
      "name_en": "Roof textile",
      "price": 32.99,
      "qdf": "roof-large2",
      "note": "Textil, das über eine bestimmte Dachkonstruktion gestülpt wird (First aus zwei 75ern) · wird geladen, aber nicht frei gesetzt · Preis: quadroshop.com „Dachtextil“, Stand 2026-08-16"
    },
    {
      "id": "lattice",
      "code": "",
      "name": "Gitter",
      "name_en": "Lattice",
      "price": 0,
      "qdf": "lattice2",
      "note": "Maße stehen im Entwurf · im Shop nur als Ballcage-Netz gelistet (84,99 €) bzw. Baby-Ballcage (74,99 €), nicht als Einzelteil unserer Größe · Preis noch offen"
    },
    {
      "id": "bag",
      "code": "",
      "name": "Spielsack",
      "name_en": "Play bag",
      "price": 32.99,
      "qdf": "bag2",
      "note": "Preis noch offen · Preis: quadroshop.com „Spielsack“, Stand 2026-08-16"
    },
    {
      "id": "slide_integral",
      "code": "",
      "name": "Integralrutsche",
      "name_en": "Integral slide",
      "price": 169.99,
      "qdf": "slide-new2",
      "note": "eigenständige Rutsche ohne Anbauten · Preis: quadroshop.com „Integralrutsche“, Stand 2026-08-16"
    },
    {
      "id": "slide_module",
      "code": "",
      "name": "Modularrutschen-Körper",
      "name_en": "Modular slide body",
      "price": 64.99,
      "qdf": "slide2",
      "note": "leicht gewellte Bahn, mehrere hintereinander möglich; am Ende der Kette der Auslauf · Preis: quadroshop.com „Modularrutschen-Körper“, Stand 2026-08-16"
    },
    {
      "id": "slide_curved",
      "code": "",
      "name": "Bogenrutschen-Körper",
      "name_en": "Curved slide body",
      "price": 99.99,
      "qdf": "curved-slide2",
      "note": "gebogene Bahn, Ausgang 90 Grad zur Laufrichtung · Preis: quadroshop.com „Bogenrutschen-Körper“, Stand 2026-08-16"
    },
    {
      "id": "slide_end",
      "code": "",
      "name": "Rutschenauslauf",
      "name_en": "Slide run-out",
      "price": 49.99,
      "qdf": "slide-end2",
      "note": "schließt eine Kette aus Modular- oder Bogenrutschen-Körpern ab · Preis: quadroshop.com „Rutschenauslauf“, Stand 2026-08-16"
    },
    {
      "id": "textile",
      "code": "",
      "name": "Textil",
      "name_en": "Textile",
      "price": 0,
      "qdf": "textil2",
      "note": "Tuch zwischen zwei parallelen Rohren, gesetzt wie das Gitter · im Shop nur im Textilset (59,99 €), nicht einzeln · Preis noch offen"
    }
  ]
}