{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "$id": "https://flyanote.com/schemas/email/v1.0.json",
  "type": "object",
  "properties": {
    "schema_version": {
      "type": "string",
      "const": "1.0"
    },
    "meta": {
      "$ref": "#/$defs/Meta"
    },
    "settings": {
      "$ref": "#/$defs/Settings"
    },
    "sections": {
      "minItems": 1,
      "maxItems": 100,
      "type": "array",
      "items": {
        "$ref": "#/$defs/Section"
      }
    }
  },
  "required": [
    "schema_version",
    "meta",
    "sections"
  ],
  "additionalProperties": false,
  "title": "Flyanote email document",
  "description": "An email, as the editor, the API, and AI write it. This schema checks its structure: shapes, types, lengths, and patterns. The rules across properties (ids, widths, a table’s cells, the footer, loop scopes, and Liquid) are the API’s validation, whose error codes are listed at https://flyanote.com/docs/email-format, so a document this schema accepts may still be refused.",
  "$defs": {
    "Meta": {
      "type": "object",
      "properties": {
        "subject": {
          "type": "string",
          "minLength": 1,
          "maxLength": 200,
          "pattern": "^(?![\\s\\S]*\\{%)[\\s\\S]*$"
        },
        "preheader": {
          "type": "string",
          "minLength": 1,
          "maxLength": 200,
          "pattern": "^(?![\\s\\S]*\\{%)[\\s\\S]*$"
        },
        "lang": {
          "$ref": "#/$defs/Lang"
        },
        "dir": {
          "type": "string",
          "enum": [
            "ltr",
            "rtl"
          ]
        },
        "category": {
          "type": "string",
          "enum": [
            "transactional",
            "marketing"
          ]
        },
        "variables": {
          "maxItems": 500,
          "type": "array",
          "items": {
            "type": "string",
            "maxLength": 300
          }
        },
        "provenance": {
          "$ref": "#/$defs/Provenance"
        }
      },
      "required": [
        "subject",
        "lang",
        "category"
      ],
      "additionalProperties": false
    },
    "Lang": {
      "type": "string",
      "maxLength": 35,
      "pattern": "^[a-z]{2,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-WYZa-wyz0-9](?:-[A-Za-z0-9]{2,8})+)*(?:-[Xx](?:-[A-Za-z0-9]{1,8})+)?$"
    },
    "Provenance": {
      "type": "object",
      "properties": {
        "source": {
          "type": "string",
          "enum": [
            "human",
            "ai",
            "import",
            "starter"
          ]
        },
        "model": {
          "type": "string",
          "maxLength": 100,
          "pattern": "^(?![\\s\\S]*(?:\\{\\{|\\{%|\\}\\}|%\\}))[\\s\\S]*$"
        },
        "prompt_id": {
          "type": "string",
          "maxLength": 100,
          "pattern": "^(?![\\s\\S]*(?:\\{\\{|\\{%|\\}\\}|%\\}))[\\s\\S]*$"
        },
        "at": {
          "$ref": "#/$defs/Timestamp"
        },
        "edited_after": {
          "type": "boolean"
        },
        "review": {
          "maxItems": 20,
          "type": "array",
          "items": {
            "$ref": "#/$defs/RelativePointer"
          }
        }
      },
      "required": [
        "source",
        "at"
      ],
      "additionalProperties": false
    },
    "Timestamp": {
      "type": "string",
      "format": "date-time",
      "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$"
    },
    "RelativePointer": {
      "type": "string",
      "pattern": "^(?:\\/(?:[^~/]|~[01])*)+$"
    },
    "Settings": {
      "type": "object",
      "properties": {
        "width": {
          "type": "integer",
          "minimum": 480,
          "maximum": 700
        },
        "brand": {
          "description": "The brand kit this email uses, by its id (kit_…). Absent, the email follows the account’s default brand, whichever that is when it’s built.",
          "$ref": "#/$defs/BrandId"
        },
        "palette": {
          "description": "One of the brand kit’s palettes, by id. Absent, main.",
          "$ref": "#/$defs/PaletteId"
        },
        "theme": {
          "description": "One of the palette’s themes: light (its colors as they stand), dark (its dark values), or the id of one of its themes. Absent, light.",
          "$ref": "#/$defs/ThemeId"
        },
        "kit_version": {
          "description": "The version of the brand kit this email was made against: one pin covers the brand, its palette, and its theme. Needs brand, since a version means nothing without its kit. Absent, the email follows the kit’s newest version.",
          "type": "integer",
          "minimum": 1,
          "maximum": 9007199254740991
        },
        "background": {
          "$ref": "#/$defs/Color"
        },
        "content_background": {
          "$ref": "#/$defs/Color"
        },
        "color": {
          "$ref": "#/$defs/Color"
        },
        "link_color": {
          "$ref": "#/$defs/Color"
        },
        "link_underline": {
          "type": "boolean"
        },
        "font_heading": {
          "$ref": "#/$defs/Font"
        },
        "font_body": {
          "$ref": "#/$defs/Font"
        },
        "mobile": {
          "type": "object",
          "properties": {
            "h1": {
              "$ref": "#/$defs/PhoneText"
            },
            "h2": {
              "$ref": "#/$defs/PhoneText"
            },
            "h3": {
              "$ref": "#/$defs/PhoneText"
            },
            "body": {
              "$ref": "#/$defs/PhoneText"
            },
            "button": {
              "$ref": "#/$defs/PhoneText"
            },
            "footer": {
              "$ref": "#/$defs/PhoneText"
            },
            "side_padding": {
              "$ref": "#/$defs/PhonePadding"
            },
            "buttons_full_width": {
              "type": "boolean"
            }
          },
          "additionalProperties": false
        },
        "dark": {
          "type": "object",
          "properties": {
            "background": {
              "$ref": "#/$defs/Hex"
            },
            "content_background": {
              "$ref": "#/$defs/Hex"
            },
            "color": {
              "$ref": "#/$defs/Hex"
            },
            "link_color": {
              "$ref": "#/$defs/Hex"
            }
          },
          "additionalProperties": false
        }
      },
      "additionalProperties": false,
      "dependentRequired": {
        "kit_version": [
          "brand"
        ]
      }
    },
    "BrandId": {
      "type": "string",
      "pattern": "^kit_[0-7][0-9a-hjkmnp-tv-z]{25}$"
    },
    "PaletteId": {
      "type": "string",
      "pattern": "^(?!(?:constructor|prototype|kit)$)[a-z][a-z0-9_]{0,31}$"
    },
    "ThemeId": {
      "type": "string",
      "pattern": "^(?!(?:constructor|prototype)$)[a-z][a-z0-9_]{0,31}$"
    },
    "Color": {
      "type": "string",
      "pattern": "^(?:#[0-9a-fA-F]{6}|brand\\.(?:primary|on_primary|secondary|on_secondary)|text\\.(?:default|heading|muted|link)|background\\.(?:page|surface|tint)|border\\.default|extra\\.[a-z][a-z0-9_]{0,31})$",
      "description": "A palette token (brand.primary, text.default, extra.<slug>) or an exact color, #rrggbb. No alpha."
    },
    "Font": {
      "type": "string",
      "pattern": "^(?:font\\.(?:heading|body)|[A-Za-z](?:[A-Za-z0-9 -]{0,62}[A-Za-z0-9])?)$",
      "description": "font.heading, font.body, or a font family from the catalog. The catalog is checked in context."
    },
    "PhoneText": {
      "type": "object",
      "properties": {
        "font_size": {
          "$ref": "#/$defs/PhoneFontSize"
        },
        "line_height": {
          "$ref": "#/$defs/LineHeight"
        }
      },
      "additionalProperties": false
    },
    "PhoneFontSize": {
      "type": "string",
      "pattern": "^(?:1[2-9]|[2-6][0-9]|7[0-2])px$",
      "description": "A size on phones: whole pixels from 12px to 72px."
    },
    "LineHeight": {
      "type": "number",
      "minimum": 1,
      "maximum": 2.5
    },
    "PhonePadding": {
      "type": "string",
      "pattern": "^(?:[0-9]|[1-9][0-9]|1[0-9]{2}|200)px$",
      "description": "Side padding on phones, whole pixels from 0px to 200px: the left and right padding of each block inside that sets neither side itself."
    },
    "Hex": {
      "type": "string",
      "pattern": "^#[0-9a-fA-F]{6}$",
      "description": "An exact color, #rrggbb. Dark overrides take only these."
    },
    "Section": {
      "oneOf": [
        {
          "$ref": "#/$defs/ColumnsSection"
        },
        {
          "$ref": "#/$defs/GridSection"
        },
        {
          "$ref": "#/$defs/HeroSection"
        },
        {
          "$ref": "#/$defs/HtmlSection"
        }
      ]
    },
    "ColumnsSection": {
      "type": "object",
      "properties": {
        "kind": {
          "type": "string",
          "const": "columns"
        },
        "id": {
          "$ref": "#/$defs/SectionId"
        },
        "label": {
          "type": "string",
          "minLength": 1,
          "maxLength": 60,
          "pattern": "^(?![\\s\\S]*(?:\\{\\{|\\{%|\\}\\}|%\\}))[\\s\\S]*$"
        },
        "provenance": {
          "$ref": "#/$defs/Provenance"
        },
        "columns": {
          "minItems": 1,
          "maxItems": 4,
          "type": "array",
          "items": {
            "$ref": "#/$defs/Column"
          }
        },
        "widths": {
          "minItems": 1,
          "maxItems": 4,
          "type": "array",
          "items": {
            "type": "integer",
            "minimum": 15,
            "maximum": 100
          }
        },
        "mobile": {
          "type": "object",
          "properties": {
            "stack": {
              "type": "boolean"
            },
            "reverse": {
              "type": "boolean"
            }
          },
          "additionalProperties": false
        },
        "style": {
          "$ref": "#/$defs/SectionStyle"
        }
      },
      "required": [
        "kind",
        "id",
        "columns"
      ],
      "additionalProperties": false
    },
    "SectionId": {
      "type": "string",
      "pattern": "^sec_[0-9a-hjkmnp-tv-z]{8}$"
    },
    "Column": {
      "type": "object",
      "properties": {
        "id": {
          "$ref": "#/$defs/ColumnId"
        },
        "blocks": {
          "maxItems": 50,
          "type": "array",
          "items": {
            "$ref": "#/$defs/ColumnBlock"
          }
        },
        "style": {
          "$ref": "#/$defs/ColumnStyle"
        }
      },
      "required": [
        "id",
        "blocks"
      ],
      "additionalProperties": false
    },
    "ColumnId": {
      "type": "string",
      "pattern": "^col_[0-9a-hjkmnp-tv-z]{8}$"
    },
    "ColumnBlock": {
      "oneOf": [
        {
          "$ref": "#/$defs/TextBlock"
        },
        {
          "$ref": "#/$defs/ImageBlock"
        },
        {
          "$ref": "#/$defs/ButtonBlock"
        },
        {
          "$ref": "#/$defs/DividerBlock"
        },
        {
          "$ref": "#/$defs/SpacerBlock"
        },
        {
          "$ref": "#/$defs/SocialBlock"
        },
        {
          "$ref": "#/$defs/LogoBlock"
        },
        {
          "$ref": "#/$defs/FooterBlock"
        },
        {
          "$ref": "#/$defs/HtmlBlock"
        },
        {
          "$ref": "#/$defs/RepeatBlock"
        },
        {
          "$ref": "#/$defs/TableBlock"
        }
      ]
    },
    "TextBlock": {
      "type": "object",
      "properties": {
        "type": {
          "type": "string",
          "const": "text"
        },
        "id": {
          "$ref": "#/$defs/BlockId"
        },
        "provenance": {
          "$ref": "#/$defs/Provenance"
        },
        "lines": {
          "minItems": 1,
          "maxItems": 200,
          "type": "array",
          "items": {
            "$ref": "#/$defs/Line"
          }
        },
        "style": {
          "$ref": "#/$defs/TextStyle"
        }
      },
      "required": [
        "type",
        "id",
        "lines"
      ],
      "additionalProperties": false
    },
    "BlockId": {
      "type": "string",
      "pattern": "^blk_[0-9a-hjkmnp-tv-z]{8}$"
    },
    "Line": {
      "oneOf": [
        {
          "$ref": "#/$defs/ParagraphLine"
        },
        {
          "$ref": "#/$defs/HeadingLine"
        },
        {
          "$ref": "#/$defs/BulletLine"
        },
        {
          "$ref": "#/$defs/NumberLine"
        },
        {
          "$ref": "#/$defs/QuoteLine"
        }
      ]
    },
    "ParagraphLine": {
      "type": "object",
      "properties": {
        "kind": {
          "type": "string",
          "const": "p"
        },
        "align": {
          "$ref": "#/$defs/Align"
        },
        "spans": {
          "maxItems": 200,
          "type": "array",
          "items": {
            "$ref": "#/$defs/Span"
          }
        }
      },
      "required": [
        "kind",
        "spans"
      ],
      "additionalProperties": false
    },
    "Align": {
      "type": "string",
      "enum": [
        "left",
        "center",
        "right"
      ]
    },
    "Span": {
      "anyOf": [
        {
          "$ref": "#/$defs/TextSpan"
        },
        {
          "$ref": "#/$defs/FieldSpan"
        }
      ]
    },
    "TextSpan": {
      "type": "object",
      "properties": {
        "text": {
          "type": "string",
          "minLength": 1,
          "maxLength": 5000,
          "pattern": "^(?![\\s\\S]*\\{[{%])[\\s\\S]*$"
        },
        "marks": {
          "maxItems": 6,
          "type": "array",
          "items": {
            "$ref": "#/$defs/Mark"
          }
        },
        "link": {
          "$ref": "#/$defs/Href"
        },
        "color": {
          "$ref": "#/$defs/Color"
        },
        "highlight": {
          "$ref": "#/$defs/Color"
        },
        "size": {
          "$ref": "#/$defs/FontSize"
        },
        "dark": {
          "type": "object",
          "properties": {
            "color": {
              "$ref": "#/$defs/Hex"
            },
            "highlight": {
              "$ref": "#/$defs/Hex"
            }
          },
          "additionalProperties": false
        }
      },
      "required": [
        "text"
      ],
      "additionalProperties": false,
      "description": "Text. \"\\n\" is a line break. Merge tags go in field spans, not here."
    },
    "Mark": {
      "type": "string",
      "enum": [
        "bold",
        "italic",
        "underline",
        "strike",
        "sup",
        "sub"
      ]
    },
    "Href": {
      "type": "string",
      "maxLength": 2048,
      "pattern": "^(?:(?:https?:\\/\\/|mailto:|tel:)(?:[^\\s{}]|\\{\\{\\s*[a-z][A-Za-z0-9_.]*\\s*(?:\\|[^{}\"']*)?\\}\\})+|asset:ast_[0-7][0-9a-hjkmnp-tv-z]{25}|kit:(?:website|links\\/[a-z][a-z0-9_]{0,31}|social\\/(?:facebook|instagram|x|threads|bluesky|linkedin|youtube|pinterest|mastodon|whatsapp|website|email))|system:(?:unsubscribe|preferences|view_online)|\\{\\{\\s*[a-z][A-Za-z0-9_.]*\\s*(?:\\|[^{}\"']*)?\\}\\}(?:\\{\\{\\s*[a-z][A-Za-z0-9_.]*\\s*(?:\\|[^{}\"']*)?\\}\\})*(?:[/?#](?:[^\\s{}]|\\{\\{\\s*[a-z][A-Za-z0-9_.]*\\s*(?:\\|[^{}\"']*)?\\}\\})*)?)$",
      "description": "https:, http:, mailto:, tel:, asset:ast_<id>, kit:website, kit:links/<key>, kit:social/<network>, system:unsubscribe, system:preferences, system:view_online, or a merge tag."
    },
    "FontSize": {
      "type": "string",
      "pattern": "^(?:size\\.(?:small|body|h1|h2|h3)|(?:[1-6][0-9]|7[0-2])px)$",
      "description": "A size token (size.body, size.h2) or whole pixels from 10px to 72px."
    },
    "FieldSpan": {
      "type": "object",
      "properties": {
        "field": {
          "$ref": "#/$defs/Path"
        },
        "fallback": {
          "$ref": "#/$defs/Fallback"
        },
        "format": {
          "description": "How the value shows. money reads the value as a whole number of the currency’s minor units, as its ISO 4217 exponent gives them (1999 with USD shows $19.99, 1999 with JPY ¥1,999); a fraction is an error at render.",
          "type": "string",
          "enum": [
            "date",
            "datetime",
            "number",
            "money"
          ]
        },
        "currency": {
          "description": "With format money only, and money needs one: an ISO 4217 code (USD) or a data path to one. The value is in this currency’s minor units.",
          "$ref": "#/$defs/Currency"
        },
        "marks": {
          "maxItems": 6,
          "type": "array",
          "items": {
            "$ref": "#/$defs/Mark"
          }
        },
        "link": {
          "$ref": "#/$defs/Href"
        },
        "color": {
          "$ref": "#/$defs/Color"
        },
        "highlight": {
          "$ref": "#/$defs/Color"
        },
        "size": {
          "$ref": "#/$defs/FontSize"
        },
        "dark": {
          "type": "object",
          "properties": {
            "color": {
              "$ref": "#/$defs/Hex"
            },
            "highlight": {
              "$ref": "#/$defs/Hex"
            }
          },
          "additionalProperties": false
        }
      },
      "required": [
        "field"
      ],
      "additionalProperties": false,
      "description": "A merge field, shown as a chip in the editor."
    },
    "Path": {
      "type": "string",
      "allOf": [
        {
          "pattern": "^(?!now\\.)[a-z][a-z0-9_]{0,30}(?:\\.[A-Za-z_][A-Za-z0-9_]{0,63}){0,9}$"
        },
        {
          "pattern": "^(?!(?:contact|account|message|campaign|links|brand|forloop)\\.[^A-Z]*[A-Z])"
        }
      ],
      "description": "A data path, such as contact.first_name, data.order.total, or item.name."
    },
    "Fallback": {
      "type": "string",
      "minLength": 1,
      "maxLength": 100,
      "pattern": "^(?![\\s\\S]*(?:\\{\\{|\\{%|\\}\\}|%\\}))[\\s\\S]*$"
    },
    "Currency": {
      "type": "string",
      "allOf": [
        {
          "pattern": "^(?:[A-Z]{3}|[a-z][a-z0-9_]{0,30}(?:\\.[A-Za-z_][A-Za-z0-9_]{0,63}){1,9})$"
        },
        {
          "pattern": "^(?!(?:contact|account|message|campaign|links|brand|forloop)\\.[^A-Z]*[A-Z])"
        }
      ]
    },
    "HeadingLine": {
      "type": "object",
      "properties": {
        "kind": {
          "type": "string",
          "enum": [
            "h1",
            "h2",
            "h3"
          ]
        },
        "align": {
          "$ref": "#/$defs/Align"
        },
        "spans": {
          "minItems": 1,
          "maxItems": 200,
          "type": "array",
          "items": {
            "$ref": "#/$defs/Span"
          }
        }
      },
      "required": [
        "kind",
        "spans"
      ],
      "additionalProperties": false
    },
    "BulletLine": {
      "type": "object",
      "properties": {
        "kind": {
          "type": "string",
          "const": "bullet"
        },
        "level": {
          "type": "number",
          "const": 2
        },
        "spans": {
          "minItems": 1,
          "maxItems": 200,
          "type": "array",
          "items": {
            "$ref": "#/$defs/Span"
          }
        }
      },
      "required": [
        "kind",
        "spans"
      ],
      "additionalProperties": false
    },
    "NumberLine": {
      "type": "object",
      "properties": {
        "kind": {
          "type": "string",
          "const": "number"
        },
        "level": {
          "type": "number",
          "const": 2
        },
        "start": {
          "type": "integer",
          "minimum": 1,
          "maximum": 9999
        },
        "spans": {
          "minItems": 1,
          "maxItems": 200,
          "type": "array",
          "items": {
            "$ref": "#/$defs/Span"
          }
        }
      },
      "required": [
        "kind",
        "spans"
      ],
      "additionalProperties": false
    },
    "QuoteLine": {
      "type": "object",
      "properties": {
        "kind": {
          "type": "string",
          "const": "quote"
        },
        "align": {
          "$ref": "#/$defs/Align"
        },
        "spans": {
          "minItems": 1,
          "maxItems": 200,
          "type": "array",
          "items": {
            "$ref": "#/$defs/Span"
          }
        }
      },
      "required": [
        "kind",
        "spans"
      ],
      "additionalProperties": false
    },
    "TextStyle": {
      "type": "object",
      "properties": {
        "font": {
          "$ref": "#/$defs/Font"
        },
        "font_size": {
          "$ref": "#/$defs/FontSize"
        },
        "line_height": {
          "$ref": "#/$defs/LineHeight"
        },
        "color": {
          "$ref": "#/$defs/Color"
        },
        "link_color": {
          "$ref": "#/$defs/Color"
        },
        "align": {
          "$ref": "#/$defs/Align"
        },
        "padding": {
          "$ref": "#/$defs/Padding"
        },
        "background": {
          "$ref": "#/$defs/Color"
        },
        "mobile": {
          "$ref": "#/$defs/PhoneText"
        },
        "dark": {
          "type": "object",
          "properties": {
            "color": {
              "$ref": "#/$defs/Hex"
            },
            "link_color": {
              "$ref": "#/$defs/Hex"
            },
            "background": {
              "$ref": "#/$defs/Hex"
            }
          },
          "additionalProperties": false
        }
      },
      "additionalProperties": false
    },
    "Padding": {
      "type": "object",
      "properties": {
        "top": {
          "$ref": "#/$defs/Spacing"
        },
        "right": {
          "$ref": "#/$defs/Spacing"
        },
        "bottom": {
          "$ref": "#/$defs/Spacing"
        },
        "left": {
          "$ref": "#/$defs/Spacing"
        }
      },
      "additionalProperties": false
    },
    "Spacing": {
      "type": "string",
      "pattern": "^(?:space\\.(?:xxs|xs|sm|md|lg|xl|xxl)|(?:[0-9]|[1-9][0-9]|1[0-9]{2}|200)px)$",
      "description": "A space token (space.md) or whole pixels from 0px to 200px."
    },
    "ImageBlock": {
      "type": "object",
      "properties": {
        "type": {
          "type": "string",
          "const": "image"
        },
        "id": {
          "$ref": "#/$defs/BlockId"
        },
        "provenance": {
          "$ref": "#/$defs/Provenance"
        },
        "src": {
          "$ref": "#/$defs/Src"
        },
        "alt": {
          "type": "string",
          "maxLength": 300,
          "pattern": "^(?![\\s\\S]*\\{%)[\\s\\S]*$"
        },
        "decorative": {
          "type": "boolean",
          "const": true
        },
        "width": {
          "$ref": "#/$defs/Width"
        },
        "href": {
          "$ref": "#/$defs/Href"
        },
        "style": {
          "$ref": "#/$defs/ImageStyle"
        }
      },
      "required": [
        "type",
        "id",
        "src"
      ],
      "additionalProperties": false
    },
    "Src": {
      "type": "string",
      "maxLength": 2048,
      "pattern": "^(?:asset:ast_[0-7][0-9a-hjkmnp-tv-z]{25}|https?:\\/\\/(?:[^\\s{}]|\\{\\{\\s*[a-z][A-Za-z0-9_.]*\\s*(?:\\|[^{}\"']*)?\\}\\})+|\\{\\{\\s*[a-z][A-Za-z0-9_.]*\\s*(?:\\|[^{}\"']*)?\\}\\}(?:\\{\\{\\s*[a-z][A-Za-z0-9_.]*\\s*(?:\\|[^{}\"']*)?\\}\\})*(?:[/?#](?:[^\\s{}]|\\{\\{\\s*[a-z][A-Za-z0-9_.]*\\s*(?:\\|[^{}\"']*)?\\}\\})*)?)$",
      "description": "asset:ast_<id>, an http(s):// address, or a merge tag."
    },
    "Width": {
      "type": "string",
      "pattern": "^(?:[1-9]|[1-9][0-9]|[1-6][0-9]{2}|700)px$"
    },
    "ImageStyle": {
      "type": "object",
      "properties": {
        "align": {
          "$ref": "#/$defs/Align"
        },
        "padding": {
          "$ref": "#/$defs/Padding"
        },
        "border": {
          "$ref": "#/$defs/Border"
        },
        "radius": {
          "$ref": "#/$defs/Radius"
        },
        "dark": {
          "type": "object",
          "properties": {
            "border_color": {
              "$ref": "#/$defs/Hex"
            }
          },
          "additionalProperties": false
        }
      },
      "additionalProperties": false
    },
    "Border": {
      "type": "object",
      "properties": {
        "width": {
          "$ref": "#/$defs/BorderWidth"
        },
        "style": {
          "type": "string",
          "enum": [
            "solid",
            "dashed",
            "dotted"
          ]
        },
        "color": {
          "$ref": "#/$defs/Color"
        }
      },
      "required": [
        "width",
        "style",
        "color"
      ],
      "additionalProperties": false
    },
    "BorderWidth": {
      "type": "string",
      "pattern": "^[0-8]px$"
    },
    "Radius": {
      "type": "string",
      "pattern": "^(?:radius\\.(?:sm|md|lg|full)|(?:[0-9]|[1-9][0-9]|1[0-9]{2}|200)px)$",
      "description": "A radius token (radius.md) or whole pixels from 0px to 200px."
    },
    "ButtonBlock": {
      "type": "object",
      "properties": {
        "type": {
          "type": "string",
          "const": "button"
        },
        "id": {
          "$ref": "#/$defs/BlockId"
        },
        "provenance": {
          "$ref": "#/$defs/Provenance"
        },
        "label": {
          "type": "string",
          "minLength": 1,
          "maxLength": 80,
          "pattern": "^(?![\\s\\S]*\\{%)[\\s\\S]*$"
        },
        "href": {
          "$ref": "#/$defs/Href"
        },
        "variant": {
          "type": "string",
          "enum": [
            "fill",
            "outline"
          ]
        },
        "width": {
          "$ref": "#/$defs/ButtonWidth"
        },
        "style": {
          "$ref": "#/$defs/ButtonStyle"
        }
      },
      "required": [
        "type",
        "id",
        "label",
        "href"
      ],
      "additionalProperties": false
    },
    "ButtonWidth": {
      "type": "string",
      "pattern": "^(?:auto|full|(?:[1-9]|[1-9][0-9]|[1-6][0-9]{2}|700)px)$"
    },
    "ButtonStyle": {
      "type": "object",
      "properties": {
        "background": {
          "$ref": "#/$defs/Color"
        },
        "color": {
          "$ref": "#/$defs/Color"
        },
        "font": {
          "$ref": "#/$defs/Font"
        },
        "font_size": {
          "$ref": "#/$defs/FontSize"
        },
        "font_weight": {
          "$ref": "#/$defs/FontWeight"
        },
        "radius": {
          "$ref": "#/$defs/Radius"
        },
        "border": {
          "$ref": "#/$defs/Border"
        },
        "inner_padding": {
          "$ref": "#/$defs/Padding"
        },
        "padding": {
          "$ref": "#/$defs/Padding"
        },
        "align": {
          "$ref": "#/$defs/Align"
        },
        "mobile": {
          "type": "object",
          "properties": {
            "font_size": {
              "$ref": "#/$defs/PhoneFontSize"
            },
            "line_height": {
              "$ref": "#/$defs/LineHeight"
            },
            "full_width": {
              "type": "boolean"
            }
          },
          "additionalProperties": false
        },
        "dark": {
          "type": "object",
          "properties": {
            "background": {
              "$ref": "#/$defs/Hex"
            },
            "color": {
              "$ref": "#/$defs/Hex"
            },
            "border_color": {
              "$ref": "#/$defs/Hex"
            }
          },
          "additionalProperties": false
        }
      },
      "additionalProperties": false
    },
    "FontWeight": {
      "type": "number",
      "enum": [
        100,
        200,
        300,
        400,
        500,
        600,
        700,
        800,
        900
      ]
    },
    "DividerBlock": {
      "type": "object",
      "properties": {
        "type": {
          "type": "string",
          "const": "divider"
        },
        "id": {
          "$ref": "#/$defs/BlockId"
        },
        "provenance": {
          "$ref": "#/$defs/Provenance"
        },
        "style": {
          "$ref": "#/$defs/DividerStyle"
        }
      },
      "required": [
        "type",
        "id"
      ],
      "additionalProperties": false
    },
    "DividerStyle": {
      "type": "object",
      "properties": {
        "color": {
          "$ref": "#/$defs/Color"
        },
        "thickness": {
          "$ref": "#/$defs/Thickness"
        },
        "line_style": {
          "type": "string",
          "enum": [
            "solid",
            "dashed",
            "dotted"
          ]
        },
        "width": {
          "type": "integer",
          "minimum": 10,
          "maximum": 100
        },
        "padding": {
          "$ref": "#/$defs/Padding"
        },
        "align": {
          "$ref": "#/$defs/Align"
        },
        "dark": {
          "type": "object",
          "properties": {
            "color": {
              "$ref": "#/$defs/Hex"
            }
          },
          "additionalProperties": false
        }
      },
      "additionalProperties": false
    },
    "Thickness": {
      "type": "string",
      "pattern": "^[1-8]px$"
    },
    "SpacerBlock": {
      "type": "object",
      "properties": {
        "type": {
          "type": "string",
          "const": "spacer"
        },
        "id": {
          "$ref": "#/$defs/BlockId"
        },
        "provenance": {
          "$ref": "#/$defs/Provenance"
        },
        "height": {
          "$ref": "#/$defs/Spacing"
        },
        "style": {
          "$ref": "#/$defs/SpacerStyle"
        }
      },
      "required": [
        "type",
        "id",
        "height"
      ],
      "additionalProperties": false
    },
    "SpacerStyle": {
      "type": "object",
      "properties": {
        "background": {
          "$ref": "#/$defs/Color"
        },
        "dark": {
          "type": "object",
          "properties": {
            "background": {
              "$ref": "#/$defs/Hex"
            }
          },
          "additionalProperties": false
        }
      },
      "additionalProperties": false
    },
    "SocialBlock": {
      "type": "object",
      "properties": {
        "type": {
          "type": "string",
          "const": "social"
        },
        "id": {
          "$ref": "#/$defs/BlockId"
        },
        "provenance": {
          "$ref": "#/$defs/Provenance"
        },
        "networks": {
          "minItems": 1,
          "maxItems": 12,
          "type": "array",
          "items": {
            "type": "object",
            "properties": {
              "network": {
                "$ref": "#/$defs/Network"
              },
              "href": {
                "$ref": "#/$defs/Href"
              }
            },
            "required": [
              "network"
            ],
            "additionalProperties": false
          }
        },
        "icon_style": {
          "type": "string",
          "enum": [
            "color",
            "dark",
            "light"
          ]
        },
        "icon_size": {
          "$ref": "#/$defs/IconSize"
        },
        "style": {
          "$ref": "#/$defs/SocialStyle"
        }
      },
      "required": [
        "type",
        "id",
        "networks"
      ],
      "additionalProperties": false
    },
    "Network": {
      "type": "string",
      "enum": [
        "facebook",
        "instagram",
        "x",
        "threads",
        "bluesky",
        "linkedin",
        "youtube",
        "pinterest",
        "mastodon",
        "whatsapp",
        "website",
        "email"
      ]
    },
    "IconSize": {
      "type": "string",
      "pattern": "^(?:29|3[0-9]|4[0-8])px$"
    },
    "SocialStyle": {
      "type": "object",
      "properties": {
        "align": {
          "$ref": "#/$defs/Align"
        },
        "padding": {
          "$ref": "#/$defs/Padding"
        },
        "gap": {
          "$ref": "#/$defs/Spacing"
        }
      },
      "additionalProperties": false
    },
    "LogoBlock": {
      "type": "object",
      "properties": {
        "type": {
          "type": "string",
          "const": "logo"
        },
        "id": {
          "$ref": "#/$defs/BlockId"
        },
        "provenance": {
          "$ref": "#/$defs/Provenance"
        },
        "width": {
          "$ref": "#/$defs/Width"
        },
        "href": {
          "$ref": "#/$defs/Href"
        },
        "style": {
          "$ref": "#/$defs/LogoStyle"
        }
      },
      "required": [
        "type",
        "id"
      ],
      "additionalProperties": false
    },
    "LogoStyle": {
      "type": "object",
      "properties": {
        "align": {
          "$ref": "#/$defs/Align"
        },
        "padding": {
          "$ref": "#/$defs/Padding"
        }
      },
      "additionalProperties": false
    },
    "FooterBlock": {
      "type": "object",
      "properties": {
        "type": {
          "type": "string",
          "const": "footer"
        },
        "id": {
          "$ref": "#/$defs/BlockId"
        },
        "provenance": {
          "$ref": "#/$defs/Provenance"
        },
        "note": {
          "maxItems": 10,
          "type": "array",
          "items": {
            "$ref": "#/$defs/ParagraphLine"
          }
        },
        "show_social": {
          "type": "boolean"
        },
        "show_address": {
          "type": "boolean"
        },
        "style": {
          "$ref": "#/$defs/FooterStyle"
        }
      },
      "required": [
        "type",
        "id"
      ],
      "additionalProperties": false
    },
    "FooterStyle": {
      "type": "object",
      "properties": {
        "color": {
          "$ref": "#/$defs/Color"
        },
        "link_color": {
          "$ref": "#/$defs/Color"
        },
        "font_size": {
          "$ref": "#/$defs/FooterFontSize"
        },
        "align": {
          "$ref": "#/$defs/Align"
        },
        "padding": {
          "$ref": "#/$defs/Padding"
        },
        "background": {
          "$ref": "#/$defs/Color"
        },
        "mobile": {
          "$ref": "#/$defs/PhoneText"
        },
        "dark": {
          "type": "object",
          "properties": {
            "color": {
              "$ref": "#/$defs/Hex"
            },
            "link_color": {
              "$ref": "#/$defs/Hex"
            },
            "background": {
              "$ref": "#/$defs/Hex"
            }
          },
          "additionalProperties": false
        }
      },
      "additionalProperties": false
    },
    "FooterFontSize": {
      "type": "string",
      "pattern": "^(?:size\\.(?:small|body|h1|h2|h3)|(?:1[2-9]|[2-6][0-9]|7[0-2])px)$"
    },
    "HtmlBlock": {
      "type": "object",
      "properties": {
        "type": {
          "type": "string",
          "const": "html"
        },
        "id": {
          "$ref": "#/$defs/BlockId"
        },
        "provenance": {
          "$ref": "#/$defs/Provenance"
        },
        "html": {
          "type": "string",
          "minLength": 1,
          "maxLength": 50000
        }
      },
      "required": [
        "type",
        "id",
        "html"
      ],
      "additionalProperties": false,
      "description": "The customer’s own HTML with Liquid, linted (§5). Not editable visually."
    },
    "RepeatBlock": {
      "type": "object",
      "properties": {
        "type": {
          "type": "string",
          "const": "repeat"
        },
        "id": {
          "$ref": "#/$defs/BlockId"
        },
        "provenance": {
          "$ref": "#/$defs/Provenance"
        },
        "over": {
          "$ref": "#/$defs/ArrayPath"
        },
        "as": {
          "$ref": "#/$defs/LoopVariable"
        },
        "limit": {
          "type": "integer",
          "minimum": 1,
          "maximum": 200
        },
        "blocks": {
          "minItems": 1,
          "maxItems": 10,
          "type": "array",
          "items": {
            "$ref": "#/$defs/SimpleBlock"
          }
        }
      },
      "required": [
        "type",
        "id",
        "over",
        "as",
        "blocks"
      ],
      "additionalProperties": false
    },
    "ArrayPath": {
      "type": "string",
      "pattern": "^(?:(?:contact|account|message|campaign)(?:\\.[a-z_][a-z0-9_]{0,63}){1,9}|data(?:\\.[A-Za-z_][A-Za-z0-9_]{0,63}){1,9})$"
    },
    "LoopVariable": {
      "type": "string",
      "allOf": [
        {
          "pattern": "^[a-z][a-z0-9_]{0,30}$"
        },
        {
          "pattern": "^(?!(?:contact|account|message|campaign|data|links|now|brand|forloop)$)"
        }
      ]
    },
    "SimpleBlock": {
      "oneOf": [
        {
          "$ref": "#/$defs/TextBlock"
        },
        {
          "$ref": "#/$defs/ImageBlock"
        },
        {
          "$ref": "#/$defs/ButtonBlock"
        },
        {
          "$ref": "#/$defs/DividerBlock"
        },
        {
          "$ref": "#/$defs/SpacerBlock"
        }
      ]
    },
    "TableBlock": {
      "type": "object",
      "properties": {
        "type": {
          "type": "string",
          "const": "table"
        },
        "id": {
          "$ref": "#/$defs/BlockId"
        },
        "provenance": {
          "$ref": "#/$defs/Provenance"
        },
        "caption": {
          "type": "string",
          "minLength": 1,
          "maxLength": 300,
          "pattern": "^(?![\\s\\S]*\\{%)[\\s\\S]*$"
        },
        "columns": {
          "minItems": 1,
          "maxItems": 4,
          "type": "array",
          "items": {
            "type": "object",
            "properties": {
              "align": {
                "$ref": "#/$defs/Align"
              },
              "width": {
                "type": "integer",
                "minimum": 1,
                "maximum": 100
              }
            },
            "additionalProperties": false
          }
        },
        "header": {
          "minItems": 1,
          "maxItems": 4,
          "type": "array",
          "items": {
            "$ref": "#/$defs/Cell"
          }
        },
        "rows": {
          "minItems": 1,
          "maxItems": 200,
          "type": "array",
          "items": {
            "$ref": "#/$defs/TableRow"
          }
        },
        "mobile": {
          "type": "object",
          "properties": {
            "layout": {
              "type": "string",
              "enum": [
                "cards",
                "table"
              ]
            }
          },
          "additionalProperties": false
        },
        "style": {
          "$ref": "#/$defs/TableStyle"
        }
      },
      "required": [
        "type",
        "id",
        "columns",
        "header",
        "rows"
      ],
      "additionalProperties": false
    },
    "Cell": {
      "type": "object",
      "properties": {
        "spans": {
          "maxItems": 50,
          "type": "array",
          "items": {
            "$ref": "#/$defs/Span"
          }
        }
      },
      "required": [
        "spans"
      ],
      "additionalProperties": false,
      "description": "Spans with marks, links, fields, and colors, but no lines."
    },
    "TableRow": {
      "type": "object",
      "properties": {
        "cells": {
          "minItems": 1,
          "maxItems": 4,
          "type": "array",
          "items": {
            "$ref": "#/$defs/Cell"
          }
        },
        "role": {
          "type": "string",
          "enum": [
            "body",
            "total"
          ]
        },
        "repeat": {
          "type": "object",
          "properties": {
            "over": {
              "$ref": "#/$defs/ArrayPath"
            },
            "as": {
              "$ref": "#/$defs/LoopVariable"
            },
            "limit": {
              "type": "integer",
              "minimum": 1,
              "maximum": 200
            }
          },
          "required": [
            "over",
            "as"
          ],
          "additionalProperties": false
        }
      },
      "required": [
        "cells"
      ],
      "additionalProperties": false
    },
    "TableStyle": {
      "type": "object",
      "properties": {
        "font": {
          "$ref": "#/$defs/Font"
        },
        "font_size": {
          "$ref": "#/$defs/FontSize"
        },
        "color": {
          "$ref": "#/$defs/Color"
        },
        "header_background": {
          "$ref": "#/$defs/Color"
        },
        "header_color": {
          "$ref": "#/$defs/Color"
        },
        "border_color": {
          "$ref": "#/$defs/Color"
        },
        "stripe": {
          "$ref": "#/$defs/Color"
        },
        "cell_padding": {
          "$ref": "#/$defs/Spacing"
        },
        "padding": {
          "$ref": "#/$defs/Padding"
        },
        "mobile": {
          "type": "object",
          "properties": {
            "font_size": {
              "$ref": "#/$defs/PhoneFontSize"
            }
          },
          "additionalProperties": false
        },
        "dark": {
          "type": "object",
          "properties": {
            "color": {
              "$ref": "#/$defs/Hex"
            },
            "header_background": {
              "$ref": "#/$defs/Hex"
            },
            "header_color": {
              "$ref": "#/$defs/Hex"
            },
            "border_color": {
              "$ref": "#/$defs/Hex"
            },
            "stripe": {
              "$ref": "#/$defs/Hex"
            }
          },
          "additionalProperties": false
        }
      },
      "additionalProperties": false
    },
    "ColumnStyle": {
      "type": "object",
      "properties": {
        "background": {
          "$ref": "#/$defs/Color"
        },
        "color": {
          "$ref": "#/$defs/Color"
        },
        "padding": {
          "$ref": "#/$defs/Padding"
        },
        "border": {
          "$ref": "#/$defs/Border"
        },
        "radius": {
          "$ref": "#/$defs/Radius"
        },
        "vertical_align": {
          "$ref": "#/$defs/VerticalAlign"
        },
        "mobile": {
          "type": "object",
          "properties": {
            "side_padding": {
              "$ref": "#/$defs/PhonePadding"
            }
          },
          "additionalProperties": false
        },
        "dark": {
          "type": "object",
          "properties": {
            "background": {
              "$ref": "#/$defs/Hex"
            },
            "color": {
              "$ref": "#/$defs/Hex"
            },
            "border_color": {
              "$ref": "#/$defs/Hex"
            }
          },
          "additionalProperties": false
        }
      },
      "additionalProperties": false
    },
    "VerticalAlign": {
      "type": "string",
      "enum": [
        "top",
        "middle",
        "bottom"
      ]
    },
    "SectionStyle": {
      "type": "object",
      "properties": {
        "background": {
          "$ref": "#/$defs/Color"
        },
        "background_image": {
          "$ref": "#/$defs/BackgroundImage"
        },
        "color": {
          "$ref": "#/$defs/Color"
        },
        "padding": {
          "$ref": "#/$defs/Padding"
        },
        "border": {
          "$ref": "#/$defs/Border"
        },
        "radius": {
          "$ref": "#/$defs/Radius"
        },
        "full_width": {
          "type": "boolean"
        },
        "mobile": {
          "type": "object",
          "properties": {
            "side_padding": {
              "$ref": "#/$defs/PhonePadding"
            }
          },
          "additionalProperties": false
        },
        "dark": {
          "type": "object",
          "properties": {
            "background": {
              "$ref": "#/$defs/Hex"
            },
            "color": {
              "$ref": "#/$defs/Hex"
            },
            "border_color": {
              "$ref": "#/$defs/Hex"
            }
          },
          "additionalProperties": false
        }
      },
      "additionalProperties": false
    },
    "BackgroundImage": {
      "type": "object",
      "properties": {
        "src": {
          "$ref": "#/$defs/Src"
        },
        "size": {
          "type": "string",
          "enum": [
            "cover",
            "contain",
            "auto"
          ]
        },
        "position": {
          "type": "string",
          "enum": [
            "center",
            "top",
            "bottom",
            "left",
            "right"
          ]
        },
        "repeat": {
          "type": "boolean"
        },
        "width": {
          "type": "integer",
          "minimum": 1,
          "maximum": 4000
        },
        "height": {
          "type": "integer",
          "minimum": 1,
          "maximum": 4000
        }
      },
      "required": [
        "src"
      ],
      "additionalProperties": false
    },
    "GridSection": {
      "type": "object",
      "properties": {
        "kind": {
          "type": "string",
          "const": "grid"
        },
        "id": {
          "$ref": "#/$defs/SectionId"
        },
        "label": {
          "type": "string",
          "minLength": 1,
          "maxLength": 60,
          "pattern": "^(?![\\s\\S]*(?:\\{\\{|\\{%|\\}\\}|%\\}))[\\s\\S]*$"
        },
        "provenance": {
          "$ref": "#/$defs/Provenance"
        },
        "per_row": {
          "type": "number",
          "enum": [
            2,
            3,
            4
          ]
        },
        "mobile": {
          "type": "object",
          "properties": {
            "per_row": {
              "type": "number",
              "enum": [
                1,
                2
              ]
            }
          },
          "additionalProperties": false
        },
        "gap": {
          "$ref": "#/$defs/Spacing"
        },
        "items": {
          "minItems": 1,
          "maxItems": 24,
          "type": "array",
          "items": {
            "$ref": "#/$defs/GridItem"
          }
        },
        "style": {
          "$ref": "#/$defs/SectionStyle"
        }
      },
      "required": [
        "kind",
        "id",
        "per_row",
        "items"
      ],
      "additionalProperties": false
    },
    "GridItem": {
      "type": "object",
      "properties": {
        "id": {
          "$ref": "#/$defs/ItemId"
        },
        "blocks": {
          "minItems": 1,
          "maxItems": 6,
          "type": "array",
          "items": {
            "$ref": "#/$defs/SimpleBlock"
          }
        },
        "style": {
          "$ref": "#/$defs/ColumnStyle"
        }
      },
      "required": [
        "id",
        "blocks"
      ],
      "additionalProperties": false
    },
    "ItemId": {
      "type": "string",
      "pattern": "^itm_[0-9a-hjkmnp-tv-z]{8}$"
    },
    "HeroSection": {
      "type": "object",
      "properties": {
        "kind": {
          "type": "string",
          "const": "hero"
        },
        "id": {
          "$ref": "#/$defs/SectionId"
        },
        "label": {
          "type": "string",
          "minLength": 1,
          "maxLength": 60,
          "pattern": "^(?![\\s\\S]*(?:\\{\\{|\\{%|\\}\\}|%\\}))[\\s\\S]*$"
        },
        "provenance": {
          "$ref": "#/$defs/Provenance"
        },
        "blocks": {
          "minItems": 1,
          "maxItems": 8,
          "type": "array",
          "items": {
            "$ref": "#/$defs/HeroBlock"
          }
        },
        "style": {
          "$ref": "#/$defs/HeroStyle"
        }
      },
      "required": [
        "kind",
        "id",
        "blocks",
        "style"
      ],
      "additionalProperties": false,
      "description": "One column over a background image."
    },
    "HeroBlock": {
      "oneOf": [
        {
          "$ref": "#/$defs/TextBlock"
        },
        {
          "$ref": "#/$defs/ImageBlock"
        },
        {
          "$ref": "#/$defs/ButtonBlock"
        },
        {
          "$ref": "#/$defs/DividerBlock"
        },
        {
          "$ref": "#/$defs/SpacerBlock"
        },
        {
          "$ref": "#/$defs/LogoBlock"
        }
      ]
    },
    "HeroStyle": {
      "type": "object",
      "properties": {
        "background": {
          "$ref": "#/$defs/Color"
        },
        "background_image": {
          "$ref": "#/$defs/BackgroundImage"
        },
        "color": {
          "$ref": "#/$defs/Color"
        },
        "padding": {
          "$ref": "#/$defs/Padding"
        },
        "border": {
          "$ref": "#/$defs/Border"
        },
        "radius": {
          "$ref": "#/$defs/Radius"
        },
        "full_width": {
          "type": "boolean"
        },
        "mobile": {
          "type": "object",
          "properties": {
            "side_padding": {
              "$ref": "#/$defs/PhonePadding"
            }
          },
          "additionalProperties": false
        },
        "dark": {
          "type": "object",
          "properties": {
            "background": {
              "$ref": "#/$defs/Hex"
            },
            "color": {
              "$ref": "#/$defs/Hex"
            },
            "border_color": {
              "$ref": "#/$defs/Hex"
            }
          },
          "additionalProperties": false
        },
        "min_height": {
          "$ref": "#/$defs/MinHeight"
        },
        "vertical_align": {
          "$ref": "#/$defs/VerticalAlign"
        }
      },
      "required": [
        "background",
        "background_image"
      ],
      "additionalProperties": false
    },
    "MinHeight": {
      "type": "string",
      "pattern": "^(?:[0-9]|[1-9][0-9]|[1-7][0-9]{2}|800)px$"
    },
    "HtmlSection": {
      "type": "object",
      "properties": {
        "kind": {
          "type": "string",
          "const": "html"
        },
        "id": {
          "$ref": "#/$defs/SectionId"
        },
        "label": {
          "type": "string",
          "minLength": 1,
          "maxLength": 60,
          "pattern": "^(?![\\s\\S]*(?:\\{\\{|\\{%|\\}\\}|%\\}))[\\s\\S]*$"
        },
        "provenance": {
          "$ref": "#/$defs/Provenance"
        },
        "html": {
          "type": "string",
          "minLength": 1,
          "maxLength": 100000
        },
        "style": {
          "$ref": "#/$defs/HtmlSectionStyle"
        }
      },
      "required": [
        "kind",
        "id",
        "html"
      ],
      "additionalProperties": false,
      "description": "A whole section of the customer’s own HTML with Liquid (§5)."
    },
    "HtmlSectionStyle": {
      "type": "object",
      "properties": {
        "background": {
          "$ref": "#/$defs/Color"
        },
        "padding": {
          "$ref": "#/$defs/Padding"
        },
        "dark": {
          "type": "object",
          "properties": {
            "background": {
              "$ref": "#/$defs/Hex"
            }
          },
          "additionalProperties": false
        }
      },
      "additionalProperties": false
    }
  }
}
