{
  "type": "object",
  "properties": {
    "fp_id": {"type": "string", "pattern": "^[a-z0-9][a-z0-9_]*$"},
    "t2i_prompt": {"type": "string", "minLength": 30},
    "key_elements": {"type": "array", "items": {"type": "string"}},
    "numbered_elements": {
      "type": "array",
      "items": {
        "type": "object",
        "properties": {
          "number": {"type": "integer", "minimum": 1},
          "label": {"type": "string", "minLength": 2},
          "category": {"type": "string", "enum": ["furniture", "opening", "prop", "area"]},
          "position_hint": {"type": "string", "minLength": 5},
          "base_layer_decision": {
            "type": "string",
            "enum": [
              "base_structural_unit",
              "base_opening",
              "base_persistent_fixture",
              "base_persistent_furniture",
              "state_overlay_plot_cue",
              "state_overlay_transient_object"
            ]
          }
        },
        "required": ["number", "label", "category", "position_hint", "base_layer_decision"],
        "additionalProperties": false
      }
    },
    "camera_recommendations": {
      "type": "array",
      "items": {
        "type": "object",
        "properties": {
          "bg_id": {"type": "string", "pattern": "^L\\d{2,3}B\\d{2,3}$"},
          "sub_location": {"type": "string", "pattern": "^[a-z0-9][a-z0-9_]*$"},
          "camera_position": {"type": "string", "minLength": 10},
          "camera_height": {"type": "string", "minLength": 5},
          "lens_hint": {"type": "string", "minLength": 3},
          "framing_notes": {"type": "string"},
          "use_numbered_elements": {
            "type": "array",
            "items": {"type": "integer", "minimum": 1}
          },
          "ignore_numbered_elements": {
            "type": "array",
            "items": {"type": "integer", "minimum": 1}
          }
        },
        "required": [
          "bg_id",
          "sub_location",
          "camera_position",
          "camera_height",
          "lens_hint",
          "framing_notes",
          "use_numbered_elements",
          "ignore_numbered_elements"
        ],
        "additionalProperties": false
      }
    }
  },
  "required": ["fp_id", "t2i_prompt", "key_elements", "numbered_elements", "camera_recommendations"],
  "additionalProperties": false
}
