{
  "$schema": "../_schema.json",
  "format": "pptx",
  "element": "model3d",
  "elementAliases": ["glb", "model", "3dmodel"],
  "parent": "slide",
  "operations": {
    "add": true,
    "set": true,
    "get": true,
    "query": true,
    "remove": true
  },
  "paths": {
    "positional": ["/slide[N]/model3d[M]"]
  },
  "note": "Only .glb (glTF-Binary) accepted. Placeholder PNG auto-generated for non-3D-aware viewers. Defaults to 10cm × 10cm centered on the slide.",
  "properties": {
    "src": {
      "type": "string",
      "description": ".glb source (file path, URL, data-URI). Non-glb rejected. Accepted on add/set only; Get does NOT surface this key (no Format[\"src\"] or Format[\"relId\"] is emitted for model3d).",
      "aliases": ["path"],
      "add": true, "set": true, "get": false,
      "examples": ["--prop src=/path/to/model.glb"],
      "readback": "add-time only; not surfaced in Get.",
      "enforcement": "report"
    },
    "x": {
      "type": "length",
      "aliases": ["left"],
      "add": true, "set": true, "get": true,
      "examples": ["--prop x=2cm"],
      "readback": "length in cm (e.g. \"2cm\")",
      "enforcement": "report"
    },
    "y": {
      "type": "length",
      "aliases": ["top"],
      "add": true, "set": true, "get": true,
      "examples": ["--prop y=2cm"],
      "readback": "length in cm (e.g. \"2cm\")",
      "enforcement": "report"
    },
    "width": {
      "type": "length",
      "add": true, "set": true, "get": true,
      "examples": ["--prop width=10cm"],
      "readback": "length in cm (e.g. \"2cm\")",
      "enforcement": "report"
    },
    "height": {
      "type": "length",
      "add": true, "set": true, "get": true,
      "examples": ["--prop height=10cm"],
      "readback": "length in cm (e.g. \"2cm\")",
      "enforcement": "report"
    },
    "rotation": {
      "type": "string",
      "description": "Model rotation as comma-separated degrees \"ax,ay,az\" (X, Y, Z axes). Missing axes default to 0. Per-axis aliases rotx/roty/rotz also accepted on set.",
      "aliases": ["rotx", "roty", "rotz"],
      "add": true, "set": true, "get": true,
      "examples": ["--prop rotation=30,45,0", "--prop rotx=30"],
      "readback": "\"ax,ay,az\" degrees (e.g. \"30,45,0\")",
      "enforcement": "report"
    }
  }
}
