{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "$id": "https://deckyard.eu/schema/v15/deck.schema.json",
  "title": "Deckyard deck",
  "description": "A portable Deckyard deck (the deckyard.deck envelope). Generated from the slide-type field registry; do not edit by hand.",
  "type": "object",
  "properties": {
    "format": {
      "const": "deckyard.deck"
    },
    "version": {
      "const": 1
    },
    "title": {
      "type": "string"
    },
    "lang": {
      "type": "string",
      "pattern": "^[a-zA-Z]{2,3}(-[a-zA-Z]{3}){0,3}(-[a-zA-Z]{4})?(-([a-zA-Z]{2}|[0-9]{3}))?(-([a-zA-Z0-9]{5,8}|[0-9][a-zA-Z0-9]{3}))*(-[a-wy-zA-WY-Z0-9](-[a-zA-Z0-9]{2,8})+)*(-[xX](-[a-zA-Z0-9]{1,8})+)?$",
      "description": "BCP 47 language tag (e.g. `nl`, `en-GB`, `pt-BR`) of `title`, every slide `content` and `notes`. The format places no restriction beyond well-formedness; which tags a given implementation authors in is its own choice."
    },
    "translations": {
      "type": "object",
      "description": "The deck title per other language (BCP 47 tag).",
      "propertyNames": {
        "type": "string",
        "pattern": "^[a-zA-Z]{2,3}(-[a-zA-Z]{3}){0,3}(-[a-zA-Z]{4})?(-([a-zA-Z]{2}|[0-9]{3}))?(-([a-zA-Z0-9]{5,8}|[0-9][a-zA-Z0-9]{3}))*(-[a-wy-zA-WY-Z0-9](-[a-zA-Z0-9]{2,8})+)*(-[xX](-[a-zA-Z0-9]{1,8})+)?$"
      },
      "additionalProperties": {
        "type": "object",
        "properties": {
          "title": {
            "type": "string"
          }
        },
        "additionalProperties": true
      }
    },
    "theme": {
      "type": "string"
    },
    "slides": {
      "type": "array",
      "items": {
        "$ref": "#/$defs/slide"
      }
    }
  },
  "required": [
    "format",
    "version",
    "title",
    "slides"
  ],
  "additionalProperties": true,
  "$defs": {
    "slide": {
      "type": "object",
      "properties": {
        "type": {
          "type": "string",
          "pattern": "^(?:[a-z0-9][a-z0-9-]*(?:\\.[a-z0-9][a-z0-9-]*)+\\.[a-z0-9][a-z0-9-]*|(?:(?:[a-z0-9][a-z0-9-]*(?:\\.[a-z0-9][a-z0-9-]*)+|[a-z0-9][a-z0-9-]*)/)?[a-z0-9][a-z0-9-]*)(?:@[0-9A-Za-z][0-9A-Za-z.-]*)?$",
          "description": "Slide-type reference: the canonical reverse-DNS id (`eu.deckyard.slide.title`), or the equivalent `name`, `namespace/name` or `…@version` spelling. Known types are discriminated below in every spelling; an unknown type is valid and its content is unconstrained."
        },
        "content": {
          "type": "object"
        },
        "translations": {
          "type": "object",
          "description": "The per-language keys of `content` plus `notes`, per other language (BCP 47 tag). Items fields are text-only arrays as long as the ones in `content`; machine values never appear here.",
          "propertyNames": {
            "type": "string",
            "pattern": "^[a-zA-Z]{2,3}(-[a-zA-Z]{3}){0,3}(-[a-zA-Z]{4})?(-([a-zA-Z]{2}|[0-9]{3}))?(-([a-zA-Z0-9]{5,8}|[0-9][a-zA-Z0-9]{3}))*(-[a-wy-zA-WY-Z0-9](-[a-zA-Z0-9]{2,8})+)*(-[xX](-[a-zA-Z0-9]{1,8})+)?$"
          },
          "additionalProperties": {
            "type": "object",
            "properties": {
              "notes": {
                "type": "string"
              }
            },
            "additionalProperties": true
          }
        },
        "notes": {
          "type": "string",
          "description": "Speaker notes, in the deck language."
        },
        "duration": {
          "type": "integer",
          "minimum": 1,
          "maximum": 300,
          "description": "Per-slide duration override, in seconds."
        },
        "visibility": {
          "type": "object",
          "description": "Where the slide is hidden. An absent flag means visible there.",
          "properties": {
            "hideInPresentation": {
              "type": "boolean"
            },
            "hideInExport": {
              "type": "boolean"
            },
            "hideInPublished": {
              "type": "boolean"
            },
            "hideFromViewers": {
              "type": "boolean"
            }
          },
          "additionalProperties": true
        }
      },
      "required": [
        "type",
        "content"
      ],
      "additionalProperties": true,
      "allOf": [
        {
          "if": {
            "properties": {
              "type": {
                "enum": [
                  "callout-slide",
                  "core/callout-slide",
                  "eu.deckyard.slide.callout",
                  "callout"
                ]
              }
            }
          },
          "then": {
            "properties": {
              "content": {
                "$ref": "#/$defs/content_callout_slide"
              },
              "translations": {
                "additionalProperties": {
                  "$ref": "#/$defs/translation_callout_slide"
                }
              }
            }
          }
        },
        {
          "if": {
            "properties": {
              "type": {
                "enum": [
                  "chapter-title-slide",
                  "core/chapter-title-slide",
                  "eu.deckyard.slide.chapter-title",
                  "chapter-title"
                ]
              }
            }
          },
          "then": {
            "properties": {
              "content": {
                "$ref": "#/$defs/content_chapter_title_slide"
              },
              "translations": {
                "additionalProperties": {
                  "$ref": "#/$defs/translation_chapter_title_slide"
                }
              }
            }
          }
        },
        {
          "if": {
            "properties": {
              "type": {
                "enum": [
                  "chart-slide",
                  "core/chart-slide",
                  "eu.deckyard.slide.chart",
                  "chart"
                ]
              }
            }
          },
          "then": {
            "properties": {
              "content": {
                "$ref": "#/$defs/content_chart_slide"
              },
              "translations": {
                "additionalProperties": {
                  "$ref": "#/$defs/translation_chart_slide"
                }
              }
            }
          }
        },
        {
          "if": {
            "properties": {
              "type": {
                "enum": [
                  "comparison-slide",
                  "core/comparison-slide",
                  "eu.deckyard.slide.comparison",
                  "comparison"
                ]
              }
            }
          },
          "then": {
            "properties": {
              "content": {
                "$ref": "#/$defs/content_comparison_slide"
              },
              "translations": {
                "additionalProperties": {
                  "$ref": "#/$defs/translation_comparison_slide"
                }
              }
            }
          }
        },
        {
          "if": {
            "properties": {
              "type": {
                "enum": [
                  "content-slide",
                  "core/content-slide",
                  "eu.deckyard.slide.content",
                  "content"
                ]
              }
            }
          },
          "then": {
            "properties": {
              "content": {
                "$ref": "#/$defs/content_content_slide"
              },
              "translations": {
                "additionalProperties": {
                  "$ref": "#/$defs/translation_content_slide"
                }
              }
            }
          }
        },
        {
          "if": {
            "properties": {
              "type": {
                "enum": [
                  "countdown-slide",
                  "core/countdown-slide",
                  "eu.deckyard.slide.countdown",
                  "countdown"
                ]
              }
            }
          },
          "then": {
            "properties": {
              "content": {
                "$ref": "#/$defs/content_countdown_slide"
              },
              "translations": {
                "additionalProperties": {
                  "$ref": "#/$defs/translation_countdown_slide"
                }
              }
            }
          }
        },
        {
          "if": {
            "properties": {
              "type": {
                "enum": [
                  "custom-html-slide",
                  "core/custom-html-slide",
                  "eu.deckyard.slide.custom-html",
                  "custom-html"
                ]
              }
            }
          },
          "then": {
            "properties": {
              "content": {
                "$ref": "#/$defs/content_custom_html_slide"
              },
              "translations": {
                "additionalProperties": {
                  "$ref": "#/$defs/translation_custom_html_slide"
                }
              }
            }
          }
        },
        {
          "if": {
            "properties": {
              "type": {
                "enum": [
                  "cycle-slide",
                  "core/cycle-slide",
                  "eu.deckyard.slide.cycle",
                  "cycle"
                ]
              }
            }
          },
          "then": {
            "properties": {
              "content": {
                "$ref": "#/$defs/content_cycle_slide"
              },
              "translations": {
                "additionalProperties": {
                  "$ref": "#/$defs/translation_cycle_slide"
                }
              }
            }
          }
        },
        {
          "if": {
            "properties": {
              "type": {
                "enum": [
                  "embed-slide",
                  "core/embed-slide",
                  "eu.deckyard.slide.embed",
                  "embed"
                ]
              }
            }
          },
          "then": {
            "properties": {
              "content": {
                "$ref": "#/$defs/content_embed_slide"
              },
              "translations": {
                "additionalProperties": {
                  "$ref": "#/$defs/translation_embed_slide"
                }
              }
            }
          }
        },
        {
          "if": {
            "properties": {
              "type": {
                "enum": [
                  "end-slide",
                  "core/end-slide",
                  "eu.deckyard.slide.end",
                  "end"
                ]
              }
            }
          },
          "then": {
            "properties": {
              "content": {
                "$ref": "#/$defs/content_end_slide"
              },
              "translations": {
                "additionalProperties": {
                  "$ref": "#/$defs/translation_end_slide"
                }
              }
            }
          }
        },
        {
          "if": {
            "properties": {
              "type": {
                "enum": [
                  "feedback-slide",
                  "core/feedback-slide",
                  "eu.deckyard.slide.feedback",
                  "feedback"
                ]
              }
            }
          },
          "then": {
            "properties": {
              "content": {
                "$ref": "#/$defs/content_feedback_slide"
              },
              "translations": {
                "additionalProperties": {
                  "$ref": "#/$defs/translation_feedback_slide"
                }
              }
            }
          }
        },
        {
          "if": {
            "properties": {
              "type": {
                "enum": [
                  "follow-invite-slide",
                  "core/follow-invite-slide",
                  "eu.deckyard.slide.follow-invite",
                  "follow-invite"
                ]
              }
            }
          },
          "then": {
            "properties": {
              "content": {
                "$ref": "#/$defs/content_follow_invite_slide"
              },
              "translations": {
                "additionalProperties": {
                  "$ref": "#/$defs/translation_follow_invite_slide"
                }
              }
            }
          }
        },
        {
          "if": {
            "properties": {
              "type": {
                "enum": [
                  "funnel-slide",
                  "core/funnel-slide",
                  "eu.deckyard.slide.funnel",
                  "funnel"
                ]
              }
            }
          },
          "then": {
            "properties": {
              "content": {
                "$ref": "#/$defs/content_funnel_slide"
              },
              "translations": {
                "additionalProperties": {
                  "$ref": "#/$defs/translation_funnel_slide"
                }
              }
            }
          }
        },
        {
          "if": {
            "properties": {
              "type": {
                "enum": [
                  "gallery-slide",
                  "core/gallery-slide",
                  "eu.deckyard.slide.gallery",
                  "gallery"
                ]
              }
            }
          },
          "then": {
            "properties": {
              "content": {
                "$ref": "#/$defs/content_gallery_slide"
              },
              "translations": {
                "additionalProperties": {
                  "$ref": "#/$defs/translation_gallery_slide"
                }
              }
            }
          }
        },
        {
          "if": {
            "properties": {
              "type": {
                "enum": [
                  "icon-card-grid-slide",
                  "core/icon-card-grid-slide",
                  "eu.deckyard.slide.icon-card-grid",
                  "icon-card-grid"
                ]
              }
            }
          },
          "then": {
            "properties": {
              "content": {
                "$ref": "#/$defs/content_icon_card_grid_slide"
              },
              "translations": {
                "additionalProperties": {
                  "$ref": "#/$defs/translation_icon_card_grid_slide"
                }
              }
            }
          }
        },
        {
          "if": {
            "properties": {
              "type": {
                "enum": [
                  "image-set-slide",
                  "core/image-set-slide",
                  "eu.deckyard.slide.image-set",
                  "image-set"
                ]
              }
            }
          },
          "then": {
            "properties": {
              "content": {
                "$ref": "#/$defs/content_image_set_slide"
              },
              "translations": {
                "additionalProperties": {
                  "$ref": "#/$defs/translation_image_set_slide"
                }
              }
            }
          }
        },
        {
          "if": {
            "properties": {
              "type": {
                "enum": [
                  "image-slide",
                  "core/image-slide",
                  "eu.deckyard.slide.image",
                  "image"
                ]
              }
            }
          },
          "then": {
            "properties": {
              "content": {
                "$ref": "#/$defs/content_image_slide"
              },
              "translations": {
                "additionalProperties": {
                  "$ref": "#/$defs/translation_image_slide"
                }
              }
            }
          }
        },
        {
          "if": {
            "properties": {
              "type": {
                "enum": [
                  "image-text-slide",
                  "core/image-text-slide",
                  "eu.deckyard.slide.image-text",
                  "image-text"
                ]
              }
            }
          },
          "then": {
            "properties": {
              "content": {
                "$ref": "#/$defs/content_image_text_slide"
              },
              "translations": {
                "additionalProperties": {
                  "$ref": "#/$defs/translation_image_text_slide"
                }
              }
            }
          }
        },
        {
          "if": {
            "properties": {
              "type": {
                "enum": [
                  "kpi-metrics-slide",
                  "core/kpi-metrics-slide",
                  "eu.deckyard.slide.kpi-metrics",
                  "kpi-metrics"
                ]
              }
            }
          },
          "then": {
            "properties": {
              "content": {
                "$ref": "#/$defs/content_kpi_metrics_slide"
              },
              "translations": {
                "additionalProperties": {
                  "$ref": "#/$defs/translation_kpi_metrics_slide"
                }
              }
            }
          }
        },
        {
          "if": {
            "properties": {
              "type": {
                "enum": [
                  "likert-slide",
                  "core/likert-slide",
                  "eu.deckyard.slide.likert",
                  "likert"
                ]
              }
            }
          },
          "then": {
            "properties": {
              "content": {
                "$ref": "#/$defs/content_likert_slide"
              },
              "translations": {
                "additionalProperties": {
                  "$ref": "#/$defs/translation_likert_slide"
                }
              }
            }
          }
        },
        {
          "if": {
            "properties": {
              "type": {
                "enum": [
                  "likert-slider-slide",
                  "core/likert-slider-slide",
                  "eu.deckyard.slide.likert-slider",
                  "likert-slider"
                ]
              }
            }
          },
          "then": {
            "properties": {
              "content": {
                "$ref": "#/$defs/content_likert_slider_slide"
              },
              "translations": {
                "additionalProperties": {
                  "$ref": "#/$defs/translation_likert_slider_slide"
                }
              }
            }
          }
        },
        {
          "if": {
            "properties": {
              "type": {
                "enum": [
                  "list-slide",
                  "core/list-slide",
                  "eu.deckyard.slide.list",
                  "list"
                ]
              }
            }
          },
          "then": {
            "properties": {
              "content": {
                "$ref": "#/$defs/content_list_slide"
              },
              "translations": {
                "additionalProperties": {
                  "$ref": "#/$defs/translation_list_slide"
                }
              }
            }
          }
        },
        {
          "if": {
            "properties": {
              "type": {
                "enum": [
                  "logo-wall-slide",
                  "core/logo-wall-slide",
                  "eu.deckyard.slide.logo-wall",
                  "logo-wall"
                ]
              }
            }
          },
          "then": {
            "properties": {
              "content": {
                "$ref": "#/$defs/content_logo_wall_slide"
              },
              "translations": {
                "additionalProperties": {
                  "$ref": "#/$defs/translation_logo_wall_slide"
                }
              }
            }
          }
        },
        {
          "if": {
            "properties": {
              "type": {
                "enum": [
                  "matrix-slide",
                  "core/matrix-slide",
                  "eu.deckyard.slide.matrix",
                  "matrix"
                ]
              }
            }
          },
          "then": {
            "properties": {
              "content": {
                "$ref": "#/$defs/content_matrix_slide"
              },
              "translations": {
                "additionalProperties": {
                  "$ref": "#/$defs/translation_matrix_slide"
                }
              }
            }
          }
        },
        {
          "if": {
            "properties": {
              "type": {
                "enum": [
                  "payoff-slide",
                  "core/payoff-slide",
                  "eu.deckyard.slide.payoff",
                  "payoff"
                ]
              }
            }
          },
          "then": {
            "properties": {
              "content": {
                "$ref": "#/$defs/content_payoff_slide"
              },
              "translations": {
                "additionalProperties": {
                  "$ref": "#/$defs/translation_payoff_slide"
                }
              }
            }
          }
        },
        {
          "if": {
            "properties": {
              "type": {
                "enum": [
                  "poll-slide",
                  "core/poll-slide",
                  "eu.deckyard.slide.poll",
                  "poll"
                ]
              }
            }
          },
          "then": {
            "properties": {
              "content": {
                "$ref": "#/$defs/content_poll_slide"
              },
              "translations": {
                "additionalProperties": {
                  "$ref": "#/$defs/translation_poll_slide"
                }
              }
            }
          }
        },
        {
          "if": {
            "properties": {
              "type": {
                "enum": [
                  "process-slide",
                  "core/process-slide",
                  "eu.deckyard.slide.process",
                  "process"
                ]
              }
            }
          },
          "then": {
            "properties": {
              "content": {
                "$ref": "#/$defs/content_process_slide"
              },
              "translations": {
                "additionalProperties": {
                  "$ref": "#/$defs/translation_process_slide"
                }
              }
            }
          }
        },
        {
          "if": {
            "properties": {
              "type": {
                "enum": [
                  "pyramid-slide",
                  "core/pyramid-slide",
                  "eu.deckyard.slide.pyramid",
                  "pyramid"
                ]
              }
            }
          },
          "then": {
            "properties": {
              "content": {
                "$ref": "#/$defs/content_pyramid_slide"
              },
              "translations": {
                "additionalProperties": {
                  "$ref": "#/$defs/translation_pyramid_slide"
                }
              }
            }
          }
        },
        {
          "if": {
            "properties": {
              "type": {
                "enum": [
                  "quote-slide",
                  "core/quote-slide",
                  "eu.deckyard.slide.quote",
                  "quote"
                ]
              }
            }
          },
          "then": {
            "properties": {
              "content": {
                "$ref": "#/$defs/content_quote_slide"
              },
              "translations": {
                "additionalProperties": {
                  "$ref": "#/$defs/translation_quote_slide"
                }
              }
            }
          }
        },
        {
          "if": {
            "properties": {
              "type": {
                "enum": [
                  "table-slide",
                  "core/table-slide",
                  "eu.deckyard.slide.table",
                  "table"
                ]
              }
            }
          },
          "then": {
            "properties": {
              "content": {
                "$ref": "#/$defs/content_table_slide"
              },
              "translations": {
                "additionalProperties": {
                  "$ref": "#/$defs/translation_table_slide"
                }
              }
            }
          }
        },
        {
          "if": {
            "properties": {
              "type": {
                "enum": [
                  "team-cards-slide",
                  "core/team-cards-slide",
                  "eu.deckyard.slide.team-cards",
                  "team-cards"
                ]
              }
            }
          },
          "then": {
            "properties": {
              "content": {
                "$ref": "#/$defs/content_team_cards_slide"
              },
              "translations": {
                "additionalProperties": {
                  "$ref": "#/$defs/translation_team_cards_slide"
                }
              }
            }
          }
        },
        {
          "if": {
            "properties": {
              "type": {
                "enum": [
                  "text-blocks-slide",
                  "core/text-blocks-slide",
                  "eu.deckyard.slide.text-blocks",
                  "text-blocks"
                ]
              }
            }
          },
          "then": {
            "properties": {
              "content": {
                "$ref": "#/$defs/content_text_blocks_slide"
              },
              "translations": {
                "additionalProperties": {
                  "$ref": "#/$defs/translation_text_blocks_slide"
                }
              }
            }
          }
        },
        {
          "if": {
            "properties": {
              "type": {
                "enum": [
                  "timeline-slide",
                  "core/timeline-slide",
                  "eu.deckyard.slide.timeline",
                  "timeline"
                ]
              }
            }
          },
          "then": {
            "properties": {
              "content": {
                "$ref": "#/$defs/content_timeline_slide"
              },
              "translations": {
                "additionalProperties": {
                  "$ref": "#/$defs/translation_timeline_slide"
                }
              }
            }
          }
        },
        {
          "if": {
            "properties": {
              "type": {
                "enum": [
                  "title-slide",
                  "core/title-slide",
                  "eu.deckyard.slide.title",
                  "title"
                ]
              }
            }
          },
          "then": {
            "properties": {
              "content": {
                "$ref": "#/$defs/content_title_slide"
              },
              "translations": {
                "additionalProperties": {
                  "$ref": "#/$defs/translation_title_slide"
                }
              }
            }
          }
        },
        {
          "if": {
            "properties": {
              "type": {
                "enum": [
                  "video-slide",
                  "core/video-slide",
                  "eu.deckyard.slide.video",
                  "video"
                ]
              }
            }
          },
          "then": {
            "properties": {
              "content": {
                "$ref": "#/$defs/content_video_slide"
              },
              "translations": {
                "additionalProperties": {
                  "$ref": "#/$defs/translation_video_slide"
                }
              }
            }
          }
        }
      ]
    },
    "content_callout_slide": {
      "title": "callout-slide slide content",
      "type": "object",
      "properties": {
        "variant": {
          "type": "string",
          "enum": [
            "insight",
            "warning",
            "definition",
            "note",
            "tip",
            ""
          ],
          "title": "Kind"
        },
        "label": {
          "type": "string",
          "maxLength": 80,
          "title": "Label / term"
        },
        "body": {
          "type": "string",
          "maxLength": 600,
          "title": "Body"
        },
        "source": {
          "type": "string",
          "maxLength": 160,
          "title": "Source"
        },
        "background": {
          "type": "string",
          "title": "Background"
        },
        "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": [
        "variant",
        "body"
      ]
    },
    "translation_callout_slide": {
      "title": "callout-slide slide translation",
      "type": "object",
      "properties": {
        "label": {
          "type": "string",
          "maxLength": 80,
          "title": "Label / term"
        },
        "body": {
          "type": "string",
          "maxLength": 600,
          "title": "Body"
        },
        "source": {
          "type": "string",
          "maxLength": 160,
          "title": "Source"
        },
        "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."
        },
        "notes": {
          "type": "string"
        }
      },
      "additionalProperties": true
    },
    "content_chapter_title_slide": {
      "title": "chapter-title-slide slide content",
      "type": "object",
      "properties": {
        "titleBlockAlign": {
          "type": "string",
          "enum": [
            "left",
            "center",
            ""
          ],
          "title": "Title block alignment"
        },
        "title": {
          "type": "string",
          "maxLength": 140,
          "title": "Title"
        },
        "subheading": {
          "type": "string",
          "maxLength": 160,
          "title": "Subheading"
        },
        "layout": {
          "type": "string",
          "enum": [
            "top",
            "center",
            "bottom",
            ""
          ],
          "title": "Layout"
        },
        "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"
      ]
    },
    "translation_chapter_title_slide": {
      "title": "chapter-title-slide slide translation",
      "type": "object",
      "properties": {
        "title": {
          "type": "string",
          "maxLength": 140,
          "title": "Title"
        },
        "subheading": {
          "type": "string",
          "maxLength": 160,
          "title": "Subheading"
        },
        "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."
        },
        "notes": {
          "type": "string"
        }
      },
      "additionalProperties": true
    },
    "content_chart_slide": {
      "title": "chart-slide slide content",
      "type": "object",
      "properties": {
        "title": {
          "type": "string",
          "maxLength": 120,
          "title": "Title"
        },
        "subheading": {
          "type": "string",
          "maxLength": 220,
          "title": "Subheading"
        },
        "bottomSubheading": {
          "type": "string",
          "maxLength": 200,
          "title": "Bottom subheading"
        },
        "chartType": {
          "type": "string",
          "enum": [
            "bar",
            "line",
            "pie",
            ""
          ],
          "title": "Chart type"
        },
        "data": {
          "type": "string",
          "maxLength": 20000,
          "title": "Data (CSV/TSV)",
          "description": "The first row names the columns and is never plotted; every row after it is a data point. Bar and pie read a label and a value; line reads an x label and one or two series, named by the header."
        },
        "pieLabelMode": {
          "type": "string",
          "enum": [
            "none",
            "value",
            "%",
            "both",
            ""
          ],
          "title": "Pie labels"
        },
        "showLegend": {
          "type": "string",
          "enum": [
            "yes",
            "no",
            ""
          ],
          "title": "Legend"
        },
        "showValues": {
          "type": "string",
          "enum": [
            "yes",
            "no",
            ""
          ],
          "title": "Show values"
        },
        "xLabel": {
          "type": "string",
          "maxLength": 80,
          "title": "X label"
        },
        "yLabel": {
          "type": "string",
          "maxLength": 80,
          "title": "Y label"
        },
        "series1Label": {
          "type": "string",
          "maxLength": 80,
          "title": "Series 1 label (legend)"
        },
        "series2Label": {
          "type": "string",
          "maxLength": 80,
          "title": "Series 2 label (legend)"
        },
        "background": {
          "type": "string",
          "title": "Background"
        },
        "headerAlign": {
          "type": "string",
          "enum": [
            "left",
            "center",
            ""
          ],
          "title": "Header alignment"
        },
        "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",
        "chartType",
        "data"
      ]
    },
    "translation_chart_slide": {
      "title": "chart-slide slide translation",
      "type": "object",
      "properties": {
        "title": {
          "type": "string",
          "maxLength": 120,
          "title": "Title"
        },
        "subheading": {
          "type": "string",
          "maxLength": 220,
          "title": "Subheading"
        },
        "bottomSubheading": {
          "type": "string",
          "maxLength": 200,
          "title": "Bottom subheading"
        },
        "data": {
          "type": "string",
          "maxLength": 20000,
          "title": "Data (CSV/TSV)",
          "description": "The first row names the columns and is never plotted; every row after it is a data point. Bar and pie read a label and a value; line reads an x label and one or two series, named by the header."
        },
        "xLabel": {
          "type": "string",
          "maxLength": 80,
          "title": "X label"
        },
        "yLabel": {
          "type": "string",
          "maxLength": 80,
          "title": "Y label"
        },
        "series1Label": {
          "type": "string",
          "maxLength": 80,
          "title": "Series 1 label (legend)"
        },
        "series2Label": {
          "type": "string",
          "maxLength": 80,
          "title": "Series 2 label (legend)"
        },
        "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."
        },
        "notes": {
          "type": "string"
        }
      },
      "additionalProperties": true
    },
    "content_comparison_slide": {
      "title": "comparison-slide slide content",
      "type": "object",
      "properties": {
        "title": {
          "type": "string",
          "maxLength": 120,
          "title": "Title"
        },
        "subheading": {
          "type": "string",
          "maxLength": 200,
          "title": "Subheading"
        },
        "bottomSubheading": {
          "type": "string",
          "maxLength": 200,
          "title": "Bottom subheading"
        },
        "leftTitle": {
          "type": "string",
          "maxLength": 100,
          "title": "Left title"
        },
        "leftBody": {
          "type": "string",
          "maxLength": 2000,
          "title": "Left content"
        },
        "rightTitle": {
          "type": "string",
          "maxLength": 100,
          "title": "Right title"
        },
        "rightBody": {
          "type": "string",
          "maxLength": 2000,
          "title": "Right content"
        },
        "verdict": {
          "type": "string",
          "maxLength": 100,
          "title": "Verdict"
        },
        "variant": {
          "type": "string",
          "enum": [
            "versus",
            "before-after",
            "pros-cons",
            "tradeoff",
            ""
          ],
          "title": "Treatment"
        },
        "background": {
          "type": "string",
          "title": "Background"
        },
        "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": [
        "leftTitle",
        "leftBody",
        "rightTitle",
        "rightBody"
      ]
    },
    "translation_comparison_slide": {
      "title": "comparison-slide slide translation",
      "type": "object",
      "properties": {
        "title": {
          "type": "string",
          "maxLength": 120,
          "title": "Title"
        },
        "subheading": {
          "type": "string",
          "maxLength": 200,
          "title": "Subheading"
        },
        "bottomSubheading": {
          "type": "string",
          "maxLength": 200,
          "title": "Bottom subheading"
        },
        "leftTitle": {
          "type": "string",
          "maxLength": 100,
          "title": "Left title"
        },
        "leftBody": {
          "type": "string",
          "maxLength": 2000,
          "title": "Left content"
        },
        "rightTitle": {
          "type": "string",
          "maxLength": 100,
          "title": "Right title"
        },
        "rightBody": {
          "type": "string",
          "maxLength": 2000,
          "title": "Right content"
        },
        "verdict": {
          "type": "string",
          "maxLength": 100,
          "title": "Verdict"
        },
        "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."
        },
        "notes": {
          "type": "string"
        }
      },
      "additionalProperties": true
    },
    "content_content_slide": {
      "title": "content-slide slide content",
      "type": "object",
      "properties": {
        "title": {
          "type": "string",
          "maxLength": 120,
          "title": "Title"
        },
        "subheading": {
          "type": "string",
          "maxLength": 200,
          "title": "Subheading"
        },
        "layout": {
          "type": "string",
          "enum": [
            "two-column",
            "one-column",
            ""
          ],
          "title": "Text columns"
        },
        "density": {
          "type": "string",
          "enum": [
            "auto",
            "compact",
            ""
          ],
          "title": "Text size"
        },
        "body": {
          "type": "string",
          "maxLength": 3000,
          "title": "Body (Markdown)"
        },
        "asideVariant": {
          "type": "string",
          "enum": [
            "none",
            "note",
            "tip",
            "warning",
            ""
          ],
          "title": "Aside"
        },
        "asideText": {
          "type": "string",
          "maxLength": 300,
          "title": "Aside text"
        },
        "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"
      ]
    },
    "translation_content_slide": {
      "title": "content-slide slide translation",
      "type": "object",
      "properties": {
        "title": {
          "type": "string",
          "maxLength": 120,
          "title": "Title"
        },
        "subheading": {
          "type": "string",
          "maxLength": 200,
          "title": "Subheading"
        },
        "body": {
          "type": "string",
          "maxLength": 3000,
          "title": "Body (Markdown)"
        },
        "asideText": {
          "type": "string",
          "maxLength": 300,
          "title": "Aside text"
        },
        "actions": {
          "type": "array",
          "items": {
            "type": "object",
            "properties": {
              "label": {
                "type": "string",
                "maxLength": 40,
                "title": "Button label"
              }
            },
            "additionalProperties": true
          }
        },
        "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."
        },
        "notes": {
          "type": "string"
        }
      },
      "additionalProperties": true
    },
    "content_countdown_slide": {
      "title": "countdown-slide slide content",
      "type": "object",
      "properties": {
        "title": {
          "type": "string",
          "maxLength": 120,
          "title": "Title"
        },
        "durationMinutes": {
          "anyOf": [
            {
              "type": "number",
              "minimum": 0,
              "maximum": 60
            },
            {
              "const": ""
            }
          ],
          "title": "Minutes",
          "description": "Countdown length in minutes (0–60). Default 5."
        },
        "durationSeconds": {
          "anyOf": [
            {
              "type": "number",
              "minimum": 0,
              "maximum": 59
            },
            {
              "const": ""
            }
          ],
          "title": "Seconds",
          "description": "Extra seconds on top of the minutes (0–59)."
        },
        "autoStart": {
          "type": "string",
          "enum": [
            "off",
            "on",
            ""
          ],
          "title": "Auto-start"
        },
        "flashOnZero": {
          "type": "string",
          "enum": [
            "on",
            "off",
            ""
          ],
          "title": "Flash red at zero"
        },
        "soundOnZero": {
          "type": "string",
          "enum": [
            "off",
            "on",
            ""
          ],
          "title": "Beep at zero",
          "description": "Plays a short beep when the timer reaches zero. Browsers only allow sound after the presenter has interacted with the slide."
        },
        "zeroText": {
          "type": "string",
          "maxLength": 60,
          "title": "Text at zero",
          "description": "Shown big when the timer hits zero, e.g. \"Time!\". Leave empty for none."
        },
        "background": {
          "type": "string",
          "title": "Background"
        },
        "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
    },
    "translation_countdown_slide": {
      "title": "countdown-slide slide translation",
      "type": "object",
      "properties": {
        "title": {
          "type": "string",
          "maxLength": 120,
          "title": "Title"
        },
        "zeroText": {
          "type": "string",
          "maxLength": 60,
          "title": "Text at zero",
          "description": "Shown big when the timer hits zero, e.g. \"Time!\". Leave empty for none."
        },
        "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."
        },
        "notes": {
          "type": "string"
        }
      },
      "additionalProperties": true
    },
    "content_custom_html_slide": {
      "title": "custom-html-slide slide content",
      "type": "object",
      "properties": {
        "html": {
          "type": "string",
          "maxLength": 20000,
          "title": "HTML",
          "description": "Raw HTML for this slide. Scripts, iframes and forms are removed; structural HTML and SVG are kept. Theme tokens (var(--t-color-accent), …) are available."
        },
        "css": {
          "type": "string",
          "maxLength": 10000,
          "title": "CSS",
          "description": "CSS for this slide. Automatically scoped to the slide so it cannot affect the rest of the deck."
        },
        "background": {
          "type": "string",
          "title": "Background"
        },
        "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
    },
    "translation_custom_html_slide": {
      "title": "custom-html-slide slide translation",
      "type": "object",
      "properties": {
        "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."
        },
        "notes": {
          "type": "string"
        }
      },
      "additionalProperties": true
    },
    "content_cycle_slide": {
      "title": "cycle-slide slide content",
      "type": "object",
      "properties": {
        "title": {
          "type": "string",
          "maxLength": 120,
          "title": "Title"
        },
        "subheading": {
          "type": "string",
          "maxLength": 200,
          "title": "Subheading"
        },
        "bottomSubheading": {
          "type": "string",
          "maxLength": 200,
          "title": "Bottom subheading"
        },
        "centerLabel": {
          "type": "string",
          "maxLength": 60,
          "title": "Center label"
        },
        "items": {
          "type": "array",
          "items": {
            "type": "object",
            "properties": {
              "label": {
                "type": "string",
                "maxLength": 40,
                "title": "Stage label"
              },
              "text": {
                "type": "string",
                "maxLength": 80,
                "title": "Description"
              }
            },
            "additionalProperties": true,
            "required": [
              "label"
            ]
          },
          "minItems": 3,
          "maxItems": 6,
          "title": "Stages"
        },
        "background": {
          "type": "string",
          "title": "Background"
        },
        "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",
        "items"
      ]
    },
    "translation_cycle_slide": {
      "title": "cycle-slide slide translation",
      "type": "object",
      "properties": {
        "title": {
          "type": "string",
          "maxLength": 120,
          "title": "Title"
        },
        "subheading": {
          "type": "string",
          "maxLength": 200,
          "title": "Subheading"
        },
        "bottomSubheading": {
          "type": "string",
          "maxLength": 200,
          "title": "Bottom subheading"
        },
        "centerLabel": {
          "type": "string",
          "maxLength": 60,
          "title": "Center label"
        },
        "items": {
          "type": "array",
          "items": {
            "type": "object",
            "properties": {
              "label": {
                "type": "string",
                "maxLength": 40,
                "title": "Stage label"
              },
              "text": {
                "type": "string",
                "maxLength": 80,
                "title": "Description"
              }
            },
            "additionalProperties": true
          }
        },
        "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."
        },
        "notes": {
          "type": "string"
        }
      },
      "additionalProperties": true
    },
    "content_embed_slide": {
      "title": "embed-slide slide content",
      "type": "object",
      "properties": {
        "title": {
          "type": "string",
          "maxLength": 120,
          "title": "Title"
        },
        "embedUrl": {
          "type": "string",
          "maxLength": 500,
          "title": "Embed URL (HTTPS only)"
        },
        "aspectRatio": {
          "type": "string",
          "enum": [
            "16:9",
            "4:3",
            "1:1",
            "auto",
            ""
          ],
          "title": "Aspect ratio"
        },
        "sandbox": {
          "type": "string",
          "enum": [
            "restricted",
            "permissive",
            ""
          ],
          "title": "Sandbox mode",
          "description": "'restricted' blocks scripts and forms; only raise it to 'permissive' when the embedded page is interactive and the author asked for it."
        },
        "background": {
          "type": "string",
          "title": "Background"
        },
        "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": [
        "embedUrl"
      ]
    },
    "translation_embed_slide": {
      "title": "embed-slide slide translation",
      "type": "object",
      "properties": {
        "title": {
          "type": "string",
          "maxLength": 120,
          "title": "Title"
        },
        "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."
        },
        "notes": {
          "type": "string"
        }
      },
      "additionalProperties": true
    },
    "content_end_slide": {
      "title": "end-slide slide content",
      "type": "object",
      "properties": {
        "title": {
          "type": "string",
          "maxLength": 120,
          "title": "Title"
        },
        "body": {
          "type": "string",
          "maxLength": 500,
          "title": "Body (Markdown)"
        },
        "contactName": {
          "type": "string",
          "maxLength": 80,
          "title": "Contact name"
        },
        "contactEmail": {
          "type": "string",
          "maxLength": 120,
          "title": "Email"
        },
        "contactPhone": {
          "type": "string",
          "maxLength": 40,
          "title": "Phone"
        },
        "contactUrl": {
          "type": "string",
          "maxLength": 200,
          "title": "Website"
        },
        "social1Label": {
          "type": "string",
          "maxLength": 40,
          "title": "Social link 1 label"
        },
        "social1Url": {
          "type": "string",
          "maxLength": 200,
          "title": "Social link 1 URL"
        },
        "social2Label": {
          "type": "string",
          "maxLength": 40,
          "title": "Social link 2 label"
        },
        "social2Url": {
          "type": "string",
          "maxLength": 200,
          "title": "Social link 2 URL"
        },
        "background": {
          "type": "string",
          "title": "Background"
        },
        "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"
      ]
    },
    "translation_end_slide": {
      "title": "end-slide slide translation",
      "type": "object",
      "properties": {
        "title": {
          "type": "string",
          "maxLength": 120,
          "title": "Title"
        },
        "body": {
          "type": "string",
          "maxLength": 500,
          "title": "Body (Markdown)"
        },
        "contactName": {
          "type": "string",
          "maxLength": 80,
          "title": "Contact name"
        },
        "contactPhone": {
          "type": "string",
          "maxLength": 40,
          "title": "Phone"
        },
        "social1Label": {
          "type": "string",
          "maxLength": 40,
          "title": "Social link 1 label"
        },
        "social2Label": {
          "type": "string",
          "maxLength": 40,
          "title": "Social link 2 label"
        },
        "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."
        },
        "notes": {
          "type": "string"
        }
      },
      "additionalProperties": true
    },
    "content_feedback_slide": {
      "title": "feedback-slide slide content",
      "type": "object",
      "properties": {
        "question": {
          "type": "string",
          "maxLength": 200,
          "title": "Question"
        },
        "placeholder": {
          "type": "string",
          "maxLength": 120,
          "title": "Placeholder"
        },
        "background": {
          "type": "string",
          "title": "Background"
        },
        "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": [
        "question"
      ]
    },
    "translation_feedback_slide": {
      "title": "feedback-slide slide translation",
      "type": "object",
      "properties": {
        "question": {
          "type": "string",
          "maxLength": 200,
          "title": "Question"
        },
        "placeholder": {
          "type": "string",
          "maxLength": 120,
          "title": "Placeholder"
        },
        "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."
        },
        "notes": {
          "type": "string"
        }
      },
      "additionalProperties": true
    },
    "content_follow_invite_slide": {
      "title": "follow-invite-slide slide content",
      "type": "object",
      "properties": {
        "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
    },
    "translation_follow_invite_slide": {
      "title": "follow-invite-slide slide translation",
      "type": "object",
      "properties": {
        "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."
        },
        "notes": {
          "type": "string"
        }
      },
      "additionalProperties": true
    },
    "content_funnel_slide": {
      "title": "funnel-slide slide content",
      "type": "object",
      "properties": {
        "title": {
          "type": "string",
          "maxLength": 120,
          "title": "Title"
        },
        "subheading": {
          "type": "string",
          "maxLength": 200,
          "title": "Subheading"
        },
        "bottomSubheading": {
          "type": "string",
          "maxLength": 200,
          "title": "Bottom subheading"
        },
        "items": {
          "type": "array",
          "items": {
            "type": "object",
            "properties": {
              "label": {
                "type": "string",
                "maxLength": 60,
                "title": "Stage label"
              },
              "value": {
                "type": "string",
                "maxLength": 30,
                "title": "Value/metric"
              },
              "text": {
                "type": "string",
                "maxLength": 120,
                "title": "Description"
              }
            },
            "additionalProperties": true,
            "required": [
              "label"
            ]
          },
          "minItems": 3,
          "maxItems": 6,
          "title": "Stages"
        },
        "background": {
          "type": "string",
          "title": "Background"
        },
        "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",
        "items"
      ]
    },
    "translation_funnel_slide": {
      "title": "funnel-slide slide translation",
      "type": "object",
      "properties": {
        "title": {
          "type": "string",
          "maxLength": 120,
          "title": "Title"
        },
        "subheading": {
          "type": "string",
          "maxLength": 200,
          "title": "Subheading"
        },
        "bottomSubheading": {
          "type": "string",
          "maxLength": 200,
          "title": "Bottom subheading"
        },
        "items": {
          "type": "array",
          "items": {
            "type": "object",
            "properties": {
              "label": {
                "type": "string",
                "maxLength": 60,
                "title": "Stage label"
              },
              "value": {
                "type": "string",
                "maxLength": 30,
                "title": "Value/metric"
              },
              "text": {
                "type": "string",
                "maxLength": 120,
                "title": "Description"
              }
            },
            "additionalProperties": true
          }
        },
        "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."
        },
        "notes": {
          "type": "string"
        }
      },
      "additionalProperties": true
    },
    "content_gallery_slide": {
      "title": "gallery-slide slide content",
      "type": "object",
      "properties": {
        "title": {
          "type": "string",
          "maxLength": 120,
          "title": "Title"
        },
        "subheading": {
          "type": "string",
          "maxLength": 200,
          "title": "Subheading"
        },
        "bottomSubheading": {
          "type": "string",
          "maxLength": 200,
          "title": "Bottom subheading"
        },
        "layout": {
          "type": "string",
          "enum": [
            "grid",
            "masonry",
            "featured",
            ""
          ],
          "title": "Layout"
        },
        "images": {
          "type": "array",
          "items": {
            "type": "object",
            "properties": {
              "src": {
                "type": "string",
                "title": "Image URL"
              },
              "caption": {
                "type": "string",
                "maxLength": 100,
                "title": "Caption"
              },
              "alt": {
                "type": "string",
                "maxLength": 200,
                "title": "Alt text"
              }
            },
            "additionalProperties": true,
            "required": [
              "src"
            ]
          },
          "minItems": 2,
          "maxItems": 6,
          "title": "Images"
        },
        "background": {
          "type": "string",
          "title": "Background"
        },
        "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": [
        "images"
      ]
    },
    "translation_gallery_slide": {
      "title": "gallery-slide slide translation",
      "type": "object",
      "properties": {
        "title": {
          "type": "string",
          "maxLength": 120,
          "title": "Title"
        },
        "subheading": {
          "type": "string",
          "maxLength": 200,
          "title": "Subheading"
        },
        "bottomSubheading": {
          "type": "string",
          "maxLength": 200,
          "title": "Bottom subheading"
        },
        "images": {
          "type": "array",
          "items": {
            "type": "object",
            "properties": {
              "caption": {
                "type": "string",
                "maxLength": 100,
                "title": "Caption"
              },
              "alt": {
                "type": "string",
                "maxLength": 200,
                "title": "Alt text"
              }
            },
            "additionalProperties": true
          }
        },
        "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."
        },
        "notes": {
          "type": "string"
        }
      },
      "additionalProperties": true
    },
    "content_icon_card_grid_slide": {
      "title": "icon-card-grid-slide slide content",
      "type": "object",
      "properties": {
        "title": {
          "type": "string",
          "maxLength": 120,
          "title": "Title"
        },
        "subheading": {
          "type": "string",
          "maxLength": 200,
          "title": "Subheading"
        },
        "layout": {
          "type": "string",
          "enum": [
            "cards",
            "tiles",
            ""
          ],
          "title": "Layout"
        },
        "bottomSubheading": {
          "type": "string",
          "maxLength": 200,
          "title": "Bottom subheading"
        },
        "items": {
          "type": "array",
          "items": {
            "type": "object",
            "properties": {
              "icon": {
                "type": "string",
                "maxLength": 40,
                "title": "Icon"
              },
              "title": {
                "type": "string",
                "maxLength": 80,
                "title": "Title"
              },
              "body": {
                "type": "string",
                "maxLength": 700,
                "title": "Body"
              },
              "link": {
                "type": "string",
                "maxLength": 500,
                "title": "Link URL"
              }
            },
            "additionalProperties": true
          },
          "minItems": 1,
          "maxItems": 6,
          "title": "Cards"
        },
        "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"
      ]
    },
    "translation_icon_card_grid_slide": {
      "title": "icon-card-grid-slide slide translation",
      "type": "object",
      "properties": {
        "title": {
          "type": "string",
          "maxLength": 120,
          "title": "Title"
        },
        "subheading": {
          "type": "string",
          "maxLength": 200,
          "title": "Subheading"
        },
        "bottomSubheading": {
          "type": "string",
          "maxLength": 200,
          "title": "Bottom subheading"
        },
        "items": {
          "type": "array",
          "items": {
            "type": "object",
            "properties": {
              "icon": {
                "type": "string",
                "maxLength": 40,
                "title": "Icon"
              },
              "title": {
                "type": "string",
                "maxLength": 80,
                "title": "Title"
              },
              "body": {
                "type": "string",
                "maxLength": 700,
                "title": "Body"
              }
            },
            "additionalProperties": true
          }
        },
        "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."
        },
        "notes": {
          "type": "string"
        }
      },
      "additionalProperties": true
    },
    "content_image_set_slide": {
      "title": "image-set-slide slide content",
      "type": "object",
      "properties": {
        "title": {
          "type": "string",
          "maxLength": 120,
          "title": "Title"
        },
        "body": {
          "type": "string",
          "maxLength": 3000,
          "title": "Body (Markdown)"
        },
        "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"
              }
            },
            "additionalProperties": true
          },
          "minItems": 2,
          "maxItems": 3,
          "title": "Images"
        },
        "caption": {
          "type": "string",
          "maxLength": 160,
          "title": "Caption"
        },
        "imageRole": {
          "type": "string",
          "enum": [
            "content",
            "decorative",
            ""
          ],
          "title": "Image role"
        },
        "layout": {
          "type": "string",
          "enum": [
            "beside",
            "top",
            "bottom",
            ""
          ],
          "title": "Layout"
        },
        "imageSide": {
          "type": "string",
          "enum": [
            "left",
            "right",
            ""
          ],
          "title": "Image position"
        },
        "imageWidth": {
          "type": "string",
          "enum": [
            "half",
            "narrow",
            "wide",
            ""
          ],
          "title": "Image width"
        },
        "textColumns": {
          "type": "string",
          "enum": [
            "1",
            "2",
            ""
          ],
          "title": "Text columns"
        },
        "imageBackground": {
          "type": "string",
          "enum": [
            "white",
            "match",
            ""
          ],
          "title": "Image background"
        },
        "density": {
          "type": "string",
          "enum": [
            "auto",
            "compact",
            ""
          ],
          "title": "Text size"
        },
        "asideVariant": {
          "type": "string",
          "enum": [
            "none",
            "note",
            "tip",
            "warning",
            ""
          ],
          "title": "Aside"
        },
        "asideText": {
          "type": "string",
          "maxLength": 300,
          "title": "Aside text"
        },
        "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",
        "images"
      ]
    },
    "translation_image_set_slide": {
      "title": "image-set-slide slide translation",
      "type": "object",
      "properties": {
        "title": {
          "type": "string",
          "maxLength": 120,
          "title": "Title"
        },
        "body": {
          "type": "string",
          "maxLength": 3000,
          "title": "Body (Markdown)"
        },
        "images": {
          "type": "array",
          "items": {
            "type": "object",
            "properties": {
              "alt": {
                "type": "string",
                "maxLength": 180,
                "title": "Alt text"
              }
            },
            "additionalProperties": true
          }
        },
        "caption": {
          "type": "string",
          "maxLength": 160,
          "title": "Caption"
        },
        "asideText": {
          "type": "string",
          "maxLength": 300,
          "title": "Aside text"
        },
        "actions": {
          "type": "array",
          "items": {
            "type": "object",
            "properties": {
              "label": {
                "type": "string",
                "maxLength": 40,
                "title": "Button label"
              }
            },
            "additionalProperties": true
          }
        },
        "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."
        },
        "notes": {
          "type": "string"
        }
      },
      "additionalProperties": true
    },
    "content_image_slide": {
      "title": "image-slide slide content",
      "type": "object",
      "properties": {
        "title": {
          "type": "string",
          "maxLength": 80,
          "title": "Title"
        },
        "subheading": {
          "type": "string",
          "maxLength": 140,
          "title": "Subheading"
        },
        "bottomSubheading": {
          "type": "string",
          "maxLength": 200,
          "title": "Bottom subheading"
        },
        "image": {
          "type": "string",
          "title": "Image"
        },
        "imageRole": {
          "type": "string",
          "enum": [
            "content",
            "decorative",
            ""
          ],
          "title": "Image role"
        },
        "alt": {
          "type": "string",
          "maxLength": 180,
          "title": "Alt text"
        },
        "caption": {
          "type": "string",
          "maxLength": 160,
          "title": "Caption"
        },
        "fit": {
          "type": "string",
          "enum": [
            "cover",
            "contain",
            ""
          ],
          "title": "Image fit"
        },
        "bleed": {
          "anyOf": [
            {
              "type": "boolean"
            },
            {
              "const": ""
            }
          ],
          "title": "Edge-to-edge"
        },
        "background": {
          "type": "string",
          "title": "Background"
        },
        "zoomSteps": {
          "type": "string",
          "enum": [
            "",
            "corners",
            "horizontal",
            "vertical",
            "quadrants",
            "custom"
          ],
          "title": "Zoom steps",
          "description": "Enable step-through zoom regions during presentation."
        },
        "zoomLevel": {
          "anyOf": [
            {
              "type": "number",
              "minimum": 1.2,
              "maximum": 5
            },
            {
              "const": ""
            }
          ],
          "title": "Zoom level",
          "description": "Zoom magnification (default: 2x). Higher = more zoom."
        },
        "zoomPositions": {
          "type": "string",
          "maxLength": 500,
          "title": "Custom zoom positions",
          "description": "Custom positions as JSON array. X/Y are percentages (0-100)."
        },
        "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
    },
    "translation_image_slide": {
      "title": "image-slide slide translation",
      "type": "object",
      "properties": {
        "title": {
          "type": "string",
          "maxLength": 80,
          "title": "Title"
        },
        "subheading": {
          "type": "string",
          "maxLength": 140,
          "title": "Subheading"
        },
        "bottomSubheading": {
          "type": "string",
          "maxLength": 200,
          "title": "Bottom subheading"
        },
        "alt": {
          "type": "string",
          "maxLength": 180,
          "title": "Alt text"
        },
        "caption": {
          "type": "string",
          "maxLength": 160,
          "title": "Caption"
        },
        "zoomPositions": {
          "type": "string",
          "maxLength": 500,
          "title": "Custom zoom positions",
          "description": "Custom positions as JSON array. X/Y are percentages (0-100)."
        },
        "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."
        },
        "notes": {
          "type": "string"
        }
      },
      "additionalProperties": true
    },
    "content_image_text_slide": {
      "title": "image-text-slide slide content",
      "type": "object",
      "properties": {
        "title": {
          "type": "string",
          "maxLength": 120,
          "title": "Title"
        },
        "body": {
          "type": "string",
          "maxLength": 3000,
          "title": "Body (Markdown)"
        },
        "image": {
          "type": "string",
          "title": "Image"
        },
        "imageRole": {
          "type": "string",
          "enum": [
            "content",
            "decorative",
            ""
          ],
          "title": "Image role"
        },
        "alt": {
          "type": "string",
          "maxLength": 180,
          "title": "Alt text"
        },
        "caption": {
          "type": "string",
          "maxLength": 160,
          "title": "Caption"
        },
        "fit": {
          "type": "string",
          "enum": [
            "cover",
            "contain",
            ""
          ],
          "title": "Image fit"
        },
        "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",
            ""
          ],
          "title": "Layout"
        },
        "imageBackground": {
          "type": "string",
          "enum": [
            "white",
            "match",
            ""
          ],
          "title": "Image background"
        },
        "density": {
          "type": "string",
          "enum": [
            "auto",
            "compact",
            ""
          ],
          "title": "Text size"
        },
        "asideVariant": {
          "type": "string",
          "enum": [
            "none",
            "note",
            "tip",
            "warning",
            ""
          ],
          "title": "Aside"
        },
        "asideText": {
          "type": "string",
          "maxLength": 300,
          "title": "Aside text"
        },
        "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"
      ]
    },
    "translation_image_text_slide": {
      "title": "image-text-slide slide translation",
      "type": "object",
      "properties": {
        "title": {
          "type": "string",
          "maxLength": 120,
          "title": "Title"
        },
        "body": {
          "type": "string",
          "maxLength": 3000,
          "title": "Body (Markdown)"
        },
        "alt": {
          "type": "string",
          "maxLength": 180,
          "title": "Alt text"
        },
        "caption": {
          "type": "string",
          "maxLength": 160,
          "title": "Caption"
        },
        "asideText": {
          "type": "string",
          "maxLength": 300,
          "title": "Aside text"
        },
        "actions": {
          "type": "array",
          "items": {
            "type": "object",
            "properties": {
              "label": {
                "type": "string",
                "maxLength": 40,
                "title": "Button label"
              }
            },
            "additionalProperties": true
          }
        },
        "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."
        },
        "notes": {
          "type": "string"
        }
      },
      "additionalProperties": true
    },
    "content_kpi_metrics_slide": {
      "title": "kpi-metrics-slide slide content",
      "type": "object",
      "properties": {
        "title": {
          "type": "string",
          "maxLength": 120,
          "title": "Title"
        },
        "subheading": {
          "type": "string",
          "maxLength": 200,
          "title": "Subheading"
        },
        "bottomSubheading": {
          "type": "string",
          "maxLength": 200,
          "title": "Bottom subheading"
        },
        "background": {
          "type": "string",
          "title": "Background"
        },
        "accent": {
          "type": "string",
          "enum": [
            "none",
            "highlight-best",
            "highlight-risk",
            ""
          ],
          "title": "Accent"
        },
        "countUp": {
          "type": "string",
          "enum": [
            "off",
            "on",
            ""
          ],
          "title": "Count-up animation"
        },
        "metrics": {
          "type": "array",
          "items": {
            "type": "object",
            "properties": {
              "value": {
                "type": "string",
                "maxLength": 30,
                "title": "Value"
              },
              "unit": {
                "type": "string",
                "maxLength": 12,
                "title": "Unit"
              },
              "label": {
                "type": "string",
                "maxLength": 60,
                "title": "Label"
              },
              "note": {
                "type": "string",
                "maxLength": 100,
                "title": "Note"
              }
            },
            "additionalProperties": true
          },
          "minItems": 1,
          "maxItems": 4,
          "title": "Metrics"
        },
        "headerAlign": {
          "type": "string",
          "enum": [
            "left",
            "center",
            ""
          ],
          "title": "Header alignment"
        },
        "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
    },
    "translation_kpi_metrics_slide": {
      "title": "kpi-metrics-slide slide translation",
      "type": "object",
      "properties": {
        "title": {
          "type": "string",
          "maxLength": 120,
          "title": "Title"
        },
        "subheading": {
          "type": "string",
          "maxLength": 200,
          "title": "Subheading"
        },
        "bottomSubheading": {
          "type": "string",
          "maxLength": 200,
          "title": "Bottom subheading"
        },
        "metrics": {
          "type": "array",
          "items": {
            "type": "object",
            "properties": {
              "value": {
                "type": "string",
                "maxLength": 30,
                "title": "Value"
              },
              "unit": {
                "type": "string",
                "maxLength": 12,
                "title": "Unit"
              },
              "label": {
                "type": "string",
                "maxLength": 60,
                "title": "Label"
              },
              "note": {
                "type": "string",
                "maxLength": 100,
                "title": "Note"
              }
            },
            "additionalProperties": true
          }
        },
        "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."
        },
        "notes": {
          "type": "string"
        }
      },
      "additionalProperties": true
    },
    "content_likert_slide": {
      "title": "likert-slide slide content",
      "type": "object",
      "properties": {
        "question": {
          "type": "string",
          "maxLength": 200,
          "title": "Vraag / Question"
        },
        "options": {
          "type": "array",
          "items": {
            "type": "object",
            "properties": {
              "text": {
                "type": "string",
                "maxLength": 120,
                "title": "Label"
              }
            },
            "additionalProperties": true,
            "required": [
              "text"
            ]
          },
          "minItems": 2,
          "maxItems": 10,
          "title": "Scale labels"
        },
        "background": {
          "type": "string",
          "title": "Background"
        },
        "onClose": {
          "type": "string",
          "enum": [
            "stay",
            "next",
            "goto",
            ""
          ],
          "title": "When closed"
        },
        "onCloseTarget": {
          "type": "string",
          "maxLength": 100,
          "title": "Target slide ID"
        },
        "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": [
        "question",
        "options"
      ]
    },
    "translation_likert_slide": {
      "title": "likert-slide slide translation",
      "type": "object",
      "properties": {
        "question": {
          "type": "string",
          "maxLength": 200,
          "title": "Vraag / Question"
        },
        "options": {
          "type": "array",
          "items": {
            "type": "object",
            "properties": {
              "text": {
                "type": "string",
                "maxLength": 120,
                "title": "Label"
              }
            },
            "additionalProperties": true
          }
        },
        "onCloseTarget": {
          "type": "string",
          "maxLength": 100,
          "title": "Target slide ID"
        },
        "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."
        },
        "notes": {
          "type": "string"
        }
      },
      "additionalProperties": true
    },
    "content_likert_slider_slide": {
      "title": "likert-slider-slide slide content",
      "type": "object",
      "properties": {
        "question": {
          "type": "string",
          "maxLength": 200,
          "title": "Stelling / Statement"
        },
        "minLabel": {
          "type": "string",
          "maxLength": 120,
          "title": "Label links (1)"
        },
        "maxLabel": {
          "type": "string",
          "maxLength": 120,
          "title": "Label rechts (10)"
        },
        "background": {
          "type": "string",
          "title": "Background"
        },
        "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": [
        "question"
      ]
    },
    "translation_likert_slider_slide": {
      "title": "likert-slider-slide slide translation",
      "type": "object",
      "properties": {
        "question": {
          "type": "string",
          "maxLength": 200,
          "title": "Stelling / Statement"
        },
        "minLabel": {
          "type": "string",
          "maxLength": 120,
          "title": "Label links (1)"
        },
        "maxLabel": {
          "type": "string",
          "maxLength": 120,
          "title": "Label rechts (10)"
        },
        "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."
        },
        "notes": {
          "type": "string"
        }
      },
      "additionalProperties": true
    },
    "content_list_slide": {
      "title": "list-slide slide content",
      "type": "object",
      "properties": {
        "title": {
          "type": "string",
          "maxLength": 120,
          "title": "Title"
        },
        "subheading": {
          "type": "string",
          "maxLength": 160,
          "title": "Subheading"
        },
        "variant": {
          "type": "string",
          "enum": [
            "bullets",
            "numbers",
            ""
          ],
          "title": "Style"
        },
        "layout": {
          "type": "string",
          "enum": [
            "auto",
            "one-column",
            "two-column",
            ""
          ],
          "title": "Layout"
        },
        "density": {
          "type": "string",
          "enum": [
            "auto",
            "comfortable",
            "compact",
            ""
          ],
          "title": "Text size"
        },
        "asideVariant": {
          "type": "string",
          "enum": [
            "none",
            "note",
            "tip",
            "warning",
            ""
          ],
          "title": "Aside"
        },
        "asideText": {
          "type": "string",
          "maxLength": 300,
          "title": "Aside text"
        },
        "background": {
          "type": "string",
          "title": "Background"
        },
        "items": {
          "type": "array",
          "items": {
            "type": "object",
            "properties": {
              "title": {
                "type": "string",
                "maxLength": 80,
                "title": "Title"
              },
              "text": {
                "type": "string",
                "maxLength": 120,
                "title": "Text (single line)"
              }
            },
            "additionalProperties": true,
            "required": [
              "title"
            ]
          },
          "minItems": 2,
          "maxItems": 8,
          "title": "Items"
        },
        "headerAlign": {
          "type": "string",
          "enum": [
            "left",
            "center",
            ""
          ],
          "title": "Header alignment"
        },
        "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",
        "items"
      ]
    },
    "translation_list_slide": {
      "title": "list-slide slide translation",
      "type": "object",
      "properties": {
        "title": {
          "type": "string",
          "maxLength": 120,
          "title": "Title"
        },
        "subheading": {
          "type": "string",
          "maxLength": 160,
          "title": "Subheading"
        },
        "asideText": {
          "type": "string",
          "maxLength": 300,
          "title": "Aside text"
        },
        "items": {
          "type": "array",
          "items": {
            "type": "object",
            "properties": {
              "title": {
                "type": "string",
                "maxLength": 80,
                "title": "Title"
              },
              "text": {
                "type": "string",
                "maxLength": 120,
                "title": "Text (single line)"
              }
            },
            "additionalProperties": true
          }
        },
        "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."
        },
        "notes": {
          "type": "string"
        }
      },
      "additionalProperties": true
    },
    "content_logo_wall_slide": {
      "title": "logo-wall-slide slide content",
      "type": "object",
      "properties": {
        "headerAlign": {
          "type": "string",
          "enum": [
            "left",
            "center",
            ""
          ],
          "title": "Header alignment"
        },
        "title": {
          "type": "string",
          "maxLength": 120,
          "title": "Title"
        },
        "subheading": {
          "type": "string",
          "maxLength": 220,
          "title": "Subheading"
        },
        "background": {
          "type": "string",
          "title": "Background"
        },
        "logos": {
          "type": "array",
          "items": {
            "type": "object",
            "properties": {
              "image": {
                "type": "string",
                "title": "Logo image"
              },
              "name": {
                "type": "string",
                "maxLength": 80,
                "title": "Name"
              },
              "alt": {
                "type": "string",
                "maxLength": 180,
                "title": "Alt text"
              },
              "link": {
                "type": "string",
                "maxLength": 500,
                "title": "Link URL"
              }
            },
            "additionalProperties": true
          },
          "minItems": 0,
          "maxItems": 30,
          "title": "Logos"
        },
        "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
    },
    "translation_logo_wall_slide": {
      "title": "logo-wall-slide slide translation",
      "type": "object",
      "properties": {
        "title": {
          "type": "string",
          "maxLength": 120,
          "title": "Title"
        },
        "subheading": {
          "type": "string",
          "maxLength": 220,
          "title": "Subheading"
        },
        "logos": {
          "type": "array",
          "items": {
            "type": "object",
            "properties": {
              "name": {
                "type": "string",
                "maxLength": 80,
                "title": "Name"
              },
              "alt": {
                "type": "string",
                "maxLength": 180,
                "title": "Alt text"
              }
            },
            "additionalProperties": true
          }
        },
        "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."
        },
        "notes": {
          "type": "string"
        }
      },
      "additionalProperties": true
    },
    "content_matrix_slide": {
      "title": "matrix-slide slide content",
      "type": "object",
      "properties": {
        "title": {
          "type": "string",
          "maxLength": 120,
          "title": "Title"
        },
        "subheading": {
          "type": "string",
          "maxLength": 200,
          "title": "Subheading"
        },
        "bottomSubheading": {
          "type": "string",
          "maxLength": 200,
          "title": "Bottom subheading"
        },
        "cells": {
          "type": "array",
          "items": {
            "type": "object",
            "properties": {
              "title": {
                "type": "string",
                "maxLength": 40,
                "title": "Cell title"
              },
              "body": {
                "type": "string",
                "maxLength": 1000,
                "title": "Cell content"
              },
              "tone": {
                "type": "string",
                "enum": [
                  "default",
                  "positive",
                  "negative",
                  "neutral",
                  ""
                ],
                "title": "Tone"
              }
            },
            "additionalProperties": true,
            "required": [
              "title",
              "body"
            ]
          },
          "minItems": 4,
          "maxItems": 4,
          "title": "Cells"
        },
        "background": {
          "type": "string",
          "title": "Background"
        },
        "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": [
        "cells"
      ]
    },
    "translation_matrix_slide": {
      "title": "matrix-slide slide translation",
      "type": "object",
      "properties": {
        "title": {
          "type": "string",
          "maxLength": 120,
          "title": "Title"
        },
        "subheading": {
          "type": "string",
          "maxLength": 200,
          "title": "Subheading"
        },
        "bottomSubheading": {
          "type": "string",
          "maxLength": 200,
          "title": "Bottom subheading"
        },
        "cells": {
          "type": "array",
          "items": {
            "type": "object",
            "properties": {
              "title": {
                "type": "string",
                "maxLength": 40,
                "title": "Cell title"
              },
              "body": {
                "type": "string",
                "maxLength": 1000,
                "title": "Cell content"
              }
            },
            "additionalProperties": true
          }
        },
        "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."
        },
        "notes": {
          "type": "string"
        }
      },
      "additionalProperties": true
    },
    "content_payoff_slide": {
      "title": "payoff-slide slide content",
      "type": "object",
      "properties": {
        "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
    },
    "translation_payoff_slide": {
      "title": "payoff-slide slide translation",
      "type": "object",
      "properties": {
        "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."
        },
        "notes": {
          "type": "string"
        }
      },
      "additionalProperties": true
    },
    "content_poll_slide": {
      "title": "poll-slide slide content",
      "type": "object",
      "properties": {
        "question": {
          "type": "string",
          "maxLength": 200,
          "title": "Question"
        },
        "options": {
          "type": "array",
          "items": {
            "type": "object",
            "properties": {
              "text": {
                "type": "string",
                "maxLength": 120,
                "title": "Answer"
              }
            },
            "additionalProperties": true,
            "required": [
              "text"
            ]
          },
          "minItems": 2,
          "maxItems": 4,
          "title": "Answers"
        },
        "background": {
          "type": "string",
          "title": "Background"
        },
        "onClose": {
          "type": "string",
          "enum": [
            "stay",
            "next",
            "goto",
            ""
          ],
          "title": "When closed"
        },
        "onCloseTarget": {
          "type": "string",
          "maxLength": 100,
          "title": "Target slide ID"
        },
        "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": [
        "question",
        "options"
      ]
    },
    "translation_poll_slide": {
      "title": "poll-slide slide translation",
      "type": "object",
      "properties": {
        "question": {
          "type": "string",
          "maxLength": 200,
          "title": "Question"
        },
        "options": {
          "type": "array",
          "items": {
            "type": "object",
            "properties": {
              "text": {
                "type": "string",
                "maxLength": 120,
                "title": "Answer"
              }
            },
            "additionalProperties": true
          }
        },
        "onCloseTarget": {
          "type": "string",
          "maxLength": 100,
          "title": "Target slide ID"
        },
        "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."
        },
        "notes": {
          "type": "string"
        }
      },
      "additionalProperties": true
    },
    "content_process_slide": {
      "title": "process-slide slide content",
      "type": "object",
      "properties": {
        "title": {
          "type": "string",
          "maxLength": 120,
          "title": "Title"
        },
        "subheading": {
          "type": "string",
          "maxLength": 200,
          "title": "Subheading"
        },
        "bottomSubheading": {
          "type": "string",
          "maxLength": 200,
          "title": "Bottom subheading"
        },
        "direction": {
          "type": "string",
          "enum": [
            "horizontal",
            "vertical",
            ""
          ],
          "title": "Direction"
        },
        "items": {
          "type": "array",
          "items": {
            "type": "object",
            "properties": {
              "title": {
                "type": "string",
                "maxLength": 60,
                "title": "Step title"
              },
              "text": {
                "type": "string",
                "maxLength": 200,
                "title": "Step description"
              }
            },
            "additionalProperties": true,
            "required": [
              "title"
            ]
          },
          "minItems": 3,
          "maxItems": 7,
          "title": "Steps"
        },
        "background": {
          "type": "string",
          "title": "Background"
        },
        "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",
        "items"
      ]
    },
    "translation_process_slide": {
      "title": "process-slide slide translation",
      "type": "object",
      "properties": {
        "title": {
          "type": "string",
          "maxLength": 120,
          "title": "Title"
        },
        "subheading": {
          "type": "string",
          "maxLength": 200,
          "title": "Subheading"
        },
        "bottomSubheading": {
          "type": "string",
          "maxLength": 200,
          "title": "Bottom subheading"
        },
        "items": {
          "type": "array",
          "items": {
            "type": "object",
            "properties": {
              "title": {
                "type": "string",
                "maxLength": 60,
                "title": "Step title"
              },
              "text": {
                "type": "string",
                "maxLength": 200,
                "title": "Step description"
              }
            },
            "additionalProperties": true
          }
        },
        "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."
        },
        "notes": {
          "type": "string"
        }
      },
      "additionalProperties": true
    },
    "content_pyramid_slide": {
      "title": "pyramid-slide slide content",
      "type": "object",
      "properties": {
        "title": {
          "type": "string",
          "maxLength": 120,
          "title": "Title"
        },
        "subheading": {
          "type": "string",
          "maxLength": 200,
          "title": "Subheading"
        },
        "bottomSubheading": {
          "type": "string",
          "maxLength": 200,
          "title": "Bottom subheading"
        },
        "levels": {
          "type": "array",
          "items": {
            "type": "object",
            "properties": {
              "label": {
                "type": "string",
                "maxLength": 60,
                "title": "Level label"
              },
              "text": {
                "type": "string",
                "maxLength": 120,
                "title": "Description"
              }
            },
            "additionalProperties": true,
            "required": [
              "label"
            ]
          },
          "minItems": 3,
          "maxItems": 6,
          "title": "Levels"
        },
        "background": {
          "type": "string",
          "title": "Background"
        },
        "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",
        "levels"
      ]
    },
    "translation_pyramid_slide": {
      "title": "pyramid-slide slide translation",
      "type": "object",
      "properties": {
        "title": {
          "type": "string",
          "maxLength": 120,
          "title": "Title"
        },
        "subheading": {
          "type": "string",
          "maxLength": 200,
          "title": "Subheading"
        },
        "bottomSubheading": {
          "type": "string",
          "maxLength": 200,
          "title": "Bottom subheading"
        },
        "levels": {
          "type": "array",
          "items": {
            "type": "object",
            "properties": {
              "label": {
                "type": "string",
                "maxLength": 60,
                "title": "Level label"
              },
              "text": {
                "type": "string",
                "maxLength": 120,
                "title": "Description"
              }
            },
            "additionalProperties": true
          }
        },
        "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."
        },
        "notes": {
          "type": "string"
        }
      },
      "additionalProperties": true
    },
    "content_quote_slide": {
      "title": "quote-slide slide content",
      "type": "object",
      "properties": {
        "quoteAlign": {
          "type": "string",
          "enum": [
            "left",
            "center",
            ""
          ],
          "title": "Quote block alignment"
        },
        "quote": {
          "type": "string",
          "maxLength": 400,
          "title": "Quote"
        },
        "authorName": {
          "type": "string",
          "maxLength": 80,
          "title": "Name"
        },
        "authorTitle": {
          "type": "string",
          "maxLength": 120,
          "title": "Role / title"
        },
        "authorImage1": {
          "type": "string",
          "title": "Portrait photo 1 (optional)"
        },
        "authorImage1Alt": {
          "type": "string",
          "maxLength": 180,
          "title": "Portrait 1 alt text (optional)"
        },
        "authorImage2": {
          "type": "string",
          "title": "Portrait photo 2 (optional)"
        },
        "authorImage2Alt": {
          "type": "string",
          "maxLength": 180,
          "title": "Portrait 2 alt text (optional)"
        },
        "quotes": {
          "type": "array",
          "items": {
            "type": "object",
            "properties": {
              "quote": {
                "type": "string",
                "maxLength": 400,
                "title": "Quote"
              },
              "authorName": {
                "type": "string",
                "maxLength": 80,
                "title": "Name"
              },
              "authorTitle": {
                "type": "string",
                "maxLength": 120,
                "title": "Role / title"
              },
              "authorImage": {
                "type": "string",
                "title": "Portrait photo 1 (optional)"
              },
              "authorImageAlt": {
                "type": "string",
                "maxLength": 180,
                "title": "Portrait 1 alt text (optional)"
              },
              "authorImage2": {
                "type": "string",
                "title": "Portrait photo 2 (optional)"
              },
              "authorImage2Alt": {
                "type": "string",
                "maxLength": 180,
                "title": "Portrait 2 alt text (optional)"
              }
            },
            "additionalProperties": true,
            "required": [
              "quote"
            ]
          },
          "minItems": 0,
          "maxItems": 2,
          "title": "Extra quotes (optional, max 2)"
        },
        "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": [
        "quote",
        "authorName",
        "authorTitle"
      ]
    },
    "translation_quote_slide": {
      "title": "quote-slide slide translation",
      "type": "object",
      "properties": {
        "quote": {
          "type": "string",
          "maxLength": 400,
          "title": "Quote"
        },
        "authorName": {
          "type": "string",
          "maxLength": 80,
          "title": "Name"
        },
        "authorTitle": {
          "type": "string",
          "maxLength": 120,
          "title": "Role / title"
        },
        "authorImage1Alt": {
          "type": "string",
          "maxLength": 180,
          "title": "Portrait 1 alt text (optional)"
        },
        "authorImage2Alt": {
          "type": "string",
          "maxLength": 180,
          "title": "Portrait 2 alt text (optional)"
        },
        "quotes": {
          "type": "array",
          "items": {
            "type": "object",
            "properties": {
              "quote": {
                "type": "string",
                "maxLength": 400,
                "title": "Quote"
              },
              "authorName": {
                "type": "string",
                "maxLength": 80,
                "title": "Name"
              },
              "authorTitle": {
                "type": "string",
                "maxLength": 120,
                "title": "Role / title"
              },
              "authorImageAlt": {
                "type": "string",
                "maxLength": 180,
                "title": "Portrait 1 alt text (optional)"
              },
              "authorImage2Alt": {
                "type": "string",
                "maxLength": 180,
                "title": "Portrait 2 alt text (optional)"
              }
            },
            "additionalProperties": true
          }
        },
        "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."
        },
        "notes": {
          "type": "string"
        }
      },
      "additionalProperties": true
    },
    "content_table_slide": {
      "title": "table-slide slide content",
      "type": "object",
      "properties": {
        "title": {
          "type": "string",
          "maxLength": 120,
          "title": "Title"
        },
        "caption": {
          "type": "string",
          "maxLength": 240,
          "title": "Caption"
        },
        "headerRow": {
          "type": "string",
          "enum": [
            "on",
            "off",
            ""
          ],
          "title": "Header row"
        },
        "tableStyle": {
          "type": "string",
          "enum": [
            "plain",
            "panel",
            "soft",
            ""
          ],
          "title": "Table style"
        },
        "cornerCell": {
          "type": "string",
          "enum": [
            "label",
            "header",
            ""
          ],
          "title": "Top-left cell",
          "description": "Which band the top-left corner cell belongs to. \"label\" (default) keeps it the label-column colour, so it reads as the head of the first column (the historical look). \"header\" gives it the header-row colour instead, so the entire top row is one colour. Orthogonal to Table style — works with every style."
        },
        "animateByCell": {
          "type": "string",
          "enum": [
            "off",
            "on",
            ""
          ],
          "title": "Animate by cell"
        },
        "rows": {
          "type": "array",
          "items": {
            "type": "object",
            "properties": {
              "c1": {
                "type": "string",
                "maxLength": 400,
                "title": "C1"
              },
              "c2": {
                "type": "string",
                "maxLength": 400,
                "title": "C2"
              },
              "c3": {
                "type": "string",
                "maxLength": 400,
                "title": "C3"
              },
              "c4": {
                "type": "string",
                "maxLength": 400,
                "title": "C4"
              },
              "c5": {
                "type": "string",
                "maxLength": 400,
                "title": "C5"
              },
              "c6": {
                "type": "string",
                "maxLength": 400,
                "title": "C6"
              },
              "c7": {
                "type": "string",
                "maxLength": 400,
                "title": "C7"
              },
              "c8": {
                "type": "string",
                "maxLength": 400,
                "title": "C8"
              },
              "c9": {
                "type": "string",
                "maxLength": 400,
                "title": "C9"
              },
              "c10": {
                "type": "string",
                "maxLength": 400,
                "title": "C10"
              }
            },
            "additionalProperties": true
          },
          "maxItems": 40,
          "title": "Rows"
        },
        "background": {
          "type": "string",
          "title": "Background"
        },
        "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"
      ]
    },
    "translation_table_slide": {
      "title": "table-slide slide translation",
      "type": "object",
      "properties": {
        "title": {
          "type": "string",
          "maxLength": 120,
          "title": "Title"
        },
        "caption": {
          "type": "string",
          "maxLength": 240,
          "title": "Caption"
        },
        "rows": {
          "type": "array",
          "items": {
            "type": "object",
            "properties": {
              "c1": {
                "type": "string",
                "maxLength": 400,
                "title": "C1"
              },
              "c2": {
                "type": "string",
                "maxLength": 400,
                "title": "C2"
              },
              "c3": {
                "type": "string",
                "maxLength": 400,
                "title": "C3"
              },
              "c4": {
                "type": "string",
                "maxLength": 400,
                "title": "C4"
              },
              "c5": {
                "type": "string",
                "maxLength": 400,
                "title": "C5"
              },
              "c6": {
                "type": "string",
                "maxLength": 400,
                "title": "C6"
              },
              "c7": {
                "type": "string",
                "maxLength": 400,
                "title": "C7"
              },
              "c8": {
                "type": "string",
                "maxLength": 400,
                "title": "C8"
              },
              "c9": {
                "type": "string",
                "maxLength": 400,
                "title": "C9"
              },
              "c10": {
                "type": "string",
                "maxLength": 400,
                "title": "C10"
              }
            },
            "additionalProperties": true
          }
        },
        "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."
        },
        "notes": {
          "type": "string"
        }
      },
      "additionalProperties": true
    },
    "content_team_cards_slide": {
      "title": "team-cards-slide slide content",
      "type": "object",
      "properties": {
        "title": {
          "type": "string",
          "maxLength": 120,
          "title": "Title"
        },
        "subheading": {
          "type": "string",
          "maxLength": 220,
          "title": "Subheading"
        },
        "bottomSubheading": {
          "type": "string",
          "maxLength": 200,
          "title": "Bottom subheading"
        },
        "subheading2": {
          "type": "string",
          "maxLength": 220,
          "title": "Right group subheading"
        },
        "members": {
          "type": "array",
          "items": {
            "type": "object",
            "properties": {
              "image": {
                "type": "string",
                "title": "Photo"
              },
              "alt": {
                "type": "string",
                "maxLength": 180,
                "title": "Photo alt text"
              },
              "name": {
                "type": "string",
                "maxLength": 80,
                "title": "Title"
              },
              "byline": {
                "type": "string",
                "maxLength": 120,
                "title": "Caption"
              },
              "linkedin": {
                "type": "string",
                "maxLength": 300,
                "title": "LinkedIn URL"
              }
            },
            "additionalProperties": true
          },
          "minItems": 0,
          "maxItems": 25,
          "title": "Members"
        },
        "background": {
          "type": "string",
          "title": "Background"
        },
        "textPosition": {
          "type": "string",
          "enum": [
            "below",
            "split",
            ""
          ],
          "title": "Text position"
        },
        "imageShape": {
          "type": "string",
          "enum": [
            "rounded",
            "square",
            "circle",
            ""
          ],
          "title": "Image shape"
        },
        "imageAspect": {
          "type": "string",
          "enum": [
            "square",
            "original",
            ""
          ],
          "title": "Image aspect"
        },
        "showPhotoFrame": {
          "type": "string",
          "enum": [
            "off",
            "on",
            ""
          ],
          "title": "Show photo frame"
        },
        "columnSplit": {
          "type": "string",
          "enum": [
            "",
            "1",
            "2",
            "3",
            "4",
            "5"
          ],
          "title": "Column split"
        },
        "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
    },
    "translation_team_cards_slide": {
      "title": "team-cards-slide slide translation",
      "type": "object",
      "properties": {
        "title": {
          "type": "string",
          "maxLength": 120,
          "title": "Title"
        },
        "subheading": {
          "type": "string",
          "maxLength": 220,
          "title": "Subheading"
        },
        "bottomSubheading": {
          "type": "string",
          "maxLength": 200,
          "title": "Bottom subheading"
        },
        "subheading2": {
          "type": "string",
          "maxLength": 220,
          "title": "Right group subheading"
        },
        "members": {
          "type": "array",
          "items": {
            "type": "object",
            "properties": {
              "alt": {
                "type": "string",
                "maxLength": 180,
                "title": "Photo alt text"
              },
              "name": {
                "type": "string",
                "maxLength": 80,
                "title": "Title"
              },
              "byline": {
                "type": "string",
                "maxLength": 120,
                "title": "Caption"
              }
            },
            "additionalProperties": true
          }
        },
        "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."
        },
        "notes": {
          "type": "string"
        }
      },
      "additionalProperties": true
    },
    "content_text_blocks_slide": {
      "title": "text-blocks-slide slide content",
      "type": "object",
      "properties": {
        "title": {
          "type": "string",
          "maxLength": 120,
          "title": "Title"
        },
        "subheading": {
          "type": "string",
          "maxLength": 200,
          "title": "Subheading"
        },
        "rows": {
          "type": "array",
          "items": {
            "type": "object",
            "properties": {
              "title": {
                "type": "string",
                "maxLength": 120,
                "title": "Row heading"
              },
              "color": {
                "type": "string",
                "enum": [
                  "yellow",
                  "black",
                  ""
                ],
                "title": "Color"
              },
              "blocks": {
                "type": "array",
                "items": {
                  "type": "object",
                  "properties": {
                    "title": {
                      "type": "string",
                      "maxLength": 80,
                      "title": "Title"
                    },
                    "body": {
                      "type": "string",
                      "maxLength": 500,
                      "title": "Body"
                    }
                  },
                  "additionalProperties": true
                },
                "minItems": 1,
                "maxItems": 6,
                "title": "Blocks"
              },
              "arrow": {
                "type": "string",
                "enum": [
                  "none",
                  "down",
                  "up",
                  ""
                ],
                "title": "Arrow after row"
              }
            },
            "additionalProperties": true
          },
          "minItems": 1,
          "maxItems": 4,
          "title": "Rows"
        },
        "bottomSubheading": {
          "type": "string",
          "maxLength": 200,
          "title": "Bottom subheading"
        },
        "headerAlign": {
          "type": "string",
          "enum": [
            "center",
            "left",
            ""
          ],
          "title": "Header alignment"
        },
        "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"
      ]
    },
    "translation_text_blocks_slide": {
      "title": "text-blocks-slide slide translation",
      "type": "object",
      "properties": {
        "title": {
          "type": "string",
          "maxLength": 120,
          "title": "Title"
        },
        "subheading": {
          "type": "string",
          "maxLength": 200,
          "title": "Subheading"
        },
        "rows": {
          "type": "array",
          "items": {
            "type": "object",
            "properties": {
              "title": {
                "type": "string",
                "maxLength": 120,
                "title": "Row heading"
              },
              "blocks": {
                "type": "array",
                "items": {
                  "type": "object",
                  "properties": {
                    "title": {
                      "type": "string",
                      "maxLength": 80,
                      "title": "Title"
                    },
                    "body": {
                      "type": "string",
                      "maxLength": 500,
                      "title": "Body"
                    }
                  },
                  "additionalProperties": true
                }
              }
            },
            "additionalProperties": true
          }
        },
        "bottomSubheading": {
          "type": "string",
          "maxLength": 200,
          "title": "Bottom subheading"
        },
        "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."
        },
        "notes": {
          "type": "string"
        }
      },
      "additionalProperties": true
    },
    "content_timeline_slide": {
      "title": "timeline-slide slide content",
      "type": "object",
      "properties": {
        "title": {
          "type": "string",
          "maxLength": 120,
          "title": "Title"
        },
        "subheading": {
          "type": "string",
          "maxLength": 200,
          "title": "Subheading"
        },
        "bottomSubheading": {
          "type": "string",
          "maxLength": 200,
          "title": "Bottom subheading"
        },
        "items": {
          "type": "array",
          "items": {
            "type": "object",
            "properties": {
              "date": {
                "type": "string",
                "maxLength": 30,
                "title": "Date / label"
              },
              "title": {
                "type": "string",
                "maxLength": 60,
                "title": "Title"
              },
              "text": {
                "type": "string",
                "maxLength": 200,
                "title": "Description"
              }
            },
            "additionalProperties": true,
            "required": [
              "date",
              "title"
            ]
          },
          "minItems": 2,
          "maxItems": 10,
          "title": "Timeline items"
        },
        "background": {
          "type": "string",
          "title": "Background"
        },
        "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": [
        "items"
      ]
    },
    "translation_timeline_slide": {
      "title": "timeline-slide slide translation",
      "type": "object",
      "properties": {
        "title": {
          "type": "string",
          "maxLength": 120,
          "title": "Title"
        },
        "subheading": {
          "type": "string",
          "maxLength": 200,
          "title": "Subheading"
        },
        "bottomSubheading": {
          "type": "string",
          "maxLength": 200,
          "title": "Bottom subheading"
        },
        "items": {
          "type": "array",
          "items": {
            "type": "object",
            "properties": {
              "date": {
                "type": "string",
                "maxLength": 30,
                "title": "Date / label"
              },
              "title": {
                "type": "string",
                "maxLength": 60,
                "title": "Title"
              },
              "text": {
                "type": "string",
                "maxLength": 200,
                "title": "Description"
              }
            },
            "additionalProperties": true
          }
        },
        "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."
        },
        "notes": {
          "type": "string"
        }
      },
      "additionalProperties": true
    },
    "content_title_slide": {
      "title": "title-slide slide content",
      "type": "object",
      "properties": {
        "title": {
          "type": "string",
          "maxLength": 120,
          "title": "Title"
        },
        "subheading": {
          "type": "string",
          "maxLength": 160,
          "title": "Subtitle"
        },
        "meta": {
          "type": "string",
          "maxLength": 160,
          "title": "Meta"
        },
        "background": {
          "type": "string",
          "title": "Background"
        },
        "logoCorner": {
          "type": "string",
          "enum": [
            "left",
            "right",
            ""
          ],
          "title": "Logo corner"
        },
        "titleBlockAlign": {
          "type": "string",
          "enum": [
            "left",
            "center",
            ""
          ],
          "title": "Title block alignment"
        },
        "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"
      ]
    },
    "translation_title_slide": {
      "title": "title-slide slide translation",
      "type": "object",
      "properties": {
        "title": {
          "type": "string",
          "maxLength": 120,
          "title": "Title"
        },
        "subheading": {
          "type": "string",
          "maxLength": 160,
          "title": "Subtitle"
        },
        "meta": {
          "type": "string",
          "maxLength": 160,
          "title": "Meta"
        },
        "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."
        },
        "notes": {
          "type": "string"
        }
      },
      "additionalProperties": true
    },
    "content_video_slide": {
      "title": "video-slide slide content",
      "type": "object",
      "properties": {
        "title": {
          "type": "string",
          "maxLength": 100,
          "title": "Title"
        },
        "source": {
          "type": "string",
          "maxLength": 400,
          "title": "Video URL or Bunny ID (YouTube/Vimeo URL, Bunny embed URL, or Bunny video UUID)"
        },
        "background": {
          "type": "string",
          "title": "Background"
        },
        "autoplay": {
          "type": "string",
          "enum": [
            "off",
            "on",
            ""
          ],
          "title": "Autoplay"
        },
        "watchUrl": {
          "type": "string",
          "maxLength": 400,
          "title": "Watch link for the PDF export",
          "description": "Shown in the PDF export and the reader document instead of the generated link. Use it for a short, readable URL."
        },
        "bunnyLibraryId": {
          "type": "string",
          "maxLength": 20,
          "title": "Bunny library ID"
        },
        "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": [
        "source"
      ]
    },
    "translation_video_slide": {
      "title": "video-slide slide translation",
      "type": "object",
      "properties": {
        "title": {
          "type": "string",
          "maxLength": 100,
          "title": "Title"
        },
        "watchUrl": {
          "type": "string",
          "maxLength": 400,
          "title": "Watch link for the PDF export",
          "description": "Shown in the PDF export and the reader document instead of the generated link. Use it for a short, readable URL."
        },
        "bunnyLibraryId": {
          "type": "string",
          "maxLength": 20,
          "title": "Bunny library ID"
        },
        "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."
        },
        "notes": {
          "type": "string"
        }
      },
      "additionalProperties": true
    }
  }
}
