{
  "$schema": "http://json-schema.org/draft-07/schema#",
  "$id": "https://autype.com/llm-resources/page-style-entry.schema.json",
  "title": "Autype Page Style Entry",
  "description": "One default, document-first, section-first, odd, even, or blank page style entry.",
  "type": "object",
  "properties": {
    "id": {
      "type": "string",
      "pattern": "^[a-z][a-z0-9_-]{0,63}$",
      "maxLength": 64
    },
    "variant": {
      "type": "string",
      "enum": [
        "default",
        "documentFirst",
        "sectionFirst",
        "odd",
        "even",
        "blank"
      ]
    },
    "name": {
      "type": "string",
      "minLength": 1,
      "maxLength": 100
    },
    "role": {
      "type": "string",
      "enum": [
        "body",
        "cover",
        "chapter",
        "toc",
        "appendix",
        "backCover",
        "custom"
      ]
    },
    "format": {
      "type": "string",
      "enum": [
        "A3",
        "A4",
        "A5",
        "Letter",
        "Legal",
        "custom"
      ]
    },
    "width": {
      "type": "number",
      "exclusiveMinimum": 0,
      "maximum": 2000
    },
    "height": {
      "type": "number",
      "exclusiveMinimum": 0,
      "maximum": 2000
    },
    "orientation": {
      "type": "string",
      "enum": [
        "portrait",
        "landscape"
      ]
    },
    "margins": {
      "anyOf": [
        {
          "type": "object",
          "properties": {
            "mode": {
              "type": "string",
              "const": "fixed"
            },
            "top": {
              "type": "number",
              "minimum": 0,
              "maximum": 2000
            },
            "right": {
              "$ref": "#/properties/margins/anyOf/0/properties/top"
            },
            "bottom": {
              "$ref": "#/properties/margins/anyOf/0/properties/top"
            },
            "left": {
              "$ref": "#/properties/margins/anyOf/0/properties/top"
            }
          },
          "required": [
            "mode",
            "top",
            "right",
            "bottom",
            "left"
          ],
          "additionalProperties": false
        },
        {
          "type": "object",
          "properties": {
            "mode": {
              "type": "string",
              "const": "mirrored"
            },
            "top": {
              "$ref": "#/properties/margins/anyOf/0/properties/top"
            },
            "bottom": {
              "$ref": "#/properties/margins/anyOf/0/properties/top"
            },
            "inside": {
              "$ref": "#/properties/margins/anyOf/0/properties/top"
            },
            "outside": {
              "$ref": "#/properties/margins/anyOf/0/properties/top"
            },
            "gutter": {
              "$ref": "#/properties/margins/anyOf/0/properties/top"
            }
          },
          "required": [
            "mode",
            "top",
            "bottom",
            "inside",
            "outside"
          ],
          "additionalProperties": false
        }
      ]
    },
    "bleed": {
      "type": "object",
      "properties": {
        "top": {
          "$ref": "#/properties/margins/anyOf/0/properties/top"
        },
        "right": {
          "$ref": "#/properties/margins/anyOf/0/properties/top"
        },
        "bottom": {
          "$ref": "#/properties/margins/anyOf/0/properties/top"
        },
        "left": {
          "$ref": "#/properties/margins/anyOf/0/properties/top"
        }
      },
      "additionalProperties": false
    },
    "verticalAlign": {
      "type": "string",
      "enum": [
        "top",
        "center",
        "bottom"
      ]
    },
    "columns": {
      "type": "object",
      "properties": {
        "count": {
          "type": "integer",
          "minimum": 1,
          "maximum": 12
        },
        "gap": {
          "$ref": "#/properties/margins/anyOf/0/properties/top"
        },
        "divider": {
          "type": "object",
          "properties": {
            "width": {
              "type": "number",
              "minimum": 0,
              "maximum": 50
            },
            "style": {
              "type": "string",
              "enum": [
                "solid",
                "dashed",
                "dotted",
                "double"
              ]
            },
            "color": {
              "type": "string"
            },
            "opacity": {
              "type": "number",
              "minimum": 0,
              "maximum": 1
            }
          },
          "required": [
            "width",
            "style",
            "color"
          ],
          "additionalProperties": false
        },
        "balance": {
          "type": "boolean"
        }
      },
      "required": [
        "count",
        "gap"
      ],
      "additionalProperties": false
    },
    "background": {
      "anyOf": [
        {
          "anyOf": [
            {
              "type": "object",
              "properties": {
                "type": {
                  "type": "string",
                  "const": "none"
                }
              },
              "required": [
                "type"
              ],
              "additionalProperties": false
            },
            {
              "type": "object",
              "properties": {
                "type": {
                  "type": "string",
                  "const": "color"
                },
                "color": {
                  "$ref": "#/properties/columns/properties/divider/properties/color"
                },
                "opacity": {
                  "$ref": "#/properties/columns/properties/divider/properties/opacity"
                }
              },
              "required": [
                "type",
                "color"
              ],
              "additionalProperties": false
            },
            {
              "type": "object",
              "properties": {
                "type": {
                  "type": "string",
                  "const": "image"
                },
                "src": {
                  "type": "string",
                  "minLength": 1,
                  "maxLength": 2000
                },
                "backgroundColor": {
                  "$ref": "#/properties/columns/properties/divider/properties/color"
                },
                "fit": {
                  "type": "string",
                  "enum": [
                    "contain",
                    "cover",
                    "fill",
                    "none"
                  ]
                },
                "positionX": {
                  "type": "number",
                  "minimum": 0,
                  "maximum": 100
                },
                "positionY": {
                  "type": "number",
                  "minimum": 0,
                  "maximum": 100
                },
                "opacity": {
                  "$ref": "#/properties/columns/properties/divider/properties/opacity"
                }
              },
              "required": [
                "type",
                "src"
              ],
              "additionalProperties": false
            },
            {
              "type": "object",
              "properties": {
                "type": {
                  "type": "string",
                  "const": "linearGradient"
                },
                "angle": {
                  "type": "number",
                  "minimum": -360,
                  "maximum": 360
                },
                "stops": {
                  "type": "array",
                  "items": {
                    "type": "object",
                    "properties": {
                      "offset": {
                        "type": "number",
                        "minimum": 0,
                        "maximum": 100
                      },
                      "color": {
                        "$ref": "#/properties/columns/properties/divider/properties/color"
                      },
                      "opacity": {
                        "$ref": "#/properties/columns/properties/divider/properties/opacity"
                      }
                    },
                    "required": [
                      "offset",
                      "color"
                    ],
                    "additionalProperties": false
                  },
                  "minItems": 2,
                  "maxItems": 20
                },
                "opacity": {
                  "$ref": "#/properties/columns/properties/divider/properties/opacity"
                }
              },
              "required": [
                "type",
                "angle",
                "stops"
              ],
              "additionalProperties": false
            },
            {
              "type": "object",
              "properties": {
                "type": {
                  "type": "string",
                  "const": "radialGradient"
                },
                "centerX": {
                  "type": "number",
                  "minimum": 0,
                  "maximum": 100
                },
                "centerY": {
                  "type": "number",
                  "minimum": 0,
                  "maximum": 100
                },
                "stops": {
                  "type": "array",
                  "items": {
                    "$ref": "#/properties/background/anyOf/0/anyOf/3/properties/stops/items"
                  },
                  "minItems": 2,
                  "maxItems": 20
                },
                "opacity": {
                  "$ref": "#/properties/columns/properties/divider/properties/opacity"
                }
              },
              "required": [
                "type",
                "stops"
              ],
              "additionalProperties": false
            }
          ]
        },
        {
          "type": "null"
        }
      ]
    },
    "objects": {
      "type": "array",
      "items": {
        "anyOf": [
          {
            "type": "object",
            "properties": {
              "id": {
                "$ref": "#/properties/id"
              },
              "layer": {
                "type": "string",
                "enum": [
                  "background",
                  "foreground"
                ]
              },
              "anchor": {
                "type": "string",
                "enum": [
                  "page",
                  "content"
                ]
              },
              "frame": {
                "type": "object",
                "properties": {
                  "top": {
                    "type": "number",
                    "minimum": -2000,
                    "maximum": 2000
                  },
                  "right": {
                    "$ref": "#/properties/objects/items/anyOf/0/properties/frame/properties/top"
                  },
                  "bottom": {
                    "$ref": "#/properties/objects/items/anyOf/0/properties/frame/properties/top"
                  },
                  "left": {
                    "$ref": "#/properties/objects/items/anyOf/0/properties/frame/properties/top"
                  },
                  "width": {
                    "type": "number",
                    "exclusiveMinimum": 0,
                    "maximum": 2000
                  },
                  "height": {
                    "type": "number",
                    "exclusiveMinimum": 0,
                    "maximum": 2000
                  }
                },
                "additionalProperties": false
              },
              "rotation": {
                "type": "number",
                "minimum": -360,
                "maximum": 360
              },
              "opacity": {
                "$ref": "#/properties/columns/properties/divider/properties/opacity"
              },
              "mirrorOnEven": {
                "type": "boolean"
              },
              "allowOverlap": {
                "type": "boolean"
              },
              "allowClip": {
                "type": "boolean"
              },
              "locked": {
                "type": "boolean"
              },
              "alt": {
                "type": "string",
                "maxLength": 500
              },
              "zIndex": {
                "type": "integer",
                "minimum": -1000,
                "maximum": 1000
              },
              "type": {
                "type": "string",
                "const": "shape"
              },
              "shape": {
                "type": "string",
                "enum": [
                  "rectangle",
                  "roundedRectangle",
                  "ellipse",
                  "triangle",
                  "diamond",
                  "polygon"
                ]
              },
              "points": {
                "type": "array",
                "items": {
                  "type": "object",
                  "properties": {
                    "x": {
                      "type": "number",
                      "minimum": 0,
                      "maximum": 100
                    },
                    "y": {
                      "type": "number",
                      "minimum": 0,
                      "maximum": 100
                    }
                  },
                  "required": [
                    "x",
                    "y"
                  ],
                  "additionalProperties": false
                },
                "minItems": 3,
                "maxItems": 100
              },
              "fill": {
                "$ref": "#/properties/background/anyOf/0"
              },
              "borders": {
                "type": "object",
                "properties": {
                  "top": {
                    "anyOf": [
                      {
                        "$ref": "#/properties/columns/properties/divider"
                      },
                      {
                        "type": "null"
                      }
                    ]
                  },
                  "right": {
                    "anyOf": [
                      {
                        "$ref": "#/properties/columns/properties/divider"
                      },
                      {
                        "type": "null"
                      }
                    ]
                  },
                  "bottom": {
                    "anyOf": [
                      {
                        "$ref": "#/properties/columns/properties/divider"
                      },
                      {
                        "type": "null"
                      }
                    ]
                  },
                  "left": {
                    "anyOf": [
                      {
                        "$ref": "#/properties/columns/properties/divider"
                      },
                      {
                        "type": "null"
                      }
                    ]
                  }
                },
                "additionalProperties": false
              },
              "radius": {
                "$ref": "#/properties/margins/anyOf/0/properties/top"
              }
            },
            "required": [
              "id",
              "layer",
              "anchor",
              "frame",
              "type",
              "shape"
            ],
            "additionalProperties": false
          },
          {
            "type": "object",
            "properties": {
              "id": {
                "$ref": "#/properties/id"
              },
              "layer": {
                "$ref": "#/properties/objects/items/anyOf/0/properties/layer"
              },
              "anchor": {
                "$ref": "#/properties/objects/items/anyOf/0/properties/anchor"
              },
              "frame": {
                "$ref": "#/properties/objects/items/anyOf/0/properties/frame"
              },
              "rotation": {
                "$ref": "#/properties/objects/items/anyOf/0/properties/rotation"
              },
              "opacity": {
                "$ref": "#/properties/objects/items/anyOf/0/properties/opacity"
              },
              "mirrorOnEven": {
                "$ref": "#/properties/objects/items/anyOf/0/properties/mirrorOnEven"
              },
              "allowOverlap": {
                "$ref": "#/properties/objects/items/anyOf/0/properties/allowOverlap"
              },
              "allowClip": {
                "$ref": "#/properties/objects/items/anyOf/0/properties/allowClip"
              },
              "locked": {
                "$ref": "#/properties/objects/items/anyOf/0/properties/locked"
              },
              "alt": {
                "$ref": "#/properties/objects/items/anyOf/0/properties/alt"
              },
              "zIndex": {
                "$ref": "#/properties/objects/items/anyOf/0/properties/zIndex"
              },
              "type": {
                "type": "string",
                "const": "line"
              },
              "from": {
                "type": "object",
                "properties": {
                  "x": {
                    "type": "number",
                    "minimum": 0,
                    "maximum": 100
                  },
                  "y": {
                    "type": "number",
                    "minimum": 0,
                    "maximum": 100
                  }
                },
                "required": [
                  "x",
                  "y"
                ],
                "additionalProperties": false
              },
              "to": {
                "type": "object",
                "properties": {
                  "x": {
                    "type": "number",
                    "minimum": 0,
                    "maximum": 100
                  },
                  "y": {
                    "type": "number",
                    "minimum": 0,
                    "maximum": 100
                  }
                },
                "required": [
                  "x",
                  "y"
                ],
                "additionalProperties": false
              },
              "line": {
                "$ref": "#/properties/columns/properties/divider"
              },
              "startArrow": {
                "type": "boolean"
              },
              "endArrow": {
                "type": "boolean"
              }
            },
            "required": [
              "id",
              "layer",
              "anchor",
              "frame",
              "type",
              "from",
              "to",
              "line"
            ],
            "additionalProperties": false
          },
          {
            "type": "object",
            "properties": {
              "id": {
                "$ref": "#/properties/id"
              },
              "layer": {
                "$ref": "#/properties/objects/items/anyOf/0/properties/layer"
              },
              "anchor": {
                "$ref": "#/properties/objects/items/anyOf/0/properties/anchor"
              },
              "frame": {
                "$ref": "#/properties/objects/items/anyOf/0/properties/frame"
              },
              "rotation": {
                "$ref": "#/properties/objects/items/anyOf/0/properties/rotation"
              },
              "opacity": {
                "$ref": "#/properties/objects/items/anyOf/0/properties/opacity"
              },
              "mirrorOnEven": {
                "$ref": "#/properties/objects/items/anyOf/0/properties/mirrorOnEven"
              },
              "allowOverlap": {
                "$ref": "#/properties/objects/items/anyOf/0/properties/allowOverlap"
              },
              "allowClip": {
                "$ref": "#/properties/objects/items/anyOf/0/properties/allowClip"
              },
              "locked": {
                "$ref": "#/properties/objects/items/anyOf/0/properties/locked"
              },
              "alt": {
                "$ref": "#/properties/objects/items/anyOf/0/properties/alt"
              },
              "zIndex": {
                "$ref": "#/properties/objects/items/anyOf/0/properties/zIndex"
              },
              "type": {
                "type": "string",
                "const": "image"
              },
              "src": {
                "type": "string",
                "minLength": 1,
                "maxLength": 2000
              },
              "fit": {
                "type": "string",
                "enum": [
                  "contain",
                  "cover",
                  "fill",
                  "none"
                ]
              },
              "focalPoint": {
                "type": "object",
                "properties": {
                  "x": {
                    "type": "number",
                    "minimum": 0,
                    "maximum": 100
                  },
                  "y": {
                    "type": "number",
                    "minimum": 0,
                    "maximum": 100
                  }
                },
                "required": [
                  "x",
                  "y"
                ],
                "additionalProperties": false
              },
              "link": {
                "type": "string",
                "format": "uri",
                "maxLength": 2000
              }
            },
            "required": [
              "id",
              "layer",
              "anchor",
              "frame",
              "type",
              "src"
            ],
            "additionalProperties": false
          },
          {
            "type": "object",
            "properties": {
              "id": {
                "$ref": "#/properties/id"
              },
              "layer": {
                "$ref": "#/properties/objects/items/anyOf/0/properties/layer"
              },
              "anchor": {
                "$ref": "#/properties/objects/items/anyOf/0/properties/anchor"
              },
              "frame": {
                "$ref": "#/properties/objects/items/anyOf/0/properties/frame"
              },
              "rotation": {
                "$ref": "#/properties/objects/items/anyOf/0/properties/rotation"
              },
              "opacity": {
                "$ref": "#/properties/objects/items/anyOf/0/properties/opacity"
              },
              "mirrorOnEven": {
                "$ref": "#/properties/objects/items/anyOf/0/properties/mirrorOnEven"
              },
              "allowOverlap": {
                "$ref": "#/properties/objects/items/anyOf/0/properties/allowOverlap"
              },
              "allowClip": {
                "$ref": "#/properties/objects/items/anyOf/0/properties/allowClip"
              },
              "locked": {
                "$ref": "#/properties/objects/items/anyOf/0/properties/locked"
              },
              "alt": {
                "$ref": "#/properties/objects/items/anyOf/0/properties/alt"
              },
              "zIndex": {
                "$ref": "#/properties/objects/items/anyOf/0/properties/zIndex"
              },
              "fontFamily": {
                "type": "string",
                "minLength": 1,
                "maxLength": 100
              },
              "fontSize": {
                "type": "number",
                "minimum": 1,
                "maximum": 500
              },
              "fontWeight": {
                "type": "string",
                "enum": [
                  "normal",
                  "medium",
                  "semibold",
                  "bold"
                ]
              },
              "fontStyle": {
                "type": "string",
                "enum": [
                  "normal",
                  "italic"
                ]
              },
              "color": {
                "$ref": "#/properties/columns/properties/divider/properties/color"
              },
              "align": {
                "type": "string",
                "enum": [
                  "left",
                  "center",
                  "right",
                  "justify"
                ]
              },
              "lineHeight": {
                "type": "number",
                "minimum": 0.5,
                "maximum": 5
              },
              "type": {
                "type": "string",
                "const": "text"
              },
              "text": {
                "type": "string",
                "minLength": 1,
                "maxLength": 5000
              },
              "format": {
                "type": "string",
                "enum": [
                  "plain",
                  "markdown"
                ]
              },
              "verticalAlign": {
                "type": "string",
                "enum": [
                  "top",
                  "center",
                  "bottom"
                ]
              },
              "padding": {
                "$ref": "#/properties/bleed"
              },
              "fill": {
                "$ref": "#/properties/background/anyOf/0"
              },
              "link": {
                "type": "string",
                "format": "uri",
                "maxLength": 2000
              }
            },
            "required": [
              "id",
              "layer",
              "anchor",
              "frame",
              "type",
              "text"
            ],
            "additionalProperties": false
          },
          {
            "type": "object",
            "properties": {
              "id": {
                "$ref": "#/properties/id"
              },
              "layer": {
                "$ref": "#/properties/objects/items/anyOf/0/properties/layer"
              },
              "anchor": {
                "$ref": "#/properties/objects/items/anyOf/0/properties/anchor"
              },
              "frame": {
                "$ref": "#/properties/objects/items/anyOf/0/properties/frame"
              },
              "rotation": {
                "$ref": "#/properties/objects/items/anyOf/0/properties/rotation"
              },
              "opacity": {
                "$ref": "#/properties/objects/items/anyOf/0/properties/opacity"
              },
              "mirrorOnEven": {
                "$ref": "#/properties/objects/items/anyOf/0/properties/mirrorOnEven"
              },
              "allowOverlap": {
                "$ref": "#/properties/objects/items/anyOf/0/properties/allowOverlap"
              },
              "allowClip": {
                "$ref": "#/properties/objects/items/anyOf/0/properties/allowClip"
              },
              "locked": {
                "$ref": "#/properties/objects/items/anyOf/0/properties/locked"
              },
              "alt": {
                "$ref": "#/properties/objects/items/anyOf/0/properties/alt"
              },
              "zIndex": {
                "$ref": "#/properties/objects/items/anyOf/0/properties/zIndex"
              },
              "fontFamily": {
                "$ref": "#/properties/objects/items/anyOf/3/properties/fontFamily"
              },
              "fontSize": {
                "$ref": "#/properties/objects/items/anyOf/3/properties/fontSize"
              },
              "fontWeight": {
                "$ref": "#/properties/objects/items/anyOf/3/properties/fontWeight"
              },
              "fontStyle": {
                "$ref": "#/properties/objects/items/anyOf/3/properties/fontStyle"
              },
              "color": {
                "$ref": "#/properties/objects/items/anyOf/3/properties/color"
              },
              "align": {
                "$ref": "#/properties/objects/items/anyOf/3/properties/align"
              },
              "lineHeight": {
                "$ref": "#/properties/objects/items/anyOf/3/properties/lineHeight"
              },
              "type": {
                "type": "string",
                "const": "field"
              },
              "field": {
                "type": "string",
                "enum": [
                  "pageNumber",
                  "totalPages",
                  "documentTitle",
                  "documentAuthor",
                  "documentSubject",
                  "sectionTitle",
                  "chapterTitle",
                  "currentDate",
                  "createdDate",
                  "modifiedDate"
                ]
              },
              "prefix": {
                "type": "string",
                "maxLength": 200
              },
              "suffix": {
                "type": "string",
                "maxLength": 200
              },
              "format": {
                "type": "string",
                "maxLength": 100
              },
              "locale": {
                "type": "string",
                "maxLength": 35
              },
              "fallback": {
                "type": "string",
                "maxLength": 500
              }
            },
            "required": [
              "id",
              "layer",
              "anchor",
              "frame",
              "type",
              "field"
            ],
            "additionalProperties": false
          }
        ]
      },
      "maxItems": 200
    },
    "headerRegionId": {
      "anyOf": [
        {
          "$ref": "#/properties/id"
        },
        {
          "type": "null"
        }
      ]
    },
    "footerRegionId": {
      "anyOf": [
        {
          "$ref": "#/properties/id"
        },
        {
          "type": "null"
        }
      ]
    }
  },
  "required": [
    "id",
    "variant"
  ],
  "additionalProperties": false
}