{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "$id": "https://deckyard.app/schema/v3/slide-types/image-text-slide.schema.json",
  "title": "image-text-slide slide content",
  "type": "object",
  "properties": {
    "image": {
      "type": "string",
      "title": "Image"
    },
    "images": {
      "type": "array",
      "items": {
        "type": "object",
        "properties": {
          "src": {
            "type": "string",
            "title": "Image URL"
          },
          "alt": {
            "type": "string",
            "maxLength": 180,
            "title": "Alt text"
          },
          "fit": {
            "type": "string",
            "enum": [
              "cover",
              "contain",
              ""
            ],
            "title": "Image fit"
          },
          "focusX": {
            "anyOf": [
              {
                "type": "number",
                "minimum": 0,
                "maximum": 100
              },
              {
                "const": ""
              }
            ],
            "title": "Focus X"
          },
          "focusY": {
            "anyOf": [
              {
                "type": "number",
                "minimum": 0,
                "maximum": 100
              },
              {
                "const": ""
              }
            ],
            "title": "Focus Y"
          }
        },
        "additionalProperties": true
      },
      "minItems": 0,
      "maxItems": 3,
      "title": "Images"
    },
    "caption": {
      "type": "string",
      "maxLength": 160,
      "title": "Caption"
    },
    "alt": {
      "type": "string",
      "maxLength": 180,
      "title": "Alt text"
    },
    "imageRole": {
      "type": "string",
      "enum": [
        "content",
        "decorative",
        ""
      ],
      "title": "Image role"
    },
    "imageSide": {
      "type": "string",
      "enum": [
        "left",
        "right",
        ""
      ],
      "title": "Image position"
    },
    "imageWidth": {
      "type": "string",
      "enum": [
        "half",
        "narrow",
        "wide",
        ""
      ],
      "title": "Image width"
    },
    "layout": {
      "type": "string",
      "enum": [
        "split",
        "corner",
        "duo",
        "row-top",
        "row-bottom",
        ""
      ],
      "title": "Layout"
    },
    "textColumns": {
      "type": "string",
      "enum": [
        "1",
        "2",
        ""
      ],
      "title": "Text columns",
      "description": "Only used in the image-row and duo layouts."
    },
    "imageFit": {
      "type": "string",
      "enum": [
        "cover",
        "contain",
        ""
      ],
      "title": "Image fit"
    },
    "imageBackground": {
      "type": "string",
      "enum": [
        "white",
        "match",
        ""
      ],
      "title": "Image background"
    },
    "focusX": {
      "anyOf": [
        {
          "type": "number",
          "minimum": 0,
          "maximum": 100
        },
        {
          "const": ""
        }
      ],
      "title": "Focus X",
      "description": "Only used when Image fit is “cover” (cropped). 0 = left, 50 = center, 100 = right."
    },
    "focusY": {
      "anyOf": [
        {
          "type": "number",
          "minimum": 0,
          "maximum": 100
        },
        {
          "const": ""
        }
      ],
      "title": "Focus Y",
      "description": "Only used when Image fit is “cover” (cropped). 0 = top, 50 = center, 100 = bottom."
    },
    "title": {
      "type": "string",
      "maxLength": 120,
      "title": "Title"
    },
    "body": {
      "type": "string",
      "maxLength": 3000,
      "title": "Body (Markdown)"
    },
    "density": {
      "type": "string",
      "enum": [
        "auto",
        "comfortable",
        "compact",
        ""
      ],
      "title": "Text size"
    },
    "background": {
      "type": "string",
      "title": "Background"
    },
    "actions": {
      "type": "array",
      "items": {
        "type": "object",
        "properties": {
          "label": {
            "type": "string",
            "maxLength": 40,
            "title": "Button label"
          },
          "url": {
            "type": "string",
            "maxLength": 500,
            "title": "URL"
          },
          "style": {
            "type": "string",
            "enum": [
              "primary",
              "secondary",
              "outline",
              ""
            ],
            "title": "Style"
          }
        },
        "additionalProperties": true,
        "required": [
          "label",
          "url"
        ]
      },
      "maxItems": 3,
      "title": "Action buttons"
    },
    "a11yTitle": {
      "type": "string",
      "maxLength": 140,
      "title": "Accessibility title",
      "description": "Optional. Screen readers announce this when the slide becomes active. Prefer a short, descriptive phrase."
    },
    "a11ySummary": {
      "type": "string",
      "maxLength": 280,
      "title": "Accessibility summary",
      "description": "Optional extra context for screen readers (announced after the title). Keep it brief."
    },
    "slideBgImage": {
      "type": "string",
      "title": "Background image",
      "description": "Optional. Fills the whole slide behind the content. Large images are resized automatically; use the focus control to pick which part stays visible when cropped."
    },
    "slideBgFit": {
      "type": "string",
      "enum": [
        "cover",
        "contain",
        ""
      ],
      "title": "Background fit"
    },
    "slideBgFocusX": {
      "anyOf": [
        {
          "type": "number"
        },
        {
          "const": ""
        }
      ],
      "title": "Background focus X"
    },
    "slideBgFocusY": {
      "anyOf": [
        {
          "type": "number"
        },
        {
          "const": ""
        }
      ],
      "title": "Background focus Y"
    },
    "slideBgOverlay": {
      "type": "string",
      "enum": [
        "auto",
        "none",
        "light",
        "dark",
        "gradient-top",
        "gradient-bottom",
        ""
      ],
      "title": "Background overlay",
      "description": "Auto adds a subtle scrim only when the image is too busy for readable text. Gradient options darken one edge behind the text."
    },
    "slideBgText": {
      "type": "string",
      "enum": [
        "auto",
        "light",
        "dark",
        ""
      ],
      "title": "Text colour",
      "description": "Auto picks the theme text colour with the best contrast for the background image. Light/dark force it. (Legacy \"default\" is treated as the theme default.)"
    },
    "slideLogo": {
      "type": "string",
      "enum": [
        "none",
        "top-right",
        ""
      ],
      "title": "Theme logo",
      "description": "Show the active theme logo in a corner of this slide."
    }
  },
  "additionalProperties": true,
  "required": [
    "title",
    "body"
  ]
}