{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "$id": "https://runek.nullorder.org/r/world.schema.json",
  "title": "Runek world",
  "description": "A Runek world as data: world settings plus a tree of component nodes. See https://runek.nullorder.org/docs/worlds-as-data",
  "type": "object",
  "required": [
    "version",
    "nodes"
  ],
  "properties": {
    "$schema": {
      "type": "string"
    },
    "version": {
      "const": 1
    },
    "meta": {
      "type": "object",
      "properties": {
        "title": {
          "type": "string"
        },
        "description": {
          "type": "string"
        },
        "authors": {
          "type": "array",
          "items": {
            "type": "object",
            "required": [
              "name"
            ],
            "properties": {
              "name": {
                "type": "string"
              },
              "url": {
                "type": "string"
              }
            },
            "additionalProperties": false
          }
        },
        "license": {
          "type": "string"
        },
        "source": {
          "type": "object",
          "required": [
            "url"
          ],
          "properties": {
            "url": {
              "type": "string"
            },
            "path": {
              "type": "string"
            },
            "branch": {
              "type": "string"
            }
          },
          "additionalProperties": false
        }
      },
      "additionalProperties": false
    },
    "unit": {
      "type": "number",
      "description": "Meters per unit.",
      "default": 1
    },
    "gravity": {
      "type": "array",
      "prefixItems": [
        {
          "type": "number"
        },
        {
          "type": "number"
        },
        {
          "type": "number"
        }
      ],
      "minItems": 3,
      "maxItems": 3,
      "default": [
        0,
        -9.81,
        0
      ]
    },
    "ground": {
      "type": "number",
      "description": "Baseline ground level (Y).",
      "default": 0
    },
    "time": {
      "type": "string",
      "pattern": "^\\d{1,2}:\\d{2}$",
      "description": "Pinned time of day, \"HH:MM\" (24h)."
    },
    "timezone": {
      "type": "string",
      "description": "IANA zone for a live, clock-driven day/night."
    },
    "avatar": {
      "enum": [
        "first",
        "third",
        "overhead"
      ],
      "description": "Default player camera view."
    },
    "controls": {
      "type": "object",
      "description": "Input remap: action to KeyboardEvent.code values.",
      "additionalProperties": {
        "type": "array",
        "items": {
          "type": "string"
        }
      }
    },
    "palette": {
      "type": "object",
      "description": "Color-slot overrides for every component.",
      "properties": {
        "wood": {
          "type": "string",
          "default": "#6b4f3a"
        },
        "woodDark": {
          "type": "string",
          "default": "#5c4330"
        },
        "wall": {
          "type": "string",
          "default": "#cfc7ba"
        },
        "floor": {
          "type": "string",
          "default": "#b8a98f"
        },
        "roof": {
          "type": "string",
          "default": "#8a5a44"
        },
        "stone": {
          "type": "string",
          "default": "#9a8c78"
        },
        "ground": {
          "type": "string",
          "default": "#3a4a3f"
        },
        "foliage": {
          "type": "string",
          "default": "#4f7a3a"
        },
        "bark": {
          "type": "string",
          "default": "#5b4636"
        },
        "sand": {
          "type": "string",
          "default": "#d8c79a"
        },
        "fabric": {
          "type": "string",
          "default": "#7a3b3b"
        },
        "accent": {
          "type": "string",
          "default": "#caa24a"
        },
        "metal": {
          "type": "string",
          "default": "#39383a"
        },
        "waterDeep": {
          "type": "string",
          "default": "#13415c"
        },
        "waterShallow": {
          "type": "string",
          "default": "#3f86a8"
        }
      },
      "additionalProperties": false
    },
    "fonts": {
      "type": "object",
      "properties": {
        "display": {
          "type": "string"
        },
        "body": {
          "type": "string"
        }
      },
      "additionalProperties": false
    },
    "fog": {
      "type": "object",
      "required": [
        "color",
        "near",
        "far"
      ],
      "properties": {
        "color": {
          "type": "string"
        },
        "near": {
          "type": "number"
        },
        "far": {
          "type": "number"
        }
      },
      "additionalProperties": false
    },
    "nodes": {
      "type": "array",
      "items": {
        "$ref": "#/$defs/node"
      }
    }
  },
  "additionalProperties": false,
  "$defs": {
    "props.ArcadeCabinet": {
      "description": "An upright arcade cabinet cut to the classic profile, with a lit marquee, joystick and buttons, and a screen running a seeded pixel game.",
      "type": "object",
      "properties": {
        "width": {
          "type": "number",
          "description": "Cabinet width, in units.",
          "default": 0.66
        },
        "color": {
          "type": "string",
          "examples": [
            "#7a5a40"
          ],
          "description": "Body color. Seeded when unset."
        },
        "accent": {
          "type": "string",
          "examples": [
            "#7a5a40"
          ],
          "description": "Side-art stripe and marquee glow. Seeded when unset."
        },
        "on": {
          "type": "boolean",
          "description": "Lit screen showing a seeded game; off, dark glass.",
          "default": true
        },
        "players": {
          "enum": [
            1,
            2
          ],
          "description": "Control sets on the panel (one or two players). Seeded when unset."
        },
        "position": {
          "type": "array",
          "prefixItems": [
            {
              "type": "number"
            },
            {
              "type": "number"
            },
            {
              "type": "number"
            }
          ],
          "minItems": 3,
          "maxItems": 3,
          "description": "Position [x, y, z] in units (1 unit = 1 m, Y-up).",
          "default": [
            0,
            0,
            0
          ]
        },
        "rotation": {
          "type": "array",
          "prefixItems": [
            {
              "type": "number"
            },
            {
              "type": "number"
            },
            {
              "type": "number"
            }
          ],
          "minItems": 3,
          "maxItems": 3,
          "description": "Euler rotation [x, y, z] in radians.",
          "default": [
            0,
            0,
            0
          ]
        },
        "seed": {
          "type": "number",
          "description": "Seed for the deterministic variation: same seed, same result.",
          "default": 1
        }
      },
      "additionalProperties": false
    },
    "props.Arch": {
      "description": "Freestanding gateway: two piers and a semicircular arch of voussoirs. Composes with Wall.",
      "type": "object",
      "properties": {
        "position": {
          "type": "array",
          "prefixItems": [
            {
              "type": "number"
            },
            {
              "type": "number"
            },
            {
              "type": "number"
            }
          ],
          "minItems": 3,
          "maxItems": 3,
          "description": "Position [x, y, z] in units (1 unit = 1 m, Y-up).",
          "default": [
            0,
            0,
            0
          ]
        },
        "rotation": {
          "type": "array",
          "prefixItems": [
            {
              "type": "number"
            },
            {
              "type": "number"
            },
            {
              "type": "number"
            }
          ],
          "minItems": 3,
          "maxItems": 3,
          "description": "Euler rotation [x, y, z] in radians.",
          "default": [
            0,
            0,
            0
          ]
        },
        "seed": {
          "type": "number",
          "description": "Accepted for the component contract; this component has no seeded variation yet."
        },
        "width": {
          "type": "number",
          "description": "Clear opening width, in units.",
          "default": 2.4
        },
        "height": {
          "type": "number",
          "description": "Height to the springline (top of the piers), in units.",
          "default": 2.6
        },
        "depth": {
          "type": "number",
          "description": "Depth, in units.",
          "default": 0.6
        },
        "thickness": {
          "type": "number",
          "description": "Pier thickness, in units.",
          "default": 0.4
        },
        "blocks": {
          "type": "number",
          "description": "Voussoir blocks forming the semicircular arch.",
          "default": 9
        },
        "color": {
          "type": "string",
          "examples": [
            "#7a5a40"
          ],
          "description": "Defaults to the world palette's `stone` slot."
        }
      },
      "additionalProperties": false
    },
    "props.Barrel": {
      "description": "Staved barrel bellied at the middle, banded by metal hoops; convex-hull collider.",
      "type": "object",
      "properties": {
        "position": {
          "type": "array",
          "prefixItems": [
            {
              "type": "number"
            },
            {
              "type": "number"
            },
            {
              "type": "number"
            }
          ],
          "minItems": 3,
          "maxItems": 3,
          "description": "Position [x, y, z] in units (1 unit = 1 m, Y-up).",
          "default": [
            0,
            0,
            0
          ]
        },
        "rotation": {
          "type": "array",
          "prefixItems": [
            {
              "type": "number"
            },
            {
              "type": "number"
            },
            {
              "type": "number"
            }
          ],
          "minItems": 3,
          "maxItems": 3,
          "description": "Euler rotation [x, y, z] in radians.",
          "default": [
            0,
            0,
            0
          ]
        },
        "seed": {
          "type": "number",
          "description": "Accepted for the component contract; this component has no seeded variation yet."
        },
        "radius": {
          "type": "number",
          "description": "Radius, in units.",
          "default": 0.35
        },
        "height": {
          "type": "number",
          "description": "Height, in units.",
          "default": 0.9
        },
        "color": {
          "type": "string",
          "examples": [
            "#7a5a40"
          ],
          "description": "Stave color; defaults to the world palette's `wood` slot."
        },
        "hoopColor": {
          "type": "string",
          "examples": [
            "#7a5a40"
          ],
          "description": "Hoop color; defaults to the world palette's `metal` slot."
        }
      },
      "additionalProperties": false
    },
    "props.Bed": {
      "description": "Bed with a frame, mattress, pillows, and a headboard.",
      "type": "object",
      "properties": {
        "position": {
          "type": "array",
          "prefixItems": [
            {
              "type": "number"
            },
            {
              "type": "number"
            },
            {
              "type": "number"
            }
          ],
          "minItems": 3,
          "maxItems": 3,
          "description": "Position [x, y, z] in units (1 unit = 1 m, Y-up).",
          "default": [
            0,
            0,
            0
          ]
        },
        "rotation": {
          "type": "array",
          "prefixItems": [
            {
              "type": "number"
            },
            {
              "type": "number"
            },
            {
              "type": "number"
            }
          ],
          "minItems": 3,
          "maxItems": 3,
          "description": "Euler rotation [x, y, z] in radians.",
          "default": [
            0,
            0,
            0
          ]
        },
        "seed": {
          "type": "number",
          "description": "Accepted for the component contract; this component has no seeded variation yet."
        },
        "width": {
          "type": "number",
          "description": "Width, in units.",
          "default": 1.4
        },
        "length": {
          "type": "number",
          "description": "Length, in units.",
          "default": 2
        },
        "color": {
          "type": "string",
          "examples": [
            "#7a5a40"
          ],
          "description": "Frame color; defaults to the world palette's `wood` slot."
        },
        "beddingColor": {
          "type": "string",
          "examples": [
            "#7a5a40"
          ],
          "description": "Bedding color; defaults to the world palette's `fabric` slot."
        }
      },
      "additionalProperties": false
    },
    "props.Bench": {
      "description": "Slatted bench with an optional backrest; indoor or outdoor seating.",
      "type": "object",
      "properties": {
        "position": {
          "type": "array",
          "prefixItems": [
            {
              "type": "number"
            },
            {
              "type": "number"
            },
            {
              "type": "number"
            }
          ],
          "minItems": 3,
          "maxItems": 3,
          "description": "Position [x, y, z] in units (1 unit = 1 m, Y-up).",
          "default": [
            0,
            0,
            0
          ]
        },
        "rotation": {
          "type": "array",
          "prefixItems": [
            {
              "type": "number"
            },
            {
              "type": "number"
            },
            {
              "type": "number"
            }
          ],
          "minItems": 3,
          "maxItems": 3,
          "description": "Euler rotation [x, y, z] in radians.",
          "default": [
            0,
            0,
            0
          ]
        },
        "seed": {
          "type": "number",
          "description": "Accepted for the component contract; this component has no seeded variation yet."
        },
        "length": {
          "type": "number",
          "description": "Length, in units.",
          "default": 1.6
        },
        "depth": {
          "type": "number",
          "description": "Depth, in units.",
          "default": 0.5
        },
        "seatHeight": {
          "type": "number",
          "default": 0.45
        },
        "back": {
          "type": "boolean",
          "description": "Include a backrest.",
          "default": true
        },
        "color": {
          "type": "string",
          "examples": [
            "#7a5a40"
          ],
          "description": "Defaults to the world palette's `wood` slot."
        }
      },
      "additionalProperties": false
    },
    "props.Birds": {
      "description": "A loose flock circling overhead, each bird flapping on its own seeded orbit.",
      "type": "object",
      "properties": {
        "position": {
          "type": "array",
          "prefixItems": [
            {
              "type": "number"
            },
            {
              "type": "number"
            },
            {
              "type": "number"
            }
          ],
          "minItems": 3,
          "maxItems": 3,
          "description": "Position [x, y, z] in units (1 unit = 1 m, Y-up).",
          "default": [
            0,
            0,
            0
          ]
        },
        "rotation": {
          "type": "array",
          "prefixItems": [
            {
              "type": "number"
            },
            {
              "type": "number"
            },
            {
              "type": "number"
            }
          ],
          "minItems": 3,
          "maxItems": 3,
          "description": "Euler rotation [x, y, z] in radians.",
          "default": [
            0,
            0,
            0
          ]
        },
        "count": {
          "type": "number",
          "default": 10
        },
        "area": {
          "type": "number",
          "description": "Orbit spread, in units.",
          "default": 20
        },
        "height": {
          "type": "number",
          "description": "Height, in units.",
          "default": 12
        },
        "speed": {
          "type": "number",
          "default": 1
        },
        "color": {
          "type": "string",
          "examples": [
            "#7a5a40"
          ],
          "default": "#2a2a30"
        },
        "seed": {
          "type": "number",
          "description": "Seed for the deterministic variation: same seed, same result.",
          "default": 1
        }
      },
      "additionalProperties": false
    },
    "props.Book": {
      "description": "A single procedural book — standing, lying, or open — with a seeded cover and optional click interaction; the standalone sibling of Bookshelf's instanced spines.",
      "type": "object",
      "properties": {
        "position": {
          "type": "array",
          "prefixItems": [
            {
              "type": "number"
            },
            {
              "type": "number"
            },
            {
              "type": "number"
            }
          ],
          "minItems": 3,
          "maxItems": 3,
          "description": "Position [x, y, z] in units (1 unit = 1 m, Y-up).",
          "default": [
            0,
            0,
            0
          ]
        },
        "rotation": {
          "type": "array",
          "prefixItems": [
            {
              "type": "number"
            },
            {
              "type": "number"
            },
            {
              "type": "number"
            }
          ],
          "minItems": 3,
          "maxItems": 3,
          "description": "Euler rotation [x, y, z] in radians.",
          "default": [
            0,
            0,
            0
          ]
        },
        "width": {
          "type": "number",
          "description": "Cover width (spine to fore-edge), in units.",
          "default": 0.22
        },
        "height": {
          "type": "number",
          "description": "Spine length, in units.",
          "default": 0.3
        },
        "thickness": {
          "type": "number",
          "description": "Closed page-block thickness, in units.",
          "default": 0.05
        },
        "pose": {
          "enum": [
            "standing",
            "lying",
            "open"
          ],
          "description": "`lying` rests on its back cover (spine on the -x edge); `standing` stands\nupright on its bottom edge; `open` lies opened flat at the spine.",
          "default": "lying"
        },
        "color": {
          "type": "string",
          "examples": [
            "#7a5a40"
          ],
          "description": "Cover color. Defaults to a seeded cloth-bound color."
        },
        "pageColor": {
          "type": "string",
          "examples": [
            "#7a5a40"
          ],
          "default": "#efe7d2"
        },
        "title": {
          "type": "string",
          "description": "Shown as a hover label when the book is interactive."
        },
        "href": {
          "type": "string",
          "description": "Navigated to on click when no `onSelect` is given."
        },
        "seed": {
          "type": "number",
          "description": "Seed for the deterministic variation: same seed, same result.",
          "default": 1
        }
      },
      "additionalProperties": false
    },
    "props.Bookshelf": {
      "description": "Procedurally generated bookshelf with seeded books and one cuboid collider.",
      "type": "object",
      "properties": {
        "position": {
          "type": "array",
          "prefixItems": [
            {
              "type": "number"
            },
            {
              "type": "number"
            },
            {
              "type": "number"
            }
          ],
          "minItems": 3,
          "maxItems": 3,
          "description": "Position [x, y, z] in units (1 unit = 1 m, Y-up).",
          "default": [
            0,
            0,
            0
          ]
        },
        "rotation": {
          "type": "array",
          "prefixItems": [
            {
              "type": "number"
            },
            {
              "type": "number"
            },
            {
              "type": "number"
            }
          ],
          "minItems": 3,
          "maxItems": 3,
          "description": "Euler rotation [x, y, z] in radians.",
          "default": [
            0,
            0,
            0
          ]
        },
        "width": {
          "type": "number",
          "description": "Outer dimensions in units.",
          "default": 1.2
        },
        "height": {
          "type": "number",
          "description": "Height, in units.",
          "default": 2
        },
        "depth": {
          "type": "number",
          "description": "Depth, in units.",
          "default": 0.3
        },
        "shelves": {
          "type": "number",
          "description": "Number of rows. Defaults to 3; set 1 or 2 for a shorter case.",
          "default": 3
        },
        "fill": {
          "type": "number",
          "description": "Fraction of shelf space filled with procedural decoration, 0–1. Defaults to\n`0` (an empty shelf); set it for a decorative, non-interactive shelf. Ignored\nwhen `books` is set.",
          "default": 0
        },
        "color": {
          "type": "string",
          "examples": [
            "#7a5a40"
          ],
          "description": "Frame color. Defaults to the world palette's `wood` slot."
        },
        "backColor": {
          "type": "string",
          "examples": [
            "#7a5a40"
          ],
          "description": "Back-panel color. Defaults to the world palette's `woodDark` slot."
        },
        "seed": {
          "type": "number",
          "description": "Seed for the deterministic variation: same seed, same result.",
          "default": 1
        },
        "books": {
          "type": "array",
          "items": {
            "$ref": "#/$defs/Bookshelf.BookSpec"
          },
          "description": "Explicit, addressable books. When provided, these replace the procedural\n`fill` and are the only books rendered. Pass `[]` for an empty shelf and\nappend to make books appear. A book is clickable when `onBookSelect` is set\nor it carries an `href`."
        },
        "label": {
          "type": "string",
          "description": "Section label rendered above the shelf, e.g. `\"Guides\"`. Drawn as a `Sign`\nin the world's `display` face."
        },
        "labelColor": {
          "type": "string",
          "examples": [
            "#7a5a40"
          ],
          "description": "Label color. Defaults to the world palette's `accent` slot."
        },
        "labelSize": {
          "type": "number",
          "description": "Label cap height in units.",
          "default": 0.08
        }
      },
      "additionalProperties": false
    },
    "Bookshelf.BookSpec": {
      "type": "object",
      "properties": {
        "id": {
          "type": "string",
          "description": "Stable identity, passed back to `onBookSelect`."
        },
        "title": {
          "type": "string",
          "description": "Shown as a hover label."
        },
        "color": {
          "type": "string",
          "examples": [
            "#7a5a40"
          ],
          "description": "Spine color. Defaults to a seeded color."
        },
        "href": {
          "type": "string",
          "description": "Navigated to on click when no `onBookSelect` is given."
        },
        "shelf": {
          "type": "number",
          "description": "Row to place the book on, counted from the top (0 = top row). Clamped to\nthe shelf's row count. Books without a row auto-pack bottom-up around the\nplaced ones."
        }
      },
      "required": [
        "id"
      ],
      "additionalProperties": false
    },
    "props.Bridge": {
      "description": "Plank deck spanning a gap, optionally arched, with railings and slab colliders that follow the deck.",
      "type": "object",
      "properties": {
        "position": {
          "type": "array",
          "prefixItems": [
            {
              "type": "number"
            },
            {
              "type": "number"
            },
            {
              "type": "number"
            }
          ],
          "minItems": 3,
          "maxItems": 3,
          "description": "Position [x, y, z] in units (1 unit = 1 m, Y-up).",
          "default": [
            0,
            0,
            0
          ]
        },
        "rotation": {
          "type": "array",
          "prefixItems": [
            {
              "type": "number"
            },
            {
              "type": "number"
            },
            {
              "type": "number"
            }
          ],
          "minItems": 3,
          "maxItems": 3,
          "description": "Euler rotation [x, y, z] in radians.",
          "default": [
            0,
            0,
            0
          ]
        },
        "length": {
          "type": "number",
          "description": "Span along local X, in units.",
          "default": 6
        },
        "width": {
          "type": "number",
          "description": "Walkway width along local Z, in units.",
          "default": 2
        },
        "arch": {
          "type": "number",
          "description": "Arch rise at the center, in units (0 = flat).",
          "default": 0
        },
        "rails": {
          "type": "boolean",
          "description": "Side railings.",
          "default": true
        },
        "color": {
          "type": "string",
          "examples": [
            "#7a5a40"
          ],
          "description": "Deck color; defaults to the world palette's `wood` slot."
        },
        "seed": {
          "type": "number",
          "description": "Seed for the deterministic variation: same seed, same result.",
          "default": 1
        }
      },
      "additionalProperties": false
    },
    "props.Bush": {
      "description": "Clustered foliage blobs, seeded; the mid-height density between Grass and Trees.",
      "type": "object",
      "properties": {
        "position": {
          "type": "array",
          "prefixItems": [
            {
              "type": "number"
            },
            {
              "type": "number"
            },
            {
              "type": "number"
            }
          ],
          "minItems": 3,
          "maxItems": 3,
          "description": "Position [x, y, z] in units (1 unit = 1 m, Y-up).",
          "default": [
            0,
            0,
            0
          ]
        },
        "rotation": {
          "type": "array",
          "prefixItems": [
            {
              "type": "number"
            },
            {
              "type": "number"
            },
            {
              "type": "number"
            }
          ],
          "minItems": 3,
          "maxItems": 3,
          "description": "Euler rotation [x, y, z] in radians.",
          "default": [
            0,
            0,
            0
          ]
        },
        "radius": {
          "type": "number",
          "description": "Overall radius, in units.",
          "default": 0.6
        },
        "blobs": {
          "type": "number",
          "description": "Number of foliage blobs.",
          "default": 7
        },
        "color": {
          "type": "string",
          "examples": [
            "#7a5a40"
          ],
          "description": "Defaults to the world palette's `foliage` slot."
        },
        "seed": {
          "type": "number",
          "description": "Seed for the deterministic variation: same seed, same result.",
          "default": 1
        }
      },
      "additionalProperties": false
    },
    "props.Campfire": {
      "description": "Stone ring, a tepee of logs, and an animated flame with a warm flickering light.",
      "type": "object",
      "properties": {
        "position": {
          "type": "array",
          "prefixItems": [
            {
              "type": "number"
            },
            {
              "type": "number"
            },
            {
              "type": "number"
            }
          ],
          "minItems": 3,
          "maxItems": 3,
          "description": "Position [x, y, z] in units (1 unit = 1 m, Y-up).",
          "default": [
            0,
            0,
            0
          ]
        },
        "rotation": {
          "type": "array",
          "prefixItems": [
            {
              "type": "number"
            },
            {
              "type": "number"
            },
            {
              "type": "number"
            }
          ],
          "minItems": 3,
          "maxItems": 3,
          "description": "Euler rotation [x, y, z] in radians.",
          "default": [
            0,
            0,
            0
          ]
        },
        "radius": {
          "type": "number",
          "description": "Radius, in units.",
          "default": 0.5
        },
        "logColor": {
          "type": "string",
          "examples": [
            "#7a5a40"
          ],
          "description": "Log color; defaults to the world palette's `wood` slot."
        },
        "flameColor": {
          "type": "string",
          "examples": [
            "#7a5a40"
          ],
          "default": "#ff7a1a"
        },
        "intensity": {
          "type": "number",
          "default": 14
        },
        "seed": {
          "type": "number",
          "description": "Seed for the deterministic variation: same seed, same result.",
          "default": 1
        }
      },
      "additionalProperties": false
    },
    "props.Chair": {
      "description": "Chair with seat, back, and legs.",
      "type": "object",
      "properties": {
        "position": {
          "type": "array",
          "prefixItems": [
            {
              "type": "number"
            },
            {
              "type": "number"
            },
            {
              "type": "number"
            }
          ],
          "minItems": 3,
          "maxItems": 3,
          "description": "Position [x, y, z] in units (1 unit = 1 m, Y-up).",
          "default": [
            0,
            0,
            0
          ]
        },
        "rotation": {
          "type": "array",
          "prefixItems": [
            {
              "type": "number"
            },
            {
              "type": "number"
            },
            {
              "type": "number"
            }
          ],
          "minItems": 3,
          "maxItems": 3,
          "description": "Euler rotation [x, y, z] in radians.",
          "default": [
            0,
            0,
            0
          ]
        },
        "seed": {
          "type": "number",
          "description": "Accepted for the component contract; this component has no seeded variation yet."
        },
        "width": {
          "type": "number",
          "description": "Width, in units.",
          "default": 0.45
        },
        "depth": {
          "type": "number",
          "description": "Depth, in units.",
          "default": 0.45
        },
        "seatHeight": {
          "type": "number",
          "default": 0.45
        },
        "backHeight": {
          "type": "number",
          "default": 0.5
        },
        "color": {
          "type": "string",
          "examples": [
            "#7a5a40"
          ],
          "description": "Defaults to the world palette's `wood` slot."
        }
      },
      "additionalProperties": false
    },
    "props.Cliff": {
      "description": "A rocky promontory: a low-poly, seed-jittered truncated cone with a flattish plateau and a convex-hull collider.",
      "type": "object",
      "properties": {
        "radius": {
          "type": "number",
          "description": "Base radius at the waterline, in units.",
          "default": 10
        },
        "topRadius": {
          "type": "number",
          "description": "Plateau (top) radius, in units.",
          "default": 6
        },
        "height": {
          "type": "number",
          "description": "Height from the base to the plateau, in units.",
          "default": 12
        },
        "segments": {
          "type": "number",
          "description": "Radial facets — fewer reads as blockier rock.",
          "default": 8
        },
        "rough": {
          "type": "number",
          "description": "Surface jitter, as a fraction of a facet.",
          "default": 0.35
        },
        "color": {
          "type": "string",
          "examples": [
            "#7a5a40"
          ],
          "description": "Rock color; defaults to the palette's `stone`."
        },
        "position": {
          "type": "array",
          "prefixItems": [
            {
              "type": "number"
            },
            {
              "type": "number"
            },
            {
              "type": "number"
            }
          ],
          "minItems": 3,
          "maxItems": 3,
          "description": "Position [x, y, z] in units (1 unit = 1 m, Y-up).",
          "default": [
            0,
            0,
            0
          ]
        },
        "rotation": {
          "type": "array",
          "prefixItems": [
            {
              "type": "number"
            },
            {
              "type": "number"
            },
            {
              "type": "number"
            }
          ],
          "minItems": 3,
          "maxItems": 3,
          "description": "Euler rotation [x, y, z] in radians.",
          "default": [
            0,
            0,
            0
          ]
        },
        "seed": {
          "type": "number",
          "description": "Seed for the deterministic variation: same seed, same result.",
          "default": 1
        }
      },
      "additionalProperties": false
    },
    "props.Clock": {
      "description": "Procedural analog wall clock; hands track the system clock or a given IANA timezone.",
      "type": "object",
      "properties": {
        "position": {
          "type": "array",
          "prefixItems": [
            {
              "type": "number"
            },
            {
              "type": "number"
            },
            {
              "type": "number"
            }
          ],
          "minItems": 3,
          "maxItems": 3,
          "description": "Position [x, y, z] in units (1 unit = 1 m, Y-up).",
          "default": [
            0,
            0,
            0
          ]
        },
        "rotation": {
          "type": "array",
          "prefixItems": [
            {
              "type": "number"
            },
            {
              "type": "number"
            },
            {
              "type": "number"
            }
          ],
          "minItems": 3,
          "maxItems": 3,
          "description": "Euler rotation [x, y, z] in radians.",
          "default": [
            0,
            0,
            0
          ]
        },
        "seed": {
          "type": "number",
          "description": "Accepted for the component contract; this component has no seeded variation yet."
        },
        "radius": {
          "type": "number",
          "description": "Face radius in units.",
          "default": 0.55
        },
        "timezone": {
          "type": "string",
          "description": "IANA timezone, e.g. \"Asia/Kolkata\". Omit to inherit the world's `timezone`\n(`<World timezone>`), then the local system time; if neither resolves, the\nclock falls back to UTC."
        },
        "frameColor": {
          "type": "string",
          "examples": [
            "#7a5a40"
          ],
          "description": "Rim/frame color. Defaults to the world palette's `metal` slot."
        },
        "faceColor": {
          "type": "string",
          "examples": [
            "#7a5a40"
          ],
          "description": "Dial color.",
          "default": "#0d1117"
        },
        "handColor": {
          "type": "string",
          "examples": [
            "#7a5a40"
          ],
          "description": "Hour/minute hand and tick color.",
          "default": "#e8eef5"
        },
        "accentColor": {
          "type": "string",
          "examples": [
            "#7a5a40"
          ],
          "description": "Second hand + hub accent. Defaults to the world palette's `accent` slot."
        }
      },
      "additionalProperties": false
    },
    "props.Clouds": {
      "description": "Drifting clouds built from clustered soft blobs (no textures); layer above a Sky.",
      "type": "object",
      "properties": {
        "position": {
          "type": "array",
          "prefixItems": [
            {
              "type": "number"
            },
            {
              "type": "number"
            },
            {
              "type": "number"
            }
          ],
          "minItems": 3,
          "maxItems": 3,
          "description": "Position [x, y, z] in units (1 unit = 1 m, Y-up).",
          "default": [
            0,
            0,
            0
          ]
        },
        "rotation": {
          "type": "array",
          "prefixItems": [
            {
              "type": "number"
            },
            {
              "type": "number"
            },
            {
              "type": "number"
            }
          ],
          "minItems": 3,
          "maxItems": 3,
          "description": "Euler rotation [x, y, z] in radians.",
          "default": [
            0,
            0,
            0
          ]
        },
        "count": {
          "type": "number",
          "description": "Number of clouds.",
          "default": 8
        },
        "area": {
          "type": "array",
          "prefixItems": [
            {
              "type": "number"
            },
            {
              "type": "number"
            }
          ],
          "minItems": 2,
          "maxItems": 2,
          "description": "Spread `[width, depth]`, in units.",
          "default": [
            80,
            80
          ]
        },
        "height": {
          "type": "number",
          "description": "Height above the origin, in units.",
          "default": 24
        },
        "drift": {
          "type": "number",
          "description": "Drift speed along +X, in units/sec (0 holds still).",
          "default": 0.6
        },
        "color": {
          "type": "string",
          "examples": [
            "#7a5a40"
          ],
          "default": "#eef2f7"
        },
        "seed": {
          "type": "number",
          "description": "Seed for the deterministic variation: same seed, same result.",
          "default": 1
        }
      },
      "additionalProperties": false
    },
    "props.CoffeeMachine": {
      "description": "A countertop coffee machine, espresso or drip, with a cup or carafe and a few puffs of steam. Sits on a Counter.",
      "type": "object",
      "properties": {
        "kind": {
          "enum": [
            "espresso",
            "drip"
          ],
          "description": "Seeded when unset."
        },
        "color": {
          "type": "string",
          "examples": [
            "#7a5a40"
          ],
          "description": "Body color. Seeded from a few appliance finishes when unset."
        },
        "steam": {
          "type": "boolean",
          "description": "A few puffs of steam rising from the cup or carafe.",
          "default": true
        },
        "position": {
          "type": "array",
          "prefixItems": [
            {
              "type": "number"
            },
            {
              "type": "number"
            },
            {
              "type": "number"
            }
          ],
          "minItems": 3,
          "maxItems": 3,
          "description": "Position [x, y, z] in units (1 unit = 1 m, Y-up).",
          "default": [
            0,
            0,
            0
          ]
        },
        "rotation": {
          "type": "array",
          "prefixItems": [
            {
              "type": "number"
            },
            {
              "type": "number"
            },
            {
              "type": "number"
            }
          ],
          "minItems": 3,
          "maxItems": 3,
          "description": "Euler rotation [x, y, z] in radians.",
          "default": [
            0,
            0,
            0
          ]
        },
        "seed": {
          "type": "number",
          "description": "Seed for the deterministic variation: same seed, same result.",
          "default": 1
        }
      },
      "additionalProperties": false
    },
    "props.Compass": {
      "description": "A screen-fixed HUD compass: a glassy dial in a corner of the canvas whose rose card swings with the camera heading, with a fixed lubber line and an optional wind + bearing readout — works with any traversal that drives the camera (on foot or at a vehicle's chase-cam).",
      "type": "object",
      "properties": {
        "corner": {
          "enum": [
            "top-left",
            "top-right",
            "bottom-left",
            "bottom-right"
          ],
          "description": "Screen corner the dial sits in.",
          "default": "bottom-left"
        },
        "size": {
          "type": "number",
          "description": "Dial diameter, in CSS px (shrinks ~22% on narrow viewports).",
          "default": 108
        },
        "inset": {
          "type": "array",
          "prefixItems": [
            {
              "type": "number"
            },
            {
              "type": "number"
            }
          ],
          "minItems": 2,
          "maxItems": 2,
          "description": "Inset from the corner edges, in CSS px `[x, y]`.",
          "default": [
            16,
            16
          ]
        },
        "readout": {
          "type": "boolean",
          "description": "Show the wind + bearing readout pill under the dial.",
          "default": true
        },
        "north": {
          "type": "number",
          "description": "World yaw (radians) the dial reads as north, using the same convention as `Player`/`Helm`\nyaw: 0 faces +Z, so the default makes +Z north (and -X east).",
          "default": 0
        },
        "accentColor": {
          "type": "string",
          "examples": [
            "#7a5a40"
          ],
          "description": "North needle + north letter color. Compass-north red; no palette slot fits.",
          "default": "#c0392b"
        },
        "position": {
          "type": "array",
          "prefixItems": [
            {
              "type": "number"
            },
            {
              "type": "number"
            },
            {
              "type": "number"
            }
          ],
          "minItems": 3,
          "maxItems": 3,
          "description": "Position [x, y, z] in units (1 unit = 1 m, Y-up)."
        },
        "rotation": {
          "type": "array",
          "prefixItems": [
            {
              "type": "number"
            },
            {
              "type": "number"
            },
            {
              "type": "number"
            }
          ],
          "minItems": 3,
          "maxItems": 3,
          "description": "Euler rotation [x, y, z] in radians."
        },
        "seed": {
          "type": "number",
          "description": "Accepted for the component contract; this component has no seeded variation yet."
        }
      },
      "additionalProperties": false
    },
    "props.Counter": {
      "description": "A service / bar counter: a solid body under a worktop that overhangs the front; one cuboid collider. With hob, a kitchen stove: a glass cooktop and an oven door.",
      "type": "object",
      "properties": {
        "length": {
          "type": "number",
          "description": "Length along local X, in units.",
          "default": 3
        },
        "height": {
          "type": "number",
          "description": "Counter height, in units.",
          "default": 1.1
        },
        "depth": {
          "type": "number",
          "description": "Depth along local Z, in units.",
          "default": 0.6
        },
        "color": {
          "type": "string",
          "examples": [
            "#7a5a40"
          ],
          "description": "Body color; defaults to the palette's `wood`."
        },
        "topColor": {
          "type": "string",
          "examples": [
            "#7a5a40"
          ],
          "description": "Worktop color; defaults to the palette's `woodDark`."
        },
        "hob": {
          "type": "boolean",
          "description": "A kitchen stove at the +X end: a glass hob with four burners on the worktop and an oven\ndoor in the front below it.",
          "default": false
        },
        "position": {
          "type": "array",
          "prefixItems": [
            {
              "type": "number"
            },
            {
              "type": "number"
            },
            {
              "type": "number"
            }
          ],
          "minItems": 3,
          "maxItems": 3,
          "description": "Position [x, y, z] in units (1 unit = 1 m, Y-up).",
          "default": [
            0,
            0,
            0
          ]
        },
        "rotation": {
          "type": "array",
          "prefixItems": [
            {
              "type": "number"
            },
            {
              "type": "number"
            },
            {
              "type": "number"
            }
          ],
          "minItems": 3,
          "maxItems": 3,
          "description": "Euler rotation [x, y, z] in radians.",
          "default": [
            0,
            0,
            0
          ]
        },
        "seed": {
          "type": "number",
          "description": "Accepted for the component contract; this component has no seeded variation yet."
        }
      },
      "additionalProperties": false
    },
    "props.Crate": {
      "description": "Slatted wooden crate with seeded plank shades; stacks via a cuboid collider.",
      "type": "object",
      "properties": {
        "position": {
          "type": "array",
          "prefixItems": [
            {
              "type": "number"
            },
            {
              "type": "number"
            },
            {
              "type": "number"
            }
          ],
          "minItems": 3,
          "maxItems": 3,
          "description": "Position [x, y, z] in units (1 unit = 1 m, Y-up).",
          "default": [
            0,
            0,
            0
          ]
        },
        "rotation": {
          "type": "array",
          "prefixItems": [
            {
              "type": "number"
            },
            {
              "type": "number"
            },
            {
              "type": "number"
            }
          ],
          "minItems": 3,
          "maxItems": 3,
          "description": "Euler rotation [x, y, z] in radians.",
          "default": [
            0,
            0,
            0
          ]
        },
        "size": {
          "type": "number",
          "description": "Edge length, in units.",
          "default": 0.8
        },
        "color": {
          "type": "string",
          "examples": [
            "#7a5a40"
          ],
          "description": "Plank color; defaults to the world palette's `wood` slot."
        },
        "seed": {
          "type": "number",
          "description": "Seed for the deterministic variation: same seed, same result.",
          "default": 1
        }
      },
      "additionalProperties": false
    },
    "props.CurvedWall": {
      "description": "An arc of wall around the origin — solid concrete or a floor-to-ceiling glass curtain wall with mullions. Compose several arcs to leave door gaps; chords carry cuboid colliders.",
      "type": "object",
      "properties": {
        "radius": {
          "type": "number",
          "description": "Arc centerline radius, in units. The component origin is the circle's center.",
          "default": 6
        },
        "arc": {
          "type": "number",
          "description": "Sweep angle in radians, centered on the local +Z axis.",
          "default": 1.5707963267948966
        },
        "height": {
          "type": "number",
          "description": "Height, in units.",
          "default": 3
        },
        "thickness": {
          "type": "number",
          "description": "Thickness, in units.",
          "default": 0.15
        },
        "style": {
          "enum": [
            "solid",
            "glass"
          ],
          "description": "`glass` renders a transparent curtain wall with mullions; `solid` a plain wall.",
          "default": "solid"
        },
        "segments": {
          "type": "number",
          "description": "Chord segments; defaults from `radius × arc`, more segments reading as smoother."
        },
        "color": {
          "type": "string",
          "examples": [
            "#7a5a40"
          ],
          "description": "Solid wall color; defaults to the world palette's `wall` slot."
        },
        "glassColor": {
          "type": "string",
          "examples": [
            "#7a5a40"
          ],
          "description": "Glass tint (glass style).",
          "default": "#b7d8e8"
        },
        "frameColor": {
          "type": "string",
          "examples": [
            "#7a5a40"
          ],
          "description": "Mullion and rail color (glass style); defaults to the palette's `metal` slot."
        },
        "position": {
          "type": "array",
          "prefixItems": [
            {
              "type": "number"
            },
            {
              "type": "number"
            },
            {
              "type": "number"
            }
          ],
          "minItems": 3,
          "maxItems": 3,
          "description": "Position [x, y, z] in units (1 unit = 1 m, Y-up).",
          "default": [
            0,
            0,
            0
          ]
        },
        "rotation": {
          "type": "array",
          "prefixItems": [
            {
              "type": "number"
            },
            {
              "type": "number"
            },
            {
              "type": "number"
            }
          ],
          "minItems": 3,
          "maxItems": 3,
          "description": "Euler rotation [x, y, z] in radians.",
          "default": [
            0,
            0,
            0
          ]
        },
        "seed": {
          "type": "number",
          "description": "Accepted for the component contract; this component has no seeded variation yet."
        }
      },
      "additionalProperties": false
    },
    "props.Desk": {
      "description": "A work desk: a top over slim legs, a drawer pedestal, or side panels, with a modesty panel at the back. Base and drawers seeded, each pinnable. One cuboid collider.",
      "type": "object",
      "properties": {
        "width": {
          "type": "number",
          "description": "Width along local X, in units.",
          "default": 1.4
        },
        "depth": {
          "type": "number",
          "description": "Depth along local Z, in units. The front, where you sit, faces +Z.",
          "default": 0.7
        },
        "height": {
          "type": "number",
          "description": "Height of the work surface, in units.",
          "default": 0.75
        },
        "base": {
          "enum": [
            "legs",
            "pedestal",
            "panels"
          ],
          "description": "Seeded when unset."
        },
        "drawers": {
          "type": "number",
          "description": "Drawers in the pedestal, 0 to 4. Seeded when unset; only a `pedestal` desk has them."
        },
        "color": {
          "type": "string",
          "examples": [
            "#7a5a40"
          ],
          "description": "Top color; defaults to the palette's `wood`."
        },
        "baseColor": {
          "type": "string",
          "examples": [
            "#7a5a40"
          ],
          "description": "Legs, pedestal, and panels; defaults to the palette's `metal` for legs, else `woodDark`."
        },
        "position": {
          "type": "array",
          "prefixItems": [
            {
              "type": "number"
            },
            {
              "type": "number"
            },
            {
              "type": "number"
            }
          ],
          "minItems": 3,
          "maxItems": 3,
          "description": "Position [x, y, z] in units (1 unit = 1 m, Y-up).",
          "default": [
            0,
            0,
            0
          ]
        },
        "rotation": {
          "type": "array",
          "prefixItems": [
            {
              "type": "number"
            },
            {
              "type": "number"
            },
            {
              "type": "number"
            }
          ],
          "minItems": 3,
          "maxItems": 3,
          "description": "Euler rotation [x, y, z] in radians.",
          "default": [
            0,
            0,
            0
          ]
        },
        "seed": {
          "type": "number",
          "description": "Seed for the deterministic variation: same seed, same result.",
          "default": 1
        }
      },
      "additionalProperties": false
    },
    "props.Dock": {
      "description": "A plank jetty on pilings reaching out over water; walkable deck colliders, side stringers, and seaward mooring posts.",
      "type": "object",
      "properties": {
        "length": {
          "type": "number",
          "description": "How far the jetty reaches out from the shore (local +Z), in units.",
          "default": 10
        },
        "width": {
          "type": "number",
          "description": "Walkway width (local X), in units.",
          "default": 3
        },
        "depth": {
          "type": "number",
          "description": "How deep the pilings sink below the deck surface, in units.",
          "default": 4
        },
        "color": {
          "type": "string",
          "examples": [
            "#7a5a40"
          ],
          "description": "Deck color; defaults to the world palette's `wood`."
        },
        "position": {
          "type": "array",
          "prefixItems": [
            {
              "type": "number"
            },
            {
              "type": "number"
            },
            {
              "type": "number"
            }
          ],
          "minItems": 3,
          "maxItems": 3,
          "description": "Position [x, y, z] in units (1 unit = 1 m, Y-up).",
          "default": [
            0,
            0,
            0
          ]
        },
        "rotation": {
          "type": "array",
          "prefixItems": [
            {
              "type": "number"
            },
            {
              "type": "number"
            },
            {
              "type": "number"
            }
          ],
          "minItems": 3,
          "maxItems": 3,
          "description": "Euler rotation [x, y, z] in radians.",
          "default": [
            0,
            0,
            0
          ]
        },
        "seed": {
          "type": "number",
          "description": "Seed for the deterministic variation: same seed, same result.",
          "default": 1
        }
      },
      "additionalProperties": false
    },
    "props.Door": {
      "description": "Door panel within a frame.",
      "type": "object",
      "properties": {
        "position": {
          "type": "array",
          "prefixItems": [
            {
              "type": "number"
            },
            {
              "type": "number"
            },
            {
              "type": "number"
            }
          ],
          "minItems": 3,
          "maxItems": 3,
          "description": "Position [x, y, z] in units (1 unit = 1 m, Y-up).",
          "default": [
            0,
            0,
            0
          ]
        },
        "rotation": {
          "type": "array",
          "prefixItems": [
            {
              "type": "number"
            },
            {
              "type": "number"
            },
            {
              "type": "number"
            }
          ],
          "minItems": 3,
          "maxItems": 3,
          "description": "Euler rotation [x, y, z] in radians.",
          "default": [
            0,
            0,
            0
          ]
        },
        "seed": {
          "type": "number",
          "description": "Accepted for the component contract; this component has no seeded variation yet."
        },
        "width": {
          "type": "number",
          "description": "Width, in units.",
          "default": 0.9
        },
        "height": {
          "type": "number",
          "description": "Height, in units.",
          "default": 2
        },
        "thickness": {
          "type": "number",
          "description": "Thickness, in units.",
          "default": 0.05
        },
        "openAngle": {
          "type": "number",
          "description": "Hinge angle in radians; 0 is closed.",
          "default": 0
        },
        "color": {
          "type": "string",
          "examples": [
            "#7a5a40"
          ],
          "description": "Defaults to the world palette's `wood` slot."
        }
      },
      "additionalProperties": false
    },
    "props.Fence": {
      "description": "Posts and rails with seeded weathering; encloses yards and paths. One footprint collider.",
      "type": "object",
      "properties": {
        "position": {
          "type": "array",
          "prefixItems": [
            {
              "type": "number"
            },
            {
              "type": "number"
            },
            {
              "type": "number"
            }
          ],
          "minItems": 3,
          "maxItems": 3,
          "description": "Position [x, y, z] in units (1 unit = 1 m, Y-up).",
          "default": [
            0,
            0,
            0
          ]
        },
        "rotation": {
          "type": "array",
          "prefixItems": [
            {
              "type": "number"
            },
            {
              "type": "number"
            },
            {
              "type": "number"
            }
          ],
          "minItems": 3,
          "maxItems": 3,
          "description": "Euler rotation [x, y, z] in radians.",
          "default": [
            0,
            0,
            0
          ]
        },
        "length": {
          "type": "number",
          "description": "Total length along local X, in units.",
          "default": 6
        },
        "height": {
          "type": "number",
          "description": "Height, in units.",
          "default": 1.1
        },
        "postSpacing": {
          "type": "number",
          "description": "Spacing between posts, in units.",
          "default": 1.5
        },
        "rails": {
          "type": "number",
          "description": "Number of horizontal rails.",
          "default": 2
        },
        "color": {
          "type": "string",
          "examples": [
            "#7a5a40"
          ],
          "description": "Defaults to the world palette's `wood` slot."
        },
        "seed": {
          "type": "number",
          "description": "Seed for the deterministic variation: same seed, same result.",
          "default": 1
        }
      },
      "additionalProperties": false
    },
    "props.Flag": {
      "description": "A cloth flag on a pole; the cloth ripples per-frame, pinned at the luff. Thin pole collider.",
      "type": "object",
      "properties": {
        "poleHeight": {
          "type": "number",
          "description": "Pole height, in units.",
          "default": 6
        },
        "fly": {
          "type": "number",
          "description": "Flag width away from the pole (the fly), in units.",
          "default": 2.4
        },
        "drop": {
          "type": "number",
          "description": "Flag height (the drop), in units.",
          "default": 1.5
        },
        "waveSpeed": {
          "type": "number",
          "description": "Ripple speed.",
          "default": 3
        },
        "waveAmplitude": {
          "type": "number",
          "description": "Ripple depth as a fraction of the fly.",
          "default": 0.22
        },
        "color": {
          "type": "string",
          "examples": [
            "#7a5a40"
          ],
          "description": "Cloth color; defaults to the world palette's `fabric`."
        },
        "poleColor": {
          "type": "string",
          "examples": [
            "#7a5a40"
          ],
          "description": "Pole color; defaults to the palette's `wood`."
        },
        "position": {
          "type": "array",
          "prefixItems": [
            {
              "type": "number"
            },
            {
              "type": "number"
            },
            {
              "type": "number"
            }
          ],
          "minItems": 3,
          "maxItems": 3,
          "description": "Position [x, y, z] in units (1 unit = 1 m, Y-up).",
          "default": [
            0,
            0,
            0
          ]
        },
        "rotation": {
          "type": "array",
          "prefixItems": [
            {
              "type": "number"
            },
            {
              "type": "number"
            },
            {
              "type": "number"
            }
          ],
          "minItems": 3,
          "maxItems": 3,
          "description": "Euler rotation [x, y, z] in radians.",
          "default": [
            0,
            0,
            0
          ]
        },
        "seed": {
          "type": "number",
          "description": "Accepted for the component contract; this component has no seeded variation yet."
        }
      },
      "additionalProperties": false
    },
    "props.Floor": {
      "description": "Flat floor slab with a fixed collider; optional stairwell opening.",
      "type": "object",
      "properties": {
        "position": {
          "type": "array",
          "prefixItems": [
            {
              "type": "number"
            },
            {
              "type": "number"
            },
            {
              "type": "number"
            }
          ],
          "minItems": 3,
          "maxItems": 3,
          "description": "Position [x, y, z] in units (1 unit = 1 m, Y-up)."
        },
        "rotation": {
          "type": "array",
          "prefixItems": [
            {
              "type": "number"
            },
            {
              "type": "number"
            },
            {
              "type": "number"
            }
          ],
          "minItems": 3,
          "maxItems": 3,
          "description": "Euler rotation [x, y, z] in radians.",
          "default": [
            0,
            0,
            0
          ]
        },
        "seed": {
          "type": "number",
          "description": "Accepted for the component contract; this component has no seeded variation yet."
        },
        "size": {
          "type": "array",
          "prefixItems": [
            {
              "type": "number"
            },
            {
              "type": "number"
            }
          ],
          "minItems": 2,
          "maxItems": 2,
          "description": "`[width, depth]` in units. The top surface sits at the component origin.",
          "default": [
            8,
            8
          ]
        },
        "thickness": {
          "type": "number",
          "description": "Thickness, in units.",
          "default": 0.2
        },
        "opening": {
          "$ref": "#/$defs/Floor.FloorOpening",
          "description": "A hole in the slab (stairwell); the slab splits into strips around it."
        },
        "color": {
          "type": "string",
          "examples": [
            "#7a5a40"
          ],
          "description": "Defaults to the world palette's `floor` slot."
        }
      },
      "additionalProperties": false
    },
    "Floor.FloorOpening": {
      "type": "object",
      "properties": {
        "x": {
          "type": "number",
          "description": "Hole center offset from the slab center along X, in units."
        },
        "z": {
          "type": "number",
          "description": "Hole center offset from the slab center along Z, in units."
        },
        "width": {
          "type": "number"
        },
        "depth": {
          "type": "number"
        }
      },
      "required": [
        "width",
        "depth"
      ],
      "additionalProperties": false
    },
    "props.Flowers": {
      "description": "Instanced seeded wildflowers (stem + colored head) scattered over a patch.",
      "type": "object",
      "properties": {
        "position": {
          "type": "array",
          "prefixItems": [
            {
              "type": "number"
            },
            {
              "type": "number"
            },
            {
              "type": "number"
            }
          ],
          "minItems": 3,
          "maxItems": 3,
          "description": "Position [x, y, z] in units (1 unit = 1 m, Y-up).",
          "default": [
            0,
            0,
            0
          ]
        },
        "rotation": {
          "type": "array",
          "prefixItems": [
            {
              "type": "number"
            },
            {
              "type": "number"
            },
            {
              "type": "number"
            }
          ],
          "minItems": 3,
          "maxItems": 3,
          "description": "Euler rotation [x, y, z] in radians.",
          "default": [
            0,
            0,
            0
          ]
        },
        "area": {
          "type": "array",
          "prefixItems": [
            {
              "type": "number"
            },
            {
              "type": "number"
            }
          ],
          "minItems": 2,
          "maxItems": 2,
          "description": "Patch extent `[width, depth]`, in units.",
          "default": [
            6,
            6
          ]
        },
        "count": {
          "type": "number",
          "default": 60
        },
        "height": {
          "type": "number",
          "description": "Height, in units.",
          "default": 0.4
        },
        "stemColor": {
          "type": "string",
          "examples": [
            "#7a5a40"
          ],
          "description": "Stem color; defaults to the world palette's `foliage` slot."
        },
        "seed": {
          "type": "number",
          "description": "Seed for the deterministic variation: same seed, same result.",
          "default": 1
        }
      },
      "additionalProperties": false
    },
    "props.Fountain": {
      "description": "Two-tier stone fountain with gently rippling water (a per-frame bob, no textures).",
      "type": "object",
      "properties": {
        "position": {
          "type": "array",
          "prefixItems": [
            {
              "type": "number"
            },
            {
              "type": "number"
            },
            {
              "type": "number"
            }
          ],
          "minItems": 3,
          "maxItems": 3,
          "description": "Position [x, y, z] in units (1 unit = 1 m, Y-up).",
          "default": [
            0,
            0,
            0
          ]
        },
        "rotation": {
          "type": "array",
          "prefixItems": [
            {
              "type": "number"
            },
            {
              "type": "number"
            },
            {
              "type": "number"
            }
          ],
          "minItems": 3,
          "maxItems": 3,
          "description": "Euler rotation [x, y, z] in radians.",
          "default": [
            0,
            0,
            0
          ]
        },
        "seed": {
          "type": "number",
          "description": "Accepted for the component contract; this component has no seeded variation yet."
        },
        "radius": {
          "type": "number",
          "description": "Radius, in units.",
          "default": 1.6
        },
        "color": {
          "type": "string",
          "examples": [
            "#7a5a40"
          ],
          "description": "Stone color; defaults to the world palette's `stone` slot."
        },
        "waterColor": {
          "type": "string",
          "examples": [
            "#7a5a40"
          ],
          "description": "Water color; defaults to the world palette's `waterShallow` slot."
        }
      },
      "additionalProperties": false
    },
    "props.Fridge": {
      "description": "A kitchen fridge with a top or bottom freezer or one tall door, bar handles, and a seeded enamel or steel finish.",
      "type": "object",
      "properties": {
        "width": {
          "type": "number",
          "description": "Width, in units.",
          "default": 0.7
        },
        "height": {
          "type": "number",
          "description": "Height, in units.",
          "default": 1.8
        },
        "depth": {
          "type": "number",
          "description": "Depth, in units.",
          "default": 0.68
        },
        "layout": {
          "enum": [
            "top",
            "bottom",
            "single"
          ],
          "description": "Seeded when unset."
        },
        "color": {
          "type": "string",
          "examples": [
            "#7a5a40"
          ],
          "description": "Body color. Seeded between an enamel white and brushed steel when unset."
        },
        "handleColor": {
          "type": "string",
          "examples": [
            "#7a5a40"
          ],
          "description": "Handles; defaults to the palette's `metal`."
        },
        "position": {
          "type": "array",
          "prefixItems": [
            {
              "type": "number"
            },
            {
              "type": "number"
            },
            {
              "type": "number"
            }
          ],
          "minItems": 3,
          "maxItems": 3,
          "description": "Position [x, y, z] in units (1 unit = 1 m, Y-up).",
          "default": [
            0,
            0,
            0
          ]
        },
        "rotation": {
          "type": "array",
          "prefixItems": [
            {
              "type": "number"
            },
            {
              "type": "number"
            },
            {
              "type": "number"
            }
          ],
          "minItems": 3,
          "maxItems": 3,
          "description": "Euler rotation [x, y, z] in radians.",
          "default": [
            0,
            0,
            0
          ]
        },
        "seed": {
          "type": "number",
          "description": "Seed for the deterministic variation: same seed, same result.",
          "default": 1
        }
      },
      "additionalProperties": false
    },
    "props.Grass": {
      "description": "Instanced grass blades (seeded scatter).",
      "type": "object",
      "properties": {
        "position": {
          "type": "array",
          "prefixItems": [
            {
              "type": "number"
            },
            {
              "type": "number"
            },
            {
              "type": "number"
            }
          ],
          "minItems": 3,
          "maxItems": 3,
          "description": "Position [x, y, z] in units (1 unit = 1 m, Y-up).",
          "default": [
            0,
            0,
            0
          ]
        },
        "rotation": {
          "type": "array",
          "prefixItems": [
            {
              "type": "number"
            },
            {
              "type": "number"
            },
            {
              "type": "number"
            }
          ],
          "minItems": 3,
          "maxItems": 3,
          "description": "Euler rotation [x, y, z] in radians.",
          "default": [
            0,
            0,
            0
          ]
        },
        "area": {
          "type": "array",
          "prefixItems": [
            {
              "type": "number"
            },
            {
              "type": "number"
            }
          ],
          "minItems": 2,
          "maxItems": 2,
          "description": "Patch extent `[width, depth]`, in units.",
          "default": [
            10,
            10
          ]
        },
        "count": {
          "type": "number",
          "default": 600
        },
        "height": {
          "type": "number",
          "description": "Height, in units.",
          "default": 0.35
        },
        "color": {
          "type": "string",
          "examples": [
            "#7a5a40"
          ],
          "description": "Defaults to the world palette's `foliage` slot."
        },
        "sway": {
          "type": "number",
          "description": "Wind sway strength; 0 disables the animation.",
          "default": 1
        },
        "seed": {
          "type": "number",
          "description": "Seed for the deterministic variation: same seed, same result.",
          "default": 1
        }
      },
      "additionalProperties": false
    },
    "props.Hedge": {
      "description": "A trimmed green wall with seeded surface tufts; blocks like a Wall.",
      "type": "object",
      "properties": {
        "position": {
          "type": "array",
          "prefixItems": [
            {
              "type": "number"
            },
            {
              "type": "number"
            },
            {
              "type": "number"
            }
          ],
          "minItems": 3,
          "maxItems": 3,
          "description": "Position [x, y, z] in units (1 unit = 1 m, Y-up).",
          "default": [
            0,
            0,
            0
          ]
        },
        "rotation": {
          "type": "array",
          "prefixItems": [
            {
              "type": "number"
            },
            {
              "type": "number"
            },
            {
              "type": "number"
            }
          ],
          "minItems": 3,
          "maxItems": 3,
          "description": "Euler rotation [x, y, z] in radians.",
          "default": [
            0,
            0,
            0
          ]
        },
        "length": {
          "type": "number",
          "description": "Length along local X, in units.",
          "default": 4
        },
        "height": {
          "type": "number",
          "description": "Height, in units.",
          "default": 1.2
        },
        "depth": {
          "type": "number",
          "description": "Depth, in units.",
          "default": 0.6
        },
        "color": {
          "type": "string",
          "examples": [
            "#7a5a40"
          ],
          "description": "Defaults to the world palette's `foliage` slot."
        },
        "seed": {
          "type": "number",
          "description": "Seed for the deterministic variation: same seed, same result.",
          "default": 1
        }
      },
      "additionalProperties": false
    },
    "props.House": {
      "description": "Composite: a two-level dwelling arranged from parts (Levels, Door, Windows, Staircase, gable Roof, Plant). Unpack to customize.",
      "type": "object",
      "properties": {
        "position": {
          "type": "array",
          "prefixItems": [
            {
              "type": "number"
            },
            {
              "type": "number"
            },
            {
              "type": "number"
            }
          ],
          "minItems": 3,
          "maxItems": 3
        },
        "rotation": {
          "type": "array",
          "prefixItems": [
            {
              "type": "number"
            },
            {
              "type": "number"
            },
            {
              "type": "number"
            }
          ],
          "minItems": 3,
          "maxItems": 3
        },
        "seed": {
          "type": "number",
          "description": "Cascades to the seeded parts of the arrangement."
        }
      },
      "additionalProperties": false
    },
    "props.Hut": {
      "description": "A round hut: a post-ribbed wall on a stone base, a framed doorway and window, under a shaggy thatch cone; one cylinder collider.",
      "type": "object",
      "properties": {
        "radius": {
          "type": "number",
          "description": "Wall radius, in units.",
          "default": 3
        },
        "wallHeight": {
          "type": "number",
          "description": "Wall height at the eaves, in units.",
          "default": 2.9
        },
        "roofHeight": {
          "type": "number",
          "description": "Conical roof height above the eaves, in units.",
          "default": 1.5
        },
        "doorWidth": {
          "type": "number",
          "description": "Doorway width at the front (local +Z), in units.",
          "default": 1.3
        },
        "wallColor": {
          "type": "string",
          "examples": [
            "#7a5a40"
          ],
          "description": "Wall color; defaults to the palette's `wall`."
        },
        "roofColor": {
          "type": "string",
          "examples": [
            "#7a5a40"
          ],
          "description": "Roof color; defaults to the palette's `roof`."
        },
        "position": {
          "type": "array",
          "prefixItems": [
            {
              "type": "number"
            },
            {
              "type": "number"
            },
            {
              "type": "number"
            }
          ],
          "minItems": 3,
          "maxItems": 3,
          "description": "Position [x, y, z] in units (1 unit = 1 m, Y-up).",
          "default": [
            0,
            0,
            0
          ]
        },
        "rotation": {
          "type": "array",
          "prefixItems": [
            {
              "type": "number"
            },
            {
              "type": "number"
            },
            {
              "type": "number"
            }
          ],
          "minItems": 3,
          "maxItems": 3,
          "description": "Euler rotation [x, y, z] in radians.",
          "default": [
            0,
            0,
            0
          ]
        },
        "seed": {
          "type": "number",
          "description": "Seed for the deterministic variation: same seed, same result.",
          "default": 1
        }
      },
      "additionalProperties": false
    },
    "props.Interactable": {
      "description": "Wrap anything to make it something the player can act on: walk within range and a prompt shows its actions with the keys the world binds to them; press one and onAction gets its id. Only the nearest in range takes the key, and keys yield to text fields.",
      "type": "object",
      "properties": {
        "actions": {
          "type": "array",
          "items": {
            "$ref": "#/$defs/Interactable.InteractionAction"
          },
          "description": "What the player can do here. Each names a world `controls` action for its key, so declare\nit in the world (`controls: { use: ['KeyE'] }`).",
          "default": []
        },
        "radius": {
          "type": "number",
          "description": "How close the avatar must come for the prompt to show, in units.",
          "default": 2
        },
        "promptHeight": {
          "type": "number",
          "description": "Height of the prompt above the origin, in units.",
          "default": 1.4
        },
        "position": {
          "type": "array",
          "prefixItems": [
            {
              "type": "number"
            },
            {
              "type": "number"
            },
            {
              "type": "number"
            }
          ],
          "minItems": 3,
          "maxItems": 3,
          "description": "Position [x, y, z] in units (1 unit = 1 m, Y-up).",
          "default": [
            0,
            0,
            0
          ]
        },
        "rotation": {
          "type": "array",
          "prefixItems": [
            {
              "type": "number"
            },
            {
              "type": "number"
            },
            {
              "type": "number"
            }
          ],
          "minItems": 3,
          "maxItems": 3,
          "description": "Euler rotation [x, y, z] in radians.",
          "default": [
            0,
            0,
            0
          ]
        },
        "seed": {
          "type": "number",
          "description": "Accepted for the component contract; this component has no seeded variation yet."
        }
      },
      "additionalProperties": false
    },
    "Interactable.InteractionAction": {
      "type": "object",
      "properties": {
        "id": {
          "type": "string",
          "description": "Passed back to `onAction`."
        },
        "label": {
          "type": "string",
          "description": "Shown in the prompt, e.g. `Talk`."
        },
        "control": {
          "type": "string",
          "description": "The world `controls` action that triggers it (declare `talk: ['KeyT']` in the world's\n`controls`). The prompt shows the key bound to it, so a remap relabels it."
        }
      },
      "required": [
        "id",
        "label",
        "control"
      ],
      "additionalProperties": false
    },
    "props.Lake": {
      "description": "Procedural animated-shader water surface (no textures); place its surface at or below ground level.",
      "type": "object",
      "properties": {
        "position": {
          "type": "array",
          "prefixItems": [
            {
              "type": "number"
            },
            {
              "type": "number"
            },
            {
              "type": "number"
            }
          ],
          "minItems": 3,
          "maxItems": 3,
          "description": "Position [x, y, z] in units (1 unit = 1 m, Y-up)."
        },
        "rotation": {
          "type": "array",
          "prefixItems": [
            {
              "type": "number"
            },
            {
              "type": "number"
            },
            {
              "type": "number"
            }
          ],
          "minItems": 3,
          "maxItems": 3,
          "description": "Euler rotation [x, y, z] in radians.",
          "default": [
            0,
            0,
            0
          ]
        },
        "seed": {
          "type": "number",
          "description": "Accepted for the component contract; this component has no seeded variation yet."
        },
        "size": {
          "type": "array",
          "prefixItems": [
            {
              "type": "number"
            },
            {
              "type": "number"
            }
          ],
          "minItems": 2,
          "maxItems": 2,
          "description": "Water surface `[width, depth]`, in units.",
          "default": [
            20,
            20
          ]
        },
        "colorDeep": {
          "type": "string",
          "examples": [
            "#7a5a40"
          ],
          "description": "Defaults to the world palette's `waterDeep` slot."
        },
        "colorShallow": {
          "type": "string",
          "examples": [
            "#7a5a40"
          ],
          "description": "Defaults to the world palette's `waterShallow` slot."
        },
        "sunPosition": {
          "type": "array",
          "prefixItems": [
            {
              "type": "number"
            },
            {
              "type": "number"
            },
            {
              "type": "number"
            }
          ],
          "minItems": 3,
          "maxItems": 3,
          "description": "Direction the sun glint comes from; pair with your Sky's `sunPosition`.",
          "default": [
            80,
            30,
            40
          ]
        },
        "waveHeight": {
          "type": "number",
          "default": 0.12
        },
        "waveSpeed": {
          "type": "number",
          "default": 1
        },
        "segments": {
          "type": "number",
          "default": 64
        }
      },
      "additionalProperties": false
    },
    "props.Lamp": {
      "description": "Lamp that emits a point light.",
      "type": "object",
      "properties": {
        "position": {
          "type": "array",
          "prefixItems": [
            {
              "type": "number"
            },
            {
              "type": "number"
            },
            {
              "type": "number"
            }
          ],
          "minItems": 3,
          "maxItems": 3,
          "description": "Position [x, y, z] in units (1 unit = 1 m, Y-up).",
          "default": [
            0,
            0,
            0
          ]
        },
        "rotation": {
          "type": "array",
          "prefixItems": [
            {
              "type": "number"
            },
            {
              "type": "number"
            },
            {
              "type": "number"
            }
          ],
          "minItems": 3,
          "maxItems": 3,
          "description": "Euler rotation [x, y, z] in radians.",
          "default": [
            0,
            0,
            0
          ]
        },
        "seed": {
          "type": "number",
          "description": "Accepted for the component contract; this component has no seeded variation yet."
        },
        "height": {
          "type": "number",
          "description": "Height, in units.",
          "default": 1.6
        },
        "color": {
          "type": "string",
          "examples": [
            "#7a5a40"
          ],
          "description": "Base + pole color. Defaults to the world palette's `metal` slot."
        },
        "shadeColor": {
          "type": "string",
          "examples": [
            "#7a5a40"
          ],
          "default": "#e9d8a6"
        },
        "lightColor": {
          "type": "string",
          "examples": [
            "#7a5a40"
          ],
          "default": "#ffe8c2"
        },
        "intensity": {
          "type": "number",
          "default": 18
        },
        "flicker": {
          "type": "number",
          "description": "Candle-like intensity flicker, 0–1; 0 holds the light steady.",
          "default": 0.08
        }
      },
      "additionalProperties": false
    },
    "props.Level": {
      "description": "A stackable wall ring plus optional slab: per-side openings, sides that can be omitted, and a stairwell hole — the unit a building is composed from.",
      "type": "object",
      "properties": {
        "position": {
          "type": "array",
          "prefixItems": [
            {
              "type": "number"
            },
            {
              "type": "number"
            },
            {
              "type": "number"
            }
          ],
          "minItems": 3,
          "maxItems": 3,
          "description": "Position [x, y, z] in units (1 unit = 1 m, Y-up).",
          "default": [
            0,
            0,
            0
          ]
        },
        "rotation": {
          "type": "array",
          "prefixItems": [
            {
              "type": "number"
            },
            {
              "type": "number"
            },
            {
              "type": "number"
            }
          ],
          "minItems": 3,
          "maxItems": 3,
          "description": "Euler rotation [x, y, z] in radians.",
          "default": [
            0,
            0,
            0
          ]
        },
        "size": {
          "type": "array",
          "prefixItems": [
            {
              "type": "number"
            },
            {
              "type": "number"
            }
          ],
          "minItems": 2,
          "maxItems": 2,
          "description": "Interior footprint `[width, depth]`, in units.",
          "default": [
            8,
            8
          ]
        },
        "height": {
          "type": "number",
          "description": "Height, in units.",
          "default": 3
        },
        "thickness": {
          "type": "number",
          "description": "Thickness, in units.",
          "default": 0.2
        },
        "walls": {
          "$ref": "#/$defs/Level.LevelWalls",
          "description": "Per-side wall configs; an omitted side renders a solid wall."
        },
        "floor": {
          "anyOf": [
            {
              "type": "boolean"
            },
            {
              "$ref": "#/$defs/Level.LevelFloorConfig"
            }
          ],
          "description": "The slab underfoot; `false` for none, or a config with a stairwell `opening`.",
          "default": true
        },
        "color": {
          "type": "string",
          "examples": [
            "#7a5a40"
          ],
          "description": "Defaults to the world palette's `wall` slot."
        },
        "seed": {
          "type": "number",
          "description": "Reserved for procedural variation."
        }
      },
      "additionalProperties": false
    },
    "Level.LevelWalls": {
      "type": "object",
      "properties": {
        "front": {
          "$ref": "#/$defs/Level.LevelWallConfig"
        },
        "back": {
          "$ref": "#/$defs/Level.LevelWallConfig"
        },
        "left": {
          "$ref": "#/$defs/Level.LevelWallConfig"
        },
        "right": {
          "$ref": "#/$defs/Level.LevelWallConfig"
        }
      },
      "additionalProperties": false
    },
    "Level.LevelWallConfig": {
      "type": "object",
      "properties": {
        "present": {
          "type": "boolean",
          "description": "Set `false` to leave this side open (porch, lean-to)."
        },
        "openings": {
          "type": "array",
          "items": {
            "$ref": "#/$defs/Level.WallOpening"
          }
        },
        "color": {
          "type": "string",
          "examples": [
            "#7a5a40"
          ],
          "description": "Defaults to the level `color`, then the world palette's `wall` slot."
        }
      },
      "additionalProperties": false
    },
    "Level.WallOpening": {
      "type": "object",
      "properties": {
        "offset": {
          "type": "number",
          "description": "Horizontal center offset from the wall center, in units."
        },
        "width": {
          "type": "number"
        },
        "height": {
          "type": "number"
        },
        "sill": {
          "type": "number",
          "description": "Height of the opening's base above the wall base, in units."
        }
      },
      "required": [
        "width",
        "height"
      ],
      "additionalProperties": false
    },
    "Level.LevelFloorConfig": {
      "type": "object",
      "properties": {
        "opening": {
          "$ref": "#/$defs/Level.FloorOpening"
        },
        "thickness": {
          "type": "number"
        },
        "color": {
          "type": "string",
          "examples": [
            "#7a5a40"
          ],
          "description": "Defaults to the world palette's `floor` slot."
        }
      },
      "additionalProperties": false
    },
    "Level.FloorOpening": {
      "type": "object",
      "properties": {
        "x": {
          "type": "number",
          "description": "Hole center offset from the slab center along X, in units."
        },
        "z": {
          "type": "number",
          "description": "Hole center offset from the slab center along Z, in units."
        },
        "width": {
          "type": "number"
        },
        "depth": {
          "type": "number"
        }
      },
      "required": [
        "width",
        "depth"
      ],
      "additionalProperties": false
    },
    "props.LightRig": {
      "description": "Sun + hemisphere/ground fill with shadow configuration.",
      "type": "object",
      "properties": {
        "seed": {
          "type": "number",
          "description": "Accepted for the component contract; this component has no seeded variation yet."
        },
        "sunPosition": {
          "type": "array",
          "prefixItems": [
            {
              "type": "number"
            },
            {
              "type": "number"
            },
            {
              "type": "number"
            }
          ],
          "minItems": 3,
          "maxItems": 3
        },
        "sunColor": {
          "type": "string",
          "examples": [
            "#7a5a40"
          ]
        },
        "sunIntensity": {
          "type": "number"
        },
        "ambient": {
          "type": "number"
        },
        "skyColor": {
          "type": "string",
          "examples": [
            "#7a5a40"
          ],
          "default": "#bcd4ff"
        },
        "groundColor": {
          "type": "string",
          "examples": [
            "#7a5a40"
          ],
          "default": "#4a4030"
        },
        "shadows": {
          "type": "boolean",
          "default": true
        },
        "shadowRange": {
          "type": "number",
          "description": "Half-extent of the shadow camera frustum, in units.",
          "default": 30
        }
      },
      "additionalProperties": false
    },
    "props.Monitor": {
      "description": "A desk monitor on a foot, plate, or legs. Switched on, the screen glows in its own color with a few seeded windows and lines of text on it, all geometry.",
      "type": "object",
      "properties": {
        "width": {
          "type": "number",
          "description": "Screen width, in units.",
          "default": 0.6
        },
        "aspect": {
          "type": "number",
          "description": "Width over height.",
          "default": 1.7777777777777777
        },
        "stand": {
          "enum": [
            "legs",
            "foot",
            "plate"
          ],
          "description": "Seeded when unset."
        },
        "screen": {
          "type": "string",
          "examples": [
            "#7a5a40"
          ],
          "description": "The screen's glow when on. Seeded from a few calm tints when unset."
        },
        "on": {
          "type": "boolean",
          "description": "Lit, showing a few seeded windows; off, a dark glass.",
          "default": true
        },
        "color": {
          "type": "string",
          "examples": [
            "#7a5a40"
          ],
          "description": "Bezel and stand; defaults to the palette's `metal`."
        },
        "position": {
          "type": "array",
          "prefixItems": [
            {
              "type": "number"
            },
            {
              "type": "number"
            },
            {
              "type": "number"
            }
          ],
          "minItems": 3,
          "maxItems": 3,
          "description": "Position [x, y, z] in units (1 unit = 1 m, Y-up).",
          "default": [
            0,
            0,
            0
          ]
        },
        "rotation": {
          "type": "array",
          "prefixItems": [
            {
              "type": "number"
            },
            {
              "type": "number"
            },
            {
              "type": "number"
            }
          ],
          "minItems": 3,
          "maxItems": 3,
          "description": "Euler rotation [x, y, z] in radians.",
          "default": [
            0,
            0,
            0
          ]
        },
        "seed": {
          "type": "number",
          "description": "Seed for the deterministic variation: same seed, same result.",
          "default": 1
        }
      },
      "additionalProperties": false
    },
    "props.Ocean": {
      "description": "Camera-following animated-shader ocean that reaches the world fog horizon (no textures); sits at the world ground.",
      "type": "object",
      "properties": {
        "position": {
          "type": "array",
          "prefixItems": [
            {
              "type": "number"
            },
            {
              "type": "number"
            },
            {
              "type": "number"
            }
          ],
          "minItems": 3,
          "maxItems": 3,
          "description": "Position [x, y, z] in units (1 unit = 1 m, Y-up)."
        },
        "rotation": {
          "type": "array",
          "prefixItems": [
            {
              "type": "number"
            },
            {
              "type": "number"
            },
            {
              "type": "number"
            }
          ],
          "minItems": 3,
          "maxItems": 3,
          "description": "Euler rotation [x, y, z] in radians.",
          "default": [
            0,
            0,
            0
          ]
        },
        "seed": {
          "type": "number",
          "description": "Accepted for the component contract; this component has no seeded variation yet."
        },
        "size": {
          "type": "array",
          "prefixItems": [
            {
              "type": "number"
            },
            {
              "type": "number"
            }
          ],
          "minItems": 2,
          "maxItems": 2,
          "description": "Plane size `[width, depth]`, in units. With `follow` on (the default) this patch tracks\nthe camera, so keep it large enough to reach past the world fog.",
          "default": [
            400,
            400
          ]
        },
        "colorDeep": {
          "type": "string",
          "examples": [
            "#7a5a40"
          ],
          "description": "Defaults to the world palette's `waterDeep` slot."
        },
        "colorShallow": {
          "type": "string",
          "examples": [
            "#7a5a40"
          ],
          "description": "Defaults to the world palette's `waterShallow` slot."
        },
        "sunPosition": {
          "type": "array",
          "prefixItems": [
            {
              "type": "number"
            },
            {
              "type": "number"
            },
            {
              "type": "number"
            }
          ],
          "minItems": 3,
          "maxItems": 3,
          "description": "Direction the sun glint comes from; pair with your Sky's `sunPosition`.",
          "default": [
            80,
            30,
            40
          ]
        },
        "waveHeight": {
          "type": "number",
          "default": 0.4
        },
        "waveSpeed": {
          "type": "number",
          "default": 0.6
        },
        "segments": {
          "type": "number",
          "default": 160
        },
        "follow": {
          "type": "boolean",
          "description": "Track the camera horizontally for an endless sea (default true). Set false to pin it.",
          "default": true
        }
      },
      "additionalProperties": false
    },
    "props.OfficeChair": {
      "description": "A swivel office chair: five-star base on casters, gas column, padded seat, low or high back, optional arms. Seats a Person in sit or type pose.",
      "type": "object",
      "properties": {
        "seatHeight": {
          "type": "number",
          "description": "Top of the seat cushion, in units.",
          "default": 0.47
        },
        "back": {
          "enum": [
            "low",
            "high"
          ],
          "description": "Seeded when unset."
        },
        "arms": {
          "type": "boolean",
          "description": "Armrests. Seeded when unset."
        },
        "color": {
          "type": "string",
          "examples": [
            "#7a5a40"
          ],
          "description": "Seat and back; defaults to the palette's `fabric`."
        },
        "frameColor": {
          "type": "string",
          "examples": [
            "#7a5a40"
          ],
          "description": "Base, column, and arms; defaults to the palette's `metal`."
        },
        "position": {
          "type": "array",
          "prefixItems": [
            {
              "type": "number"
            },
            {
              "type": "number"
            },
            {
              "type": "number"
            }
          ],
          "minItems": 3,
          "maxItems": 3,
          "description": "Position [x, y, z] in units (1 unit = 1 m, Y-up).",
          "default": [
            0,
            0,
            0
          ]
        },
        "rotation": {
          "type": "array",
          "prefixItems": [
            {
              "type": "number"
            },
            {
              "type": "number"
            },
            {
              "type": "number"
            }
          ],
          "minItems": 3,
          "maxItems": 3,
          "description": "Euler rotation [x, y, z] in radians.",
          "default": [
            0,
            0,
            0
          ]
        },
        "seed": {
          "type": "number",
          "description": "Seed for the deterministic variation: same seed, same result.",
          "default": 1
        }
      },
      "additionalProperties": false
    },
    "props.Palm": {
      "description": "A coconut palm: leaning bowed trunk and a crown of drooping instanced fronds, deterministic from seed.",
      "type": "object",
      "properties": {
        "height": {
          "type": "number",
          "description": "Trunk height, in units.",
          "default": 6
        },
        "lean": {
          "type": "number",
          "description": "Sideways lean of the crown, as a fraction of height.",
          "default": 0.18
        },
        "fronds": {
          "type": "number",
          "description": "Frond count.",
          "default": 11
        },
        "frondLength": {
          "type": "number",
          "description": "Frond length, in units.",
          "default": 2.2
        },
        "trunkColor": {
          "type": "string",
          "examples": [
            "#7a5a40"
          ],
          "description": "Defaults to the world palette's `bark` slot."
        },
        "frondColor": {
          "type": "string",
          "examples": [
            "#7a5a40"
          ],
          "description": "Defaults to the world palette's `foliage` slot."
        },
        "coconuts": {
          "type": "boolean",
          "description": "Grow a coconut cluster under the crown.",
          "default": true
        },
        "position": {
          "type": "array",
          "prefixItems": [
            {
              "type": "number"
            },
            {
              "type": "number"
            },
            {
              "type": "number"
            }
          ],
          "minItems": 3,
          "maxItems": 3,
          "description": "Position [x, y, z] in units (1 unit = 1 m, Y-up).",
          "default": [
            0,
            0,
            0
          ]
        },
        "rotation": {
          "type": "array",
          "prefixItems": [
            {
              "type": "number"
            },
            {
              "type": "number"
            },
            {
              "type": "number"
            }
          ],
          "minItems": 3,
          "maxItems": 3,
          "description": "Euler rotation [x, y, z] in radians.",
          "default": [
            0,
            0,
            0
          ]
        },
        "seed": {
          "type": "number",
          "description": "Seed for the deterministic variation: same seed, same result.",
          "default": 1
        }
      },
      "additionalProperties": false
    },
    "props.Path": {
      "description": "A meandering ribbon trail from seeded waypoints; decorative, laid just over the ground.",
      "type": "object",
      "properties": {
        "position": {
          "type": "array",
          "prefixItems": [
            {
              "type": "number"
            },
            {
              "type": "number"
            },
            {
              "type": "number"
            }
          ],
          "minItems": 3,
          "maxItems": 3,
          "description": "Position [x, y, z] in units (1 unit = 1 m, Y-up).",
          "default": [
            0,
            0,
            0
          ]
        },
        "rotation": {
          "type": "array",
          "prefixItems": [
            {
              "type": "number"
            },
            {
              "type": "number"
            },
            {
              "type": "number"
            }
          ],
          "minItems": 3,
          "maxItems": 3,
          "description": "Euler rotation [x, y, z] in radians.",
          "default": [
            0,
            0,
            0
          ]
        },
        "length": {
          "type": "number",
          "description": "Length along local Z, in units.",
          "default": 12
        },
        "width": {
          "type": "number",
          "description": "Width, in units.",
          "default": 1.4
        },
        "meander": {
          "type": "number",
          "description": "Lateral meander amplitude, in units.",
          "default": 1.2
        },
        "rise": {
          "type": "number",
          "description": "Total height climbed from the near end (local −Z) to the far end (+Z), in units. For a\ntrail that gains height as it winds; the ribbon rises linearly along its length.",
          "default": 0
        },
        "heights": {
          "type": "array",
          "items": {
            "type": "number"
          },
          "description": "Explicit elevation profile, in units: evenly spaced samples from the near end (local −Z)\nto the far end (+Z), linearly interpolated along the ribbon. Overrides `rise`. Author it\nfrom the terrain the trail crosses so the ribbon hugs the ground it climbs."
        },
        "color": {
          "type": "string",
          "examples": [
            "#7a5a40"
          ],
          "description": "Defaults to the world palette's `ground` slot."
        },
        "segments": {
          "type": "number",
          "default": 48
        },
        "seed": {
          "type": "number",
          "description": "Seed for the deterministic variation: same seed, same result.",
          "default": 1
        }
      },
      "additionalProperties": false
    },
    "props.Person": {
      "description": "A sculpted, clothed, skinned figure generated from a seed: one continuous body with a sculpted face, lidded eyes that follow you, and hands with fingers, in three style templates (stylized by default, realistic, anime). Every part is configurable as plain JSON: the body (build, tone, height), the face (eyes, brows, nose, lips, blush), hair, and clothing as ordered layers (shirts, sweaters, vests, coats, dresses, robes, trousers, jeans, skirts, shoes, boots, belts, scarves, capes) that fit any body. Role presets, swappable cosmetic skins, hats and accessories, poses, idle breathing and blinking. Give it a patrol or a wander radius and it walks: a route that is a pure function of the clock, following the ground, with a walk cycle and a step aside for the player and other walkers. A route with a departure time is a one-way trip (to a desk, to bed) that reports its arrival, and actions put a key prompt over it (Talk, Info) when the player comes near. Meshes build in the background, coarse first, with full detail near the camera. Place one at a spawn point, or use it as the Player's third-person body.",
      "type": "object",
      "properties": {
        "style": {
          "enum": [
            "stylized",
            "realistic",
            "anime"
          ],
          "description": "Proportion and face template: `stylized` (default) is an animated-film look with a big\nhead and eyes, small features, and slender limbs; `realistic` keeps canonical human\nproportions; `anime` pushes the eyes and legs further.",
          "default": "stylized"
        },
        "kind": {
          "enum": [
            "villager",
            "merchant",
            "guard",
            "sailor",
            "farmer",
            "noble",
            "scholar",
            "traveler"
          ],
          "description": "Role preset: fills `outfit`, `hat`, and `accessories` unless you set them.",
          "default": "villager"
        },
        "gender": {
          "enum": [
            "feminine",
            "masculine",
            "neutral"
          ],
          "description": "Silhouette cues only; every trait it influences stays overridable. Seeded when unset."
        },
        "age": {
          "enum": [
            "child",
            "adult",
            "elder"
          ],
          "description": "Head-to-body ratio, stature, and (for `elder`) a stooped spine.",
          "default": "adult"
        },
        "body": {
          "$ref": "#/$defs/Person.PersonBodySpec",
          "description": "The body: `build`, skin `tone`, and `height`. The flat props below are shorthands for\nthe same fields; when both are set, this object wins."
        },
        "face": {
          "$ref": "#/$defs/Person.PersonFaceSpec",
          "description": "The face, part by part: eye color and size, brow color and weight, nose shape, lip\ncolor and fullness, blush."
        },
        "clothes": {
          "type": "array",
          "items": {
            "$ref": "#/$defs/Person.PersonGarment"
          },
          "description": "Clothing layers, inner to outer, each with its own type, color, and options. The order\ndecides the fit: a shirt listed before the jeans is tucked in. Replaces `outfit`; `[]`\nis the bare base body (a smooth mannequin)."
        },
        "height": {
          "type": "number",
          "description": "Standing height, in units. Every other measurement derives from it."
        },
        "build": {
          "enum": [
            "slim",
            "average",
            "stocky"
          ],
          "description": "Limb thickness and torso depth. Seeded when unset."
        },
        "skinTone": {
          "type": "string",
          "examples": [
            "#7a5a40"
          ],
          "description": "Skin color; seeded from a curated set of tones when unset."
        },
        "skin": {
          "anyOf": [
            {
              "enum": [
                "sailor",
                "hoodie",
                "festival",
                "chef",
                "harvest",
                "winter",
                "voyage",
                "ceremony",
                "atelier",
                "pirate",
                "bartender",
                "office",
                "casual",
                "preppy"
              ]
            },
            {
              "$ref": "#/$defs/Person.PersonSkin"
            }
          ],
          "description": "Cosmetic loadout: a preset name from `PERSON_SKINS` (e.g. `\"winter\"`) or a custom\n`PersonSkin` bundle. Individual props win over it. Plain JSON either way, so an editor\nor an in-world UI can swap a figure's whole look by writing this one prop."
        },
        "hair": {
          "anyOf": [
            {
              "enum": [
                "short",
                "long",
                "swept",
                "bun",
                "ponytail",
                "braid",
                "cropped",
                "bald"
              ]
            },
            {
              "$ref": "#/$defs/Person.PersonHairSpec"
            }
          ],
          "description": "A style name, or `{ style, color }`."
        },
        "hairColor": {
          "type": "string",
          "examples": [
            "#7a5a40"
          ]
        },
        "facialHair": {
          "enum": [
            "none",
            "stubble",
            "moustache",
            "beard"
          ]
        },
        "outfit": {
          "enum": [
            "tshirt",
            "shirt",
            "sweater",
            "hoodie",
            "blazer",
            "vest",
            "tunic",
            "coat",
            "dress",
            "robe",
            "apron",
            "uniform"
          ],
          "description": "One-word outfit; expands to a `clothes` stack (e.g. `tunic`: trousers, tunic, shoes)."
        },
        "topColor": {
          "type": "string",
          "examples": [
            "#7a5a40"
          ],
          "description": "Outermost top's color; defaults to a seeded shade of a palette slot. A garment's own\n`color` wins over it."
        },
        "bottomColor": {
          "type": "string",
          "examples": [
            "#7a5a40"
          ],
          "description": "Bottoms' color; defaults to a seeded shade of the palette's `woodDark`, `stone`, or `metal`."
        },
        "shoeColor": {
          "type": "string",
          "examples": [
            "#7a5a40"
          ],
          "description": "Footwear color; defaults to the palette's `metal`."
        },
        "hat": {
          "enum": [
            "none",
            "cap",
            "straw",
            "brim",
            "bandana",
            "hood",
            "chef"
          ]
        },
        "accessories": {
          "type": "array",
          "items": {
            "enum": [
              "belt",
              "scarf",
              "cape",
              "bag",
              "glasses",
              "staff"
            ]
          }
        },
        "pose": {
          "enum": [
            "stand",
            "sit",
            "lean",
            "work",
            "wave",
            "type",
            "play",
            "drink",
            "lie"
          ],
          "description": "What the figure is doing when it isn't walking. `sit` and `type` need a seat under them\n(`type` is seated at a desk, fingers tapping); `work` leans over a counter; `play` works\ncontrols at waist height; `drink` holds a mug and sips from it now and then; `lie` lies on its\nback centered on `position`, head toward local -Z, so it takes a `Bed`'s position and\nrotation at mattress height.",
          "default": "stand"
        },
        "patrol": {
          "type": "array",
          "items": {
            "type": "array",
            "prefixItems": [
              {
                "type": "number"
              },
              {
                "type": "number"
              },
              {
                "type": "number"
              }
            ],
            "minItems": 3,
            "maxItems": 3
          },
          "description": "Walk these waypoints, relative to `position` and turning with `rotation`, in units.\nHeight follows the ground; a waypoint's y lifts the figure above it."
        },
        "wander": {
          "type": "number",
          "description": "Wander a seeded loop of five points within this radius of `position`, in units. `patrol`\nwins when both are set."
        },
        "speed": {
          "type": "number",
          "description": "Walking speed, in units per second. Defaults by age: child 1.0, adult 1.3, elder 0.8."
        },
        "pause": {
          "type": "number",
          "description": "Seconds held at each waypoint. Walking always stands; the authored `pose` plays here.",
          "default": 1.5
        },
        "loop": {
          "enum": [
            "loop",
            "pingpong"
          ],
          "description": "`loop` walks from the last waypoint back to the first; `pingpong` retraces the route.",
          "default": "loop"
        },
        "route": {
          "type": "array",
          "items": {
            "type": "array",
            "prefixItems": [
              {
                "type": "number"
              },
              {
                "type": "number"
              },
              {
                "type": "number"
              }
            ],
            "minItems": 3,
            "maxItems": 3
          },
          "description": "A one-way trip through these waypoints, relative to `position` like `patrol`, setting off\nat `departAt`. Before then the figure waits at the first point facing its `rotation`; after\nthe last it stays there, facing the way it came, in its `pose`. Wins over `patrol` and\n`wander`. Give a new trip a new `position` (the old one's end) and `departAt`."
        },
        "departAt": {
          "type": "number",
          "description": "When the `route` trip sets off, in epoch milliseconds (`Date.now()`). Plain data, so every\nviewer sees the figure at the same point of its trip. Unset, the trip is long over.",
          "default": 0
        },
        "gait": {
          "type": "number",
          "description": "Walk-cycle speed, in units per second, for a figure something else moves (a cart, a\nscript). Unset, a route drives it, and a `Player`'s body walks at the avatar's speed."
        },
        "idle": {
          "type": "boolean",
          "description": "Breathing, weight shift, and blinking.",
          "default": true
        },
        "lookAt": {
          "type": "boolean",
          "description": "Turn the head (and eyes) toward the player's avatar (or the camera, when no `Player` is\nmounted) when it comes within `lookRadius`.",
          "default": true
        },
        "lookRadius": {
          "type": "number",
          "description": "How close the avatar must be for `lookAt` to engage, in units.",
          "default": 9
        },
        "label": {
          "type": "string",
          "description": "Floating name above the head."
        },
        "bubble": {
          "type": "string",
          "description": "A short line in a speech bubble over the head (what the figure is saying or doing right\nnow). Long lines wrap and are cut after a few."
        },
        "emote": {
          "enum": [
            "sleep",
            "alert",
            "think",
            "happy",
            "coffee"
          ],
          "description": "A small animated sign over the head: `sleep` (rising z's), `alert` (a bouncing !), `think`\n(pulsing dots), `happy` (a heart), `coffee` (a steaming cup)."
        },
        "actions": {
          "type": "array",
          "items": {
            "$ref": "#/$defs/Person.InteractionAction"
          },
          "description": "What the player can do with this figure (`Talk`, `Info`). When the avatar comes within\n`actionRadius` a prompt shows them over the head, with the key each world `controls`\naction is bound to; pressing one calls `onAction` with its `id`. Only the nearest figure\n(or other `Interactable`) in range shows a prompt and takes the key."
        },
        "actionRadius": {
          "type": "number",
          "description": "How close the avatar must come for `actions`, in units.",
          "default": 2
        },
        "collider": {
          "type": "boolean",
          "description": "Capsule collider, so the figure is something you bump into.",
          "default": true
        },
        "physics": {
          "type": "boolean",
          "description": "Render as a bare visual with no `RigidBody`: for a parent that owns the physics\n(e.g. as `Player`'s third-person avatar). When false, `collider` is ignored.",
          "default": true
        },
        "detail": {
          "enum": [
            "low",
            "high",
            "auto"
          ],
          "description": "`auto` builds the full-detail mesh only within ~10 units of the camera; `high` always;\n`low` never.",
          "default": "auto"
        },
        "position": {
          "type": "array",
          "prefixItems": [
            {
              "type": "number"
            },
            {
              "type": "number"
            },
            {
              "type": "number"
            }
          ],
          "minItems": 3,
          "maxItems": 3,
          "description": "Position [x, y, z] in units (1 unit = 1 m, Y-up)."
        },
        "rotation": {
          "type": "array",
          "prefixItems": [
            {
              "type": "number"
            },
            {
              "type": "number"
            },
            {
              "type": "number"
            }
          ],
          "minItems": 3,
          "maxItems": 3,
          "description": "Euler rotation [x, y, z] in radians.",
          "default": [
            0,
            0,
            0
          ]
        },
        "seed": {
          "type": "number",
          "description": "Seed for the deterministic variation: same seed, same result.",
          "default": 1
        }
      },
      "additionalProperties": false
    },
    "Person.PersonBodySpec": {
      "type": "object",
      "properties": {
        "build": {
          "enum": [
            "slim",
            "average",
            "stocky"
          ],
          "description": "Limb thickness and torso depth."
        },
        "tone": {
          "type": "string",
          "examples": [
            "#7a5a40"
          ],
          "description": "Skin color."
        },
        "height": {
          "type": "number",
          "description": "Standing height, in units."
        }
      },
      "additionalProperties": false
    },
    "Person.PersonFaceSpec": {
      "type": "object",
      "properties": {
        "eyes": {
          "$ref": "#/$defs/Person.Person.eyes"
        },
        "brows": {
          "$ref": "#/$defs/Person.Person.brows",
          "description": "Brow color defaults to the hair color; `weight` thickens them."
        },
        "nose": {
          "enum": [
            "button",
            "straight",
            "broad"
          ]
        },
        "lips": {
          "$ref": "#/$defs/Person.Person.lips"
        },
        "blush": {
          "type": "number",
          "description": "Cheek flush, 0 (none) to 1."
        }
      },
      "additionalProperties": false
    },
    "Person.Person.eyes": {
      "type": "object",
      "properties": {
        "color": {
          "type": "string",
          "examples": [
            "#7a5a40"
          ]
        },
        "size": {
          "type": "number"
        }
      },
      "additionalProperties": false
    },
    "Person.Person.brows": {
      "type": "object",
      "properties": {
        "color": {
          "type": "string",
          "examples": [
            "#7a5a40"
          ]
        },
        "weight": {
          "type": "number"
        }
      },
      "additionalProperties": false
    },
    "Person.Person.lips": {
      "type": "object",
      "properties": {
        "color": {
          "type": "string",
          "examples": [
            "#7a5a40"
          ]
        },
        "fullness": {
          "type": "number"
        }
      },
      "additionalProperties": false
    },
    "Person.PersonGarment": {
      "type": "object",
      "properties": {
        "type": {
          "enum": [
            "tshirt",
            "shirt",
            "sweater",
            "hoodie",
            "blazer",
            "vest",
            "tunic",
            "coat",
            "dress",
            "robe",
            "apron",
            "trousers",
            "jeans",
            "shorts",
            "skirt",
            "shoes",
            "boots",
            "belt",
            "scarf",
            "cape"
          ]
        },
        "color": {
          "type": "string",
          "examples": [
            "#7a5a40"
          ]
        },
        "sleeves": {
          "enum": [
            "none",
            "short",
            "long"
          ],
          "description": "Tops only."
        },
        "neck": {
          "enum": [
            "crew",
            "v",
            "collar"
          ],
          "description": "Tops only."
        },
        "length": {
          "type": "number",
          "description": "0 to 1: how far it reaches (a top's hem, a leg's length, a skirt or boot's drop)."
        }
      },
      "required": [
        "type"
      ],
      "additionalProperties": false
    },
    "Person.PersonSkin": {
      "type": "object",
      "properties": {
        "outfit": {
          "enum": [
            "tshirt",
            "shirt",
            "sweater",
            "hoodie",
            "blazer",
            "vest",
            "tunic",
            "coat",
            "dress",
            "robe",
            "apron",
            "uniform"
          ]
        },
        "clothes": {
          "type": "array",
          "items": {
            "$ref": "#/$defs/Person.PersonGarment"
          },
          "description": "Full layer stack; wins over `outfit`."
        },
        "topColor": {
          "type": "string",
          "examples": [
            "#7a5a40"
          ]
        },
        "bottomColor": {
          "type": "string",
          "examples": [
            "#7a5a40"
          ]
        },
        "shoeColor": {
          "type": "string",
          "examples": [
            "#7a5a40"
          ]
        },
        "hat": {
          "enum": [
            "none",
            "cap",
            "straw",
            "brim",
            "bandana",
            "hood",
            "chef"
          ]
        },
        "hair": {
          "enum": [
            "short",
            "long",
            "swept",
            "bun",
            "ponytail",
            "braid",
            "cropped",
            "bald"
          ]
        },
        "hairColor": {
          "type": "string",
          "examples": [
            "#7a5a40"
          ]
        },
        "accessories": {
          "type": "array",
          "items": {
            "enum": [
              "belt",
              "scarf",
              "cape",
              "bag",
              "glasses",
              "staff"
            ]
          }
        }
      },
      "additionalProperties": false
    },
    "Person.PersonHairSpec": {
      "type": "object",
      "properties": {
        "style": {
          "enum": [
            "short",
            "long",
            "swept",
            "bun",
            "ponytail",
            "braid",
            "cropped",
            "bald"
          ]
        },
        "color": {
          "type": "string",
          "examples": [
            "#7a5a40"
          ]
        }
      },
      "additionalProperties": false
    },
    "Person.InteractionAction": {
      "type": "object",
      "properties": {
        "id": {
          "type": "string",
          "description": "Passed back to `onAction`."
        },
        "label": {
          "type": "string",
          "description": "Shown in the prompt, e.g. `Talk`."
        },
        "control": {
          "type": "string",
          "description": "The world `controls` action that triggers it (declare `talk: ['KeyT']` in the world's\n`controls`). The prompt shows the key bound to it, so a remap relabels it."
        }
      },
      "required": [
        "id",
        "label",
        "control"
      ],
      "additionalProperties": false
    },
    "props.Pillar": {
      "description": "Column with a plinth, a tapered (optionally fluted) shaft, and a capital.",
      "type": "object",
      "properties": {
        "position": {
          "type": "array",
          "prefixItems": [
            {
              "type": "number"
            },
            {
              "type": "number"
            },
            {
              "type": "number"
            }
          ],
          "minItems": 3,
          "maxItems": 3,
          "description": "Position [x, y, z] in units (1 unit = 1 m, Y-up).",
          "default": [
            0,
            0,
            0
          ]
        },
        "rotation": {
          "type": "array",
          "prefixItems": [
            {
              "type": "number"
            },
            {
              "type": "number"
            },
            {
              "type": "number"
            }
          ],
          "minItems": 3,
          "maxItems": 3,
          "description": "Euler rotation [x, y, z] in radians.",
          "default": [
            0,
            0,
            0
          ]
        },
        "seed": {
          "type": "number",
          "description": "Accepted for the component contract; this component has no seeded variation yet."
        },
        "height": {
          "type": "number",
          "description": "Height, in units.",
          "default": 3
        },
        "radius": {
          "type": "number",
          "description": "Shaft radius at the base, in units.",
          "default": 0.28
        },
        "flutes": {
          "type": "number",
          "description": "Vertical flutes around the shaft; 0 = smooth.",
          "default": 0
        },
        "color": {
          "type": "string",
          "examples": [
            "#7a5a40"
          ],
          "description": "Defaults to the world palette's `stone` slot."
        }
      },
      "additionalProperties": false
    },
    "props.Plant": {
      "description": "Potted plant: a tapered planter and a seeded cluster of foliage.",
      "type": "object",
      "properties": {
        "position": {
          "type": "array",
          "prefixItems": [
            {
              "type": "number"
            },
            {
              "type": "number"
            },
            {
              "type": "number"
            }
          ],
          "minItems": 3,
          "maxItems": 3,
          "description": "Position [x, y, z] in units (1 unit = 1 m, Y-up).",
          "default": [
            0,
            0,
            0
          ]
        },
        "rotation": {
          "type": "array",
          "prefixItems": [
            {
              "type": "number"
            },
            {
              "type": "number"
            },
            {
              "type": "number"
            }
          ],
          "minItems": 3,
          "maxItems": 3,
          "description": "Euler rotation [x, y, z] in radians.",
          "default": [
            0,
            0,
            0
          ]
        },
        "height": {
          "type": "number",
          "description": "Height, in units.",
          "default": 0.7
        },
        "potColor": {
          "type": "string",
          "examples": [
            "#7a5a40"
          ],
          "description": "Planter color; defaults to the world palette's `wood` slot."
        },
        "foliageColor": {
          "type": "string",
          "examples": [
            "#7a5a40"
          ],
          "description": "Foliage color; defaults to the world palette's `foliage` slot."
        },
        "seed": {
          "type": "number",
          "description": "Seed for the deterministic variation: same seed, same result.",
          "default": 1
        }
      },
      "additionalProperties": false
    },
    "props.Player": {
      "description": "First/third-person character controller (ecctrl wrapper). WASD moves; mouse-drag or the arrow keys steer the camera in either view. Reads the world's `avatar` setting for its default view and the world's `controls` for key bindings.",
      "type": "object",
      "properties": {
        "position": {
          "type": "array",
          "prefixItems": [
            {
              "type": "number"
            },
            {
              "type": "number"
            },
            {
              "type": "number"
            }
          ],
          "minItems": 3,
          "maxItems": 3,
          "description": "Position [x, y, z] in units (1 unit = 1 m, Y-up).",
          "default": [
            0,
            3,
            0
          ]
        },
        "seed": {
          "type": "number",
          "description": "Accepted for the component contract; this component has no seeded variation yet."
        },
        "view": {
          "enum": [
            "first",
            "third",
            "overhead"
          ],
          "description": "Camera view: `first` (through the avatar's eyes), `third` (behind it), or `overhead` (high\nabove at a fixed tilt, following it; scroll zooms, WASD walks relative to the screen). Unset\ndefers to the world default (`<World avatar>`); falls back to first-person. An explicit value\nhere always wins. A world `view` control (e.g. `controls: { view: ['KeyV'] }`) cycles the\nthree at runtime."
        },
        "yaw": {
          "type": "number",
          "description": "Initial camera yaw in radians (0 faces +z).",
          "default": 0
        }
      },
      "additionalProperties": false
    },
    "props.Pool": {
      "description": "A built swimming pool flush with the deck: coping rim, walkable plastered basin with corner exit steps, and a translucent water surface.",
      "type": "object",
      "properties": {
        "size": {
          "type": "array",
          "prefixItems": [
            {
              "type": "number"
            },
            {
              "type": "number"
            }
          ],
          "minItems": 2,
          "maxItems": 2,
          "description": "Water surface `[width, depth]`, in units.",
          "default": [
            6,
            3.5
          ]
        },
        "depth": {
          "type": "number",
          "description": "Basin depth below the deck, in units.",
          "default": 1.6
        },
        "coping": {
          "type": "number",
          "description": "Coping ledge width around the rim, in units.",
          "default": 0.35
        },
        "steps": {
          "type": "boolean",
          "description": "Build exit steps into one corner of the basin.",
          "default": true
        },
        "copingColor": {
          "type": "string",
          "examples": [
            "#7a5a40"
          ],
          "description": "Coping color; defaults to the world palette's `wall` slot."
        },
        "basinColor": {
          "type": "string",
          "examples": [
            "#7a5a40"
          ],
          "description": "Basin plaster color.",
          "default": "#bfe0e6"
        },
        "waterColor": {
          "type": "string",
          "examples": [
            "#7a5a40"
          ],
          "description": "Defaults to the world palette's `waterShallow` slot."
        },
        "position": {
          "type": "array",
          "prefixItems": [
            {
              "type": "number"
            },
            {
              "type": "number"
            },
            {
              "type": "number"
            }
          ],
          "minItems": 3,
          "maxItems": 3,
          "description": "Position [x, y, z] in units (1 unit = 1 m, Y-up).",
          "default": [
            0,
            0,
            0
          ]
        },
        "rotation": {
          "type": "array",
          "prefixItems": [
            {
              "type": "number"
            },
            {
              "type": "number"
            },
            {
              "type": "number"
            }
          ],
          "minItems": 3,
          "maxItems": 3,
          "description": "Euler rotation [x, y, z] in radians.",
          "default": [
            0,
            0,
            0
          ]
        },
        "seed": {
          "type": "number",
          "description": "Accepted for the component contract; this component has no seeded variation yet."
        }
      },
      "additionalProperties": false
    },
    "props.PoolTable": {
      "description": "A pool table with rails, cushions, six pockets, and sixteen instanced balls, racked or scattered mid-game.",
      "type": "object",
      "properties": {
        "length": {
          "type": "number",
          "description": "Outer length along local X, in units.",
          "default": 2.5
        },
        "width": {
          "type": "number",
          "description": "Outer width along local Z, in units.",
          "default": 1.4
        },
        "height": {
          "type": "number",
          "description": "Height of the playing surface, in units.",
          "default": 0.8
        },
        "balls": {
          "enum": [
            "none",
            "racked",
            "scattered"
          ],
          "description": "Seeded when unset."
        },
        "color": {
          "type": "string",
          "examples": [
            "#7a5a40"
          ],
          "description": "The cloth. Seeded from a few classic colors when unset."
        },
        "frameColor": {
          "type": "string",
          "examples": [
            "#7a5a40"
          ],
          "description": "Rails and legs; defaults to the palette's `wood`."
        },
        "position": {
          "type": "array",
          "prefixItems": [
            {
              "type": "number"
            },
            {
              "type": "number"
            },
            {
              "type": "number"
            }
          ],
          "minItems": 3,
          "maxItems": 3,
          "description": "Position [x, y, z] in units (1 unit = 1 m, Y-up).",
          "default": [
            0,
            0,
            0
          ]
        },
        "rotation": {
          "type": "array",
          "prefixItems": [
            {
              "type": "number"
            },
            {
              "type": "number"
            },
            {
              "type": "number"
            }
          ],
          "minItems": 3,
          "maxItems": 3,
          "description": "Euler rotation [x, y, z] in radians.",
          "default": [
            0,
            0,
            0
          ]
        },
        "seed": {
          "type": "number",
          "description": "Seed for the deterministic variation: same seed, same result.",
          "default": 1
        }
      },
      "additionalProperties": false
    },
    "props.Portal": {
      "description": "A travel gate: a glowing sensor ring that fires onEnter (or navigates to a destination) when the avatar or a vehicle passes through — for world-to-world travel, level transitions, and teleports.",
      "type": "object",
      "properties": {
        "to": {
          "type": "string",
          "description": "Where the portal leads — a URL or app route. Kept JSON-serializable so a world\nround-trips from data. With no `onEnter`, entering navigates here\n(`window.location.href = to`); with `onEnter`, this is just passed through to it."
        },
        "label": {
          "type": "string",
          "description": "Floating caption above the gate (e.g. the destination's name)."
        },
        "radius": {
          "type": "number",
          "description": "Ring radius, in units.",
          "default": 2.2
        },
        "color": {
          "type": "string",
          "examples": [
            "#7a5a40"
          ],
          "description": "Glow / ring color; defaults to the world palette's `accent` slot."
        },
        "active": {
          "type": "boolean",
          "description": "Arm the trigger. Set false for a decorative or not-yet-open gate. Default true.",
          "default": true
        },
        "position": {
          "type": "array",
          "prefixItems": [
            {
              "type": "number"
            },
            {
              "type": "number"
            },
            {
              "type": "number"
            }
          ],
          "minItems": 3,
          "maxItems": 3,
          "description": "Position [x, y, z] in units (1 unit = 1 m, Y-up).",
          "default": [
            0,
            0,
            0
          ]
        },
        "rotation": {
          "type": "array",
          "prefixItems": [
            {
              "type": "number"
            },
            {
              "type": "number"
            },
            {
              "type": "number"
            }
          ],
          "minItems": 3,
          "maxItems": 3,
          "description": "Euler rotation [x, y, z] in radians.",
          "default": [
            0,
            0,
            0
          ]
        },
        "seed": {
          "type": "number",
          "description": "Accepted for the component contract; this component has no seeded variation yet."
        }
      },
      "additionalProperties": false
    },
    "props.Road": {
      "description": "A paved street: a flat stone deck with low kerbs, draped on the ground like Path; decorative (no collider).",
      "type": "object",
      "properties": {
        "length": {
          "type": "number",
          "description": "Length along local Z, in units.",
          "default": 12
        },
        "width": {
          "type": "number",
          "description": "Width along local X, in units.",
          "default": 3
        },
        "color": {
          "type": "string",
          "examples": [
            "#7a5a40"
          ],
          "description": "Deck color; defaults to the palette's `stone`."
        },
        "kerbColor": {
          "type": "string",
          "examples": [
            "#7a5a40"
          ],
          "description": "Kerb color; defaults to the palette's `woodDark`."
        },
        "position": {
          "type": "array",
          "prefixItems": [
            {
              "type": "number"
            },
            {
              "type": "number"
            },
            {
              "type": "number"
            }
          ],
          "minItems": 3,
          "maxItems": 3,
          "description": "Position [x, y, z] in units (1 unit = 1 m, Y-up).",
          "default": [
            0,
            0,
            0
          ]
        },
        "rotation": {
          "type": "array",
          "prefixItems": [
            {
              "type": "number"
            },
            {
              "type": "number"
            },
            {
              "type": "number"
            }
          ],
          "minItems": 3,
          "maxItems": 3,
          "description": "Euler rotation [x, y, z] in radians.",
          "default": [
            0,
            0,
            0
          ]
        },
        "seed": {
          "type": "number",
          "description": "Accepted for the component contract; this component has no seeded variation yet."
        }
      },
      "additionalProperties": false
    },
    "props.Rocks": {
      "description": "Faceted rocks with convex-hull colliders (seeded scatter).",
      "type": "object",
      "properties": {
        "position": {
          "type": "array",
          "prefixItems": [
            {
              "type": "number"
            },
            {
              "type": "number"
            },
            {
              "type": "number"
            }
          ],
          "minItems": 3,
          "maxItems": 3,
          "description": "Position [x, y, z] in units (1 unit = 1 m, Y-up).",
          "default": [
            0,
            0,
            0
          ]
        },
        "rotation": {
          "type": "array",
          "prefixItems": [
            {
              "type": "number"
            },
            {
              "type": "number"
            },
            {
              "type": "number"
            }
          ],
          "minItems": 3,
          "maxItems": 3,
          "description": "Euler rotation [x, y, z] in radians.",
          "default": [
            0,
            0,
            0
          ]
        },
        "count": {
          "type": "number",
          "default": 6
        },
        "spread": {
          "type": "number",
          "description": "Cluster radius, in units.",
          "default": 3
        },
        "size": {
          "type": "number",
          "description": "Mean rock radius, in units.",
          "default": 0.6
        },
        "hue": {
          "type": "number",
          "default": 30
        },
        "seed": {
          "type": "number",
          "description": "Seed for the deterministic variation: same seed, same result.",
          "default": 1
        }
      },
      "additionalProperties": false
    },
    "props.Roof": {
      "description": "Flat or gable roof.",
      "type": "object",
      "properties": {
        "position": {
          "type": "array",
          "prefixItems": [
            {
              "type": "number"
            },
            {
              "type": "number"
            },
            {
              "type": "number"
            }
          ],
          "minItems": 3,
          "maxItems": 3,
          "description": "Position [x, y, z] in units (1 unit = 1 m, Y-up).",
          "default": [
            0,
            0,
            0
          ]
        },
        "rotation": {
          "type": "array",
          "prefixItems": [
            {
              "type": "number"
            },
            {
              "type": "number"
            },
            {
              "type": "number"
            }
          ],
          "minItems": 3,
          "maxItems": 3,
          "description": "Euler rotation [x, y, z] in radians.",
          "default": [
            0,
            0,
            0
          ]
        },
        "seed": {
          "type": "number",
          "description": "Accepted for the component contract; this component has no seeded variation yet."
        },
        "size": {
          "type": "array",
          "prefixItems": [
            {
              "type": "number"
            },
            {
              "type": "number"
            }
          ],
          "minItems": 2,
          "maxItems": 2,
          "description": "`[width, depth]` in units. The roof rests with its base at the component origin.",
          "default": [
            8,
            8
          ]
        },
        "style": {
          "enum": [
            "flat",
            "gable"
          ],
          "default": "gable"
        },
        "peak": {
          "type": "number",
          "description": "Ridge height for a gable roof, in units.",
          "default": 1.6
        },
        "thickness": {
          "type": "number",
          "description": "Thickness, in units.",
          "default": 0.18
        },
        "overhang": {
          "type": "number",
          "default": 0.3
        },
        "ends": {
          "type": "boolean",
          "description": "Cap the triangular gable ends so the attic isn't open to the outside.",
          "default": true
        },
        "color": {
          "type": "string",
          "examples": [
            "#7a5a40"
          ],
          "description": "Defaults to the world palette's `roof` slot."
        },
        "endColor": {
          "type": "string",
          "examples": [
            "#7a5a40"
          ],
          "description": "Gable end caps; defaults to the world palette's `wall` slot."
        }
      },
      "additionalProperties": false
    },
    "props.Room": {
      "description": "Composite: four walls and a floor with a doorway, arranged from one Level. Unpack to customize.",
      "type": "object",
      "properties": {
        "position": {
          "type": "array",
          "prefixItems": [
            {
              "type": "number"
            },
            {
              "type": "number"
            },
            {
              "type": "number"
            }
          ],
          "minItems": 3,
          "maxItems": 3
        },
        "rotation": {
          "type": "array",
          "prefixItems": [
            {
              "type": "number"
            },
            {
              "type": "number"
            },
            {
              "type": "number"
            }
          ],
          "minItems": 3,
          "maxItems": 3
        },
        "seed": {
          "type": "number",
          "description": "Cascades to the seeded parts of the arrangement."
        }
      },
      "additionalProperties": false
    },
    "props.Rug": {
      "description": "Procedural striped rug (seeded stripes, no textures).",
      "type": "object",
      "properties": {
        "position": {
          "type": "array",
          "prefixItems": [
            {
              "type": "number"
            },
            {
              "type": "number"
            },
            {
              "type": "number"
            }
          ],
          "minItems": 3,
          "maxItems": 3,
          "description": "Position [x, y, z] in units (1 unit = 1 m, Y-up).",
          "default": [
            0,
            0,
            0
          ]
        },
        "rotation": {
          "type": "array",
          "prefixItems": [
            {
              "type": "number"
            },
            {
              "type": "number"
            },
            {
              "type": "number"
            }
          ],
          "minItems": 3,
          "maxItems": 3,
          "description": "Euler rotation [x, y, z] in radians.",
          "default": [
            0,
            0,
            0
          ]
        },
        "size": {
          "type": "array",
          "prefixItems": [
            {
              "type": "number"
            },
            {
              "type": "number"
            }
          ],
          "minItems": 2,
          "maxItems": 2,
          "description": "`[width, depth]` in units.",
          "default": [
            3,
            2
          ]
        },
        "baseColor": {
          "type": "string",
          "examples": [
            "#7a5a40"
          ],
          "description": "Defaults to the world palette's `fabric` slot."
        },
        "borderColor": {
          "type": "string",
          "examples": [
            "#7a5a40"
          ],
          "description": "Defaults to the world palette's `accent` slot."
        },
        "accentColor": {
          "type": "string",
          "examples": [
            "#7a5a40"
          ],
          "default": "#9c5252"
        },
        "seed": {
          "type": "number",
          "description": "Seed for the deterministic variation: same seed, same result.",
          "default": 1
        }
      },
      "additionalProperties": false
    },
    "props.Sailboat": {
      "description": "A small procedural sailboat: a station-built low-poly hull, mast, boom, and mainsail, floating at the waterline with a gentle moored bob.",
      "type": "object",
      "properties": {
        "length": {
          "type": "number",
          "description": "Hull length along local Z (bow at +Z), in units.",
          "default": 5.5
        },
        "beam": {
          "type": "number",
          "description": "Hull maximum beam (width along X), in units.",
          "default": 2
        },
        "freeboard": {
          "type": "number",
          "description": "Deck height above the waterline (local y=0), in units.",
          "default": 0.5
        },
        "draft": {
          "type": "number",
          "description": "Keel depth below the waterline, in units.",
          "default": 0.6
        },
        "mastHeight": {
          "type": "number",
          "description": "Mast height above the deck, in units.",
          "default": 4.6
        },
        "boomLength": {
          "type": "number",
          "description": "Boom length aft of the mast, in units.",
          "default": 3.2
        },
        "sail": {
          "type": "boolean",
          "description": "Raise the mainsail.",
          "default": true
        },
        "bob": {
          "type": "boolean",
          "description": "Gentle moored bobbing on the swell.",
          "default": true
        },
        "collider": {
          "type": "boolean",
          "description": "Solid hull collider.",
          "default": true
        },
        "physics": {
          "type": "boolean",
          "description": "Render the hull/rig as a bare visual, with no `RigidBody` or collider — for a parent\ncontroller (e.g. a steerable vehicle) that owns the physics body. When false, `position`\nand `rotation` place the visual directly and the `collider` prop is ignored. Default true.",
          "default": true
        },
        "color": {
          "type": "string",
          "examples": [
            "#7a5a40"
          ],
          "description": "Hull color; defaults to the world palette's `wood`."
        },
        "trimColor": {
          "type": "string",
          "examples": [
            "#7a5a40"
          ],
          "description": "Deck, mast, and boom color; defaults to the palette's `woodDark`."
        },
        "sailColor": {
          "type": "string",
          "examples": [
            "#7a5a40"
          ],
          "description": "Sail color.",
          "default": "#eee6d0"
        },
        "position": {
          "type": "array",
          "prefixItems": [
            {
              "type": "number"
            },
            {
              "type": "number"
            },
            {
              "type": "number"
            }
          ],
          "minItems": 3,
          "maxItems": 3,
          "description": "Position [x, y, z] in units (1 unit = 1 m, Y-up).",
          "default": [
            0,
            0,
            0
          ]
        },
        "rotation": {
          "type": "array",
          "prefixItems": [
            {
              "type": "number"
            },
            {
              "type": "number"
            },
            {
              "type": "number"
            }
          ],
          "minItems": 3,
          "maxItems": 3,
          "description": "Euler rotation [x, y, z] in radians.",
          "default": [
            0,
            0,
            0
          ]
        },
        "seed": {
          "type": "number",
          "description": "Seed for the deterministic variation: same seed, same result.",
          "default": 1
        }
      },
      "additionalProperties": false
    },
    "props.Shelf": {
      "description": "Wall shelf with planks.",
      "type": "object",
      "properties": {
        "position": {
          "type": "array",
          "prefixItems": [
            {
              "type": "number"
            },
            {
              "type": "number"
            },
            {
              "type": "number"
            }
          ],
          "minItems": 3,
          "maxItems": 3,
          "description": "Position [x, y, z] in units (1 unit = 1 m, Y-up).",
          "default": [
            0,
            0,
            0
          ]
        },
        "rotation": {
          "type": "array",
          "prefixItems": [
            {
              "type": "number"
            },
            {
              "type": "number"
            },
            {
              "type": "number"
            }
          ],
          "minItems": 3,
          "maxItems": 3,
          "description": "Euler rotation [x, y, z] in radians.",
          "default": [
            0,
            0,
            0
          ]
        },
        "seed": {
          "type": "number",
          "description": "Accepted for the component contract; this component has no seeded variation yet."
        },
        "width": {
          "type": "number",
          "description": "Width, in units.",
          "default": 1
        },
        "height": {
          "type": "number",
          "description": "Height, in units.",
          "default": 1.8
        },
        "depth": {
          "type": "number",
          "description": "Depth, in units.",
          "default": 0.3
        },
        "shelves": {
          "type": "number",
          "default": 4
        },
        "color": {
          "type": "string",
          "examples": [
            "#7a5a40"
          ],
          "description": "Defaults to the world palette's `wood` slot."
        }
      },
      "additionalProperties": false
    },
    "props.Shore": {
      "description": "Sloped beach/shore strip to meet a Lake.",
      "type": "object",
      "properties": {
        "position": {
          "type": "array",
          "prefixItems": [
            {
              "type": "number"
            },
            {
              "type": "number"
            },
            {
              "type": "number"
            }
          ],
          "minItems": 3,
          "maxItems": 3,
          "description": "Position [x, y, z] in units (1 unit = 1 m, Y-up).",
          "default": [
            0,
            0,
            0
          ]
        },
        "rotation": {
          "type": "array",
          "prefixItems": [
            {
              "type": "number"
            },
            {
              "type": "number"
            },
            {
              "type": "number"
            }
          ],
          "minItems": 3,
          "maxItems": 3,
          "description": "Euler rotation [x, y, z] in radians.",
          "default": [
            0,
            0,
            0
          ]
        },
        "seed": {
          "type": "number",
          "description": "Accepted for the component contract; this component has no seeded variation yet."
        },
        "size": {
          "type": "array",
          "prefixItems": [
            {
              "type": "number"
            },
            {
              "type": "number"
            }
          ],
          "minItems": 2,
          "maxItems": 2,
          "description": "`[width, depth]` in units. The sandy top sits at the component origin.",
          "default": [
            24,
            24
          ]
        },
        "thickness": {
          "type": "number",
          "description": "Thickness, in units.",
          "default": 0.3
        },
        "color": {
          "type": "string",
          "examples": [
            "#7a5a40"
          ],
          "description": "Defaults to the world palette's `sand` slot."
        }
      },
      "additionalProperties": false
    },
    "props.Sign": {
      "description": "In-world text rendered in a world font (the one font-using component); falls back to the default bundled in @runek/core.",
      "type": "object",
      "properties": {
        "children": {
          "type": "string",
          "description": "The text to render."
        },
        "position": {
          "type": "array",
          "prefixItems": [
            {
              "type": "number"
            },
            {
              "type": "number"
            },
            {
              "type": "number"
            }
          ],
          "minItems": 3,
          "maxItems": 3,
          "description": "Position [x, y, z] in units (1 unit = 1 m, Y-up).",
          "default": [
            0,
            0,
            0
          ]
        },
        "rotation": {
          "type": "array",
          "prefixItems": [
            {
              "type": "number"
            },
            {
              "type": "number"
            },
            {
              "type": "number"
            }
          ],
          "minItems": 3,
          "maxItems": 3,
          "description": "Euler rotation [x, y, z] in radians.",
          "default": [
            0,
            0,
            0
          ]
        },
        "seed": {
          "type": "number",
          "description": "Accepted for the component contract; this component has no seeded variation yet."
        },
        "variant": {
          "enum": [
            "display",
            "body"
          ],
          "description": "Which world font role to render in (`display` for titles/signage, `body`\nfor labels). The world declares the actual face via `<World fonts>`; an\nundeclared role falls back to the font bundled in `@runek/core`. (Named\n`variant`, not `role`, so it doesn't trip JSX a11y linters.)",
          "default": "display"
        },
        "font": {
          "type": "string",
          "description": "Explicit font URL, overriding the world role."
        },
        "size": {
          "type": "number",
          "description": "Cap height in units.",
          "default": 0.3
        },
        "color": {
          "type": "string",
          "examples": [
            "#7a5a40"
          ],
          "description": "Text color. Defaults to the world palette's `accent` slot."
        },
        "maxWidth": {
          "type": "number",
          "description": "Wrap width in units; omit to keep the text on one line."
        },
        "letterSpacing": {
          "type": "number",
          "default": 0
        },
        "anchorX": {
          "enum": [
            "left",
            "center",
            "right"
          ],
          "default": "center"
        },
        "anchorY": {
          "enum": [
            "top",
            "bottom",
            "middle"
          ],
          "default": "middle"
        },
        "glow": {
          "type": "boolean",
          "description": "Soft colored halo around the glyphs, for a glow without bloom.",
          "default": false
        },
        "outline": {
          "type": "string",
          "examples": [
            "#7a5a40"
          ],
          "description": "A crisp edge in this color, so the text reads against any background. Wins over `glow`."
        }
      },
      "required": [
        "children"
      ],
      "additionalProperties": false
    },
    "props.Signpost": {
      "description": "A wooden post-and-plank signboard carrying a name in the world's display font; the post sits behind the board so the text reads clean.",
      "type": "object",
      "properties": {
        "name": {
          "type": "string",
          "description": "The name shown on the board. A plain string, **not** `children`: a world renderer overrides a\nnode's `children` prop with its nested nodes, so text authored in JSON must be a named prop to\nsurvive. Empty by default — `<Signpost />` is a blank board.",
          "default": ""
        },
        "height": {
          "type": "number",
          "description": "Post height, in units.",
          "default": 2.6
        },
        "width": {
          "type": "number",
          "description": "Board width, in units.",
          "default": 3.4
        },
        "color": {
          "type": "string",
          "examples": [
            "#7a5a40"
          ],
          "description": "Post + board wood color; defaults to the palette's `wood`."
        },
        "textColor": {
          "type": "string",
          "examples": [
            "#7a5a40"
          ],
          "description": "Name color; defaults to the palette's `sand` (legible on the wood)."
        },
        "size": {
          "type": "number",
          "description": "Name cap height, in units.",
          "default": 0.5
        },
        "position": {
          "type": "array",
          "prefixItems": [
            {
              "type": "number"
            },
            {
              "type": "number"
            },
            {
              "type": "number"
            }
          ],
          "minItems": 3,
          "maxItems": 3,
          "description": "Position [x, y, z] in units (1 unit = 1 m, Y-up).",
          "default": [
            0,
            0,
            0
          ]
        },
        "rotation": {
          "type": "array",
          "prefixItems": [
            {
              "type": "number"
            },
            {
              "type": "number"
            },
            {
              "type": "number"
            }
          ],
          "minItems": 3,
          "maxItems": 3,
          "description": "Euler rotation [x, y, z] in radians.",
          "default": [
            0,
            0,
            0
          ]
        },
        "seed": {
          "type": "number",
          "description": "Accepted for the component contract; this component has no seeded variation yet."
        }
      },
      "additionalProperties": false
    },
    "props.Sky": {
      "description": "Procedural atmosphere (drei Sky).",
      "type": "object",
      "properties": {
        "seed": {
          "type": "number",
          "description": "Accepted for the component contract; this component has no seeded variation yet."
        },
        "sunPosition": {
          "type": "array",
          "prefixItems": [
            {
              "type": "number"
            },
            {
              "type": "number"
            },
            {
              "type": "number"
            }
          ],
          "minItems": 3,
          "maxItems": 3,
          "description": "Direction of the sun; also where the bright spot appears. Set this to pin the\nsky to a fixed sun and bypass the world's day/night cycle."
        },
        "turbidity": {
          "type": "number",
          "default": 8
        },
        "rayleigh": {
          "type": "number",
          "default": 1.4
        },
        "nightColor": {
          "type": "string",
          "examples": [
            "#7a5a40"
          ],
          "description": "Background when the sun is below the horizon.",
          "default": "#04060e"
        }
      },
      "additionalProperties": false
    },
    "props.Slab": {
      "description": "A rounded structural plate (pill or ellipse) for curved-modernist decks, cantilevered roofs, terraces, or a lawn disc. Walkable, with a single convex-hull collider.",
      "type": "object",
      "properties": {
        "size": {
          "type": "array",
          "prefixItems": [
            {
              "type": "number"
            },
            {
              "type": "number"
            }
          ],
          "minItems": 2,
          "maxItems": 2,
          "description": "Footprint `[width, depth]`, in units. The top surface sits at the component origin.",
          "default": [
            8,
            8
          ]
        },
        "shape": {
          "enum": [
            "pill",
            "disc"
          ],
          "description": "`pill` is a rounded rectangle, `disc` an ellipse.",
          "default": "pill"
        },
        "cornerRadius": {
          "type": "number",
          "description": "Pill corner radius, in units; clamped to half the smaller extent (a full stadium)."
        },
        "thickness": {
          "type": "number",
          "description": "Thickness, in units.",
          "default": 0.35
        },
        "curveSegments": {
          "type": "number",
          "description": "Curve smoothness of the rounded edges.",
          "default": 24
        },
        "color": {
          "type": "string",
          "examples": [
            "#7a5a40"
          ],
          "description": "Defaults to the world palette's `wall` slot."
        },
        "position": {
          "type": "array",
          "prefixItems": [
            {
              "type": "number"
            },
            {
              "type": "number"
            },
            {
              "type": "number"
            }
          ],
          "minItems": 3,
          "maxItems": 3,
          "description": "Position [x, y, z] in units (1 unit = 1 m, Y-up).",
          "default": [
            0,
            0,
            0
          ]
        },
        "rotation": {
          "type": "array",
          "prefixItems": [
            {
              "type": "number"
            },
            {
              "type": "number"
            },
            {
              "type": "number"
            }
          ],
          "minItems": 3,
          "maxItems": 3,
          "description": "Euler rotation [x, y, z] in radians.",
          "default": [
            0,
            0,
            0
          ]
        },
        "seed": {
          "type": "number",
          "description": "Accepted for the component contract; this component has no seeded variation yet."
        }
      },
      "additionalProperties": false
    },
    "props.Sofa": {
      "description": "A sofa seating one to four: upholstered frame, seat and back cushions in soft shades of the fabric, square, rolled, or slim arms, pegs or a plinth, and throw pillows. Seeded, each choice pinnable.",
      "type": "object",
      "properties": {
        "seats": {
          "type": "number",
          "description": "Seats across, 1 to 4.",
          "default": 3
        },
        "depth": {
          "type": "number",
          "description": "Depth along local Z, in units. Seats face +Z.",
          "default": 0.9
        },
        "seatHeight": {
          "type": "number",
          "description": "Top of the seat cushions, in units.",
          "default": 0.44
        },
        "arms": {
          "enum": [
            "slim",
            "none",
            "square",
            "rolled"
          ],
          "description": "Seeded when unset."
        },
        "cushions": {
          "enum": [
            "split",
            "bench"
          ],
          "description": "Seeded when unset."
        },
        "legs": {
          "enum": [
            "pegs",
            "plinth"
          ],
          "description": "Seeded when unset."
        },
        "pillows": {
          "type": "number",
          "description": "Throw pillows, 0 to 2. Seeded when unset."
        },
        "color": {
          "type": "string",
          "examples": [
            "#7a5a40"
          ],
          "description": "Upholstery; defaults to the palette's `fabric`."
        },
        "pillowColor": {
          "type": "string",
          "examples": [
            "#7a5a40"
          ],
          "description": "Throw pillows; defaults to the palette's `accent`."
        },
        "legColor": {
          "type": "string",
          "examples": [
            "#7a5a40"
          ],
          "description": "Legs; defaults to the palette's `woodDark`."
        },
        "position": {
          "type": "array",
          "prefixItems": [
            {
              "type": "number"
            },
            {
              "type": "number"
            },
            {
              "type": "number"
            }
          ],
          "minItems": 3,
          "maxItems": 3,
          "description": "Position [x, y, z] in units (1 unit = 1 m, Y-up).",
          "default": [
            0,
            0,
            0
          ]
        },
        "rotation": {
          "type": "array",
          "prefixItems": [
            {
              "type": "number"
            },
            {
              "type": "number"
            },
            {
              "type": "number"
            }
          ],
          "minItems": 3,
          "maxItems": 3,
          "description": "Euler rotation [x, y, z] in radians.",
          "default": [
            0,
            0,
            0
          ]
        },
        "seed": {
          "type": "number",
          "description": "Seed for the deterministic variation: same seed, same result.",
          "default": 1
        }
      },
      "additionalProperties": false
    },
    "props.Staircase": {
      "description": "Stepped staircase with per-step colliders.",
      "type": "object",
      "properties": {
        "position": {
          "type": "array",
          "prefixItems": [
            {
              "type": "number"
            },
            {
              "type": "number"
            },
            {
              "type": "number"
            }
          ],
          "minItems": 3,
          "maxItems": 3,
          "description": "Position [x, y, z] in units (1 unit = 1 m, Y-up).",
          "default": [
            0,
            0,
            0
          ]
        },
        "rotation": {
          "type": "array",
          "prefixItems": [
            {
              "type": "number"
            },
            {
              "type": "number"
            },
            {
              "type": "number"
            }
          ],
          "minItems": 3,
          "maxItems": 3,
          "description": "Euler rotation [x, y, z] in radians.",
          "default": [
            0,
            0,
            0
          ]
        },
        "seed": {
          "type": "number",
          "description": "Accepted for the component contract; this component has no seeded variation yet."
        },
        "steps": {
          "type": "number",
          "default": 6
        },
        "totalHeight": {
          "type": "number",
          "description": "Total rise, in units. Ascends along +y and +z from the origin.",
          "default": 1.5
        },
        "width": {
          "type": "number",
          "description": "Width, in units.",
          "default": 1.2
        },
        "depth": {
          "type": "number",
          "description": "Total run (depth), in units.",
          "default": 2.4
        },
        "color": {
          "type": "string",
          "examples": [
            "#7a5a40"
          ],
          "description": "Defaults to the world palette's `stone` slot."
        }
      },
      "additionalProperties": false
    },
    "props.Stool": {
      "description": "A round bar stool: a disc seat on three splayed legs; a thin cylinder collider.",
      "type": "object",
      "properties": {
        "height": {
          "type": "number",
          "description": "Seat height above the ground, in units.",
          "default": 0.95
        },
        "radius": {
          "type": "number",
          "description": "Seat radius, in units.",
          "default": 0.24
        },
        "color": {
          "type": "string",
          "examples": [
            "#7a5a40"
          ],
          "description": "Color; defaults to the palette's `wood`."
        },
        "position": {
          "type": "array",
          "prefixItems": [
            {
              "type": "number"
            },
            {
              "type": "number"
            },
            {
              "type": "number"
            }
          ],
          "minItems": 3,
          "maxItems": 3,
          "description": "Position [x, y, z] in units (1 unit = 1 m, Y-up).",
          "default": [
            0,
            0,
            0
          ]
        },
        "rotation": {
          "type": "array",
          "prefixItems": [
            {
              "type": "number"
            },
            {
              "type": "number"
            },
            {
              "type": "number"
            }
          ],
          "minItems": 3,
          "maxItems": 3,
          "description": "Euler rotation [x, y, z] in radians.",
          "default": [
            0,
            0,
            0
          ]
        },
        "seed": {
          "type": "number",
          "description": "Accepted for the component contract; this component has no seeded variation yet."
        }
      },
      "additionalProperties": false
    },
    "props.Table": {
      "description": "Table with a top on four legs, or on pedestals with rounded ends for a conference table.",
      "type": "object",
      "properties": {
        "position": {
          "type": "array",
          "prefixItems": [
            {
              "type": "number"
            },
            {
              "type": "number"
            },
            {
              "type": "number"
            }
          ],
          "minItems": 3,
          "maxItems": 3,
          "description": "Position [x, y, z] in units (1 unit = 1 m, Y-up).",
          "default": [
            0,
            0,
            0
          ]
        },
        "rotation": {
          "type": "array",
          "prefixItems": [
            {
              "type": "number"
            },
            {
              "type": "number"
            },
            {
              "type": "number"
            }
          ],
          "minItems": 3,
          "maxItems": 3,
          "description": "Euler rotation [x, y, z] in radians.",
          "default": [
            0,
            0,
            0
          ]
        },
        "seed": {
          "type": "number",
          "description": "Accepted for the component contract; this component has no seeded variation yet."
        },
        "width": {
          "type": "number",
          "description": "Width, in units.",
          "default": 1.2
        },
        "depth": {
          "type": "number",
          "description": "Depth, in units.",
          "default": 0.8
        },
        "height": {
          "type": "number",
          "description": "Height, in units.",
          "default": 0.75
        },
        "thickness": {
          "type": "number",
          "description": "Thickness, in units.",
          "default": 0.05
        },
        "base": {
          "enum": [
            "legs",
            "pedestal"
          ],
          "description": "Four `legs` at the corners, or `pedestal` columns on crossed feet (one, or two for a table\nlonger than 2 units): a conference table.",
          "default": "legs"
        },
        "ends": {
          "enum": [
            "square",
            "round"
          ],
          "description": "`round` makes the short ends semicircles: a racetrack top, as conference tables have.",
          "default": "square"
        },
        "color": {
          "type": "string",
          "examples": [
            "#7a5a40"
          ],
          "description": "Defaults to the world palette's `wood` slot."
        }
      },
      "additionalProperties": false
    },
    "props.Tent": {
      "description": "An A-frame ridge tent: striped wind-rippled fabric, entrance flaps pinned open, guy ropes and stakes; solid sides and back, open front.",
      "type": "object",
      "properties": {
        "width": {
          "type": "number",
          "description": "Width across the tent (local X), in units.",
          "default": 3
        },
        "depth": {
          "type": "number",
          "description": "Depth front-to-back (local Z); the entrance faces +Z.",
          "default": 3.6
        },
        "height": {
          "type": "number",
          "description": "Ridge height, in units.",
          "default": 2.2
        },
        "color": {
          "type": "string",
          "examples": [
            "#7a5a40"
          ],
          "description": "Fabric color; defaults to the palette's `fabric`."
        },
        "stripeColor": {
          "type": "string",
          "examples": [
            "#7a5a40"
          ],
          "description": "Alternate stripe color; defaults to the palette's `wall`."
        },
        "poleColor": {
          "type": "string",
          "examples": [
            "#7a5a40"
          ],
          "description": "Pole color; defaults to the palette's `woodDark`."
        },
        "wind": {
          "type": "number",
          "description": "Billow depth as a fraction of the width.",
          "default": 0.05
        },
        "windSpeed": {
          "type": "number",
          "description": "Wind ripple speed.",
          "default": 2.5
        },
        "sag": {
          "type": "number",
          "description": "Static inward drape of the fabric between ridge and ground, as a fraction of the width.",
          "default": 0.03
        },
        "collider": {
          "type": "boolean",
          "description": "Solid walls (the two sides + the back) you can't walk through; the front stays open.",
          "default": true
        },
        "position": {
          "type": "array",
          "prefixItems": [
            {
              "type": "number"
            },
            {
              "type": "number"
            },
            {
              "type": "number"
            }
          ],
          "minItems": 3,
          "maxItems": 3,
          "description": "Position [x, y, z] in units (1 unit = 1 m, Y-up).",
          "default": [
            0,
            0,
            0
          ]
        },
        "rotation": {
          "type": "array",
          "prefixItems": [
            {
              "type": "number"
            },
            {
              "type": "number"
            },
            {
              "type": "number"
            }
          ],
          "minItems": 3,
          "maxItems": 3,
          "description": "Euler rotation [x, y, z] in radians.",
          "default": [
            0,
            0,
            0
          ]
        },
        "seed": {
          "type": "number",
          "description": "Accepted for the component contract; this component has no seeded variation yet."
        }
      },
      "additionalProperties": false
    },
    "props.Terrain": {
      "description": "Procedural fbm-displaced ground with a matching trimesh collider, a flat build-pad option, and an optional radial island falloff. Its surface is queryable (`useGround`, anchors, `runek check-world`).",
      "type": "object",
      "properties": {
        "position": {
          "type": "array",
          "prefixItems": [
            {
              "type": "number"
            },
            {
              "type": "number"
            },
            {
              "type": "number"
            }
          ],
          "minItems": 3,
          "maxItems": 3,
          "description": "Position [x, y, z] in units (1 unit = 1 m, Y-up).",
          "default": [
            0,
            0,
            0
          ]
        },
        "rotation": {
          "type": "array",
          "prefixItems": [
            {
              "type": "number"
            },
            {
              "type": "number"
            },
            {
              "type": "number"
            }
          ],
          "minItems": 3,
          "maxItems": 3,
          "description": "Euler rotation [x, y, z] in radians.",
          "default": [
            0,
            0,
            0
          ]
        },
        "size": {
          "type": "array",
          "prefixItems": [
            {
              "type": "number"
            },
            {
              "type": "number"
            }
          ],
          "minItems": 2,
          "maxItems": 2,
          "description": "Ground extent `[width, depth]`, in units.",
          "default": [
            40,
            40
          ]
        },
        "thickness": {
          "type": "number",
          "description": "Thickness, in units.",
          "default": 0.4
        },
        "color": {
          "type": "string",
          "examples": [
            "#7a5a40"
          ],
          "description": "Defaults to the world palette's `ground` slot."
        },
        "relief": {
          "type": "number",
          "description": "Vertical relief amplitude, in units. 0 keeps the ground flat.",
          "default": 0
        },
        "resolution": {
          "type": "number",
          "description": "Grid subdivisions for displaced ground.",
          "default": 64
        },
        "frequency": {
          "type": "number",
          "description": "Noise frequency.",
          "default": 0.04
        },
        "flatRadius": {
          "type": "number",
          "description": "Radius from center kept flat (for a build pad), in units.",
          "default": 0
        },
        "falloff": {
          "type": "number",
          "description": "Radial island falloff (0 = off). When set, the ground domes up toward the center and\nsinks below the world ground at its rim, so the mesh reads as a landmass surrounded by\nwater. The value is the fraction of the half-extent that stays land before the coast\n(e.g. 0.8 = land out to 80% of the radius, then a shoreline into the sea).",
          "default": 0
        },
        "collider": {
          "type": "boolean",
          "description": "Register a collider (default true). Set false for distant/backdrop terrain the player\nnever walks, to skip a large trimesh collider.",
          "default": true
        },
        "seed": {
          "type": "number",
          "description": "Seed for the deterministic variation: same seed, same result.",
          "default": 1
        }
      },
      "additionalProperties": false
    },
    "props.Trees": {
      "description": "L-system trees grown by a 3D turtle, deterministic from seed.",
      "type": "object",
      "properties": {
        "position": {
          "type": "array",
          "prefixItems": [
            {
              "type": "number"
            },
            {
              "type": "number"
            },
            {
              "type": "number"
            }
          ],
          "minItems": 3,
          "maxItems": 3,
          "description": "Position [x, y, z] in units (1 unit = 1 m, Y-up).",
          "default": [
            0,
            0,
            0
          ]
        },
        "rotation": {
          "type": "array",
          "prefixItems": [
            {
              "type": "number"
            },
            {
              "type": "number"
            },
            {
              "type": "number"
            }
          ],
          "minItems": 3,
          "maxItems": 3,
          "description": "Euler rotation [x, y, z] in radians.",
          "default": [
            0,
            0,
            0
          ]
        },
        "seed": {
          "type": "number",
          "description": "Seed for the deterministic variation: same seed, same result.",
          "default": 1
        },
        "iterations": {
          "type": "number",
          "default": 2
        },
        "segmentLength": {
          "type": "number",
          "description": "Base branch length, in units.",
          "default": 0.7
        },
        "angle": {
          "type": "number",
          "description": "Branching angle, in radians.",
          "default": 0.5
        },
        "trunkColor": {
          "type": "string",
          "examples": [
            "#7a5a40"
          ],
          "description": "Defaults to the world palette's `bark` slot."
        },
        "leafColor": {
          "type": "string",
          "examples": [
            "#7a5a40"
          ],
          "description": "Defaults to the world palette's `foliage` slot."
        }
      },
      "additionalProperties": false
    },
    "props.Tv": {
      "description": "A flat-screen TV on a stand, a low media console, or a wall. Switched on, it shows a seeded picture (sky, sun, hills) drawn from flat shapes.",
      "type": "object",
      "properties": {
        "width": {
          "type": "number",
          "description": "Screen width, in units.",
          "default": 1.2
        },
        "mount": {
          "enum": [
            "stand",
            "console",
            "wall"
          ],
          "description": "`stand` and `console` are seeded when unset; `wall` must be asked for. On a wall the origin\nis the middle of the screen with its back against the wall (local -Z)."
        },
        "on": {
          "type": "boolean",
          "description": "Showing a seeded picture (a sky, a sun, hills) in this tint, or dark glass when off.",
          "default": true
        },
        "screen": {
          "type": "string",
          "examples": [
            "#7a5a40"
          ],
          "description": "Picture tint. Seeded when unset."
        },
        "color": {
          "type": "string",
          "examples": [
            "#7a5a40"
          ],
          "description": "Bezel and stand; defaults to the palette's `metal`."
        },
        "consoleColor": {
          "type": "string",
          "examples": [
            "#7a5a40"
          ],
          "description": "The console's wood; defaults to the palette's `woodDark`."
        },
        "position": {
          "type": "array",
          "prefixItems": [
            {
              "type": "number"
            },
            {
              "type": "number"
            },
            {
              "type": "number"
            }
          ],
          "minItems": 3,
          "maxItems": 3,
          "description": "Position [x, y, z] in units (1 unit = 1 m, Y-up).",
          "default": [
            0,
            0,
            0
          ]
        },
        "rotation": {
          "type": "array",
          "prefixItems": [
            {
              "type": "number"
            },
            {
              "type": "number"
            },
            {
              "type": "number"
            }
          ],
          "minItems": 3,
          "maxItems": 3,
          "description": "Euler rotation [x, y, z] in radians.",
          "default": [
            0,
            0,
            0
          ]
        },
        "seed": {
          "type": "number",
          "description": "Seed for the deterministic variation: same seed, same result.",
          "default": 1
        }
      },
      "additionalProperties": false
    },
    "props.Wall": {
      "description": "Wall segment with door/window openings and a fixed collider.",
      "type": "object",
      "properties": {
        "position": {
          "type": "array",
          "prefixItems": [
            {
              "type": "number"
            },
            {
              "type": "number"
            },
            {
              "type": "number"
            }
          ],
          "minItems": 3,
          "maxItems": 3,
          "description": "Position [x, y, z] in units (1 unit = 1 m, Y-up).",
          "default": [
            0,
            0,
            0
          ]
        },
        "rotation": {
          "type": "array",
          "prefixItems": [
            {
              "type": "number"
            },
            {
              "type": "number"
            },
            {
              "type": "number"
            }
          ],
          "minItems": 3,
          "maxItems": 3,
          "description": "Euler rotation [x, y, z] in radians.",
          "default": [
            0,
            0,
            0
          ]
        },
        "seed": {
          "type": "number",
          "description": "Accepted for the component contract; this component has no seeded variation yet."
        },
        "width": {
          "type": "number",
          "description": "Length along the wall's local X axis, in units.",
          "default": 4
        },
        "height": {
          "type": "number",
          "description": "Height, in units.",
          "default": 3
        },
        "thickness": {
          "type": "number",
          "description": "Thickness, in units.",
          "default": 0.2
        },
        "color": {
          "type": "string",
          "examples": [
            "#7a5a40"
          ],
          "description": "Defaults to the world palette's `wall` slot."
        },
        "openings": {
          "type": "array",
          "items": {
            "$ref": "#/$defs/Wall.WallOpening"
          },
          "description": "Holes cut into the wall (doors, windows). Must not overlap horizontally."
        }
      },
      "additionalProperties": false
    },
    "Wall.WallOpening": {
      "type": "object",
      "properties": {
        "offset": {
          "type": "number",
          "description": "Horizontal center offset from the wall center, in units."
        },
        "width": {
          "type": "number"
        },
        "height": {
          "type": "number"
        },
        "sill": {
          "type": "number",
          "description": "Height of the opening's base above the wall base, in units."
        }
      },
      "required": [
        "width",
        "height"
      ],
      "additionalProperties": false
    },
    "props.Well": {
      "description": "Stone well with a dark pool, posts, a little pyramid roof, and a bucket on a rope.",
      "type": "object",
      "properties": {
        "position": {
          "type": "array",
          "prefixItems": [
            {
              "type": "number"
            },
            {
              "type": "number"
            },
            {
              "type": "number"
            }
          ],
          "minItems": 3,
          "maxItems": 3,
          "description": "Position [x, y, z] in units (1 unit = 1 m, Y-up).",
          "default": [
            0,
            0,
            0
          ]
        },
        "rotation": {
          "type": "array",
          "prefixItems": [
            {
              "type": "number"
            },
            {
              "type": "number"
            },
            {
              "type": "number"
            }
          ],
          "minItems": 3,
          "maxItems": 3,
          "description": "Euler rotation [x, y, z] in radians.",
          "default": [
            0,
            0,
            0
          ]
        },
        "seed": {
          "type": "number",
          "description": "Accepted for the component contract; this component has no seeded variation yet."
        },
        "radius": {
          "type": "number",
          "description": "Radius, in units.",
          "default": 0.7
        },
        "wallHeight": {
          "type": "number",
          "default": 0.8
        },
        "color": {
          "type": "string",
          "examples": [
            "#7a5a40"
          ],
          "description": "Stone color; defaults to the world palette's `stone` slot."
        },
        "roofColor": {
          "type": "string",
          "examples": [
            "#7a5a40"
          ],
          "description": "Roof + frame color; defaults to the world palette's `wood` slot."
        }
      },
      "additionalProperties": false
    },
    "props.Whiteboard": {
      "description": "A whiteboard on a rolling stand or a wall, with seeded marker diagrams (boxes, arrows, lines of writing) and optional text across the top.",
      "type": "object",
      "properties": {
        "width": {
          "type": "number",
          "description": "Board width, in units.",
          "default": 1.6
        },
        "height": {
          "type": "number",
          "description": "Board height, in units.",
          "default": 1
        },
        "mount": {
          "enum": [
            "stand",
            "wall"
          ],
          "default": "stand"
        },
        "text": {
          "type": "string",
          "description": "Written across the top of the board in marker."
        },
        "doodles": {
          "type": "boolean",
          "description": "Seeded marker diagrams (boxes, arrows, lines). Set false for a clean board.",
          "default": true
        },
        "color": {
          "type": "string",
          "examples": [
            "#7a5a40"
          ],
          "description": "Frame and stand; defaults to the palette's `metal`."
        },
        "position": {
          "type": "array",
          "prefixItems": [
            {
              "type": "number"
            },
            {
              "type": "number"
            },
            {
              "type": "number"
            }
          ],
          "minItems": 3,
          "maxItems": 3,
          "description": "Position [x, y, z] in units (1 unit = 1 m, Y-up).",
          "default": [
            0,
            0,
            0
          ]
        },
        "rotation": {
          "type": "array",
          "prefixItems": [
            {
              "type": "number"
            },
            {
              "type": "number"
            },
            {
              "type": "number"
            }
          ],
          "minItems": 3,
          "maxItems": 3,
          "description": "Euler rotation [x, y, z] in radians.",
          "default": [
            0,
            0,
            0
          ]
        },
        "seed": {
          "type": "number",
          "description": "Seed for the deterministic variation: same seed, same result.",
          "default": 1
        }
      },
      "additionalProperties": false
    },
    "props.Windmill": {
      "description": "A tapered tower with a conical cap and four sails that turn each frame; tower collider, seeded blade phase.",
      "type": "object",
      "properties": {
        "height": {
          "type": "number",
          "description": "Tower height, in units.",
          "default": 7
        },
        "radius": {
          "type": "number",
          "description": "Tower base radius, in units.",
          "default": 2
        },
        "sailLength": {
          "type": "number",
          "description": "Sail (blade) length, in units.",
          "default": 4.5
        },
        "sailSpeed": {
          "type": "number",
          "description": "Sail rotation speed, in radians per second.",
          "default": 0.4
        },
        "color": {
          "type": "string",
          "examples": [
            "#7a5a40"
          ],
          "description": "Tower color (defaults to the world palette's `wall`)."
        },
        "trimColor": {
          "type": "string",
          "examples": [
            "#7a5a40"
          ],
          "description": "Cap, door, and sail-frame color (defaults to the world palette's `wood`)."
        },
        "position": {
          "type": "array",
          "prefixItems": [
            {
              "type": "number"
            },
            {
              "type": "number"
            },
            {
              "type": "number"
            }
          ],
          "minItems": 3,
          "maxItems": 3,
          "description": "Position [x, y, z] in units (1 unit = 1 m, Y-up).",
          "default": [
            0,
            0,
            0
          ]
        },
        "rotation": {
          "type": "array",
          "prefixItems": [
            {
              "type": "number"
            },
            {
              "type": "number"
            },
            {
              "type": "number"
            }
          ],
          "minItems": 3,
          "maxItems": 3,
          "description": "Euler rotation [x, y, z] in radians.",
          "default": [
            0,
            0,
            0
          ]
        },
        "seed": {
          "type": "number",
          "description": "Seed for the deterministic variation: same seed, same result.",
          "default": 1
        }
      },
      "additionalProperties": false
    },
    "props.Window": {
      "description": "Window with frame and translucent pane.",
      "type": "object",
      "properties": {
        "position": {
          "type": "array",
          "prefixItems": [
            {
              "type": "number"
            },
            {
              "type": "number"
            },
            {
              "type": "number"
            }
          ],
          "minItems": 3,
          "maxItems": 3,
          "description": "Position [x, y, z] in units (1 unit = 1 m, Y-up).",
          "default": [
            0,
            0,
            0
          ]
        },
        "rotation": {
          "type": "array",
          "prefixItems": [
            {
              "type": "number"
            },
            {
              "type": "number"
            },
            {
              "type": "number"
            }
          ],
          "minItems": 3,
          "maxItems": 3,
          "description": "Euler rotation [x, y, z] in radians.",
          "default": [
            0,
            0,
            0
          ]
        },
        "seed": {
          "type": "number",
          "description": "Accepted for the component contract; this component has no seeded variation yet."
        },
        "width": {
          "type": "number",
          "description": "Width, in units.",
          "default": 1.2
        },
        "height": {
          "type": "number",
          "description": "Height, in units.",
          "default": 1.2
        },
        "frame": {
          "type": "number",
          "description": "Frame bar thickness, in units.",
          "default": 0.08
        },
        "depth": {
          "type": "number",
          "description": "Depth, in units.",
          "default": 0.1
        },
        "color": {
          "type": "string",
          "examples": [
            "#7a5a40"
          ],
          "default": "#e8e2d6"
        },
        "glassColor": {
          "type": "string",
          "examples": [
            "#7a5a40"
          ],
          "default": "#acd4e6"
        }
      },
      "additionalProperties": false
    },
    "node": {
      "type": "object",
      "required": [
        "type"
      ],
      "properties": {
        "type": {
          "description": "Component name (PascalCase registry key), `Group` for a plain transform, or one of your own components.",
          "anyOf": [
            {
              "enum": [
                "Group",
                "ArcadeCabinet",
                "Arch",
                "Barrel",
                "Bed",
                "Bench",
                "Birds",
                "Book",
                "Bookshelf",
                "Bridge",
                "Bush",
                "Campfire",
                "Chair",
                "Cliff",
                "Clock",
                "Clouds",
                "CoffeeMachine",
                "Compass",
                "Counter",
                "Crate",
                "CurvedWall",
                "Desk",
                "Dock",
                "Door",
                "Fence",
                "Flag",
                "Floor",
                "Flowers",
                "Fountain",
                "Fridge",
                "Grass",
                "Hedge",
                "House",
                "Hut",
                "Interactable",
                "Lake",
                "Lamp",
                "Level",
                "LightRig",
                "Monitor",
                "Ocean",
                "OfficeChair",
                "Palm",
                "Path",
                "Person",
                "Pillar",
                "Plant",
                "Player",
                "Pool",
                "PoolTable",
                "Portal",
                "Road",
                "Rocks",
                "Roof",
                "Room",
                "Rug",
                "Sailboat",
                "Shelf",
                "Shore",
                "Sign",
                "Signpost",
                "Sky",
                "Slab",
                "Sofa",
                "Staircase",
                "Stool",
                "Table",
                "Tent",
                "Terrain",
                "Trees",
                "Tv",
                "Wall",
                "Well",
                "Whiteboard",
                "Windmill",
                "Window"
              ]
            },
            {
              "type": "string"
            }
          ]
        },
        "id": {
          "type": "string",
          "description": "Stable identity; the editor fills it in."
        },
        "anchor": {
          "enum": [
            "ground",
            "surface"
          ],
          "description": "Measure position[1] as an offset above the ground (`ground`) or the highest surface (`surface`)."
        },
        "props": {
          "type": "object"
        },
        "children": {
          "type": "array",
          "items": {
            "$ref": "#/$defs/node"
          }
        }
      },
      "additionalProperties": false,
      "allOf": [
        {
          "if": {
            "properties": {
              "type": {
                "const": "ArcadeCabinet"
              }
            },
            "required": [
              "type"
            ]
          },
          "then": {
            "properties": {
              "props": {
                "$ref": "#/$defs/props.ArcadeCabinet"
              }
            }
          }
        },
        {
          "if": {
            "properties": {
              "type": {
                "const": "Arch"
              }
            },
            "required": [
              "type"
            ]
          },
          "then": {
            "properties": {
              "props": {
                "$ref": "#/$defs/props.Arch"
              }
            }
          }
        },
        {
          "if": {
            "properties": {
              "type": {
                "const": "Barrel"
              }
            },
            "required": [
              "type"
            ]
          },
          "then": {
            "properties": {
              "props": {
                "$ref": "#/$defs/props.Barrel"
              }
            }
          }
        },
        {
          "if": {
            "properties": {
              "type": {
                "const": "Bed"
              }
            },
            "required": [
              "type"
            ]
          },
          "then": {
            "properties": {
              "props": {
                "$ref": "#/$defs/props.Bed"
              }
            }
          }
        },
        {
          "if": {
            "properties": {
              "type": {
                "const": "Bench"
              }
            },
            "required": [
              "type"
            ]
          },
          "then": {
            "properties": {
              "props": {
                "$ref": "#/$defs/props.Bench"
              }
            }
          }
        },
        {
          "if": {
            "properties": {
              "type": {
                "const": "Birds"
              }
            },
            "required": [
              "type"
            ]
          },
          "then": {
            "properties": {
              "props": {
                "$ref": "#/$defs/props.Birds"
              }
            }
          }
        },
        {
          "if": {
            "properties": {
              "type": {
                "const": "Book"
              }
            },
            "required": [
              "type"
            ]
          },
          "then": {
            "properties": {
              "props": {
                "$ref": "#/$defs/props.Book"
              }
            }
          }
        },
        {
          "if": {
            "properties": {
              "type": {
                "const": "Bookshelf"
              }
            },
            "required": [
              "type"
            ]
          },
          "then": {
            "properties": {
              "props": {
                "$ref": "#/$defs/props.Bookshelf"
              }
            }
          }
        },
        {
          "if": {
            "properties": {
              "type": {
                "const": "Bridge"
              }
            },
            "required": [
              "type"
            ]
          },
          "then": {
            "properties": {
              "props": {
                "$ref": "#/$defs/props.Bridge"
              }
            }
          }
        },
        {
          "if": {
            "properties": {
              "type": {
                "const": "Bush"
              }
            },
            "required": [
              "type"
            ]
          },
          "then": {
            "properties": {
              "props": {
                "$ref": "#/$defs/props.Bush"
              }
            }
          }
        },
        {
          "if": {
            "properties": {
              "type": {
                "const": "Campfire"
              }
            },
            "required": [
              "type"
            ]
          },
          "then": {
            "properties": {
              "props": {
                "$ref": "#/$defs/props.Campfire"
              }
            }
          }
        },
        {
          "if": {
            "properties": {
              "type": {
                "const": "Chair"
              }
            },
            "required": [
              "type"
            ]
          },
          "then": {
            "properties": {
              "props": {
                "$ref": "#/$defs/props.Chair"
              }
            }
          }
        },
        {
          "if": {
            "properties": {
              "type": {
                "const": "Cliff"
              }
            },
            "required": [
              "type"
            ]
          },
          "then": {
            "properties": {
              "props": {
                "$ref": "#/$defs/props.Cliff"
              }
            }
          }
        },
        {
          "if": {
            "properties": {
              "type": {
                "const": "Clock"
              }
            },
            "required": [
              "type"
            ]
          },
          "then": {
            "properties": {
              "props": {
                "$ref": "#/$defs/props.Clock"
              }
            }
          }
        },
        {
          "if": {
            "properties": {
              "type": {
                "const": "Clouds"
              }
            },
            "required": [
              "type"
            ]
          },
          "then": {
            "properties": {
              "props": {
                "$ref": "#/$defs/props.Clouds"
              }
            }
          }
        },
        {
          "if": {
            "properties": {
              "type": {
                "const": "CoffeeMachine"
              }
            },
            "required": [
              "type"
            ]
          },
          "then": {
            "properties": {
              "props": {
                "$ref": "#/$defs/props.CoffeeMachine"
              }
            }
          }
        },
        {
          "if": {
            "properties": {
              "type": {
                "const": "Compass"
              }
            },
            "required": [
              "type"
            ]
          },
          "then": {
            "properties": {
              "props": {
                "$ref": "#/$defs/props.Compass"
              }
            }
          }
        },
        {
          "if": {
            "properties": {
              "type": {
                "const": "Counter"
              }
            },
            "required": [
              "type"
            ]
          },
          "then": {
            "properties": {
              "props": {
                "$ref": "#/$defs/props.Counter"
              }
            }
          }
        },
        {
          "if": {
            "properties": {
              "type": {
                "const": "Crate"
              }
            },
            "required": [
              "type"
            ]
          },
          "then": {
            "properties": {
              "props": {
                "$ref": "#/$defs/props.Crate"
              }
            }
          }
        },
        {
          "if": {
            "properties": {
              "type": {
                "const": "CurvedWall"
              }
            },
            "required": [
              "type"
            ]
          },
          "then": {
            "properties": {
              "props": {
                "$ref": "#/$defs/props.CurvedWall"
              }
            }
          }
        },
        {
          "if": {
            "properties": {
              "type": {
                "const": "Desk"
              }
            },
            "required": [
              "type"
            ]
          },
          "then": {
            "properties": {
              "props": {
                "$ref": "#/$defs/props.Desk"
              }
            }
          }
        },
        {
          "if": {
            "properties": {
              "type": {
                "const": "Dock"
              }
            },
            "required": [
              "type"
            ]
          },
          "then": {
            "properties": {
              "props": {
                "$ref": "#/$defs/props.Dock"
              }
            }
          }
        },
        {
          "if": {
            "properties": {
              "type": {
                "const": "Door"
              }
            },
            "required": [
              "type"
            ]
          },
          "then": {
            "properties": {
              "props": {
                "$ref": "#/$defs/props.Door"
              }
            }
          }
        },
        {
          "if": {
            "properties": {
              "type": {
                "const": "Fence"
              }
            },
            "required": [
              "type"
            ]
          },
          "then": {
            "properties": {
              "props": {
                "$ref": "#/$defs/props.Fence"
              }
            }
          }
        },
        {
          "if": {
            "properties": {
              "type": {
                "const": "Flag"
              }
            },
            "required": [
              "type"
            ]
          },
          "then": {
            "properties": {
              "props": {
                "$ref": "#/$defs/props.Flag"
              }
            }
          }
        },
        {
          "if": {
            "properties": {
              "type": {
                "const": "Floor"
              }
            },
            "required": [
              "type"
            ]
          },
          "then": {
            "properties": {
              "props": {
                "$ref": "#/$defs/props.Floor"
              }
            }
          }
        },
        {
          "if": {
            "properties": {
              "type": {
                "const": "Flowers"
              }
            },
            "required": [
              "type"
            ]
          },
          "then": {
            "properties": {
              "props": {
                "$ref": "#/$defs/props.Flowers"
              }
            }
          }
        },
        {
          "if": {
            "properties": {
              "type": {
                "const": "Fountain"
              }
            },
            "required": [
              "type"
            ]
          },
          "then": {
            "properties": {
              "props": {
                "$ref": "#/$defs/props.Fountain"
              }
            }
          }
        },
        {
          "if": {
            "properties": {
              "type": {
                "const": "Fridge"
              }
            },
            "required": [
              "type"
            ]
          },
          "then": {
            "properties": {
              "props": {
                "$ref": "#/$defs/props.Fridge"
              }
            }
          }
        },
        {
          "if": {
            "properties": {
              "type": {
                "const": "Grass"
              }
            },
            "required": [
              "type"
            ]
          },
          "then": {
            "properties": {
              "props": {
                "$ref": "#/$defs/props.Grass"
              }
            }
          }
        },
        {
          "if": {
            "properties": {
              "type": {
                "const": "Hedge"
              }
            },
            "required": [
              "type"
            ]
          },
          "then": {
            "properties": {
              "props": {
                "$ref": "#/$defs/props.Hedge"
              }
            }
          }
        },
        {
          "if": {
            "properties": {
              "type": {
                "const": "House"
              }
            },
            "required": [
              "type"
            ]
          },
          "then": {
            "properties": {
              "props": {
                "$ref": "#/$defs/props.House"
              }
            }
          }
        },
        {
          "if": {
            "properties": {
              "type": {
                "const": "Hut"
              }
            },
            "required": [
              "type"
            ]
          },
          "then": {
            "properties": {
              "props": {
                "$ref": "#/$defs/props.Hut"
              }
            }
          }
        },
        {
          "if": {
            "properties": {
              "type": {
                "const": "Interactable"
              }
            },
            "required": [
              "type"
            ]
          },
          "then": {
            "properties": {
              "props": {
                "$ref": "#/$defs/props.Interactable"
              }
            }
          }
        },
        {
          "if": {
            "properties": {
              "type": {
                "const": "Lake"
              }
            },
            "required": [
              "type"
            ]
          },
          "then": {
            "properties": {
              "props": {
                "$ref": "#/$defs/props.Lake"
              }
            }
          }
        },
        {
          "if": {
            "properties": {
              "type": {
                "const": "Lamp"
              }
            },
            "required": [
              "type"
            ]
          },
          "then": {
            "properties": {
              "props": {
                "$ref": "#/$defs/props.Lamp"
              }
            }
          }
        },
        {
          "if": {
            "properties": {
              "type": {
                "const": "Level"
              }
            },
            "required": [
              "type"
            ]
          },
          "then": {
            "properties": {
              "props": {
                "$ref": "#/$defs/props.Level"
              }
            }
          }
        },
        {
          "if": {
            "properties": {
              "type": {
                "const": "LightRig"
              }
            },
            "required": [
              "type"
            ]
          },
          "then": {
            "properties": {
              "props": {
                "$ref": "#/$defs/props.LightRig"
              }
            }
          }
        },
        {
          "if": {
            "properties": {
              "type": {
                "const": "Monitor"
              }
            },
            "required": [
              "type"
            ]
          },
          "then": {
            "properties": {
              "props": {
                "$ref": "#/$defs/props.Monitor"
              }
            }
          }
        },
        {
          "if": {
            "properties": {
              "type": {
                "const": "Ocean"
              }
            },
            "required": [
              "type"
            ]
          },
          "then": {
            "properties": {
              "props": {
                "$ref": "#/$defs/props.Ocean"
              }
            }
          }
        },
        {
          "if": {
            "properties": {
              "type": {
                "const": "OfficeChair"
              }
            },
            "required": [
              "type"
            ]
          },
          "then": {
            "properties": {
              "props": {
                "$ref": "#/$defs/props.OfficeChair"
              }
            }
          }
        },
        {
          "if": {
            "properties": {
              "type": {
                "const": "Palm"
              }
            },
            "required": [
              "type"
            ]
          },
          "then": {
            "properties": {
              "props": {
                "$ref": "#/$defs/props.Palm"
              }
            }
          }
        },
        {
          "if": {
            "properties": {
              "type": {
                "const": "Path"
              }
            },
            "required": [
              "type"
            ]
          },
          "then": {
            "properties": {
              "props": {
                "$ref": "#/$defs/props.Path"
              }
            }
          }
        },
        {
          "if": {
            "properties": {
              "type": {
                "const": "Person"
              }
            },
            "required": [
              "type"
            ]
          },
          "then": {
            "properties": {
              "props": {
                "$ref": "#/$defs/props.Person"
              }
            }
          }
        },
        {
          "if": {
            "properties": {
              "type": {
                "const": "Pillar"
              }
            },
            "required": [
              "type"
            ]
          },
          "then": {
            "properties": {
              "props": {
                "$ref": "#/$defs/props.Pillar"
              }
            }
          }
        },
        {
          "if": {
            "properties": {
              "type": {
                "const": "Plant"
              }
            },
            "required": [
              "type"
            ]
          },
          "then": {
            "properties": {
              "props": {
                "$ref": "#/$defs/props.Plant"
              }
            }
          }
        },
        {
          "if": {
            "properties": {
              "type": {
                "const": "Player"
              }
            },
            "required": [
              "type"
            ]
          },
          "then": {
            "properties": {
              "props": {
                "$ref": "#/$defs/props.Player"
              }
            }
          }
        },
        {
          "if": {
            "properties": {
              "type": {
                "const": "Pool"
              }
            },
            "required": [
              "type"
            ]
          },
          "then": {
            "properties": {
              "props": {
                "$ref": "#/$defs/props.Pool"
              }
            }
          }
        },
        {
          "if": {
            "properties": {
              "type": {
                "const": "PoolTable"
              }
            },
            "required": [
              "type"
            ]
          },
          "then": {
            "properties": {
              "props": {
                "$ref": "#/$defs/props.PoolTable"
              }
            }
          }
        },
        {
          "if": {
            "properties": {
              "type": {
                "const": "Portal"
              }
            },
            "required": [
              "type"
            ]
          },
          "then": {
            "properties": {
              "props": {
                "$ref": "#/$defs/props.Portal"
              }
            }
          }
        },
        {
          "if": {
            "properties": {
              "type": {
                "const": "Road"
              }
            },
            "required": [
              "type"
            ]
          },
          "then": {
            "properties": {
              "props": {
                "$ref": "#/$defs/props.Road"
              }
            }
          }
        },
        {
          "if": {
            "properties": {
              "type": {
                "const": "Rocks"
              }
            },
            "required": [
              "type"
            ]
          },
          "then": {
            "properties": {
              "props": {
                "$ref": "#/$defs/props.Rocks"
              }
            }
          }
        },
        {
          "if": {
            "properties": {
              "type": {
                "const": "Roof"
              }
            },
            "required": [
              "type"
            ]
          },
          "then": {
            "properties": {
              "props": {
                "$ref": "#/$defs/props.Roof"
              }
            }
          }
        },
        {
          "if": {
            "properties": {
              "type": {
                "const": "Room"
              }
            },
            "required": [
              "type"
            ]
          },
          "then": {
            "properties": {
              "props": {
                "$ref": "#/$defs/props.Room"
              }
            }
          }
        },
        {
          "if": {
            "properties": {
              "type": {
                "const": "Rug"
              }
            },
            "required": [
              "type"
            ]
          },
          "then": {
            "properties": {
              "props": {
                "$ref": "#/$defs/props.Rug"
              }
            }
          }
        },
        {
          "if": {
            "properties": {
              "type": {
                "const": "Sailboat"
              }
            },
            "required": [
              "type"
            ]
          },
          "then": {
            "properties": {
              "props": {
                "$ref": "#/$defs/props.Sailboat"
              }
            }
          }
        },
        {
          "if": {
            "properties": {
              "type": {
                "const": "Shelf"
              }
            },
            "required": [
              "type"
            ]
          },
          "then": {
            "properties": {
              "props": {
                "$ref": "#/$defs/props.Shelf"
              }
            }
          }
        },
        {
          "if": {
            "properties": {
              "type": {
                "const": "Shore"
              }
            },
            "required": [
              "type"
            ]
          },
          "then": {
            "properties": {
              "props": {
                "$ref": "#/$defs/props.Shore"
              }
            }
          }
        },
        {
          "if": {
            "properties": {
              "type": {
                "const": "Sign"
              }
            },
            "required": [
              "type"
            ]
          },
          "then": {
            "properties": {
              "props": {
                "$ref": "#/$defs/props.Sign"
              }
            }
          }
        },
        {
          "if": {
            "properties": {
              "type": {
                "const": "Signpost"
              }
            },
            "required": [
              "type"
            ]
          },
          "then": {
            "properties": {
              "props": {
                "$ref": "#/$defs/props.Signpost"
              }
            }
          }
        },
        {
          "if": {
            "properties": {
              "type": {
                "const": "Sky"
              }
            },
            "required": [
              "type"
            ]
          },
          "then": {
            "properties": {
              "props": {
                "$ref": "#/$defs/props.Sky"
              }
            }
          }
        },
        {
          "if": {
            "properties": {
              "type": {
                "const": "Slab"
              }
            },
            "required": [
              "type"
            ]
          },
          "then": {
            "properties": {
              "props": {
                "$ref": "#/$defs/props.Slab"
              }
            }
          }
        },
        {
          "if": {
            "properties": {
              "type": {
                "const": "Sofa"
              }
            },
            "required": [
              "type"
            ]
          },
          "then": {
            "properties": {
              "props": {
                "$ref": "#/$defs/props.Sofa"
              }
            }
          }
        },
        {
          "if": {
            "properties": {
              "type": {
                "const": "Staircase"
              }
            },
            "required": [
              "type"
            ]
          },
          "then": {
            "properties": {
              "props": {
                "$ref": "#/$defs/props.Staircase"
              }
            }
          }
        },
        {
          "if": {
            "properties": {
              "type": {
                "const": "Stool"
              }
            },
            "required": [
              "type"
            ]
          },
          "then": {
            "properties": {
              "props": {
                "$ref": "#/$defs/props.Stool"
              }
            }
          }
        },
        {
          "if": {
            "properties": {
              "type": {
                "const": "Table"
              }
            },
            "required": [
              "type"
            ]
          },
          "then": {
            "properties": {
              "props": {
                "$ref": "#/$defs/props.Table"
              }
            }
          }
        },
        {
          "if": {
            "properties": {
              "type": {
                "const": "Tent"
              }
            },
            "required": [
              "type"
            ]
          },
          "then": {
            "properties": {
              "props": {
                "$ref": "#/$defs/props.Tent"
              }
            }
          }
        },
        {
          "if": {
            "properties": {
              "type": {
                "const": "Terrain"
              }
            },
            "required": [
              "type"
            ]
          },
          "then": {
            "properties": {
              "props": {
                "$ref": "#/$defs/props.Terrain"
              }
            }
          }
        },
        {
          "if": {
            "properties": {
              "type": {
                "const": "Trees"
              }
            },
            "required": [
              "type"
            ]
          },
          "then": {
            "properties": {
              "props": {
                "$ref": "#/$defs/props.Trees"
              }
            }
          }
        },
        {
          "if": {
            "properties": {
              "type": {
                "const": "Tv"
              }
            },
            "required": [
              "type"
            ]
          },
          "then": {
            "properties": {
              "props": {
                "$ref": "#/$defs/props.Tv"
              }
            }
          }
        },
        {
          "if": {
            "properties": {
              "type": {
                "const": "Wall"
              }
            },
            "required": [
              "type"
            ]
          },
          "then": {
            "properties": {
              "props": {
                "$ref": "#/$defs/props.Wall"
              }
            }
          }
        },
        {
          "if": {
            "properties": {
              "type": {
                "const": "Well"
              }
            },
            "required": [
              "type"
            ]
          },
          "then": {
            "properties": {
              "props": {
                "$ref": "#/$defs/props.Well"
              }
            }
          }
        },
        {
          "if": {
            "properties": {
              "type": {
                "const": "Whiteboard"
              }
            },
            "required": [
              "type"
            ]
          },
          "then": {
            "properties": {
              "props": {
                "$ref": "#/$defs/props.Whiteboard"
              }
            }
          }
        },
        {
          "if": {
            "properties": {
              "type": {
                "const": "Windmill"
              }
            },
            "required": [
              "type"
            ]
          },
          "then": {
            "properties": {
              "props": {
                "$ref": "#/$defs/props.Windmill"
              }
            }
          }
        },
        {
          "if": {
            "properties": {
              "type": {
                "const": "Window"
              }
            },
            "required": [
              "type"
            ]
          },
          "then": {
            "properties": {
              "props": {
                "$ref": "#/$defs/props.Window"
              }
            }
          }
        }
      ]
    }
  }
}
