> ## Documentation Index
> Fetch the complete documentation index at: https://docs.blinkpdf.io/llms.txt
> Use this file to discover all available pages before exploring further.

# Validate a render request body

> Checks the same TypeBox schema and cross-field semantic rules as `POST /v1/render` — including `googleFontsUrl` / `googleFontsUrls` (mutually exclusive), the merged family pool, and rule `set.family`/`set.font` references to declared families — without generating a PDF, metering usage, or recording a successful render audit. Use this to iterate on `rules`, `furniture`, and related options before spending a render. Every authenticated call is rate-limited per plan tier against its own quota, kept independent from the `POST /v1/render` quota — a validate burst never spends render throughput and vice versa — so a burst on either endpoint may return **429** independently of the other. When Google Fonts URLs are present, each declared family is additionally checked for existence on Google Fonts (a cheap stylesheet probe, never the font file), so a misspelled family is caught here as **400** `google_font_not_found` instead of at render time. A 200 includes `typography` (declared pool, active body/heading, assignments, and unused pool members) when URLs are present. A 200 means valid at check time only — it does not guarantee the later render succeeds (Google may be unreachable between the two calls). Every 200 also carries `imageDiagnostics`: the render-time image and layout diagnostics (decode failures, remote fetch/SSRF rejections, oversize, unsupported MIME, rule overlay/mask asset failures, and layout warnings such as a wrap image placed as a block because it is taller than the page or a table row forced to split) computed render-free, each object byte-identical to the entry `POST /v1/render` reports in `X-Render-Diagnostics`, so a dry-run sees that an image will not decode or fetch, or that a layout warning will fire, without spending a render. The array is empty when nothing fires. The only accepted query parameter is `?preview=resolved|layout|glyphs`; any other query parameter, or an unrecognized `preview` value, returns **400** `invalid_input`.



## OpenAPI

````yaml /openapi.json post /v1/render/validate
openapi: 3.1.0
info:
  title: Blink PDF API
  description: >-
    Render Markdown into accessible, PDF/UA-conformant PDFs over HTTP. Send
    Markdown plus optional document metadata, fonts, page layout, viewer hints,
    and per-block style overrides to `POST /v1/render`, or use a structured
    template such as `POST /v1/templates/sandwich-document/render`.
    Authentication is via an `x-api-key` header. Unknown routes return HTTP 404
    with body `{ "error": "not_found" }`.
  version: 1.3.1
  contact:
    name: Blink PDF Support
    email: support@blinkpdf.io
  license:
    name: Proprietary
    identifier: LicenseRef-Proprietary
servers:
  - url: https://api.blinkpdf.io
    description: Production
security: []
tags:
  - name: Discovery
    description: Machine-readable API entry point
  - name: Health
    description: Liveness probes
  - name: Render
    description: Markdown-to-PDF rendering
  - name: Fonts
    description: Hosted font catalog and Google Fonts capability discovery
  - name: SandwichDocument
    description: >-
      Sandwich documents — a first-page header (logo, professional identity,
      subject/context data) and a last-page footer (signature, name) wrapping a
      Markdown body
paths:
  /v1/render/validate:
    post:
      tags:
        - Render
      summary: Validate a render request body
      description: >-
        Checks the same TypeBox schema and cross-field semantic rules as `POST
        /v1/render` — including `googleFontsUrl` / `googleFontsUrls` (mutually
        exclusive), the merged family pool, and rule `set.family`/`set.font`
        references to declared families — without generating a PDF, metering
        usage, or recording a successful render audit. Use this to iterate on
        `rules`, `furniture`, and related options before spending a render.
        Every authenticated call is rate-limited per plan tier against its own
        quota, kept independent from the `POST /v1/render` quota — a validate
        burst never spends render throughput and vice versa — so a burst on
        either endpoint may return **429** independently of the other. When
        Google Fonts URLs are present, each declared family is additionally
        checked for existence on Google Fonts (a cheap stylesheet probe, never
        the font file), so a misspelled family is caught here as **400**
        `google_font_not_found` instead of at render time. A 200 includes
        `typography` (declared pool, active body/heading, assignments, and
        unused pool members) when URLs are present. A 200 means valid at check
        time only — it does not guarantee the later render succeeds (Google may
        be unreachable between the two calls). Every 200 also carries
        `imageDiagnostics`: the render-time image and layout diagnostics (decode
        failures, remote fetch/SSRF rejections, oversize, unsupported MIME, rule
        overlay/mask asset failures, and layout warnings such as a wrap image
        placed as a block because it is taller than the page or a table row
        forced to split) computed render-free, each object byte-identical to the
        entry `POST /v1/render` reports in `X-Render-Diagnostics`, so a dry-run
        sees that an image will not decode or fetch, or that a layout warning
        will fire, without spending a render. The array is empty when nothing
        fires. The only accepted query parameter is
        `?preview=resolved|layout|glyphs`; any other query parameter, or an
        unrecognized `preview` value, returns **400** `invalid_input`.
      operationId: validateRenderBody
      parameters:
        - name: preview
          in: query
          required: false
          schema:
            type: string
            enum:
              - resolved
              - layout
          description: >-
            Optional preview mode (no PDF bytes). `layout` runs a dry-run
            pagination and returns `pages`; `resolved` returns the post-cascade
            effective `set` per node in `resolved`.
      requestBody:
        description: >-
          Markdown source plus optional document metadata, font selection, page
          layout, viewer hints, style overrides, and page furniture. Only
          `markdown` is required; everything else falls back to safe defaults.
          When `metadata.title` is omitted the title is derived from the first
          Markdown heading; a document with no heading and no title is rendered
          without a title (no `/Title`) and is consequently not PDF/UA-1
          conformant. Image references use standard Markdown URLs: `data:` is
          inline, `http(s)://` URLs are fetched by the service under strict
          security defaults (private-IP rejection always-on), and unsupported
          schemes are reported as render diagnostics. Local images can also be
          staged out of band and referenced from Markdown as
          `blink://asset/<sha256>`, where the handle is the base64url SHA-256 of
          the bytes; the bytes are fetched at render time and do not count
          toward the request input size limit. Staged images can also be laid
          out as pages — one per page or a grid — via the `imageSequence`
          option, without hand-authored Markdown. See
          `components.examples.RenderRequest.Minimal`,
          `components.examples.RenderRequest.WithRules`,
          `components.examples.RenderRequest.WithImages`,
          `components.examples.RenderRequest.WithLocalAssets`,
          `components.examples.RenderRequest.WithImageSequence`,
          `components.examples.RenderRequest.WithOutline`,
          `components.examples.RenderRequest.WithHeadingNumbering`,
          `components.examples.RenderRequest.WithPageBackground`, and
          `components.examples.RenderRequest.WithFurniture` for canonical
          request shapes.
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/Render.Body'
        required: true
      responses:
        '200':
          description: >-
            The body is valid for rendering. No PDF bytes are returned. The
            response carries `imageDiagnostics` — the render-time image and
            layout diagnostics (decode/fetch failures, rejected schemes,
            oversize, forced layout changes) computed render-free, at parity
            with the render `X-Render-Diagnostics` header.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Render.ValidateOk'
        '400':
          $ref: '#/components/responses/Responses.BadRequest'
        '401':
          $ref: '#/components/responses/Responses.Unauthorized'
        '405':
          $ref: '#/components/responses/Responses.MethodNotAllowed'
        '413':
          $ref: '#/components/responses/Responses.PayloadTooLarge'
        '429':
          $ref: '#/components/responses/Responses.RateLimited'
        '500':
          $ref: '#/components/responses/Responses.InternalError'
        '503':
          $ref: '#/components/responses/Responses.SourceUnavailable'
      security:
        - apiKey: []
components:
  schemas:
    Render.Body:
      additionalProperties: false
      description: >-
        Markdown source plus optional document metadata, font selection, page
        layout, viewer hints, style overrides, and page furniture. Only
        `markdown` is required; everything else falls back to safe defaults.
        When `metadata.title` is omitted the title is derived from the first
        Markdown heading; a document with no heading and no title is rendered
        without a title (no `/Title`) and is consequently not PDF/UA-1
        conformant. Image references use standard Markdown URLs: `data:` is
        inline, `http(s)://` URLs are fetched by the service under strict
        security defaults (private-IP rejection always-on), and unsupported
        schemes are reported as render diagnostics. Local images can also be
        staged out of band and referenced from Markdown as
        `blink://asset/<sha256>`, where the handle is the base64url SHA-256 of
        the bytes; the bytes are fetched at render time and do not count toward
        the request input size limit. Staged images can also be laid out as
        pages — one per page or a grid — via the `imageSequence` option, without
        hand-authored Markdown. See `components.examples.RenderRequest.Minimal`,
        `components.examples.RenderRequest.WithRules`,
        `components.examples.RenderRequest.WithImages`,
        `components.examples.RenderRequest.WithLocalAssets`,
        `components.examples.RenderRequest.WithImageSequence`,
        `components.examples.RenderRequest.WithOutline`,
        `components.examples.RenderRequest.WithHeadingNumbering`,
        `components.examples.RenderRequest.WithPageBackground`, and
        `components.examples.RenderRequest.WithFurniture` for canonical request
        shapes.
      example:
        markdown: |-
          # Hello

          World
      type: object
      required:
        - markdown
      properties:
        markdown:
          minLength: 0
          maxLength: 262144
          description: Markdown source to render to PDF
          type: string
        title:
          minLength: 1
          maxLength: 1024
          pattern: \S
          description: >-
            Convenience alias for `metadata.title`. When both are present
            `metadata.title` wins. Defaults to the first Markdown heading when
            neither is set
          type: string
        metadata:
          additionalProperties: false
          description: >-
            PDF document metadata embedded in the rendered file. These fields
            are visible to anyone who opens the PDF — never include PHI,
            secrets, or other sensitive data.
          type: object
          properties:
            title:
              minLength: 1
              maxLength: 1024
              pattern: \S
              description: Document title
              type: string
            author:
              minLength: 1
              maxLength: 1024
              pattern: \S
              description: Document author
              type: string
            subject:
              minLength: 1
              maxLength: 1024
              pattern: \S
              description: Document subject
              type: string
            keywords:
              maxItems: 32
              description: Document keywords
              type: array
              items:
                minLength: 1
                maxLength: 256
                pattern: \S
                type: string
            creator:
              minLength: 1
              maxLength: 1024
              pattern: \S
              description: Name of the application that created the document
              type: string
            creationDate:
              pattern: >-
                ^\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}(\.\d{1,9})?(Z|[+-]\d{2}:\d{2})$
              description: Date and time in ISO 8601 format with timezone offset or `Z`
              type: string
            modificationDate:
              pattern: >-
                ^\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}(\.\d{1,9})?(Z|[+-]\d{2}:\d{2})$
              description: Date and time in ISO 8601 format with timezone offset or `Z`
              type: string
            trapped:
              type: string
              enum:
                - 'true'
                - 'false'
                - unknown
        fontStack:
          minItems: 1
          maxItems: 4
          description: >-
            Ordered list of hosted font families; earlier families take
            precedence, later ones provide fallback coverage. Every family is
            available on every plan. When `googleFontsUrl` or `googleFontsUrls`
            is set, the Google family takes the body/heading slot and any
            weighted family in the stack is ignored (the stack then supplies
            only the emoji and code roles). Emoji families are appended
            automatically when omitted
          type: array
          items:
            type: string
            enum:
              - inter
              - lora
              - source-serif-4
              - noto-emoji-mono
              - twemoji-mozilla
              - jetbrains-mono
        typography:
          additionalProperties: false
          description: >-
            Unified font selection: pool declaration/overrides, custom named
            roles, hosted heading variant policy, and per-family static weight
            maps for the four-variant PDF model. Body, heading, and per-depth
            heading families are assigned with rules (`select` + `set.family`);
            positional URL defaults apply otherwise
          type: object
          properties:
            body:
              description: >-
                A text family: a hosted weighted key, a declared Google Fonts
                display name, or a `typography.named` role reference
              anyOf:
                - const: inter
                  type: string
                - const: lora
                  type: string
                - const: source-serif-4
                  type: string
                - pattern: ^[A-Za-z][A-Za-z0-9 ]{0,63}$
                  description: >-
                    Google Fonts display name from the declared pool (e.g.
                    `Playfair Display`)
                  type: string
                - pattern: ^[a-z][a-z0-9-]{0,15}$
                  description: >-
                    Reference to a custom role declared in `typography.named`
                    (e.g. `display`)
                  type: string
            heading:
              description: >-
                A text family: a hosted weighted key, a declared Google Fonts
                display name, or a `typography.named` role reference
              anyOf:
                - const: inter
                  type: string
                - const: lora
                  type: string
                - const: source-serif-4
                  type: string
                - pattern: ^[A-Za-z][A-Za-z0-9 ]{0,63}$
                  description: >-
                    Google Fonts display name from the declared pool (e.g.
                    `Playfair Display`)
                  type: string
                - pattern: ^[a-z][a-z0-9-]{0,15}$
                  description: >-
                    Reference to a custom role declared in `typography.named`
                    (e.g. `display`)
                  type: string
            pool:
              minItems: 1
              maxItems: 4
              description: >-
                Optional override of families parsed from `googleFontsUrl(s)`
                (max 4 distinct names)
              type: array
              items:
                additionalProperties: false
                description: >-
                  Optional override of a family parsed from `googleFontsUrl(s)`
                  (weights and italic flag)
                type: object
                required:
                  - name
                properties:
                  name:
                    pattern: ^[A-Za-z][A-Za-z0-9 ]{0,63}$
                    description: Google Fonts family display name
                    type: string
                  weights:
                    minItems: 1
                    maxItems: 4
                    description: >-
                      Explicit upright weights to declare for this family
                      (sorted ascending, unique)
                    type: array
                    items:
                      minimum: 100
                      maximum: 900
                      multipleOf: 100
                      description: >-
                        Font weight on the CSS scale in steps of 100: one of
                        100, 200, 300, 400, 500, 600, 700, 800, 900
                        (intermediate values like 450 are not valid weights)
                      anyOf:
                        - format: integer
                          default: '0'
                          type: string
                        - minimum: 100
                          maximum: 900
                          multipleOf: 100
                          description: >-
                            Font weight on the CSS scale in steps of 100: one of
                            100, 200, 300, 400, 500, 600, 700, 800, 900
                            (intermediate values like 450 are not valid weights)
                          type: integer
                  italic:
                    description: >-
                      Whether to fetch italic cuts when composing the
                      four-variant model
                    type: boolean
            named:
              minItems: 1
              maxItems: 2
              description: >-
                Up to two custom roles binding a pool family (or hosted key) to
                a name, referenced by a rule `set.font` (`<role>.<variant>`) and
                by `variantMap.role`
              type: array
              items:
                additionalProperties: false
                description: Binds a custom role name to a hosted key or pool display name
                type: object
                required:
                  - role
                  - family
                properties:
                  role:
                    pattern: ^[a-z][a-z0-9-]{0,15}$
                    description: >-
                      Custom role identifier referenced by a `FontKey` and by
                      rule `set.family`. Lowercase kebab-case (a leading letter,
                      then lowercase letters, digits, or hyphens, max 16 chars),
                      e.g. `accent`, `code-emphasis` — not camelCase or
                      snake_case, so it can appear in a `<role>.<variant>` font
                      key
                    type: string
                  family:
                    description: >-
                      A text family: a hosted weighted key, a declared Google
                      Fonts display name, or a `typography.named` role reference
                    anyOf:
                      - const: inter
                        type: string
                      - const: lora
                        type: string
                      - const: source-serif-4
                        type: string
                      - pattern: ^[A-Za-z][A-Za-z0-9 ]{0,63}$
                        description: >-
                          Google Fonts display name from the declared pool (e.g.
                          `Playfair Display`)
                        type: string
                      - pattern: ^[a-z][a-z0-9-]{0,15}$
                        description: >-
                          Reference to a custom role declared in
                          `typography.named` (e.g. `display`)
                        type: string
            headingVariant:
              type: string
              enum:
                - regular
                - bold
            variantMap:
              minItems: 1
              maxItems: 16
              description: >-
                Per-family variant-to-weight mapping. Each entry optionally
                narrows by `role` (body/heading/named) and, for headings, by
                `depth`. Resolution is by specificity: depth > role > family. Up
                to 16 entries to allow multiple (role, depth) slots per family.
              type: array
              items:
                additionalProperties: false
                type: object
                required:
                  - family
                properties:
                  family:
                    pattern: ^[A-Za-z][A-Za-z0-9 ]{0,63}$
                    description: Google Fonts family the variant map applies to
                    type: string
                  role:
                    description: >-
                      Semantic role the weights apply to. Omitted = family-wide
                      (current behavior). `depth` further narrows `role:
                      "heading"`.
                    anyOf:
                      - const: body
                        type: string
                      - const: heading
                        type: string
                      - pattern: ^[a-z][a-z0-9-]{0,15}$
                        description: >-
                          Custom role declared in `typography.named` (e.g.
                          `display`)
                        type: string
                  depth:
                    description: >-
                      Heading depth(s) the weights apply to (1–6). Only valid
                      with `role: "heading"`. A single int or an array (OR). An
                      entry with `depth` wins over a role-only entry, which wins
                      over a family-only entry.
                    anyOf:
                      - minimum: 1
                        maximum: 6
                        anyOf:
                          - format: integer
                            default: '0'
                            type: string
                          - minimum: 1
                            maximum: 6
                            type: integer
                      - minItems: 1
                        maxItems: 6
                        type: array
                        items:
                          minimum: 1
                          maximum: 6
                          anyOf:
                            - format: integer
                              default: '0'
                              type: string
                            - minimum: 1
                              maximum: 6
                              type: integer
                  regular:
                    minimum: 100
                    maximum: 900
                    multipleOf: 100
                    description: >-
                      Font weight on the CSS scale in steps of 100: one of 100,
                      200, 300, 400, 500, 600, 700, 800, 900 (intermediate
                      values like 450 are not valid weights)
                    anyOf:
                      - format: integer
                        default: '0'
                        type: string
                      - minimum: 100
                        maximum: 900
                        multipleOf: 100
                        description: >-
                          Font weight on the CSS scale in steps of 100: one of
                          100, 200, 300, 400, 500, 600, 700, 800, 900
                          (intermediate values like 450 are not valid weights)
                        type: integer
                  italic:
                    minimum: 100
                    maximum: 900
                    multipleOf: 100
                    description: >-
                      Font weight on the CSS scale in steps of 100: one of 100,
                      200, 300, 400, 500, 600, 700, 800, 900 (intermediate
                      values like 450 are not valid weights)
                    anyOf:
                      - format: integer
                        default: '0'
                        type: string
                      - minimum: 100
                        maximum: 900
                        multipleOf: 100
                        description: >-
                          Font weight on the CSS scale in steps of 100: one of
                          100, 200, 300, 400, 500, 600, 700, 800, 900
                          (intermediate values like 450 are not valid weights)
                        type: integer
                  bold:
                    minimum: 100
                    maximum: 900
                    multipleOf: 100
                    description: >-
                      Font weight on the CSS scale in steps of 100: one of 100,
                      200, 300, 400, 500, 600, 700, 800, 900 (intermediate
                      values like 450 are not valid weights)
                    anyOf:
                      - format: integer
                        default: '0'
                        type: string
                      - minimum: 100
                        maximum: 900
                        multipleOf: 100
                        description: >-
                          Font weight on the CSS scale in steps of 100: one of
                          100, 200, 300, 400, 500, 600, 700, 800, 900
                          (intermediate values like 450 are not valid weights)
                        type: integer
                  boldItalic:
                    minimum: 100
                    maximum: 900
                    multipleOf: 100
                    description: >-
                      Font weight on the CSS scale in steps of 100: one of 100,
                      200, 300, 400, 500, 600, 700, 800, 900 (intermediate
                      values like 450 are not valid weights)
                    anyOf:
                      - format: integer
                        default: '0'
                        type: string
                      - minimum: 100
                        maximum: 900
                        multipleOf: 100
                        description: >-
                          Font weight on the CSS scale in steps of 100: one of
                          100, 200, 300, 400, 500, 600, 700, 800, 900
                          (intermediate values like 450 are not valid weights)
                        type: integer
        glyphFallback:
          description: >-
            A text family: a hosted weighted key, a declared Google Fonts
            display name, or a `typography.named` role reference
          anyOf:
            - const: inter
              type: string
            - const: lora
              type: string
            - const: source-serif-4
              type: string
            - pattern: ^[A-Za-z][A-Za-z0-9 ]{0,63}$
              description: >-
                Google Fonts display name from the declared pool (e.g. `Playfair
                Display`)
              type: string
            - pattern: ^[a-z][a-z0-9-]{0,15}$
              description: >-
                Reference to a custom role declared in `typography.named` (e.g.
                `display`)
              type: string
        googleFontsUrl:
          pattern: ^https://fonts\.(googleapis|google)\.com/\S+$
          maxLength: 2048
          description: >-
            A single Google Fonts URL (alias of `googleFontsUrls[0]`). Do not
            pass together with `googleFontsUrls`. Accepted forms: CSS API
            (`https://fonts.googleapis.com/css2?family=…`), specimen
            (`https://fonts.google.com/specimen/<Family>`), or share
            (`https://fonts.google.com/share?selection.family=…`). Weight axes
            set the min/max endpoint weights fetched for the four-variant model.
            Up to 4 families per URL, and at most 4 in the merged pool across
            both URLs (two URLs do not raise the total)
          type: string
        googleFontsUrls:
          minItems: 1
          maxItems: 2
          description: >-
            One or two Google Fonts URLs merged into a single family pool (max 4
            distinct families). Default: first family of the first URL → body;
            first family of the second URL (or second family of the first URL) →
            heading. Use a rule `set.family` (or reorder URLs) to override
          type: array
          items:
            pattern: ^https://fonts\.(googleapis|google)\.com/\S+$
            maxLength: 2048
            description: >-
              A single Google Fonts URL (alias of `googleFontsUrls[0]`). Do not
              pass together with `googleFontsUrls`. Accepted forms: CSS API
              (`https://fonts.googleapis.com/css2?family=…`), specimen
              (`https://fonts.google.com/specimen/<Family>`), or share
              (`https://fonts.google.com/share?selection.family=…`). Weight axes
              set the min/max endpoint weights fetched for the four-variant
              model. Up to 4 families per URL, and at most 4 in the merged pool
              across both URLs (two URLs do not raise the total)
            type: string
        page:
          additionalProperties: false
          description: >-
            Page geometry and appearance: size (named preset or `[width,
            height]` in points), orientation, margins, and optional full-sheet
            background
          type: object
          properties:
            size:
              description: >-
                Page size as a named preset (`A4`, `Letter`, …) or an explicit
                `[width, height]` pair in points
              anyOf:
                - const: A3
                  type: string
                - const: A4
                  type: string
                - const: A5
                  type: string
                - const: B4
                  type: string
                - const: B5
                  type: string
                - const: Letter
                  type: string
                - const: Legal
                  type: string
                - const: Tabloid
                  type: string
                - const: HalfLetter
                  type: string
                - type: array
                  items:
                    minimum: 1
                    maximum: 14400
                    type: number
                  minItems: 2
                  maxItems: 2
            orientation:
              type: string
              enum:
                - portrait
                - landscape
            margin:
              anyOf:
                - minimum: 0
                  maximum: 2880
                  description: Uniform margin in points applied to all four sides
                  type: number
                - additionalProperties: false
                  type: object
                  required:
                    - top
                    - right
                    - bottom
                    - left
                  properties:
                    top:
                      minimum: 0
                      maximum: 2880
                      description: Top margin in points
                      type: number
                    right:
                      minimum: 0
                      maximum: 2880
                      description: Right margin in points
                      type: number
                    bottom:
                      minimum: 0
                      maximum: 2880
                      description: Bottom margin in points
                      type: number
                    left:
                      minimum: 0
                      maximum: 2880
                      description: Left margin in points
                      type: number
            background:
              description: >-
                Full-page sheet background as `#RGB`/`#RRGGBB` with optional
                opacity, or `null` to suppress an explicit fill
              anyOf:
                - additionalProperties: false
                  type: object
                  required:
                    - color
                  properties:
                    color:
                      pattern: ^#([0-9a-fA-F]{3}|[0-9a-fA-F]{6})$
                      description: Color as `#RGB` or `#RRGGBB`
                      type: string
                    opacity:
                      minimum: 0
                      maximum: 1
                      description: Fill opacity from 0 to 1
                      type: number
                - type: 'null'
        viewer:
          additionalProperties: false
          description: >-
            PDF viewer hints — document language, page layout, page mode, and
            viewer preferences (toolbar/menubar visibility, fit-to-window,
            duplex, print scaling)
          type: object
          properties:
            language:
              minLength: 1
              maxLength: 35
              pattern: ^[A-Za-z]{2,8}(-[A-Za-z0-9]{1,8})*$
              description: >-
                Document language as a well-formed BCP 47 language tag (e.g.
                `en`, `en-US`, `zh-Hans-CN`). Sets the PDF `/Lang`; a malformed
                tag is rejected so an accessible document never advertises a
                language it cannot honor.
              type: string
            pageLayout:
              type: string
              enum:
                - single
                - one-column
                - two-column-left
                - two-column-right
                - two-page-left
                - two-page-right
            pageMode:
              type: string
              enum:
                - none
                - outlines
                - thumbs
                - fullscreen
                - attachments
            preferences:
              additionalProperties: false
              type: object
              properties:
                hideToolbar:
                  description: Hide the viewer toolbar when the document opens
                  type: boolean
                hideMenubar:
                  description: Hide the viewer menu bar when the document opens
                  type: boolean
                hideWindowUI:
                  description: >-
                    Hide scroll bars and navigation controls when the document
                    opens
                  type: boolean
                fitWindow:
                  description: Resize the viewer window to fit the first page
                  type: boolean
                centerWindow:
                  description: Center the viewer window on the screen
                  type: boolean
                displayDocTitle:
                  description: >-
                    Show the document title in the title bar instead of the file
                    name
                  type: boolean
                direction:
                  type: string
                  enum:
                    - ltr
                    - rtl
                duplex:
                  type: string
                  enum:
                    - simplex
                    - duplex-short-edge
                    - duplex-long-edge
                printScaling:
                  type: string
                  enum:
                    - none
                    - app-default
        rules:
          maxItems: 256
          description: Surgical presentation rules over standard Markdown nodes.
          type: array
          items:
            additionalProperties: false
            description: >-
              A presentation rule: `select` chooses nodes, `set` applies
              properties, `priority` orders the cascade.
            type: object
            required:
              - select
              - set
            properties:
              select:
                additionalProperties: false
                description: >-
                  Markdown-native node selector. All present axes AND together;
                  enumerable axes (`type`, `depth`, `markerFormat`, `kind`,
                  `language`) accept an array meaning OR. An empty object
                  matches every node.
                type: object
                properties:
                  type:
                    description: Node type; array = OR
                    anyOf:
                      - description: A selectable Markdown node type
                        anyOf:
                          - const: heading
                            type: string
                          - const: paragraph
                            type: string
                          - const: list
                            type: string
                          - const: listItem
                            type: string
                          - const: blockquote
                            type: string
                          - const: table
                            type: string
                          - const: codeBlock
                            type: string
                          - const: thematicBreak
                            type: string
                          - const: image
                            type: string
                          - const: strong
                            type: string
                          - const: emphasis
                            type: string
                          - const: delete
                            type: string
                          - const: mark
                            type: string
                          - const: subscript
                            type: string
                          - const: superscript
                            type: string
                          - const: link
                            type: string
                          - const: inlineCode
                            type: string
                      - minItems: 1
                        type: array
                        items:
                          description: A selectable Markdown node type
                          anyOf:
                            - const: heading
                              type: string
                            - const: paragraph
                              type: string
                            - const: list
                              type: string
                            - const: listItem
                              type: string
                            - const: blockquote
                              type: string
                            - const: table
                              type: string
                            - const: codeBlock
                              type: string
                            - const: thematicBreak
                              type: string
                            - const: image
                              type: string
                            - const: strong
                              type: string
                            - const: emphasis
                              type: string
                            - const: delete
                              type: string
                            - const: mark
                              type: string
                            - const: subscript
                              type: string
                            - const: superscript
                              type: string
                            - const: link
                              type: string
                            - const: inlineCode
                              type: string
                  depth:
                    description: >-
                      1-based depth, 1–15 (integer or array for OR). For a
                      heading rule only 1–6 are real levels — a heading depth of
                      7–15 is schema-valid (the axis is shared with
                      list/blockquote nesting) but matches no heading and is
                      flagged `depth_out_of_range`; for a list/blockquote rule
                      it is the nesting level. Depth above 15 is rejected (the
                      maximum supported nesting).
                    anyOf:
                      - minimum: 1
                        maximum: 15
                        anyOf:
                          - format: integer
                            default: '0'
                            type: string
                          - minimum: 1
                            maximum: 15
                            type: integer
                      - minItems: 1
                        type: array
                        items:
                          minimum: 1
                          maximum: 15
                          anyOf:
                            - format: integer
                              default: '0'
                              type: string
                            - minimum: 1
                              maximum: 15
                              type: integer
                  ordered:
                    description: List ordered/unordered
                    type: boolean
                  markerFormat:
                    description: Ordered-list marker format; array = OR
                    anyOf:
                      - description: An ordered-list marker format
                        anyOf:
                          - const: decimal
                            type: string
                          - const: decimal-leading-zero
                            type: string
                          - const: lower-alpha
                            type: string
                          - const: upper-alpha
                            type: string
                          - const: lower-roman
                            type: string
                          - const: upper-roman
                            type: string
                      - minItems: 1
                        type: array
                        items:
                          description: An ordered-list marker format
                          anyOf:
                            - const: decimal
                              type: string
                            - const: decimal-leading-zero
                              type: string
                            - const: lower-alpha
                              type: string
                            - const: upper-alpha
                              type: string
                            - const: lower-roman
                              type: string
                            - const: upper-roman
                              type: string
                  start:
                    description: >-
                      Ordered-list start number — the ordinal the first item
                      renders with (`3.` → 3, default 1). A list-level axis
                      matched against the `list` node itself, not its
                      `listItem`s, and not an item's position within the list
                    anyOf:
                      - format: integer
                        default: '0'
                        type: string
                      - description: >-
                          Ordered-list start number — the ordinal the first item
                          renders with (`3.` → 3, default 1). A list-level axis
                          matched against the `list` node itself, not its
                          `listItem`s, and not an item's position within the
                          list
                        type: integer
                  task:
                    description: List item is a task checkbox
                    type: boolean
                  state:
                    type: string
                    enum:
                      - checked
                      - unchecked
                  kind:
                    description: Alert kind; array = OR
                    anyOf:
                      - description: A GFM alert kind
                        anyOf:
                          - const: note
                            type: string
                          - const: tip
                            type: string
                          - const: important
                            type: string
                          - const: warning
                            type: string
                          - const: caution
                            type: string
                      - minItems: 1
                        type: array
                        items:
                          description: A GFM alert kind
                          anyOf:
                            - const: note
                              type: string
                            - const: tip
                              type: string
                            - const: important
                              type: string
                            - const: warning
                              type: string
                            - const: caution
                              type: string
                  language:
                    description: >-
                      Code-block language (case-insensitive, alias-aware); array
                      = OR
                    anyOf:
                      - minLength: 1
                        type: string
                      - minItems: 1
                        type: array
                        items:
                          minLength: 1
                          type: string
                  placement:
                    type: string
                    enum:
                      - block
                      - inline
                  column:
                    description: Table column by 1-based index or by column alignment
                    anyOf:
                      - minimum: 1
                        anyOf:
                          - format: integer
                            default: '0'
                            type: string
                          - minimum: 1
                            type: integer
                      - additionalProperties: false
                        type: object
                        required:
                          - align
                        properties:
                          align:
                            anyOf:
                              - const: left
                                type: string
                              - const: right
                                type: string
                              - const: center
                                type: string
                  row:
                    description: >-
                      Table body row by 1-based index; negatives count from the
                      end (`-1` = last/totals). Header rows are excluded from
                      this count.
                    anyOf:
                      - format: integer
                        default: '0'
                        type: string
                      - description: >-
                          Table body row by 1-based index; negatives count from
                          the end (`-1` = last/totals). Header rows are excluded
                          from this count.
                        type: integer
                  region:
                    type: string
                    enum:
                      - header
                      - body
                  text:
                    description: 'Heading text match: exact string or `{ contains }`'
                    anyOf:
                      - description: >-
                          Exact heading text after trim + inner-space collapse +
                          NFC, case-sensitive
                        type: string
                      - additionalProperties: false
                        type: object
                        required:
                          - contains
                        properties:
                          contains:
                            minLength: 1
                            description: a non-empty substring to search for
                            type: string
                          matchCase:
                            type: boolean
                  url:
                    description: >-
                      Link/image URL match: exact, `{ endsWith }`, or `{
                      contains }`. The `endsWith`/`contains` forms are
                      case-insensitive unless `matchCase: true`
                    anyOf:
                      - type: string
                      - additionalProperties: false
                        type: object
                        required:
                          - endsWith
                        properties:
                          endsWith:
                            minLength: 1
                            description: a non-empty suffix to match
                            type: string
                          matchCase:
                            type: boolean
                      - additionalProperties: false
                        type: object
                        required:
                          - contains
                        properties:
                          contains:
                            minLength: 1
                            description: a non-empty substring to search for
                            type: string
                          matchCase:
                            type: boolean
                  alt:
                    description: >-
                      Image alt-text match: exact or `{ contains }`
                      (case-insensitive unless `matchCase: true`)
                    anyOf:
                      - type: string
                      - additionalProperties: false
                        type: object
                        required:
                          - contains
                        properties:
                          contains:
                            minLength: 1
                            description: a non-empty substring to search for
                            type: string
                          matchCase:
                            type: boolean
                  nth:
                    description: >-
                      Positional selector: a nonzero int (1-based; negatives
                      from the end), or `{ step, offset }` for
                      every-step-th-from-offset (e.g. `{step:2, offset:1}` =
                      1st, 3rd, 5th). Zero as a bare int is rejected (the
                      ordinal is 1-based); `offset:0` is valid
                    anyOf:
                      - description: >-
                          Nonzero 1-based ordinal over nodes matching the other
                          axes; negatives count from the end (-1 is the last).
                          Zero is rejected as a semantic error
                        anyOf:
                          - format: integer
                            default: '0'
                            type: string
                          - description: >-
                              Nonzero 1-based ordinal over nodes matching the
                              other axes; negatives count from the end (-1 is
                              the last). Zero is rejected as a semantic error
                            type: integer
                      - additionalProperties: false
                        type: object
                        required:
                          - step
                          - offset
                        properties:
                          step:
                            minimum: 1
                            description: 'Stride: match every step-th node (1 = every node)'
                            anyOf:
                              - format: integer
                                default: '0'
                                type: string
                              - minimum: 1
                                description: >-
                                  Stride: match every step-th node (1 = every
                                  node)
                                type: integer
                          offset:
                            minimum: 0
                            description: >-
                              Start phase: matches the node at 1-based position
                              `offset` and every `step`-th node after it — i.e.
                              positions offset, offset+step, offset+2·step, …
                              (positions ≥ 1). So `{step:2, offset:1}` = odd
                              nodes (1,3,5), `{step:2, offset:2}` = even nodes
                              (2,4,6), `{step:1, offset:2}` = node 2 onward, and
                              `offset:0` with `step:S` = S, 2S, … (position 0
                              does not exist)
                            anyOf:
                              - format: integer
                                default: '0'
                                type: string
                              - minimum: 0
                                description: >-
                                  Start phase: matches the node at 1-based
                                  position `offset` and every `step`-th node
                                  after it — i.e. positions offset, offset+step,
                                  offset+2·step, … (positions ≥ 1). So `{step:2,
                                  offset:1}` = odd nodes (1,3,5), `{step:2,
                                  offset:2}` = even nodes (2,4,6), `{step:1,
                                  offset:2}` = node 2 onward, and `offset:0`
                                  with `step:S` = S, 2S, … (position 0 does not
                                  exist)
                                type: integer
                  first:
                    description: 'Sugar for nth: 1'
                    const: true
                    type: boolean
                  last:
                    description: 'Sugar for nth: -1'
                    const: true
                    type: boolean
              set:
                additionalProperties: false
                description: >-
                  Properties applied to matched nodes. Validity depends on the
                  node category (block/inline); incompatible combinations are
                  reported by `POST /v1/render/validate`. Compound objects merge
                  recursively per leaf; arrays and discriminated unions (`mask`,
                  `overlay`) replace whole.
                type: object
                properties:
                  family:
                    description: >-
                      A text family: a hosted weighted key, a declared Google
                      Fonts display name, or a `typography.named` role reference
                    anyOf:
                      - const: inter
                        type: string
                      - const: lora
                        type: string
                      - const: source-serif-4
                        type: string
                      - pattern: ^[A-Za-z][A-Za-z0-9 ]{0,63}$
                        description: >-
                          Google Fonts display name from the declared pool (e.g.
                          `Playfair Display`)
                        type: string
                      - pattern: ^[a-z][a-z0-9-]{0,15}$
                        description: >-
                          Reference to a custom role declared in
                          `typography.named` (e.g. `display`)
                        type: string
                  font:
                    pattern: ^\S(.*\S)?$
                    description: >-
                      Font slot as `<role>.<variant>` — role is `body`,
                      `heading`, or a custom `typography.named` role; variant is
                      one of regular, italic, bold, boldItalic (see
                      `enums.fontVariant`; e.g. `heading.bold`). The shape is
                      checked semantically at validate, not by this pattern: a
                      misspelled variant, an undeclared role, a missing
                      `.variant`, or a value that reads like a family name is
                      rejected with a `didYouMean` pointing at the fix (use
                      `set.family` for a typeface).
                    type: string
                  size:
                    minimum: 1
                    maximum: 999
                    type: number
                  color:
                    description: >-
                      Color as `#RGB` or `#RRGGBB`, or `inherit` to use the
                      inherited color
                    anyOf:
                      - pattern: ^#([0-9a-fA-F]{3}|[0-9a-fA-F]{6})$
                        description: Color as `#RGB` or `#RRGGBB`
                        type: string
                      - const: inherit
                        type: string
                  lineHeight:
                    minimum: 1
                    maximum: 10
                    type: number
                  align:
                    description: >-
                      Text alignment (`left`/`right`/`center`/`justify`) for
                      text blocks, or image alignment (`start`/`center`/`end`)
                      for image blocks
                    anyOf:
                      - description: Horizontal text alignment
                        anyOf:
                          - const: left
                            type: string
                          - const: right
                            type: string
                          - const: center
                            type: string
                          - const: justify
                            type: string
                      - description: >-
                          Block-only. Horizontal alignment of the image within
                          the content area: `start` (left edge in LTR),
                          `center`, or `end` (right edge in LTR). Ignored for
                          inline images (line flow controls position).
                        anyOf:
                          - const: start
                            type: string
                          - const: center
                            type: string
                          - const: end
                            type: string
                  letterSpacing:
                    minimum: -100
                    maximum: 100
                    description: >-
                      Extra spacing between characters, in points; negative
                      values tighten the tracking
                    type: number
                  opacity:
                    minimum: 0
                    maximum: 1
                    type: number
                  spaceBefore:
                    minimum: 0
                    maximum: 9999
                    type: number
                  spaceAfter:
                    minimum: 0
                    maximum: 9999
                    type: number
                  background:
                    pattern: ^#([0-9a-fA-F]{3}|[0-9a-fA-F]{6})$
                    description: Color as `#RGB` or `#RRGGBB`
                    type: string
                  border:
                    additionalProperties: false
                    type: object
                    required:
                      - width
                      - color
                    properties:
                      width:
                        minimum: 0.1
                        maximum: 50
                        description: Border thickness in points
                        type: number
                      color:
                        pattern: ^#([0-9a-fA-F]{3}|[0-9a-fA-F]{6})$
                        description: Color as `#RGB` or `#RRGGBB`
                        type: string
                      opacity:
                        minimum: 0
                        maximum: 1
                        description: Border opacity from 0 to 1
                        type: number
                      dash:
                        description: >-
                          Dash pattern as `[dash, gap]` lengths in points; both
                          `0` is rejected
                        type: array
                        items:
                          minimum: 0
                          maximum: 1000
                          type: number
                        minItems: 2
                        maxItems: 2
                  borderLeft:
                    additionalProperties: false
                    type: object
                    required:
                      - width
                      - color
                    properties:
                      width:
                        minimum: 0.1
                        maximum: 50
                        description: Border thickness in points
                        type: number
                      color:
                        pattern: ^#([0-9a-fA-F]{3}|[0-9a-fA-F]{6})$
                        description: Color as `#RGB` or `#RRGGBB`
                        type: string
                      opacity:
                        minimum: 0
                        maximum: 1
                        description: Border opacity from 0 to 1
                        type: number
                      dash:
                        description: >-
                          Dash pattern as `[dash, gap]` lengths in points; both
                          `0` is rejected
                        type: array
                        items:
                          minimum: 0
                          maximum: 1000
                          type: number
                        minItems: 2
                        maxItems: 2
                  padding:
                    additionalProperties: false
                    type: object
                    properties:
                      top:
                        minimum: 0
                        maximum: 9999
                        description: Top padding, in points
                        type: number
                      right:
                        minimum: 0
                        maximum: 9999
                        description: Right padding, in points
                        type: number
                      bottom:
                        minimum: 0
                        maximum: 9999
                        description: Bottom padding, in points
                        type: number
                      left:
                        minimum: 0
                        maximum: 9999
                        description: Left padding, in points
                        type: number
                  borderRadius:
                    minimum: 0
                    maximum: 9999
                    type: number
                  pageBreakBefore:
                    type: boolean
                  keepWithNext:
                    type: boolean
                  minLinesAfter:
                    minimum: 1
                    anyOf:
                      - format: integer
                        default: '0'
                        type: string
                      - minimum: 1
                        type: integer
                  policy:
                    additionalProperties: false
                    type: object
                    properties:
                      mode:
                        type: string
                        enum:
                          - strict
                          - preferred
                      minLinesAtStart:
                        minimum: 0
                        description: >-
                          Minimum lines that must stay together at the start of
                          the block
                        anyOf:
                          - format: integer
                            default: '0'
                            type: string
                          - minimum: 0
                            description: >-
                              Minimum lines that must stay together at the start
                              of the block
                            type: integer
                      minLinesAtEnd:
                        minimum: 0
                        description: >-
                          Minimum lines that must stay together at the end of
                          the block
                        anyOf:
                          - format: integer
                            default: '0'
                            type: string
                          - minimum: 0
                            description: >-
                              Minimum lines that must stay together at the end
                              of the block
                            type: integer
                      maxBlankFraction:
                        minimum: 0
                        maximum: 1
                        description: >-
                          Maximum fraction of a page allowed to be left blank to
                          keep the block together
                        type: number
                      minRows:
                        minimum: 1
                        description: >-
                          Table-only. Minimum number of body rows that must stay
                          with the header when a table splits across pages.
                          Unlike `minLinesAtStart`, this counts rows, not layout
                          lines, so it survives multi-line rows.
                        anyOf:
                          - format: integer
                            default: '0'
                            type: string
                          - minimum: 1
                            description: >-
                              Table-only. Minimum number of body rows that must
                              stay with the header when a table splits across
                              pages. Unlike `minLinesAtStart`, this counts rows,
                              not layout lines, so it survives multi-line rows.
                            type: integer
                  rowSplit:
                    type: string
                    enum:
                      - never
                      - allow
                      - force
                  numbering:
                    type: string
                    enum:
                      - skip
                      - reset
                  outline:
                    description: 'Heading-only: exclude from the PDF outline (bookmarks)'
                    const: exclude
                    type: string
                  marker:
                    minLength: 1
                    maxLength: 24
                    description: >-
                      Blanket marker for every item (ordered and unordered): a
                      builtin counter format (`decimal`, `decimal-leading-zero`,
                      `lower-alpha`, `upper-alpha`, `lower-roman`,
                      `upper-roman`) or bullet (`disc`, `circle`, `square`,
                      `dash`, `arrow`), or any other string rendered as a
                      literal marker. Precedence (most specific wins):
                      `markerByDepth.<n>` for that depth >
                      `orderedMarker`/`unorderedMarker` for that list kind >
                      `marker`
                    type: string
                  gutter:
                    minimum: 0
                    maximum: 9999
                    description: >-
                      List-only: width of the gap between the marker and the
                      item content, in points
                    type: number
                  indent:
                    minimum: 0
                    maximum: 9999
                    description: 'List-only: left indent of the root list, in points'
                    type: number
                  spacing:
                    type: string
                    enum:
                      - tight
                      - loose
                  orderedMarker:
                    minLength: 1
                    maxLength: 24
                    description: >-
                      Ordered-list marker: a builtin counter format (`decimal`,
                      `decimal-leading-zero`, `lower-alpha`, `upper-alpha`,
                      `lower-roman`, `upper-roman`) that numbers each item, or
                      any other string rendered as a literal marker on every
                      item with no numbering
                    type: string
                  unorderedMarker:
                    minLength: 1
                    maxLength: 24
                    description: >-
                      Unordered-list marker: a builtin bullet (`disc`, `circle`,
                      `square`, `dash`, `arrow`), or any other string rendered
                      as a literal bullet on every item
                    type: string
                  markerByDepth:
                    additionalProperties: false
                    description: >-
                      Per-nesting-depth marker glyphs, keyed 1-based by list
                      depth (`1` = root list, … up to 16), matching the 1-based
                      `depth` selector axis. Precedence: a `markerByDepth` entry
                      wins for its depth;
                      `marker`/`orderedMarker`/`unorderedMarker` apply at any
                      depth without an entry
                    type: object
                    properties:
                      '1':
                        minLength: 1
                        maxLength: 24
                        description: >-
                          Marker for a nesting depth: a builtin counter format
                          (`decimal`, `decimal-leading-zero`, `lower-alpha`,
                          `upper-alpha`, `lower-roman`, `upper-roman`) or bullet
                          (`disc`, `circle`, `square`, `dash`, `arrow`) that
                          numbers/bullets each item, or any other string
                          rendered as a literal marker
                        type: string
                      '2':
                        minLength: 1
                        maxLength: 24
                        description: >-
                          Marker for a nesting depth: a builtin counter format
                          (`decimal`, `decimal-leading-zero`, `lower-alpha`,
                          `upper-alpha`, `lower-roman`, `upper-roman`) or bullet
                          (`disc`, `circle`, `square`, `dash`, `arrow`) that
                          numbers/bullets each item, or any other string
                          rendered as a literal marker
                        type: string
                      '3':
                        minLength: 1
                        maxLength: 24
                        description: >-
                          Marker for a nesting depth: a builtin counter format
                          (`decimal`, `decimal-leading-zero`, `lower-alpha`,
                          `upper-alpha`, `lower-roman`, `upper-roman`) or bullet
                          (`disc`, `circle`, `square`, `dash`, `arrow`) that
                          numbers/bullets each item, or any other string
                          rendered as a literal marker
                        type: string
                      '4':
                        minLength: 1
                        maxLength: 24
                        description: >-
                          Marker for a nesting depth: a builtin counter format
                          (`decimal`, `decimal-leading-zero`, `lower-alpha`,
                          `upper-alpha`, `lower-roman`, `upper-roman`) or bullet
                          (`disc`, `circle`, `square`, `dash`, `arrow`) that
                          numbers/bullets each item, or any other string
                          rendered as a literal marker
                        type: string
                      '5':
                        minLength: 1
                        maxLength: 24
                        description: >-
                          Marker for a nesting depth: a builtin counter format
                          (`decimal`, `decimal-leading-zero`, `lower-alpha`,
                          `upper-alpha`, `lower-roman`, `upper-roman`) or bullet
                          (`disc`, `circle`, `square`, `dash`, `arrow`) that
                          numbers/bullets each item, or any other string
                          rendered as a literal marker
                        type: string
                      '6':
                        minLength: 1
                        maxLength: 24
                        description: >-
                          Marker for a nesting depth: a builtin counter format
                          (`decimal`, `decimal-leading-zero`, `lower-alpha`,
                          `upper-alpha`, `lower-roman`, `upper-roman`) or bullet
                          (`disc`, `circle`, `square`, `dash`, `arrow`) that
                          numbers/bullets each item, or any other string
                          rendered as a literal marker
                        type: string
                      '7':
                        minLength: 1
                        maxLength: 24
                        description: >-
                          Marker for a nesting depth: a builtin counter format
                          (`decimal`, `decimal-leading-zero`, `lower-alpha`,
                          `upper-alpha`, `lower-roman`, `upper-roman`) or bullet
                          (`disc`, `circle`, `square`, `dash`, `arrow`) that
                          numbers/bullets each item, or any other string
                          rendered as a literal marker
                        type: string
                      '8':
                        minLength: 1
                        maxLength: 24
                        description: >-
                          Marker for a nesting depth: a builtin counter format
                          (`decimal`, `decimal-leading-zero`, `lower-alpha`,
                          `upper-alpha`, `lower-roman`, `upper-roman`) or bullet
                          (`disc`, `circle`, `square`, `dash`, `arrow`) that
                          numbers/bullets each item, or any other string
                          rendered as a literal marker
                        type: string
                      '9':
                        minLength: 1
                        maxLength: 24
                        description: >-
                          Marker for a nesting depth: a builtin counter format
                          (`decimal`, `decimal-leading-zero`, `lower-alpha`,
                          `upper-alpha`, `lower-roman`, `upper-roman`) or bullet
                          (`disc`, `circle`, `square`, `dash`, `arrow`) that
                          numbers/bullets each item, or any other string
                          rendered as a literal marker
                        type: string
                      '10':
                        minLength: 1
                        maxLength: 24
                        description: >-
                          Marker for a nesting depth: a builtin counter format
                          (`decimal`, `decimal-leading-zero`, `lower-alpha`,
                          `upper-alpha`, `lower-roman`, `upper-roman`) or bullet
                          (`disc`, `circle`, `square`, `dash`, `arrow`) that
                          numbers/bullets each item, or any other string
                          rendered as a literal marker
                        type: string
                      '11':
                        minLength: 1
                        maxLength: 24
                        description: >-
                          Marker for a nesting depth: a builtin counter format
                          (`decimal`, `decimal-leading-zero`, `lower-alpha`,
                          `upper-alpha`, `lower-roman`, `upper-roman`) or bullet
                          (`disc`, `circle`, `square`, `dash`, `arrow`) that
                          numbers/bullets each item, or any other string
                          rendered as a literal marker
                        type: string
                      '12':
                        minLength: 1
                        maxLength: 24
                        description: >-
                          Marker for a nesting depth: a builtin counter format
                          (`decimal`, `decimal-leading-zero`, `lower-alpha`,
                          `upper-alpha`, `lower-roman`, `upper-roman`) or bullet
                          (`disc`, `circle`, `square`, `dash`, `arrow`) that
                          numbers/bullets each item, or any other string
                          rendered as a literal marker
                        type: string
                      '13':
                        minLength: 1
                        maxLength: 24
                        description: >-
                          Marker for a nesting depth: a builtin counter format
                          (`decimal`, `decimal-leading-zero`, `lower-alpha`,
                          `upper-alpha`, `lower-roman`, `upper-roman`) or bullet
                          (`disc`, `circle`, `square`, `dash`, `arrow`) that
                          numbers/bullets each item, or any other string
                          rendered as a literal marker
                        type: string
                      '14':
                        minLength: 1
                        maxLength: 24
                        description: >-
                          Marker for a nesting depth: a builtin counter format
                          (`decimal`, `decimal-leading-zero`, `lower-alpha`,
                          `upper-alpha`, `lower-roman`, `upper-roman`) or bullet
                          (`disc`, `circle`, `square`, `dash`, `arrow`) that
                          numbers/bullets each item, or any other string
                          rendered as a literal marker
                        type: string
                      '15':
                        minLength: 1
                        maxLength: 24
                        description: >-
                          Marker for a nesting depth: a builtin counter format
                          (`decimal`, `decimal-leading-zero`, `lower-alpha`,
                          `upper-alpha`, `lower-roman`, `upper-roman`) or bullet
                          (`disc`, `circle`, `square`, `dash`, `arrow`) that
                          numbers/bullets each item, or any other string
                          rendered as a literal marker
                        type: string
                      '16':
                        minLength: 1
                        maxLength: 24
                        description: >-
                          Marker for a nesting depth: a builtin counter format
                          (`decimal`, `decimal-leading-zero`, `lower-alpha`,
                          `upper-alpha`, `lower-roman`, `upper-roman`) or bullet
                          (`disc`, `circle`, `square`, `dash`, `arrow`) that
                          numbers/bullets each item, or any other string
                          rendered as a literal marker
                        type: string
                  theme:
                    type: string
                    enum:
                      - crisp-studio-light
                      - charcoal-midnight
                  syntaxHighlight:
                    description: >-
                      Turn on token coloring. Only the languages in
                      `enums.syntaxHighlightLanguages` are colored; any other
                      `languageAliases` family renders monochrome and is
                      reported `syntax_highlight_unsupported_language`.
                    type: boolean
                  syntaxColors:
                    additionalProperties: false
                    description: >-
                      Per-token syntax color overrides for the active theme,
                      keyed by role (`keyword`, `string`, `comment`, `number`,
                      `function`, `operator`, `punctuation`). Each value is
                      `#RGB`/`#RRGGBB`.
                    type: object
                    properties:
                      keyword:
                        pattern: ^#([0-9a-fA-F]{3}|[0-9a-fA-F]{6})$
                        description: Color as `#RGB` or `#RRGGBB`
                        type: string
                      string:
                        pattern: ^#([0-9a-fA-F]{3}|[0-9a-fA-F]{6})$
                        description: Color as `#RGB` or `#RRGGBB`
                        type: string
                      comment:
                        pattern: ^#([0-9a-fA-F]{3}|[0-9a-fA-F]{6})$
                        description: Color as `#RGB` or `#RRGGBB`
                        type: string
                      number:
                        pattern: ^#([0-9a-fA-F]{3}|[0-9a-fA-F]{6})$
                        description: Color as `#RGB` or `#RRGGBB`
                        type: string
                      function:
                        pattern: ^#([0-9a-fA-F]{3}|[0-9a-fA-F]{6})$
                        description: Color as `#RGB` or `#RRGGBB`
                        type: string
                      operator:
                        pattern: ^#([0-9a-fA-F]{3}|[0-9a-fA-F]{6})$
                        description: Color as `#RGB` or `#RRGGBB`
                        type: string
                      punctuation:
                        pattern: ^#([0-9a-fA-F]{3}|[0-9a-fA-F]{6})$
                        description: Color as `#RGB` or `#RRGGBB`
                        type: string
                  lineNumbers:
                    type: boolean
                  lineNumberColor:
                    pattern: ^#([0-9a-fA-F]{3}|[0-9a-fA-F]{6})$
                    description: Color as `#RGB` or `#RRGGBB`
                    type: string
                  languageLabel:
                    type: boolean
                  borders:
                    description: >-
                      Table borders, as a string shorthand
                      (`"none"`/`"grid"`/`"outer"`/`"header"`) or an object.
                      `grid` draws every line, `outer` the perimeter only,
                      `header` the perimeter plus the header underline, `custom`
                      sets per-edge strokes
                      (`outer`/`horizontal`/`vertical`/`headerBottom`), and
                      `none` suppresses all borders.
                    anyOf:
                      - additionalProperties: false
                        type: object
                        required:
                          - kind
                        properties:
                          kind:
                            const: none
                            type: string
                      - additionalProperties: false
                        type: object
                        required:
                          - kind
                          - stroke
                        properties:
                          kind:
                            const: grid
                            type: string
                          stroke:
                            additionalProperties: false
                            type: object
                            required:
                              - width
                              - color
                            properties:
                              width:
                                minimum: 0.1
                                maximum: 50
                                description: Border thickness in points
                                type: number
                              color:
                                pattern: ^#([0-9a-fA-F]{3}|[0-9a-fA-F]{6})$
                                description: Color as `#RGB` or `#RRGGBB`
                                type: string
                              opacity:
                                minimum: 0
                                maximum: 1
                                description: Border opacity from 0 to 1
                                type: number
                              dash:
                                description: >-
                                  Dash pattern as `[dash, gap]` lengths in
                                  points; both `0` is rejected
                                type: array
                                items:
                                  minimum: 0
                                  maximum: 1000
                                  type: number
                                minItems: 2
                                maxItems: 2
                          borderRadius:
                            minimum: 0
                            maximum: 14400
                            description: >-
                              Outer-perimeter corner radius in PDF points. Zero
                              produces sharp corners.
                            type: number
                      - additionalProperties: false
                        type: object
                        required:
                          - kind
                          - stroke
                        properties:
                          kind:
                            const: outer
                            type: string
                          stroke:
                            additionalProperties: false
                            type: object
                            required:
                              - width
                              - color
                            properties:
                              width:
                                minimum: 0.1
                                maximum: 50
                                description: Border thickness in points
                                type: number
                              color:
                                pattern: ^#([0-9a-fA-F]{3}|[0-9a-fA-F]{6})$
                                description: Color as `#RGB` or `#RRGGBB`
                                type: string
                              opacity:
                                minimum: 0
                                maximum: 1
                                description: Border opacity from 0 to 1
                                type: number
                              dash:
                                description: >-
                                  Dash pattern as `[dash, gap]` lengths in
                                  points; both `0` is rejected
                                type: array
                                items:
                                  minimum: 0
                                  maximum: 1000
                                  type: number
                                minItems: 2
                                maxItems: 2
                          borderRadius:
                            minimum: 0
                            maximum: 14400
                            description: >-
                              Outer-perimeter corner radius in PDF points. Zero
                              produces sharp corners.
                            type: number
                      - additionalProperties: false
                        type: object
                        required:
                          - kind
                          - stroke
                        properties:
                          kind:
                            const: header
                            type: string
                          stroke:
                            additionalProperties: false
                            type: object
                            required:
                              - width
                              - color
                            properties:
                              width:
                                minimum: 0.1
                                maximum: 50
                                description: Border thickness in points
                                type: number
                              color:
                                pattern: ^#([0-9a-fA-F]{3}|[0-9a-fA-F]{6})$
                                description: Color as `#RGB` or `#RRGGBB`
                                type: string
                              opacity:
                                minimum: 0
                                maximum: 1
                                description: Border opacity from 0 to 1
                                type: number
                              dash:
                                description: >-
                                  Dash pattern as `[dash, gap]` lengths in
                                  points; both `0` is rejected
                                type: array
                                items:
                                  minimum: 0
                                  maximum: 1000
                                  type: number
                                minItems: 2
                                maxItems: 2
                          borderRadius:
                            minimum: 0
                            maximum: 14400
                            description: >-
                              Outer-perimeter corner radius in PDF points. Zero
                              produces sharp corners.
                            type: number
                      - additionalProperties: false
                        type: object
                        required:
                          - kind
                        properties:
                          kind:
                            const: custom
                            type: string
                          outer:
                            additionalProperties: false
                            type: object
                            required:
                              - width
                              - color
                            properties:
                              width:
                                minimum: 0.1
                                maximum: 50
                                description: Border thickness in points
                                type: number
                              color:
                                pattern: ^#([0-9a-fA-F]{3}|[0-9a-fA-F]{6})$
                                description: Color as `#RGB` or `#RRGGBB`
                                type: string
                              opacity:
                                minimum: 0
                                maximum: 1
                                description: Border opacity from 0 to 1
                                type: number
                              dash:
                                description: >-
                                  Dash pattern as `[dash, gap]` lengths in
                                  points; both `0` is rejected
                                type: array
                                items:
                                  minimum: 0
                                  maximum: 1000
                                  type: number
                                minItems: 2
                                maxItems: 2
                          horizontal:
                            additionalProperties: false
                            type: object
                            required:
                              - width
                              - color
                            properties:
                              width:
                                minimum: 0.1
                                maximum: 50
                                description: Border thickness in points
                                type: number
                              color:
                                pattern: ^#([0-9a-fA-F]{3}|[0-9a-fA-F]{6})$
                                description: Color as `#RGB` or `#RRGGBB`
                                type: string
                              opacity:
                                minimum: 0
                                maximum: 1
                                description: Border opacity from 0 to 1
                                type: number
                              dash:
                                description: >-
                                  Dash pattern as `[dash, gap]` lengths in
                                  points; both `0` is rejected
                                type: array
                                items:
                                  minimum: 0
                                  maximum: 1000
                                  type: number
                                minItems: 2
                                maxItems: 2
                          vertical:
                            additionalProperties: false
                            type: object
                            required:
                              - width
                              - color
                            properties:
                              width:
                                minimum: 0.1
                                maximum: 50
                                description: Border thickness in points
                                type: number
                              color:
                                pattern: ^#([0-9a-fA-F]{3}|[0-9a-fA-F]{6})$
                                description: Color as `#RGB` or `#RRGGBB`
                                type: string
                              opacity:
                                minimum: 0
                                maximum: 1
                                description: Border opacity from 0 to 1
                                type: number
                              dash:
                                description: >-
                                  Dash pattern as `[dash, gap]` lengths in
                                  points; both `0` is rejected
                                type: array
                                items:
                                  minimum: 0
                                  maximum: 1000
                                  type: number
                                minItems: 2
                                maxItems: 2
                          headerBottom:
                            additionalProperties: false
                            type: object
                            required:
                              - width
                              - color
                            properties:
                              width:
                                minimum: 0.1
                                maximum: 50
                                description: Border thickness in points
                                type: number
                              color:
                                pattern: ^#([0-9a-fA-F]{3}|[0-9a-fA-F]{6})$
                                description: Color as `#RGB` or `#RRGGBB`
                                type: string
                              opacity:
                                minimum: 0
                                maximum: 1
                                description: Border opacity from 0 to 1
                                type: number
                              dash:
                                description: >-
                                  Dash pattern as `[dash, gap]` lengths in
                                  points; both `0` is rejected
                                type: array
                                items:
                                  minimum: 0
                                  maximum: 1000
                                  type: number
                                minItems: 2
                                maxItems: 2
                          borderRadius:
                            minimum: 0
                            maximum: 14400
                            description: >-
                              Outer-perimeter corner radius in PDF points. Zero
                              produces sharp corners.
                            type: number
                      - description: >-
                          String shorthand: `"none"`, or
                          `"grid"`/`"outer"`/`"header"` with a default 0.5 pt
                          hairline stroke. Use the object form (`{ kind, stroke
                          }`) to set the stroke, or `kind: "custom"` for
                          per-edge strokes.
                        anyOf:
                          - const: none
                            type: string
                          - const: grid
                            type: string
                          - const: outer
                            type: string
                          - const: header
                            type: string
                  headerBackground:
                    pattern: ^#([0-9a-fA-F]{3}|[0-9a-fA-F]{6})$
                    description: Color as `#RGB` or `#RRGGBB`
                    type: string
                  stripe:
                    additionalProperties: false
                    type: object
                    properties:
                      even:
                        description: >-
                          Background for even-indexed body rows as
                          `#RGB`/`#RRGGBB`, or `null` to leave them unfilled
                        anyOf:
                          - pattern: ^#([0-9a-fA-F]{3}|[0-9a-fA-F]{6})$
                            description: Color as `#RGB` or `#RRGGBB`
                            type: string
                          - type: 'null'
                      odd:
                        description: >-
                          Background for odd-indexed body rows as
                          `#RGB`/`#RRGGBB`, or `null` to leave them unfilled
                        anyOf:
                          - pattern: ^#([0-9a-fA-F]{3}|[0-9a-fA-F]{6})$
                            description: Color as `#RGB` or `#RRGGBB`
                            type: string
                          - type: 'null'
                  cell:
                    additionalProperties: false
                    description: >-
                      Cell text styling. `valign` is the vertical alignment
                      within the row band (`top`/`middle`/`bottom`); `textWrap`
                      is the wrapping policy for cells without an inferred
                      content role (`normal`/`break-word`/`anywhere`); `padding`
                      overrides the inset (`top`/`right`/`bottom`/`left`,
                      points) for matched cells; `blockOverflow` is the
                      block-axis overflow policy; `maxHeight` is the height
                      ceiling `clip`/`shrink` need to have any effect.
                      Horizontal alignment is set via the rule’s top-level
                      `align`.
                    type: object
                    properties:
                      fontSize:
                        minimum: 1
                        maximum: 999
                        description: >-
                          Cell text size in PDF points. Also drives column
                          min-width measurement.
                        type: number
                      lineHeight:
                        minimum: 1
                        maximum: 10
                        description: Cell line-height multiplier.
                        type: number
                      valign:
                        type: string
                        enum:
                          - top
                          - middle
                          - bottom
                      textWrap:
                        type: string
                        enum:
                          - normal
                          - break-word
                          - anywhere
                      color:
                        pattern: ^#([0-9a-fA-F]{3}|[0-9a-fA-F]{6})$
                        description: Cell text color as `#RGB` or `#RRGGBB`.
                        type: string
                      padding:
                        additionalProperties: false
                        type: object
                        properties:
                          top:
                            minimum: 0
                            maximum: 9999
                            description: Top padding, in points
                            type: number
                          right:
                            minimum: 0
                            maximum: 9999
                            description: Right padding, in points
                            type: number
                          bottom:
                            minimum: 0
                            maximum: 9999
                            description: Bottom padding, in points
                            type: number
                          left:
                            minimum: 0
                            maximum: 9999
                            description: Left padding, in points
                            type: number
                      blockOverflow:
                        type: string
                        enum:
                          - split
                          - clip
                          - ellipsis
                          - shrink
                      maxHeight:
                        minimum: 1
                        maximum: 14400
                        description: >-
                          Ceiling on cell box height (including padding) in PDF
                          points. Required for `blockOverflow:
                          'clip'`/`'shrink'` to have any visible effect —
                          without it both remain no-ops. Ignored for
                          `'split'`/`'ellipsis'`.
                        type: number
                  widths:
                    type: array
                    items:
                      minimum: 0
                      maximum: 14400
                      type: number
                  repeatHeaderOnPageBreak:
                    type: boolean
                  sizePct:
                    minimum: 0
                    maximum: 100
                    description: >-
                      Image-only: rendered width as a percentage of the
                      available column width (`0..100`). Mutually exclusive with
                      the absolute `sizePt`; when neither is set the intrinsic
                      width is capped at the content area
                    type: number
                  sizePt:
                    minimum: 0
                    maximum: 14400
                    description: >-
                      Image-only: rendered width as an absolute measure in PDF
                      points. Mutually exclusive with the percent `sizePct`;
                      when neither is set the intrinsic width is capped at the
                      content area
                    type: number
                  height:
                    minimum: 0.01
                    maximum: 14400
                    type: number
                  fit:
                    type: string
                    enum:
                      - none
                      - contain
                      - cover
                      - fill
                  shadow:
                    additionalProperties: false
                    type: object
                    properties:
                      offsetX:
                        minimum: -14400
                        maximum: 14400
                        description: >-
                          Horizontal shadow offset in PDF points. Positive =
                          right, negative = left.
                        type: number
                      offsetY:
                        minimum: -14400
                        maximum: 14400
                        description: >-
                          Vertical shadow offset in PDF points. Positive = down,
                          negative = up.
                        type: number
                      blur:
                        minimum: 0
                        maximum: 14400
                        description: Gaussian blur radius in PDF points.
                        type: number
                      color:
                        pattern: ^#([0-9a-fA-F]{3}|[0-9a-fA-F]{6})$
                        description: >-
                          Shadow color as `#RGB` or `#RRGGBB`. Use `opacity` for
                          transparency.
                        type: string
                      opacity:
                        minimum: 0
                        maximum: 1
                        description: Shadow opacity in the `0..1` range.
                        type: number
                  mask:
                    description: >-
                      Mask that clips/attenuates the image itself: `alphaImage`
                      (SMask), built-in `shape`, normalized `rect`, or `path`.
                      Replaced whole on merge (discriminated union).
                    anyOf:
                      - additionalProperties: false
                        type: object
                        required:
                          - alphaImage
                        properties:
                          alphaImage:
                            minLength: 1
                            description: >-
                              Alpha-mask asset URL (`data:`/`http(s)`). Opaque
                              areas keep the photo; transparent areas reveal the
                              page. Masks the image itself — not an overlay.
                            type: string
                      - additionalProperties: false
                        type: object
                        required:
                          - shape
                        properties:
                          shape:
                            anyOf:
                              - const: circle
                                type: string
                              - const: ellipse
                                type: string
                      - additionalProperties: false
                        type: object
                        required:
                          - rect
                        properties:
                          rect:
                            additionalProperties: false
                            description: >-
                              Rectangular clip region in normalized coordinates
                              relative to the image layout box.
                            type: object
                            required:
                              - x
                              - 'y'
                              - width
                              - height
                            properties:
                              x:
                                minimum: 0
                                maximum: 1
                                description: Left edge in normalized `[0, 1]` coordinates.
                                type: number
                              'y':
                                minimum: 0
                                maximum: 1
                                description: Top edge in normalized `[0, 1]` coordinates.
                                type: number
                              width:
                                minimum: 0
                                exclusiveMinimum: 0
                                maximum: 1
                                description: Clip width in normalized `(0, 1]` coordinates.
                                type: number
                              height:
                                minimum: 0
                                exclusiveMinimum: 0
                                maximum: 1
                                description: >-
                                  Clip height in normalized `(0, 1]`
                                  coordinates.
                                type: number
                      - additionalProperties: false
                        type: object
                        required:
                          - path
                        properties:
                          path:
                            minLength: 1
                            description: >-
                              SVG path `d` over the image bounding box in
                              normalized coordinates where (0,0) is the top-left
                              and (1,1) the bottom-right. On-path points should
                              stay within `[0,1]`; Bézier control points may
                              fall outside (the curve is what is clipped).
                              Geometry outside the box is clipped to it, so
                              coordinates are not range-validated.
                            type: string
                  overlay:
                    description: >-
                      Composites an image or text stamp on top of an image,
                      anchored to a corner/center. Replaced whole on merge
                      (discriminated union).
                    anyOf:
                      - additionalProperties: false
                        type: object
                        required:
                          - image
                          - anchor
                        properties:
                          image:
                            minLength: 1
                            description: Overlay image asset URL
                            type: string
                          anchor:
                            description: Anchor of the overlay within the image box
                            anyOf:
                              - const: top-left
                                type: string
                              - const: top
                                type: string
                              - const: top-right
                                type: string
                              - const: left
                                type: string
                              - const: center
                                type: string
                              - const: right
                                type: string
                              - const: bottom-left
                                type: string
                              - const: bottom
                                type: string
                              - const: bottom-right
                                type: string
                          scale:
                            minimum: 0
                            maximum: 1
                            type: number
                          opacity:
                            minimum: 0
                            maximum: 1
                            type: number
                          margin:
                            minimum: 0
                            maximum: 14400
                            type: number
                          rotation:
                            minimum: -360
                            maximum: 360
                            type: number
                      - additionalProperties: false
                        type: object
                        required:
                          - text
                          - anchor
                        properties:
                          text:
                            minLength: 1
                            maxLength: 256
                            description: Overlay stamp text (e.g. "SOLD OUT")
                            type: string
                          anchor:
                            description: Anchor of the overlay within the image box
                            anyOf:
                              - const: top-left
                                type: string
                              - const: top
                                type: string
                              - const: top-right
                                type: string
                              - const: left
                                type: string
                              - const: center
                                type: string
                              - const: right
                                type: string
                              - const: bottom-left
                                type: string
                              - const: bottom
                                type: string
                              - const: bottom-right
                                type: string
                          color:
                            pattern: ^#([0-9a-fA-F]{3}|[0-9a-fA-F]{6})$
                            description: Color as `#RGB` or `#RRGGBB`
                            type: string
                          fontSize:
                            minimum: 1
                            maximum: 999
                            type: number
                          opacity:
                            minimum: 0
                            maximum: 1
                            type: number
                          margin:
                            minimum: 0
                            maximum: 14400
                            type: number
                  pin:
                    additionalProperties: false
                    description: >-
                      Image-only: lifts the image out of the text flow and pins
                      it to a page-absolute position (logo/stamp). On a pinned
                      image `sizePct` is a percent of the page width. Mutually
                      exclusive with `bleed`. Replaced whole on merge.
                    type: object
                    required:
                      - anchor
                    properties:
                      anchor:
                        type: string
                        enum:
                          - top-left
                          - top
                          - top-right
                          - left
                          - center
                          - right
                          - bottom-left
                          - bottom
                          - bottom-right
                      layer:
                        type: string
                        enum:
                          - page-background
                          - page-foreground
                      dx:
                        minimum: 0
                        maximum: 14400
                        description: >-
                          Inward horizontal offset in PDF points from the
                          anchored left/right edge (ignored for
                          horizontally-centered anchors)
                        type: number
                      dy:
                        minimum: 0
                        maximum: 14400
                        description: >-
                          Inward vertical offset in PDF points from the anchored
                          top/bottom edge (ignored for vertically-centered
                          anchors)
                        type: number
                      scope:
                        description: >-
                          Selects pages by zero-based index, one-based page
                          number, or section-start events at a heading depth
                        anyOf:
                          - additionalProperties: false
                            type: object
                            required:
                              - pageIndex
                            properties:
                              pageIndex:
                                minimum: 0
                                description: >-
                                  Zero-based page index to match (same
                                  coordinate as engine `pageIndex`)
                                anyOf:
                                  - format: integer
                                    default: '0'
                                    type: string
                                  - minimum: 0
                                    description: >-
                                      Zero-based page index to match (same
                                      coordinate as engine `pageIndex`)
                                    type: integer
                          - additionalProperties: false
                            type: object
                            required:
                              - pageNumber
                            properties:
                              pageNumber:
                                minimum: 1
                                description: >-
                                  One-based page number to match (same
                                  coordinate as engine `pageNumber`)
                                anyOf:
                                  - format: integer
                                    default: '0'
                                    type: string
                                  - minimum: 1
                                    description: >-
                                      One-based page number to match (same
                                      coordinate as engine `pageNumber`)
                                    type: integer
                          - additionalProperties: false
                            type: object
                            required:
                              - sectionStarts
                            properties:
                              sectionStarts:
                                additionalProperties: false
                                description: >-
                                  Matches pages where a heading at the given
                                  depth begins (optionally filtered by exact
                                  title text)
                                type: object
                                required:
                                  - depth
                                properties:
                                  depth:
                                    description: Heading depth from 1 (top level) to 6
                                    anyOf:
                                      - const: 1
                                        type: number
                                      - const: 2
                                        type: number
                                      - const: 3
                                        type: number
                                      - const: 4
                                        type: number
                                      - const: 5
                                        type: number
                                      - const: 6
                                        type: number
                                  textEquals:
                                    minLength: 1
                                    maxLength: 512
                                    description: >-
                                      When set, matches only when a heading at
                                      `depth` with this exact plaintext starts
                                      on the page
                                    type: string
                  bleed:
                    description: >-
                      Image-only: lifts the image out of the text flow and
                      paints it edge-to-edge as a full-page background cover
                      (`fit: cover`). Mutually exclusive with `pin`, `sizePct`,
                      and `sizePt`
                    const: true
                    type: boolean
                  wrap:
                    type: string
                    enum:
                      - left
                      - right
                  decoration:
                    type: string
                    enum:
                      - underline
                      - lineThrough
                      - none
                  decorationStyle:
                    type: string
                    enum:
                      - solid
                      - double
                      - dotted
                      - dashed
                      - wavy
                  decorationColor:
                    description: >-
                      Color as `#RGB` or `#RRGGBB`, or `inherit` to use the
                      inherited color
                    anyOf:
                      - pattern: ^#([0-9a-fA-F]{3}|[0-9a-fA-F]{6})$
                        description: Color as `#RGB` or `#RRGGBB`
                        type: string
                      - const: inherit
                        type: string
                  sizeScale:
                    minimum: 0.4
                    maximum: 1
                    description: >-
                      Optical scale relative to surrounding text. Inline code
                      clamps to ~0.85–0.88 at render; subscript/superscript use
                      the full band
                    type: number
                  backgroundPadding:
                    additionalProperties: false
                    type: object
                    properties:
                      top:
                        minimum: 0
                        maximum: 9999
                        description: Top padding, in points
                        type: number
                      right:
                        minimum: 0
                        maximum: 9999
                        description: Right padding, in points
                        type: number
                      bottom:
                        minimum: 0
                        maximum: 9999
                        description: Bottom padding, in points
                        type: number
                      left:
                        minimum: 0
                        maximum: 9999
                        description: Left padding, in points
                        type: number
                      x:
                        minimum: 0
                        maximum: 9999
                        description: >-
                          Horizontal padding applied to both left and right when
                          those sides are omitted, in points
                        type: number
                      'y':
                        minimum: 0
                        maximum: 9999
                        description: >-
                          Vertical padding applied to both top and bottom when
                          those sides are omitted, in points
                        type: number
                  backgroundBorder:
                    additionalProperties: false
                    type: object
                    required:
                      - width
                      - color
                    properties:
                      width:
                        minimum: 0.1
                        maximum: 50
                        description: Border thickness in points
                        type: number
                      color:
                        pattern: ^#([0-9a-fA-F]{3}|[0-9a-fA-F]{6})$
                        description: Color as `#RGB` or `#RRGGBB`
                        type: string
                      opacity:
                        minimum: 0
                        maximum: 1
                        description: Border opacity from 0 to 1
                        type: number
                      dash:
                        description: >-
                          Dash pattern as `[dash, gap]` lengths in points; both
                          `0` is rejected
                        type: array
                        items:
                          minimum: 0
                          maximum: 1000
                          type: number
                        minItems: 2
                        maxItems: 2
                  backgroundRadius:
                    minimum: 0
                    maximum: 14400
                    type: number
                  baselineShift:
                    minimum: -999
                    maximum: 999
                    description: >-
                      Inline-code only: absolute PDF text-rise in points. For
                      subscript/superscript use `riseFraction` (0..1 of base
                      size)
                    type: number
                  riseFraction:
                    minimum: 0
                    maximum: 1
                    description: >-
                      Subscript/superscript only: baseline offset as a fraction
                      of base size (not PDF points)
                    type: number
              priority:
                description: >-
                  Cascade priority (default 0). Higher wins; ties broken by
                  later array order. Last rule wins per leaf property.
                anyOf:
                  - format: integer
                    default: '0'
                    type: string
                  - description: >-
                      Cascade priority (default 0). Higher wins; ties broken by
                      later array order. Last rule wins per leaf property.
                    type: integer
        imageOverrides:
          maxItems: 256
          description: >-
            Ergonomic per-image style overrides by position or exact URL,
            without authoring a full `rules` selector entry. For document-order
            indexing (true reading order across interleaved block and inline
            images), or for matching by anything other than an exact URL, use
            `rules` with `select.nth`/`select.url` and `type: 'image'` instead.
          type: array
          items:
            additionalProperties: false
            description: >-
              One image style override, applied after `styles.image` and before
              the `rules` cascade for matching images.
            type: object
            required:
              - match
              - style
            properties:
              match:
                description: Selects images by `{ index }` or exact `{ url }`.
                anyOf:
                  - additionalProperties: false
                    type: object
                    required:
                      - index
                    properties:
                      index:
                        minimum: 0
                        description: >-
                          0-based index of the image among all images in source
                          order: every block image first, then every inline
                          image. This is not the same order as
                          `rules[].select.nth` for `type: 'image'`, which counts
                          true document order across interleaved block and
                          inline images.
                        anyOf:
                          - format: integer
                            default: '0'
                            type: string
                          - minimum: 0
                            description: >-
                              0-based index of the image among all images in
                              source order: every block image first, then every
                              inline image. This is not the same order as
                              `rules[].select.nth` for `type: 'image'`, which
                              counts true document order across interleaved
                              block and inline images.
                            type: integer
                  - additionalProperties: false
                    type: object
                    required:
                      - url
                    properties:
                      url:
                        minLength: 1
                        description: >-
                          Exact image URL from the Markdown source (post-inklex
                          expansion; not percent-decoded).
                        type: string
              style:
                additionalProperties: false
                description: >-
                  Style fields merged over `styles.image` for matching images
                  only. Shares key names and semantics with the image-relevant
                  subset of rule `set` (excluding `overlay`, which
                  `imageOverrides` does not support), plus the inline-only
                  `verticalAlign`/`inlineSize` fields rules currently has no
                  direct equivalent for. Positioning/sizing conflicts
                  (`sizePct`⊕`sizePt`; `wrap`/`pin`/`bleed` mutual exclusion)
                  are rejected at the API boundary the same way a rule `set` is.
                type: object
                properties:
                  sizePct:
                    minimum: 0
                    maximum: 100
                    description: >-
                      Block-only. Rendered width as a percentage of the
                      available column width (`0..100`). Mutually exclusive with
                      the absolute `sizePt`.
                    type: number
                  sizePt:
                    minimum: 0
                    maximum: 14400
                    description: >-
                      Block-only. Rendered width as an absolute measure in PDF
                      points. Mutually exclusive with the percent `sizePct`.
                    type: number
                  align:
                    type: string
                    enum:
                      - start
                      - center
                      - end
                  spaceBefore:
                    minimum: 0
                    maximum: 9999
                    description: >-
                      Block-only. Space reserved above the image, in PDF points.
                      Adjacent block margins collapse to the larger of the two.
                    type: number
                  spaceAfter:
                    minimum: 0
                    maximum: 9999
                    description: >-
                      Block-only. Space reserved below the image, in PDF points.
                      Adjacent block margins collapse to the larger of the two.
                    type: number
                  border:
                    additionalProperties: false
                    type: object
                    required:
                      - width
                      - color
                    properties:
                      width:
                        minimum: 0.1
                        maximum: 50
                        description: Border thickness in points
                        type: number
                      color:
                        pattern: ^#([0-9a-fA-F]{3}|[0-9a-fA-F]{6})$
                        description: Color as `#RGB` or `#RRGGBB`
                        type: string
                      opacity:
                        minimum: 0
                        maximum: 1
                        description: Border opacity from 0 to 1
                        type: number
                      dash:
                        description: >-
                          Dash pattern as `[dash, gap]` lengths in points; both
                          `0` is rejected
                        type: array
                        items:
                          minimum: 0
                          maximum: 1000
                          type: number
                        minItems: 2
                        maxItems: 2
                  borderRadius:
                    minimum: 0
                    maximum: 9999
                    description: >-
                      Corner radius in PDF points. `0` (default) renders sharp
                      corners. Applies to both block and inline images.
                    type: number
                  shadow:
                    additionalProperties: false
                    type: object
                    properties:
                      offsetX:
                        minimum: -14400
                        maximum: 14400
                        description: >-
                          Horizontal shadow offset in PDF points. Positive =
                          right, negative = left.
                        type: number
                      offsetY:
                        minimum: -14400
                        maximum: 14400
                        description: >-
                          Vertical shadow offset in PDF points. Positive = down,
                          negative = up.
                        type: number
                      blur:
                        minimum: 0
                        maximum: 14400
                        description: Gaussian blur radius in PDF points.
                        type: number
                      color:
                        pattern: ^#([0-9a-fA-F]{3}|[0-9a-fA-F]{6})$
                        description: >-
                          Shadow color as `#RGB` or `#RRGGBB`. Use `opacity` for
                          transparency.
                        type: string
                      opacity:
                        minimum: 0
                        maximum: 1
                        description: Shadow opacity in the `0..1` range.
                        type: number
                  opacity:
                    minimum: 0
                    maximum: 1
                    description: >-
                      Fill opacity in the `0..1` range. Applies to both block
                      and inline images.
                    type: number
                  verticalAlign:
                    type: string
                    enum:
                      - middle
                      - baseline
                      - top
                  inlineSize:
                    minimum: 0.1
                    maximum: 10
                    description: >-
                      Inline-only. Height multiplier applied to inline images,
                      expressed as a factor of the surrounding line-height. `1`
                      (default) sizes the image to one line-height; `0.75`
                      shrinks to 75%; `2` doubles to two line-heights. Width
                      follows preserving aspect ratio.
                    type: number
                  height:
                    minimum: 0.01
                    maximum: 14400
                    description: >-
                      Block-only. Layout height in PDF points. Used with `fit`
                      for cover/contain/fill sizing inside the box.
                    type: number
                  fit:
                    type: string
                    enum:
                      - none
                      - contain
                      - cover
                      - fill
                  mask:
                    description: >-
                      Mask that clips/attenuates the image itself: `alphaImage`
                      (SMask), built-in `shape`, normalized `rect`, or `path`.
                      Replaced whole on merge (discriminated union).
                    anyOf:
                      - additionalProperties: false
                        type: object
                        required:
                          - alphaImage
                        properties:
                          alphaImage:
                            minLength: 1
                            description: >-
                              Alpha-mask asset URL (`data:`/`http(s)`). Opaque
                              areas keep the photo; transparent areas reveal the
                              page. Masks the image itself — not an overlay.
                            type: string
                      - additionalProperties: false
                        type: object
                        required:
                          - shape
                        properties:
                          shape:
                            anyOf:
                              - const: circle
                                type: string
                              - const: ellipse
                                type: string
                      - additionalProperties: false
                        type: object
                        required:
                          - rect
                        properties:
                          rect:
                            additionalProperties: false
                            description: >-
                              Rectangular clip region in normalized coordinates
                              relative to the image layout box.
                            type: object
                            required:
                              - x
                              - 'y'
                              - width
                              - height
                            properties:
                              x:
                                minimum: 0
                                maximum: 1
                                description: Left edge in normalized `[0, 1]` coordinates.
                                type: number
                              'y':
                                minimum: 0
                                maximum: 1
                                description: Top edge in normalized `[0, 1]` coordinates.
                                type: number
                              width:
                                minimum: 0
                                exclusiveMinimum: 0
                                maximum: 1
                                description: Clip width in normalized `(0, 1]` coordinates.
                                type: number
                              height:
                                minimum: 0
                                exclusiveMinimum: 0
                                maximum: 1
                                description: >-
                                  Clip height in normalized `(0, 1]`
                                  coordinates.
                                type: number
                      - additionalProperties: false
                        type: object
                        required:
                          - path
                        properties:
                          path:
                            minLength: 1
                            description: >-
                              SVG path `d` over the image bounding box in
                              normalized coordinates where (0,0) is the top-left
                              and (1,1) the bottom-right. On-path points should
                              stay within `[0,1]`; Bézier control points may
                              fall outside (the curve is what is clipped).
                              Geometry outside the box is clipped to it, so
                              coordinates are not range-validated.
                            type: string
                  pin:
                    additionalProperties: false
                    description: >-
                      Image-only: lifts the image out of the text flow and pins
                      it to a page-absolute position (logo/stamp). On a pinned
                      image `sizePct` is a percent of the page width. Mutually
                      exclusive with `bleed`. Replaced whole on merge.
                    type: object
                    required:
                      - anchor
                    properties:
                      anchor:
                        type: string
                        enum:
                          - top-left
                          - top
                          - top-right
                          - left
                          - center
                          - right
                          - bottom-left
                          - bottom
                          - bottom-right
                      layer:
                        type: string
                        enum:
                          - page-background
                          - page-foreground
                      dx:
                        minimum: 0
                        maximum: 14400
                        description: >-
                          Inward horizontal offset in PDF points from the
                          anchored left/right edge (ignored for
                          horizontally-centered anchors)
                        type: number
                      dy:
                        minimum: 0
                        maximum: 14400
                        description: >-
                          Inward vertical offset in PDF points from the anchored
                          top/bottom edge (ignored for vertically-centered
                          anchors)
                        type: number
                      scope:
                        description: >-
                          Selects pages by zero-based index, one-based page
                          number, or section-start events at a heading depth
                        anyOf:
                          - additionalProperties: false
                            type: object
                            required:
                              - pageIndex
                            properties:
                              pageIndex:
                                minimum: 0
                                description: >-
                                  Zero-based page index to match (same
                                  coordinate as engine `pageIndex`)
                                anyOf:
                                  - format: integer
                                    default: '0'
                                    type: string
                                  - minimum: 0
                                    description: >-
                                      Zero-based page index to match (same
                                      coordinate as engine `pageIndex`)
                                    type: integer
                          - additionalProperties: false
                            type: object
                            required:
                              - pageNumber
                            properties:
                              pageNumber:
                                minimum: 1
                                description: >-
                                  One-based page number to match (same
                                  coordinate as engine `pageNumber`)
                                anyOf:
                                  - format: integer
                                    default: '0'
                                    type: string
                                  - minimum: 1
                                    description: >-
                                      One-based page number to match (same
                                      coordinate as engine `pageNumber`)
                                    type: integer
                          - additionalProperties: false
                            type: object
                            required:
                              - sectionStarts
                            properties:
                              sectionStarts:
                                additionalProperties: false
                                description: >-
                                  Matches pages where a heading at the given
                                  depth begins (optionally filtered by exact
                                  title text)
                                type: object
                                required:
                                  - depth
                                properties:
                                  depth:
                                    description: Heading depth from 1 (top level) to 6
                                    anyOf:
                                      - const: 1
                                        type: number
                                      - const: 2
                                        type: number
                                      - const: 3
                                        type: number
                                      - const: 4
                                        type: number
                                      - const: 5
                                        type: number
                                      - const: 6
                                        type: number
                                  textEquals:
                                    minLength: 1
                                    maxLength: 512
                                    description: >-
                                      When set, matches only when a heading at
                                      `depth` with this exact plaintext starts
                                      on the page
                                    type: string
                  bleed:
                    description: >-
                      Block-only. Lifts the image out of the text flow and
                      paints it edge-to-edge as a full-page background cover
                      (`fit: cover`). Mutually exclusive with `pin`, `sizePct`,
                      and `sizePt`.
                    const: true
                    type: boolean
                  wrap:
                    type: string
                    enum:
                      - left
                      - right
        theme:
          maxLength: 64
          examples:
            - report-clean
            - report-executive
            - report-data
            - blog-modern
            - blog-dark
            - blog-editorial
            - academic-classic
            - academic-modern
            - thesis
            - docs-light
            - docs-dark
            - api-reference
            - corporate
            - proposal
            - invoice
          description: >-
            Design preset resolved server-side to a fixed bundle of
            typography/page/furniture/numbering/rules, then merged under your
            own `typography`/`page`/`furniture`/`rules` (your values win per
            field; your rules win on conflicting cascade leaves). Picking a
            theme never lets the server read your Markdown — the bundle is
            deterministic, so the same source plus the same theme yields the
            same PDF. An unknown or malformed slug resolves to `report-clean`
            and never fails the request; the fallback is reported by
            `resolvedTheme` on `/v1/render/validate` and the
            `x-render-theme-fallback` response header on `/v1/render`. One of:
            report-clean, report-executive, report-data, blog-modern, blog-dark,
            blog-editorial, academic-classic, academic-modern, thesis,
            docs-light, docs-dark, api-reference, corporate, proposal, invoice.
          type: string
        numbering:
          additionalProperties: false
          description: >-
            Auto-numbering policy. Opt-in via `enabled: true`. Counters reset on
            the next deeper-depth heading and propagate across the document.
            Passing any of `all`, `byDepth`, `depthRange`, or
            `trailingSeparator` together with `enabled: false` returns 400 —
            those fields configure an active numbering policy, so they require
            `enabled: true`.
          type: object
          required:
            - enabled
          properties:
            enabled:
              description: Turn heading auto-numbering on or off
              type: boolean
            depthRange:
              description: Inclusive `[min, max]` heading depths that receive numbering
              type: array
              items:
                description: Heading depth from 1 (top level) to 6
                anyOf:
                  - const: 1
                    type: number
                  - const: 2
                    type: number
                  - const: 3
                    type: number
                  - const: 4
                    type: number
                  - const: 5
                    type: number
                  - const: 6
                    type: number
              minItems: 2
              maxItems: 2
            all:
              additionalProperties: false
              type: object
              properties:
                format:
                  type: string
                  enum:
                    - decimal
                    - decimal-leading-zero
                    - upper-roman
                    - lower-roman
                    - upper-alpha
                    - lower-alpha
                prefix:
                  maxLength: 32
                  description: Text inserted before the counter for this depth
                  type: string
                suffix:
                  maxLength: 32
                  description: Text inserted after the counter for this depth
                  type: string
                separator:
                  maxLength: 8
                  description: >-
                    Separator placed between this segment and the next deeper
                    one
                  type: string
            byDepth:
              additionalProperties: false
              description: Per-heading-depth numbering overrides, keyed by depth 1–6
              type: object
              properties:
                '1':
                  additionalProperties: false
                  type: object
                  properties:
                    format:
                      type: string
                      enum:
                        - decimal
                        - decimal-leading-zero
                        - upper-roman
                        - lower-roman
                        - upper-alpha
                        - lower-alpha
                    prefix:
                      maxLength: 32
                      description: Text inserted before the counter for this depth
                      type: string
                    suffix:
                      maxLength: 32
                      description: Text inserted after the counter for this depth
                      type: string
                    separator:
                      maxLength: 8
                      description: >-
                        Separator placed between this segment and the next
                        deeper one
                      type: string
                '2':
                  additionalProperties: false
                  type: object
                  properties:
                    format:
                      type: string
                      enum:
                        - decimal
                        - decimal-leading-zero
                        - upper-roman
                        - lower-roman
                        - upper-alpha
                        - lower-alpha
                    prefix:
                      maxLength: 32
                      description: Text inserted before the counter for this depth
                      type: string
                    suffix:
                      maxLength: 32
                      description: Text inserted after the counter for this depth
                      type: string
                    separator:
                      maxLength: 8
                      description: >-
                        Separator placed between this segment and the next
                        deeper one
                      type: string
                '3':
                  additionalProperties: false
                  type: object
                  properties:
                    format:
                      type: string
                      enum:
                        - decimal
                        - decimal-leading-zero
                        - upper-roman
                        - lower-roman
                        - upper-alpha
                        - lower-alpha
                    prefix:
                      maxLength: 32
                      description: Text inserted before the counter for this depth
                      type: string
                    suffix:
                      maxLength: 32
                      description: Text inserted after the counter for this depth
                      type: string
                    separator:
                      maxLength: 8
                      description: >-
                        Separator placed between this segment and the next
                        deeper one
                      type: string
                '4':
                  additionalProperties: false
                  type: object
                  properties:
                    format:
                      type: string
                      enum:
                        - decimal
                        - decimal-leading-zero
                        - upper-roman
                        - lower-roman
                        - upper-alpha
                        - lower-alpha
                    prefix:
                      maxLength: 32
                      description: Text inserted before the counter for this depth
                      type: string
                    suffix:
                      maxLength: 32
                      description: Text inserted after the counter for this depth
                      type: string
                    separator:
                      maxLength: 8
                      description: >-
                        Separator placed between this segment and the next
                        deeper one
                      type: string
                '5':
                  additionalProperties: false
                  type: object
                  properties:
                    format:
                      type: string
                      enum:
                        - decimal
                        - decimal-leading-zero
                        - upper-roman
                        - lower-roman
                        - upper-alpha
                        - lower-alpha
                    prefix:
                      maxLength: 32
                      description: Text inserted before the counter for this depth
                      type: string
                    suffix:
                      maxLength: 32
                      description: Text inserted after the counter for this depth
                      type: string
                    separator:
                      maxLength: 8
                      description: >-
                        Separator placed between this segment and the next
                        deeper one
                      type: string
                '6':
                  additionalProperties: false
                  type: object
                  properties:
                    format:
                      type: string
                      enum:
                        - decimal
                        - decimal-leading-zero
                        - upper-roman
                        - lower-roman
                        - upper-alpha
                        - lower-alpha
                    prefix:
                      maxLength: 32
                      description: Text inserted before the counter for this depth
                      type: string
                    suffix:
                      maxLength: 32
                      description: Text inserted after the counter for this depth
                      type: string
                    separator:
                      maxLength: 8
                      description: >-
                        Separator placed between this segment and the next
                        deeper one
                      type: string
            trailingSeparator:
              maxLength: 8
              description: >-
                Separator appended after the full counter, before the heading
                text
              type: string
        furniture:
          additionalProperties: false
          description: >-
            Page furniture (running headers and footers). `slots` applies to
            every page; set `omitFirstPage: true` to suppress furniture on the
            cover page, or pass `firstPage` to override the first page only. Set
            `omitLastPage: true` to suppress furniture on the closing page, or
            pass `lastPage` to override the final page only (when `totalPages` >
            1). Optional `pageOverrides` supplies arbitrary per-page exceptions
            (later matches win per field). Optional `watermark` draws faint text
            behind body content. Optional `decorations` draws band rules such as
            masthead hairlines
          type: object
          properties:
            slots:
              additionalProperties: false
              description: >-
                Content for each of the six header and footer positions
                (top/bottom × left/center/right)
              type: object
              properties:
                topLeft:
                  additionalProperties: false
                  type: object
                  required:
                    - content
                  properties:
                    content:
                      minItems: 1
                      maxItems: 16
                      description: Ordered fragments concatenated to fill the slot
                      type: array
                      items:
                        description: >-
                          A header/footer fragment: literal text, an image
                          (logo/letterhead), page numbers, document title,
                          running section title, or section ordinal at a heading
                          depth. An `image` fragment must be the only fragment
                          in its slot — it is not mixed with text fragments.
                        anyOf:
                          - additionalProperties: false
                            type: object
                            required:
                              - kind
                              - value
                            properties:
                              kind:
                                const: text
                                type: string
                              value:
                                minLength: 1
                                maxLength: 256
                                pattern: \S
                                description: Literal text for this fragment
                                type: string
                              style:
                                additionalProperties: false
                                type: object
                                properties:
                                  font:
                                    pattern: ^\S(.*\S)?$
                                    description: >-
                                      Font slot as `<role>.<variant>` — role is
                                      `body`, `heading`, or a custom
                                      `typography.named` role; variant is one of
                                      regular, italic, bold, boldItalic (see
                                      `enums.fontVariant`; e.g. `heading.bold`).
                                      The shape is checked semantically at
                                      validate, not by this pattern: a
                                      misspelled variant, an undeclared role, a
                                      missing `.variant`, or a value that reads
                                      like a family name is rejected with a
                                      `didYouMean` pointing at the fix (use
                                      `set.family` for a typeface).
                                    type: string
                                  size:
                                    minimum: 1
                                    maximum: 999
                                    description: Font size in points
                                    type: number
                                  color:
                                    pattern: ^#([0-9a-fA-F]{3}|[0-9a-fA-F]{6})$
                                    description: Color as `#RGB` or `#RRGGBB`
                                    type: string
                                  opacity:
                                    minimum: 0
                                    maximum: 1
                                    description: Text opacity from 0 to 1
                                    type: number
                          - additionalProperties: false
                            type: object
                            required:
                              - kind
                              - url
                            properties:
                              kind:
                                const: image
                                type: string
                              url:
                                minLength: 1
                                maxLength: 1048576
                                pattern: ^(https://|data:image/)
                                description: >-
                                  HTTPS or base64 `data:image/...` URL of the
                                  header/footer image (typically a brand logo or
                                  letterhead). Fetched under the same fixed,
                                  non-configurable image policy as Markdown
                                  images (private IPs blocked, DNS-rebinding
                                  mitigation, 10 MiB cap); a fetch or decode
                                  failure degrades to a diagnostic and the image
                                  is omitted rather than failing the render.
                                  Rendered as a decorative PDF/UA pagination
                                  artifact (no alt text).
                                type: string
                              width:
                                minimum: 1
                                maximum: 14400
                                description: >-
                                  Rendered image width in PDF points. When
                                  omitted, the intrinsic width is used, clamped
                                  to the slot band width. Set `width` or
                                  `height` to scale a logo down.
                                type: number
                              height:
                                minimum: 1
                                maximum: 14400
                                description: >-
                                  Rendered image height in PDF points. When
                                  omitted, height follows the aspect ratio of
                                  the resolved width.
                                type: number
                              fit:
                                description: >-
                                  Block-only. How the image fills its
                                  width/height box: `none` (intrinsic sizing),
                                  `contain`, `cover`, or `fill`. Used with
                                  `height` for hero-style layouts.
                                anyOf:
                                  - const: none
                                    type: string
                                  - const: contain
                                    type: string
                                  - const: cover
                                    type: string
                                  - const: fill
                                    type: string
                              align:
                                description: >-
                                  Block-only. Horizontal alignment of the image
                                  within the content area: `start` (left edge in
                                  LTR), `center`, or `end` (right edge in LTR).
                                  Ignored for inline images (line flow controls
                                  position).
                                anyOf:
                                  - const: start
                                    type: string
                                  - const: center
                                    type: string
                                  - const: end
                                    type: string
                              opacity:
                                minimum: 0
                                maximum: 1
                                description: Image opacity from 0 to 1.
                                type: number
                          - additionalProperties: false
                            type: object
                            required:
                              - kind
                            properties:
                              kind:
                                const: pageNumber
                                type: string
                              style:
                                additionalProperties: false
                                type: object
                                properties:
                                  font:
                                    pattern: ^\S(.*\S)?$
                                    description: >-
                                      Font slot as `<role>.<variant>` — role is
                                      `body`, `heading`, or a custom
                                      `typography.named` role; variant is one of
                                      regular, italic, bold, boldItalic (see
                                      `enums.fontVariant`; e.g. `heading.bold`).
                                      The shape is checked semantically at
                                      validate, not by this pattern: a
                                      misspelled variant, an undeclared role, a
                                      missing `.variant`, or a value that reads
                                      like a family name is rejected with a
                                      `didYouMean` pointing at the fix (use
                                      `set.family` for a typeface).
                                    type: string
                                  size:
                                    minimum: 1
                                    maximum: 999
                                    description: Font size in points
                                    type: number
                                  color:
                                    pattern: ^#([0-9a-fA-F]{3}|[0-9a-fA-F]{6})$
                                    description: Color as `#RGB` or `#RRGGBB`
                                    type: string
                                  opacity:
                                    minimum: 0
                                    maximum: 1
                                    description: Text opacity from 0 to 1
                                    type: number
                          - additionalProperties: false
                            type: object
                            required:
                              - kind
                            properties:
                              kind:
                                const: totalPages
                                type: string
                              style:
                                additionalProperties: false
                                type: object
                                properties:
                                  font:
                                    pattern: ^\S(.*\S)?$
                                    description: >-
                                      Font slot as `<role>.<variant>` — role is
                                      `body`, `heading`, or a custom
                                      `typography.named` role; variant is one of
                                      regular, italic, bold, boldItalic (see
                                      `enums.fontVariant`; e.g. `heading.bold`).
                                      The shape is checked semantically at
                                      validate, not by this pattern: a
                                      misspelled variant, an undeclared role, a
                                      missing `.variant`, or a value that reads
                                      like a family name is rejected with a
                                      `didYouMean` pointing at the fix (use
                                      `set.family` for a typeface).
                                    type: string
                                  size:
                                    minimum: 1
                                    maximum: 999
                                    description: Font size in points
                                    type: number
                                  color:
                                    pattern: ^#([0-9a-fA-F]{3}|[0-9a-fA-F]{6})$
                                    description: Color as `#RGB` or `#RRGGBB`
                                    type: string
                                  opacity:
                                    minimum: 0
                                    maximum: 1
                                    description: Text opacity from 0 to 1
                                    type: number
                          - additionalProperties: false
                            type: object
                            required:
                              - kind
                            properties:
                              kind:
                                const: documentTitle
                                type: string
                              style:
                                additionalProperties: false
                                type: object
                                properties:
                                  font:
                                    pattern: ^\S(.*\S)?$
                                    description: >-
                                      Font slot as `<role>.<variant>` — role is
                                      `body`, `heading`, or a custom
                                      `typography.named` role; variant is one of
                                      regular, italic, bold, boldItalic (see
                                      `enums.fontVariant`; e.g. `heading.bold`).
                                      The shape is checked semantically at
                                      validate, not by this pattern: a
                                      misspelled variant, an undeclared role, a
                                      missing `.variant`, or a value that reads
                                      like a family name is rejected with a
                                      `didYouMean` pointing at the fix (use
                                      `set.family` for a typeface).
                                    type: string
                                  size:
                                    minimum: 1
                                    maximum: 999
                                    description: Font size in points
                                    type: number
                                  color:
                                    pattern: ^#([0-9a-fA-F]{3}|[0-9a-fA-F]{6})$
                                    description: Color as `#RGB` or `#RRGGBB`
                                    type: string
                                  opacity:
                                    minimum: 0
                                    maximum: 1
                                    description: Text opacity from 0 to 1
                                    type: number
                          - additionalProperties: false
                            type: object
                            required:
                              - kind
                            properties:
                              kind:
                                const: sectionTitle
                                type: string
                              depth:
                                description: Heading depth from 1 (top level) to 6
                                anyOf:
                                  - const: 1
                                    type: number
                                  - const: 2
                                    type: number
                                  - const: 3
                                    type: number
                                  - const: 4
                                    type: number
                                  - const: 5
                                    type: number
                                  - const: 6
                                    type: number
                              style:
                                additionalProperties: false
                                type: object
                                properties:
                                  font:
                                    pattern: ^\S(.*\S)?$
                                    description: >-
                                      Font slot as `<role>.<variant>` — role is
                                      `body`, `heading`, or a custom
                                      `typography.named` role; variant is one of
                                      regular, italic, bold, boldItalic (see
                                      `enums.fontVariant`; e.g. `heading.bold`).
                                      The shape is checked semantically at
                                      validate, not by this pattern: a
                                      misspelled variant, an undeclared role, a
                                      missing `.variant`, or a value that reads
                                      like a family name is rejected with a
                                      `didYouMean` pointing at the fix (use
                                      `set.family` for a typeface).
                                    type: string
                                  size:
                                    minimum: 1
                                    maximum: 999
                                    description: Font size in points
                                    type: number
                                  color:
                                    pattern: ^#([0-9a-fA-F]{3}|[0-9a-fA-F]{6})$
                                    description: Color as `#RGB` or `#RRGGBB`
                                    type: string
                                  opacity:
                                    minimum: 0
                                    maximum: 1
                                    description: Text opacity from 0 to 1
                                    type: number
                          - additionalProperties: false
                            type: object
                            required:
                              - kind
                            properties:
                              kind:
                                const: sectionIndex
                                type: string
                              depth:
                                description: Heading depth from 1 (top level) to 6
                                anyOf:
                                  - const: 1
                                    type: number
                                  - const: 2
                                    type: number
                                  - const: 3
                                    type: number
                                  - const: 4
                                    type: number
                                  - const: 5
                                    type: number
                                  - const: 6
                                    type: number
                              format:
                                description: >-
                                  Section ordinal format: `twoDigit` (at least
                                  two digits: 01, 12; ordinals ≥ 100 render in
                                  full) or `decimal` (1, 2, …)
                                anyOf:
                                  - const: twoDigit
                                    type: string
                                  - const: decimal
                                    type: string
                              style:
                                additionalProperties: false
                                type: object
                                properties:
                                  font:
                                    pattern: ^\S(.*\S)?$
                                    description: >-
                                      Font slot as `<role>.<variant>` — role is
                                      `body`, `heading`, or a custom
                                      `typography.named` role; variant is one of
                                      regular, italic, bold, boldItalic (see
                                      `enums.fontVariant`; e.g. `heading.bold`).
                                      The shape is checked semantically at
                                      validate, not by this pattern: a
                                      misspelled variant, an undeclared role, a
                                      missing `.variant`, or a value that reads
                                      like a family name is rejected with a
                                      `didYouMean` pointing at the fix (use
                                      `set.family` for a typeface).
                                    type: string
                                  size:
                                    minimum: 1
                                    maximum: 999
                                    description: Font size in points
                                    type: number
                                  color:
                                    pattern: ^#([0-9a-fA-F]{3}|[0-9a-fA-F]{6})$
                                    description: Color as `#RGB` or `#RRGGBB`
                                    type: string
                                  opacity:
                                    minimum: 0
                                    maximum: 1
                                    description: Text opacity from 0 to 1
                                    type: number
                    style:
                      additionalProperties: false
                      type: object
                      properties:
                        font:
                          pattern: ^\S(.*\S)?$
                          description: >-
                            Font slot as `<role>.<variant>` — role is `body`,
                            `heading`, or a custom `typography.named` role;
                            variant is one of regular, italic, bold, boldItalic
                            (see `enums.fontVariant`; e.g. `heading.bold`). The
                            shape is checked semantically at validate, not by
                            this pattern: a misspelled variant, an undeclared
                            role, a missing `.variant`, or a value that reads
                            like a family name is rejected with a `didYouMean`
                            pointing at the fix (use `set.family` for a
                            typeface).
                          type: string
                        family:
                          description: >-
                            A text family: a hosted weighted key, a declared
                            Google Fonts display name, or a `typography.named`
                            role reference
                          anyOf:
                            - const: inter
                              type: string
                            - const: lora
                              type: string
                            - const: source-serif-4
                              type: string
                            - pattern: ^[A-Za-z][A-Za-z0-9 ]{0,63}$
                              description: >-
                                Google Fonts display name from the declared pool
                                (e.g. `Playfair Display`)
                              type: string
                            - pattern: ^[a-z][a-z0-9-]{0,15}$
                              description: >-
                                Reference to a custom role declared in
                                `typography.named` (e.g. `display`)
                              type: string
                        size:
                          minimum: 1
                          maximum: 999
                          description: Font size in points
                          type: number
                        color:
                          pattern: ^#([0-9a-fA-F]{3}|[0-9a-fA-F]{6})$
                          description: Color as `#RGB` or `#RRGGBB`
                          type: string
                        spaceBefore:
                          minimum: 0
                          maximum: 9999
                          description: Vertical space reserved above the block, in points
                          type: number
                        spaceAfter:
                          minimum: 0
                          maximum: 9999
                          description: Vertical space reserved below the block, in points
                          type: number
                        lineHeight:
                          minimum: 1
                          maximum: 10
                          description: Line height as a multiple of the font size
                          type: number
                        align:
                          type: string
                          enum:
                            - left
                            - right
                            - center
                            - justify
                        letterSpacing:
                          minimum: -100
                          maximum: 100
                          description: >-
                            Extra spacing between characters in points; negative
                            values tighten
                          type: number
                        opacity:
                          minimum: 0
                          maximum: 1
                          description: Text opacity from 0 to 1
                          type: number
                        inline:
                          additionalProperties: false
                          type: object
                          properties:
                            strong:
                              additionalProperties: false
                              type: object
                              properties:
                                color:
                                  description: >-
                                    Color as `#RGB` or `#RRGGBB`, or `inherit`
                                    to use the inherited color
                                  anyOf:
                                    - pattern: ^#([0-9a-fA-F]{3}|[0-9a-fA-F]{6})$
                                      description: Color as `#RGB` or `#RRGGBB`
                                      type: string
                                    - const: inherit
                                      type: string
                            emphasis:
                              additionalProperties: false
                              type: object
                              properties:
                                color:
                                  description: >-
                                    Color as `#RGB` or `#RRGGBB`, or `inherit`
                                    to use the inherited color
                                  anyOf:
                                    - pattern: ^#([0-9a-fA-F]{3}|[0-9a-fA-F]{6})$
                                      description: Color as `#RGB` or `#RRGGBB`
                                      type: string
                                    - const: inherit
                                      type: string
                            delete:
                              additionalProperties: false
                              type: object
                              properties:
                                color:
                                  description: >-
                                    Color as `#RGB` or `#RRGGBB`, or `inherit`
                                    to use the inherited color
                                  anyOf:
                                    - pattern: ^#([0-9a-fA-F]{3}|[0-9a-fA-F]{6})$
                                      description: Color as `#RGB` or `#RRGGBB`
                                      type: string
                                    - const: inherit
                                      type: string
                                decorationStyle:
                                  type: string
                                  enum:
                                    - solid
                                    - double
                                    - dotted
                                    - dashed
                                    - wavy
                                decorationColor:
                                  description: >-
                                    Color as `#RGB` or `#RRGGBB`, or `inherit`
                                    to use the inherited color
                                  anyOf:
                                    - pattern: ^#([0-9a-fA-F]{3}|[0-9a-fA-F]{6})$
                                      description: Color as `#RGB` or `#RRGGBB`
                                      type: string
                                    - const: inherit
                                      type: string
                            mark:
                              additionalProperties: false
                              type: object
                              properties:
                                color:
                                  description: >-
                                    Color as `#RGB` or `#RRGGBB`, or `inherit`
                                    to use the inherited color
                                  anyOf:
                                    - pattern: ^#([0-9a-fA-F]{3}|[0-9a-fA-F]{6})$
                                      description: Color as `#RGB` or `#RRGGBB`
                                      type: string
                                    - const: inherit
                                      type: string
                                background:
                                  description: >-
                                    Background fill behind highlighted text as
                                    `#RGB`/`#RRGGBB`, or `null` to suppress
                                  anyOf:
                                    - pattern: ^#([0-9a-fA-F]{3}|[0-9a-fA-F]{6})$
                                      description: Color as `#RGB` or `#RRGGBB`
                                      type: string
                                    - type: 'null'
                                backgroundPadding:
                                  additionalProperties: false
                                  type: object
                                  properties:
                                    top:
                                      minimum: 0
                                      maximum: 9999
                                      description: Top padding, in points
                                      type: number
                                    right:
                                      minimum: 0
                                      maximum: 9999
                                      description: Right padding, in points
                                      type: number
                                    bottom:
                                      minimum: 0
                                      maximum: 9999
                                      description: Bottom padding, in points
                                      type: number
                                    left:
                                      minimum: 0
                                      maximum: 9999
                                      description: Left padding, in points
                                      type: number
                                    x:
                                      minimum: 0
                                      maximum: 9999
                                      description: >-
                                        Horizontal padding applied to both left
                                        and right when those sides are omitted,
                                        in points
                                      type: number
                                    'y':
                                      minimum: 0
                                      maximum: 9999
                                      description: >-
                                        Vertical padding applied to both top and
                                        bottom when those sides are omitted, in
                                        points
                                      type: number
                                backgroundRadius:
                                  minimum: 0
                                  maximum: 14400
                                  description: >-
                                    Corner radius for each highlight background
                                    segment, in points
                                  type: number
                            subscript:
                              additionalProperties: false
                              type: object
                              properties:
                                color:
                                  description: >-
                                    Color as `#RGB` or `#RRGGBB`, or `inherit`
                                    to use the inherited color
                                  anyOf:
                                    - pattern: ^#([0-9a-fA-F]{3}|[0-9a-fA-F]{6})$
                                      description: Color as `#RGB` or `#RRGGBB`
                                      type: string
                                    - const: inherit
                                      type: string
                                sizeScale:
                                  minimum: 0.4
                                  maximum: 1
                                  description: >-
                                    Optical scale relative to the surrounding
                                    run (fraction of base size)
                                  type: number
                                riseFraction:
                                  minimum: 0
                                  maximum: 1
                                  description: >-
                                    Baseline offset as a fraction of base size
                                    (not PDF points — contrast with code
                                    `baselineShift`). The renderer applies the
                                    sign (up for superscript, down for
                                    subscript)
                                  type: number
                            superscript:
                              additionalProperties: false
                              type: object
                              properties:
                                color:
                                  description: >-
                                    Color as `#RGB` or `#RRGGBB`, or `inherit`
                                    to use the inherited color
                                  anyOf:
                                    - pattern: ^#([0-9a-fA-F]{3}|[0-9a-fA-F]{6})$
                                      description: Color as `#RGB` or `#RRGGBB`
                                      type: string
                                    - const: inherit
                                      type: string
                                sizeScale:
                                  minimum: 0.4
                                  maximum: 1
                                  description: >-
                                    Optical scale relative to the surrounding
                                    run (fraction of base size)
                                  type: number
                                riseFraction:
                                  minimum: 0
                                  maximum: 1
                                  description: >-
                                    Baseline offset as a fraction of base size
                                    (not PDF points — contrast with code
                                    `baselineShift`). The renderer applies the
                                    sign (up for superscript, down for
                                    subscript)
                                  type: number
                            link:
                              additionalProperties: false
                              type: object
                              properties:
                                color:
                                  description: >-
                                    Color as `#RGB` or `#RRGGBB`, or `inherit`
                                    to use the inherited color
                                  anyOf:
                                    - pattern: ^#([0-9a-fA-F]{3}|[0-9a-fA-F]{6})$
                                      description: Color as `#RGB` or `#RRGGBB`
                                      type: string
                                    - const: inherit
                                      type: string
                                decoration:
                                  type: string
                                  enum:
                                    - underline
                                    - lineThrough
                                    - none
                                decorationStyle:
                                  type: string
                                  enum:
                                    - solid
                                    - double
                                    - dotted
                                    - dashed
                                    - wavy
                                decorationColor:
                                  description: >-
                                    Color as `#RGB` or `#RRGGBB`, or `inherit`
                                    to use the inherited color
                                  anyOf:
                                    - pattern: ^#([0-9a-fA-F]{3}|[0-9a-fA-F]{6})$
                                      description: Color as `#RGB` or `#RRGGBB`
                                      type: string
                                    - const: inherit
                                      type: string
                            code:
                              additionalProperties: false
                              description: >-
                                Style overrides for inline code spans (`` `code`
                                ``): font, optical size scale, text color,
                                background fill/padding/border/radius, baseline
                                shift, opacity, and letter spacing. Pass
                                `background: null` or `backgroundBorder: null`
                                to suppress those.
                              type: object
                              properties:
                                font:
                                  pattern: ^\S(.*\S)?$
                                  description: >-
                                    Font slot as `<role>.<variant>` — role is
                                    `body`, `heading`, or a custom
                                    `typography.named` role; variant is one of
                                    regular, italic, bold, boldItalic (see
                                    `enums.fontVariant`; e.g. `heading.bold`).
                                    The shape is checked semantically at
                                    validate, not by this pattern: a misspelled
                                    variant, an undeclared role, a missing
                                    `.variant`, or a value that reads like a
                                    family name is rejected with a `didYouMean`
                                    pointing at the fix (use `set.family` for a
                                    typeface).
                                  type: string
                                sizeScale:
                                  minimum: 0.85
                                  maximum: 0.88
                                  description: >-
                                    Optical scale relative to the surrounding
                                    run. Accepted range is the 0.85–0.88 band;
                                    out-of-range values are rejected
                                  type: number
                                color:
                                  description: >-
                                    Color as `#RGB` or `#RRGGBB`, or `inherit`
                                    to use the inherited color
                                  anyOf:
                                    - pattern: ^#([0-9a-fA-F]{3}|[0-9a-fA-F]{6})$
                                      description: Color as `#RGB` or `#RRGGBB`
                                      type: string
                                    - const: inherit
                                      type: string
                                background:
                                  description: >-
                                    Background fill behind the code run as
                                    `#RGB`/`#RRGGBB`, or `null` to suppress
                                  anyOf:
                                    - pattern: ^#([0-9a-fA-F]{3}|[0-9a-fA-F]{6})$
                                      description: Color as `#RGB` or `#RRGGBB`
                                      type: string
                                    - type: 'null'
                                backgroundPadding:
                                  additionalProperties: false
                                  type: object
                                  properties:
                                    top:
                                      minimum: 0
                                      maximum: 9999
                                      description: Top padding, in points
                                      type: number
                                    right:
                                      minimum: 0
                                      maximum: 9999
                                      description: Right padding, in points
                                      type: number
                                    bottom:
                                      minimum: 0
                                      maximum: 9999
                                      description: Bottom padding, in points
                                      type: number
                                    left:
                                      minimum: 0
                                      maximum: 9999
                                      description: Left padding, in points
                                      type: number
                                    x:
                                      minimum: 0
                                      maximum: 9999
                                      description: >-
                                        Horizontal padding applied to both left
                                        and right when those sides are omitted,
                                        in points
                                      type: number
                                    'y':
                                      minimum: 0
                                      maximum: 9999
                                      description: >-
                                        Vertical padding applied to both top and
                                        bottom when those sides are omitted, in
                                        points
                                      type: number
                                backgroundBorder:
                                  description: >-
                                    Micro-border around each cloned background
                                    segment, or `null` to suppress
                                  anyOf:
                                    - additionalProperties: false
                                      type: object
                                      required:
                                        - width
                                        - color
                                      properties:
                                        width:
                                          minimum: 0.1
                                          maximum: 50
                                          description: Border thickness in points
                                          type: number
                                        color:
                                          pattern: ^#([0-9a-fA-F]{3}|[0-9a-fA-F]{6})$
                                          description: Color as `#RGB` or `#RRGGBB`
                                          type: string
                                        opacity:
                                          minimum: 0
                                          maximum: 1
                                          description: Border opacity from 0 to 1
                                          type: number
                                        dash:
                                          description: >-
                                            Dash pattern as `[dash, gap]` lengths in
                                            points; both `0` is rejected
                                          type: array
                                          items:
                                            minimum: 0
                                            maximum: 1000
                                            type: number
                                          minItems: 2
                                          maxItems: 2
                                    - type: 'null'
                                backgroundRadius:
                                  minimum: 0
                                  maximum: 14400
                                  description: >-
                                    Corner radius for each background segment,
                                    in points
                                  type: number
                                baselineShift:
                                  minimum: -999
                                  maximum: 999
                                  description: >-
                                    PDF text-rise adjustment in points; positive
                                    values raise the code glyphs
                                  type: number
                                opacity:
                                  minimum: 0
                                  maximum: 1
                                  description: Fill opacity from 0 to 1
                                  type: number
                                letterSpacing:
                                  minimum: -100
                                  maximum: 100
                                  description: >-
                                    Extra spacing between code glyphs in points;
                                    negative values tighten
                                  type: number
                topCenter:
                  additionalProperties: false
                  type: object
                  required:
                    - content
                  properties:
                    content:
                      minItems: 1
                      maxItems: 16
                      description: Ordered fragments concatenated to fill the slot
                      type: array
                      items:
                        description: >-
                          A header/footer fragment: literal text, an image
                          (logo/letterhead), page numbers, document title,
                          running section title, or section ordinal at a heading
                          depth. An `image` fragment must be the only fragment
                          in its slot — it is not mixed with text fragments.
                        anyOf:
                          - additionalProperties: false
                            type: object
                            required:
                              - kind
                              - value
                            properties:
                              kind:
                                const: text
                                type: string
                              value:
                                minLength: 1
                                maxLength: 256
                                pattern: \S
                                description: Literal text for this fragment
                                type: string
                              style:
                                additionalProperties: false
                                type: object
                                properties:
                                  font:
                                    pattern: ^\S(.*\S)?$
                                    description: >-
                                      Font slot as `<role>.<variant>` — role is
                                      `body`, `heading`, or a custom
                                      `typography.named` role; variant is one of
                                      regular, italic, bold, boldItalic (see
                                      `enums.fontVariant`; e.g. `heading.bold`).
                                      The shape is checked semantically at
                                      validate, not by this pattern: a
                                      misspelled variant, an undeclared role, a
                                      missing `.variant`, or a value that reads
                                      like a family name is rejected with a
                                      `didYouMean` pointing at the fix (use
                                      `set.family` for a typeface).
                                    type: string
                                  size:
                                    minimum: 1
                                    maximum: 999
                                    description: Font size in points
                                    type: number
                                  color:
                                    pattern: ^#([0-9a-fA-F]{3}|[0-9a-fA-F]{6})$
                                    description: Color as `#RGB` or `#RRGGBB`
                                    type: string
                                  opacity:
                                    minimum: 0
                                    maximum: 1
                                    description: Text opacity from 0 to 1
                                    type: number
                          - additionalProperties: false
                            type: object
                            required:
                              - kind
                              - url
                            properties:
                              kind:
                                const: image
                                type: string
                              url:
                                minLength: 1
                                maxLength: 1048576
                                pattern: ^(https://|data:image/)
                                description: >-
                                  HTTPS or base64 `data:image/...` URL of the
                                  header/footer image (typically a brand logo or
                                  letterhead). Fetched under the same fixed,
                                  non-configurable image policy as Markdown
                                  images (private IPs blocked, DNS-rebinding
                                  mitigation, 10 MiB cap); a fetch or decode
                                  failure degrades to a diagnostic and the image
                                  is omitted rather than failing the render.
                                  Rendered as a decorative PDF/UA pagination
                                  artifact (no alt text).
                                type: string
                              width:
                                minimum: 1
                                maximum: 14400
                                description: >-
                                  Rendered image width in PDF points. When
                                  omitted, the intrinsic width is used, clamped
                                  to the slot band width. Set `width` or
                                  `height` to scale a logo down.
                                type: number
                              height:
                                minimum: 1
                                maximum: 14400
                                description: >-
                                  Rendered image height in PDF points. When
                                  omitted, height follows the aspect ratio of
                                  the resolved width.
                                type: number
                              fit:
                                description: >-
                                  Block-only. How the image fills its
                                  width/height box: `none` (intrinsic sizing),
                                  `contain`, `cover`, or `fill`. Used with
                                  `height` for hero-style layouts.
                                anyOf:
                                  - const: none
                                    type: string
                                  - const: contain
                                    type: string
                                  - const: cover
                                    type: string
                                  - const: fill
                                    type: string
                              align:
                                description: >-
                                  Block-only. Horizontal alignment of the image
                                  within the content area: `start` (left edge in
                                  LTR), `center`, or `end` (right edge in LTR).
                                  Ignored for inline images (line flow controls
                                  position).
                                anyOf:
                                  - const: start
                                    type: string
                                  - const: center
                                    type: string
                                  - const: end
                                    type: string
                              opacity:
                                minimum: 0
                                maximum: 1
                                description: Image opacity from 0 to 1.
                                type: number
                          - additionalProperties: false
                            type: object
                            required:
                              - kind
                            properties:
                              kind:
                                const: pageNumber
                                type: string
                              style:
                                additionalProperties: false
                                type: object
                                properties:
                                  font:
                                    pattern: ^\S(.*\S)?$
                                    description: >-
                                      Font slot as `<role>.<variant>` — role is
                                      `body`, `heading`, or a custom
                                      `typography.named` role; variant is one of
                                      regular, italic, bold, boldItalic (see
                                      `enums.fontVariant`; e.g. `heading.bold`).
                                      The shape is checked semantically at
                                      validate, not by this pattern: a
                                      misspelled variant, an undeclared role, a
                                      missing `.variant`, or a value that reads
                                      like a family name is rejected with a
                                      `didYouMean` pointing at the fix (use
                                      `set.family` for a typeface).
                                    type: string
                                  size:
                                    minimum: 1
                                    maximum: 999
                                    description: Font size in points
                                    type: number
                                  color:
                                    pattern: ^#([0-9a-fA-F]{3}|[0-9a-fA-F]{6})$
                                    description: Color as `#RGB` or `#RRGGBB`
                                    type: string
                                  opacity:
                                    minimum: 0
                                    maximum: 1
                                    description: Text opacity from 0 to 1
                                    type: number
                          - additionalProperties: false
                            type: object
                            required:
                              - kind
                            properties:
                              kind:
                                const: totalPages
                                type: string
                              style:
                                additionalProperties: false
                                type: object
                                properties:
                                  font:
                                    pattern: ^\S(.*\S)?$
                                    description: >-
                                      Font slot as `<role>.<variant>` — role is
                                      `body`, `heading`, or a custom
                                      `typography.named` role; variant is one of
                                      regular, italic, bold, boldItalic (see
                                      `enums.fontVariant`; e.g. `heading.bold`).
                                      The shape is checked semantically at
                                      validate, not by this pattern: a
                                      misspelled variant, an undeclared role, a
                                      missing `.variant`, or a value that reads
                                      like a family name is rejected with a
                                      `didYouMean` pointing at the fix (use
                                      `set.family` for a typeface).
                                    type: string
                                  size:
                                    minimum: 1
                                    maximum: 999
                                    description: Font size in points
                                    type: number
                                  color:
                                    pattern: ^#([0-9a-fA-F]{3}|[0-9a-fA-F]{6})$
                                    description: Color as `#RGB` or `#RRGGBB`
                                    type: string
                                  opacity:
                                    minimum: 0
                                    maximum: 1
                                    description: Text opacity from 0 to 1
                                    type: number
                          - additionalProperties: false
                            type: object
                            required:
                              - kind
                            properties:
                              kind:
                                const: documentTitle
                                type: string
                              style:
                                additionalProperties: false
                                type: object
                                properties:
                                  font:
                                    pattern: ^\S(.*\S)?$
                                    description: >-
                                      Font slot as `<role>.<variant>` — role is
                                      `body`, `heading`, or a custom
                                      `typography.named` role; variant is one of
                                      regular, italic, bold, boldItalic (see
                                      `enums.fontVariant`; e.g. `heading.bold`).
                                      The shape is checked semantically at
                                      validate, not by this pattern: a
                                      misspelled variant, an undeclared role, a
                                      missing `.variant`, or a value that reads
                                      like a family name is rejected with a
                                      `didYouMean` pointing at the fix (use
                                      `set.family` for a typeface).
                                    type: string
                                  size:
                                    minimum: 1
                                    maximum: 999
                                    description: Font size in points
                                    type: number
                                  color:
                                    pattern: ^#([0-9a-fA-F]{3}|[0-9a-fA-F]{6})$
                                    description: Color as `#RGB` or `#RRGGBB`
                                    type: string
                                  opacity:
                                    minimum: 0
                                    maximum: 1
                                    description: Text opacity from 0 to 1
                                    type: number
                          - additionalProperties: false
                            type: object
                            required:
                              - kind
                            properties:
                              kind:
                                const: sectionTitle
                                type: string
                              depth:
                                description: Heading depth from 1 (top level) to 6
                                anyOf:
                                  - const: 1
                                    type: number
                                  - const: 2
                                    type: number
                                  - const: 3
                                    type: number
                                  - const: 4
                                    type: number
                                  - const: 5
                                    type: number
                                  - const: 6
                                    type: number
                              style:
                                additionalProperties: false
                                type: object
                                properties:
                                  font:
                                    pattern: ^\S(.*\S)?$
                                    description: >-
                                      Font slot as `<role>.<variant>` — role is
                                      `body`, `heading`, or a custom
                                      `typography.named` role; variant is one of
                                      regular, italic, bold, boldItalic (see
                                      `enums.fontVariant`; e.g. `heading.bold`).
                                      The shape is checked semantically at
                                      validate, not by this pattern: a
                                      misspelled variant, an undeclared role, a
                                      missing `.variant`, or a value that reads
                                      like a family name is rejected with a
                                      `didYouMean` pointing at the fix (use
                                      `set.family` for a typeface).
                                    type: string
                                  size:
                                    minimum: 1
                                    maximum: 999
                                    description: Font size in points
                                    type: number
                                  color:
                                    pattern: ^#([0-9a-fA-F]{3}|[0-9a-fA-F]{6})$
                                    description: Color as `#RGB` or `#RRGGBB`
                                    type: string
                                  opacity:
                                    minimum: 0
                                    maximum: 1
                                    description: Text opacity from 0 to 1
                                    type: number
                          - additionalProperties: false
                            type: object
                            required:
                              - kind
                            properties:
                              kind:
                                const: sectionIndex
                                type: string
                              depth:
                                description: Heading depth from 1 (top level) to 6
                                anyOf:
                                  - const: 1
                                    type: number
                                  - const: 2
                                    type: number
                                  - const: 3
                                    type: number
                                  - const: 4
                                    type: number
                                  - const: 5
                                    type: number
                                  - const: 6
                                    type: number
                              format:
                                description: >-
                                  Section ordinal format: `twoDigit` (at least
                                  two digits: 01, 12; ordinals ≥ 100 render in
                                  full) or `decimal` (1, 2, …)
                                anyOf:
                                  - const: twoDigit
                                    type: string
                                  - const: decimal
                                    type: string
                              style:
                                additionalProperties: false
                                type: object
                                properties:
                                  font:
                                    pattern: ^\S(.*\S)?$
                                    description: >-
                                      Font slot as `<role>.<variant>` — role is
                                      `body`, `heading`, or a custom
                                      `typography.named` role; variant is one of
                                      regular, italic, bold, boldItalic (see
                                      `enums.fontVariant`; e.g. `heading.bold`).
                                      The shape is checked semantically at
                                      validate, not by this pattern: a
                                      misspelled variant, an undeclared role, a
                                      missing `.variant`, or a value that reads
                                      like a family name is rejected with a
                                      `didYouMean` pointing at the fix (use
                                      `set.family` for a typeface).
                                    type: string
                                  size:
                                    minimum: 1
                                    maximum: 999
                                    description: Font size in points
                                    type: number
                                  color:
                                    pattern: ^#([0-9a-fA-F]{3}|[0-9a-fA-F]{6})$
                                    description: Color as `#RGB` or `#RRGGBB`
                                    type: string
                                  opacity:
                                    minimum: 0
                                    maximum: 1
                                    description: Text opacity from 0 to 1
                                    type: number
                    style:
                      additionalProperties: false
                      type: object
                      properties:
                        font:
                          pattern: ^\S(.*\S)?$
                          description: >-
                            Font slot as `<role>.<variant>` — role is `body`,
                            `heading`, or a custom `typography.named` role;
                            variant is one of regular, italic, bold, boldItalic
                            (see `enums.fontVariant`; e.g. `heading.bold`). The
                            shape is checked semantically at validate, not by
                            this pattern: a misspelled variant, an undeclared
                            role, a missing `.variant`, or a value that reads
                            like a family name is rejected with a `didYouMean`
                            pointing at the fix (use `set.family` for a
                            typeface).
                          type: string
                        family:
                          description: >-
                            A text family: a hosted weighted key, a declared
                            Google Fonts display name, or a `typography.named`
                            role reference
                          anyOf:
                            - const: inter
                              type: string
                            - const: lora
                              type: string
                            - const: source-serif-4
                              type: string
                            - pattern: ^[A-Za-z][A-Za-z0-9 ]{0,63}$
                              description: >-
                                Google Fonts display name from the declared pool
                                (e.g. `Playfair Display`)
                              type: string
                            - pattern: ^[a-z][a-z0-9-]{0,15}$
                              description: >-
                                Reference to a custom role declared in
                                `typography.named` (e.g. `display`)
                              type: string
                        size:
                          minimum: 1
                          maximum: 999
                          description: Font size in points
                          type: number
                        color:
                          pattern: ^#([0-9a-fA-F]{3}|[0-9a-fA-F]{6})$
                          description: Color as `#RGB` or `#RRGGBB`
                          type: string
                        spaceBefore:
                          minimum: 0
                          maximum: 9999
                          description: Vertical space reserved above the block, in points
                          type: number
                        spaceAfter:
                          minimum: 0
                          maximum: 9999
                          description: Vertical space reserved below the block, in points
                          type: number
                        lineHeight:
                          minimum: 1
                          maximum: 10
                          description: Line height as a multiple of the font size
                          type: number
                        align:
                          type: string
                          enum:
                            - left
                            - right
                            - center
                            - justify
                        letterSpacing:
                          minimum: -100
                          maximum: 100
                          description: >-
                            Extra spacing between characters in points; negative
                            values tighten
                          type: number
                        opacity:
                          minimum: 0
                          maximum: 1
                          description: Text opacity from 0 to 1
                          type: number
                        inline:
                          additionalProperties: false
                          type: object
                          properties:
                            strong:
                              additionalProperties: false
                              type: object
                              properties:
                                color:
                                  description: >-
                                    Color as `#RGB` or `#RRGGBB`, or `inherit`
                                    to use the inherited color
                                  anyOf:
                                    - pattern: ^#([0-9a-fA-F]{3}|[0-9a-fA-F]{6})$
                                      description: Color as `#RGB` or `#RRGGBB`
                                      type: string
                                    - const: inherit
                                      type: string
                            emphasis:
                              additionalProperties: false
                              type: object
                              properties:
                                color:
                                  description: >-
                                    Color as `#RGB` or `#RRGGBB`, or `inherit`
                                    to use the inherited color
                                  anyOf:
                                    - pattern: ^#([0-9a-fA-F]{3}|[0-9a-fA-F]{6})$
                                      description: Color as `#RGB` or `#RRGGBB`
                                      type: string
                                    - const: inherit
                                      type: string
                            delete:
                              additionalProperties: false
                              type: object
                              properties:
                                color:
                                  description: >-
                                    Color as `#RGB` or `#RRGGBB`, or `inherit`
                                    to use the inherited color
                                  anyOf:
                                    - pattern: ^#([0-9a-fA-F]{3}|[0-9a-fA-F]{6})$
                                      description: Color as `#RGB` or `#RRGGBB`
                                      type: string
                                    - const: inherit
                                      type: string
                                decorationStyle:
                                  type: string
                                  enum:
                                    - solid
                                    - double
                                    - dotted
                                    - dashed
                                    - wavy
                                decorationColor:
                                  description: >-
                                    Color as `#RGB` or `#RRGGBB`, or `inherit`
                                    to use the inherited color
                                  anyOf:
                                    - pattern: ^#([0-9a-fA-F]{3}|[0-9a-fA-F]{6})$
                                      description: Color as `#RGB` or `#RRGGBB`
                                      type: string
                                    - const: inherit
                                      type: string
                            mark:
                              additionalProperties: false
                              type: object
                              properties:
                                color:
                                  description: >-
                                    Color as `#RGB` or `#RRGGBB`, or `inherit`
                                    to use the inherited color
                                  anyOf:
                                    - pattern: ^#([0-9a-fA-F]{3}|[0-9a-fA-F]{6})$
                                      description: Color as `#RGB` or `#RRGGBB`
                                      type: string
                                    - const: inherit
                                      type: string
                                background:
                                  description: >-
                                    Background fill behind highlighted text as
                                    `#RGB`/`#RRGGBB`, or `null` to suppress
                                  anyOf:
                                    - pattern: ^#([0-9a-fA-F]{3}|[0-9a-fA-F]{6})$
                                      description: Color as `#RGB` or `#RRGGBB`
                                      type: string
                                    - type: 'null'
                                backgroundPadding:
                                  additionalProperties: false
                                  type: object
                                  properties:
                                    top:
                                      minimum: 0
                                      maximum: 9999
                                      description: Top padding, in points
                                      type: number
                                    right:
                                      minimum: 0
                                      maximum: 9999
                                      description: Right padding, in points
                                      type: number
                                    bottom:
                                      minimum: 0
                                      maximum: 9999
                                      description: Bottom padding, in points
                                      type: number
                                    left:
                                      minimum: 0
                                      maximum: 9999
                                      description: Left padding, in points
                                      type: number
                                    x:
                                      minimum: 0
                                      maximum: 9999
                                      description: >-
                                        Horizontal padding applied to both left
                                        and right when those sides are omitted,
                                        in points
                                      type: number
                                    'y':
                                      minimum: 0
                                      maximum: 9999
                                      description: >-
                                        Vertical padding applied to both top and
                                        bottom when those sides are omitted, in
                                        points
                                      type: number
                                backgroundRadius:
                                  minimum: 0
                                  maximum: 14400
                                  description: >-
                                    Corner radius for each highlight background
                                    segment, in points
                                  type: number
                            subscript:
                              additionalProperties: false
                              type: object
                              properties:
                                color:
                                  description: >-
                                    Color as `#RGB` or `#RRGGBB`, or `inherit`
                                    to use the inherited color
                                  anyOf:
                                    - pattern: ^#([0-9a-fA-F]{3}|[0-9a-fA-F]{6})$
                                      description: Color as `#RGB` or `#RRGGBB`
                                      type: string
                                    - const: inherit
                                      type: string
                                sizeScale:
                                  minimum: 0.4
                                  maximum: 1
                                  description: >-
                                    Optical scale relative to the surrounding
                                    run (fraction of base size)
                                  type: number
                                riseFraction:
                                  minimum: 0
                                  maximum: 1
                                  description: >-
                                    Baseline offset as a fraction of base size
                                    (not PDF points — contrast with code
                                    `baselineShift`). The renderer applies the
                                    sign (up for superscript, down for
                                    subscript)
                                  type: number
                            superscript:
                              additionalProperties: false
                              type: object
                              properties:
                                color:
                                  description: >-
                                    Color as `#RGB` or `#RRGGBB`, or `inherit`
                                    to use the inherited color
                                  anyOf:
                                    - pattern: ^#([0-9a-fA-F]{3}|[0-9a-fA-F]{6})$
                                      description: Color as `#RGB` or `#RRGGBB`
                                      type: string
                                    - const: inherit
                                      type: string
                                sizeScale:
                                  minimum: 0.4
                                  maximum: 1
                                  description: >-
                                    Optical scale relative to the surrounding
                                    run (fraction of base size)
                                  type: number
                                riseFraction:
                                  minimum: 0
                                  maximum: 1
                                  description: >-
                                    Baseline offset as a fraction of base size
                                    (not PDF points — contrast with code
                                    `baselineShift`). The renderer applies the
                                    sign (up for superscript, down for
                                    subscript)
                                  type: number
                            link:
                              additionalProperties: false
                              type: object
                              properties:
                                color:
                                  description: >-
                                    Color as `#RGB` or `#RRGGBB`, or `inherit`
                                    to use the inherited color
                                  anyOf:
                                    - pattern: ^#([0-9a-fA-F]{3}|[0-9a-fA-F]{6})$
                                      description: Color as `#RGB` or `#RRGGBB`
                                      type: string
                                    - const: inherit
                                      type: string
                                decoration:
                                  type: string
                                  enum:
                                    - underline
                                    - lineThrough
                                    - none
                                decorationStyle:
                                  type: string
                                  enum:
                                    - solid
                                    - double
                                    - dotted
                                    - dashed
                                    - wavy
                                decorationColor:
                                  description: >-
                                    Color as `#RGB` or `#RRGGBB`, or `inherit`
                                    to use the inherited color
                                  anyOf:
                                    - pattern: ^#([0-9a-fA-F]{3}|[0-9a-fA-F]{6})$
                                      description: Color as `#RGB` or `#RRGGBB`
                                      type: string
                                    - const: inherit
                                      type: string
                            code:
                              additionalProperties: false
                              description: >-
                                Style overrides for inline code spans (`` `code`
                                ``): font, optical size scale, text color,
                                background fill/padding/border/radius, baseline
                                shift, opacity, and letter spacing. Pass
                                `background: null` or `backgroundBorder: null`
                                to suppress those.
                              type: object
                              properties:
                                font:
                                  pattern: ^\S(.*\S)?$
                                  description: >-
                                    Font slot as `<role>.<variant>` — role is
                                    `body`, `heading`, or a custom
                                    `typography.named` role; variant is one of
                                    regular, italic, bold, boldItalic (see
                                    `enums.fontVariant`; e.g. `heading.bold`).
                                    The shape is checked semantically at
                                    validate, not by this pattern: a misspelled
                                    variant, an undeclared role, a missing
                                    `.variant`, or a value that reads like a
                                    family name is rejected with a `didYouMean`
                                    pointing at the fix (use `set.family` for a
                                    typeface).
                                  type: string
                                sizeScale:
                                  minimum: 0.85
                                  maximum: 0.88
                                  description: >-
                                    Optical scale relative to the surrounding
                                    run. Accepted range is the 0.85–0.88 band;
                                    out-of-range values are rejected
                                  type: number
                                color:
                                  description: >-
                                    Color as `#RGB` or `#RRGGBB`, or `inherit`
                                    to use the inherited color
                                  anyOf:
                                    - pattern: ^#([0-9a-fA-F]{3}|[0-9a-fA-F]{6})$
                                      description: Color as `#RGB` or `#RRGGBB`
                                      type: string
                                    - const: inherit
                                      type: string
                                background:
                                  description: >-
                                    Background fill behind the code run as
                                    `#RGB`/`#RRGGBB`, or `null` to suppress
                                  anyOf:
                                    - pattern: ^#([0-9a-fA-F]{3}|[0-9a-fA-F]{6})$
                                      description: Color as `#RGB` or `#RRGGBB`
                                      type: string
                                    - type: 'null'
                                backgroundPadding:
                                  additionalProperties: false
                                  type: object
                                  properties:
                                    top:
                                      minimum: 0
                                      maximum: 9999
                                      description: Top padding, in points
                                      type: number
                                    right:
                                      minimum: 0
                                      maximum: 9999
                                      description: Right padding, in points
                                      type: number
                                    bottom:
                                      minimum: 0
                                      maximum: 9999
                                      description: Bottom padding, in points
                                      type: number
                                    left:
                                      minimum: 0
                                      maximum: 9999
                                      description: Left padding, in points
                                      type: number
                                    x:
                                      minimum: 0
                                      maximum: 9999
                                      description: >-
                                        Horizontal padding applied to both left
                                        and right when those sides are omitted,
                                        in points
                                      type: number
                                    'y':
                                      minimum: 0
                                      maximum: 9999
                                      description: >-
                                        Vertical padding applied to both top and
                                        bottom when those sides are omitted, in
                                        points
                                      type: number
                                backgroundBorder:
                                  description: >-
                                    Micro-border around each cloned background
                                    segment, or `null` to suppress
                                  anyOf:
                                    - additionalProperties: false
                                      type: object
                                      required:
                                        - width
                                        - color
                                      properties:
                                        width:
                                          minimum: 0.1
                                          maximum: 50
                                          description: Border thickness in points
                                          type: number
                                        color:
                                          pattern: ^#([0-9a-fA-F]{3}|[0-9a-fA-F]{6})$
                                          description: Color as `#RGB` or `#RRGGBB`
                                          type: string
                                        opacity:
                                          minimum: 0
                                          maximum: 1
                                          description: Border opacity from 0 to 1
                                          type: number
                                        dash:
                                          description: >-
                                            Dash pattern as `[dash, gap]` lengths in
                                            points; both `0` is rejected
                                          type: array
                                          items:
                                            minimum: 0
                                            maximum: 1000
                                            type: number
                                          minItems: 2
                                          maxItems: 2
                                    - type: 'null'
                                backgroundRadius:
                                  minimum: 0
                                  maximum: 14400
                                  description: >-
                                    Corner radius for each background segment,
                                    in points
                                  type: number
                                baselineShift:
                                  minimum: -999
                                  maximum: 999
                                  description: >-
                                    PDF text-rise adjustment in points; positive
                                    values raise the code glyphs
                                  type: number
                                opacity:
                                  minimum: 0
                                  maximum: 1
                                  description: Fill opacity from 0 to 1
                                  type: number
                                letterSpacing:
                                  minimum: -100
                                  maximum: 100
                                  description: >-
                                    Extra spacing between code glyphs in points;
                                    negative values tighten
                                  type: number
                topRight:
                  additionalProperties: false
                  type: object
                  required:
                    - content
                  properties:
                    content:
                      minItems: 1
                      maxItems: 16
                      description: Ordered fragments concatenated to fill the slot
                      type: array
                      items:
                        description: >-
                          A header/footer fragment: literal text, an image
                          (logo/letterhead), page numbers, document title,
                          running section title, or section ordinal at a heading
                          depth. An `image` fragment must be the only fragment
                          in its slot — it is not mixed with text fragments.
                        anyOf:
                          - additionalProperties: false
                            type: object
                            required:
                              - kind
                              - value
                            properties:
                              kind:
                                const: text
                                type: string
                              value:
                                minLength: 1
                                maxLength: 256
                                pattern: \S
                                description: Literal text for this fragment
                                type: string
                              style:
                                additionalProperties: false
                                type: object
                                properties:
                                  font:
                                    pattern: ^\S(.*\S)?$
                                    description: >-
                                      Font slot as `<role>.<variant>` — role is
                                      `body`, `heading`, or a custom
                                      `typography.named` role; variant is one of
                                      regular, italic, bold, boldItalic (see
                                      `enums.fontVariant`; e.g. `heading.bold`).
                                      The shape is checked semantically at
                                      validate, not by this pattern: a
                                      misspelled variant, an undeclared role, a
                                      missing `.variant`, or a value that reads
                                      like a family name is rejected with a
                                      `didYouMean` pointing at the fix (use
                                      `set.family` for a typeface).
                                    type: string
                                  size:
                                    minimum: 1
                                    maximum: 999
                                    description: Font size in points
                                    type: number
                                  color:
                                    pattern: ^#([0-9a-fA-F]{3}|[0-9a-fA-F]{6})$
                                    description: Color as `#RGB` or `#RRGGBB`
                                    type: string
                                  opacity:
                                    minimum: 0
                                    maximum: 1
                                    description: Text opacity from 0 to 1
                                    type: number
                          - additionalProperties: false
                            type: object
                            required:
                              - kind
                              - url
                            properties:
                              kind:
                                const: image
                                type: string
                              url:
                                minLength: 1
                                maxLength: 1048576
                                pattern: ^(https://|data:image/)
                                description: >-
                                  HTTPS or base64 `data:image/...` URL of the
                                  header/footer image (typically a brand logo or
                                  letterhead). Fetched under the same fixed,
                                  non-configurable image policy as Markdown
                                  images (private IPs blocked, DNS-rebinding
                                  mitigation, 10 MiB cap); a fetch or decode
                                  failure degrades to a diagnostic and the image
                                  is omitted rather than failing the render.
                                  Rendered as a decorative PDF/UA pagination
                                  artifact (no alt text).
                                type: string
                              width:
                                minimum: 1
                                maximum: 14400
                                description: >-
                                  Rendered image width in PDF points. When
                                  omitted, the intrinsic width is used, clamped
                                  to the slot band width. Set `width` or
                                  `height` to scale a logo down.
                                type: number
                              height:
                                minimum: 1
                                maximum: 14400
                                description: >-
                                  Rendered image height in PDF points. When
                                  omitted, height follows the aspect ratio of
                                  the resolved width.
                                type: number
                              fit:
                                description: >-
                                  Block-only. How the image fills its
                                  width/height box: `none` (intrinsic sizing),
                                  `contain`, `cover`, or `fill`. Used with
                                  `height` for hero-style layouts.
                                anyOf:
                                  - const: none
                                    type: string
                                  - const: contain
                                    type: string
                                  - const: cover
                                    type: string
                                  - const: fill
                                    type: string
                              align:
                                description: >-
                                  Block-only. Horizontal alignment of the image
                                  within the content area: `start` (left edge in
                                  LTR), `center`, or `end` (right edge in LTR).
                                  Ignored for inline images (line flow controls
                                  position).
                                anyOf:
                                  - const: start
                                    type: string
                                  - const: center
                                    type: string
                                  - const: end
                                    type: string
                              opacity:
                                minimum: 0
                                maximum: 1
                                description: Image opacity from 0 to 1.
                                type: number
                          - additionalProperties: false
                            type: object
                            required:
                              - kind
                            properties:
                              kind:
                                const: pageNumber
                                type: string
                              style:
                                additionalProperties: false
                                type: object
                                properties:
                                  font:
                                    pattern: ^\S(.*\S)?$
                                    description: >-
                                      Font slot as `<role>.<variant>` — role is
                                      `body`, `heading`, or a custom
                                      `typography.named` role; variant is one of
                                      regular, italic, bold, boldItalic (see
                                      `enums.fontVariant`; e.g. `heading.bold`).
                                      The shape is checked semantically at
                                      validate, not by this pattern: a
                                      misspelled variant, an undeclared role, a
                                      missing `.variant`, or a value that reads
                                      like a family name is rejected with a
                                      `didYouMean` pointing at the fix (use
                                      `set.family` for a typeface).
                                    type: string
                                  size:
                                    minimum: 1
                                    maximum: 999
                                    description: Font size in points
                                    type: number
                                  color:
                                    pattern: ^#([0-9a-fA-F]{3}|[0-9a-fA-F]{6})$
                                    description: Color as `#RGB` or `#RRGGBB`
                                    type: string
                                  opacity:
                                    minimum: 0
                                    maximum: 1
                                    description: Text opacity from 0 to 1
                                    type: number
                          - additionalProperties: false
                            type: object
                            required:
                              - kind
                            properties:
                              kind:
                                const: totalPages
                                type: string
                              style:
                                additionalProperties: false
                                type: object
                                properties:
                                  font:
                                    pattern: ^\S(.*\S)?$
                                    description: >-
                                      Font slot as `<role>.<variant>` — role is
                                      `body`, `heading`, or a custom
                                      `typography.named` role; variant is one of
                                      regular, italic, bold, boldItalic (see
                                      `enums.fontVariant`; e.g. `heading.bold`).
                                      The shape is checked semantically at
                                      validate, not by this pattern: a
                                      misspelled variant, an undeclared role, a
                                      missing `.variant`, or a value that reads
                                      like a family name is rejected with a
                                      `didYouMean` pointing at the fix (use
                                      `set.family` for a typeface).
                                    type: string
                                  size:
                                    minimum: 1
                                    maximum: 999
                                    description: Font size in points
                                    type: number
                                  color:
                                    pattern: ^#([0-9a-fA-F]{3}|[0-9a-fA-F]{6})$
                                    description: Color as `#RGB` or `#RRGGBB`
                                    type: string
                                  opacity:
                                    minimum: 0
                                    maximum: 1
                                    description: Text opacity from 0 to 1
                                    type: number
                          - additionalProperties: false
                            type: object
                            required:
                              - kind
                            properties:
                              kind:
                                const: documentTitle
                                type: string
                              style:
                                additionalProperties: false
                                type: object
                                properties:
                                  font:
                                    pattern: ^\S(.*\S)?$
                                    description: >-
                                      Font slot as `<role>.<variant>` — role is
                                      `body`, `heading`, or a custom
                                      `typography.named` role; variant is one of
                                      regular, italic, bold, boldItalic (see
                                      `enums.fontVariant`; e.g. `heading.bold`).
                                      The shape is checked semantically at
                                      validate, not by this pattern: a
                                      misspelled variant, an undeclared role, a
                                      missing `.variant`, or a value that reads
                                      like a family name is rejected with a
                                      `didYouMean` pointing at the fix (use
                                      `set.family` for a typeface).
                                    type: string
                                  size:
                                    minimum: 1
                                    maximum: 999
                                    description: Font size in points
                                    type: number
                                  color:
                                    pattern: ^#([0-9a-fA-F]{3}|[0-9a-fA-F]{6})$
                                    description: Color as `#RGB` or `#RRGGBB`
                                    type: string
                                  opacity:
                                    minimum: 0
                                    maximum: 1
                                    description: Text opacity from 0 to 1
                                    type: number
                          - additionalProperties: false
                            type: object
                            required:
                              - kind
                            properties:
                              kind:
                                const: sectionTitle
                                type: string
                              depth:
                                description: Heading depth from 1 (top level) to 6
                                anyOf:
                                  - const: 1
                                    type: number
                                  - const: 2
                                    type: number
                                  - const: 3
                                    type: number
                                  - const: 4
                                    type: number
                                  - const: 5
                                    type: number
                                  - const: 6
                                    type: number
                              style:
                                additionalProperties: false
                                type: object
                                properties:
                                  font:
                                    pattern: ^\S(.*\S)?$
                                    description: >-
                                      Font slot as `<role>.<variant>` — role is
                                      `body`, `heading`, or a custom
                                      `typography.named` role; variant is one of
                                      regular, italic, bold, boldItalic (see
                                      `enums.fontVariant`; e.g. `heading.bold`).
                                      The shape is checked semantically at
                                      validate, not by this pattern: a
                                      misspelled variant, an undeclared role, a
                                      missing `.variant`, or a value that reads
                                      like a family name is rejected with a
                                      `didYouMean` pointing at the fix (use
                                      `set.family` for a typeface).
                                    type: string
                                  size:
                                    minimum: 1
                                    maximum: 999
                                    description: Font size in points
                                    type: number
                                  color:
                                    pattern: ^#([0-9a-fA-F]{3}|[0-9a-fA-F]{6})$
                                    description: Color as `#RGB` or `#RRGGBB`
                                    type: string
                                  opacity:
                                    minimum: 0
                                    maximum: 1
                                    description: Text opacity from 0 to 1
                                    type: number
                          - additionalProperties: false
                            type: object
                            required:
                              - kind
                            properties:
                              kind:
                                const: sectionIndex
                                type: string
                              depth:
                                description: Heading depth from 1 (top level) to 6
                                anyOf:
                                  - const: 1
                                    type: number
                                  - const: 2
                                    type: number
                                  - const: 3
                                    type: number
                                  - const: 4
                                    type: number
                                  - const: 5
                                    type: number
                                  - const: 6
                                    type: number
                              format:
                                description: >-
                                  Section ordinal format: `twoDigit` (at least
                                  two digits: 01, 12; ordinals ≥ 100 render in
                                  full) or `decimal` (1, 2, …)
                                anyOf:
                                  - const: twoDigit
                                    type: string
                                  - const: decimal
                                    type: string
                              style:
                                additionalProperties: false
                                type: object
                                properties:
                                  font:
                                    pattern: ^\S(.*\S)?$
                                    description: >-
                                      Font slot as `<role>.<variant>` — role is
                                      `body`, `heading`, or a custom
                                      `typography.named` role; variant is one of
                                      regular, italic, bold, boldItalic (see
                                      `enums.fontVariant`; e.g. `heading.bold`).
                                      The shape is checked semantically at
                                      validate, not by this pattern: a
                                      misspelled variant, an undeclared role, a
                                      missing `.variant`, or a value that reads
                                      like a family name is rejected with a
                                      `didYouMean` pointing at the fix (use
                                      `set.family` for a typeface).
                                    type: string
                                  size:
                                    minimum: 1
                                    maximum: 999
                                    description: Font size in points
                                    type: number
                                  color:
                                    pattern: ^#([0-9a-fA-F]{3}|[0-9a-fA-F]{6})$
                                    description: Color as `#RGB` or `#RRGGBB`
                                    type: string
                                  opacity:
                                    minimum: 0
                                    maximum: 1
                                    description: Text opacity from 0 to 1
                                    type: number
                    style:
                      additionalProperties: false
                      type: object
                      properties:
                        font:
                          pattern: ^\S(.*\S)?$
                          description: >-
                            Font slot as `<role>.<variant>` — role is `body`,
                            `heading`, or a custom `typography.named` role;
                            variant is one of regular, italic, bold, boldItalic
                            (see `enums.fontVariant`; e.g. `heading.bold`). The
                            shape is checked semantically at validate, not by
                            this pattern: a misspelled variant, an undeclared
                            role, a missing `.variant`, or a value that reads
                            like a family name is rejected with a `didYouMean`
                            pointing at the fix (use `set.family` for a
                            typeface).
                          type: string
                        family:
                          description: >-
                            A text family: a hosted weighted key, a declared
                            Google Fonts display name, or a `typography.named`
                            role reference
                          anyOf:
                            - const: inter
                              type: string
                            - const: lora
                              type: string
                            - const: source-serif-4
                              type: string
                            - pattern: ^[A-Za-z][A-Za-z0-9 ]{0,63}$
                              description: >-
                                Google Fonts display name from the declared pool
                                (e.g. `Playfair Display`)
                              type: string
                            - pattern: ^[a-z][a-z0-9-]{0,15}$
                              description: >-
                                Reference to a custom role declared in
                                `typography.named` (e.g. `display`)
                              type: string
                        size:
                          minimum: 1
                          maximum: 999
                          description: Font size in points
                          type: number
                        color:
                          pattern: ^#([0-9a-fA-F]{3}|[0-9a-fA-F]{6})$
                          description: Color as `#RGB` or `#RRGGBB`
                          type: string
                        spaceBefore:
                          minimum: 0
                          maximum: 9999
                          description: Vertical space reserved above the block, in points
                          type: number
                        spaceAfter:
                          minimum: 0
                          maximum: 9999
                          description: Vertical space reserved below the block, in points
                          type: number
                        lineHeight:
                          minimum: 1
                          maximum: 10
                          description: Line height as a multiple of the font size
                          type: number
                        align:
                          type: string
                          enum:
                            - left
                            - right
                            - center
                            - justify
                        letterSpacing:
                          minimum: -100
                          maximum: 100
                          description: >-
                            Extra spacing between characters in points; negative
                            values tighten
                          type: number
                        opacity:
                          minimum: 0
                          maximum: 1
                          description: Text opacity from 0 to 1
                          type: number
                        inline:
                          additionalProperties: false
                          type: object
                          properties:
                            strong:
                              additionalProperties: false
                              type: object
                              properties:
                                color:
                                  description: >-
                                    Color as `#RGB` or `#RRGGBB`, or `inherit`
                                    to use the inherited color
                                  anyOf:
                                    - pattern: ^#([0-9a-fA-F]{3}|[0-9a-fA-F]{6})$
                                      description: Color as `#RGB` or `#RRGGBB`
                                      type: string
                                    - const: inherit
                                      type: string
                            emphasis:
                              additionalProperties: false
                              type: object
                              properties:
                                color:
                                  description: >-
                                    Color as `#RGB` or `#RRGGBB`, or `inherit`
                                    to use the inherited color
                                  anyOf:
                                    - pattern: ^#([0-9a-fA-F]{3}|[0-9a-fA-F]{6})$
                                      description: Color as `#RGB` or `#RRGGBB`
                                      type: string
                                    - const: inherit
                                      type: string
                            delete:
                              additionalProperties: false
                              type: object
                              properties:
                                color:
                                  description: >-
                                    Color as `#RGB` or `#RRGGBB`, or `inherit`
                                    to use the inherited color
                                  anyOf:
                                    - pattern: ^#([0-9a-fA-F]{3}|[0-9a-fA-F]{6})$
                                      description: Color as `#RGB` or `#RRGGBB`
                                      type: string
                                    - const: inherit
                                      type: string
                                decorationStyle:
                                  type: string
                                  enum:
                                    - solid
                                    - double
                                    - dotted
                                    - dashed
                                    - wavy
                                decorationColor:
                                  description: >-
                                    Color as `#RGB` or `#RRGGBB`, or `inherit`
                                    to use the inherited color
                                  anyOf:
                                    - pattern: ^#([0-9a-fA-F]{3}|[0-9a-fA-F]{6})$
                                      description: Color as `#RGB` or `#RRGGBB`
                                      type: string
                                    - const: inherit
                                      type: string
                            mark:
                              additionalProperties: false
                              type: object
                              properties:
                                color:
                                  description: >-
                                    Color as `#RGB` or `#RRGGBB`, or `inherit`
                                    to use the inherited color
                                  anyOf:
                                    - pattern: ^#([0-9a-fA-F]{3}|[0-9a-fA-F]{6})$
                                      description: Color as `#RGB` or `#RRGGBB`
                                      type: string
                                    - const: inherit
                                      type: string
                                background:
                                  description: >-
                                    Background fill behind highlighted text as
                                    `#RGB`/`#RRGGBB`, or `null` to suppress
                                  anyOf:
                                    - pattern: ^#([0-9a-fA-F]{3}|[0-9a-fA-F]{6})$
                                      description: Color as `#RGB` or `#RRGGBB`
                                      type: string
                                    - type: 'null'
                                backgroundPadding:
                                  additionalProperties: false
                                  type: object
                                  properties:
                                    top:
                                      minimum: 0
                                      maximum: 9999
                                      description: Top padding, in points
                                      type: number
                                    right:
                                      minimum: 0
                                      maximum: 9999
                                      description: Right padding, in points
                                      type: number
                                    bottom:
                                      minimum: 0
                                      maximum: 9999
                                      description: Bottom padding, in points
                                      type: number
                                    left:
                                      minimum: 0
                                      maximum: 9999
                                      description: Left padding, in points
                                      type: number
                                    x:
                                      minimum: 0
                                      maximum: 9999
                                      description: >-
                                        Horizontal padding applied to both left
                                        and right when those sides are omitted,
                                        in points
                                      type: number
                                    'y':
                                      minimum: 0
                                      maximum: 9999
                                      description: >-
                                        Vertical padding applied to both top and
                                        bottom when those sides are omitted, in
                                        points
                                      type: number
                                backgroundRadius:
                                  minimum: 0
                                  maximum: 14400
                                  description: >-
                                    Corner radius for each highlight background
                                    segment, in points
                                  type: number
                            subscript:
                              additionalProperties: false
                              type: object
                              properties:
                                color:
                                  description: >-
                                    Color as `#RGB` or `#RRGGBB`, or `inherit`
                                    to use the inherited color
                                  anyOf:
                                    - pattern: ^#([0-9a-fA-F]{3}|[0-9a-fA-F]{6})$
                                      description: Color as `#RGB` or `#RRGGBB`
                                      type: string
                                    - const: inherit
                                      type: string
                                sizeScale:
                                  minimum: 0.4
                                  maximum: 1
                                  description: >-
                                    Optical scale relative to the surrounding
                                    run (fraction of base size)
                                  type: number
                                riseFraction:
                                  minimum: 0
                                  maximum: 1
                                  description: >-
                                    Baseline offset as a fraction of base size
                                    (not PDF points — contrast with code
                                    `baselineShift`). The renderer applies the
                                    sign (up for superscript, down for
                                    subscript)
                                  type: number
                            superscript:
                              additionalProperties: false
                              type: object
                              properties:
                                color:
                                  description: >-
                                    Color as `#RGB` or `#RRGGBB`, or `inherit`
                                    to use the inherited color
                                  anyOf:
                                    - pattern: ^#([0-9a-fA-F]{3}|[0-9a-fA-F]{6})$
                                      description: Color as `#RGB` or `#RRGGBB`
                                      type: string
                                    - const: inherit
                                      type: string
                                sizeScale:
                                  minimum: 0.4
                                  maximum: 1
                                  description: >-
                                    Optical scale relative to the surrounding
                                    run (fraction of base size)
                                  type: number
                                riseFraction:
                                  minimum: 0
                                  maximum: 1
                                  description: >-
                                    Baseline offset as a fraction of base size
                                    (not PDF points — contrast with code
                                    `baselineShift`). The renderer applies the
                                    sign (up for superscript, down for
                                    subscript)
                                  type: number
                            link:
                              additionalProperties: false
                              type: object
                              properties:
                                color:
                                  description: >-
                                    Color as `#RGB` or `#RRGGBB`, or `inherit`
                                    to use the inherited color
                                  anyOf:
                                    - pattern: ^#([0-9a-fA-F]{3}|[0-9a-fA-F]{6})$
                                      description: Color as `#RGB` or `#RRGGBB`
                                      type: string
                                    - const: inherit
                                      type: string
                                decoration:
                                  type: string
                                  enum:
                                    - underline
                                    - lineThrough
                                    - none
                                decorationStyle:
                                  type: string
                                  enum:
                                    - solid
                                    - double
                                    - dotted
                                    - dashed
                                    - wavy
                                decorationColor:
                                  description: >-
                                    Color as `#RGB` or `#RRGGBB`, or `inherit`
                                    to use the inherited color
                                  anyOf:
                                    - pattern: ^#([0-9a-fA-F]{3}|[0-9a-fA-F]{6})$
                                      description: Color as `#RGB` or `#RRGGBB`
                                      type: string
                                    - const: inherit
                                      type: string
                            code:
                              additionalProperties: false
                              description: >-
                                Style overrides for inline code spans (`` `code`
                                ``): font, optical size scale, text color,
                                background fill/padding/border/radius, baseline
                                shift, opacity, and letter spacing. Pass
                                `background: null` or `backgroundBorder: null`
                                to suppress those.
                              type: object
                              properties:
                                font:
                                  pattern: ^\S(.*\S)?$
                                  description: >-
                                    Font slot as `<role>.<variant>` — role is
                                    `body`, `heading`, or a custom
                                    `typography.named` role; variant is one of
                                    regular, italic, bold, boldItalic (see
                                    `enums.fontVariant`; e.g. `heading.bold`).
                                    The shape is checked semantically at
                                    validate, not by this pattern: a misspelled
                                    variant, an undeclared role, a missing
                                    `.variant`, or a value that reads like a
                                    family name is rejected with a `didYouMean`
                                    pointing at the fix (use `set.family` for a
                                    typeface).
                                  type: string
                                sizeScale:
                                  minimum: 0.85
                                  maximum: 0.88
                                  description: >-
                                    Optical scale relative to the surrounding
                                    run. Accepted range is the 0.85–0.88 band;
                                    out-of-range values are rejected
                                  type: number
                                color:
                                  description: >-
                                    Color as `#RGB` or `#RRGGBB`, or `inherit`
                                    to use the inherited color
                                  anyOf:
                                    - pattern: ^#([0-9a-fA-F]{3}|[0-9a-fA-F]{6})$
                                      description: Color as `#RGB` or `#RRGGBB`
                                      type: string
                                    - const: inherit
                                      type: string
                                background:
                                  description: >-
                                    Background fill behind the code run as
                                    `#RGB`/`#RRGGBB`, or `null` to suppress
                                  anyOf:
                                    - pattern: ^#([0-9a-fA-F]{3}|[0-9a-fA-F]{6})$
                                      description: Color as `#RGB` or `#RRGGBB`
                                      type: string
                                    - type: 'null'
                                backgroundPadding:
                                  additionalProperties: false
                                  type: object
                                  properties:
                                    top:
                                      minimum: 0
                                      maximum: 9999
                                      description: Top padding, in points
                                      type: number
                                    right:
                                      minimum: 0
                                      maximum: 9999
                                      description: Right padding, in points
                                      type: number
                                    bottom:
                                      minimum: 0
                                      maximum: 9999
                                      description: Bottom padding, in points
                                      type: number
                                    left:
                                      minimum: 0
                                      maximum: 9999
                                      description: Left padding, in points
                                      type: number
                                    x:
                                      minimum: 0
                                      maximum: 9999
                                      description: >-
                                        Horizontal padding applied to both left
                                        and right when those sides are omitted,
                                        in points
                                      type: number
                                    'y':
                                      minimum: 0
                                      maximum: 9999
                                      description: >-
                                        Vertical padding applied to both top and
                                        bottom when those sides are omitted, in
                                        points
                                      type: number
                                backgroundBorder:
                                  description: >-
                                    Micro-border around each cloned background
                                    segment, or `null` to suppress
                                  anyOf:
                                    - additionalProperties: false
                                      type: object
                                      required:
                                        - width
                                        - color
                                      properties:
                                        width:
                                          minimum: 0.1
                                          maximum: 50
                                          description: Border thickness in points
                                          type: number
                                        color:
                                          pattern: ^#([0-9a-fA-F]{3}|[0-9a-fA-F]{6})$
                                          description: Color as `#RGB` or `#RRGGBB`
                                          type: string
                                        opacity:
                                          minimum: 0
                                          maximum: 1
                                          description: Border opacity from 0 to 1
                                          type: number
                                        dash:
                                          description: >-
                                            Dash pattern as `[dash, gap]` lengths in
                                            points; both `0` is rejected
                                          type: array
                                          items:
                                            minimum: 0
                                            maximum: 1000
                                            type: number
                                          minItems: 2
                                          maxItems: 2
                                    - type: 'null'
                                backgroundRadius:
                                  minimum: 0
                                  maximum: 14400
                                  description: >-
                                    Corner radius for each background segment,
                                    in points
                                  type: number
                                baselineShift:
                                  minimum: -999
                                  maximum: 999
                                  description: >-
                                    PDF text-rise adjustment in points; positive
                                    values raise the code glyphs
                                  type: number
                                opacity:
                                  minimum: 0
                                  maximum: 1
                                  description: Fill opacity from 0 to 1
                                  type: number
                                letterSpacing:
                                  minimum: -100
                                  maximum: 100
                                  description: >-
                                    Extra spacing between code glyphs in points;
                                    negative values tighten
                                  type: number
                bottomLeft:
                  additionalProperties: false
                  type: object
                  required:
                    - content
                  properties:
                    content:
                      minItems: 1
                      maxItems: 16
                      description: Ordered fragments concatenated to fill the slot
                      type: array
                      items:
                        description: >-
                          A header/footer fragment: literal text, an image
                          (logo/letterhead), page numbers, document title,
                          running section title, or section ordinal at a heading
                          depth. An `image` fragment must be the only fragment
                          in its slot — it is not mixed with text fragments.
                        anyOf:
                          - additionalProperties: false
                            type: object
                            required:
                              - kind
                              - value
                            properties:
                              kind:
                                const: text
                                type: string
                              value:
                                minLength: 1
                                maxLength: 256
                                pattern: \S
                                description: Literal text for this fragment
                                type: string
                              style:
                                additionalProperties: false
                                type: object
                                properties:
                                  font:
                                    pattern: ^\S(.*\S)?$
                                    description: >-
                                      Font slot as `<role>.<variant>` — role is
                                      `body`, `heading`, or a custom
                                      `typography.named` role; variant is one of
                                      regular, italic, bold, boldItalic (see
                                      `enums.fontVariant`; e.g. `heading.bold`).
                                      The shape is checked semantically at
                                      validate, not by this pattern: a
                                      misspelled variant, an undeclared role, a
                                      missing `.variant`, or a value that reads
                                      like a family name is rejected with a
                                      `didYouMean` pointing at the fix (use
                                      `set.family` for a typeface).
                                    type: string
                                  size:
                                    minimum: 1
                                    maximum: 999
                                    description: Font size in points
                                    type: number
                                  color:
                                    pattern: ^#([0-9a-fA-F]{3}|[0-9a-fA-F]{6})$
                                    description: Color as `#RGB` or `#RRGGBB`
                                    type: string
                                  opacity:
                                    minimum: 0
                                    maximum: 1
                                    description: Text opacity from 0 to 1
                                    type: number
                          - additionalProperties: false
                            type: object
                            required:
                              - kind
                              - url
                            properties:
                              kind:
                                const: image
                                type: string
                              url:
                                minLength: 1
                                maxLength: 1048576
                                pattern: ^(https://|data:image/)
                                description: >-
                                  HTTPS or base64 `data:image/...` URL of the
                                  header/footer image (typically a brand logo or
                                  letterhead). Fetched under the same fixed,
                                  non-configurable image policy as Markdown
                                  images (private IPs blocked, DNS-rebinding
                                  mitigation, 10 MiB cap); a fetch or decode
                                  failure degrades to a diagnostic and the image
                                  is omitted rather than failing the render.
                                  Rendered as a decorative PDF/UA pagination
                                  artifact (no alt text).
                                type: string
                              width:
                                minimum: 1
                                maximum: 14400
                                description: >-
                                  Rendered image width in PDF points. When
                                  omitted, the intrinsic width is used, clamped
                                  to the slot band width. Set `width` or
                                  `height` to scale a logo down.
                                type: number
                              height:
                                minimum: 1
                                maximum: 14400
                                description: >-
                                  Rendered image height in PDF points. When
                                  omitted, height follows the aspect ratio of
                                  the resolved width.
                                type: number
                              fit:
                                description: >-
                                  Block-only. How the image fills its
                                  width/height box: `none` (intrinsic sizing),
                                  `contain`, `cover`, or `fill`. Used with
                                  `height` for hero-style layouts.
                                anyOf:
                                  - const: none
                                    type: string
                                  - const: contain
                                    type: string
                                  - const: cover
                                    type: string
                                  - const: fill
                                    type: string
                              align:
                                description: >-
                                  Block-only. Horizontal alignment of the image
                                  within the content area: `start` (left edge in
                                  LTR), `center`, or `end` (right edge in LTR).
                                  Ignored for inline images (line flow controls
                                  position).
                                anyOf:
                                  - const: start
                                    type: string
                                  - const: center
                                    type: string
                                  - const: end
                                    type: string
                              opacity:
                                minimum: 0
                                maximum: 1
                                description: Image opacity from 0 to 1.
                                type: number
                          - additionalProperties: false
                            type: object
                            required:
                              - kind
                            properties:
                              kind:
                                const: pageNumber
                                type: string
                              style:
                                additionalProperties: false
                                type: object
                                properties:
                                  font:
                                    pattern: ^\S(.*\S)?$
                                    description: >-
                                      Font slot as `<role>.<variant>` — role is
                                      `body`, `heading`, or a custom
                                      `typography.named` role; variant is one of
                                      regular, italic, bold, boldItalic (see
                                      `enums.fontVariant`; e.g. `heading.bold`).
                                      The shape is checked semantically at
                                      validate, not by this pattern: a
                                      misspelled variant, an undeclared role, a
                                      missing `.variant`, or a value that reads
                                      like a family name is rejected with a
                                      `didYouMean` pointing at the fix (use
                                      `set.family` for a typeface).
                                    type: string
                                  size:
                                    minimum: 1
                                    maximum: 999
                                    description: Font size in points
                                    type: number
                                  color:
                                    pattern: ^#([0-9a-fA-F]{3}|[0-9a-fA-F]{6})$
                                    description: Color as `#RGB` or `#RRGGBB`
                                    type: string
                                  opacity:
                                    minimum: 0
                                    maximum: 1
                                    description: Text opacity from 0 to 1
                                    type: number
                          - additionalProperties: false
                            type: object
                            required:
                              - kind
                            properties:
                              kind:
                                const: totalPages
                                type: string
                              style:
                                additionalProperties: false
                                type: object
                                properties:
                                  font:
                                    pattern: ^\S(.*\S)?$
                                    description: >-
                                      Font slot as `<role>.<variant>` — role is
                                      `body`, `heading`, or a custom
                                      `typography.named` role; variant is one of
                                      regular, italic, bold, boldItalic (see
                                      `enums.fontVariant`; e.g. `heading.bold`).
                                      The shape is checked semantically at
                                      validate, not by this pattern: a
                                      misspelled variant, an undeclared role, a
                                      missing `.variant`, or a value that reads
                                      like a family name is rejected with a
                                      `didYouMean` pointing at the fix (use
                                      `set.family` for a typeface).
                                    type: string
                                  size:
                                    minimum: 1
                                    maximum: 999
                                    description: Font size in points
                                    type: number
                                  color:
                                    pattern: ^#([0-9a-fA-F]{3}|[0-9a-fA-F]{6})$
                                    description: Color as `#RGB` or `#RRGGBB`
                                    type: string
                                  opacity:
                                    minimum: 0
                                    maximum: 1
                                    description: Text opacity from 0 to 1
                                    type: number
                          - additionalProperties: false
                            type: object
                            required:
                              - kind
                            properties:
                              kind:
                                const: documentTitle
                                type: string
                              style:
                                additionalProperties: false
                                type: object
                                properties:
                                  font:
                                    pattern: ^\S(.*\S)?$
                                    description: >-
                                      Font slot as `<role>.<variant>` — role is
                                      `body`, `heading`, or a custom
                                      `typography.named` role; variant is one of
                                      regular, italic, bold, boldItalic (see
                                      `enums.fontVariant`; e.g. `heading.bold`).
                                      The shape is checked semantically at
                                      validate, not by this pattern: a
                                      misspelled variant, an undeclared role, a
                                      missing `.variant`, or a value that reads
                                      like a family name is rejected with a
                                      `didYouMean` pointing at the fix (use
                                      `set.family` for a typeface).
                                    type: string
                                  size:
                                    minimum: 1
                                    maximum: 999
                                    description: Font size in points
                                    type: number
                                  color:
                                    pattern: ^#([0-9a-fA-F]{3}|[0-9a-fA-F]{6})$
                                    description: Color as `#RGB` or `#RRGGBB`
                                    type: string
                                  opacity:
                                    minimum: 0
                                    maximum: 1
                                    description: Text opacity from 0 to 1
                                    type: number
                          - additionalProperties: false
                            type: object
                            required:
                              - kind
                            properties:
                              kind:
                                const: sectionTitle
                                type: string
                              depth:
                                description: Heading depth from 1 (top level) to 6
                                anyOf:
                                  - const: 1
                                    type: number
                                  - const: 2
                                    type: number
                                  - const: 3
                                    type: number
                                  - const: 4
                                    type: number
                                  - const: 5
                                    type: number
                                  - const: 6
                                    type: number
                              style:
                                additionalProperties: false
                                type: object
                                properties:
                                  font:
                                    pattern: ^\S(.*\S)?$
                                    description: >-
                                      Font slot as `<role>.<variant>` — role is
                                      `body`, `heading`, or a custom
                                      `typography.named` role; variant is one of
                                      regular, italic, bold, boldItalic (see
                                      `enums.fontVariant`; e.g. `heading.bold`).
                                      The shape is checked semantically at
                                      validate, not by this pattern: a
                                      misspelled variant, an undeclared role, a
                                      missing `.variant`, or a value that reads
                                      like a family name is rejected with a
                                      `didYouMean` pointing at the fix (use
                                      `set.family` for a typeface).
                                    type: string
                                  size:
                                    minimum: 1
                                    maximum: 999
                                    description: Font size in points
                                    type: number
                                  color:
                                    pattern: ^#([0-9a-fA-F]{3}|[0-9a-fA-F]{6})$
                                    description: Color as `#RGB` or `#RRGGBB`
                                    type: string
                                  opacity:
                                    minimum: 0
                                    maximum: 1
                                    description: Text opacity from 0 to 1
                                    type: number
                          - additionalProperties: false
                            type: object
                            required:
                              - kind
                            properties:
                              kind:
                                const: sectionIndex
                                type: string
                              depth:
                                description: Heading depth from 1 (top level) to 6
                                anyOf:
                                  - const: 1
                                    type: number
                                  - const: 2
                                    type: number
                                  - const: 3
                                    type: number
                                  - const: 4
                                    type: number
                                  - const: 5
                                    type: number
                                  - const: 6
                                    type: number
                              format:
                                description: >-
                                  Section ordinal format: `twoDigit` (at least
                                  two digits: 01, 12; ordinals ≥ 100 render in
                                  full) or `decimal` (1, 2, …)
                                anyOf:
                                  - const: twoDigit
                                    type: string
                                  - const: decimal
                                    type: string
                              style:
                                additionalProperties: false
                                type: object
                                properties:
                                  font:
                                    pattern: ^\S(.*\S)?$
                                    description: >-
                                      Font slot as `<role>.<variant>` — role is
                                      `body`, `heading`, or a custom
                                      `typography.named` role; variant is one of
                                      regular, italic, bold, boldItalic (see
                                      `enums.fontVariant`; e.g. `heading.bold`).
                                      The shape is checked semantically at
                                      validate, not by this pattern: a
                                      misspelled variant, an undeclared role, a
                                      missing `.variant`, or a value that reads
                                      like a family name is rejected with a
                                      `didYouMean` pointing at the fix (use
                                      `set.family` for a typeface).
                                    type: string
                                  size:
                                    minimum: 1
                                    maximum: 999
                                    description: Font size in points
                                    type: number
                                  color:
                                    pattern: ^#([0-9a-fA-F]{3}|[0-9a-fA-F]{6})$
                                    description: Color as `#RGB` or `#RRGGBB`
                                    type: string
                                  opacity:
                                    minimum: 0
                                    maximum: 1
                                    description: Text opacity from 0 to 1
                                    type: number
                    style:
                      additionalProperties: false
                      type: object
                      properties:
                        font:
                          pattern: ^\S(.*\S)?$
                          description: >-
                            Font slot as `<role>.<variant>` — role is `body`,
                            `heading`, or a custom `typography.named` role;
                            variant is one of regular, italic, bold, boldItalic
                            (see `enums.fontVariant`; e.g. `heading.bold`). The
                            shape is checked semantically at validate, not by
                            this pattern: a misspelled variant, an undeclared
                            role, a missing `.variant`, or a value that reads
                            like a family name is rejected with a `didYouMean`
                            pointing at the fix (use `set.family` for a
                            typeface).
                          type: string
                        family:
                          description: >-
                            A text family: a hosted weighted key, a declared
                            Google Fonts display name, or a `typography.named`
                            role reference
                          anyOf:
                            - const: inter
                              type: string
                            - const: lora
                              type: string
                            - const: source-serif-4
                              type: string
                            - pattern: ^[A-Za-z][A-Za-z0-9 ]{0,63}$
                              description: >-
                                Google Fonts display name from the declared pool
                                (e.g. `Playfair Display`)
                              type: string
                            - pattern: ^[a-z][a-z0-9-]{0,15}$
                              description: >-
                                Reference to a custom role declared in
                                `typography.named` (e.g. `display`)
                              type: string
                        size:
                          minimum: 1
                          maximum: 999
                          description: Font size in points
                          type: number
                        color:
                          pattern: ^#([0-9a-fA-F]{3}|[0-9a-fA-F]{6})$
                          description: Color as `#RGB` or `#RRGGBB`
                          type: string
                        spaceBefore:
                          minimum: 0
                          maximum: 9999
                          description: Vertical space reserved above the block, in points
                          type: number
                        spaceAfter:
                          minimum: 0
                          maximum: 9999
                          description: Vertical space reserved below the block, in points
                          type: number
                        lineHeight:
                          minimum: 1
                          maximum: 10
                          description: Line height as a multiple of the font size
                          type: number
                        align:
                          type: string
                          enum:
                            - left
                            - right
                            - center
                            - justify
                        letterSpacing:
                          minimum: -100
                          maximum: 100
                          description: >-
                            Extra spacing between characters in points; negative
                            values tighten
                          type: number
                        opacity:
                          minimum: 0
                          maximum: 1
                          description: Text opacity from 0 to 1
                          type: number
                        inline:
                          additionalProperties: false
                          type: object
                          properties:
                            strong:
                              additionalProperties: false
                              type: object
                              properties:
                                color:
                                  description: >-
                                    Color as `#RGB` or `#RRGGBB`, or `inherit`
                                    to use the inherited color
                                  anyOf:
                                    - pattern: ^#([0-9a-fA-F]{3}|[0-9a-fA-F]{6})$
                                      description: Color as `#RGB` or `#RRGGBB`
                                      type: string
                                    - const: inherit
                                      type: string
                            emphasis:
                              additionalProperties: false
                              type: object
                              properties:
                                color:
                                  description: >-
                                    Color as `#RGB` or `#RRGGBB`, or `inherit`
                                    to use the inherited color
                                  anyOf:
                                    - pattern: ^#([0-9a-fA-F]{3}|[0-9a-fA-F]{6})$
                                      description: Color as `#RGB` or `#RRGGBB`
                                      type: string
                                    - const: inherit
                                      type: string
                            delete:
                              additionalProperties: false
                              type: object
                              properties:
                                color:
                                  description: >-
                                    Color as `#RGB` or `#RRGGBB`, or `inherit`
                                    to use the inherited color
                                  anyOf:
                                    - pattern: ^#([0-9a-fA-F]{3}|[0-9a-fA-F]{6})$
                                      description: Color as `#RGB` or `#RRGGBB`
                                      type: string
                                    - const: inherit
                                      type: string
                                decorationStyle:
                                  type: string
                                  enum:
                                    - solid
                                    - double
                                    - dotted
                                    - dashed
                                    - wavy
                                decorationColor:
                                  description: >-
                                    Color as `#RGB` or `#RRGGBB`, or `inherit`
                                    to use the inherited color
                                  anyOf:
                                    - pattern: ^#([0-9a-fA-F]{3}|[0-9a-fA-F]{6})$
                                      description: Color as `#RGB` or `#RRGGBB`
                                      type: string
                                    - const: inherit
                                      type: string
                            mark:
                              additionalProperties: false
                              type: object
                              properties:
                                color:
                                  description: >-
                                    Color as `#RGB` or `#RRGGBB`, or `inherit`
                                    to use the inherited color
                                  anyOf:
                                    - pattern: ^#([0-9a-fA-F]{3}|[0-9a-fA-F]{6})$
                                      description: Color as `#RGB` or `#RRGGBB`
                                      type: string
                                    - const: inherit
                                      type: string
                                background:
                                  description: >-
                                    Background fill behind highlighted text as
                                    `#RGB`/`#RRGGBB`, or `null` to suppress
                                  anyOf:
                                    - pattern: ^#([0-9a-fA-F]{3}|[0-9a-fA-F]{6})$
                                      description: Color as `#RGB` or `#RRGGBB`
                                      type: string
                                    - type: 'null'
                                backgroundPadding:
                                  additionalProperties: false
                                  type: object
                                  properties:
                                    top:
                                      minimum: 0
                                      maximum: 9999
                                      description: Top padding, in points
                                      type: number
                                    right:
                                      minimum: 0
                                      maximum: 9999
                                      description: Right padding, in points
                                      type: number
                                    bottom:
                                      minimum: 0
                                      maximum: 9999
                                      description: Bottom padding, in points
                                      type: number
                                    left:
                                      minimum: 0
                                      maximum: 9999
                                      description: Left padding, in points
                                      type: number
                                    x:
                                      minimum: 0
                                      maximum: 9999
                                      description: >-
                                        Horizontal padding applied to both left
                                        and right when those sides are omitted,
                                        in points
                                      type: number
                                    'y':
                                      minimum: 0
                                      maximum: 9999
                                      description: >-
                                        Vertical padding applied to both top and
                                        bottom when those sides are omitted, in
                                        points
                                      type: number
                                backgroundRadius:
                                  minimum: 0
                                  maximum: 14400
                                  description: >-
                                    Corner radius for each highlight background
                                    segment, in points
                                  type: number
                            subscript:
                              additionalProperties: false
                              type: object
                              properties:
                                color:
                                  description: >-
                                    Color as `#RGB` or `#RRGGBB`, or `inherit`
                                    to use the inherited color
                                  anyOf:
                                    - pattern: ^#([0-9a-fA-F]{3}|[0-9a-fA-F]{6})$
                                      description: Color as `#RGB` or `#RRGGBB`
                                      type: string
                                    - const: inherit
                                      type: string
                                sizeScale:
                                  minimum: 0.4
                                  maximum: 1
                                  description: >-
                                    Optical scale relative to the surrounding
                                    run (fraction of base size)
                                  type: number
                                riseFraction:
                                  minimum: 0
                                  maximum: 1
                                  description: >-
                                    Baseline offset as a fraction of base size
                                    (not PDF points — contrast with code
                                    `baselineShift`). The renderer applies the
                                    sign (up for superscript, down for
                                    subscript)
                                  type: number
                            superscript:
                              additionalProperties: false
                              type: object
                              properties:
                                color:
                                  description: >-
                                    Color as `#RGB` or `#RRGGBB`, or `inherit`
                                    to use the inherited color
                                  anyOf:
                                    - pattern: ^#([0-9a-fA-F]{3}|[0-9a-fA-F]{6})$
                                      description: Color as `#RGB` or `#RRGGBB`
                                      type: string
                                    - const: inherit
                                      type: string
                                sizeScale:
                                  minimum: 0.4
                                  maximum: 1
                                  description: >-
                                    Optical scale relative to the surrounding
                                    run (fraction of base size)
                                  type: number
                                riseFraction:
                                  minimum: 0
                                  maximum: 1
                                  description: >-
                                    Baseline offset as a fraction of base size
                                    (not PDF points — contrast with code
                                    `baselineShift`). The renderer applies the
                                    sign (up for superscript, down for
                                    subscript)
                                  type: number
                            link:
                              additionalProperties: false
                              type: object
                              properties:
                                color:
                                  description: >-
                                    Color as `#RGB` or `#RRGGBB`, or `inherit`
                                    to use the inherited color
                                  anyOf:
                                    - pattern: ^#([0-9a-fA-F]{3}|[0-9a-fA-F]{6})$
                                      description: Color as `#RGB` or `#RRGGBB`
                                      type: string
                                    - const: inherit
                                      type: string
                                decoration:
                                  type: string
                                  enum:
                                    - underline
                                    - lineThrough
                                    - none
                                decorationStyle:
                                  type: string
                                  enum:
                                    - solid
                                    - double
                                    - dotted
                                    - dashed
                                    - wavy
                                decorationColor:
                                  description: >-
                                    Color as `#RGB` or `#RRGGBB`, or `inherit`
                                    to use the inherited color
                                  anyOf:
                                    - pattern: ^#([0-9a-fA-F]{3}|[0-9a-fA-F]{6})$
                                      description: Color as `#RGB` or `#RRGGBB`
                                      type: string
                                    - const: inherit
                                      type: string
                            code:
                              additionalProperties: false
                              description: >-
                                Style overrides for inline code spans (`` `code`
                                ``): font, optical size scale, text color,
                                background fill/padding/border/radius, baseline
                                shift, opacity, and letter spacing. Pass
                                `background: null` or `backgroundBorder: null`
                                to suppress those.
                              type: object
                              properties:
                                font:
                                  pattern: ^\S(.*\S)?$
                                  description: >-
                                    Font slot as `<role>.<variant>` — role is
                                    `body`, `heading`, or a custom
                                    `typography.named` role; variant is one of
                                    regular, italic, bold, boldItalic (see
                                    `enums.fontVariant`; e.g. `heading.bold`).
                                    The shape is checked semantically at
                                    validate, not by this pattern: a misspelled
                                    variant, an undeclared role, a missing
                                    `.variant`, or a value that reads like a
                                    family name is rejected with a `didYouMean`
                                    pointing at the fix (use `set.family` for a
                                    typeface).
                                  type: string
                                sizeScale:
                                  minimum: 0.85
                                  maximum: 0.88
                                  description: >-
                                    Optical scale relative to the surrounding
                                    run. Accepted range is the 0.85–0.88 band;
                                    out-of-range values are rejected
                                  type: number
                                color:
                                  description: >-
                                    Color as `#RGB` or `#RRGGBB`, or `inherit`
                                    to use the inherited color
                                  anyOf:
                                    - pattern: ^#([0-9a-fA-F]{3}|[0-9a-fA-F]{6})$
                                      description: Color as `#RGB` or `#RRGGBB`
                                      type: string
                                    - const: inherit
                                      type: string
                                background:
                                  description: >-
                                    Background fill behind the code run as
                                    `#RGB`/`#RRGGBB`, or `null` to suppress
                                  anyOf:
                                    - pattern: ^#([0-9a-fA-F]{3}|[0-9a-fA-F]{6})$
                                      description: Color as `#RGB` or `#RRGGBB`
                                      type: string
                                    - type: 'null'
                                backgroundPadding:
                                  additionalProperties: false
                                  type: object
                                  properties:
                                    top:
                                      minimum: 0
                                      maximum: 9999
                                      description: Top padding, in points
                                      type: number
                                    right:
                                      minimum: 0
                                      maximum: 9999
                                      description: Right padding, in points
                                      type: number
                                    bottom:
                                      minimum: 0
                                      maximum: 9999
                                      description: Bottom padding, in points
                                      type: number
                                    left:
                                      minimum: 0
                                      maximum: 9999
                                      description: Left padding, in points
                                      type: number
                                    x:
                                      minimum: 0
                                      maximum: 9999
                                      description: >-
                                        Horizontal padding applied to both left
                                        and right when those sides are omitted,
                                        in points
                                      type: number
                                    'y':
                                      minimum: 0
                                      maximum: 9999
                                      description: >-
                                        Vertical padding applied to both top and
                                        bottom when those sides are omitted, in
                                        points
                                      type: number
                                backgroundBorder:
                                  description: >-
                                    Micro-border around each cloned background
                                    segment, or `null` to suppress
                                  anyOf:
                                    - additionalProperties: false
                                      type: object
                                      required:
                                        - width
                                        - color
                                      properties:
                                        width:
                                          minimum: 0.1
                                          maximum: 50
                                          description: Border thickness in points
                                          type: number
                                        color:
                                          pattern: ^#([0-9a-fA-F]{3}|[0-9a-fA-F]{6})$
                                          description: Color as `#RGB` or `#RRGGBB`
                                          type: string
                                        opacity:
                                          minimum: 0
                                          maximum: 1
                                          description: Border opacity from 0 to 1
                                          type: number
                                        dash:
                                          description: >-
                                            Dash pattern as `[dash, gap]` lengths in
                                            points; both `0` is rejected
                                          type: array
                                          items:
                                            minimum: 0
                                            maximum: 1000
                                            type: number
                                          minItems: 2
                                          maxItems: 2
                                    - type: 'null'
                                backgroundRadius:
                                  minimum: 0
                                  maximum: 14400
                                  description: >-
                                    Corner radius for each background segment,
                                    in points
                                  type: number
                                baselineShift:
                                  minimum: -999
                                  maximum: 999
                                  description: >-
                                    PDF text-rise adjustment in points; positive
                                    values raise the code glyphs
                                  type: number
                                opacity:
                                  minimum: 0
                                  maximum: 1
                                  description: Fill opacity from 0 to 1
                                  type: number
                                letterSpacing:
                                  minimum: -100
                                  maximum: 100
                                  description: >-
                                    Extra spacing between code glyphs in points;
                                    negative values tighten
                                  type: number
                bottomCenter:
                  additionalProperties: false
                  type: object
                  required:
                    - content
                  properties:
                    content:
                      minItems: 1
                      maxItems: 16
                      description: Ordered fragments concatenated to fill the slot
                      type: array
                      items:
                        description: >-
                          A header/footer fragment: literal text, an image
                          (logo/letterhead), page numbers, document title,
                          running section title, or section ordinal at a heading
                          depth. An `image` fragment must be the only fragment
                          in its slot — it is not mixed with text fragments.
                        anyOf:
                          - additionalProperties: false
                            type: object
                            required:
                              - kind
                              - value
                            properties:
                              kind:
                                const: text
                                type: string
                              value:
                                minLength: 1
                                maxLength: 256
                                pattern: \S
                                description: Literal text for this fragment
                                type: string
                              style:
                                additionalProperties: false
                                type: object
                                properties:
                                  font:
                                    pattern: ^\S(.*\S)?$
                                    description: >-
                                      Font slot as `<role>.<variant>` — role is
                                      `body`, `heading`, or a custom
                                      `typography.named` role; variant is one of
                                      regular, italic, bold, boldItalic (see
                                      `enums.fontVariant`; e.g. `heading.bold`).
                                      The shape is checked semantically at
                                      validate, not by this pattern: a
                                      misspelled variant, an undeclared role, a
                                      missing `.variant`, or a value that reads
                                      like a family name is rejected with a
                                      `didYouMean` pointing at the fix (use
                                      `set.family` for a typeface).
                                    type: string
                                  size:
                                    minimum: 1
                                    maximum: 999
                                    description: Font size in points
                                    type: number
                                  color:
                                    pattern: ^#([0-9a-fA-F]{3}|[0-9a-fA-F]{6})$
                                    description: Color as `#RGB` or `#RRGGBB`
                                    type: string
                                  opacity:
                                    minimum: 0
                                    maximum: 1
                                    description: Text opacity from 0 to 1
                                    type: number
                          - additionalProperties: false
                            type: object
                            required:
                              - kind
                              - url
                            properties:
                              kind:
                                const: image
                                type: string
                              url:
                                minLength: 1
                                maxLength: 1048576
                                pattern: ^(https://|data:image/)
                                description: >-
                                  HTTPS or base64 `data:image/...` URL of the
                                  header/footer image (typically a brand logo or
                                  letterhead). Fetched under the same fixed,
                                  non-configurable image policy as Markdown
                                  images (private IPs blocked, DNS-rebinding
                                  mitigation, 10 MiB cap); a fetch or decode
                                  failure degrades to a diagnostic and the image
                                  is omitted rather than failing the render.
                                  Rendered as a decorative PDF/UA pagination
                                  artifact (no alt text).
                                type: string
                              width:
                                minimum: 1
                                maximum: 14400
                                description: >-
                                  Rendered image width in PDF points. When
                                  omitted, the intrinsic width is used, clamped
                                  to the slot band width. Set `width` or
                                  `height` to scale a logo down.
                                type: number
                              height:
                                minimum: 1
                                maximum: 14400
                                description: >-
                                  Rendered image height in PDF points. When
                                  omitted, height follows the aspect ratio of
                                  the resolved width.
                                type: number
                              fit:
                                description: >-
                                  Block-only. How the image fills its
                                  width/height box: `none` (intrinsic sizing),
                                  `contain`, `cover`, or `fill`. Used with
                                  `height` for hero-style layouts.
                                anyOf:
                                  - const: none
                                    type: string
                                  - const: contain
                                    type: string
                                  - const: cover
                                    type: string
                                  - const: fill
                                    type: string
                              align:
                                description: >-
                                  Block-only. Horizontal alignment of the image
                                  within the content area: `start` (left edge in
                                  LTR), `center`, or `end` (right edge in LTR).
                                  Ignored for inline images (line flow controls
                                  position).
                                anyOf:
                                  - const: start
                                    type: string
                                  - const: center
                                    type: string
                                  - const: end
                                    type: string
                              opacity:
                                minimum: 0
                                maximum: 1
                                description: Image opacity from 0 to 1.
                                type: number
                          - additionalProperties: false
                            type: object
                            required:
                              - kind
                            properties:
                              kind:
                                const: pageNumber
                                type: string
                              style:
                                additionalProperties: false
                                type: object
                                properties:
                                  font:
                                    pattern: ^\S(.*\S)?$
                                    description: >-
                                      Font slot as `<role>.<variant>` — role is
                                      `body`, `heading`, or a custom
                                      `typography.named` role; variant is one of
                                      regular, italic, bold, boldItalic (see
                                      `enums.fontVariant`; e.g. `heading.bold`).
                                      The shape is checked semantically at
                                      validate, not by this pattern: a
                                      misspelled variant, an undeclared role, a
                                      missing `.variant`, or a value that reads
                                      like a family name is rejected with a
                                      `didYouMean` pointing at the fix (use
                                      `set.family` for a typeface).
                                    type: string
                                  size:
                                    minimum: 1
                                    maximum: 999
                                    description: Font size in points
                                    type: number
                                  color:
                                    pattern: ^#([0-9a-fA-F]{3}|[0-9a-fA-F]{6})$
                                    description: Color as `#RGB` or `#RRGGBB`
                                    type: string
                                  opacity:
                                    minimum: 0
                                    maximum: 1
                                    description: Text opacity from 0 to 1
                                    type: number
                          - additionalProperties: false
                            type: object
                            required:
                              - kind
                            properties:
                              kind:
                                const: totalPages
                                type: string
                              style:
                                additionalProperties: false
                                type: object
                                properties:
                                  font:
                                    pattern: ^\S(.*\S)?$
                                    description: >-
                                      Font slot as `<role>.<variant>` — role is
                                      `body`, `heading`, or a custom
                                      `typography.named` role; variant is one of
                                      regular, italic, bold, boldItalic (see
                                      `enums.fontVariant`; e.g. `heading.bold`).
                                      The shape is checked semantically at
                                      validate, not by this pattern: a
                                      misspelled variant, an undeclared role, a
                                      missing `.variant`, or a value that reads
                                      like a family name is rejected with a
                                      `didYouMean` pointing at the fix (use
                                      `set.family` for a typeface).
                                    type: string
                                  size:
                                    minimum: 1
                                    maximum: 999
                                    description: Font size in points
                                    type: number
                                  color:
                                    pattern: ^#([0-9a-fA-F]{3}|[0-9a-fA-F]{6})$
                                    description: Color as `#RGB` or `#RRGGBB`
                                    type: string
                                  opacity:
                                    minimum: 0
                                    maximum: 1
                                    description: Text opacity from 0 to 1
                                    type: number
                          - additionalProperties: false
                            type: object
                            required:
                              - kind
                            properties:
                              kind:
                                const: documentTitle
                                type: string
                              style:
                                additionalProperties: false
                                type: object
                                properties:
                                  font:
                                    pattern: ^\S(.*\S)?$
                                    description: >-
                                      Font slot as `<role>.<variant>` — role is
                                      `body`, `heading`, or a custom
                                      `typography.named` role; variant is one of
                                      regular, italic, bold, boldItalic (see
                                      `enums.fontVariant`; e.g. `heading.bold`).
                                      The shape is checked semantically at
                                      validate, not by this pattern: a
                                      misspelled variant, an undeclared role, a
                                      missing `.variant`, or a value that reads
                                      like a family name is rejected with a
                                      `didYouMean` pointing at the fix (use
                                      `set.family` for a typeface).
                                    type: string
                                  size:
                                    minimum: 1
                                    maximum: 999
                                    description: Font size in points
                                    type: number
                                  color:
                                    pattern: ^#([0-9a-fA-F]{3}|[0-9a-fA-F]{6})$
                                    description: Color as `#RGB` or `#RRGGBB`
                                    type: string
                                  opacity:
                                    minimum: 0
                                    maximum: 1
                                    description: Text opacity from 0 to 1
                                    type: number
                          - additionalProperties: false
                            type: object
                            required:
                              - kind
                            properties:
                              kind:
                                const: sectionTitle
                                type: string
                              depth:
                                description: Heading depth from 1 (top level) to 6
                                anyOf:
                                  - const: 1
                                    type: number
                                  - const: 2
                                    type: number
                                  - const: 3
                                    type: number
                                  - const: 4
                                    type: number
                                  - const: 5
                                    type: number
                                  - const: 6
                                    type: number
                              style:
                                additionalProperties: false
                                type: object
                                properties:
                                  font:
                                    pattern: ^\S(.*\S)?$
                                    description: >-
                                      Font slot as `<role>.<variant>` — role is
                                      `body`, `heading`, or a custom
                                      `typography.named` role; variant is one of
                                      regular, italic, bold, boldItalic (see
                                      `enums.fontVariant`; e.g. `heading.bold`).
                                      The shape is checked semantically at
                                      validate, not by this pattern: a
                                      misspelled variant, an undeclared role, a
                                      missing `.variant`, or a value that reads
                                      like a family name is rejected with a
                                      `didYouMean` pointing at the fix (use
                                      `set.family` for a typeface).
                                    type: string
                                  size:
                                    minimum: 1
                                    maximum: 999
                                    description: Font size in points
                                    type: number
                                  color:
                                    pattern: ^#([0-9a-fA-F]{3}|[0-9a-fA-F]{6})$
                                    description: Color as `#RGB` or `#RRGGBB`
                                    type: string
                                  opacity:
                                    minimum: 0
                                    maximum: 1
                                    description: Text opacity from 0 to 1
                                    type: number
                          - additionalProperties: false
                            type: object
                            required:
                              - kind
                            properties:
                              kind:
                                const: sectionIndex
                                type: string
                              depth:
                                description: Heading depth from 1 (top level) to 6
                                anyOf:
                                  - const: 1
                                    type: number
                                  - const: 2
                                    type: number
                                  - const: 3
                                    type: number
                                  - const: 4
                                    type: number
                                  - const: 5
                                    type: number
                                  - const: 6
                                    type: number
                              format:
                                description: >-
                                  Section ordinal format: `twoDigit` (at least
                                  two digits: 01, 12; ordinals ≥ 100 render in
                                  full) or `decimal` (1, 2, …)
                                anyOf:
                                  - const: twoDigit
                                    type: string
                                  - const: decimal
                                    type: string
                              style:
                                additionalProperties: false
                                type: object
                                properties:
                                  font:
                                    pattern: ^\S(.*\S)?$
                                    description: >-
                                      Font slot as `<role>.<variant>` — role is
                                      `body`, `heading`, or a custom
                                      `typography.named` role; variant is one of
                                      regular, italic, bold, boldItalic (see
                                      `enums.fontVariant`; e.g. `heading.bold`).
                                      The shape is checked semantically at
                                      validate, not by this pattern: a
                                      misspelled variant, an undeclared role, a
                                      missing `.variant`, or a value that reads
                                      like a family name is rejected with a
                                      `didYouMean` pointing at the fix (use
                                      `set.family` for a typeface).
                                    type: string
                                  size:
                                    minimum: 1
                                    maximum: 999
                                    description: Font size in points
                                    type: number
                                  color:
                                    pattern: ^#([0-9a-fA-F]{3}|[0-9a-fA-F]{6})$
                                    description: Color as `#RGB` or `#RRGGBB`
                                    type: string
                                  opacity:
                                    minimum: 0
                                    maximum: 1
                                    description: Text opacity from 0 to 1
                                    type: number
                    style:
                      additionalProperties: false
                      type: object
                      properties:
                        font:
                          pattern: ^\S(.*\S)?$
                          description: >-
                            Font slot as `<role>.<variant>` — role is `body`,
                            `heading`, or a custom `typography.named` role;
                            variant is one of regular, italic, bold, boldItalic
                            (see `enums.fontVariant`; e.g. `heading.bold`). The
                            shape is checked semantically at validate, not by
                            this pattern: a misspelled variant, an undeclared
                            role, a missing `.variant`, or a value that reads
                            like a family name is rejected with a `didYouMean`
                            pointing at the fix (use `set.family` for a
                            typeface).
                          type: string
                        family:
                          description: >-
                            A text family: a hosted weighted key, a declared
                            Google Fonts display name, or a `typography.named`
                            role reference
                          anyOf:
                            - const: inter
                              type: string
                            - const: lora
                              type: string
                            - const: source-serif-4
                              type: string
                            - pattern: ^[A-Za-z][A-Za-z0-9 ]{0,63}$
                              description: >-
                                Google Fonts display name from the declared pool
                                (e.g. `Playfair Display`)
                              type: string
                            - pattern: ^[a-z][a-z0-9-]{0,15}$
                              description: >-
                                Reference to a custom role declared in
                                `typography.named` (e.g. `display`)
                              type: string
                        size:
                          minimum: 1
                          maximum: 999
                          description: Font size in points
                          type: number
                        color:
                          pattern: ^#([0-9a-fA-F]{3}|[0-9a-fA-F]{6})$
                          description: Color as `#RGB` or `#RRGGBB`
                          type: string
                        spaceBefore:
                          minimum: 0
                          maximum: 9999
                          description: Vertical space reserved above the block, in points
                          type: number
                        spaceAfter:
                          minimum: 0
                          maximum: 9999
                          description: Vertical space reserved below the block, in points
                          type: number
                        lineHeight:
                          minimum: 1
                          maximum: 10
                          description: Line height as a multiple of the font size
                          type: number
                        align:
                          type: string
                          enum:
                            - left
                            - right
                            - center
                            - justify
                        letterSpacing:
                          minimum: -100
                          maximum: 100
                          description: >-
                            Extra spacing between characters in points; negative
                            values tighten
                          type: number
                        opacity:
                          minimum: 0
                          maximum: 1
                          description: Text opacity from 0 to 1
                          type: number
                        inline:
                          additionalProperties: false
                          type: object
                          properties:
                            strong:
                              additionalProperties: false
                              type: object
                              properties:
                                color:
                                  description: >-
                                    Color as `#RGB` or `#RRGGBB`, or `inherit`
                                    to use the inherited color
                                  anyOf:
                                    - pattern: ^#([0-9a-fA-F]{3}|[0-9a-fA-F]{6})$
                                      description: Color as `#RGB` or `#RRGGBB`
                                      type: string
                                    - const: inherit
                                      type: string
                            emphasis:
                              additionalProperties: false
                              type: object
                              properties:
                                color:
                                  description: >-
                                    Color as `#RGB` or `#RRGGBB`, or `inherit`
                                    to use the inherited color
                                  anyOf:
                                    - pattern: ^#([0-9a-fA-F]{3}|[0-9a-fA-F]{6})$
                                      description: Color as `#RGB` or `#RRGGBB`
                                      type: string
                                    - const: inherit
                                      type: string
                            delete:
                              additionalProperties: false
                              type: object
                              properties:
                                color:
                                  description: >-
                                    Color as `#RGB` or `#RRGGBB`, or `inherit`
                                    to use the inherited color
                                  anyOf:
                                    - pattern: ^#([0-9a-fA-F]{3}|[0-9a-fA-F]{6})$
                                      description: Color as `#RGB` or `#RRGGBB`
                                      type: string
                                    - const: inherit
                                      type: string
                                decorationStyle:
                                  type: string
                                  enum:
                                    - solid
                                    - double
                                    - dotted
                                    - dashed
                                    - wavy
                                decorationColor:
                                  description: >-
                                    Color as `#RGB` or `#RRGGBB`, or `inherit`
                                    to use the inherited color
                                  anyOf:
                                    - pattern: ^#([0-9a-fA-F]{3}|[0-9a-fA-F]{6})$
                                      description: Color as `#RGB` or `#RRGGBB`
                                      type: string
                                    - const: inherit
                                      type: string
                            mark:
                              additionalProperties: false
                              type: object
                              properties:
                                color:
                                  description: >-
                                    Color as `#RGB` or `#RRGGBB`, or `inherit`
                                    to use the inherited color
                                  anyOf:
                                    - pattern: ^#([0-9a-fA-F]{3}|[0-9a-fA-F]{6})$
                                      description: Color as `#RGB` or `#RRGGBB`
                                      type: string
                                    - const: inherit
                                      type: string
                                background:
                                  description: >-
                                    Background fill behind highlighted text as
                                    `#RGB`/`#RRGGBB`, or `null` to suppress
                                  anyOf:
                                    - pattern: ^#([0-9a-fA-F]{3}|[0-9a-fA-F]{6})$
                                      description: Color as `#RGB` or `#RRGGBB`
                                      type: string
                                    - type: 'null'
                                backgroundPadding:
                                  additionalProperties: false
                                  type: object
                                  properties:
                                    top:
                                      minimum: 0
                                      maximum: 9999
                                      description: Top padding, in points
                                      type: number
                                    right:
                                      minimum: 0
                                      maximum: 9999
                                      description: Right padding, in points
                                      type: number
                                    bottom:
                                      minimum: 0
                                      maximum: 9999
                                      description: Bottom padding, in points
                                      type: number
                                    left:
                                      minimum: 0
                                      maximum: 9999
                                      description: Left padding, in points
                                      type: number
                                    x:
                                      minimum: 0
                                      maximum: 9999
                                      description: >-
                                        Horizontal padding applied to both left
                                        and right when those sides are omitted,
                                        in points
                                      type: number
                                    'y':
                                      minimum: 0
                                      maximum: 9999
                                      description: >-
                                        Vertical padding applied to both top and
                                        bottom when those sides are omitted, in
                                        points
                                      type: number
                                backgroundRadius:
                                  minimum: 0
                                  maximum: 14400
                                  description: >-
                                    Corner radius for each highlight background
                                    segment, in points
                                  type: number
                            subscript:
                              additionalProperties: false
                              type: object
                              properties:
                                color:
                                  description: >-
                                    Color as `#RGB` or `#RRGGBB`, or `inherit`
                                    to use the inherited color
                                  anyOf:
                                    - pattern: ^#([0-9a-fA-F]{3}|[0-9a-fA-F]{6})$
                                      description: Color as `#RGB` or `#RRGGBB`
                                      type: string
                                    - const: inherit
                                      type: string
                                sizeScale:
                                  minimum: 0.4
                                  maximum: 1
                                  description: >-
                                    Optical scale relative to the surrounding
                                    run (fraction of base size)
                                  type: number
                                riseFraction:
                                  minimum: 0
                                  maximum: 1
                                  description: >-
                                    Baseline offset as a fraction of base size
                                    (not PDF points — contrast with code
                                    `baselineShift`). The renderer applies the
                                    sign (up for superscript, down for
                                    subscript)
                                  type: number
                            superscript:
                              additionalProperties: false
                              type: object
                              properties:
                                color:
                                  description: >-
                                    Color as `#RGB` or `#RRGGBB`, or `inherit`
                                    to use the inherited color
                                  anyOf:
                                    - pattern: ^#([0-9a-fA-F]{3}|[0-9a-fA-F]{6})$
                                      description: Color as `#RGB` or `#RRGGBB`
                                      type: string
                                    - const: inherit
                                      type: string
                                sizeScale:
                                  minimum: 0.4
                                  maximum: 1
                                  description: >-
                                    Optical scale relative to the surrounding
                                    run (fraction of base size)
                                  type: number
                                riseFraction:
                                  minimum: 0
                                  maximum: 1
                                  description: >-
                                    Baseline offset as a fraction of base size
                                    (not PDF points — contrast with code
                                    `baselineShift`). The renderer applies the
                                    sign (up for superscript, down for
                                    subscript)
                                  type: number
                            link:
                              additionalProperties: false
                              type: object
                              properties:
                                color:
                                  description: >-
                                    Color as `#RGB` or `#RRGGBB`, or `inherit`
                                    to use the inherited color
                                  anyOf:
                                    - pattern: ^#([0-9a-fA-F]{3}|[0-9a-fA-F]{6})$
                                      description: Color as `#RGB` or `#RRGGBB`
                                      type: string
                                    - const: inherit
                                      type: string
                                decoration:
                                  type: string
                                  enum:
                                    - underline
                                    - lineThrough
                                    - none
                                decorationStyle:
                                  type: string
                                  enum:
                                    - solid
                                    - double
                                    - dotted
                                    - dashed
                                    - wavy
                                decorationColor:
                                  description: >-
                                    Color as `#RGB` or `#RRGGBB`, or `inherit`
                                    to use the inherited color
                                  anyOf:
                                    - pattern: ^#([0-9a-fA-F]{3}|[0-9a-fA-F]{6})$
                                      description: Color as `#RGB` or `#RRGGBB`
                                      type: string
                                    - const: inherit
                                      type: string
                            code:
                              additionalProperties: false
                              description: >-
                                Style overrides for inline code spans (`` `code`
                                ``): font, optical size scale, text color,
                                background fill/padding/border/radius, baseline
                                shift, opacity, and letter spacing. Pass
                                `background: null` or `backgroundBorder: null`
                                to suppress those.
                              type: object
                              properties:
                                font:
                                  pattern: ^\S(.*\S)?$
                                  description: >-
                                    Font slot as `<role>.<variant>` — role is
                                    `body`, `heading`, or a custom
                                    `typography.named` role; variant is one of
                                    regular, italic, bold, boldItalic (see
                                    `enums.fontVariant`; e.g. `heading.bold`).
                                    The shape is checked semantically at
                                    validate, not by this pattern: a misspelled
                                    variant, an undeclared role, a missing
                                    `.variant`, or a value that reads like a
                                    family name is rejected with a `didYouMean`
                                    pointing at the fix (use `set.family` for a
                                    typeface).
                                  type: string
                                sizeScale:
                                  minimum: 0.85
                                  maximum: 0.88
                                  description: >-
                                    Optical scale relative to the surrounding
                                    run. Accepted range is the 0.85–0.88 band;
                                    out-of-range values are rejected
                                  type: number
                                color:
                                  description: >-
                                    Color as `#RGB` or `#RRGGBB`, or `inherit`
                                    to use the inherited color
                                  anyOf:
                                    - pattern: ^#([0-9a-fA-F]{3}|[0-9a-fA-F]{6})$
                                      description: Color as `#RGB` or `#RRGGBB`
                                      type: string
                                    - const: inherit
                                      type: string
                                background:
                                  description: >-
                                    Background fill behind the code run as
                                    `#RGB`/`#RRGGBB`, or `null` to suppress
                                  anyOf:
                                    - pattern: ^#([0-9a-fA-F]{3}|[0-9a-fA-F]{6})$
                                      description: Color as `#RGB` or `#RRGGBB`
                                      type: string
                                    - type: 'null'
                                backgroundPadding:
                                  additionalProperties: false
                                  type: object
                                  properties:
                                    top:
                                      minimum: 0
                                      maximum: 9999
                                      description: Top padding, in points
                                      type: number
                                    right:
                                      minimum: 0
                                      maximum: 9999
                                      description: Right padding, in points
                                      type: number
                                    bottom:
                                      minimum: 0
                                      maximum: 9999
                                      description: Bottom padding, in points
                                      type: number
                                    left:
                                      minimum: 0
                                      maximum: 9999
                                      description: Left padding, in points
                                      type: number
                                    x:
                                      minimum: 0
                                      maximum: 9999
                                      description: >-
                                        Horizontal padding applied to both left
                                        and right when those sides are omitted,
                                        in points
                                      type: number
                                    'y':
                                      minimum: 0
                                      maximum: 9999
                                      description: >-
                                        Vertical padding applied to both top and
                                        bottom when those sides are omitted, in
                                        points
                                      type: number
                                backgroundBorder:
                                  description: >-
                                    Micro-border around each cloned background
                                    segment, or `null` to suppress
                                  anyOf:
                                    - additionalProperties: false
                                      type: object
                                      required:
                                        - width
                                        - color
                                      properties:
                                        width:
                                          minimum: 0.1
                                          maximum: 50
                                          description: Border thickness in points
                                          type: number
                                        color:
                                          pattern: ^#([0-9a-fA-F]{3}|[0-9a-fA-F]{6})$
                                          description: Color as `#RGB` or `#RRGGBB`
                                          type: string
                                        opacity:
                                          minimum: 0
                                          maximum: 1
                                          description: Border opacity from 0 to 1
                                          type: number
                                        dash:
                                          description: >-
                                            Dash pattern as `[dash, gap]` lengths in
                                            points; both `0` is rejected
                                          type: array
                                          items:
                                            minimum: 0
                                            maximum: 1000
                                            type: number
                                          minItems: 2
                                          maxItems: 2
                                    - type: 'null'
                                backgroundRadius:
                                  minimum: 0
                                  maximum: 14400
                                  description: >-
                                    Corner radius for each background segment,
                                    in points
                                  type: number
                                baselineShift:
                                  minimum: -999
                                  maximum: 999
                                  description: >-
                                    PDF text-rise adjustment in points; positive
                                    values raise the code glyphs
                                  type: number
                                opacity:
                                  minimum: 0
                                  maximum: 1
                                  description: Fill opacity from 0 to 1
                                  type: number
                                letterSpacing:
                                  minimum: -100
                                  maximum: 100
                                  description: >-
                                    Extra spacing between code glyphs in points;
                                    negative values tighten
                                  type: number
                bottomRight:
                  additionalProperties: false
                  type: object
                  required:
                    - content
                  properties:
                    content:
                      minItems: 1
                      maxItems: 16
                      description: Ordered fragments concatenated to fill the slot
                      type: array
                      items:
                        description: >-
                          A header/footer fragment: literal text, an image
                          (logo/letterhead), page numbers, document title,
                          running section title, or section ordinal at a heading
                          depth. An `image` fragment must be the only fragment
                          in its slot — it is not mixed with text fragments.
                        anyOf:
                          - additionalProperties: false
                            type: object
                            required:
                              - kind
                              - value
                            properties:
                              kind:
                                const: text
                                type: string
                              value:
                                minLength: 1
                                maxLength: 256
                                pattern: \S
                                description: Literal text for this fragment
                                type: string
                              style:
                                additionalProperties: false
                                type: object
                                properties:
                                  font:
                                    pattern: ^\S(.*\S)?$
                                    description: >-
                                      Font slot as `<role>.<variant>` — role is
                                      `body`, `heading`, or a custom
                                      `typography.named` role; variant is one of
                                      regular, italic, bold, boldItalic (see
                                      `enums.fontVariant`; e.g. `heading.bold`).
                                      The shape is checked semantically at
                                      validate, not by this pattern: a
                                      misspelled variant, an undeclared role, a
                                      missing `.variant`, or a value that reads
                                      like a family name is rejected with a
                                      `didYouMean` pointing at the fix (use
                                      `set.family` for a typeface).
                                    type: string
                                  size:
                                    minimum: 1
                                    maximum: 999
                                    description: Font size in points
                                    type: number
                                  color:
                                    pattern: ^#([0-9a-fA-F]{3}|[0-9a-fA-F]{6})$
                                    description: Color as `#RGB` or `#RRGGBB`
                                    type: string
                                  opacity:
                                    minimum: 0
                                    maximum: 1
                                    description: Text opacity from 0 to 1
                                    type: number
                          - additionalProperties: false
                            type: object
                            required:
                              - kind
                              - url
                            properties:
                              kind:
                                const: image
                                type: string
                              url:
                                minLength: 1
                                maxLength: 1048576
                                pattern: ^(https://|data:image/)
                                description: >-
                                  HTTPS or base64 `data:image/...` URL of the
                                  header/footer image (typically a brand logo or
                                  letterhead). Fetched under the same fixed,
                                  non-configurable image policy as Markdown
                                  images (private IPs blocked, DNS-rebinding
                                  mitigation, 10 MiB cap); a fetch or decode
                                  failure degrades to a diagnostic and the image
                                  is omitted rather than failing the render.
                                  Rendered as a decorative PDF/UA pagination
                                  artifact (no alt text).
                                type: string
                              width:
                                minimum: 1
                                maximum: 14400
                                description: >-
                                  Rendered image width in PDF points. When
                                  omitted, the intrinsic width is used, clamped
                                  to the slot band width. Set `width` or
                                  `height` to scale a logo down.
                                type: number
                              height:
                                minimum: 1
                                maximum: 14400
                                description: >-
                                  Rendered image height in PDF points. When
                                  omitted, height follows the aspect ratio of
                                  the resolved width.
                                type: number
                              fit:
                                description: >-
                                  Block-only. How the image fills its
                                  width/height box: `none` (intrinsic sizing),
                                  `contain`, `cover`, or `fill`. Used with
                                  `height` for hero-style layouts.
                                anyOf:
                                  - const: none
                                    type: string
                                  - const: contain
                                    type: string
                                  - const: cover
                                    type: string
                                  - const: fill
                                    type: string
                              align:
                                description: >-
                                  Block-only. Horizontal alignment of the image
                                  within the content area: `start` (left edge in
                                  LTR), `center`, or `end` (right edge in LTR).
                                  Ignored for inline images (line flow controls
                                  position).
                                anyOf:
                                  - const: start
                                    type: string
                                  - const: center
                                    type: string
                                  - const: end
                                    type: string
                              opacity:
                                minimum: 0
                                maximum: 1
                                description: Image opacity from 0 to 1.
                                type: number
                          - additionalProperties: false
                            type: object
                            required:
                              - kind
                            properties:
                              kind:
                                const: pageNumber
                                type: string
                              style:
                                additionalProperties: false
                                type: object
                                properties:
                                  font:
                                    pattern: ^\S(.*\S)?$
                                    description: >-
                                      Font slot as `<role>.<variant>` — role is
                                      `body`, `heading`, or a custom
                                      `typography.named` role; variant is one of
                                      regular, italic, bold, boldItalic (see
                                      `enums.fontVariant`; e.g. `heading.bold`).
                                      The shape is checked semantically at
                                      validate, not by this pattern: a
                                      misspelled variant, an undeclared role, a
                                      missing `.variant`, or a value that reads
                                      like a family name is rejected with a
                                      `didYouMean` pointing at the fix (use
                                      `set.family` for a typeface).
                                    type: string
                                  size:
                                    minimum: 1
                                    maximum: 999
                                    description: Font size in points
                                    type: number
                                  color:
                                    pattern: ^#([0-9a-fA-F]{3}|[0-9a-fA-F]{6})$
                                    description: Color as `#RGB` or `#RRGGBB`
                                    type: string
                                  opacity:
                                    minimum: 0
                                    maximum: 1
                                    description: Text opacity from 0 to 1
                                    type: number
                          - additionalProperties: false
                            type: object
                            required:
                              - kind
                            properties:
                              kind:
                                const: totalPages
                                type: string
                              style:
                                additionalProperties: false
                                type: object
                                properties:
                                  font:
                                    pattern: ^\S(.*\S)?$
                                    description: >-
                                      Font slot as `<role>.<variant>` — role is
                                      `body`, `heading`, or a custom
                                      `typography.named` role; variant is one of
                                      regular, italic, bold, boldItalic (see
                                      `enums.fontVariant`; e.g. `heading.bold`).
                                      The shape is checked semantically at
                                      validate, not by this pattern: a
                                      misspelled variant, an undeclared role, a
                                      missing `.variant`, or a value that reads
                                      like a family name is rejected with a
                                      `didYouMean` pointing at the fix (use
                                      `set.family` for a typeface).
                                    type: string
                                  size:
                                    minimum: 1
                                    maximum: 999
                                    description: Font size in points
                                    type: number
                                  color:
                                    pattern: ^#([0-9a-fA-F]{3}|[0-9a-fA-F]{6})$
                                    description: Color as `#RGB` or `#RRGGBB`
                                    type: string
                                  opacity:
                                    minimum: 0
                                    maximum: 1
                                    description: Text opacity from 0 to 1
                                    type: number
                          - additionalProperties: false
                            type: object
                            required:
                              - kind
                            properties:
                              kind:
                                const: documentTitle
                                type: string
                              style:
                                additionalProperties: false
                                type: object
                                properties:
                                  font:
                                    pattern: ^\S(.*\S)?$
                                    description: >-
                                      Font slot as `<role>.<variant>` — role is
                                      `body`, `heading`, or a custom
                                      `typography.named` role; variant is one of
                                      regular, italic, bold, boldItalic (see
                                      `enums.fontVariant`; e.g. `heading.bold`).
                                      The shape is checked semantically at
                                      validate, not by this pattern: a
                                      misspelled variant, an undeclared role, a
                                      missing `.variant`, or a value that reads
                                      like a family name is rejected with a
                                      `didYouMean` pointing at the fix (use
                                      `set.family` for a typeface).
                                    type: string
                                  size:
                                    minimum: 1
                                    maximum: 999
                                    description: Font size in points
                                    type: number
                                  color:
                                    pattern: ^#([0-9a-fA-F]{3}|[0-9a-fA-F]{6})$
                                    description: Color as `#RGB` or `#RRGGBB`
                                    type: string
                                  opacity:
                                    minimum: 0
                                    maximum: 1
                                    description: Text opacity from 0 to 1
                                    type: number
                          - additionalProperties: false
                            type: object
                            required:
                              - kind
                            properties:
                              kind:
                                const: sectionTitle
                                type: string
                              depth:
                                description: Heading depth from 1 (top level) to 6
                                anyOf:
                                  - const: 1
                                    type: number
                                  - const: 2
                                    type: number
                                  - const: 3
                                    type: number
                                  - const: 4
                                    type: number
                                  - const: 5
                                    type: number
                                  - const: 6
                                    type: number
                              style:
                                additionalProperties: false
                                type: object
                                properties:
                                  font:
                                    pattern: ^\S(.*\S)?$
                                    description: >-
                                      Font slot as `<role>.<variant>` — role is
                                      `body`, `heading`, or a custom
                                      `typography.named` role; variant is one of
                                      regular, italic, bold, boldItalic (see
                                      `enums.fontVariant`; e.g. `heading.bold`).
                                      The shape is checked semantically at
                                      validate, not by this pattern: a
                                      misspelled variant, an undeclared role, a
                                      missing `.variant`, or a value that reads
                                      like a family name is rejected with a
                                      `didYouMean` pointing at the fix (use
                                      `set.family` for a typeface).
                                    type: string
                                  size:
                                    minimum: 1
                                    maximum: 999
                                    description: Font size in points
                                    type: number
                                  color:
                                    pattern: ^#([0-9a-fA-F]{3}|[0-9a-fA-F]{6})$
                                    description: Color as `#RGB` or `#RRGGBB`
                                    type: string
                                  opacity:
                                    minimum: 0
                                    maximum: 1
                                    description: Text opacity from 0 to 1
                                    type: number
                          - additionalProperties: false
                            type: object
                            required:
                              - kind
                            properties:
                              kind:
                                const: sectionIndex
                                type: string
                              depth:
                                description: Heading depth from 1 (top level) to 6
                                anyOf:
                                  - const: 1
                                    type: number
                                  - const: 2
                                    type: number
                                  - const: 3
                                    type: number
                                  - const: 4
                                    type: number
                                  - const: 5
                                    type: number
                                  - const: 6
                                    type: number
                              format:
                                description: >-
                                  Section ordinal format: `twoDigit` (at least
                                  two digits: 01, 12; ordinals ≥ 100 render in
                                  full) or `decimal` (1, 2, …)
                                anyOf:
                                  - const: twoDigit
                                    type: string
                                  - const: decimal
                                    type: string
                              style:
                                additionalProperties: false
                                type: object
                                properties:
                                  font:
                                    pattern: ^\S(.*\S)?$
                                    description: >-
                                      Font slot as `<role>.<variant>` — role is
                                      `body`, `heading`, or a custom
                                      `typography.named` role; variant is one of
                                      regular, italic, bold, boldItalic (see
                                      `enums.fontVariant`; e.g. `heading.bold`).
                                      The shape is checked semantically at
                                      validate, not by this pattern: a
                                      misspelled variant, an undeclared role, a
                                      missing `.variant`, or a value that reads
                                      like a family name is rejected with a
                                      `didYouMean` pointing at the fix (use
                                      `set.family` for a typeface).
                                    type: string
                                  size:
                                    minimum: 1
                                    maximum: 999
                                    description: Font size in points
                                    type: number
                                  color:
                                    pattern: ^#([0-9a-fA-F]{3}|[0-9a-fA-F]{6})$
                                    description: Color as `#RGB` or `#RRGGBB`
                                    type: string
                                  opacity:
                                    minimum: 0
                                    maximum: 1
                                    description: Text opacity from 0 to 1
                                    type: number
                    style:
                      additionalProperties: false
                      type: object
                      properties:
                        font:
                          pattern: ^\S(.*\S)?$
                          description: >-
                            Font slot as `<role>.<variant>` — role is `body`,
                            `heading`, or a custom `typography.named` role;
                            variant is one of regular, italic, bold, boldItalic
                            (see `enums.fontVariant`; e.g. `heading.bold`). The
                            shape is checked semantically at validate, not by
                            this pattern: a misspelled variant, an undeclared
                            role, a missing `.variant`, or a value that reads
                            like a family name is rejected with a `didYouMean`
                            pointing at the fix (use `set.family` for a
                            typeface).
                          type: string
                        family:
                          description: >-
                            A text family: a hosted weighted key, a declared
                            Google Fonts display name, or a `typography.named`
                            role reference
                          anyOf:
                            - const: inter
                              type: string
                            - const: lora
                              type: string
                            - const: source-serif-4
                              type: string
                            - pattern: ^[A-Za-z][A-Za-z0-9 ]{0,63}$
                              description: >-
                                Google Fonts display name from the declared pool
                                (e.g. `Playfair Display`)
                              type: string
                            - pattern: ^[a-z][a-z0-9-]{0,15}$
                              description: >-
                                Reference to a custom role declared in
                                `typography.named` (e.g. `display`)
                              type: string
                        size:
                          minimum: 1
                          maximum: 999
                          description: Font size in points
                          type: number
                        color:
                          pattern: ^#([0-9a-fA-F]{3}|[0-9a-fA-F]{6})$
                          description: Color as `#RGB` or `#RRGGBB`
                          type: string
                        spaceBefore:
                          minimum: 0
                          maximum: 9999
                          description: Vertical space reserved above the block, in points
                          type: number
                        spaceAfter:
                          minimum: 0
                          maximum: 9999
                          description: Vertical space reserved below the block, in points
                          type: number
                        lineHeight:
                          minimum: 1
                          maximum: 10
                          description: Line height as a multiple of the font size
                          type: number
                        align:
                          type: string
                          enum:
                            - left
                            - right
                            - center
                            - justify
                        letterSpacing:
                          minimum: -100
                          maximum: 100
                          description: >-
                            Extra spacing between characters in points; negative
                            values tighten
                          type: number
                        opacity:
                          minimum: 0
                          maximum: 1
                          description: Text opacity from 0 to 1
                          type: number
                        inline:
                          additionalProperties: false
                          type: object
                          properties:
                            strong:
                              additionalProperties: false
                              type: object
                              properties:
                                color:
                                  description: >-
                                    Color as `#RGB` or `#RRGGBB`, or `inherit`
                                    to use the inherited color
                                  anyOf:
                                    - pattern: ^#([0-9a-fA-F]{3}|[0-9a-fA-F]{6})$
                                      description: Color as `#RGB` or `#RRGGBB`
                                      type: string
                                    - const: inherit
                                      type: string
                            emphasis:
                              additionalProperties: false
                              type: object
                              properties:
                                color:
                                  description: >-
                                    Color as `#RGB` or `#RRGGBB`, or `inherit`
                                    to use the inherited color
                                  anyOf:
                                    - pattern: ^#([0-9a-fA-F]{3}|[0-9a-fA-F]{6})$
                                      description: Color as `#RGB` or `#RRGGBB`
                                      type: string
                                    - const: inherit
                                      type: string
                            delete:
                              additionalProperties: false
                              type: object
                              properties:
                                color:
                                  description: >-
                                    Color as `#RGB` or `#RRGGBB`, or `inherit`
                                    to use the inherited color
                                  anyOf:
                                    - pattern: ^#([0-9a-fA-F]{3}|[0-9a-fA-F]{6})$
                                      description: Color as `#RGB` or `#RRGGBB`
                                      type: string
                                    - const: inherit
                                      type: string
                                decorationStyle:
                                  type: string
                                  enum:
                                    - solid
                                    - double
                                    - dotted
                                    - dashed
                                    - wavy
                                decorationColor:
                                  description: >-
                                    Color as `#RGB` or `#RRGGBB`, or `inherit`
                                    to use the inherited color
                                  anyOf:
                                    - pattern: ^#([0-9a-fA-F]{3}|[0-9a-fA-F]{6})$
                                      description: Color as `#RGB` or `#RRGGBB`
                                      type: string
                                    - const: inherit
                                      type: string
                            mark:
                              additionalProperties: false
                              type: object
                              properties:
                                color:
                                  description: >-
                                    Color as `#RGB` or `#RRGGBB`, or `inherit`
                                    to use the inherited color
                                  anyOf:
                                    - pattern: ^#([0-9a-fA-F]{3}|[0-9a-fA-F]{6})$
                                      description: Color as `#RGB` or `#RRGGBB`
                                      type: string
                                    - const: inherit
                                      type: string
                                background:
                                  description: >-
                                    Background fill behind highlighted text as
                                    `#RGB`/`#RRGGBB`, or `null` to suppress
                                  anyOf:
                                    - pattern: ^#([0-9a-fA-F]{3}|[0-9a-fA-F]{6})$
                                      description: Color as `#RGB` or `#RRGGBB`
                                      type: string
                                    - type: 'null'
                                backgroundPadding:
                                  additionalProperties: false
                                  type: object
                                  properties:
                                    top:
                                      minimum: 0
                                      maximum: 9999
                                      description: Top padding, in points
                                      type: number
                                    right:
                                      minimum: 0
                                      maximum: 9999
                                      description: Right padding, in points
                                      type: number
                                    bottom:
                                      minimum: 0
                                      maximum: 9999
                                      description: Bottom padding, in points
                                      type: number
                                    left:
                                      minimum: 0
                                      maximum: 9999
                                      description: Left padding, in points
                                      type: number
                                    x:
                                      minimum: 0
                                      maximum: 9999
                                      description: >-
                                        Horizontal padding applied to both left
                                        and right when those sides are omitted,
                                        in points
                                      type: number
                                    'y':
                                      minimum: 0
                                      maximum: 9999
                                      description: >-
                                        Vertical padding applied to both top and
                                        bottom when those sides are omitted, in
                                        points
                                      type: number
                                backgroundRadius:
                                  minimum: 0
                                  maximum: 14400
                                  description: >-
                                    Corner radius for each highlight background
                                    segment, in points
                                  type: number
                            subscript:
                              additionalProperties: false
                              type: object
                              properties:
                                color:
                                  description: >-
                                    Color as `#RGB` or `#RRGGBB`, or `inherit`
                                    to use the inherited color
                                  anyOf:
                                    - pattern: ^#([0-9a-fA-F]{3}|[0-9a-fA-F]{6})$
                                      description: Color as `#RGB` or `#RRGGBB`
                                      type: string
                                    - const: inherit
                                      type: string
                                sizeScale:
                                  minimum: 0.4
                                  maximum: 1
                                  description: >-
                                    Optical scale relative to the surrounding
                                    run (fraction of base size)
                                  type: number
                                riseFraction:
                                  minimum: 0
                                  maximum: 1
                                  description: >-
                                    Baseline offset as a fraction of base size
                                    (not PDF points — contrast with code
                                    `baselineShift`). The renderer applies the
                                    sign (up for superscript, down for
                                    subscript)
                                  type: number
                            superscript:
                              additionalProperties: false
                              type: object
                              properties:
                                color:
                                  description: >-
                                    Color as `#RGB` or `#RRGGBB`, or `inherit`
                                    to use the inherited color
                                  anyOf:
                                    - pattern: ^#([0-9a-fA-F]{3}|[0-9a-fA-F]{6})$
                                      description: Color as `#RGB` or `#RRGGBB`
                                      type: string
                                    - const: inherit
                                      type: string
                                sizeScale:
                                  minimum: 0.4
                                  maximum: 1
                                  description: >-
                                    Optical scale relative to the surrounding
                                    run (fraction of base size)
                                  type: number
                                riseFraction:
                                  minimum: 0
                                  maximum: 1
                                  description: >-
                                    Baseline offset as a fraction of base size
                                    (not PDF points — contrast with code
                                    `baselineShift`). The renderer applies the
                                    sign (up for superscript, down for
                                    subscript)
                                  type: number
                            link:
                              additionalProperties: false
                              type: object
                              properties:
                                color:
                                  description: >-
                                    Color as `#RGB` or `#RRGGBB`, or `inherit`
                                    to use the inherited color
                                  anyOf:
                                    - pattern: ^#([0-9a-fA-F]{3}|[0-9a-fA-F]{6})$
                                      description: Color as `#RGB` or `#RRGGBB`
                                      type: string
                                    - const: inherit
                                      type: string
                                decoration:
                                  type: string
                                  enum:
                                    - underline
                                    - lineThrough
                                    - none
                                decorationStyle:
                                  type: string
                                  enum:
                                    - solid
                                    - double
                                    - dotted
                                    - dashed
                                    - wavy
                                decorationColor:
                                  description: >-
                                    Color as `#RGB` or `#RRGGBB`, or `inherit`
                                    to use the inherited color
                                  anyOf:
                                    - pattern: ^#([0-9a-fA-F]{3}|[0-9a-fA-F]{6})$
                                      description: Color as `#RGB` or `#RRGGBB`
                                      type: string
                                    - const: inherit
                                      type: string
                            code:
                              additionalProperties: false
                              description: >-
                                Style overrides for inline code spans (`` `code`
                                ``): font, optical size scale, text color,
                                background fill/padding/border/radius, baseline
                                shift, opacity, and letter spacing. Pass
                                `background: null` or `backgroundBorder: null`
                                to suppress those.
                              type: object
                              properties:
                                font:
                                  pattern: ^\S(.*\S)?$
                                  description: >-
                                    Font slot as `<role>.<variant>` — role is
                                    `body`, `heading`, or a custom
                                    `typography.named` role; variant is one of
                                    regular, italic, bold, boldItalic (see
                                    `enums.fontVariant`; e.g. `heading.bold`).
                                    The shape is checked semantically at
                                    validate, not by this pattern: a misspelled
                                    variant, an undeclared role, a missing
                                    `.variant`, or a value that reads like a
                                    family name is rejected with a `didYouMean`
                                    pointing at the fix (use `set.family` for a
                                    typeface).
                                  type: string
                                sizeScale:
                                  minimum: 0.85
                                  maximum: 0.88
                                  description: >-
                                    Optical scale relative to the surrounding
                                    run. Accepted range is the 0.85–0.88 band;
                                    out-of-range values are rejected
                                  type: number
                                color:
                                  description: >-
                                    Color as `#RGB` or `#RRGGBB`, or `inherit`
                                    to use the inherited color
                                  anyOf:
                                    - pattern: ^#([0-9a-fA-F]{3}|[0-9a-fA-F]{6})$
                                      description: Color as `#RGB` or `#RRGGBB`
                                      type: string
                                    - const: inherit
                                      type: string
                                background:
                                  description: >-
                                    Background fill behind the code run as
                                    `#RGB`/`#RRGGBB`, or `null` to suppress
                                  anyOf:
                                    - pattern: ^#([0-9a-fA-F]{3}|[0-9a-fA-F]{6})$
                                      description: Color as `#RGB` or `#RRGGBB`
                                      type: string
                                    - type: 'null'
                                backgroundPadding:
                                  additionalProperties: false
                                  type: object
                                  properties:
                                    top:
                                      minimum: 0
                                      maximum: 9999
                                      description: Top padding, in points
                                      type: number
                                    right:
                                      minimum: 0
                                      maximum: 9999
                                      description: Right padding, in points
                                      type: number
                                    bottom:
                                      minimum: 0
                                      maximum: 9999
                                      description: Bottom padding, in points
                                      type: number
                                    left:
                                      minimum: 0
                                      maximum: 9999
                                      description: Left padding, in points
                                      type: number
                                    x:
                                      minimum: 0
                                      maximum: 9999
                                      description: >-
                                        Horizontal padding applied to both left
                                        and right when those sides are omitted,
                                        in points
                                      type: number
                                    'y':
                                      minimum: 0
                                      maximum: 9999
                                      description: >-
                                        Vertical padding applied to both top and
                                        bottom when those sides are omitted, in
                                        points
                                      type: number
                                backgroundBorder:
                                  description: >-
                                    Micro-border around each cloned background
                                    segment, or `null` to suppress
                                  anyOf:
                                    - additionalProperties: false
                                      type: object
                                      required:
                                        - width
                                        - color
                                      properties:
                                        width:
                                          minimum: 0.1
                                          maximum: 50
                                          description: Border thickness in points
                                          type: number
                                        color:
                                          pattern: ^#([0-9a-fA-F]{3}|[0-9a-fA-F]{6})$
                                          description: Color as `#RGB` or `#RRGGBB`
                                          type: string
                                        opacity:
                                          minimum: 0
                                          maximum: 1
                                          description: Border opacity from 0 to 1
                                          type: number
                                        dash:
                                          description: >-
                                            Dash pattern as `[dash, gap]` lengths in
                                            points; both `0` is rejected
                                          type: array
                                          items:
                                            minimum: 0
                                            maximum: 1000
                                            type: number
                                          minItems: 2
                                          maxItems: 2
                                    - type: 'null'
                                backgroundRadius:
                                  minimum: 0
                                  maximum: 14400
                                  description: >-
                                    Corner radius for each background segment,
                                    in points
                                  type: number
                                baselineShift:
                                  minimum: -999
                                  maximum: 999
                                  description: >-
                                    PDF text-rise adjustment in points; positive
                                    values raise the code glyphs
                                  type: number
                                opacity:
                                  minimum: 0
                                  maximum: 1
                                  description: Fill opacity from 0 to 1
                                  type: number
                                letterSpacing:
                                  minimum: -100
                                  maximum: 100
                                  description: >-
                                    Extra spacing between code glyphs in points;
                                    negative values tighten
                                  type: number
            omitFirstPage:
              description: >-
                When true, suppresses all furniture on the first page only
                (slots, watermark, and decorations)
              type: boolean
            firstPage:
              additionalProperties: false
              description: >-
                Content for each of the six header and footer positions
                (top/bottom × left/center/right)
              type: object
              properties:
                topLeft:
                  additionalProperties: false
                  type: object
                  required:
                    - content
                  properties:
                    content:
                      minItems: 1
                      maxItems: 16
                      description: Ordered fragments concatenated to fill the slot
                      type: array
                      items:
                        description: >-
                          A header/footer fragment: literal text, an image
                          (logo/letterhead), page numbers, document title,
                          running section title, or section ordinal at a heading
                          depth. An `image` fragment must be the only fragment
                          in its slot — it is not mixed with text fragments.
                        anyOf:
                          - additionalProperties: false
                            type: object
                            required:
                              - kind
                              - value
                            properties:
                              kind:
                                const: text
                                type: string
                              value:
                                minLength: 1
                                maxLength: 256
                                pattern: \S
                                description: Literal text for this fragment
                                type: string
                              style:
                                additionalProperties: false
                                type: object
                                properties:
                                  font:
                                    pattern: ^\S(.*\S)?$
                                    description: >-
                                      Font slot as `<role>.<variant>` — role is
                                      `body`, `heading`, or a custom
                                      `typography.named` role; variant is one of
                                      regular, italic, bold, boldItalic (see
                                      `enums.fontVariant`; e.g. `heading.bold`).
                                      The shape is checked semantically at
                                      validate, not by this pattern: a
                                      misspelled variant, an undeclared role, a
                                      missing `.variant`, or a value that reads
                                      like a family name is rejected with a
                                      `didYouMean` pointing at the fix (use
                                      `set.family` for a typeface).
                                    type: string
                                  size:
                                    minimum: 1
                                    maximum: 999
                                    description: Font size in points
                                    type: number
                                  color:
                                    pattern: ^#([0-9a-fA-F]{3}|[0-9a-fA-F]{6})$
                                    description: Color as `#RGB` or `#RRGGBB`
                                    type: string
                                  opacity:
                                    minimum: 0
                                    maximum: 1
                                    description: Text opacity from 0 to 1
                                    type: number
                          - additionalProperties: false
                            type: object
                            required:
                              - kind
                              - url
                            properties:
                              kind:
                                const: image
                                type: string
                              url:
                                minLength: 1
                                maxLength: 1048576
                                pattern: ^(https://|data:image/)
                                description: >-
                                  HTTPS or base64 `data:image/...` URL of the
                                  header/footer image (typically a brand logo or
                                  letterhead). Fetched under the same fixed,
                                  non-configurable image policy as Markdown
                                  images (private IPs blocked, DNS-rebinding
                                  mitigation, 10 MiB cap); a fetch or decode
                                  failure degrades to a diagnostic and the image
                                  is omitted rather than failing the render.
                                  Rendered as a decorative PDF/UA pagination
                                  artifact (no alt text).
                                type: string
                              width:
                                minimum: 1
                                maximum: 14400
                                description: >-
                                  Rendered image width in PDF points. When
                                  omitted, the intrinsic width is used, clamped
                                  to the slot band width. Set `width` or
                                  `height` to scale a logo down.
                                type: number
                              height:
                                minimum: 1
                                maximum: 14400
                                description: >-
                                  Rendered image height in PDF points. When
                                  omitted, height follows the aspect ratio of
                                  the resolved width.
                                type: number
                              fit:
                                description: >-
                                  Block-only. How the image fills its
                                  width/height box: `none` (intrinsic sizing),
                                  `contain`, `cover`, or `fill`. Used with
                                  `height` for hero-style layouts.
                                anyOf:
                                  - const: none
                                    type: string
                                  - const: contain
                                    type: string
                                  - const: cover
                                    type: string
                                  - const: fill
                                    type: string
                              align:
                                description: >-
                                  Block-only. Horizontal alignment of the image
                                  within the content area: `start` (left edge in
                                  LTR), `center`, or `end` (right edge in LTR).
                                  Ignored for inline images (line flow controls
                                  position).
                                anyOf:
                                  - const: start
                                    type: string
                                  - const: center
                                    type: string
                                  - const: end
                                    type: string
                              opacity:
                                minimum: 0
                                maximum: 1
                                description: Image opacity from 0 to 1.
                                type: number
                          - additionalProperties: false
                            type: object
                            required:
                              - kind
                            properties:
                              kind:
                                const: pageNumber
                                type: string
                              style:
                                additionalProperties: false
                                type: object
                                properties:
                                  font:
                                    pattern: ^\S(.*\S)?$
                                    description: >-
                                      Font slot as `<role>.<variant>` — role is
                                      `body`, `heading`, or a custom
                                      `typography.named` role; variant is one of
                                      regular, italic, bold, boldItalic (see
                                      `enums.fontVariant`; e.g. `heading.bold`).
                                      The shape is checked semantically at
                                      validate, not by this pattern: a
                                      misspelled variant, an undeclared role, a
                                      missing `.variant`, or a value that reads
                                      like a family name is rejected with a
                                      `didYouMean` pointing at the fix (use
                                      `set.family` for a typeface).
                                    type: string
                                  size:
                                    minimum: 1
                                    maximum: 999
                                    description: Font size in points
                                    type: number
                                  color:
                                    pattern: ^#([0-9a-fA-F]{3}|[0-9a-fA-F]{6})$
                                    description: Color as `#RGB` or `#RRGGBB`
                                    type: string
                                  opacity:
                                    minimum: 0
                                    maximum: 1
                                    description: Text opacity from 0 to 1
                                    type: number
                          - additionalProperties: false
                            type: object
                            required:
                              - kind
                            properties:
                              kind:
                                const: totalPages
                                type: string
                              style:
                                additionalProperties: false
                                type: object
                                properties:
                                  font:
                                    pattern: ^\S(.*\S)?$
                                    description: >-
                                      Font slot as `<role>.<variant>` — role is
                                      `body`, `heading`, or a custom
                                      `typography.named` role; variant is one of
                                      regular, italic, bold, boldItalic (see
                                      `enums.fontVariant`; e.g. `heading.bold`).
                                      The shape is checked semantically at
                                      validate, not by this pattern: a
                                      misspelled variant, an undeclared role, a
                                      missing `.variant`, or a value that reads
                                      like a family name is rejected with a
                                      `didYouMean` pointing at the fix (use
                                      `set.family` for a typeface).
                                    type: string
                                  size:
                                    minimum: 1
                                    maximum: 999
                                    description: Font size in points
                                    type: number
                                  color:
                                    pattern: ^#([0-9a-fA-F]{3}|[0-9a-fA-F]{6})$
                                    description: Color as `#RGB` or `#RRGGBB`
                                    type: string
                                  opacity:
                                    minimum: 0
                                    maximum: 1
                                    description: Text opacity from 0 to 1
                                    type: number
                          - additionalProperties: false
                            type: object
                            required:
                              - kind
                            properties:
                              kind:
                                const: documentTitle
                                type: string
                              style:
                                additionalProperties: false
                                type: object
                                properties:
                                  font:
                                    pattern: ^\S(.*\S)?$
                                    description: >-
                                      Font slot as `<role>.<variant>` — role is
                                      `body`, `heading`, or a custom
                                      `typography.named` role; variant is one of
                                      regular, italic, bold, boldItalic (see
                                      `enums.fontVariant`; e.g. `heading.bold`).
                                      The shape is checked semantically at
                                      validate, not by this pattern: a
                                      misspelled variant, an undeclared role, a
                                      missing `.variant`, or a value that reads
                                      like a family name is rejected with a
                                      `didYouMean` pointing at the fix (use
                                      `set.family` for a typeface).
                                    type: string
                                  size:
                                    minimum: 1
                                    maximum: 999
                                    description: Font size in points
                                    type: number
                                  color:
                                    pattern: ^#([0-9a-fA-F]{3}|[0-9a-fA-F]{6})$
                                    description: Color as `#RGB` or `#RRGGBB`
                                    type: string
                                  opacity:
                                    minimum: 0
                                    maximum: 1
                                    description: Text opacity from 0 to 1
                                    type: number
                          - additionalProperties: false
                            type: object
                            required:
                              - kind
                            properties:
                              kind:
                                const: sectionTitle
                                type: string
                              depth:
                                description: Heading depth from 1 (top level) to 6
                                anyOf:
                                  - const: 1
                                    type: number
                                  - const: 2
                                    type: number
                                  - const: 3
                                    type: number
                                  - const: 4
                                    type: number
                                  - const: 5
                                    type: number
                                  - const: 6
                                    type: number
                              style:
                                additionalProperties: false
                                type: object
                                properties:
                                  font:
                                    pattern: ^\S(.*\S)?$
                                    description: >-
                                      Font slot as `<role>.<variant>` — role is
                                      `body`, `heading`, or a custom
                                      `typography.named` role; variant is one of
                                      regular, italic, bold, boldItalic (see
                                      `enums.fontVariant`; e.g. `heading.bold`).
                                      The shape is checked semantically at
                                      validate, not by this pattern: a
                                      misspelled variant, an undeclared role, a
                                      missing `.variant`, or a value that reads
                                      like a family name is rejected with a
                                      `didYouMean` pointing at the fix (use
                                      `set.family` for a typeface).
                                    type: string
                                  size:
                                    minimum: 1
                                    maximum: 999
                                    description: Font size in points
                                    type: number
                                  color:
                                    pattern: ^#([0-9a-fA-F]{3}|[0-9a-fA-F]{6})$
                                    description: Color as `#RGB` or `#RRGGBB`
                                    type: string
                                  opacity:
                                    minimum: 0
                                    maximum: 1
                                    description: Text opacity from 0 to 1
                                    type: number
                          - additionalProperties: false
                            type: object
                            required:
                              - kind
                            properties:
                              kind:
                                const: sectionIndex
                                type: string
                              depth:
                                description: Heading depth from 1 (top level) to 6
                                anyOf:
                                  - const: 1
                                    type: number
                                  - const: 2
                                    type: number
                                  - const: 3
                                    type: number
                                  - const: 4
                                    type: number
                                  - const: 5
                                    type: number
                                  - const: 6
                                    type: number
                              format:
                                description: >-
                                  Section ordinal format: `twoDigit` (at least
                                  two digits: 01, 12; ordinals ≥ 100 render in
                                  full) or `decimal` (1, 2, …)
                                anyOf:
                                  - const: twoDigit
                                    type: string
                                  - const: decimal
                                    type: string
                              style:
                                additionalProperties: false
                                type: object
                                properties:
                                  font:
                                    pattern: ^\S(.*\S)?$
                                    description: >-
                                      Font slot as `<role>.<variant>` — role is
                                      `body`, `heading`, or a custom
                                      `typography.named` role; variant is one of
                                      regular, italic, bold, boldItalic (see
                                      `enums.fontVariant`; e.g. `heading.bold`).
                                      The shape is checked semantically at
                                      validate, not by this pattern: a
                                      misspelled variant, an undeclared role, a
                                      missing `.variant`, or a value that reads
                                      like a family name is rejected with a
                                      `didYouMean` pointing at the fix (use
                                      `set.family` for a typeface).
                                    type: string
                                  size:
                                    minimum: 1
                                    maximum: 999
                                    description: Font size in points
                                    type: number
                                  color:
                                    pattern: ^#([0-9a-fA-F]{3}|[0-9a-fA-F]{6})$
                                    description: Color as `#RGB` or `#RRGGBB`
                                    type: string
                                  opacity:
                                    minimum: 0
                                    maximum: 1
                                    description: Text opacity from 0 to 1
                                    type: number
                    style:
                      additionalProperties: false
                      type: object
                      properties:
                        font:
                          pattern: ^\S(.*\S)?$
                          description: >-
                            Font slot as `<role>.<variant>` — role is `body`,
                            `heading`, or a custom `typography.named` role;
                            variant is one of regular, italic, bold, boldItalic
                            (see `enums.fontVariant`; e.g. `heading.bold`). The
                            shape is checked semantically at validate, not by
                            this pattern: a misspelled variant, an undeclared
                            role, a missing `.variant`, or a value that reads
                            like a family name is rejected with a `didYouMean`
                            pointing at the fix (use `set.family` for a
                            typeface).
                          type: string
                        family:
                          description: >-
                            A text family: a hosted weighted key, a declared
                            Google Fonts display name, or a `typography.named`
                            role reference
                          anyOf:
                            - const: inter
                              type: string
                            - const: lora
                              type: string
                            - const: source-serif-4
                              type: string
                            - pattern: ^[A-Za-z][A-Za-z0-9 ]{0,63}$
                              description: >-
                                Google Fonts display name from the declared pool
                                (e.g. `Playfair Display`)
                              type: string
                            - pattern: ^[a-z][a-z0-9-]{0,15}$
                              description: >-
                                Reference to a custom role declared in
                                `typography.named` (e.g. `display`)
                              type: string
                        size:
                          minimum: 1
                          maximum: 999
                          description: Font size in points
                          type: number
                        color:
                          pattern: ^#([0-9a-fA-F]{3}|[0-9a-fA-F]{6})$
                          description: Color as `#RGB` or `#RRGGBB`
                          type: string
                        spaceBefore:
                          minimum: 0
                          maximum: 9999
                          description: Vertical space reserved above the block, in points
                          type: number
                        spaceAfter:
                          minimum: 0
                          maximum: 9999
                          description: Vertical space reserved below the block, in points
                          type: number
                        lineHeight:
                          minimum: 1
                          maximum: 10
                          description: Line height as a multiple of the font size
                          type: number
                        align:
                          type: string
                          enum:
                            - left
                            - right
                            - center
                            - justify
                        letterSpacing:
                          minimum: -100
                          maximum: 100
                          description: >-
                            Extra spacing between characters in points; negative
                            values tighten
                          type: number
                        opacity:
                          minimum: 0
                          maximum: 1
                          description: Text opacity from 0 to 1
                          type: number
                        inline:
                          additionalProperties: false
                          type: object
                          properties:
                            strong:
                              additionalProperties: false
                              type: object
                              properties:
                                color:
                                  description: >-
                                    Color as `#RGB` or `#RRGGBB`, or `inherit`
                                    to use the inherited color
                                  anyOf:
                                    - pattern: ^#([0-9a-fA-F]{3}|[0-9a-fA-F]{6})$
                                      description: Color as `#RGB` or `#RRGGBB`
                                      type: string
                                    - const: inherit
                                      type: string
                            emphasis:
                              additionalProperties: false
                              type: object
                              properties:
                                color:
                                  description: >-
                                    Color as `#RGB` or `#RRGGBB`, or `inherit`
                                    to use the inherited color
                                  anyOf:
                                    - pattern: ^#([0-9a-fA-F]{3}|[0-9a-fA-F]{6})$
                                      description: Color as `#RGB` or `#RRGGBB`
                                      type: string
                                    - const: inherit
                                      type: string
                            delete:
                              additionalProperties: false
                              type: object
                              properties:
                                color:
                                  description: >-
                                    Color as `#RGB` or `#RRGGBB`, or `inherit`
                                    to use the inherited color
                                  anyOf:
                                    - pattern: ^#([0-9a-fA-F]{3}|[0-9a-fA-F]{6})$
                                      description: Color as `#RGB` or `#RRGGBB`
                                      type: string
                                    - const: inherit
                                      type: string
                                decorationStyle:
                                  type: string
                                  enum:
                                    - solid
                                    - double
                                    - dotted
                                    - dashed
                                    - wavy
                                decorationColor:
                                  description: >-
                                    Color as `#RGB` or `#RRGGBB`, or `inherit`
                                    to use the inherited color
                                  anyOf:
                                    - pattern: ^#([0-9a-fA-F]{3}|[0-9a-fA-F]{6})$
                                      description: Color as `#RGB` or `#RRGGBB`
                                      type: string
                                    - const: inherit
                                      type: string
                            mark:
                              additionalProperties: false
                              type: object
                              properties:
                                color:
                                  description: >-
                                    Color as `#RGB` or `#RRGGBB`, or `inherit`
                                    to use the inherited color
                                  anyOf:
                                    - pattern: ^#([0-9a-fA-F]{3}|[0-9a-fA-F]{6})$
                                      description: Color as `#RGB` or `#RRGGBB`
                                      type: string
                                    - const: inherit
                                      type: string
                                background:
                                  description: >-
                                    Background fill behind highlighted text as
                                    `#RGB`/`#RRGGBB`, or `null` to suppress
                                  anyOf:
                                    - pattern: ^#([0-9a-fA-F]{3}|[0-9a-fA-F]{6})$
                                      description: Color as `#RGB` or `#RRGGBB`
                                      type: string
                                    - type: 'null'
                                backgroundPadding:
                                  additionalProperties: false
                                  type: object
                                  properties:
                                    top:
                                      minimum: 0
                                      maximum: 9999
                                      description: Top padding, in points
                                      type: number
                                    right:
                                      minimum: 0
                                      maximum: 9999
                                      description: Right padding, in points
                                      type: number
                                    bottom:
                                      minimum: 0
                                      maximum: 9999
                                      description: Bottom padding, in points
                                      type: number
                                    left:
                                      minimum: 0
                                      maximum: 9999
                                      description: Left padding, in points
                                      type: number
                                    x:
                                      minimum: 0
                                      maximum: 9999
                                      description: >-
                                        Horizontal padding applied to both left
                                        and right when those sides are omitted,
                                        in points
                                      type: number
                                    'y':
                                      minimum: 0
                                      maximum: 9999
                                      description: >-
                                        Vertical padding applied to both top and
                                        bottom when those sides are omitted, in
                                        points
                                      type: number
                                backgroundRadius:
                                  minimum: 0
                                  maximum: 14400
                                  description: >-
                                    Corner radius for each highlight background
                                    segment, in points
                                  type: number
                            subscript:
                              additionalProperties: false
                              type: object
                              properties:
                                color:
                                  description: >-
                                    Color as `#RGB` or `#RRGGBB`, or `inherit`
                                    to use the inherited color
                                  anyOf:
                                    - pattern: ^#([0-9a-fA-F]{3}|[0-9a-fA-F]{6})$
                                      description: Color as `#RGB` or `#RRGGBB`
                                      type: string
                                    - const: inherit
                                      type: string
                                sizeScale:
                                  minimum: 0.4
                                  maximum: 1
                                  description: >-
                                    Optical scale relative to the surrounding
                                    run (fraction of base size)
                                  type: number
                                riseFraction:
                                  minimum: 0
                                  maximum: 1
                                  description: >-
                                    Baseline offset as a fraction of base size
                                    (not PDF points — contrast with code
                                    `baselineShift`). The renderer applies the
                                    sign (up for superscript, down for
                                    subscript)
                                  type: number
                            superscript:
                              additionalProperties: false
                              type: object
                              properties:
                                color:
                                  description: >-
                                    Color as `#RGB` or `#RRGGBB`, or `inherit`
                                    to use the inherited color
                                  anyOf:
                                    - pattern: ^#([0-9a-fA-F]{3}|[0-9a-fA-F]{6})$
                                      description: Color as `#RGB` or `#RRGGBB`
                                      type: string
                                    - const: inherit
                                      type: string
                                sizeScale:
                                  minimum: 0.4
                                  maximum: 1
                                  description: >-
                                    Optical scale relative to the surrounding
                                    run (fraction of base size)
                                  type: number
                                riseFraction:
                                  minimum: 0
                                  maximum: 1
                                  description: >-
                                    Baseline offset as a fraction of base size
                                    (not PDF points — contrast with code
                                    `baselineShift`). The renderer applies the
                                    sign (up for superscript, down for
                                    subscript)
                                  type: number
                            link:
                              additionalProperties: false
                              type: object
                              properties:
                                color:
                                  description: >-
                                    Color as `#RGB` or `#RRGGBB`, or `inherit`
                                    to use the inherited color
                                  anyOf:
                                    - pattern: ^#([0-9a-fA-F]{3}|[0-9a-fA-F]{6})$
                                      description: Color as `#RGB` or `#RRGGBB`
                                      type: string
                                    - const: inherit
                                      type: string
                                decoration:
                                  type: string
                                  enum:
                                    - underline
                                    - lineThrough
                                    - none
                                decorationStyle:
                                  type: string
                                  enum:
                                    - solid
                                    - double
                                    - dotted
                                    - dashed
                                    - wavy
                                decorationColor:
                                  description: >-
                                    Color as `#RGB` or `#RRGGBB`, or `inherit`
                                    to use the inherited color
                                  anyOf:
                                    - pattern: ^#([0-9a-fA-F]{3}|[0-9a-fA-F]{6})$
                                      description: Color as `#RGB` or `#RRGGBB`
                                      type: string
                                    - const: inherit
                                      type: string
                            code:
                              additionalProperties: false
                              description: >-
                                Style overrides for inline code spans (`` `code`
                                ``): font, optical size scale, text color,
                                background fill/padding/border/radius, baseline
                                shift, opacity, and letter spacing. Pass
                                `background: null` or `backgroundBorder: null`
                                to suppress those.
                              type: object
                              properties:
                                font:
                                  pattern: ^\S(.*\S)?$
                                  description: >-
                                    Font slot as `<role>.<variant>` — role is
                                    `body`, `heading`, or a custom
                                    `typography.named` role; variant is one of
                                    regular, italic, bold, boldItalic (see
                                    `enums.fontVariant`; e.g. `heading.bold`).
                                    The shape is checked semantically at
                                    validate, not by this pattern: a misspelled
                                    variant, an undeclared role, a missing
                                    `.variant`, or a value that reads like a
                                    family name is rejected with a `didYouMean`
                                    pointing at the fix (use `set.family` for a
                                    typeface).
                                  type: string
                                sizeScale:
                                  minimum: 0.85
                                  maximum: 0.88
                                  description: >-
                                    Optical scale relative to the surrounding
                                    run. Accepted range is the 0.85–0.88 band;
                                    out-of-range values are rejected
                                  type: number
                                color:
                                  description: >-
                                    Color as `#RGB` or `#RRGGBB`, or `inherit`
                                    to use the inherited color
                                  anyOf:
                                    - pattern: ^#([0-9a-fA-F]{3}|[0-9a-fA-F]{6})$
                                      description: Color as `#RGB` or `#RRGGBB`
                                      type: string
                                    - const: inherit
                                      type: string
                                background:
                                  description: >-
                                    Background fill behind the code run as
                                    `#RGB`/`#RRGGBB`, or `null` to suppress
                                  anyOf:
                                    - pattern: ^#([0-9a-fA-F]{3}|[0-9a-fA-F]{6})$
                                      description: Color as `#RGB` or `#RRGGBB`
                                      type: string
                                    - type: 'null'
                                backgroundPadding:
                                  additionalProperties: false
                                  type: object
                                  properties:
                                    top:
                                      minimum: 0
                                      maximum: 9999
                                      description: Top padding, in points
                                      type: number
                                    right:
                                      minimum: 0
                                      maximum: 9999
                                      description: Right padding, in points
                                      type: number
                                    bottom:
                                      minimum: 0
                                      maximum: 9999
                                      description: Bottom padding, in points
                                      type: number
                                    left:
                                      minimum: 0
                                      maximum: 9999
                                      description: Left padding, in points
                                      type: number
                                    x:
                                      minimum: 0
                                      maximum: 9999
                                      description: >-
                                        Horizontal padding applied to both left
                                        and right when those sides are omitted,
                                        in points
                                      type: number
                                    'y':
                                      minimum: 0
                                      maximum: 9999
                                      description: >-
                                        Vertical padding applied to both top and
                                        bottom when those sides are omitted, in
                                        points
                                      type: number
                                backgroundBorder:
                                  description: >-
                                    Micro-border around each cloned background
                                    segment, or `null` to suppress
                                  anyOf:
                                    - additionalProperties: false
                                      type: object
                                      required:
                                        - width
                                        - color
                                      properties:
                                        width:
                                          minimum: 0.1
                                          maximum: 50
                                          description: Border thickness in points
                                          type: number
                                        color:
                                          pattern: ^#([0-9a-fA-F]{3}|[0-9a-fA-F]{6})$
                                          description: Color as `#RGB` or `#RRGGBB`
                                          type: string
                                        opacity:
                                          minimum: 0
                                          maximum: 1
                                          description: Border opacity from 0 to 1
                                          type: number
                                        dash:
                                          description: >-
                                            Dash pattern as `[dash, gap]` lengths in
                                            points; both `0` is rejected
                                          type: array
                                          items:
                                            minimum: 0
                                            maximum: 1000
                                            type: number
                                          minItems: 2
                                          maxItems: 2
                                    - type: 'null'
                                backgroundRadius:
                                  minimum: 0
                                  maximum: 14400
                                  description: >-
                                    Corner radius for each background segment,
                                    in points
                                  type: number
                                baselineShift:
                                  minimum: -999
                                  maximum: 999
                                  description: >-
                                    PDF text-rise adjustment in points; positive
                                    values raise the code glyphs
                                  type: number
                                opacity:
                                  minimum: 0
                                  maximum: 1
                                  description: Fill opacity from 0 to 1
                                  type: number
                                letterSpacing:
                                  minimum: -100
                                  maximum: 100
                                  description: >-
                                    Extra spacing between code glyphs in points;
                                    negative values tighten
                                  type: number
                topCenter:
                  additionalProperties: false
                  type: object
                  required:
                    - content
                  properties:
                    content:
                      minItems: 1
                      maxItems: 16
                      description: Ordered fragments concatenated to fill the slot
                      type: array
                      items:
                        description: >-
                          A header/footer fragment: literal text, an image
                          (logo/letterhead), page numbers, document title,
                          running section title, or section ordinal at a heading
                          depth. An `image` fragment must be the only fragment
                          in its slot — it is not mixed with text fragments.
                        anyOf:
                          - additionalProperties: false
                            type: object
                            required:
                              - kind
                              - value
                            properties:
                              kind:
                                const: text
                                type: string
                              value:
                                minLength: 1
                                maxLength: 256
                                pattern: \S
                                description: Literal text for this fragment
                                type: string
                              style:
                                additionalProperties: false
                                type: object
                                properties:
                                  font:
                                    pattern: ^\S(.*\S)?$
                                    description: >-
                                      Font slot as `<role>.<variant>` — role is
                                      `body`, `heading`, or a custom
                                      `typography.named` role; variant is one of
                                      regular, italic, bold, boldItalic (see
                                      `enums.fontVariant`; e.g. `heading.bold`).
                                      The shape is checked semantically at
                                      validate, not by this pattern: a
                                      misspelled variant, an undeclared role, a
                                      missing `.variant`, or a value that reads
                                      like a family name is rejected with a
                                      `didYouMean` pointing at the fix (use
                                      `set.family` for a typeface).
                                    type: string
                                  size:
                                    minimum: 1
                                    maximum: 999
                                    description: Font size in points
                                    type: number
                                  color:
                                    pattern: ^#([0-9a-fA-F]{3}|[0-9a-fA-F]{6})$
                                    description: Color as `#RGB` or `#RRGGBB`
                                    type: string
                                  opacity:
                                    minimum: 0
                                    maximum: 1
                                    description: Text opacity from 0 to 1
                                    type: number
                          - additionalProperties: false
                            type: object
                            required:
                              - kind
                              - url
                            properties:
                              kind:
                                const: image
                                type: string
                              url:
                                minLength: 1
                                maxLength: 1048576
                                pattern: ^(https://|data:image/)
                                description: >-
                                  HTTPS or base64 `data:image/...` URL of the
                                  header/footer image (typically a brand logo or
                                  letterhead). Fetched under the same fixed,
                                  non-configurable image policy as Markdown
                                  images (private IPs blocked, DNS-rebinding
                                  mitigation, 10 MiB cap); a fetch or decode
                                  failure degrades to a diagnostic and the image
                                  is omitted rather than failing the render.
                                  Rendered as a decorative PDF/UA pagination
                                  artifact (no alt text).
                                type: string
                              width:
                                minimum: 1
                                maximum: 14400
                                description: >-
                                  Rendered image width in PDF points. When
                                  omitted, the intrinsic width is used, clamped
                                  to the slot band width. Set `width` or
                                  `height` to scale a logo down.
                                type: number
                              height:
                                minimum: 1
                                maximum: 14400
                                description: >-
                                  Rendered image height in PDF points. When
                                  omitted, height follows the aspect ratio of
                                  the resolved width.
                                type: number
                              fit:
                                description: >-
                                  Block-only. How the image fills its
                                  width/height box: `none` (intrinsic sizing),
                                  `contain`, `cover`, or `fill`. Used with
                                  `height` for hero-style layouts.
                                anyOf:
                                  - const: none
                                    type: string
                                  - const: contain
                                    type: string
                                  - const: cover
                                    type: string
                                  - const: fill
                                    type: string
                              align:
                                description: >-
                                  Block-only. Horizontal alignment of the image
                                  within the content area: `start` (left edge in
                                  LTR), `center`, or `end` (right edge in LTR).
                                  Ignored for inline images (line flow controls
                                  position).
                                anyOf:
                                  - const: start
                                    type: string
                                  - const: center
                                    type: string
                                  - const: end
                                    type: string
                              opacity:
                                minimum: 0
                                maximum: 1
                                description: Image opacity from 0 to 1.
                                type: number
                          - additionalProperties: false
                            type: object
                            required:
                              - kind
                            properties:
                              kind:
                                const: pageNumber
                                type: string
                              style:
                                additionalProperties: false
                                type: object
                                properties:
                                  font:
                                    pattern: ^\S(.*\S)?$
                                    description: >-
                                      Font slot as `<role>.<variant>` — role is
                                      `body`, `heading`, or a custom
                                      `typography.named` role; variant is one of
                                      regular, italic, bold, boldItalic (see
                                      `enums.fontVariant`; e.g. `heading.bold`).
                                      The shape is checked semantically at
                                      validate, not by this pattern: a
                                      misspelled variant, an undeclared role, a
                                      missing `.variant`, or a value that reads
                                      like a family name is rejected with a
                                      `didYouMean` pointing at the fix (use
                                      `set.family` for a typeface).
                                    type: string
                                  size:
                                    minimum: 1
                                    maximum: 999
                                    description: Font size in points
                                    type: number
                                  color:
                                    pattern: ^#([0-9a-fA-F]{3}|[0-9a-fA-F]{6})$
                                    description: Color as `#RGB` or `#RRGGBB`
                                    type: string
                                  opacity:
                                    minimum: 0
                                    maximum: 1
                                    description: Text opacity from 0 to 1
                                    type: number
                          - additionalProperties: false
                            type: object
                            required:
                              - kind
                            properties:
                              kind:
                                const: totalPages
                                type: string
                              style:
                                additionalProperties: false
                                type: object
                                properties:
                                  font:
                                    pattern: ^\S(.*\S)?$
                                    description: >-
                                      Font slot as `<role>.<variant>` — role is
                                      `body`, `heading`, or a custom
                                      `typography.named` role; variant is one of
                                      regular, italic, bold, boldItalic (see
                                      `enums.fontVariant`; e.g. `heading.bold`).
                                      The shape is checked semantically at
                                      validate, not by this pattern: a
                                      misspelled variant, an undeclared role, a
                                      missing `.variant`, or a value that reads
                                      like a family name is rejected with a
                                      `didYouMean` pointing at the fix (use
                                      `set.family` for a typeface).
                                    type: string
                                  size:
                                    minimum: 1
                                    maximum: 999
                                    description: Font size in points
                                    type: number
                                  color:
                                    pattern: ^#([0-9a-fA-F]{3}|[0-9a-fA-F]{6})$
                                    description: Color as `#RGB` or `#RRGGBB`
                                    type: string
                                  opacity:
                                    minimum: 0
                                    maximum: 1
                                    description: Text opacity from 0 to 1
                                    type: number
                          - additionalProperties: false
                            type: object
                            required:
                              - kind
                            properties:
                              kind:
                                const: documentTitle
                                type: string
                              style:
                                additionalProperties: false
                                type: object
                                properties:
                                  font:
                                    pattern: ^\S(.*\S)?$
                                    description: >-
                                      Font slot as `<role>.<variant>` — role is
                                      `body`, `heading`, or a custom
                                      `typography.named` role; variant is one of
                                      regular, italic, bold, boldItalic (see
                                      `enums.fontVariant`; e.g. `heading.bold`).
                                      The shape is checked semantically at
                                      validate, not by this pattern: a
                                      misspelled variant, an undeclared role, a
                                      missing `.variant`, or a value that reads
                                      like a family name is rejected with a
                                      `didYouMean` pointing at the fix (use
                                      `set.family` for a typeface).
                                    type: string
                                  size:
                                    minimum: 1
                                    maximum: 999
                                    description: Font size in points
                                    type: number
                                  color:
                                    pattern: ^#([0-9a-fA-F]{3}|[0-9a-fA-F]{6})$
                                    description: Color as `#RGB` or `#RRGGBB`
                                    type: string
                                  opacity:
                                    minimum: 0
                                    maximum: 1
                                    description: Text opacity from 0 to 1
                                    type: number
                          - additionalProperties: false
                            type: object
                            required:
                              - kind
                            properties:
                              kind:
                                const: sectionTitle
                                type: string
                              depth:
                                description: Heading depth from 1 (top level) to 6
                                anyOf:
                                  - const: 1
                                    type: number
                                  - const: 2
                                    type: number
                                  - const: 3
                                    type: number
                                  - const: 4
                                    type: number
                                  - const: 5
                                    type: number
                                  - const: 6
                                    type: number
                              style:
                                additionalProperties: false
                                type: object
                                properties:
                                  font:
                                    pattern: ^\S(.*\S)?$
                                    description: >-
                                      Font slot as `<role>.<variant>` — role is
                                      `body`, `heading`, or a custom
                                      `typography.named` role; variant is one of
                                      regular, italic, bold, boldItalic (see
                                      `enums.fontVariant`; e.g. `heading.bold`).
                                      The shape is checked semantically at
                                      validate, not by this pattern: a
                                      misspelled variant, an undeclared role, a
                                      missing `.variant`, or a value that reads
                                      like a family name is rejected with a
                                      `didYouMean` pointing at the fix (use
                                      `set.family` for a typeface).
                                    type: string
                                  size:
                                    minimum: 1
                                    maximum: 999
                                    description: Font size in points
                                    type: number
                                  color:
                                    pattern: ^#([0-9a-fA-F]{3}|[0-9a-fA-F]{6})$
                                    description: Color as `#RGB` or `#RRGGBB`
                                    type: string
                                  opacity:
                                    minimum: 0
                                    maximum: 1
                                    description: Text opacity from 0 to 1
                                    type: number
                          - additionalProperties: false
                            type: object
                            required:
                              - kind
                            properties:
                              kind:
                                const: sectionIndex
                                type: string
                              depth:
                                description: Heading depth from 1 (top level) to 6
                                anyOf:
                                  - const: 1
                                    type: number
                                  - const: 2
                                    type: number
                                  - const: 3
                                    type: number
                                  - const: 4
                                    type: number
                                  - const: 5
                                    type: number
                                  - const: 6
                                    type: number
                              format:
                                description: >-
                                  Section ordinal format: `twoDigit` (at least
                                  two digits: 01, 12; ordinals ≥ 100 render in
                                  full) or `decimal` (1, 2, …)
                                anyOf:
                                  - const: twoDigit
                                    type: string
                                  - const: decimal
                                    type: string
                              style:
                                additionalProperties: false
                                type: object
                                properties:
                                  font:
                                    pattern: ^\S(.*\S)?$
                                    description: >-
                                      Font slot as `<role>.<variant>` — role is
                                      `body`, `heading`, or a custom
                                      `typography.named` role; variant is one of
                                      regular, italic, bold, boldItalic (see
                                      `enums.fontVariant`; e.g. `heading.bold`).
                                      The shape is checked semantically at
                                      validate, not by this pattern: a
                                      misspelled variant, an undeclared role, a
                                      missing `.variant`, or a value that reads
                                      like a family name is rejected with a
                                      `didYouMean` pointing at the fix (use
                                      `set.family` for a typeface).
                                    type: string
                                  size:
                                    minimum: 1
                                    maximum: 999
                                    description: Font size in points
                                    type: number
                                  color:
                                    pattern: ^#([0-9a-fA-F]{3}|[0-9a-fA-F]{6})$
                                    description: Color as `#RGB` or `#RRGGBB`
                                    type: string
                                  opacity:
                                    minimum: 0
                                    maximum: 1
                                    description: Text opacity from 0 to 1
                                    type: number
                    style:
                      additionalProperties: false
                      type: object
                      properties:
                        font:
                          pattern: ^\S(.*\S)?$
                          description: >-
                            Font slot as `<role>.<variant>` — role is `body`,
                            `heading`, or a custom `typography.named` role;
                            variant is one of regular, italic, bold, boldItalic
                            (see `enums.fontVariant`; e.g. `heading.bold`). The
                            shape is checked semantically at validate, not by
                            this pattern: a misspelled variant, an undeclared
                            role, a missing `.variant`, or a value that reads
                            like a family name is rejected with a `didYouMean`
                            pointing at the fix (use `set.family` for a
                            typeface).
                          type: string
                        family:
                          description: >-
                            A text family: a hosted weighted key, a declared
                            Google Fonts display name, or a `typography.named`
                            role reference
                          anyOf:
                            - const: inter
                              type: string
                            - const: lora
                              type: string
                            - const: source-serif-4
                              type: string
                            - pattern: ^[A-Za-z][A-Za-z0-9 ]{0,63}$
                              description: >-
                                Google Fonts display name from the declared pool
                                (e.g. `Playfair Display`)
                              type: string
                            - pattern: ^[a-z][a-z0-9-]{0,15}$
                              description: >-
                                Reference to a custom role declared in
                                `typography.named` (e.g. `display`)
                              type: string
                        size:
                          minimum: 1
                          maximum: 999
                          description: Font size in points
                          type: number
                        color:
                          pattern: ^#([0-9a-fA-F]{3}|[0-9a-fA-F]{6})$
                          description: Color as `#RGB` or `#RRGGBB`
                          type: string
                        spaceBefore:
                          minimum: 0
                          maximum: 9999
                          description: Vertical space reserved above the block, in points
                          type: number
                        spaceAfter:
                          minimum: 0
                          maximum: 9999
                          description: Vertical space reserved below the block, in points
                          type: number
                        lineHeight:
                          minimum: 1
                          maximum: 10
                          description: Line height as a multiple of the font size
                          type: number
                        align:
                          type: string
                          enum:
                            - left
                            - right
                            - center
                            - justify
                        letterSpacing:
                          minimum: -100
                          maximum: 100
                          description: >-
                            Extra spacing between characters in points; negative
                            values tighten
                          type: number
                        opacity:
                          minimum: 0
                          maximum: 1
                          description: Text opacity from 0 to 1
                          type: number
                        inline:
                          additionalProperties: false
                          type: object
                          properties:
                            strong:
                              additionalProperties: false
                              type: object
                              properties:
                                color:
                                  description: >-
                                    Color as `#RGB` or `#RRGGBB`, or `inherit`
                                    to use the inherited color
                                  anyOf:
                                    - pattern: ^#([0-9a-fA-F]{3}|[0-9a-fA-F]{6})$
                                      description: Color as `#RGB` or `#RRGGBB`
                                      type: string
                                    - const: inherit
                                      type: string
                            emphasis:
                              additionalProperties: false
                              type: object
                              properties:
                                color:
                                  description: >-
                                    Color as `#RGB` or `#RRGGBB`, or `inherit`
                                    to use the inherited color
                                  anyOf:
                                    - pattern: ^#([0-9a-fA-F]{3}|[0-9a-fA-F]{6})$
                                      description: Color as `#RGB` or `#RRGGBB`
                                      type: string
                                    - const: inherit
                                      type: string
                            delete:
                              additionalProperties: false
                              type: object
                              properties:
                                color:
                                  description: >-
                                    Color as `#RGB` or `#RRGGBB`, or `inherit`
                                    to use the inherited color
                                  anyOf:
                                    - pattern: ^#([0-9a-fA-F]{3}|[0-9a-fA-F]{6})$
                                      description: Color as `#RGB` or `#RRGGBB`
                                      type: string
                                    - const: inherit
                                      type: string
                                decorationStyle:
                                  type: string
                                  enum:
                                    - solid
                                    - double
                                    - dotted
                                    - dashed
                                    - wavy
                                decorationColor:
                                  description: >-
                                    Color as `#RGB` or `#RRGGBB`, or `inherit`
                                    to use the inherited color
                                  anyOf:
                                    - pattern: ^#([0-9a-fA-F]{3}|[0-9a-fA-F]{6})$
                                      description: Color as `#RGB` or `#RRGGBB`
                                      type: string
                                    - const: inherit
                                      type: string
                            mark:
                              additionalProperties: false
                              type: object
                              properties:
                                color:
                                  description: >-
                                    Color as `#RGB` or `#RRGGBB`, or `inherit`
                                    to use the inherited color
                                  anyOf:
                                    - pattern: ^#([0-9a-fA-F]{3}|[0-9a-fA-F]{6})$
                                      description: Color as `#RGB` or `#RRGGBB`
                                      type: string
                                    - const: inherit
                                      type: string
                                background:
                                  description: >-
                                    Background fill behind highlighted text as
                                    `#RGB`/`#RRGGBB`, or `null` to suppress
                                  anyOf:
                                    - pattern: ^#([0-9a-fA-F]{3}|[0-9a-fA-F]{6})$
                                      description: Color as `#RGB` or `#RRGGBB`
                                      type: string
                                    - type: 'null'
                                backgroundPadding:
                                  additionalProperties: false
                                  type: object
                                  properties:
                                    top:
                                      minimum: 0
                                      maximum: 9999
                                      description: Top padding, in points
                                      type: number
                                    right:
                                      minimum: 0
                                      maximum: 9999
                                      description: Right padding, in points
                                      type: number
                                    bottom:
                                      minimum: 0
                                      maximum: 9999
                                      description: Bottom padding, in points
                                      type: number
                                    left:
                                      minimum: 0
                                      maximum: 9999
                                      description: Left padding, in points
                                      type: number
                                    x:
                                      minimum: 0
                                      maximum: 9999
                                      description: >-
                                        Horizontal padding applied to both left
                                        and right when those sides are omitted,
                                        in points
                                      type: number
                                    'y':
                                      minimum: 0
                                      maximum: 9999
                                      description: >-
                                        Vertical padding applied to both top and
                                        bottom when those sides are omitted, in
                                        points
                                      type: number
                                backgroundRadius:
                                  minimum: 0
                                  maximum: 14400
                                  description: >-
                                    Corner radius for each highlight background
                                    segment, in points
                                  type: number
                            subscript:
                              additionalProperties: false
                              type: object
                              properties:
                                color:
                                  description: >-
                                    Color as `#RGB` or `#RRGGBB`, or `inherit`
                                    to use the inherited color
                                  anyOf:
                                    - pattern: ^#([0-9a-fA-F]{3}|[0-9a-fA-F]{6})$
                                      description: Color as `#RGB` or `#RRGGBB`
                                      type: string
                                    - const: inherit
                                      type: string
                                sizeScale:
                                  minimum: 0.4
                                  maximum: 1
                                  description: >-
                                    Optical scale relative to the surrounding
                                    run (fraction of base size)
                                  type: number
                                riseFraction:
                                  minimum: 0
                                  maximum: 1
                                  description: >-
                                    Baseline offset as a fraction of base size
                                    (not PDF points — contrast with code
                                    `baselineShift`). The renderer applies the
                                    sign (up for superscript, down for
                                    subscript)
                                  type: number
                            superscript:
                              additionalProperties: false
                              type: object
                              properties:
                                color:
                                  description: >-
                                    Color as `#RGB` or `#RRGGBB`, or `inherit`
                                    to use the inherited color
                                  anyOf:
                                    - pattern: ^#([0-9a-fA-F]{3}|[0-9a-fA-F]{6})$
                                      description: Color as `#RGB` or `#RRGGBB`
                                      type: string
                                    - const: inherit
                                      type: string
                                sizeScale:
                                  minimum: 0.4
                                  maximum: 1
                                  description: >-
                                    Optical scale relative to the surrounding
                                    run (fraction of base size)
                                  type: number
                                riseFraction:
                                  minimum: 0
                                  maximum: 1
                                  description: >-
                                    Baseline offset as a fraction of base size
                                    (not PDF points — contrast with code
                                    `baselineShift`). The renderer applies the
                                    sign (up for superscript, down for
                                    subscript)
                                  type: number
                            link:
                              additionalProperties: false
                              type: object
                              properties:
                                color:
                                  description: >-
                                    Color as `#RGB` or `#RRGGBB`, or `inherit`
                                    to use the inherited color
                                  anyOf:
                                    - pattern: ^#([0-9a-fA-F]{3}|[0-9a-fA-F]{6})$
                                      description: Color as `#RGB` or `#RRGGBB`
                                      type: string
                                    - const: inherit
                                      type: string
                                decoration:
                                  type: string
                                  enum:
                                    - underline
                                    - lineThrough
                                    - none
                                decorationStyle:
                                  type: string
                                  enum:
                                    - solid
                                    - double
                                    - dotted
                                    - dashed
                                    - wavy
                                decorationColor:
                                  description: >-
                                    Color as `#RGB` or `#RRGGBB`, or `inherit`
                                    to use the inherited color
                                  anyOf:
                                    - pattern: ^#([0-9a-fA-F]{3}|[0-9a-fA-F]{6})$
                                      description: Color as `#RGB` or `#RRGGBB`
                                      type: string
                                    - const: inherit
                                      type: string
                            code:
                              additionalProperties: false
                              description: >-
                                Style overrides for inline code spans (`` `code`
                                ``): font, optical size scale, text color,
                                background fill/padding/border/radius, baseline
                                shift, opacity, and letter spacing. Pass
                                `background: null` or `backgroundBorder: null`
                                to suppress those.
                              type: object
                              properties:
                                font:
                                  pattern: ^\S(.*\S)?$
                                  description: >-
                                    Font slot as `<role>.<variant>` — role is
                                    `body`, `heading`, or a custom
                                    `typography.named` role; variant is one of
                                    regular, italic, bold, boldItalic (see
                                    `enums.fontVariant`; e.g. `heading.bold`).
                                    The shape is checked semantically at
                                    validate, not by this pattern: a misspelled
                                    variant, an undeclared role, a missing
                                    `.variant`, or a value that reads like a
                                    family name is rejected with a `didYouMean`
                                    pointing at the fix (use `set.family` for a
                                    typeface).
                                  type: string
                                sizeScale:
                                  minimum: 0.85
                                  maximum: 0.88
                                  description: >-
                                    Optical scale relative to the surrounding
                                    run. Accepted range is the 0.85–0.88 band;
                                    out-of-range values are rejected
                                  type: number
                                color:
                                  description: >-
                                    Color as `#RGB` or `#RRGGBB`, or `inherit`
                                    to use the inherited color
                                  anyOf:
                                    - pattern: ^#([0-9a-fA-F]{3}|[0-9a-fA-F]{6})$
                                      description: Color as `#RGB` or `#RRGGBB`
                                      type: string
                                    - const: inherit
                                      type: string
                                background:
                                  description: >-
                                    Background fill behind the code run as
                                    `#RGB`/`#RRGGBB`, or `null` to suppress
                                  anyOf:
                                    - pattern: ^#([0-9a-fA-F]{3}|[0-9a-fA-F]{6})$
                                      description: Color as `#RGB` or `#RRGGBB`
                                      type: string
                                    - type: 'null'
                                backgroundPadding:
                                  additionalProperties: false
                                  type: object
                                  properties:
                                    top:
                                      minimum: 0
                                      maximum: 9999
                                      description: Top padding, in points
                                      type: number
                                    right:
                                      minimum: 0
                                      maximum: 9999
                                      description: Right padding, in points
                                      type: number
                                    bottom:
                                      minimum: 0
                                      maximum: 9999
                                      description: Bottom padding, in points
                                      type: number
                                    left:
                                      minimum: 0
                                      maximum: 9999
                                      description: Left padding, in points
                                      type: number
                                    x:
                                      minimum: 0
                                      maximum: 9999
                                      description: >-
                                        Horizontal padding applied to both left
                                        and right when those sides are omitted,
                                        in points
                                      type: number
                                    'y':
                                      minimum: 0
                                      maximum: 9999
                                      description: >-
                                        Vertical padding applied to both top and
                                        bottom when those sides are omitted, in
                                        points
                                      type: number
                                backgroundBorder:
                                  description: >-
                                    Micro-border around each cloned background
                                    segment, or `null` to suppress
                                  anyOf:
                                    - additionalProperties: false
                                      type: object
                                      required:
                                        - width
                                        - color
                                      properties:
                                        width:
                                          minimum: 0.1
                                          maximum: 50
                                          description: Border thickness in points
                                          type: number
                                        color:
                                          pattern: ^#([0-9a-fA-F]{3}|[0-9a-fA-F]{6})$
                                          description: Color as `#RGB` or `#RRGGBB`
                                          type: string
                                        opacity:
                                          minimum: 0
                                          maximum: 1
                                          description: Border opacity from 0 to 1
                                          type: number
                                        dash:
                                          description: >-
                                            Dash pattern as `[dash, gap]` lengths in
                                            points; both `0` is rejected
                                          type: array
                                          items:
                                            minimum: 0
                                            maximum: 1000
                                            type: number
                                          minItems: 2
                                          maxItems: 2
                                    - type: 'null'
                                backgroundRadius:
                                  minimum: 0
                                  maximum: 14400
                                  description: >-
                                    Corner radius for each background segment,
                                    in points
                                  type: number
                                baselineShift:
                                  minimum: -999
                                  maximum: 999
                                  description: >-
                                    PDF text-rise adjustment in points; positive
                                    values raise the code glyphs
                                  type: number
                                opacity:
                                  minimum: 0
                                  maximum: 1
                                  description: Fill opacity from 0 to 1
                                  type: number
                                letterSpacing:
                                  minimum: -100
                                  maximum: 100
                                  description: >-
                                    Extra spacing between code glyphs in points;
                                    negative values tighten
                                  type: number
                topRight:
                  additionalProperties: false
                  type: object
                  required:
                    - content
                  properties:
                    content:
                      minItems: 1
                      maxItems: 16
                      description: Ordered fragments concatenated to fill the slot
                      type: array
                      items:
                        description: >-
                          A header/footer fragment: literal text, an image
                          (logo/letterhead), page numbers, document title,
                          running section title, or section ordinal at a heading
                          depth. An `image` fragment must be the only fragment
                          in its slot — it is not mixed with text fragments.
                        anyOf:
                          - additionalProperties: false
                            type: object
                            required:
                              - kind
                              - value
                            properties:
                              kind:
                                const: text
                                type: string
                              value:
                                minLength: 1
                                maxLength: 256
                                pattern: \S
                                description: Literal text for this fragment
                                type: string
                              style:
                                additionalProperties: false
                                type: object
                                properties:
                                  font:
                                    pattern: ^\S(.*\S)?$
                                    description: >-
                                      Font slot as `<role>.<variant>` — role is
                                      `body`, `heading`, or a custom
                                      `typography.named` role; variant is one of
                                      regular, italic, bold, boldItalic (see
                                      `enums.fontVariant`; e.g. `heading.bold`).
                                      The shape is checked semantically at
                                      validate, not by this pattern: a
                                      misspelled variant, an undeclared role, a
                                      missing `.variant`, or a value that reads
                                      like a family name is rejected with a
                                      `didYouMean` pointing at the fix (use
                                      `set.family` for a typeface).
                                    type: string
                                  size:
                                    minimum: 1
                                    maximum: 999
                                    description: Font size in points
                                    type: number
                                  color:
                                    pattern: ^#([0-9a-fA-F]{3}|[0-9a-fA-F]{6})$
                                    description: Color as `#RGB` or `#RRGGBB`
                                    type: string
                                  opacity:
                                    minimum: 0
                                    maximum: 1
                                    description: Text opacity from 0 to 1
                                    type: number
                          - additionalProperties: false
                            type: object
                            required:
                              - kind
                              - url
                            properties:
                              kind:
                                const: image
                                type: string
                              url:
                                minLength: 1
                                maxLength: 1048576
                                pattern: ^(https://|data:image/)
                                description: >-
                                  HTTPS or base64 `data:image/...` URL of the
                                  header/footer image (typically a brand logo or
                                  letterhead). Fetched under the same fixed,
                                  non-configurable image policy as Markdown
                                  images (private IPs blocked, DNS-rebinding
                                  mitigation, 10 MiB cap); a fetch or decode
                                  failure degrades to a diagnostic and the image
                                  is omitted rather than failing the render.
                                  Rendered as a decorative PDF/UA pagination
                                  artifact (no alt text).
                                type: string
                              width:
                                minimum: 1
                                maximum: 14400
                                description: >-
                                  Rendered image width in PDF points. When
                                  omitted, the intrinsic width is used, clamped
                                  to the slot band width. Set `width` or
                                  `height` to scale a logo down.
                                type: number
                              height:
                                minimum: 1
                                maximum: 14400
                                description: >-
                                  Rendered image height in PDF points. When
                                  omitted, height follows the aspect ratio of
                                  the resolved width.
                                type: number
                              fit:
                                description: >-
                                  Block-only. How the image fills its
                                  width/height box: `none` (intrinsic sizing),
                                  `contain`, `cover`, or `fill`. Used with
                                  `height` for hero-style layouts.
                                anyOf:
                                  - const: none
                                    type: string
                                  - const: contain
                                    type: string
                                  - const: cover
                                    type: string
                                  - const: fill
                                    type: string
                              align:
                                description: >-
                                  Block-only. Horizontal alignment of the image
                                  within the content area: `start` (left edge in
                                  LTR), `center`, or `end` (right edge in LTR).
                                  Ignored for inline images (line flow controls
                                  position).
                                anyOf:
                                  - const: start
                                    type: string
                                  - const: center
                                    type: string
                                  - const: end
                                    type: string
                              opacity:
                                minimum: 0
                                maximum: 1
                                description: Image opacity from 0 to 1.
                                type: number
                          - additionalProperties: false
                            type: object
                            required:
                              - kind
                            properties:
                              kind:
                                const: pageNumber
                                type: string
                              style:
                                additionalProperties: false
                                type: object
                                properties:
                                  font:
                                    pattern: ^\S(.*\S)?$
                                    description: >-
                                      Font slot as `<role>.<variant>` — role is
                                      `body`, `heading`, or a custom
                                      `typography.named` role; variant is one of
                                      regular, italic, bold, boldItalic (see
                                      `enums.fontVariant`; e.g. `heading.bold`).
                                      The shape is checked semantically at
                                      validate, not by this pattern: a
                                      misspelled variant, an undeclared role, a
                                      missing `.variant`, or a value that reads
                                      like a family name is rejected with a
                                      `didYouMean` pointing at the fix (use
                                      `set.family` for a typeface).
                                    type: string
                                  size:
                                    minimum: 1
                                    maximum: 999
                                    description: Font size in points
                                    type: number
                                  color:
                                    pattern: ^#([0-9a-fA-F]{3}|[0-9a-fA-F]{6})$
                                    description: Color as `#RGB` or `#RRGGBB`
                                    type: string
                                  opacity:
                                    minimum: 0
                                    maximum: 1
                                    description: Text opacity from 0 to 1
                                    type: number
                          - additionalProperties: false
                            type: object
                            required:
                              - kind
                            properties:
                              kind:
                                const: totalPages
                                type: string
                              style:
                                additionalProperties: false
                                type: object
                                properties:
                                  font:
                                    pattern: ^\S(.*\S)?$
                                    description: >-
                                      Font slot as `<role>.<variant>` — role is
                                      `body`, `heading`, or a custom
                                      `typography.named` role; variant is one of
                                      regular, italic, bold, boldItalic (see
                                      `enums.fontVariant`; e.g. `heading.bold`).
                                      The shape is checked semantically at
                                      validate, not by this pattern: a
                                      misspelled variant, an undeclared role, a
                                      missing `.variant`, or a value that reads
                                      like a family name is rejected with a
                                      `didYouMean` pointing at the fix (use
                                      `set.family` for a typeface).
                                    type: string
                                  size:
                                    minimum: 1
                                    maximum: 999
                                    description: Font size in points
                                    type: number
                                  color:
                                    pattern: ^#([0-9a-fA-F]{3}|[0-9a-fA-F]{6})$
                                    description: Color as `#RGB` or `#RRGGBB`
                                    type: string
                                  opacity:
                                    minimum: 0
                                    maximum: 1
                                    description: Text opacity from 0 to 1
                                    type: number
                          - additionalProperties: false
                            type: object
                            required:
                              - kind
                            properties:
                              kind:
                                const: documentTitle
                                type: string
                              style:
                                additionalProperties: false
                                type: object
                                properties:
                                  font:
                                    pattern: ^\S(.*\S)?$
                                    description: >-
                                      Font slot as `<role>.<variant>` — role is
                                      `body`, `heading`, or a custom
                                      `typography.named` role; variant is one of
                                      regular, italic, bold, boldItalic (see
                                      `enums.fontVariant`; e.g. `heading.bold`).
                                      The shape is checked semantically at
                                      validate, not by this pattern: a
                                      misspelled variant, an undeclared role, a
                                      missing `.variant`, or a value that reads
                                      like a family name is rejected with a
                                      `didYouMean` pointing at the fix (use
                                      `set.family` for a typeface).
                                    type: string
                                  size:
                                    minimum: 1
                                    maximum: 999
                                    description: Font size in points
                                    type: number
                                  color:
                                    pattern: ^#([0-9a-fA-F]{3}|[0-9a-fA-F]{6})$
                                    description: Color as `#RGB` or `#RRGGBB`
                                    type: string
                                  opacity:
                                    minimum: 0
                                    maximum: 1
                                    description: Text opacity from 0 to 1
                                    type: number
                          - additionalProperties: false
                            type: object
                            required:
                              - kind
                            properties:
                              kind:
                                const: sectionTitle
                                type: string
                              depth:
                                description: Heading depth from 1 (top level) to 6
                                anyOf:
                                  - const: 1
                                    type: number
                                  - const: 2
                                    type: number
                                  - const: 3
                                    type: number
                                  - const: 4
                                    type: number
                                  - const: 5
                                    type: number
                                  - const: 6
                                    type: number
                              style:
                                additionalProperties: false
                                type: object
                                properties:
                                  font:
                                    pattern: ^\S(.*\S)?$
                                    description: >-
                                      Font slot as `<role>.<variant>` — role is
                                      `body`, `heading`, or a custom
                                      `typography.named` role; variant is one of
                                      regular, italic, bold, boldItalic (see
                                      `enums.fontVariant`; e.g. `heading.bold`).
                                      The shape is checked semantically at
                                      validate, not by this pattern: a
                                      misspelled variant, an undeclared role, a
                                      missing `.variant`, or a value that reads
                                      like a family name is rejected with a
                                      `didYouMean` pointing at the fix (use
                                      `set.family` for a typeface).
                                    type: string
                                  size:
                                    minimum: 1
                                    maximum: 999
                                    description: Font size in points
                                    type: number
                                  color:
                                    pattern: ^#([0-9a-fA-F]{3}|[0-9a-fA-F]{6})$
                                    description: Color as `#RGB` or `#RRGGBB`
                                    type: string
                                  opacity:
                                    minimum: 0
                                    maximum: 1
                                    description: Text opacity from 0 to 1
                                    type: number
                          - additionalProperties: false
                            type: object
                            required:
                              - kind
                            properties:
                              kind:
                                const: sectionIndex
                                type: string
                              depth:
                                description: Heading depth from 1 (top level) to 6
                                anyOf:
                                  - const: 1
                                    type: number
                                  - const: 2
                                    type: number
                                  - const: 3
                                    type: number
                                  - const: 4
                                    type: number
                                  - const: 5
                                    type: number
                                  - const: 6
                                    type: number
                              format:
                                description: >-
                                  Section ordinal format: `twoDigit` (at least
                                  two digits: 01, 12; ordinals ≥ 100 render in
                                  full) or `decimal` (1, 2, …)
                                anyOf:
                                  - const: twoDigit
                                    type: string
                                  - const: decimal
                                    type: string
                              style:
                                additionalProperties: false
                                type: object
                                properties:
                                  font:
                                    pattern: ^\S(.*\S)?$
                                    description: >-
                                      Font slot as `<role>.<variant>` — role is
                                      `body`, `heading`, or a custom
                                      `typography.named` role; variant is one of
                                      regular, italic, bold, boldItalic (see
                                      `enums.fontVariant`; e.g. `heading.bold`).
                                      The shape is checked semantically at
                                      validate, not by this pattern: a
                                      misspelled variant, an undeclared role, a
                                      missing `.variant`, or a value that reads
                                      like a family name is rejected with a
                                      `didYouMean` pointing at the fix (use
                                      `set.family` for a typeface).
                                    type: string
                                  size:
                                    minimum: 1
                                    maximum: 999
                                    description: Font size in points
                                    type: number
                                  color:
                                    pattern: ^#([0-9a-fA-F]{3}|[0-9a-fA-F]{6})$
                                    description: Color as `#RGB` or `#RRGGBB`
                                    type: string
                                  opacity:
                                    minimum: 0
                                    maximum: 1
                                    description: Text opacity from 0 to 1
                                    type: number
                    style:
                      additionalProperties: false
                      type: object
                      properties:
                        font:
                          pattern: ^\S(.*\S)?$
                          description: >-
                            Font slot as `<role>.<variant>` — role is `body`,
                            `heading`, or a custom `typography.named` role;
                            variant is one of regular, italic, bold, boldItalic
                            (see `enums.fontVariant`; e.g. `heading.bold`). The
                            shape is checked semantically at validate, not by
                            this pattern: a misspelled variant, an undeclared
                            role, a missing `.variant`, or a value that reads
                            like a family name is rejected with a `didYouMean`
                            pointing at the fix (use `set.family` for a
                            typeface).
                          type: string
                        family:
                          description: >-
                            A text family: a hosted weighted key, a declared
                            Google Fonts display name, or a `typography.named`
                            role reference
                          anyOf:
                            - const: inter
                              type: string
                            - const: lora
                              type: string
                            - const: source-serif-4
                              type: string
                            - pattern: ^[A-Za-z][A-Za-z0-9 ]{0,63}$
                              description: >-
                                Google Fonts display name from the declared pool
                                (e.g. `Playfair Display`)
                              type: string
                            - pattern: ^[a-z][a-z0-9-]{0,15}$
                              description: >-
                                Reference to a custom role declared in
                                `typography.named` (e.g. `display`)
                              type: string
                        size:
                          minimum: 1
                          maximum: 999
                          description: Font size in points
                          type: number
                        color:
                          pattern: ^#([0-9a-fA-F]{3}|[0-9a-fA-F]{6})$
                          description: Color as `#RGB` or `#RRGGBB`
                          type: string
                        spaceBefore:
                          minimum: 0
                          maximum: 9999
                          description: Vertical space reserved above the block, in points
                          type: number
                        spaceAfter:
                          minimum: 0
                          maximum: 9999
                          description: Vertical space reserved below the block, in points
                          type: number
                        lineHeight:
                          minimum: 1
                          maximum: 10
                          description: Line height as a multiple of the font size
                          type: number
                        align:
                          type: string
                          enum:
                            - left
                            - right
                            - center
                            - justify
                        letterSpacing:
                          minimum: -100
                          maximum: 100
                          description: >-
                            Extra spacing between characters in points; negative
                            values tighten
                          type: number
                        opacity:
                          minimum: 0
                          maximum: 1
                          description: Text opacity from 0 to 1
                          type: number
                        inline:
                          additionalProperties: false
                          type: object
                          properties:
                            strong:
                              additionalProperties: false
                              type: object
                              properties:
                                color:
                                  description: >-
                                    Color as `#RGB` or `#RRGGBB`, or `inherit`
                                    to use the inherited color
                                  anyOf:
                                    - pattern: ^#([0-9a-fA-F]{3}|[0-9a-fA-F]{6})$
                                      description: Color as `#RGB` or `#RRGGBB`
                                      type: string
                                    - const: inherit
                                      type: string
                            emphasis:
                              additionalProperties: false
                              type: object
                              properties:
                                color:
                                  description: >-
                                    Color as `#RGB` or `#RRGGBB`, or `inherit`
                                    to use the inherited color
                                  anyOf:
                                    - pattern: ^#([0-9a-fA-F]{3}|[0-9a-fA-F]{6})$
                                      description: Color as `#RGB` or `#RRGGBB`
                                      type: string
                                    - const: inherit
                                      type: string
                            delete:
                              additionalProperties: false
                              type: object
                              properties:
                                color:
                                  description: >-
                                    Color as `#RGB` or `#RRGGBB`, or `inherit`
                                    to use the inherited color
                                  anyOf:
                                    - pattern: ^#([0-9a-fA-F]{3}|[0-9a-fA-F]{6})$
                                      description: Color as `#RGB` or `#RRGGBB`
                                      type: string
                                    - const: inherit
                                      type: string
                                decorationStyle:
                                  type: string
                                  enum:
                                    - solid
                                    - double
                                    - dotted
                                    - dashed
                                    - wavy
                                decorationColor:
                                  description: >-
                                    Color as `#RGB` or `#RRGGBB`, or `inherit`
                                    to use the inherited color
                                  anyOf:
                                    - pattern: ^#([0-9a-fA-F]{3}|[0-9a-fA-F]{6})$
                                      description: Color as `#RGB` or `#RRGGBB`
                                      type: string
                                    - const: inherit
                                      type: string
                            mark:
                              additionalProperties: false
                              type: object
                              properties:
                                color:
                                  description: >-
                                    Color as `#RGB` or `#RRGGBB`, or `inherit`
                                    to use the inherited color
                                  anyOf:
                                    - pattern: ^#([0-9a-fA-F]{3}|[0-9a-fA-F]{6})$
                                      description: Color as `#RGB` or `#RRGGBB`
                                      type: string
                                    - const: inherit
                                      type: string
                                background:
                                  description: >-
                                    Background fill behind highlighted text as
                                    `#RGB`/`#RRGGBB`, or `null` to suppress
                                  anyOf:
                                    - pattern: ^#([0-9a-fA-F]{3}|[0-9a-fA-F]{6})$
                                      description: Color as `#RGB` or `#RRGGBB`
                                      type: string
                                    - type: 'null'
                                backgroundPadding:
                                  additionalProperties: false
                                  type: object
                                  properties:
                                    top:
                                      minimum: 0
                                      maximum: 9999
                                      description: Top padding, in points
                                      type: number
                                    right:
                                      minimum: 0
                                      maximum: 9999
                                      description: Right padding, in points
                                      type: number
                                    bottom:
                                      minimum: 0
                                      maximum: 9999
                                      description: Bottom padding, in points
                                      type: number
                                    left:
                                      minimum: 0
                                      maximum: 9999
                                      description: Left padding, in points
                                      type: number
                                    x:
                                      minimum: 0
                                      maximum: 9999
                                      description: >-
                                        Horizontal padding applied to both left
                                        and right when those sides are omitted,
                                        in points
                                      type: number
                                    'y':
                                      minimum: 0
                                      maximum: 9999
                                      description: >-
                                        Vertical padding applied to both top and
                                        bottom when those sides are omitted, in
                                        points
                                      type: number
                                backgroundRadius:
                                  minimum: 0
                                  maximum: 14400
                                  description: >-
                                    Corner radius for each highlight background
                                    segment, in points
                                  type: number
                            subscript:
                              additionalProperties: false
                              type: object
                              properties:
                                color:
                                  description: >-
                                    Color as `#RGB` or `#RRGGBB`, or `inherit`
                                    to use the inherited color
                                  anyOf:
                                    - pattern: ^#([0-9a-fA-F]{3}|[0-9a-fA-F]{6})$
                                      description: Color as `#RGB` or `#RRGGBB`
                                      type: string
                                    - const: inherit
                                      type: string
                                sizeScale:
                                  minimum: 0.4
                                  maximum: 1
                                  description: >-
                                    Optical scale relative to the surrounding
                                    run (fraction of base size)
                                  type: number
                                riseFraction:
                                  minimum: 0
                                  maximum: 1
                                  description: >-
                                    Baseline offset as a fraction of base size
                                    (not PDF points — contrast with code
                                    `baselineShift`). The renderer applies the
                                    sign (up for superscript, down for
                                    subscript)
                                  type: number
                            superscript:
                              additionalProperties: false
                              type: object
                              properties:
                                color:
                                  description: >-
                                    Color as `#RGB` or `#RRGGBB`, or `inherit`
                                    to use the inherited color
                                  anyOf:
                                    - pattern: ^#([0-9a-fA-F]{3}|[0-9a-fA-F]{6})$
                                      description: Color as `#RGB` or `#RRGGBB`
                                      type: string
                                    - const: inherit
                                      type: string
                                sizeScale:
                                  minimum: 0.4
                                  maximum: 1
                                  description: >-
                                    Optical scale relative to the surrounding
                                    run (fraction of base size)
                                  type: number
                                riseFraction:
                                  minimum: 0
                                  maximum: 1
                                  description: >-
                                    Baseline offset as a fraction of base size
                                    (not PDF points — contrast with code
                                    `baselineShift`). The renderer applies the
                                    sign (up for superscript, down for
                                    subscript)
                                  type: number
                            link:
                              additionalProperties: false
                              type: object
                              properties:
                                color:
                                  description: >-
                                    Color as `#RGB` or `#RRGGBB`, or `inherit`
                                    to use the inherited color
                                  anyOf:
                                    - pattern: ^#([0-9a-fA-F]{3}|[0-9a-fA-F]{6})$
                                      description: Color as `#RGB` or `#RRGGBB`
                                      type: string
                                    - const: inherit
                                      type: string
                                decoration:
                                  type: string
                                  enum:
                                    - underline
                                    - lineThrough
                                    - none
                                decorationStyle:
                                  type: string
                                  enum:
                                    - solid
                                    - double
                                    - dotted
                                    - dashed
                                    - wavy
                                decorationColor:
                                  description: >-
                                    Color as `#RGB` or `#RRGGBB`, or `inherit`
                                    to use the inherited color
                                  anyOf:
                                    - pattern: ^#([0-9a-fA-F]{3}|[0-9a-fA-F]{6})$
                                      description: Color as `#RGB` or `#RRGGBB`
                                      type: string
                                    - const: inherit
                                      type: string
                            code:
                              additionalProperties: false
                              description: >-
                                Style overrides for inline code spans (`` `code`
                                ``): font, optical size scale, text color,
                                background fill/padding/border/radius, baseline
                                shift, opacity, and letter spacing. Pass
                                `background: null` or `backgroundBorder: null`
                                to suppress those.
                              type: object
                              properties:
                                font:
                                  pattern: ^\S(.*\S)?$
                                  description: >-
                                    Font slot as `<role>.<variant>` — role is
                                    `body`, `heading`, or a custom
                                    `typography.named` role; variant is one of
                                    regular, italic, bold, boldItalic (see
                                    `enums.fontVariant`; e.g. `heading.bold`).
                                    The shape is checked semantically at
                                    validate, not by this pattern: a misspelled
                                    variant, an undeclared role, a missing
                                    `.variant`, or a value that reads like a
                                    family name is rejected with a `didYouMean`
                                    pointing at the fix (use `set.family` for a
                                    typeface).
                                  type: string
                                sizeScale:
                                  minimum: 0.85
                                  maximum: 0.88
                                  description: >-
                                    Optical scale relative to the surrounding
                                    run. Accepted range is the 0.85–0.88 band;
                                    out-of-range values are rejected
                                  type: number
                                color:
                                  description: >-
                                    Color as `#RGB` or `#RRGGBB`, or `inherit`
                                    to use the inherited color
                                  anyOf:
                                    - pattern: ^#([0-9a-fA-F]{3}|[0-9a-fA-F]{6})$
                                      description: Color as `#RGB` or `#RRGGBB`
                                      type: string
                                    - const: inherit
                                      type: string
                                background:
                                  description: >-
                                    Background fill behind the code run as
                                    `#RGB`/`#RRGGBB`, or `null` to suppress
                                  anyOf:
                                    - pattern: ^#([0-9a-fA-F]{3}|[0-9a-fA-F]{6})$
                                      description: Color as `#RGB` or `#RRGGBB`
                                      type: string
                                    - type: 'null'
                                backgroundPadding:
                                  additionalProperties: false
                                  type: object
                                  properties:
                                    top:
                                      minimum: 0
                                      maximum: 9999
                                      description: Top padding, in points
                                      type: number
                                    right:
                                      minimum: 0
                                      maximum: 9999
                                      description: Right padding, in points
                                      type: number
                                    bottom:
                                      minimum: 0
                                      maximum: 9999
                                      description: Bottom padding, in points
                                      type: number
                                    left:
                                      minimum: 0
                                      maximum: 9999
                                      description: Left padding, in points
                                      type: number
                                    x:
                                      minimum: 0
                                      maximum: 9999
                                      description: >-
                                        Horizontal padding applied to both left
                                        and right when those sides are omitted,
                                        in points
                                      type: number
                                    'y':
                                      minimum: 0
                                      maximum: 9999
                                      description: >-
                                        Vertical padding applied to both top and
                                        bottom when those sides are omitted, in
                                        points
                                      type: number
                                backgroundBorder:
                                  description: >-
                                    Micro-border around each cloned background
                                    segment, or `null` to suppress
                                  anyOf:
                                    - additionalProperties: false
                                      type: object
                                      required:
                                        - width
                                        - color
                                      properties:
                                        width:
                                          minimum: 0.1
                                          maximum: 50
                                          description: Border thickness in points
                                          type: number
                                        color:
                                          pattern: ^#([0-9a-fA-F]{3}|[0-9a-fA-F]{6})$
                                          description: Color as `#RGB` or `#RRGGBB`
                                          type: string
                                        opacity:
                                          minimum: 0
                                          maximum: 1
                                          description: Border opacity from 0 to 1
                                          type: number
                                        dash:
                                          description: >-
                                            Dash pattern as `[dash, gap]` lengths in
                                            points; both `0` is rejected
                                          type: array
                                          items:
                                            minimum: 0
                                            maximum: 1000
                                            type: number
                                          minItems: 2
                                          maxItems: 2
                                    - type: 'null'
                                backgroundRadius:
                                  minimum: 0
                                  maximum: 14400
                                  description: >-
                                    Corner radius for each background segment,
                                    in points
                                  type: number
                                baselineShift:
                                  minimum: -999
                                  maximum: 999
                                  description: >-
                                    PDF text-rise adjustment in points; positive
                                    values raise the code glyphs
                                  type: number
                                opacity:
                                  minimum: 0
                                  maximum: 1
                                  description: Fill opacity from 0 to 1
                                  type: number
                                letterSpacing:
                                  minimum: -100
                                  maximum: 100
                                  description: >-
                                    Extra spacing between code glyphs in points;
                                    negative values tighten
                                  type: number
                bottomLeft:
                  additionalProperties: false
                  type: object
                  required:
                    - content
                  properties:
                    content:
                      minItems: 1
                      maxItems: 16
                      description: Ordered fragments concatenated to fill the slot
                      type: array
                      items:
                        description: >-
                          A header/footer fragment: literal text, an image
                          (logo/letterhead), page numbers, document title,
                          running section title, or section ordinal at a heading
                          depth. An `image` fragment must be the only fragment
                          in its slot — it is not mixed with text fragments.
                        anyOf:
                          - additionalProperties: false
                            type: object
                            required:
                              - kind
                              - value
                            properties:
                              kind:
                                const: text
                                type: string
                              value:
                                minLength: 1
                                maxLength: 256
                                pattern: \S
                                description: Literal text for this fragment
                                type: string
                              style:
                                additionalProperties: false
                                type: object
                                properties:
                                  font:
                                    pattern: ^\S(.*\S)?$
                                    description: >-
                                      Font slot as `<role>.<variant>` — role is
                                      `body`, `heading`, or a custom
                                      `typography.named` role; variant is one of
                                      regular, italic, bold, boldItalic (see
                                      `enums.fontVariant`; e.g. `heading.bold`).
                                      The shape is checked semantically at
                                      validate, not by this pattern: a
                                      misspelled variant, an undeclared role, a
                                      missing `.variant`, or a value that reads
                                      like a family name is rejected with a
                                      `didYouMean` pointing at the fix (use
                                      `set.family` for a typeface).
                                    type: string
                                  size:
                                    minimum: 1
                                    maximum: 999
                                    description: Font size in points
                                    type: number
                                  color:
                                    pattern: ^#([0-9a-fA-F]{3}|[0-9a-fA-F]{6})$
                                    description: Color as `#RGB` or `#RRGGBB`
                                    type: string
                                  opacity:
                                    minimum: 0
                                    maximum: 1
                                    description: Text opacity from 0 to 1
                                    type: number
                          - additionalProperties: false
                            type: object
                            required:
                              - kind
                              - url
                            properties:
                              kind:
                                const: image
                                type: string
                              url:
                                minLength: 1
                                maxLength: 1048576
                                pattern: ^(https://|data:image/)
                                description: >-
                                  HTTPS or base64 `data:image/...` URL of the
                                  header/footer image (typically a brand logo or
                                  letterhead). Fetched under the same fixed,
                                  non-configurable image policy as Markdown
                                  images (private IPs blocked, DNS-rebinding
                                  mitigation, 10 MiB cap); a fetch or decode
                                  failure degrades to a diagnostic and the image
                                  is omitted rather than failing the render.
                                  Rendered as a decorative PDF/UA pagination
                                  artifact (no alt text).
                                type: string
                              width:
                                minimum: 1
                                maximum: 14400
                                description: >-
                                  Rendered image width in PDF points. When
                                  omitted, the intrinsic width is used, clamped
                                  to the slot band width. Set `width` or
                                  `height` to scale a logo down.
                                type: number
                              height:
                                minimum: 1
                                maximum: 14400
                                description: >-
                                  Rendered image height in PDF points. When
                                  omitted, height follows the aspect ratio of
                                  the resolved width.
                                type: number
                              fit:
                                description: >-
                                  Block-only. How the image fills its
                                  width/height box: `none` (intrinsic sizing),
                                  `contain`, `cover`, or `fill`. Used with
                                  `height` for hero-style layouts.
                                anyOf:
                                  - const: none
                                    type: string
                                  - const: contain
                                    type: string
                                  - const: cover
                                    type: string
                                  - const: fill
                                    type: string
                              align:
                                description: >-
                                  Block-only. Horizontal alignment of the image
                                  within the content area: `start` (left edge in
                                  LTR), `center`, or `end` (right edge in LTR).
                                  Ignored for inline images (line flow controls
                                  position).
                                anyOf:
                                  - const: start
                                    type: string
                                  - const: center
                                    type: string
                                  - const: end
                                    type: string
                              opacity:
                                minimum: 0
                                maximum: 1
                                description: Image opacity from 0 to 1.
                                type: number
                          - additionalProperties: false
                            type: object
                            required:
                              - kind
                            properties:
                              kind:
                                const: pageNumber
                                type: string
                              style:
                                additionalProperties: false
                                type: object
                                properties:
                                  font:
                                    pattern: ^\S(.*\S)?$
                                    description: >-
                                      Font slot as `<role>.<variant>` — role is
                                      `body`, `heading`, or a custom
                                      `typography.named` role; variant is one of
                                      regular, italic, bold, boldItalic (see
                                      `enums.fontVariant`; e.g. `heading.bold`).
                                      The shape is checked semantically at
                                      validate, not by this pattern: a
                                      misspelled variant, an undeclared role, a
                                      missing `.variant`, or a value that reads
                                      like a family name is rejected with a
                                      `didYouMean` pointing at the fix (use
                                      `set.family` for a typeface).
                                    type: string
                                  size:
                                    minimum: 1
                                    maximum: 999
                                    description: Font size in points
                                    type: number
                                  color:
                                    pattern: ^#([0-9a-fA-F]{3}|[0-9a-fA-F]{6})$
                                    description: Color as `#RGB` or `#RRGGBB`
                                    type: string
                                  opacity:
                                    minimum: 0
                                    maximum: 1
                                    description: Text opacity from 0 to 1
                                    type: number
                          - additionalProperties: false
                            type: object
                            required:
                              - kind
                            properties:
                              kind:
                                const: totalPages
                                type: string
                              style:
                                additionalProperties: false
                                type: object
                                properties:
                                  font:
                                    pattern: ^\S(.*\S)?$
                                    description: >-
                                      Font slot as `<role>.<variant>` — role is
                                      `body`, `heading`, or a custom
                                      `typography.named` role; variant is one of
                                      regular, italic, bold, boldItalic (see
                                      `enums.fontVariant`; e.g. `heading.bold`).
                                      The shape is checked semantically at
                                      validate, not by this pattern: a
                                      misspelled variant, an undeclared role, a
                                      missing `.variant`, or a value that reads
                                      like a family name is rejected with a
                                      `didYouMean` pointing at the fix (use
                                      `set.family` for a typeface).
                                    type: string
                                  size:
                                    minimum: 1
                                    maximum: 999
                                    description: Font size in points
                                    type: number
                                  color:
                                    pattern: ^#([0-9a-fA-F]{3}|[0-9a-fA-F]{6})$
                                    description: Color as `#RGB` or `#RRGGBB`
                                    type: string
                                  opacity:
                                    minimum: 0
                                    maximum: 1
                                    description: Text opacity from 0 to 1
                                    type: number
                          - additionalProperties: false
                            type: object
                            required:
                              - kind
                            properties:
                              kind:
                                const: documentTitle
                                type: string
                              style:
                                additionalProperties: false
                                type: object
                                properties:
                                  font:
                                    pattern: ^\S(.*\S)?$
                                    description: >-
                                      Font slot as `<role>.<variant>` — role is
                                      `body`, `heading`, or a custom
                                      `typography.named` role; variant is one of
                                      regular, italic, bold, boldItalic (see
                                      `enums.fontVariant`; e.g. `heading.bold`).
                                      The shape is checked semantically at
                                      validate, not by this pattern: a
                                      misspelled variant, an undeclared role, a
                                      missing `.variant`, or a value that reads
                                      like a family name is rejected with a
                                      `didYouMean` pointing at the fix (use
                                      `set.family` for a typeface).
                                    type: string
                                  size:
                                    minimum: 1
                                    maximum: 999
                                    description: Font size in points
                                    type: number
                                  color:
                                    pattern: ^#([0-9a-fA-F]{3}|[0-9a-fA-F]{6})$
                                    description: Color as `#RGB` or `#RRGGBB`
                                    type: string
                                  opacity:
                                    minimum: 0
                                    maximum: 1
                                    description: Text opacity from 0 to 1
                                    type: number
                          - additionalProperties: false
                            type: object
                            required:
                              - kind
                            properties:
                              kind:
                                const: sectionTitle
                                type: string
                              depth:
                                description: Heading depth from 1 (top level) to 6
                                anyOf:
                                  - const: 1
                                    type: number
                                  - const: 2
                                    type: number
                                  - const: 3
                                    type: number
                                  - const: 4
                                    type: number
                                  - const: 5
                                    type: number
                                  - const: 6
                                    type: number
                              style:
                                additionalProperties: false
                                type: object
                                properties:
                                  font:
                                    pattern: ^\S(.*\S)?$
                                    description: >-
                                      Font slot as `<role>.<variant>` — role is
                                      `body`, `heading`, or a custom
                                      `typography.named` role; variant is one of
                                      regular, italic, bold, boldItalic (see
                                      `enums.fontVariant`; e.g. `heading.bold`).
                                      The shape is checked semantically at
                                      validate, not by this pattern: a
                                      misspelled variant, an undeclared role, a
                                      missing `.variant`, or a value that reads
                                      like a family name is rejected with a
                                      `didYouMean` pointing at the fix (use
                                      `set.family` for a typeface).
                                    type: string
                                  size:
                                    minimum: 1
                                    maximum: 999
                                    description: Font size in points
                                    type: number
                                  color:
                                    pattern: ^#([0-9a-fA-F]{3}|[0-9a-fA-F]{6})$
                                    description: Color as `#RGB` or `#RRGGBB`
                                    type: string
                                  opacity:
                                    minimum: 0
                                    maximum: 1
                                    description: Text opacity from 0 to 1
                                    type: number
                          - additionalProperties: false
                            type: object
                            required:
                              - kind
                            properties:
                              kind:
                                const: sectionIndex
                                type: string
                              depth:
                                description: Heading depth from 1 (top level) to 6
                                anyOf:
                                  - const: 1
                                    type: number
                                  - const: 2
                                    type: number
                                  - const: 3
                                    type: number
                                  - const: 4
                                    type: number
                                  - const: 5
                                    type: number
                                  - const: 6
                                    type: number
                              format:
                                description: >-
                                  Section ordinal format: `twoDigit` (at least
                                  two digits: 01, 12; ordinals ≥ 100 render in
                                  full) or `decimal` (1, 2, …)
                                anyOf:
                                  - const: twoDigit
                                    type: string
                                  - const: decimal
                                    type: string
                              style:
                                additionalProperties: false
                                type: object
                                properties:
                                  font:
                                    pattern: ^\S(.*\S)?$
                                    description: >-
                                      Font slot as `<role>.<variant>` — role is
                                      `body`, `heading`, or a custom
                                      `typography.named` role; variant is one of
                                      regular, italic, bold, boldItalic (see
                                      `enums.fontVariant`; e.g. `heading.bold`).
                                      The shape is checked semantically at
                                      validate, not by this pattern: a
                                      misspelled variant, an undeclared role, a
                                      missing `.variant`, or a value that reads
                                      like a family name is rejected with a
                                      `didYouMean` pointing at the fix (use
                                      `set.family` for a typeface).
                                    type: string
                                  size:
                                    minimum: 1
                                    maximum: 999
                                    description: Font size in points
                                    type: number
                                  color:
                                    pattern: ^#([0-9a-fA-F]{3}|[0-9a-fA-F]{6})$
                                    description: Color as `#RGB` or `#RRGGBB`
                                    type: string
                                  opacity:
                                    minimum: 0
                                    maximum: 1
                                    description: Text opacity from 0 to 1
                                    type: number
                    style:
                      additionalProperties: false
                      type: object
                      properties:
                        font:
                          pattern: ^\S(.*\S)?$
                          description: >-
                            Font slot as `<role>.<variant>` — role is `body`,
                            `heading`, or a custom `typography.named` role;
                            variant is one of regular, italic, bold, boldItalic
                            (see `enums.fontVariant`; e.g. `heading.bold`). The
                            shape is checked semantically at validate, not by
                            this pattern: a misspelled variant, an undeclared
                            role, a missing `.variant`, or a value that reads
                            like a family name is rejected with a `didYouMean`
                            pointing at the fix (use `set.family` for a
                            typeface).
                          type: string
                        family:
                          description: >-
                            A text family: a hosted weighted key, a declared
                            Google Fonts display name, or a `typography.named`
                            role reference
                          anyOf:
                            - const: inter
                              type: string
                            - const: lora
                              type: string
                            - const: source-serif-4
                              type: string
                            - pattern: ^[A-Za-z][A-Za-z0-9 ]{0,63}$
                              description: >-
                                Google Fonts display name from the declared pool
                                (e.g. `Playfair Display`)
                              type: string
                            - pattern: ^[a-z][a-z0-9-]{0,15}$
                              description: >-
                                Reference to a custom role declared in
                                `typography.named` (e.g. `display`)
                              type: string
                        size:
                          minimum: 1
                          maximum: 999
                          description: Font size in points
                          type: number
                        color:
                          pattern: ^#([0-9a-fA-F]{3}|[0-9a-fA-F]{6})$
                          description: Color as `#RGB` or `#RRGGBB`
                          type: string
                        spaceBefore:
                          minimum: 0
                          maximum: 9999
                          description: Vertical space reserved above the block, in points
                          type: number
                        spaceAfter:
                          minimum: 0
                          maximum: 9999
                          description: Vertical space reserved below the block, in points
                          type: number
                        lineHeight:
                          minimum: 1
                          maximum: 10
                          description: Line height as a multiple of the font size
                          type: number
                        align:
                          type: string
                          enum:
                            - left
                            - right
                            - center
                            - justify
                        letterSpacing:
                          minimum: -100
                          maximum: 100
                          description: >-
                            Extra spacing between characters in points; negative
                            values tighten
                          type: number
                        opacity:
                          minimum: 0
                          maximum: 1
                          description: Text opacity from 0 to 1
                          type: number
                        inline:
                          additionalProperties: false
                          type: object
                          properties:
                            strong:
                              additionalProperties: false
                              type: object
                              properties:
                                color:
                                  description: >-
                                    Color as `#RGB` or `#RRGGBB`, or `inherit`
                                    to use the inherited color
                                  anyOf:
                                    - pattern: ^#([0-9a-fA-F]{3}|[0-9a-fA-F]{6})$
                                      description: Color as `#RGB` or `#RRGGBB`
                                      type: string
                                    - const: inherit
                                      type: string
                            emphasis:
                              additionalProperties: false
                              type: object
                              properties:
                                color:
                                  description: >-
                                    Color as `#RGB` or `#RRGGBB`, or `inherit`
                                    to use the inherited color
                                  anyOf:
                                    - pattern: ^#([0-9a-fA-F]{3}|[0-9a-fA-F]{6})$
                                      description: Color as `#RGB` or `#RRGGBB`
                                      type: string
                                    - const: inherit
                                      type: string
                            delete:
                              additionalProperties: false
                              type: object
                              properties:
                                color:
                                  description: >-
                                    Color as `#RGB` or `#RRGGBB`, or `inherit`
                                    to use the inherited color
                                  anyOf:
                                    - pattern: ^#([0-9a-fA-F]{3}|[0-9a-fA-F]{6})$
                                      description: Color as `#RGB` or `#RRGGBB`
                                      type: string
                                    - const: inherit
                                      type: string
                                decorationStyle:
                                  type: string
                                  enum:
                                    - solid
                                    - double
                                    - dotted
                                    - dashed
                                    - wavy
                                decorationColor:
                                  description: >-
                                    Color as `#RGB` or `#RRGGBB`, or `inherit`
                                    to use the inherited color
                                  anyOf:
                                    - pattern: ^#([0-9a-fA-F]{3}|[0-9a-fA-F]{6})$
                                      description: Color as `#RGB` or `#RRGGBB`
                                      type: string
                                    - const: inherit
                                      type: string
                            mark:
                              additionalProperties: false
                              type: object
                              properties:
                                color:
                                  description: >-
                                    Color as `#RGB` or `#RRGGBB`, or `inherit`
                                    to use the inherited color
                                  anyOf:
                                    - pattern: ^#([0-9a-fA-F]{3}|[0-9a-fA-F]{6})$
                                      description: Color as `#RGB` or `#RRGGBB`
                                      type: string
                                    - const: inherit
                                      type: string
                                background:
                                  description: >-
                                    Background fill behind highlighted text as
                                    `#RGB`/`#RRGGBB`, or `null` to suppress
                                  anyOf:
                                    - pattern: ^#([0-9a-fA-F]{3}|[0-9a-fA-F]{6})$
                                      description: Color as `#RGB` or `#RRGGBB`
                                      type: string
                                    - type: 'null'
                                backgroundPadding:
                                  additionalProperties: false
                                  type: object
                                  properties:
                                    top:
                                      minimum: 0
                                      maximum: 9999
                                      description: Top padding, in points
                                      type: number
                                    right:
                                      minimum: 0
                                      maximum: 9999
                                      description: Right padding, in points
                                      type: number
                                    bottom:
                                      minimum: 0
                                      maximum: 9999
                                      description: Bottom padding, in points
                                      type: number
                                    left:
                                      minimum: 0
                                      maximum: 9999
                                      description: Left padding, in points
                                      type: number
                                    x:
                                      minimum: 0
                                      maximum: 9999
                                      description: >-
                                        Horizontal padding applied to both left
                                        and right when those sides are omitted,
                                        in points
                                      type: number
                                    'y':
                                      minimum: 0
                                      maximum: 9999
                                      description: >-
                                        Vertical padding applied to both top and
                                        bottom when those sides are omitted, in
                                        points
                                      type: number
                                backgroundRadius:
                                  minimum: 0
                                  maximum: 14400
                                  description: >-
                                    Corner radius for each highlight background
                                    segment, in points
                                  type: number
                            subscript:
                              additionalProperties: false
                              type: object
                              properties:
                                color:
                                  description: >-
                                    Color as `#RGB` or `#RRGGBB`, or `inherit`
                                    to use the inherited color
                                  anyOf:
                                    - pattern: ^#([0-9a-fA-F]{3}|[0-9a-fA-F]{6})$
                                      description: Color as `#RGB` or `#RRGGBB`
                                      type: string
                                    - const: inherit
                                      type: string
                                sizeScale:
                                  minimum: 0.4
                                  maximum: 1
                                  description: >-
                                    Optical scale relative to the surrounding
                                    run (fraction of base size)
                                  type: number
                                riseFraction:
                                  minimum: 0
                                  maximum: 1
                                  description: >-
                                    Baseline offset as a fraction of base size
                                    (not PDF points — contrast with code
                                    `baselineShift`). The renderer applies the
                                    sign (up for superscript, down for
                                    subscript)
                                  type: number
                            superscript:
                              additionalProperties: false
                              type: object
                              properties:
                                color:
                                  description: >-
                                    Color as `#RGB` or `#RRGGBB`, or `inherit`
                                    to use the inherited color
                                  anyOf:
                                    - pattern: ^#([0-9a-fA-F]{3}|[0-9a-fA-F]{6})$
                                      description: Color as `#RGB` or `#RRGGBB`
                                      type: string
                                    - const: inherit
                                      type: string
                                sizeScale:
                                  minimum: 0.4
                                  maximum: 1
                                  description: >-
                                    Optical scale relative to the surrounding
                                    run (fraction of base size)
                                  type: number
                                riseFraction:
                                  minimum: 0
                                  maximum: 1
                                  description: >-
                                    Baseline offset as a fraction of base size
                                    (not PDF points — contrast with code
                                    `baselineShift`). The renderer applies the
                                    sign (up for superscript, down for
                                    subscript)
                                  type: number
                            link:
                              additionalProperties: false
                              type: object
                              properties:
                                color:
                                  description: >-
                                    Color as `#RGB` or `#RRGGBB`, or `inherit`
                                    to use the inherited color
                                  anyOf:
                                    - pattern: ^#([0-9a-fA-F]{3}|[0-9a-fA-F]{6})$
                                      description: Color as `#RGB` or `#RRGGBB`
                                      type: string
                                    - const: inherit
                                      type: string
                                decoration:
                                  type: string
                                  enum:
                                    - underline
                                    - lineThrough
                                    - none
                                decorationStyle:
                                  type: string
                                  enum:
                                    - solid
                                    - double
                                    - dotted
                                    - dashed
                                    - wavy
                                decorationColor:
                                  description: >-
                                    Color as `#RGB` or `#RRGGBB`, or `inherit`
                                    to use the inherited color
                                  anyOf:
                                    - pattern: ^#([0-9a-fA-F]{3}|[0-9a-fA-F]{6})$
                                      description: Color as `#RGB` or `#RRGGBB`
                                      type: string
                                    - const: inherit
                                      type: string
                            code:
                              additionalProperties: false
                              description: >-
                                Style overrides for inline code spans (`` `code`
                                ``): font, optical size scale, text color,
                                background fill/padding/border/radius, baseline
                                shift, opacity, and letter spacing. Pass
                                `background: null` or `backgroundBorder: null`
                                to suppress those.
                              type: object
                              properties:
                                font:
                                  pattern: ^\S(.*\S)?$
                                  description: >-
                                    Font slot as `<role>.<variant>` — role is
                                    `body`, `heading`, or a custom
                                    `typography.named` role; variant is one of
                                    regular, italic, bold, boldItalic (see
                                    `enums.fontVariant`; e.g. `heading.bold`).
                                    The shape is checked semantically at
                                    validate, not by this pattern: a misspelled
                                    variant, an undeclared role, a missing
                                    `.variant`, or a value that reads like a
                                    family name is rejected with a `didYouMean`
                                    pointing at the fix (use `set.family` for a
                                    typeface).
                                  type: string
                                sizeScale:
                                  minimum: 0.85
                                  maximum: 0.88
                                  description: >-
                                    Optical scale relative to the surrounding
                                    run. Accepted range is the 0.85–0.88 band;
                                    out-of-range values are rejected
                                  type: number
                                color:
                                  description: >-
                                    Color as `#RGB` or `#RRGGBB`, or `inherit`
                                    to use the inherited color
                                  anyOf:
                                    - pattern: ^#([0-9a-fA-F]{3}|[0-9a-fA-F]{6})$
                                      description: Color as `#RGB` or `#RRGGBB`
                                      type: string
                                    - const: inherit
                                      type: string
                                background:
                                  description: >-
                                    Background fill behind the code run as
                                    `#RGB`/`#RRGGBB`, or `null` to suppress
                                  anyOf:
                                    - pattern: ^#([0-9a-fA-F]{3}|[0-9a-fA-F]{6})$
                                      description: Color as `#RGB` or `#RRGGBB`
                                      type: string
                                    - type: 'null'
                                backgroundPadding:
                                  additionalProperties: false
                                  type: object
                                  properties:
                                    top:
                                      minimum: 0
                                      maximum: 9999
                                      description: Top padding, in points
                                      type: number
                                    right:
                                      minimum: 0
                                      maximum: 9999
                                      description: Right padding, in points
                                      type: number
                                    bottom:
                                      minimum: 0
                                      maximum: 9999
                                      description: Bottom padding, in points
                                      type: number
                                    left:
                                      minimum: 0
                                      maximum: 9999
                                      description: Left padding, in points
                                      type: number
                                    x:
                                      minimum: 0
                                      maximum: 9999
                                      description: >-
                                        Horizontal padding applied to both left
                                        and right when those sides are omitted,
                                        in points
                                      type: number
                                    'y':
                                      minimum: 0
                                      maximum: 9999
                                      description: >-
                                        Vertical padding applied to both top and
                                        bottom when those sides are omitted, in
                                        points
                                      type: number
                                backgroundBorder:
                                  description: >-
                                    Micro-border around each cloned background
                                    segment, or `null` to suppress
                                  anyOf:
                                    - additionalProperties: false
                                      type: object
                                      required:
                                        - width
                                        - color
                                      properties:
                                        width:
                                          minimum: 0.1
                                          maximum: 50
                                          description: Border thickness in points
                                          type: number
                                        color:
                                          pattern: ^#([0-9a-fA-F]{3}|[0-9a-fA-F]{6})$
                                          description: Color as `#RGB` or `#RRGGBB`
                                          type: string
                                        opacity:
                                          minimum: 0
                                          maximum: 1
                                          description: Border opacity from 0 to 1
                                          type: number
                                        dash:
                                          description: >-
                                            Dash pattern as `[dash, gap]` lengths in
                                            points; both `0` is rejected
                                          type: array
                                          items:
                                            minimum: 0
                                            maximum: 1000
                                            type: number
                                          minItems: 2
                                          maxItems: 2
                                    - type: 'null'
                                backgroundRadius:
                                  minimum: 0
                                  maximum: 14400
                                  description: >-
                                    Corner radius for each background segment,
                                    in points
                                  type: number
                                baselineShift:
                                  minimum: -999
                                  maximum: 999
                                  description: >-
                                    PDF text-rise adjustment in points; positive
                                    values raise the code glyphs
                                  type: number
                                opacity:
                                  minimum: 0
                                  maximum: 1
                                  description: Fill opacity from 0 to 1
                                  type: number
                                letterSpacing:
                                  minimum: -100
                                  maximum: 100
                                  description: >-
                                    Extra spacing between code glyphs in points;
                                    negative values tighten
                                  type: number
                bottomCenter:
                  additionalProperties: false
                  type: object
                  required:
                    - content
                  properties:
                    content:
                      minItems: 1
                      maxItems: 16
                      description: Ordered fragments concatenated to fill the slot
                      type: array
                      items:
                        description: >-
                          A header/footer fragment: literal text, an image
                          (logo/letterhead), page numbers, document title,
                          running section title, or section ordinal at a heading
                          depth. An `image` fragment must be the only fragment
                          in its slot — it is not mixed with text fragments.
                        anyOf:
                          - additionalProperties: false
                            type: object
                            required:
                              - kind
                              - value
                            properties:
                              kind:
                                const: text
                                type: string
                              value:
                                minLength: 1
                                maxLength: 256
                                pattern: \S
                                description: Literal text for this fragment
                                type: string
                              style:
                                additionalProperties: false
                                type: object
                                properties:
                                  font:
                                    pattern: ^\S(.*\S)?$
                                    description: >-
                                      Font slot as `<role>.<variant>` — role is
                                      `body`, `heading`, or a custom
                                      `typography.named` role; variant is one of
                                      regular, italic, bold, boldItalic (see
                                      `enums.fontVariant`; e.g. `heading.bold`).
                                      The shape is checked semantically at
                                      validate, not by this pattern: a
                                      misspelled variant, an undeclared role, a
                                      missing `.variant`, or a value that reads
                                      like a family name is rejected with a
                                      `didYouMean` pointing at the fix (use
                                      `set.family` for a typeface).
                                    type: string
                                  size:
                                    minimum: 1
                                    maximum: 999
                                    description: Font size in points
                                    type: number
                                  color:
                                    pattern: ^#([0-9a-fA-F]{3}|[0-9a-fA-F]{6})$
                                    description: Color as `#RGB` or `#RRGGBB`
                                    type: string
                                  opacity:
                                    minimum: 0
                                    maximum: 1
                                    description: Text opacity from 0 to 1
                                    type: number
                          - additionalProperties: false
                            type: object
                            required:
                              - kind
                              - url
                            properties:
                              kind:
                                const: image
                                type: string
                              url:
                                minLength: 1
                                maxLength: 1048576
                                pattern: ^(https://|data:image/)
                                description: >-
                                  HTTPS or base64 `data:image/...` URL of the
                                  header/footer image (typically a brand logo or
                                  letterhead). Fetched under the same fixed,
                                  non-configurable image policy as Markdown
                                  images (private IPs blocked, DNS-rebinding
                                  mitigation, 10 MiB cap); a fetch or decode
                                  failure degrades to a diagnostic and the image
                                  is omitted rather than failing the render.
                                  Rendered as a decorative PDF/UA pagination
                                  artifact (no alt text).
                                type: string
                              width:
                                minimum: 1
                                maximum: 14400
                                description: >-
                                  Rendered image width in PDF points. When
                                  omitted, the intrinsic width is used, clamped
                                  to the slot band width. Set `width` or
                                  `height` to scale a logo down.
                                type: number
                              height:
                                minimum: 1
                                maximum: 14400
                                description: >-
                                  Rendered image height in PDF points. When
                                  omitted, height follows the aspect ratio of
                                  the resolved width.
                                type: number
                              fit:
                                description: >-
                                  Block-only. How the image fills its
                                  width/height box: `none` (intrinsic sizing),
                                  `contain`, `cover`, or `fill`. Used with
                                  `height` for hero-style layouts.
                                anyOf:
                                  - const: none
                                    type: string
                                  - const: contain
                                    type: string
                                  - const: cover
                                    type: string
                                  - const: fill
                                    type: string
                              align:
                                description: >-
                                  Block-only. Horizontal alignment of the image
                                  within the content area: `start` (left edge in
                                  LTR), `center`, or `end` (right edge in LTR).
                                  Ignored for inline images (line flow controls
                                  position).
                                anyOf:
                                  - const: start
                                    type: string
                                  - const: center
                                    type: string
                                  - const: end
                                    type: string
                              opacity:
                                minimum: 0
                                maximum: 1
                                description: Image opacity from 0 to 1.
                                type: number
                          - additionalProperties: false
                            type: object
                            required:
                              - kind
                            properties:
                              kind:
                                const: pageNumber
                                type: string
                              style:
                                additionalProperties: false
                                type: object
                                properties:
                                  font:
                                    pattern: ^\S(.*\S)?$
                                    description: >-
                                      Font slot as `<role>.<variant>` — role is
                                      `body`, `heading`, or a custom
                                      `typography.named` role; variant is one of
                                      regular, italic, bold, boldItalic (see
                                      `enums.fontVariant`; e.g. `heading.bold`).
                                      The shape is checked semantically at
                                      validate, not by this pattern: a
                                      misspelled variant, an undeclared role, a
                                      missing `.variant`, or a value that reads
                                      like a family name is rejected with a
                                      `didYouMean` pointing at the fix (use
                                      `set.family` for a typeface).
                                    type: string
                                  size:
                                    minimum: 1
                                    maximum: 999
                                    description: Font size in points
                                    type: number
                                  color:
                                    pattern: ^#([0-9a-fA-F]{3}|[0-9a-fA-F]{6})$
                                    description: Color as `#RGB` or `#RRGGBB`
                                    type: string
                                  opacity:
                                    minimum: 0
                                    maximum: 1
                                    description: Text opacity from 0 to 1
                                    type: number
                          - additionalProperties: false
                            type: object
                            required:
                              - kind
                            properties:
                              kind:
                                const: totalPages
                                type: string
                              style:
                                additionalProperties: false
                                type: object
                                properties:
                                  font:
                                    pattern: ^\S(.*\S)?$
                                    description: >-
                                      Font slot as `<role>.<variant>` — role is
                                      `body`, `heading`, or a custom
                                      `typography.named` role; variant is one of
                                      regular, italic, bold, boldItalic (see
                                      `enums.fontVariant`; e.g. `heading.bold`).
                                      The shape is checked semantically at
                                      validate, not by this pattern: a
                                      misspelled variant, an undeclared role, a
                                      missing `.variant`, or a value that reads
                                      like a family name is rejected with a
                                      `didYouMean` pointing at the fix (use
                                      `set.family` for a typeface).
                                    type: string
                                  size:
                                    minimum: 1
                                    maximum: 999
                                    description: Font size in points
                                    type: number
                                  color:
                                    pattern: ^#([0-9a-fA-F]{3}|[0-9a-fA-F]{6})$
                                    description: Color as `#RGB` or `#RRGGBB`
                                    type: string
                                  opacity:
                                    minimum: 0
                                    maximum: 1
                                    description: Text opacity from 0 to 1
                                    type: number
                          - additionalProperties: false
                            type: object
                            required:
                              - kind
                            properties:
                              kind:
                                const: documentTitle
                                type: string
                              style:
                                additionalProperties: false
                                type: object
                                properties:
                                  font:
                                    pattern: ^\S(.*\S)?$
                                    description: >-
                                      Font slot as `<role>.<variant>` — role is
                                      `body`, `heading`, or a custom
                                      `typography.named` role; variant is one of
                                      regular, italic, bold, boldItalic (see
                                      `enums.fontVariant`; e.g. `heading.bold`).
                                      The shape is checked semantically at
                                      validate, not by this pattern: a
                                      misspelled variant, an undeclared role, a
                                      missing `.variant`, or a value that reads
                                      like a family name is rejected with a
                                      `didYouMean` pointing at the fix (use
                                      `set.family` for a typeface).
                                    type: string
                                  size:
                                    minimum: 1
                                    maximum: 999
                                    description: Font size in points
                                    type: number
                                  color:
                                    pattern: ^#([0-9a-fA-F]{3}|[0-9a-fA-F]{6})$
                                    description: Color as `#RGB` or `#RRGGBB`
                                    type: string
                                  opacity:
                                    minimum: 0
                                    maximum: 1
                                    description: Text opacity from 0 to 1
                                    type: number
                          - additionalProperties: false
                            type: object
                            required:
                              - kind
                            properties:
                              kind:
                                const: sectionTitle
                                type: string
                              depth:
                                description: Heading depth from 1 (top level) to 6
                                anyOf:
                                  - const: 1
                                    type: number
                                  - const: 2
                                    type: number
                                  - const: 3
                                    type: number
                                  - const: 4
                                    type: number
                                  - const: 5
                                    type: number
                                  - const: 6
                                    type: number
                              style:
                                additionalProperties: false
                                type: object
                                properties:
                                  font:
                                    pattern: ^\S(.*\S)?$
                                    description: >-
                                      Font slot as `<role>.<variant>` — role is
                                      `body`, `heading`, or a custom
                                      `typography.named` role; variant is one of
                                      regular, italic, bold, boldItalic (see
                                      `enums.fontVariant`; e.g. `heading.bold`).
                                      The shape is checked semantically at
                                      validate, not by this pattern: a
                                      misspelled variant, an undeclared role, a
                                      missing `.variant`, or a value that reads
                                      like a family name is rejected with a
                                      `didYouMean` pointing at the fix (use
                                      `set.family` for a typeface).
                                    type: string
                                  size:
                                    minimum: 1
                                    maximum: 999
                                    description: Font size in points
                                    type: number
                                  color:
                                    pattern: ^#([0-9a-fA-F]{3}|[0-9a-fA-F]{6})$
                                    description: Color as `#RGB` or `#RRGGBB`
                                    type: string
                                  opacity:
                                    minimum: 0
                                    maximum: 1
                                    description: Text opacity from 0 to 1
                                    type: number
                          - additionalProperties: false
                            type: object
                            required:
                              - kind
                            properties:
                              kind:
                                const: sectionIndex
                                type: string
                              depth:
                                description: Heading depth from 1 (top level) to 6
                                anyOf:
                                  - const: 1
                                    type: number
                                  - const: 2
                                    type: number
                                  - const: 3
                                    type: number
                                  - const: 4
                                    type: number
                                  - const: 5
                                    type: number
                                  - const: 6
                                    type: number
                              format:
                                description: >-
                                  Section ordinal format: `twoDigit` (at least
                                  two digits: 01, 12; ordinals ≥ 100 render in
                                  full) or `decimal` (1, 2, …)
                                anyOf:
                                  - const: twoDigit
                                    type: string
                                  - const: decimal
                                    type: string
                              style:
                                additionalProperties: false
                                type: object
                                properties:
                                  font:
                                    pattern: ^\S(.*\S)?$
                                    description: >-
                                      Font slot as `<role>.<variant>` — role is
                                      `body`, `heading`, or a custom
                                      `typography.named` role; variant is one of
                                      regular, italic, bold, boldItalic (see
                                      `enums.fontVariant`; e.g. `heading.bold`).
                                      The shape is checked semantically at
                                      validate, not by this pattern: a
                                      misspelled variant, an undeclared role, a
                                      missing `.variant`, or a value that reads
                                      like a family name is rejected with a
                                      `didYouMean` pointing at the fix (use
                                      `set.family` for a typeface).
                                    type: string
                                  size:
                                    minimum: 1
                                    maximum: 999
                                    description: Font size in points
                                    type: number
                                  color:
                                    pattern: ^#([0-9a-fA-F]{3}|[0-9a-fA-F]{6})$
                                    description: Color as `#RGB` or `#RRGGBB`
                                    type: string
                                  opacity:
                                    minimum: 0
                                    maximum: 1
                                    description: Text opacity from 0 to 1
                                    type: number
                    style:
                      additionalProperties: false
                      type: object
                      properties:
                        font:
                          pattern: ^\S(.*\S)?$
                          description: >-
                            Font slot as `<role>.<variant>` — role is `body`,
                            `heading`, or a custom `typography.named` role;
                            variant is one of regular, italic, bold, boldItalic
                            (see `enums.fontVariant`; e.g. `heading.bold`). The
                            shape is checked semantically at validate, not by
                            this pattern: a misspelled variant, an undeclared
                            role, a missing `.variant`, or a value that reads
                            like a family name is rejected with a `didYouMean`
                            pointing at the fix (use `set.family` for a
                            typeface).
                          type: string
                        family:
                          description: >-
                            A text family: a hosted weighted key, a declared
                            Google Fonts display name, or a `typography.named`
                            role reference
                          anyOf:
                            - const: inter
                              type: string
                            - const: lora
                              type: string
                            - const: source-serif-4
                              type: string
                            - pattern: ^[A-Za-z][A-Za-z0-9 ]{0,63}$
                              description: >-
                                Google Fonts display name from the declared pool
                                (e.g. `Playfair Display`)
                              type: string
                            - pattern: ^[a-z][a-z0-9-]{0,15}$
                              description: >-
                                Reference to a custom role declared in
                                `typography.named` (e.g. `display`)
                              type: string
                        size:
                          minimum: 1
                          maximum: 999
                          description: Font size in points
                          type: number
                        color:
                          pattern: ^#([0-9a-fA-F]{3}|[0-9a-fA-F]{6})$
                          description: Color as `#RGB` or `#RRGGBB`
                          type: string
                        spaceBefore:
                          minimum: 0
                          maximum: 9999
                          description: Vertical space reserved above the block, in points
                          type: number
                        spaceAfter:
                          minimum: 0
                          maximum: 9999
                          description: Vertical space reserved below the block, in points
                          type: number
                        lineHeight:
                          minimum: 1
                          maximum: 10
                          description: Line height as a multiple of the font size
                          type: number
                        align:
                          type: string
                          enum:
                            - left
                            - right
                            - center
                            - justify
                        letterSpacing:
                          minimum: -100
                          maximum: 100
                          description: >-
                            Extra spacing between characters in points; negative
                            values tighten
                          type: number
                        opacity:
                          minimum: 0
                          maximum: 1
                          description: Text opacity from 0 to 1
                          type: number
                        inline:
                          additionalProperties: false
                          type: object
                          properties:
                            strong:
                              additionalProperties: false
                              type: object
                              properties:
                                color:
                                  description: >-
                                    Color as `#RGB` or `#RRGGBB`, or `inherit`
                                    to use the inherited color
                                  anyOf:
                                    - pattern: ^#([0-9a-fA-F]{3}|[0-9a-fA-F]{6})$
                                      description: Color as `#RGB` or `#RRGGBB`
                                      type: string
                                    - const: inherit
                                      type: string
                            emphasis:
                              additionalProperties: false
                              type: object
                              properties:
                                color:
                                  description: >-
                                    Color as `#RGB` or `#RRGGBB`, or `inherit`
                                    to use the inherited color
                                  anyOf:
                                    - pattern: ^#([0-9a-fA-F]{3}|[0-9a-fA-F]{6})$
                                      description: Color as `#RGB` or `#RRGGBB`
                                      type: string
                                    - const: inherit
                                      type: string
                            delete:
                              additionalProperties: false
                              type: object
                              properties:
                                color:
                                  description: >-
                                    Color as `#RGB` or `#RRGGBB`, or `inherit`
                                    to use the inherited color
                                  anyOf:
                                    - pattern: ^#([0-9a-fA-F]{3}|[0-9a-fA-F]{6})$
                                      description: Color as `#RGB` or `#RRGGBB`
                                      type: string
                                    - const: inherit
                                      type: string
                                decorationStyle:
                                  type: string
                                  enum:
                                    - solid
                                    - double
                                    - dotted
                                    - dashed
                                    - wavy
                                decorationColor:
                                  description: >-
                                    Color as `#RGB` or `#RRGGBB`, or `inherit`
                                    to use the inherited color
                                  anyOf:
                                    - pattern: ^#([0-9a-fA-F]{3}|[0-9a-fA-F]{6})$
                                      description: Color as `#RGB` or `#RRGGBB`
                                      type: string
                                    - const: inherit
                                      type: string
                            mark:
                              additionalProperties: false
                              type: object
                              properties:
                                color:
                                  description: >-
                                    Color as `#RGB` or `#RRGGBB`, or `inherit`
                                    to use the inherited color
                                  anyOf:
                                    - pattern: ^#([0-9a-fA-F]{3}|[0-9a-fA-F]{6})$
                                      description: Color as `#RGB` or `#RRGGBB`
                                      type: string
                                    - const: inherit
                                      type: string
                                background:
                                  description: >-
                                    Background fill behind highlighted text as
                                    `#RGB`/`#RRGGBB`, or `null` to suppress
                                  anyOf:
                                    - pattern: ^#([0-9a-fA-F]{3}|[0-9a-fA-F]{6})$
                                      description: Color as `#RGB` or `#RRGGBB`
                                      type: string
                                    - type: 'null'
                                backgroundPadding:
                                  additionalProperties: false
                                  type: object
                                  properties:
                                    top:
                                      minimum: 0
                                      maximum: 9999
                                      description: Top padding, in points
                                      type: number
                                    right:
                                      minimum: 0
                                      maximum: 9999
                                      description: Right padding, in points
                                      type: number
                                    bottom:
                                      minimum: 0
                                      maximum: 9999
                                      description: Bottom padding, in points
                                      type: number
                                    left:
                                      minimum: 0
                                      maximum: 9999
                                      description: Left padding, in points
                                      type: number
                                    x:
                                      minimum: 0
                                      maximum: 9999
                                      description: >-
                                        Horizontal padding applied to both left
                                        and right when those sides are omitted,
                                        in points
                                      type: number
                                    'y':
                                      minimum: 0
                                      maximum: 9999
                                      description: >-
                                        Vertical padding applied to both top and
                                        bottom when those sides are omitted, in
                                        points
                                      type: number
                                backgroundRadius:
                                  minimum: 0
                                  maximum: 14400
                                  description: >-
                                    Corner radius for each highlight background
                                    segment, in points
                                  type: number
                            subscript:
                              additionalProperties: false
                              type: object
                              properties:
                                color:
                                  description: >-
                                    Color as `#RGB` or `#RRGGBB`, or `inherit`
                                    to use the inherited color
                                  anyOf:
                                    - pattern: ^#([0-9a-fA-F]{3}|[0-9a-fA-F]{6})$
                                      description: Color as `#RGB` or `#RRGGBB`
                                      type: string
                                    - const: inherit
                                      type: string
                                sizeScale:
                                  minimum: 0.4
                                  maximum: 1
                                  description: >-
                                    Optical scale relative to the surrounding
                                    run (fraction of base size)
                                  type: number
                                riseFraction:
                                  minimum: 0
                                  maximum: 1
                                  description: >-
                                    Baseline offset as a fraction of base size
                                    (not PDF points — contrast with code
                                    `baselineShift`). The renderer applies the
                                    sign (up for superscript, down for
                                    subscript)
                                  type: number
                            superscript:
                              additionalProperties: false
                              type: object
                              properties:
                                color:
                                  description: >-
                                    Color as `#RGB` or `#RRGGBB`, or `inherit`
                                    to use the inherited color
                                  anyOf:
                                    - pattern: ^#([0-9a-fA-F]{3}|[0-9a-fA-F]{6})$
                                      description: Color as `#RGB` or `#RRGGBB`
                                      type: string
                                    - const: inherit
                                      type: string
                                sizeScale:
                                  minimum: 0.4
                                  maximum: 1
                                  description: >-
                                    Optical scale relative to the surrounding
                                    run (fraction of base size)
                                  type: number
                                riseFraction:
                                  minimum: 0
                                  maximum: 1
                                  description: >-
                                    Baseline offset as a fraction of base size
                                    (not PDF points — contrast with code
                                    `baselineShift`). The renderer applies the
                                    sign (up for superscript, down for
                                    subscript)
                                  type: number
                            link:
                              additionalProperties: false
                              type: object
                              properties:
                                color:
                                  description: >-
                                    Color as `#RGB` or `#RRGGBB`, or `inherit`
                                    to use the inherited color
                                  anyOf:
                                    - pattern: ^#([0-9a-fA-F]{3}|[0-9a-fA-F]{6})$
                                      description: Color as `#RGB` or `#RRGGBB`
                                      type: string
                                    - const: inherit
                                      type: string
                                decoration:
                                  type: string
                                  enum:
                                    - underline
                                    - lineThrough
                                    - none
                                decorationStyle:
                                  type: string
                                  enum:
                                    - solid
                                    - double
                                    - dotted
                                    - dashed
                                    - wavy
                                decorationColor:
                                  description: >-
                                    Color as `#RGB` or `#RRGGBB`, or `inherit`
                                    to use the inherited color
                                  anyOf:
                                    - pattern: ^#([0-9a-fA-F]{3}|[0-9a-fA-F]{6})$
                                      description: Color as `#RGB` or `#RRGGBB`
                                      type: string
                                    - const: inherit
                                      type: string
                            code:
                              additionalProperties: false
                              description: >-
                                Style overrides for inline code spans (`` `code`
                                ``): font, optical size scale, text color,
                                background fill/padding/border/radius, baseline
                                shift, opacity, and letter spacing. Pass
                                `background: null` or `backgroundBorder: null`
                                to suppress those.
                              type: object
                              properties:
                                font:
                                  pattern: ^\S(.*\S)?$
                                  description: >-
                                    Font slot as `<role>.<variant>` — role is
                                    `body`, `heading`, or a custom
                                    `typography.named` role; variant is one of
                                    regular, italic, bold, boldItalic (see
                                    `enums.fontVariant`; e.g. `heading.bold`).
                                    The shape is checked semantically at
                                    validate, not by this pattern: a misspelled
                                    variant, an undeclared role, a missing
                                    `.variant`, or a value that reads like a
                                    family name is rejected with a `didYouMean`
                                    pointing at the fix (use `set.family` for a
                                    typeface).
                                  type: string
                                sizeScale:
                                  minimum: 0.85
                                  maximum: 0.88
                                  description: >-
                                    Optical scale relative to the surrounding
                                    run. Accepted range is the 0.85–0.88 band;
                                    out-of-range values are rejected
                                  type: number
                                color:
                                  description: >-
                                    Color as `#RGB` or `#RRGGBB`, or `inherit`
                                    to use the inherited color
                                  anyOf:
                                    - pattern: ^#([0-9a-fA-F]{3}|[0-9a-fA-F]{6})$
                                      description: Color as `#RGB` or `#RRGGBB`
                                      type: string
                                    - const: inherit
                                      type: string
                                background:
                                  description: >-
                                    Background fill behind the code run as
                                    `#RGB`/`#RRGGBB`, or `null` to suppress
                                  anyOf:
                                    - pattern: ^#([0-9a-fA-F]{3}|[0-9a-fA-F]{6})$
                                      description: Color as `#RGB` or `#RRGGBB`
                                      type: string
                                    - type: 'null'
                                backgroundPadding:
                                  additionalProperties: false
                                  type: object
                                  properties:
                                    top:
                                      minimum: 0
                                      maximum: 9999
                                      description: Top padding, in points
                                      type: number
                                    right:
                                      minimum: 0
                                      maximum: 9999
                                      description: Right padding, in points
                                      type: number
                                    bottom:
                                      minimum: 0
                                      maximum: 9999
                                      description: Bottom padding, in points
                                      type: number
                                    left:
                                      minimum: 0
                                      maximum: 9999
                                      description: Left padding, in points
                                      type: number
                                    x:
                                      minimum: 0
                                      maximum: 9999
                                      description: >-
                                        Horizontal padding applied to both left
                                        and right when those sides are omitted,
                                        in points
                                      type: number
                                    'y':
                                      minimum: 0
                                      maximum: 9999
                                      description: >-
                                        Vertical padding applied to both top and
                                        bottom when those sides are omitted, in
                                        points
                                      type: number
                                backgroundBorder:
                                  description: >-
                                    Micro-border around each cloned background
                                    segment, or `null` to suppress
                                  anyOf:
                                    - additionalProperties: false
                                      type: object
                                      required:
                                        - width
                                        - color
                                      properties:
                                        width:
                                          minimum: 0.1
                                          maximum: 50
                                          description: Border thickness in points
                                          type: number
                                        color:
                                          pattern: ^#([0-9a-fA-F]{3}|[0-9a-fA-F]{6})$
                                          description: Color as `#RGB` or `#RRGGBB`
                                          type: string
                                        opacity:
                                          minimum: 0
                                          maximum: 1
                                          description: Border opacity from 0 to 1
                                          type: number
                                        dash:
                                          description: >-
                                            Dash pattern as `[dash, gap]` lengths in
                                            points; both `0` is rejected
                                          type: array
                                          items:
                                            minimum: 0
                                            maximum: 1000
                                            type: number
                                          minItems: 2
                                          maxItems: 2
                                    - type: 'null'
                                backgroundRadius:
                                  minimum: 0
                                  maximum: 14400
                                  description: >-
                                    Corner radius for each background segment,
                                    in points
                                  type: number
                                baselineShift:
                                  minimum: -999
                                  maximum: 999
                                  description: >-
                                    PDF text-rise adjustment in points; positive
                                    values raise the code glyphs
                                  type: number
                                opacity:
                                  minimum: 0
                                  maximum: 1
                                  description: Fill opacity from 0 to 1
                                  type: number
                                letterSpacing:
                                  minimum: -100
                                  maximum: 100
                                  description: >-
                                    Extra spacing between code glyphs in points;
                                    negative values tighten
                                  type: number
                bottomRight:
                  additionalProperties: false
                  type: object
                  required:
                    - content
                  properties:
                    content:
                      minItems: 1
                      maxItems: 16
                      description: Ordered fragments concatenated to fill the slot
                      type: array
                      items:
                        description: >-
                          A header/footer fragment: literal text, an image
                          (logo/letterhead), page numbers, document title,
                          running section title, or section ordinal at a heading
                          depth. An `image` fragment must be the only fragment
                          in its slot — it is not mixed with text fragments.
                        anyOf:
                          - additionalProperties: false
                            type: object
                            required:
                              - kind
                              - value
                            properties:
                              kind:
                                const: text
                                type: string
                              value:
                                minLength: 1
                                maxLength: 256
                                pattern: \S
                                description: Literal text for this fragment
                                type: string
                              style:
                                additionalProperties: false
                                type: object
                                properties:
                                  font:
                                    pattern: ^\S(.*\S)?$
                                    description: >-
                                      Font slot as `<role>.<variant>` — role is
                                      `body`, `heading`, or a custom
                                      `typography.named` role; variant is one of
                                      regular, italic, bold, boldItalic (see
                                      `enums.fontVariant`; e.g. `heading.bold`).
                                      The shape is checked semantically at
                                      validate, not by this pattern: a
                                      misspelled variant, an undeclared role, a
                                      missing `.variant`, or a value that reads
                                      like a family name is rejected with a
                                      `didYouMean` pointing at the fix (use
                                      `set.family` for a typeface).
                                    type: string
                                  size:
                                    minimum: 1
                                    maximum: 999
                                    description: Font size in points
                                    type: number
                                  color:
                                    pattern: ^#([0-9a-fA-F]{3}|[0-9a-fA-F]{6})$
                                    description: Color as `#RGB` or `#RRGGBB`
                                    type: string
                                  opacity:
                                    minimum: 0
                                    maximum: 1
                                    description: Text opacity from 0 to 1
                                    type: number
                          - additionalProperties: false
                            type: object
                            required:
                              - kind
                              - url
                            properties:
                              kind:
                                const: image
                                type: string
                              url:
                                minLength: 1
                                maxLength: 1048576
                                pattern: ^(https://|data:image/)
                                description: >-
                                  HTTPS or base64 `data:image/...` URL of the
                                  header/footer image (typically a brand logo or
                                  letterhead). Fetched under the same fixed,
                                  non-configurable image policy as Markdown
                                  images (private IPs blocked, DNS-rebinding
                                  mitigation, 10 MiB cap); a fetch or decode
                                  failure degrades to a diagnostic and the image
                                  is omitted rather than failing the render.
                                  Rendered as a decorative PDF/UA pagination
                                  artifact (no alt text).
                                type: string
                              width:
                                minimum: 1
                                maximum: 14400
                                description: >-
                                  Rendered image width in PDF points. When
                                  omitted, the intrinsic width is used, clamped
                                  to the slot band width. Set `width` or
                                  `height` to scale a logo down.
                                type: number
                              height:
                                minimum: 1
                                maximum: 14400
                                description: >-
                                  Rendered image height in PDF points. When
                                  omitted, height follows the aspect ratio of
                                  the resolved width.
                                type: number
                              fit:
                                description: >-
                                  Block-only. How the image fills its
                                  width/height box: `none` (intrinsic sizing),
                                  `contain`, `cover`, or `fill`. Used with
                                  `height` for hero-style layouts.
                                anyOf:
                                  - const: none
                                    type: string
                                  - const: contain
                                    type: string
                                  - const: cover
                                    type: string
                                  - const: fill
                                    type: string
                              align:
                                description: >-
                                  Block-only. Horizontal alignment of the image
                                  within the content area: `start` (left edge in
                                  LTR), `center`, or `end` (right edge in LTR).
                                  Ignored for inline images (line flow controls
                                  position).
                                anyOf:
                                  - const: start
                                    type: string
                                  - const: center
                                    type: string
                                  - const: end
                                    type: string
                              opacity:
                                minimum: 0
                                maximum: 1
                                description: Image opacity from 0 to 1.
                                type: number
                          - additionalProperties: false
                            type: object
                            required:
                              - kind
                            properties:
                              kind:
                                const: pageNumber
                                type: string
                              style:
                                additionalProperties: false
                                type: object
                                properties:
                                  font:
                                    pattern: ^\S(.*\S)?$
                                    description: >-
                                      Font slot as `<role>.<variant>` — role is
                                      `body`, `heading`, or a custom
                                      `typography.named` role; variant is one of
                                      regular, italic, bold, boldItalic (see
                                      `enums.fontVariant`; e.g. `heading.bold`).
                                      The shape is checked semantically at
                                      validate, not by this pattern: a
                                      misspelled variant, an undeclared role, a
                                      missing `.variant`, or a value that reads
                                      like a family name is rejected with a
                                      `didYouMean` pointing at the fix (use
                                      `set.family` for a typeface).
                                    type: string
                                  size:
                                    minimum: 1
                                    maximum: 999
                                    description: Font size in points
                                    type: number
                                  color:
                                    pattern: ^#([0-9a-fA-F]{3}|[0-9a-fA-F]{6})$
                                    description: Color as `#RGB` or `#RRGGBB`
                                    type: string
                                  opacity:
                                    minimum: 0
                                    maximum: 1
                                    description: Text opacity from 0 to 1
                                    type: number
                          - additionalProperties: false
                            type: object
                            required:
                              - kind
                            properties:
                              kind:
                                const: totalPages
                                type: string
                              style:
                                additionalProperties: false
                                type: object
                                properties:
                                  font:
                                    pattern: ^\S(.*\S)?$
                                    description: >-
                                      Font slot as `<role>.<variant>` — role is
                                      `body`, `heading`, or a custom
                                      `typography.named` role; variant is one of
                                      regular, italic, bold, boldItalic (see
                                      `enums.fontVariant`; e.g. `heading.bold`).
                                      The shape is checked semantically at
                                      validate, not by this pattern: a
                                      misspelled variant, an undeclared role, a
                                      missing `.variant`, or a value that reads
                                      like a family name is rejected with a
                                      `didYouMean` pointing at the fix (use
                                      `set.family` for a typeface).
                                    type: string
                                  size:
                                    minimum: 1
                                    maximum: 999
                                    description: Font size in points
                                    type: number
                                  color:
                                    pattern: ^#([0-9a-fA-F]{3}|[0-9a-fA-F]{6})$
                                    description: Color as `#RGB` or `#RRGGBB`
                                    type: string
                                  opacity:
                                    minimum: 0
                                    maximum: 1
                                    description: Text opacity from 0 to 1
                                    type: number
                          - additionalProperties: false
                            type: object
                            required:
                              - kind
                            properties:
                              kind:
                                const: documentTitle
                                type: string
                              style:
                                additionalProperties: false
                                type: object
                                properties:
                                  font:
                                    pattern: ^\S(.*\S)?$
                                    description: >-
                                      Font slot as `<role>.<variant>` — role is
                                      `body`, `heading`, or a custom
                                      `typography.named` role; variant is one of
                                      regular, italic, bold, boldItalic (see
                                      `enums.fontVariant`; e.g. `heading.bold`).
                                      The shape is checked semantically at
                                      validate, not by this pattern: a
                                      misspelled variant, an undeclared role, a
                                      missing `.variant`, or a value that reads
                                      like a family name is rejected with a
                                      `didYouMean` pointing at the fix (use
                                      `set.family` for a typeface).
                                    type: string
                                  size:
                                    minimum: 1
                                    maximum: 999
                                    description: Font size in points
                                    type: number
                                  color:
                                    pattern: ^#([0-9a-fA-F]{3}|[0-9a-fA-F]{6})$
                                    description: Color as `#RGB` or `#RRGGBB`
                                    type: string
                                  opacity:
                                    minimum: 0
                                    maximum: 1
                                    description: Text opacity from 0 to 1
                                    type: number
                          - additionalProperties: false
                            type: object
                            required:
                              - kind
                            properties:
                              kind:
                                const: sectionTitle
                                type: string
                              depth:
                                description: Heading depth from 1 (top level) to 6
                                anyOf:
                                  - const: 1
                                    type: number
                                  - const: 2
                                    type: number
                                  - const: 3
                                    type: number
                                  - const: 4
                                    type: number
                                  - const: 5
                                    type: number
                                  - const: 6
                                    type: number
                              style:
                                additionalProperties: false
                                type: object
                                properties:
                                  font:
                                    pattern: ^\S(.*\S)?$
                                    description: >-
                                      Font slot as `<role>.<variant>` — role is
                                      `body`, `heading`, or a custom
                                      `typography.named` role; variant is one of
                                      regular, italic, bold, boldItalic (see
                                      `enums.fontVariant`; e.g. `heading.bold`).
                                      The shape is checked semantically at
                                      validate, not by this pattern: a
                                      misspelled variant, an undeclared role, a
                                      missing `.variant`, or a value that reads
                                      like a family name is rejected with a
                                      `didYouMean` pointing at the fix (use
                                      `set.family` for a typeface).
                                    type: string
                                  size:
                                    minimum: 1
                                    maximum: 999
                                    description: Font size in points
                                    type: number
                                  color:
                                    pattern: ^#([0-9a-fA-F]{3}|[0-9a-fA-F]{6})$
                                    description: Color as `#RGB` or `#RRGGBB`
                                    type: string
                                  opacity:
                                    minimum: 0
                                    maximum: 1
                                    description: Text opacity from 0 to 1
                                    type: number
                          - additionalProperties: false
                            type: object
                            required:
                              - kind
                            properties:
                              kind:
                                const: sectionIndex
                                type: string
                              depth:
                                description: Heading depth from 1 (top level) to 6
                                anyOf:
                                  - const: 1
                                    type: number
                                  - const: 2
                                    type: number
                                  - const: 3
                                    type: number
                                  - const: 4
                                    type: number
                                  - const: 5
                                    type: number
                                  - const: 6
                                    type: number
                              format:
                                description: >-
                                  Section ordinal format: `twoDigit` (at least
                                  two digits: 01, 12; ordinals ≥ 100 render in
                                  full) or `decimal` (1, 2, …)
                                anyOf:
                                  - const: twoDigit
                                    type: string
                                  - const: decimal
                                    type: string
                              style:
                                additionalProperties: false
                                type: object
                                properties:
                                  font:
                                    pattern: ^\S(.*\S)?$
                                    description: >-
                                      Font slot as `<role>.<variant>` — role is
                                      `body`, `heading`, or a custom
                                      `typography.named` role; variant is one of
                                      regular, italic, bold, boldItalic (see
                                      `enums.fontVariant`; e.g. `heading.bold`).
                                      The shape is checked semantically at
                                      validate, not by this pattern: a
                                      misspelled variant, an undeclared role, a
                                      missing `.variant`, or a value that reads
                                      like a family name is rejected with a
                                      `didYouMean` pointing at the fix (use
                                      `set.family` for a typeface).
                                    type: string
                                  size:
                                    minimum: 1
                                    maximum: 999
                                    description: Font size in points
                                    type: number
                                  color:
                                    pattern: ^#([0-9a-fA-F]{3}|[0-9a-fA-F]{6})$
                                    description: Color as `#RGB` or `#RRGGBB`
                                    type: string
                                  opacity:
                                    minimum: 0
                                    maximum: 1
                                    description: Text opacity from 0 to 1
                                    type: number
                    style:
                      additionalProperties: false
                      type: object
                      properties:
                        font:
                          pattern: ^\S(.*\S)?$
                          description: >-
                            Font slot as `<role>.<variant>` — role is `body`,
                            `heading`, or a custom `typography.named` role;
                            variant is one of regular, italic, bold, boldItalic
                            (see `enums.fontVariant`; e.g. `heading.bold`). The
                            shape is checked semantically at validate, not by
                            this pattern: a misspelled variant, an undeclared
                            role, a missing `.variant`, or a value that reads
                            like a family name is rejected with a `didYouMean`
                            pointing at the fix (use `set.family` for a
                            typeface).
                          type: string
                        family:
                          description: >-
                            A text family: a hosted weighted key, a declared
                            Google Fonts display name, or a `typography.named`
                            role reference
                          anyOf:
                            - const: inter
                              type: string
                            - const: lora
                              type: string
                            - const: source-serif-4
                              type: string
                            - pattern: ^[A-Za-z][A-Za-z0-9 ]{0,63}$
                              description: >-
                                Google Fonts display name from the declared pool
                                (e.g. `Playfair Display`)
                              type: string
                            - pattern: ^[a-z][a-z0-9-]{0,15}$
                              description: >-
                                Reference to a custom role declared in
                                `typography.named` (e.g. `display`)
                              type: string
                        size:
                          minimum: 1
                          maximum: 999
                          description: Font size in points
                          type: number
                        color:
                          pattern: ^#([0-9a-fA-F]{3}|[0-9a-fA-F]{6})$
                          description: Color as `#RGB` or `#RRGGBB`
                          type: string
                        spaceBefore:
                          minimum: 0
                          maximum: 9999
                          description: Vertical space reserved above the block, in points
                          type: number
                        spaceAfter:
                          minimum: 0
                          maximum: 9999
                          description: Vertical space reserved below the block, in points
                          type: number
                        lineHeight:
                          minimum: 1
                          maximum: 10
                          description: Line height as a multiple of the font size
                          type: number
                        align:
                          type: string
                          enum:
                            - left
                            - right
                            - center
                            - justify
                        letterSpacing:
                          minimum: -100
                          maximum: 100
                          description: >-
                            Extra spacing between characters in points; negative
                            values tighten
                          type: number
                        opacity:
                          minimum: 0
                          maximum: 1
                          description: Text opacity from 0 to 1
                          type: number
                        inline:
                          additionalProperties: false
                          type: object
                          properties:
                            strong:
                              additionalProperties: false
                              type: object
                              properties:
                                color:
                                  description: >-
                                    Color as `#RGB` or `#RRGGBB`, or `inherit`
                                    to use the inherited color
                                  anyOf:
                                    - pattern: ^#([0-9a-fA-F]{3}|[0-9a-fA-F]{6})$
                                      description: Color as `#RGB` or `#RRGGBB`
                                      type: string
                                    - const: inherit
                                      type: string
                            emphasis:
                              additionalProperties: false
                              type: object
                              properties:
                                color:
                                  description: >-
                                    Color as `#RGB` or `#RRGGBB`, or `inherit`
                                    to use the inherited color
                                  anyOf:
                                    - pattern: ^#([0-9a-fA-F]{3}|[0-9a-fA-F]{6})$
                                      description: Color as `#RGB` or `#RRGGBB`
                                      type: string
                                    - const: inherit
                                      type: string
                            delete:
                              additionalProperties: false
                              type: object
                              properties:
                                color:
                                  description: >-
                                    Color as `#RGB` or `#RRGGBB`, or `inherit`
                                    to use the inherited color
                                  anyOf:
                                    - pattern: ^#([0-9a-fA-F]{3}|[0-9a-fA-F]{6})$
                                      description: Color as `#RGB` or `#RRGGBB`
                                      type: string
                                    - const: inherit
                                      type: string
                                decorationStyle:
                                  type: string
                                  enum:
                                    - solid
                                    - double
                                    - dotted
                                    - dashed
                                    - wavy
                                decorationColor:
                                  description: >-
                                    Color as `#RGB` or `#RRGGBB`, or `inherit`
                                    to use the inherited color
                                  anyOf:
                                    - pattern: ^#([0-9a-fA-F]{3}|[0-9a-fA-F]{6})$
                                      description: Color as `#RGB` or `#RRGGBB`
                                      type: string
                                    - const: inherit
                                      type: string
                            mark:
                              additionalProperties: false
                              type: object
                              properties:
                                color:
                                  description: >-
                                    Color as `#RGB` or `#RRGGBB`, or `inherit`
                                    to use the inherited color
                                  anyOf:
                                    - pattern: ^#([0-9a-fA-F]{3}|[0-9a-fA-F]{6})$
                                      description: Color as `#RGB` or `#RRGGBB`
                                      type: string
                                    - const: inherit
                                      type: string
                                background:
                                  description: >-
                                    Background fill behind highlighted text as
                                    `#RGB`/`#RRGGBB`, or `null` to suppress
                                  anyOf:
                                    - pattern: ^#([0-9a-fA-F]{3}|[0-9a-fA-F]{6})$
                                      description: Color as `#RGB` or `#RRGGBB`
                                      type: string
                                    - type: 'null'
                                backgroundPadding:
                                  additionalProperties: false
                                  type: object
                                  properties:
                                    top:
                                      minimum: 0
                                      maximum: 9999
                                      description: Top padding, in points
                                      type: number
                                    right:
                                      minimum: 0
                                      maximum: 9999
                                      description: Right padding, in points
                                      type: number
                                    bottom:
                                      minimum: 0
                                      maximum: 9999
                                      description: Bottom padding, in points
                                      type: number
                                    left:
                                      minimum: 0
                                      maximum: 9999
                                      description: Left padding, in points
                                      type: number
                                    x:
                                      minimum: 0
                                      maximum: 9999
                                      description: >-
                                        Horizontal padding applied to both left
                                        and right when those sides are omitted,
                                        in points
                                      type: number
                                    'y':
                                      minimum: 0
                                      maximum: 9999
                                      description: >-
                                        Vertical padding applied to both top and
                                        bottom when those sides are omitted, in
                                        points
                                      type: number
                                backgroundRadius:
                                  minimum: 0
                                  maximum: 14400
                                  description: >-
                                    Corner radius for each highlight background
                                    segment, in points
                                  type: number
                            subscript:
                              additionalProperties: false
                              type: object
                              properties:
                                color:
                                  description: >-
                                    Color as `#RGB` or `#RRGGBB`, or `inherit`
                                    to use the inherited color
                                  anyOf:
                                    - pattern: ^#([0-9a-fA-F]{3}|[0-9a-fA-F]{6})$
                                      description: Color as `#RGB` or `#RRGGBB`
                                      type: string
                                    - const: inherit
                                      type: string
                                sizeScale:
                                  minimum: 0.4
                                  maximum: 1
                                  description: >-
                                    Optical scale relative to the surrounding
                                    run (fraction of base size)
                                  type: number
                                riseFraction:
                                  minimum: 0
                                  maximum: 1
                                  description: >-
                                    Baseline offset as a fraction of base size
                                    (not PDF points — contrast with code
                                    `baselineShift`). The renderer applies the
                                    sign (up for superscript, down for
                                    subscript)
                                  type: number
                            superscript:
                              additionalProperties: false
                              type: object
                              properties:
                                color:
                                  description: >-
                                    Color as `#RGB` or `#RRGGBB`, or `inherit`
                                    to use the inherited color
                                  anyOf:
                                    - pattern: ^#([0-9a-fA-F]{3}|[0-9a-fA-F]{6})$
                                      description: Color as `#RGB` or `#RRGGBB`
                                      type: string
                                    - const: inherit
                                      type: string
                                sizeScale:
                                  minimum: 0.4
                                  maximum: 1
                                  description: >-
                                    Optical scale relative to the surrounding
                                    run (fraction of base size)
                                  type: number
                                riseFraction:
                                  minimum: 0
                                  maximum: 1
                                  description: >-
                                    Baseline offset as a fraction of base size
                                    (not PDF points — contrast with code
                                    `baselineShift`). The renderer applies the
                                    sign (up for superscript, down for
                                    subscript)
                                  type: number
                            link:
                              additionalProperties: false
                              type: object
                              properties:
                                color:
                                  description: >-
                                    Color as `#RGB` or `#RRGGBB`, or `inherit`
                                    to use the inherited color
                                  anyOf:
                                    - pattern: ^#([0-9a-fA-F]{3}|[0-9a-fA-F]{6})$
                                      description: Color as `#RGB` or `#RRGGBB`
                                      type: string
                                    - const: inherit
                                      type: string
                                decoration:
                                  type: string
                                  enum:
                                    - underline
                                    - lineThrough
                                    - none
                                decorationStyle:
                                  type: string
                                  enum:
                                    - solid
                                    - double
                                    - dotted
                                    - dashed
                                    - wavy
                                decorationColor:
                                  description: >-
                                    Color as `#RGB` or `#RRGGBB`, or `inherit`
                                    to use the inherited color
                                  anyOf:
                                    - pattern: ^#([0-9a-fA-F]{3}|[0-9a-fA-F]{6})$
                                      description: Color as `#RGB` or `#RRGGBB`
                                      type: string
                                    - const: inherit
                                      type: string
                            code:
                              additionalProperties: false
                              description: >-
                                Style overrides for inline code spans (`` `code`
                                ``): font, optical size scale, text color,
                                background fill/padding/border/radius, baseline
                                shift, opacity, and letter spacing. Pass
                                `background: null` or `backgroundBorder: null`
                                to suppress those.
                              type: object
                              properties:
                                font:
                                  pattern: ^\S(.*\S)?$
                                  description: >-
                                    Font slot as `<role>.<variant>` — role is
                                    `body`, `heading`, or a custom
                                    `typography.named` role; variant is one of
                                    regular, italic, bold, boldItalic (see
                                    `enums.fontVariant`; e.g. `heading.bold`).
                                    The shape is checked semantically at
                                    validate, not by this pattern: a misspelled
                                    variant, an undeclared role, a missing
                                    `.variant`, or a value that reads like a
                                    family name is rejected with a `didYouMean`
                                    pointing at the fix (use `set.family` for a
                                    typeface).
                                  type: string
                                sizeScale:
                                  minimum: 0.85
                                  maximum: 0.88
                                  description: >-
                                    Optical scale relative to the surrounding
                                    run. Accepted range is the 0.85–0.88 band;
                                    out-of-range values are rejected
                                  type: number
                                color:
                                  description: >-
                                    Color as `#RGB` or `#RRGGBB`, or `inherit`
                                    to use the inherited color
                                  anyOf:
                                    - pattern: ^#([0-9a-fA-F]{3}|[0-9a-fA-F]{6})$
                                      description: Color as `#RGB` or `#RRGGBB`
                                      type: string
                                    - const: inherit
                                      type: string
                                background:
                                  description: >-
                                    Background fill behind the code run as
                                    `#RGB`/`#RRGGBB`, or `null` to suppress
                                  anyOf:
                                    - pattern: ^#([0-9a-fA-F]{3}|[0-9a-fA-F]{6})$
                                      description: Color as `#RGB` or `#RRGGBB`
                                      type: string
                                    - type: 'null'
                                backgroundPadding:
                                  additionalProperties: false
                                  type: object
                                  properties:
                                    top:
                                      minimum: 0
                                      maximum: 9999
                                      description: Top padding, in points
                                      type: number
                                    right:
                                      minimum: 0
                                      maximum: 9999
                                      description: Right padding, in points
                                      type: number
                                    bottom:
                                      minimum: 0
                                      maximum: 9999
                                      description: Bottom padding, in points
                                      type: number
                                    left:
                                      minimum: 0
                                      maximum: 9999
                                      description: Left padding, in points
                                      type: number
                                    x:
                                      minimum: 0
                                      maximum: 9999
                                      description: >-
                                        Horizontal padding applied to both left
                                        and right when those sides are omitted,
                                        in points
                                      type: number
                                    'y':
                                      minimum: 0
                                      maximum: 9999
                                      description: >-
                                        Vertical padding applied to both top and
                                        bottom when those sides are omitted, in
                                        points
                                      type: number
                                backgroundBorder:
                                  description: >-
                                    Micro-border around each cloned background
                                    segment, or `null` to suppress
                                  anyOf:
                                    - additionalProperties: false
                                      type: object
                                      required:
                                        - width
                                        - color
                                      properties:
                                        width:
                                          minimum: 0.1
                                          maximum: 50
                                          description: Border thickness in points
                                          type: number
                                        color:
                                          pattern: ^#([0-9a-fA-F]{3}|[0-9a-fA-F]{6})$
                                          description: Color as `#RGB` or `#RRGGBB`
                                          type: string
                                        opacity:
                                          minimum: 0
                                          maximum: 1
                                          description: Border opacity from 0 to 1
                                          type: number
                                        dash:
                                          description: >-
                                            Dash pattern as `[dash, gap]` lengths in
                                            points; both `0` is rejected
                                          type: array
                                          items:
                                            minimum: 0
                                            maximum: 1000
                                            type: number
                                          minItems: 2
                                          maxItems: 2
                                    - type: 'null'
                                backgroundRadius:
                                  minimum: 0
                                  maximum: 14400
                                  description: >-
                                    Corner radius for each background segment,
                                    in points
                                  type: number
                                baselineShift:
                                  minimum: -999
                                  maximum: 999
                                  description: >-
                                    PDF text-rise adjustment in points; positive
                                    values raise the code glyphs
                                  type: number
                                opacity:
                                  minimum: 0
                                  maximum: 1
                                  description: Fill opacity from 0 to 1
                                  type: number
                                letterSpacing:
                                  minimum: -100
                                  maximum: 100
                                  description: >-
                                    Extra spacing between code glyphs in points;
                                    negative values tighten
                                  type: number
            omitLastPage:
              description: >-
                When true, suppresses all furniture on the final page only
                (slots, watermark, and decorations). Ignored when the document
                has one page
              type: boolean
            lastPage:
              additionalProperties: false
              description: >-
                Content for each of the six header and footer positions
                (top/bottom × left/center/right)
              type: object
              properties:
                topLeft:
                  additionalProperties: false
                  type: object
                  required:
                    - content
                  properties:
                    content:
                      minItems: 1
                      maxItems: 16
                      description: Ordered fragments concatenated to fill the slot
                      type: array
                      items:
                        description: >-
                          A header/footer fragment: literal text, an image
                          (logo/letterhead), page numbers, document title,
                          running section title, or section ordinal at a heading
                          depth. An `image` fragment must be the only fragment
                          in its slot — it is not mixed with text fragments.
                        anyOf:
                          - additionalProperties: false
                            type: object
                            required:
                              - kind
                              - value
                            properties:
                              kind:
                                const: text
                                type: string
                              value:
                                minLength: 1
                                maxLength: 256
                                pattern: \S
                                description: Literal text for this fragment
                                type: string
                              style:
                                additionalProperties: false
                                type: object
                                properties:
                                  font:
                                    pattern: ^\S(.*\S)?$
                                    description: >-
                                      Font slot as `<role>.<variant>` — role is
                                      `body`, `heading`, or a custom
                                      `typography.named` role; variant is one of
                                      regular, italic, bold, boldItalic (see
                                      `enums.fontVariant`; e.g. `heading.bold`).
                                      The shape is checked semantically at
                                      validate, not by this pattern: a
                                      misspelled variant, an undeclared role, a
                                      missing `.variant`, or a value that reads
                                      like a family name is rejected with a
                                      `didYouMean` pointing at the fix (use
                                      `set.family` for a typeface).
                                    type: string
                                  size:
                                    minimum: 1
                                    maximum: 999
                                    description: Font size in points
                                    type: number
                                  color:
                                    pattern: ^#([0-9a-fA-F]{3}|[0-9a-fA-F]{6})$
                                    description: Color as `#RGB` or `#RRGGBB`
                                    type: string
                                  opacity:
                                    minimum: 0
                                    maximum: 1
                                    description: Text opacity from 0 to 1
                                    type: number
                          - additionalProperties: false
                            type: object
                            required:
                              - kind
                              - url
                            properties:
                              kind:
                                const: image
                                type: string
                              url:
                                minLength: 1
                                maxLength: 1048576
                                pattern: ^(https://|data:image/)
                                description: >-
                                  HTTPS or base64 `data:image/...` URL of the
                                  header/footer image (typically a brand logo or
                                  letterhead). Fetched under the same fixed,
                                  non-configurable image policy as Markdown
                                  images (private IPs blocked, DNS-rebinding
                                  mitigation, 10 MiB cap); a fetch or decode
                                  failure degrades to a diagnostic and the image
                                  is omitted rather than failing the render.
                                  Rendered as a decorative PDF/UA pagination
                                  artifact (no alt text).
                                type: string
                              width:
                                minimum: 1
                                maximum: 14400
                                description: >-
                                  Rendered image width in PDF points. When
                                  omitted, the intrinsic width is used, clamped
                                  to the slot band width. Set `width` or
                                  `height` to scale a logo down.
                                type: number
                              height:
                                minimum: 1
                                maximum: 14400
                                description: >-
                                  Rendered image height in PDF points. When
                                  omitted, height follows the aspect ratio of
                                  the resolved width.
                                type: number
                              fit:
                                description: >-
                                  Block-only. How the image fills its
                                  width/height box: `none` (intrinsic sizing),
                                  `contain`, `cover`, or `fill`. Used with
                                  `height` for hero-style layouts.
                                anyOf:
                                  - const: none
                                    type: string
                                  - const: contain
                                    type: string
                                  - const: cover
                                    type: string
                                  - const: fill
                                    type: string
                              align:
                                description: >-
                                  Block-only. Horizontal alignment of the image
                                  within the content area: `start` (left edge in
                                  LTR), `center`, or `end` (right edge in LTR).
                                  Ignored for inline images (line flow controls
                                  position).
                                anyOf:
                                  - const: start
                                    type: string
                                  - const: center
                                    type: string
                                  - const: end
                                    type: string
                              opacity:
                                minimum: 0
                                maximum: 1
                                description: Image opacity from 0 to 1.
                                type: number
                          - additionalProperties: false
                            type: object
                            required:
                              - kind
                            properties:
                              kind:
                                const: pageNumber
                                type: string
                              style:
                                additionalProperties: false
                                type: object
                                properties:
                                  font:
                                    pattern: ^\S(.*\S)?$
                                    description: >-
                                      Font slot as `<role>.<variant>` — role is
                                      `body`, `heading`, or a custom
                                      `typography.named` role; variant is one of
                                      regular, italic, bold, boldItalic (see
                                      `enums.fontVariant`; e.g. `heading.bold`).
                                      The shape is checked semantically at
                                      validate, not by this pattern: a
                                      misspelled variant, an undeclared role, a
                                      missing `.variant`, or a value that reads
                                      like a family name is rejected with a
                                      `didYouMean` pointing at the fix (use
                                      `set.family` for a typeface).
                                    type: string
                                  size:
                                    minimum: 1
                                    maximum: 999
                                    description: Font size in points
                                    type: number
                                  color:
                                    pattern: ^#([0-9a-fA-F]{3}|[0-9a-fA-F]{6})$
                                    description: Color as `#RGB` or `#RRGGBB`
                                    type: string
                                  opacity:
                                    minimum: 0
                                    maximum: 1
                                    description: Text opacity from 0 to 1
                                    type: number
                          - additionalProperties: false
                            type: object
                            required:
                              - kind
                            properties:
                              kind:
                                const: totalPages
                                type: string
                              style:
                                additionalProperties: false
                                type: object
                                properties:
                                  font:
                                    pattern: ^\S(.*\S)?$
                                    description: >-
                                      Font slot as `<role>.<variant>` — role is
                                      `body`, `heading`, or a custom
                                      `typography.named` role; variant is one of
                                      regular, italic, bold, boldItalic (see
                                      `enums.fontVariant`; e.g. `heading.bold`).
                                      The shape is checked semantically at
                                      validate, not by this pattern: a
                                      misspelled variant, an undeclared role, a
                                      missing `.variant`, or a value that reads
                                      like a family name is rejected with a
                                      `didYouMean` pointing at the fix (use
                                      `set.family` for a typeface).
                                    type: string
                                  size:
                                    minimum: 1
                                    maximum: 999
                                    description: Font size in points
                                    type: number
                                  color:
                                    pattern: ^#([0-9a-fA-F]{3}|[0-9a-fA-F]{6})$
                                    description: Color as `#RGB` or `#RRGGBB`
                                    type: string
                                  opacity:
                                    minimum: 0
                                    maximum: 1
                                    description: Text opacity from 0 to 1
                                    type: number
                          - additionalProperties: false
                            type: object
                            required:
                              - kind
                            properties:
                              kind:
                                const: documentTitle
                                type: string
                              style:
                                additionalProperties: false
                                type: object
                                properties:
                                  font:
                                    pattern: ^\S(.*\S)?$
                                    description: >-
                                      Font slot as `<role>.<variant>` — role is
                                      `body`, `heading`, or a custom
                                      `typography.named` role; variant is one of
                                      regular, italic, bold, boldItalic (see
                                      `enums.fontVariant`; e.g. `heading.bold`).
                                      The shape is checked semantically at
                                      validate, not by this pattern: a
                                      misspelled variant, an undeclared role, a
                                      missing `.variant`, or a value that reads
                                      like a family name is rejected with a
                                      `didYouMean` pointing at the fix (use
                                      `set.family` for a typeface).
                                    type: string
                                  size:
                                    minimum: 1
                                    maximum: 999
                                    description: Font size in points
                                    type: number
                                  color:
                                    pattern: ^#([0-9a-fA-F]{3}|[0-9a-fA-F]{6})$
                                    description: Color as `#RGB` or `#RRGGBB`
                                    type: string
                                  opacity:
                                    minimum: 0
                                    maximum: 1
                                    description: Text opacity from 0 to 1
                                    type: number
                          - additionalProperties: false
                            type: object
                            required:
                              - kind
                            properties:
                              kind:
                                const: sectionTitle
                                type: string
                              depth:
                                description: Heading depth from 1 (top level) to 6
                                anyOf:
                                  - const: 1
                                    type: number
                                  - const: 2
                                    type: number
                                  - const: 3
                                    type: number
                                  - const: 4
                                    type: number
                                  - const: 5
                                    type: number
                                  - const: 6
                                    type: number
                              style:
                                additionalProperties: false
                                type: object
                                properties:
                                  font:
                                    pattern: ^\S(.*\S)?$
                                    description: >-
                                      Font slot as `<role>.<variant>` — role is
                                      `body`, `heading`, or a custom
                                      `typography.named` role; variant is one of
                                      regular, italic, bold, boldItalic (see
                                      `enums.fontVariant`; e.g. `heading.bold`).
                                      The shape is checked semantically at
                                      validate, not by this pattern: a
                                      misspelled variant, an undeclared role, a
                                      missing `.variant`, or a value that reads
                                      like a family name is rejected with a
                                      `didYouMean` pointing at the fix (use
                                      `set.family` for a typeface).
                                    type: string
                                  size:
                                    minimum: 1
                                    maximum: 999
                                    description: Font size in points
                                    type: number
                                  color:
                                    pattern: ^#([0-9a-fA-F]{3}|[0-9a-fA-F]{6})$
                                    description: Color as `#RGB` or `#RRGGBB`
                                    type: string
                                  opacity:
                                    minimum: 0
                                    maximum: 1
                                    description: Text opacity from 0 to 1
                                    type: number
                          - additionalProperties: false
                            type: object
                            required:
                              - kind
                            properties:
                              kind:
                                const: sectionIndex
                                type: string
                              depth:
                                description: Heading depth from 1 (top level) to 6
                                anyOf:
                                  - const: 1
                                    type: number
                                  - const: 2
                                    type: number
                                  - const: 3
                                    type: number
                                  - const: 4
                                    type: number
                                  - const: 5
                                    type: number
                                  - const: 6
                                    type: number
                              format:
                                description: >-
                                  Section ordinal format: `twoDigit` (at least
                                  two digits: 01, 12; ordinals ≥ 100 render in
                                  full) or `decimal` (1, 2, …)
                                anyOf:
                                  - const: twoDigit
                                    type: string
                                  - const: decimal
                                    type: string
                              style:
                                additionalProperties: false
                                type: object
                                properties:
                                  font:
                                    pattern: ^\S(.*\S)?$
                                    description: >-
                                      Font slot as `<role>.<variant>` — role is
                                      `body`, `heading`, or a custom
                                      `typography.named` role; variant is one of
                                      regular, italic, bold, boldItalic (see
                                      `enums.fontVariant`; e.g. `heading.bold`).
                                      The shape is checked semantically at
                                      validate, not by this pattern: a
                                      misspelled variant, an undeclared role, a
                                      missing `.variant`, or a value that reads
                                      like a family name is rejected with a
                                      `didYouMean` pointing at the fix (use
                                      `set.family` for a typeface).
                                    type: string
                                  size:
                                    minimum: 1
                                    maximum: 999
                                    description: Font size in points
                                    type: number
                                  color:
                                    pattern: ^#([0-9a-fA-F]{3}|[0-9a-fA-F]{6})$
                                    description: Color as `#RGB` or `#RRGGBB`
                                    type: string
                                  opacity:
                                    minimum: 0
                                    maximum: 1
                                    description: Text opacity from 0 to 1
                                    type: number
                    style:
                      additionalProperties: false
                      type: object
                      properties:
                        font:
                          pattern: ^\S(.*\S)?$
                          description: >-
                            Font slot as `<role>.<variant>` — role is `body`,
                            `heading`, or a custom `typography.named` role;
                            variant is one of regular, italic, bold, boldItalic
                            (see `enums.fontVariant`; e.g. `heading.bold`). The
                            shape is checked semantically at validate, not by
                            this pattern: a misspelled variant, an undeclared
                            role, a missing `.variant`, or a value that reads
                            like a family name is rejected with a `didYouMean`
                            pointing at the fix (use `set.family` for a
                            typeface).
                          type: string
                        family:
                          description: >-
                            A text family: a hosted weighted key, a declared
                            Google Fonts display name, or a `typography.named`
                            role reference
                          anyOf:
                            - const: inter
                              type: string
                            - const: lora
                              type: string
                            - const: source-serif-4
                              type: string
                            - pattern: ^[A-Za-z][A-Za-z0-9 ]{0,63}$
                              description: >-
                                Google Fonts display name from the declared pool
                                (e.g. `Playfair Display`)
                              type: string
                            - pattern: ^[a-z][a-z0-9-]{0,15}$
                              description: >-
                                Reference to a custom role declared in
                                `typography.named` (e.g. `display`)
                              type: string
                        size:
                          minimum: 1
                          maximum: 999
                          description: Font size in points
                          type: number
                        color:
                          pattern: ^#([0-9a-fA-F]{3}|[0-9a-fA-F]{6})$
                          description: Color as `#RGB` or `#RRGGBB`
                          type: string
                        spaceBefore:
                          minimum: 0
                          maximum: 9999
                          description: Vertical space reserved above the block, in points
                          type: number
                        spaceAfter:
                          minimum: 0
                          maximum: 9999
                          description: Vertical space reserved below the block, in points
                          type: number
                        lineHeight:
                          minimum: 1
                          maximum: 10
                          description: Line height as a multiple of the font size
                          type: number
                        align:
                          type: string
                          enum:
                            - left
                            - right
                            - center
                            - justify
                        letterSpacing:
                          minimum: -100
                          maximum: 100
                          description: >-
                            Extra spacing between characters in points; negative
                            values tighten
                          type: number
                        opacity:
                          minimum: 0
                          maximum: 1
                          description: Text opacity from 0 to 1
                          type: number
                        inline:
                          additionalProperties: false
                          type: object
                          properties:
                            strong:
                              additionalProperties: false
                              type: object
                              properties:
                                color:
                                  description: >-
                                    Color as `#RGB` or `#RRGGBB`, or `inherit`
                                    to use the inherited color
                                  anyOf:
                                    - pattern: ^#([0-9a-fA-F]{3}|[0-9a-fA-F]{6})$
                                      description: Color as `#RGB` or `#RRGGBB`
                                      type: string
                                    - const: inherit
                                      type: string
                            emphasis:
                              additionalProperties: false
                              type: object
                              properties:
                                color:
                                  description: >-
                                    Color as `#RGB` or `#RRGGBB`, or `inherit`
                                    to use the inherited color
                                  anyOf:
                                    - pattern: ^#([0-9a-fA-F]{3}|[0-9a-fA-F]{6})$
                                      description: Color as `#RGB` or `#RRGGBB`
                                      type: string
                                    - const: inherit
                                      type: string
                            delete:
                              additionalProperties: false
                              type: object
                              properties:
                                color:
                                  description: >-
                                    Color as `#RGB` or `#RRGGBB`, or `inherit`
                                    to use the inherited color
                                  anyOf:
                                    - pattern: ^#([0-9a-fA-F]{3}|[0-9a-fA-F]{6})$
                                      description: Color as `#RGB` or `#RRGGBB`
                                      type: string
                                    - const: inherit
                                      type: string
                                decorationStyle:
                                  type: string
                                  enum:
                                    - solid
                                    - double
                                    - dotted
                                    - dashed
                                    - wavy
                                decorationColor:
                                  description: >-
                                    Color as `#RGB` or `#RRGGBB`, or `inherit`
                                    to use the inherited color
                                  anyOf:
                                    - pattern: ^#([0-9a-fA-F]{3}|[0-9a-fA-F]{6})$
                                      description: Color as `#RGB` or `#RRGGBB`
                                      type: string
                                    - const: inherit
                                      type: string
                            mark:
                              additionalProperties: false
                              type: object
                              properties:
                                color:
                                  description: >-
                                    Color as `#RGB` or `#RRGGBB`, or `inherit`
                                    to use the inherited color
                                  anyOf:
                                    - pattern: ^#([0-9a-fA-F]{3}|[0-9a-fA-F]{6})$
                                      description: Color as `#RGB` or `#RRGGBB`
                                      type: string
                                    - const: inherit
                                      type: string
                                background:
                                  description: >-
                                    Background fill behind highlighted text as
                                    `#RGB`/`#RRGGBB`, or `null` to suppress
                                  anyOf:
                                    - pattern: ^#([0-9a-fA-F]{3}|[0-9a-fA-F]{6})$
                                      description: Color as `#RGB` or `#RRGGBB`
                                      type: string
                                    - type: 'null'
                                backgroundPadding:
                                  additionalProperties: false
                                  type: object
                                  properties:
                                    top:
                                      minimum: 0
                                      maximum: 9999
                                      description: Top padding, in points
                                      type: number
                                    right:
                                      minimum: 0
                                      maximum: 9999
                                      description: Right padding, in points
                                      type: number
                                    bottom:
                                      minimum: 0
                                      maximum: 9999
                                      description: Bottom padding, in points
                                      type: number
                                    left:
                                      minimum: 0
                                      maximum: 9999
                                      description: Left padding, in points
                                      type: number
                                    x:
                                      minimum: 0
                                      maximum: 9999
                                      description: >-
                                        Horizontal padding applied to both left
                                        and right when those sides are omitted,
                                        in points
                                      type: number
                                    'y':
                                      minimum: 0
                                      maximum: 9999
                                      description: >-
                                        Vertical padding applied to both top and
                                        bottom when those sides are omitted, in
                                        points
                                      type: number
                                backgroundRadius:
                                  minimum: 0
                                  maximum: 14400
                                  description: >-
                                    Corner radius for each highlight background
                                    segment, in points
                                  type: number
                            subscript:
                              additionalProperties: false
                              type: object
                              properties:
                                color:
                                  description: >-
                                    Color as `#RGB` or `#RRGGBB`, or `inherit`
                                    to use the inherited color
                                  anyOf:
                                    - pattern: ^#([0-9a-fA-F]{3}|[0-9a-fA-F]{6})$
                                      description: Color as `#RGB` or `#RRGGBB`
                                      type: string
                                    - const: inherit
                                      type: string
                                sizeScale:
                                  minimum: 0.4
                                  maximum: 1
                                  description: >-
                                    Optical scale relative to the surrounding
                                    run (fraction of base size)
                                  type: number
                                riseFraction:
                                  minimum: 0
                                  maximum: 1
                                  description: >-
                                    Baseline offset as a fraction of base size
                                    (not PDF points — contrast with code
                                    `baselineShift`). The renderer applies the
                                    sign (up for superscript, down for
                                    subscript)
                                  type: number
                            superscript:
                              additionalProperties: false
                              type: object
                              properties:
                                color:
                                  description: >-
                                    Color as `#RGB` or `#RRGGBB`, or `inherit`
                                    to use the inherited color
                                  anyOf:
                                    - pattern: ^#([0-9a-fA-F]{3}|[0-9a-fA-F]{6})$
                                      description: Color as `#RGB` or `#RRGGBB`
                                      type: string
                                    - const: inherit
                                      type: string
                                sizeScale:
                                  minimum: 0.4
                                  maximum: 1
                                  description: >-
                                    Optical scale relative to the surrounding
                                    run (fraction of base size)
                                  type: number
                                riseFraction:
                                  minimum: 0
                                  maximum: 1
                                  description: >-
                                    Baseline offset as a fraction of base size
                                    (not PDF points — contrast with code
                                    `baselineShift`). The renderer applies the
                                    sign (up for superscript, down for
                                    subscript)
                                  type: number
                            link:
                              additionalProperties: false
                              type: object
                              properties:
                                color:
                                  description: >-
                                    Color as `#RGB` or `#RRGGBB`, or `inherit`
                                    to use the inherited color
                                  anyOf:
                                    - pattern: ^#([0-9a-fA-F]{3}|[0-9a-fA-F]{6})$
                                      description: Color as `#RGB` or `#RRGGBB`
                                      type: string
                                    - const: inherit
                                      type: string
                                decoration:
                                  type: string
                                  enum:
                                    - underline
                                    - lineThrough
                                    - none
                                decorationStyle:
                                  type: string
                                  enum:
                                    - solid
                                    - double
                                    - dotted
                                    - dashed
                                    - wavy
                                decorationColor:
                                  description: >-
                                    Color as `#RGB` or `#RRGGBB`, or `inherit`
                                    to use the inherited color
                                  anyOf:
                                    - pattern: ^#([0-9a-fA-F]{3}|[0-9a-fA-F]{6})$
                                      description: Color as `#RGB` or `#RRGGBB`
                                      type: string
                                    - const: inherit
                                      type: string
                            code:
                              additionalProperties: false
                              description: >-
                                Style overrides for inline code spans (`` `code`
                                ``): font, optical size scale, text color,
                                background fill/padding/border/radius, baseline
                                shift, opacity, and letter spacing. Pass
                                `background: null` or `backgroundBorder: null`
                                to suppress those.
                              type: object
                              properties:
                                font:
                                  pattern: ^\S(.*\S)?$
                                  description: >-
                                    Font slot as `<role>.<variant>` — role is
                                    `body`, `heading`, or a custom
                                    `typography.named` role; variant is one of
                                    regular, italic, bold, boldItalic (see
                                    `enums.fontVariant`; e.g. `heading.bold`).
                                    The shape is checked semantically at
                                    validate, not by this pattern: a misspelled
                                    variant, an undeclared role, a missing
                                    `.variant`, or a value that reads like a
                                    family name is rejected with a `didYouMean`
                                    pointing at the fix (use `set.family` for a
                                    typeface).
                                  type: string
                                sizeScale:
                                  minimum: 0.85
                                  maximum: 0.88
                                  description: >-
                                    Optical scale relative to the surrounding
                                    run. Accepted range is the 0.85–0.88 band;
                                    out-of-range values are rejected
                                  type: number
                                color:
                                  description: >-
                                    Color as `#RGB` or `#RRGGBB`, or `inherit`
                                    to use the inherited color
                                  anyOf:
                                    - pattern: ^#([0-9a-fA-F]{3}|[0-9a-fA-F]{6})$
                                      description: Color as `#RGB` or `#RRGGBB`
                                      type: string
                                    - const: inherit
                                      type: string
                                background:
                                  description: >-
                                    Background fill behind the code run as
                                    `#RGB`/`#RRGGBB`, or `null` to suppress
                                  anyOf:
                                    - pattern: ^#([0-9a-fA-F]{3}|[0-9a-fA-F]{6})$
                                      description: Color as `#RGB` or `#RRGGBB`
                                      type: string
                                    - type: 'null'
                                backgroundPadding:
                                  additionalProperties: false
                                  type: object
                                  properties:
                                    top:
                                      minimum: 0
                                      maximum: 9999
                                      description: Top padding, in points
                                      type: number
                                    right:
                                      minimum: 0
                                      maximum: 9999
                                      description: Right padding, in points
                                      type: number
                                    bottom:
                                      minimum: 0
                                      maximum: 9999
                                      description: Bottom padding, in points
                                      type: number
                                    left:
                                      minimum: 0
                                      maximum: 9999
                                      description: Left padding, in points
                                      type: number
                                    x:
                                      minimum: 0
                                      maximum: 9999
                                      description: >-
                                        Horizontal padding applied to both left
                                        and right when those sides are omitted,
                                        in points
                                      type: number
                                    'y':
                                      minimum: 0
                                      maximum: 9999
                                      description: >-
                                        Vertical padding applied to both top and
                                        bottom when those sides are omitted, in
                                        points
                                      type: number
                                backgroundBorder:
                                  description: >-
                                    Micro-border around each cloned background
                                    segment, or `null` to suppress
                                  anyOf:
                                    - additionalProperties: false
                                      type: object
                                      required:
                                        - width
                                        - color
                                      properties:
                                        width:
                                          minimum: 0.1
                                          maximum: 50
                                          description: Border thickness in points
                                          type: number
                                        color:
                                          pattern: ^#([0-9a-fA-F]{3}|[0-9a-fA-F]{6})$
                                          description: Color as `#RGB` or `#RRGGBB`
                                          type: string
                                        opacity:
                                          minimum: 0
                                          maximum: 1
                                          description: Border opacity from 0 to 1
                                          type: number
                                        dash:
                                          description: >-
                                            Dash pattern as `[dash, gap]` lengths in
                                            points; both `0` is rejected
                                          type: array
                                          items:
                                            minimum: 0
                                            maximum: 1000
                                            type: number
                                          minItems: 2
                                          maxItems: 2
                                    - type: 'null'
                                backgroundRadius:
                                  minimum: 0
                                  maximum: 14400
                                  description: >-
                                    Corner radius for each background segment,
                                    in points
                                  type: number
                                baselineShift:
                                  minimum: -999
                                  maximum: 999
                                  description: >-
                                    PDF text-rise adjustment in points; positive
                                    values raise the code glyphs
                                  type: number
                                opacity:
                                  minimum: 0
                                  maximum: 1
                                  description: Fill opacity from 0 to 1
                                  type: number
                                letterSpacing:
                                  minimum: -100
                                  maximum: 100
                                  description: >-
                                    Extra spacing between code glyphs in points;
                                    negative values tighten
                                  type: number
                topCenter:
                  additionalProperties: false
                  type: object
                  required:
                    - content
                  properties:
                    content:
                      minItems: 1
                      maxItems: 16
                      description: Ordered fragments concatenated to fill the slot
                      type: array
                      items:
                        description: >-
                          A header/footer fragment: literal text, an image
                          (logo/letterhead), page numbers, document title,
                          running section title, or section ordinal at a heading
                          depth. An `image` fragment must be the only fragment
                          in its slot — it is not mixed with text fragments.
                        anyOf:
                          - additionalProperties: false
                            type: object
                            required:
                              - kind
                              - value
                            properties:
                              kind:
                                const: text
                                type: string
                              value:
                                minLength: 1
                                maxLength: 256
                                pattern: \S
                                description: Literal text for this fragment
                                type: string
                              style:
                                additionalProperties: false
                                type: object
                                properties:
                                  font:
                                    pattern: ^\S(.*\S)?$
                                    description: >-
                                      Font slot as `<role>.<variant>` — role is
                                      `body`, `heading`, or a custom
                                      `typography.named` role; variant is one of
                                      regular, italic, bold, boldItalic (see
                                      `enums.fontVariant`; e.g. `heading.bold`).
                                      The shape is checked semantically at
                                      validate, not by this pattern: a
                                      misspelled variant, an undeclared role, a
                                      missing `.variant`, or a value that reads
                                      like a family name is rejected with a
                                      `didYouMean` pointing at the fix (use
                                      `set.family` for a typeface).
                                    type: string
                                  size:
                                    minimum: 1
                                    maximum: 999
                                    description: Font size in points
                                    type: number
                                  color:
                                    pattern: ^#([0-9a-fA-F]{3}|[0-9a-fA-F]{6})$
                                    description: Color as `#RGB` or `#RRGGBB`
                                    type: string
                                  opacity:
                                    minimum: 0
                                    maximum: 1
                                    description: Text opacity from 0 to 1
                                    type: number
                          - additionalProperties: false
                            type: object
                            required:
                              - kind
                              - url
                            properties:
                              kind:
                                const: image
                                type: string
                              url:
                                minLength: 1
                                maxLength: 1048576
                                pattern: ^(https://|data:image/)
                                description: >-
                                  HTTPS or base64 `data:image/...` URL of the
                                  header/footer image (typically a brand logo or
                                  letterhead). Fetched under the same fixed,
                                  non-configurable image policy as Markdown
                                  images (private IPs blocked, DNS-rebinding
                                  mitigation, 10 MiB cap); a fetch or decode
                                  failure degrades to a diagnostic and the image
                                  is omitted rather than failing the render.
                                  Rendered as a decorative PDF/UA pagination
                                  artifact (no alt text).
                                type: string
                              width:
                                minimum: 1
                                maximum: 14400
                                description: >-
                                  Rendered image width in PDF points. When
                                  omitted, the intrinsic width is used, clamped
                                  to the slot band width. Set `width` or
                                  `height` to scale a logo down.
                                type: number
                              height:
                                minimum: 1
                                maximum: 14400
                                description: >-
                                  Rendered image height in PDF points. When
                                  omitted, height follows the aspect ratio of
                                  the resolved width.
                                type: number
                              fit:
                                description: >-
                                  Block-only. How the image fills its
                                  width/height box: `none` (intrinsic sizing),
                                  `contain`, `cover`, or `fill`. Used with
                                  `height` for hero-style layouts.
                                anyOf:
                                  - const: none
                                    type: string
                                  - const: contain
                                    type: string
                                  - const: cover
                                    type: string
                                  - const: fill
                                    type: string
                              align:
                                description: >-
                                  Block-only. Horizontal alignment of the image
                                  within the content area: `start` (left edge in
                                  LTR), `center`, or `end` (right edge in LTR).
                                  Ignored for inline images (line flow controls
                                  position).
                                anyOf:
                                  - const: start
                                    type: string
                                  - const: center
                                    type: string
                                  - const: end
                                    type: string
                              opacity:
                                minimum: 0
                                maximum: 1
                                description: Image opacity from 0 to 1.
                                type: number
                          - additionalProperties: false
                            type: object
                            required:
                              - kind
                            properties:
                              kind:
                                const: pageNumber
                                type: string
                              style:
                                additionalProperties: false
                                type: object
                                properties:
                                  font:
                                    pattern: ^\S(.*\S)?$
                                    description: >-
                                      Font slot as `<role>.<variant>` — role is
                                      `body`, `heading`, or a custom
                                      `typography.named` role; variant is one of
                                      regular, italic, bold, boldItalic (see
                                      `enums.fontVariant`; e.g. `heading.bold`).
                                      The shape is checked semantically at
                                      validate, not by this pattern: a
                                      misspelled variant, an undeclared role, a
                                      missing `.variant`, or a value that reads
                                      like a family name is rejected with a
                                      `didYouMean` pointing at the fix (use
                                      `set.family` for a typeface).
                                    type: string
                                  size:
                                    minimum: 1
                                    maximum: 999
                                    description: Font size in points
                                    type: number
                                  color:
                                    pattern: ^#([0-9a-fA-F]{3}|[0-9a-fA-F]{6})$
                                    description: Color as `#RGB` or `#RRGGBB`
                                    type: string
                                  opacity:
                                    minimum: 0
                                    maximum: 1
                                    description: Text opacity from 0 to 1
                                    type: number
                          - additionalProperties: false
                            type: object
                            required:
                              - kind
                            properties:
                              kind:
                                const: totalPages
                                type: string
                              style:
                                additionalProperties: false
                                type: object
                                properties:
                                  font:
                                    pattern: ^\S(.*\S)?$
                                    description: >-
                                      Font slot as `<role>.<variant>` — role is
                                      `body`, `heading`, or a custom
                                      `typography.named` role; variant is one of
                                      regular, italic, bold, boldItalic (see
                                      `enums.fontVariant`; e.g. `heading.bold`).
                                      The shape is checked semantically at
                                      validate, not by this pattern: a
                                      misspelled variant, an undeclared role, a
                                      missing `.variant`, or a value that reads
                                      like a family name is rejected with a
                                      `didYouMean` pointing at the fix (use
                                      `set.family` for a typeface).
                                    type: string
                                  size:
                                    minimum: 1
                                    maximum: 999
                                    description: Font size in points
                                    type: number
                                  color:
                                    pattern: ^#([0-9a-fA-F]{3}|[0-9a-fA-F]{6})$
                                    description: Color as `#RGB` or `#RRGGBB`
                                    type: string
                                  opacity:
                                    minimum: 0
                                    maximum: 1
                                    description: Text opacity from 0 to 1
                                    type: number
                          - additionalProperties: false
                            type: object
                            required:
                              - kind
                            properties:
                              kind:
                                const: documentTitle
                                type: string
                              style:
                                additionalProperties: false
                                type: object
                                properties:
                                  font:
                                    pattern: ^\S(.*\S)?$
                                    description: >-
                                      Font slot as `<role>.<variant>` — role is
                                      `body`, `heading`, or a custom
                                      `typography.named` role; variant is one of
                                      regular, italic, bold, boldItalic (see
                                      `enums.fontVariant`; e.g. `heading.bold`).
                                      The shape is checked semantically at
                                      validate, not by this pattern: a
                                      misspelled variant, an undeclared role, a
                                      missing `.variant`, or a value that reads
                                      like a family name is rejected with a
                                      `didYouMean` pointing at the fix (use
                                      `set.family` for a typeface).
                                    type: string
                                  size:
                                    minimum: 1
                                    maximum: 999
                                    description: Font size in points
                                    type: number
                                  color:
                                    pattern: ^#([0-9a-fA-F]{3}|[0-9a-fA-F]{6})$
                                    description: Color as `#RGB` or `#RRGGBB`
                                    type: string
                                  opacity:
                                    minimum: 0
                                    maximum: 1
                                    description: Text opacity from 0 to 1
                                    type: number
                          - additionalProperties: false
                            type: object
                            required:
                              - kind
                            properties:
                              kind:
                                const: sectionTitle
                                type: string
                              depth:
                                description: Heading depth from 1 (top level) to 6
                                anyOf:
                                  - const: 1
                                    type: number
                                  - const: 2
                                    type: number
                                  - const: 3
                                    type: number
                                  - const: 4
                                    type: number
                                  - const: 5
                                    type: number
                                  - const: 6
                                    type: number
                              style:
                                additionalProperties: false
                                type: object
                                properties:
                                  font:
                                    pattern: ^\S(.*\S)?$
                                    description: >-
                                      Font slot as `<role>.<variant>` — role is
                                      `body`, `heading`, or a custom
                                      `typography.named` role; variant is one of
                                      regular, italic, bold, boldItalic (see
                                      `enums.fontVariant`; e.g. `heading.bold`).
                                      The shape is checked semantically at
                                      validate, not by this pattern: a
                                      misspelled variant, an undeclared role, a
                                      missing `.variant`, or a value that reads
                                      like a family name is rejected with a
                                      `didYouMean` pointing at the fix (use
                                      `set.family` for a typeface).
                                    type: string
                                  size:
                                    minimum: 1
                                    maximum: 999
                                    description: Font size in points
                                    type: number
                                  color:
                                    pattern: ^#([0-9a-fA-F]{3}|[0-9a-fA-F]{6})$
                                    description: Color as `#RGB` or `#RRGGBB`
                                    type: string
                                  opacity:
                                    minimum: 0
                                    maximum: 1
                                    description: Text opacity from 0 to 1
                                    type: number
                          - additionalProperties: false
                            type: object
                            required:
                              - kind
                            properties:
                              kind:
                                const: sectionIndex
                                type: string
                              depth:
                                description: Heading depth from 1 (top level) to 6
                                anyOf:
                                  - const: 1
                                    type: number
                                  - const: 2
                                    type: number
                                  - const: 3
                                    type: number
                                  - const: 4
                                    type: number
                                  - const: 5
                                    type: number
                                  - const: 6
                                    type: number
                              format:
                                description: >-
                                  Section ordinal format: `twoDigit` (at least
                                  two digits: 01, 12; ordinals ≥ 100 render in
                                  full) or `decimal` (1, 2, …)
                                anyOf:
                                  - const: twoDigit
                                    type: string
                                  - const: decimal
                                    type: string
                              style:
                                additionalProperties: false
                                type: object
                                properties:
                                  font:
                                    pattern: ^\S(.*\S)?$
                                    description: >-
                                      Font slot as `<role>.<variant>` — role is
                                      `body`, `heading`, or a custom
                                      `typography.named` role; variant is one of
                                      regular, italic, bold, boldItalic (see
                                      `enums.fontVariant`; e.g. `heading.bold`).
                                      The shape is checked semantically at
                                      validate, not by this pattern: a
                                      misspelled variant, an undeclared role, a
                                      missing `.variant`, or a value that reads
                                      like a family name is rejected with a
                                      `didYouMean` pointing at the fix (use
                                      `set.family` for a typeface).
                                    type: string
                                  size:
                                    minimum: 1
                                    maximum: 999
                                    description: Font size in points
                                    type: number
                                  color:
                                    pattern: ^#([0-9a-fA-F]{3}|[0-9a-fA-F]{6})$
                                    description: Color as `#RGB` or `#RRGGBB`
                                    type: string
                                  opacity:
                                    minimum: 0
                                    maximum: 1
                                    description: Text opacity from 0 to 1
                                    type: number
                    style:
                      additionalProperties: false
                      type: object
                      properties:
                        font:
                          pattern: ^\S(.*\S)?$
                          description: >-
                            Font slot as `<role>.<variant>` — role is `body`,
                            `heading`, or a custom `typography.named` role;
                            variant is one of regular, italic, bold, boldItalic
                            (see `enums.fontVariant`; e.g. `heading.bold`). The
                            shape is checked semantically at validate, not by
                            this pattern: a misspelled variant, an undeclared
                            role, a missing `.variant`, or a value that reads
                            like a family name is rejected with a `didYouMean`
                            pointing at the fix (use `set.family` for a
                            typeface).
                          type: string
                        family:
                          description: >-
                            A text family: a hosted weighted key, a declared
                            Google Fonts display name, or a `typography.named`
                            role reference
                          anyOf:
                            - const: inter
                              type: string
                            - const: lora
                              type: string
                            - const: source-serif-4
                              type: string
                            - pattern: ^[A-Za-z][A-Za-z0-9 ]{0,63}$
                              description: >-
                                Google Fonts display name from the declared pool
                                (e.g. `Playfair Display`)
                              type: string
                            - pattern: ^[a-z][a-z0-9-]{0,15}$
                              description: >-
                                Reference to a custom role declared in
                                `typography.named` (e.g. `display`)
                              type: string
                        size:
                          minimum: 1
                          maximum: 999
                          description: Font size in points
                          type: number
                        color:
                          pattern: ^#([0-9a-fA-F]{3}|[0-9a-fA-F]{6})$
                          description: Color as `#RGB` or `#RRGGBB`
                          type: string
                        spaceBefore:
                          minimum: 0
                          maximum: 9999
                          description: Vertical space reserved above the block, in points
                          type: number
                        spaceAfter:
                          minimum: 0
                          maximum: 9999
                          description: Vertical space reserved below the block, in points
                          type: number
                        lineHeight:
                          minimum: 1
                          maximum: 10
                          description: Line height as a multiple of the font size
                          type: number
                        align:
                          type: string
                          enum:
                            - left
                            - right
                            - center
                            - justify
                        letterSpacing:
                          minimum: -100
                          maximum: 100
                          description: >-
                            Extra spacing between characters in points; negative
                            values tighten
                          type: number
                        opacity:
                          minimum: 0
                          maximum: 1
                          description: Text opacity from 0 to 1
                          type: number
                        inline:
                          additionalProperties: false
                          type: object
                          properties:
                            strong:
                              additionalProperties: false
                              type: object
                              properties:
                                color:
                                  description: >-
                                    Color as `#RGB` or `#RRGGBB`, or `inherit`
                                    to use the inherited color
                                  anyOf:
                                    - pattern: ^#([0-9a-fA-F]{3}|[0-9a-fA-F]{6})$
                                      description: Color as `#RGB` or `#RRGGBB`
                                      type: string
                                    - const: inherit
                                      type: string
                            emphasis:
                              additionalProperties: false
                              type: object
                              properties:
                                color:
                                  description: >-
                                    Color as `#RGB` or `#RRGGBB`, or `inherit`
                                    to use the inherited color
                                  anyOf:
                                    - pattern: ^#([0-9a-fA-F]{3}|[0-9a-fA-F]{6})$
                                      description: Color as `#RGB` or `#RRGGBB`
                                      type: string
                                    - const: inherit
                                      type: string
                            delete:
                              additionalProperties: false
                              type: object
                              properties:
                                color:
                                  description: >-
                                    Color as `#RGB` or `#RRGGBB`, or `inherit`
                                    to use the inherited color
                                  anyOf:
                                    - pattern: ^#([0-9a-fA-F]{3}|[0-9a-fA-F]{6})$
                                      description: Color as `#RGB` or `#RRGGBB`
                                      type: string
                                    - const: inherit
                                      type: string
                                decorationStyle:
                                  type: string
                                  enum:
                                    - solid
                                    - double
                                    - dotted
                                    - dashed
                                    - wavy
                                decorationColor:
                                  description: >-
                                    Color as `#RGB` or `#RRGGBB`, or `inherit`
                                    to use the inherited color
                                  anyOf:
                                    - pattern: ^#([0-9a-fA-F]{3}|[0-9a-fA-F]{6})$
                                      description: Color as `#RGB` or `#RRGGBB`
                                      type: string
                                    - const: inherit
                                      type: string
                            mark:
                              additionalProperties: false
                              type: object
                              properties:
                                color:
                                  description: >-
                                    Color as `#RGB` or `#RRGGBB`, or `inherit`
                                    to use the inherited color
                                  anyOf:
                                    - pattern: ^#([0-9a-fA-F]{3}|[0-9a-fA-F]{6})$
                                      description: Color as `#RGB` or `#RRGGBB`
                                      type: string
                                    - const: inherit
                                      type: string
                                background:
                                  description: >-
                                    Background fill behind highlighted text as
                                    `#RGB`/`#RRGGBB`, or `null` to suppress
                                  anyOf:
                                    - pattern: ^#([0-9a-fA-F]{3}|[0-9a-fA-F]{6})$
                                      description: Color as `#RGB` or `#RRGGBB`
                                      type: string
                                    - type: 'null'
                                backgroundPadding:
                                  additionalProperties: false
                                  type: object
                                  properties:
                                    top:
                                      minimum: 0
                                      maximum: 9999
                                      description: Top padding, in points
                                      type: number
                                    right:
                                      minimum: 0
                                      maximum: 9999
                                      description: Right padding, in points
                                      type: number
                                    bottom:
                                      minimum: 0
                                      maximum: 9999
                                      description: Bottom padding, in points
                                      type: number
                                    left:
                                      minimum: 0
                                      maximum: 9999
                                      description: Left padding, in points
                                      type: number
                                    x:
                                      minimum: 0
                                      maximum: 9999
                                      description: >-
                                        Horizontal padding applied to both left
                                        and right when those sides are omitted,
                                        in points
                                      type: number
                                    'y':
                                      minimum: 0
                                      maximum: 9999
                                      description: >-
                                        Vertical padding applied to both top and
                                        bottom when those sides are omitted, in
                                        points
                                      type: number
                                backgroundRadius:
                                  minimum: 0
                                  maximum: 14400
                                  description: >-
                                    Corner radius for each highlight background
                                    segment, in points
                                  type: number
                            subscript:
                              additionalProperties: false
                              type: object
                              properties:
                                color:
                                  description: >-
                                    Color as `#RGB` or `#RRGGBB`, or `inherit`
                                    to use the inherited color
                                  anyOf:
                                    - pattern: ^#([0-9a-fA-F]{3}|[0-9a-fA-F]{6})$
                                      description: Color as `#RGB` or `#RRGGBB`
                                      type: string
                                    - const: inherit
                                      type: string
                                sizeScale:
                                  minimum: 0.4
                                  maximum: 1
                                  description: >-
                                    Optical scale relative to the surrounding
                                    run (fraction of base size)
                                  type: number
                                riseFraction:
                                  minimum: 0
                                  maximum: 1
                                  description: >-
                                    Baseline offset as a fraction of base size
                                    (not PDF points — contrast with code
                                    `baselineShift`). The renderer applies the
                                    sign (up for superscript, down for
                                    subscript)
                                  type: number
                            superscript:
                              additionalProperties: false
                              type: object
                              properties:
                                color:
                                  description: >-
                                    Color as `#RGB` or `#RRGGBB`, or `inherit`
                                    to use the inherited color
                                  anyOf:
                                    - pattern: ^#([0-9a-fA-F]{3}|[0-9a-fA-F]{6})$
                                      description: Color as `#RGB` or `#RRGGBB`
                                      type: string
                                    - const: inherit
                                      type: string
                                sizeScale:
                                  minimum: 0.4
                                  maximum: 1
                                  description: >-
                                    Optical scale relative to the surrounding
                                    run (fraction of base size)
                                  type: number
                                riseFraction:
                                  minimum: 0
                                  maximum: 1
                                  description: >-
                                    Baseline offset as a fraction of base size
                                    (not PDF points — contrast with code
                                    `baselineShift`). The renderer applies the
                                    sign (up for superscript, down for
                                    subscript)
                                  type: number
                            link:
                              additionalProperties: false
                              type: object
                              properties:
                                color:
                                  description: >-
                                    Color as `#RGB` or `#RRGGBB`, or `inherit`
                                    to use the inherited color
                                  anyOf:
                                    - pattern: ^#([0-9a-fA-F]{3}|[0-9a-fA-F]{6})$
                                      description: Color as `#RGB` or `#RRGGBB`
                                      type: string
                                    - const: inherit
                                      type: string
                                decoration:
                                  type: string
                                  enum:
                                    - underline
                                    - lineThrough
                                    - none
                                decorationStyle:
                                  type: string
                                  enum:
                                    - solid
                                    - double
                                    - dotted
                                    - dashed
                                    - wavy
                                decorationColor:
                                  description: >-
                                    Color as `#RGB` or `#RRGGBB`, or `inherit`
                                    to use the inherited color
                                  anyOf:
                                    - pattern: ^#([0-9a-fA-F]{3}|[0-9a-fA-F]{6})$
                                      description: Color as `#RGB` or `#RRGGBB`
                                      type: string
                                    - const: inherit
                                      type: string
                            code:
                              additionalProperties: false
                              description: >-
                                Style overrides for inline code spans (`` `code`
                                ``): font, optical size scale, text color,
                                background fill/padding/border/radius, baseline
                                shift, opacity, and letter spacing. Pass
                                `background: null` or `backgroundBorder: null`
                                to suppress those.
                              type: object
                              properties:
                                font:
                                  pattern: ^\S(.*\S)?$
                                  description: >-
                                    Font slot as `<role>.<variant>` — role is
                                    `body`, `heading`, or a custom
                                    `typography.named` role; variant is one of
                                    regular, italic, bold, boldItalic (see
                                    `enums.fontVariant`; e.g. `heading.bold`).
                                    The shape is checked semantically at
                                    validate, not by this pattern: a misspelled
                                    variant, an undeclared role, a missing
                                    `.variant`, or a value that reads like a
                                    family name is rejected with a `didYouMean`
                                    pointing at the fix (use `set.family` for a
                                    typeface).
                                  type: string
                                sizeScale:
                                  minimum: 0.85
                                  maximum: 0.88
                                  description: >-
                                    Optical scale relative to the surrounding
                                    run. Accepted range is the 0.85–0.88 band;
                                    out-of-range values are rejected
                                  type: number
                                color:
                                  description: >-
                                    Color as `#RGB` or `#RRGGBB`, or `inherit`
                                    to use the inherited color
                                  anyOf:
                                    - pattern: ^#([0-9a-fA-F]{3}|[0-9a-fA-F]{6})$
                                      description: Color as `#RGB` or `#RRGGBB`
                                      type: string
                                    - const: inherit
                                      type: string
                                background:
                                  description: >-
                                    Background fill behind the code run as
                                    `#RGB`/`#RRGGBB`, or `null` to suppress
                                  anyOf:
                                    - pattern: ^#([0-9a-fA-F]{3}|[0-9a-fA-F]{6})$
                                      description: Color as `#RGB` or `#RRGGBB`
                                      type: string
                                    - type: 'null'
                                backgroundPadding:
                                  additionalProperties: false
                                  type: object
                                  properties:
                                    top:
                                      minimum: 0
                                      maximum: 9999
                                      description: Top padding, in points
                                      type: number
                                    right:
                                      minimum: 0
                                      maximum: 9999
                                      description: Right padding, in points
                                      type: number
                                    bottom:
                                      minimum: 0
                                      maximum: 9999
                                      description: Bottom padding, in points
                                      type: number
                                    left:
                                      minimum: 0
                                      maximum: 9999
                                      description: Left padding, in points
                                      type: number
                                    x:
                                      minimum: 0
                                      maximum: 9999
                                      description: >-
                                        Horizontal padding applied to both left
                                        and right when those sides are omitted,
                                        in points
                                      type: number
                                    'y':
                                      minimum: 0
                                      maximum: 9999
                                      description: >-
                                        Vertical padding applied to both top and
                                        bottom when those sides are omitted, in
                                        points
                                      type: number
                                backgroundBorder:
                                  description: >-
                                    Micro-border around each cloned background
                                    segment, or `null` to suppress
                                  anyOf:
                                    - additionalProperties: false
                                      type: object
                                      required:
                                        - width
                                        - color
                                      properties:
                                        width:
                                          minimum: 0.1
                                          maximum: 50
                                          description: Border thickness in points
                                          type: number
                                        color:
                                          pattern: ^#([0-9a-fA-F]{3}|[0-9a-fA-F]{6})$
                                          description: Color as `#RGB` or `#RRGGBB`
                                          type: string
                                        opacity:
                                          minimum: 0
                                          maximum: 1
                                          description: Border opacity from 0 to 1
                                          type: number
                                        dash:
                                          description: >-
                                            Dash pattern as `[dash, gap]` lengths in
                                            points; both `0` is rejected
                                          type: array
                                          items:
                                            minimum: 0
                                            maximum: 1000
                                            type: number
                                          minItems: 2
                                          maxItems: 2
                                    - type: 'null'
                                backgroundRadius:
                                  minimum: 0
                                  maximum: 14400
                                  description: >-
                                    Corner radius for each background segment,
                                    in points
                                  type: number
                                baselineShift:
                                  minimum: -999
                                  maximum: 999
                                  description: >-
                                    PDF text-rise adjustment in points; positive
                                    values raise the code glyphs
                                  type: number
                                opacity:
                                  minimum: 0
                                  maximum: 1
                                  description: Fill opacity from 0 to 1
                                  type: number
                                letterSpacing:
                                  minimum: -100
                                  maximum: 100
                                  description: >-
                                    Extra spacing between code glyphs in points;
                                    negative values tighten
                                  type: number
                topRight:
                  additionalProperties: false
                  type: object
                  required:
                    - content
                  properties:
                    content:
                      minItems: 1
                      maxItems: 16
                      description: Ordered fragments concatenated to fill the slot
                      type: array
                      items:
                        description: >-
                          A header/footer fragment: literal text, an image
                          (logo/letterhead), page numbers, document title,
                          running section title, or section ordinal at a heading
                          depth. An `image` fragment must be the only fragment
                          in its slot — it is not mixed with text fragments.
                        anyOf:
                          - additionalProperties: false
                            type: object
                            required:
                              - kind
                              - value
                            properties:
                              kind:
                                const: text
                                type: string
                              value:
                                minLength: 1
                                maxLength: 256
                                pattern: \S
                                description: Literal text for this fragment
                                type: string
                              style:
                                additionalProperties: false
                                type: object
                                properties:
                                  font:
                                    pattern: ^\S(.*\S)?$
                                    description: >-
                                      Font slot as `<role>.<variant>` — role is
                                      `body`, `heading`, or a custom
                                      `typography.named` role; variant is one of
                                      regular, italic, bold, boldItalic (see
                                      `enums.fontVariant`; e.g. `heading.bold`).
                                      The shape is checked semantically at
                                      validate, not by this pattern: a
                                      misspelled variant, an undeclared role, a
                                      missing `.variant`, or a value that reads
                                      like a family name is rejected with a
                                      `didYouMean` pointing at the fix (use
                                      `set.family` for a typeface).
                                    type: string
                                  size:
                                    minimum: 1
                                    maximum: 999
                                    description: Font size in points
                                    type: number
                                  color:
                                    pattern: ^#([0-9a-fA-F]{3}|[0-9a-fA-F]{6})$
                                    description: Color as `#RGB` or `#RRGGBB`
                                    type: string
                                  opacity:
                                    minimum: 0
                                    maximum: 1
                                    description: Text opacity from 0 to 1
                                    type: number
                          - additionalProperties: false
                            type: object
                            required:
                              - kind
                              - url
                            properties:
                              kind:
                                const: image
                                type: string
                              url:
                                minLength: 1
                                maxLength: 1048576
                                pattern: ^(https://|data:image/)
                                description: >-
                                  HTTPS or base64 `data:image/...` URL of the
                                  header/footer image (typically a brand logo or
                                  letterhead). Fetched under the same fixed,
                                  non-configurable image policy as Markdown
                                  images (private IPs blocked, DNS-rebinding
                                  mitigation, 10 MiB cap); a fetch or decode
                                  failure degrades to a diagnostic and the image
                                  is omitted rather than failing the render.
                                  Rendered as a decorative PDF/UA pagination
                                  artifact (no alt text).
                                type: string
                              width:
                                minimum: 1
                                maximum: 14400
                                description: >-
                                  Rendered image width in PDF points. When
                                  omitted, the intrinsic width is used, clamped
                                  to the slot band width. Set `width` or
                                  `height` to scale a logo down.
                                type: number
                              height:
                                minimum: 1
                                maximum: 14400
                                description: >-
                                  Rendered image height in PDF points. When
                                  omitted, height follows the aspect ratio of
                                  the resolved width.
                                type: number
                              fit:
                                description: >-
                                  Block-only. How the image fills its
                                  width/height box: `none` (intrinsic sizing),
                                  `contain`, `cover`, or `fill`. Used with
                                  `height` for hero-style layouts.
                                anyOf:
                                  - const: none
                                    type: string
                                  - const: contain
                                    type: string
                                  - const: cover
                                    type: string
                                  - const: fill
                                    type: string
                              align:
                                description: >-
                                  Block-only. Horizontal alignment of the image
                                  within the content area: `start` (left edge in
                                  LTR), `center`, or `end` (right edge in LTR).
                                  Ignored for inline images (line flow controls
                                  position).
                                anyOf:
                                  - const: start
                                    type: string
                                  - const: center
                                    type: string
                                  - const: end
                                    type: string
                              opacity:
                                minimum: 0
                                maximum: 1
                                description: Image opacity from 0 to 1.
                                type: number
                          - additionalProperties: false
                            type: object
                            required:
                              - kind
                            properties:
                              kind:
                                const: pageNumber
                                type: string
                              style:
                                additionalProperties: false
                                type: object
                                properties:
                                  font:
                                    pattern: ^\S(.*\S)?$
                                    description: >-
                                      Font slot as `<role>.<variant>` — role is
                                      `body`, `heading`, or a custom
                                      `typography.named` role; variant is one of
                                      regular, italic, bold, boldItalic (see
                                      `enums.fontVariant`; e.g. `heading.bold`).
                                      The shape is checked semantically at
                                      validate, not by this pattern: a
                                      misspelled variant, an undeclared role, a
                                      missing `.variant`, or a value that reads
                                      like a family name is rejected with a
                                      `didYouMean` pointing at the fix (use
                                      `set.family` for a typeface).
                                    type: string
                                  size:
                                    minimum: 1
                                    maximum: 999
                                    description: Font size in points
                                    type: number
                                  color:
                                    pattern: ^#([0-9a-fA-F]{3}|[0-9a-fA-F]{6})$
                                    description: Color as `#RGB` or `#RRGGBB`
                                    type: string
                                  opacity:
                                    minimum: 0
                                    maximum: 1
                                    description: Text opacity from 0 to 1
                                    type: number
                          - additionalProperties: false
                            type: object
                            required:
                              - kind
                            properties:
                              kind:
                                const: totalPages
                                type: string
                              style:
                                additionalProperties: false
                                type: object
                                properties:
                                  font:
                                    pattern: ^\S(.*\S)?$
                                    description: >-
                                      Font slot as `<role>.<variant>` — role is
                                      `body`, `heading`, or a custom
                                      `typography.named` role; variant is one of
                                      regular, italic, bold, boldItalic (see
                                      `enums.fontVariant`; e.g. `heading.bold`).
                                      The shape is checked semantically at
                                      validate, not by this pattern: a
                                      misspelled variant, an undeclared role, a
                                      missing `.variant`, or a value that reads
                                      like a family name is rejected with a
                                      `didYouMean` pointing at the fix (use
                                      `set.family` for a typeface).
                                    type: string
                                  size:
                                    minimum: 1
                                    maximum: 999
                                    description: Font size in points
                                    type: number
                                  color:
                                    pattern: ^#([0-9a-fA-F]{3}|[0-9a-fA-F]{6})$
                                    description: Color as `#RGB` or `#RRGGBB`
                                    type: string
                                  opacity:
                                    minimum: 0
                                    maximum: 1
                                    description: Text opacity from 0 to 1
                                    type: number
                          - additionalProperties: false
                            type: object
                            required:
                              - kind
                            properties:
                              kind:
                                const: documentTitle
                                type: string
                              style:
                                additionalProperties: false
                                type: object
                                properties:
                                  font:
                                    pattern: ^\S(.*\S)?$
                                    description: >-
                                      Font slot as `<role>.<variant>` — role is
                                      `body`, `heading`, or a custom
                                      `typography.named` role; variant is one of
                                      regular, italic, bold, boldItalic (see
                                      `enums.fontVariant`; e.g. `heading.bold`).
                                      The shape is checked semantically at
                                      validate, not by this pattern: a
                                      misspelled variant, an undeclared role, a
                                      missing `.variant`, or a value that reads
                                      like a family name is rejected with a
                                      `didYouMean` pointing at the fix (use
                                      `set.family` for a typeface).
                                    type: string
                                  size:
                                    minimum: 1
                                    maximum: 999
                                    description: Font size in points
                                    type: number
                                  color:
                                    pattern: ^#([0-9a-fA-F]{3}|[0-9a-fA-F]{6})$
                                    description: Color as `#RGB` or `#RRGGBB`
                                    type: string
                                  opacity:
                                    minimum: 0
                                    maximum: 1
                                    description: Text opacity from 0 to 1
                                    type: number
                          - additionalProperties: false
                            type: object
                            required:
                              - kind
                            properties:
                              kind:
                                const: sectionTitle
                                type: string
                              depth:
                                description: Heading depth from 1 (top level) to 6
                                anyOf:
                                  - const: 1
                                    type: number
                                  - const: 2
                                    type: number
                                  - const: 3
                                    type: number
                                  - const: 4
                                    type: number
                                  - const: 5
                                    type: number
                                  - const: 6
                                    type: number
                              style:
                                additionalProperties: false
                                type: object
                                properties:
                                  font:
                                    pattern: ^\S(.*\S)?$
                                    description: >-
                                      Font slot as `<role>.<variant>` — role is
                                      `body`, `heading`, or a custom
                                      `typography.named` role; variant is one of
                                      regular, italic, bold, boldItalic (see
                                      `enums.fontVariant`; e.g. `heading.bold`).
                                      The shape is checked semantically at
                                      validate, not by this pattern: a
                                      misspelled variant, an undeclared role, a
                                      missing `.variant`, or a value that reads
                                      like a family name is rejected with a
                                      `didYouMean` pointing at the fix (use
                                      `set.family` for a typeface).
                                    type: string
                                  size:
                                    minimum: 1
                                    maximum: 999
                                    description: Font size in points
                                    type: number
                                  color:
                                    pattern: ^#([0-9a-fA-F]{3}|[0-9a-fA-F]{6})$
                                    description: Color as `#RGB` or `#RRGGBB`
                                    type: string
                                  opacity:
                                    minimum: 0
                                    maximum: 1
                                    description: Text opacity from 0 to 1
                                    type: number
                          - additionalProperties: false
                            type: object
                            required:
                              - kind
                            properties:
                              kind:
                                const: sectionIndex
                                type: string
                              depth:
                                description: Heading depth from 1 (top level) to 6
                                anyOf:
                                  - const: 1
                                    type: number
                                  - const: 2
                                    type: number
                                  - const: 3
                                    type: number
                                  - const: 4
                                    type: number
                                  - const: 5
                                    type: number
                                  - const: 6
                                    type: number
                              format:
                                description: >-
                                  Section ordinal format: `twoDigit` (at least
                                  two digits: 01, 12; ordinals ≥ 100 render in
                                  full) or `decimal` (1, 2, …)
                                anyOf:
                                  - const: twoDigit
                                    type: string
                                  - const: decimal
                                    type: string
                              style:
                                additionalProperties: false
                                type: object
                                properties:
                                  font:
                                    pattern: ^\S(.*\S)?$
                                    description: >-
                                      Font slot as `<role>.<variant>` — role is
                                      `body`, `heading`, or a custom
                                      `typography.named` role; variant is one of
                                      regular, italic, bold, boldItalic (see
                                      `enums.fontVariant`; e.g. `heading.bold`).
                                      The shape is checked semantically at
                                      validate, not by this pattern: a
                                      misspelled variant, an undeclared role, a
                                      missing `.variant`, or a value that reads
                                      like a family name is rejected with a
                                      `didYouMean` pointing at the fix (use
                                      `set.family` for a typeface).
                                    type: string
                                  size:
                                    minimum: 1
                                    maximum: 999
                                    description: Font size in points
                                    type: number
                                  color:
                                    pattern: ^#([0-9a-fA-F]{3}|[0-9a-fA-F]{6})$
                                    description: Color as `#RGB` or `#RRGGBB`
                                    type: string
                                  opacity:
                                    minimum: 0
                                    maximum: 1
                                    description: Text opacity from 0 to 1
                                    type: number
                    style:
                      additionalProperties: false
                      type: object
                      properties:
                        font:
                          pattern: ^\S(.*\S)?$
                          description: >-
                            Font slot as `<role>.<variant>` — role is `body`,
                            `heading`, or a custom `typography.named` role;
                            variant is one of regular, italic, bold, boldItalic
                            (see `enums.fontVariant`; e.g. `heading.bold`). The
                            shape is checked semantically at validate, not by
                            this pattern: a misspelled variant, an undeclared
                            role, a missing `.variant`, or a value that reads
                            like a family name is rejected with a `didYouMean`
                            pointing at the fix (use `set.family` for a
                            typeface).
                          type: string
                        family:
                          description: >-
                            A text family: a hosted weighted key, a declared
                            Google Fonts display name, or a `typography.named`
                            role reference
                          anyOf:
                            - const: inter
                              type: string
                            - const: lora
                              type: string
                            - const: source-serif-4
                              type: string
                            - pattern: ^[A-Za-z][A-Za-z0-9 ]{0,63}$
                              description: >-
                                Google Fonts display name from the declared pool
                                (e.g. `Playfair Display`)
                              type: string
                            - pattern: ^[a-z][a-z0-9-]{0,15}$
                              description: >-
                                Reference to a custom role declared in
                                `typography.named` (e.g. `display`)
                              type: string
                        size:
                          minimum: 1
                          maximum: 999
                          description: Font size in points
                          type: number
                        color:
                          pattern: ^#([0-9a-fA-F]{3}|[0-9a-fA-F]{6})$
                          description: Color as `#RGB` or `#RRGGBB`
                          type: string
                        spaceBefore:
                          minimum: 0
                          maximum: 9999
                          description: Vertical space reserved above the block, in points
                          type: number
                        spaceAfter:
                          minimum: 0
                          maximum: 9999
                          description: Vertical space reserved below the block, in points
                          type: number
                        lineHeight:
                          minimum: 1
                          maximum: 10
                          description: Line height as a multiple of the font size
                          type: number
                        align:
                          type: string
                          enum:
                            - left
                            - right
                            - center
                            - justify
                        letterSpacing:
                          minimum: -100
                          maximum: 100
                          description: >-
                            Extra spacing between characters in points; negative
                            values tighten
                          type: number
                        opacity:
                          minimum: 0
                          maximum: 1
                          description: Text opacity from 0 to 1
                          type: number
                        inline:
                          additionalProperties: false
                          type: object
                          properties:
                            strong:
                              additionalProperties: false
                              type: object
                              properties:
                                color:
                                  description: >-
                                    Color as `#RGB` or `#RRGGBB`, or `inherit`
                                    to use the inherited color
                                  anyOf:
                                    - pattern: ^#([0-9a-fA-F]{3}|[0-9a-fA-F]{6})$
                                      description: Color as `#RGB` or `#RRGGBB`
                                      type: string
                                    - const: inherit
                                      type: string
                            emphasis:
                              additionalProperties: false
                              type: object
                              properties:
                                color:
                                  description: >-
                                    Color as `#RGB` or `#RRGGBB`, or `inherit`
                                    to use the inherited color
                                  anyOf:
                                    - pattern: ^#([0-9a-fA-F]{3}|[0-9a-fA-F]{6})$
                                      description: Color as `#RGB` or `#RRGGBB`
                                      type: string
                                    - const: inherit
                                      type: string
                            delete:
                              additionalProperties: false
                              type: object
                              properties:
                                color:
                                  description: >-
                                    Color as `#RGB` or `#RRGGBB`, or `inherit`
                                    to use the inherited color
                                  anyOf:
                                    - pattern: ^#([0-9a-fA-F]{3}|[0-9a-fA-F]{6})$
                                      description: Color as `#RGB` or `#RRGGBB`
                                      type: string
                                    - const: inherit
                                      type: string
                                decorationStyle:
                                  type: string
                                  enum:
                                    - solid
                                    - double
                                    - dotted
                                    - dashed
                                    - wavy
                                decorationColor:
                                  description: >-
                                    Color as `#RGB` or `#RRGGBB`, or `inherit`
                                    to use the inherited color
                                  anyOf:
                                    - pattern: ^#([0-9a-fA-F]{3}|[0-9a-fA-F]{6})$
                                      description: Color as `#RGB` or `#RRGGBB`
                                      type: string
                                    - const: inherit
                                      type: string
                            mark:
                              additionalProperties: false
                              type: object
                              properties:
                                color:
                                  description: >-
                                    Color as `#RGB` or `#RRGGBB`, or `inherit`
                                    to use the inherited color
                                  anyOf:
                                    - pattern: ^#([0-9a-fA-F]{3}|[0-9a-fA-F]{6})$
                                      description: Color as `#RGB` or `#RRGGBB`
                                      type: string
                                    - const: inherit
                                      type: string
                                background:
                                  description: >-
                                    Background fill behind highlighted text as
                                    `#RGB`/`#RRGGBB`, or `null` to suppress
                                  anyOf:
                                    - pattern: ^#([0-9a-fA-F]{3}|[0-9a-fA-F]{6})$
                                      description: Color as `#RGB` or `#RRGGBB`
                                      type: string
                                    - type: 'null'
                                backgroundPadding:
                                  additionalProperties: false
                                  type: object
                                  properties:
                                    top:
                                      minimum: 0
                                      maximum: 9999
                                      description: Top padding, in points
                                      type: number
                                    right:
                                      minimum: 0
                                      maximum: 9999
                                      description: Right padding, in points
                                      type: number
                                    bottom:
                                      minimum: 0
                                      maximum: 9999
                                      description: Bottom padding, in points
                                      type: number
                                    left:
                                      minimum: 0
                                      maximum: 9999
                                      description: Left padding, in points
                                      type: number
                                    x:
                                      minimum: 0
                                      maximum: 9999
                                      description: >-
                                        Horizontal padding applied to both left
                                        and right when those sides are omitted,
                                        in points
                                      type: number
                                    'y':
                                      minimum: 0
                                      maximum: 9999
                                      description: >-
                                        Vertical padding applied to both top and
                                        bottom when those sides are omitted, in
                                        points
                                      type: number
                                backgroundRadius:
                                  minimum: 0
                                  maximum: 14400
                                  description: >-
                                    Corner radius for each highlight background
                                    segment, in points
                                  type: number
                            subscript:
                              additionalProperties: false
                              type: object
                              properties:
                                color:
                                  description: >-
                                    Color as `#RGB` or `#RRGGBB`, or `inherit`
                                    to use the inherited color
                                  anyOf:
                                    - pattern: ^#([0-9a-fA-F]{3}|[0-9a-fA-F]{6})$
                                      description: Color as `#RGB` or `#RRGGBB`
                                      type: string
                                    - const: inherit
                                      type: string
                                sizeScale:
                                  minimum: 0.4
                                  maximum: 1
                                  description: >-
                                    Optical scale relative to the surrounding
                                    run (fraction of base size)
                                  type: number
                                riseFraction:
                                  minimum: 0
                                  maximum: 1
                                  description: >-
                                    Baseline offset as a fraction of base size
                                    (not PDF points — contrast with code
                                    `baselineShift`). The renderer applies the
                                    sign (up for superscript, down for
                                    subscript)
                                  type: number
                            superscript:
                              additionalProperties: false
                              type: object
                              properties:
                                color:
                                  description: >-
                                    Color as `#RGB` or `#RRGGBB`, or `inherit`
                                    to use the inherited color
                                  anyOf:
                                    - pattern: ^#([0-9a-fA-F]{3}|[0-9a-fA-F]{6})$
                                      description: Color as `#RGB` or `#RRGGBB`
                                      type: string
                                    - const: inherit
                                      type: string
                                sizeScale:
                                  minimum: 0.4
                                  maximum: 1
                                  description: >-
                                    Optical scale relative to the surrounding
                                    run (fraction of base size)
                                  type: number
                                riseFraction:
                                  minimum: 0
                                  maximum: 1
                                  description: >-
                                    Baseline offset as a fraction of base size
                                    (not PDF points — contrast with code
                                    `baselineShift`). The renderer applies the
                                    sign (up for superscript, down for
                                    subscript)
                                  type: number
                            link:
                              additionalProperties: false
                              type: object
                              properties:
                                color:
                                  description: >-
                                    Color as `#RGB` or `#RRGGBB`, or `inherit`
                                    to use the inherited color
                                  anyOf:
                                    - pattern: ^#([0-9a-fA-F]{3}|[0-9a-fA-F]{6})$
                                      description: Color as `#RGB` or `#RRGGBB`
                                      type: string
                                    - const: inherit
                                      type: string
                                decoration:
                                  type: string
                                  enum:
                                    - underline
                                    - lineThrough
                                    - none
                                decorationStyle:
                                  type: string
                                  enum:
                                    - solid
                                    - double
                                    - dotted
                                    - dashed
                                    - wavy
                                decorationColor:
                                  description: >-
                                    Color as `#RGB` or `#RRGGBB`, or `inherit`
                                    to use the inherited color
                                  anyOf:
                                    - pattern: ^#([0-9a-fA-F]{3}|[0-9a-fA-F]{6})$
                                      description: Color as `#RGB` or `#RRGGBB`
                                      type: string
                                    - const: inherit
                                      type: string
                            code:
                              additionalProperties: false
                              description: >-
                                Style overrides for inline code spans (`` `code`
                                ``): font, optical size scale, text color,
                                background fill/padding/border/radius, baseline
                                shift, opacity, and letter spacing. Pass
                                `background: null` or `backgroundBorder: null`
                                to suppress those.
                              type: object
                              properties:
                                font:
                                  pattern: ^\S(.*\S)?$
                                  description: >-
                                    Font slot as `<role>.<variant>` — role is
                                    `body`, `heading`, or a custom
                                    `typography.named` role; variant is one of
                                    regular, italic, bold, boldItalic (see
                                    `enums.fontVariant`; e.g. `heading.bold`).
                                    The shape is checked semantically at
                                    validate, not by this pattern: a misspelled
                                    variant, an undeclared role, a missing
                                    `.variant`, or a value that reads like a
                                    family name is rejected with a `didYouMean`
                                    pointing at the fix (use `set.family` for a
                                    typeface).
                                  type: string
                                sizeScale:
                                  minimum: 0.85
                                  maximum: 0.88
                                  description: >-
                                    Optical scale relative to the surrounding
                                    run. Accepted range is the 0.85–0.88 band;
                                    out-of-range values are rejected
                                  type: number
                                color:
                                  description: >-
                                    Color as `#RGB` or `#RRGGBB`, or `inherit`
                                    to use the inherited color
                                  anyOf:
                                    - pattern: ^#([0-9a-fA-F]{3}|[0-9a-fA-F]{6})$
                                      description: Color as `#RGB` or `#RRGGBB`
                                      type: string
                                    - const: inherit
                                      type: string
                                background:
                                  description: >-
                                    Background fill behind the code run as
                                    `#RGB`/`#RRGGBB`, or `null` to suppress
                                  anyOf:
                                    - pattern: ^#([0-9a-fA-F]{3}|[0-9a-fA-F]{6})$
                                      description: Color as `#RGB` or `#RRGGBB`
                                      type: string
                                    - type: 'null'
                                backgroundPadding:
                                  additionalProperties: false
                                  type: object
                                  properties:
                                    top:
                                      minimum: 0
                                      maximum: 9999
                                      description: Top padding, in points
                                      type: number
                                    right:
                                      minimum: 0
                                      maximum: 9999
                                      description: Right padding, in points
                                      type: number
                                    bottom:
                                      minimum: 0
                                      maximum: 9999
                                      description: Bottom padding, in points
                                      type: number
                                    left:
                                      minimum: 0
                                      maximum: 9999
                                      description: Left padding, in points
                                      type: number
                                    x:
                                      minimum: 0
                                      maximum: 9999
                                      description: >-
                                        Horizontal padding applied to both left
                                        and right when those sides are omitted,
                                        in points
                                      type: number
                                    'y':
                                      minimum: 0
                                      maximum: 9999
                                      description: >-
                                        Vertical padding applied to both top and
                                        bottom when those sides are omitted, in
                                        points
                                      type: number
                                backgroundBorder:
                                  description: >-
                                    Micro-border around each cloned background
                                    segment, or `null` to suppress
                                  anyOf:
                                    - additionalProperties: false
                                      type: object
                                      required:
                                        - width
                                        - color
                                      properties:
                                        width:
                                          minimum: 0.1
                                          maximum: 50
                                          description: Border thickness in points
                                          type: number
                                        color:
                                          pattern: ^#([0-9a-fA-F]{3}|[0-9a-fA-F]{6})$
                                          description: Color as `#RGB` or `#RRGGBB`
                                          type: string
                                        opacity:
                                          minimum: 0
                                          maximum: 1
                                          description: Border opacity from 0 to 1
                                          type: number
                                        dash:
                                          description: >-
                                            Dash pattern as `[dash, gap]` lengths in
                                            points; both `0` is rejected
                                          type: array
                                          items:
                                            minimum: 0
                                            maximum: 1000
                                            type: number
                                          minItems: 2
                                          maxItems: 2
                                    - type: 'null'
                                backgroundRadius:
                                  minimum: 0
                                  maximum: 14400
                                  description: >-
                                    Corner radius for each background segment,
                                    in points
                                  type: number
                                baselineShift:
                                  minimum: -999
                                  maximum: 999
                                  description: >-
                                    PDF text-rise adjustment in points; positive
                                    values raise the code glyphs
                                  type: number
                                opacity:
                                  minimum: 0
                                  maximum: 1
                                  description: Fill opacity from 0 to 1
                                  type: number
                                letterSpacing:
                                  minimum: -100
                                  maximum: 100
                                  description: >-
                                    Extra spacing between code glyphs in points;
                                    negative values tighten
                                  type: number
                bottomLeft:
                  additionalProperties: false
                  type: object
                  required:
                    - content
                  properties:
                    content:
                      minItems: 1
                      maxItems: 16
                      description: Ordered fragments concatenated to fill the slot
                      type: array
                      items:
                        description: >-
                          A header/footer fragment: literal text, an image
                          (logo/letterhead), page numbers, document title,
                          running section title, or section ordinal at a heading
                          depth. An `image` fragment must be the only fragment
                          in its slot — it is not mixed with text fragments.
                        anyOf:
                          - additionalProperties: false
                            type: object
                            required:
                              - kind
                              - value
                            properties:
                              kind:
                                const: text
                                type: string
                              value:
                                minLength: 1
                                maxLength: 256
                                pattern: \S
                                description: Literal text for this fragment
                                type: string
                              style:
                                additionalProperties: false
                                type: object
                                properties:
                                  font:
                                    pattern: ^\S(.*\S)?$
                                    description: >-
                                      Font slot as `<role>.<variant>` — role is
                                      `body`, `heading`, or a custom
                                      `typography.named` role; variant is one of
                                      regular, italic, bold, boldItalic (see
                                      `enums.fontVariant`; e.g. `heading.bold`).
                                      The shape is checked semantically at
                                      validate, not by this pattern: a
                                      misspelled variant, an undeclared role, a
                                      missing `.variant`, or a value that reads
                                      like a family name is rejected with a
                                      `didYouMean` pointing at the fix (use
                                      `set.family` for a typeface).
                                    type: string
                                  size:
                                    minimum: 1
                                    maximum: 999
                                    description: Font size in points
                                    type: number
                                  color:
                                    pattern: ^#([0-9a-fA-F]{3}|[0-9a-fA-F]{6})$
                                    description: Color as `#RGB` or `#RRGGBB`
                                    type: string
                                  opacity:
                                    minimum: 0
                                    maximum: 1
                                    description: Text opacity from 0 to 1
                                    type: number
                          - additionalProperties: false
                            type: object
                            required:
                              - kind
                              - url
                            properties:
                              kind:
                                const: image
                                type: string
                              url:
                                minLength: 1
                                maxLength: 1048576
                                pattern: ^(https://|data:image/)
                                description: >-
                                  HTTPS or base64 `data:image/...` URL of the
                                  header/footer image (typically a brand logo or
                                  letterhead). Fetched under the same fixed,
                                  non-configurable image policy as Markdown
                                  images (private IPs blocked, DNS-rebinding
                                  mitigation, 10 MiB cap); a fetch or decode
                                  failure degrades to a diagnostic and the image
                                  is omitted rather than failing the render.
                                  Rendered as a decorative PDF/UA pagination
                                  artifact (no alt text).
                                type: string
                              width:
                                minimum: 1
                                maximum: 14400
                                description: >-
                                  Rendered image width in PDF points. When
                                  omitted, the intrinsic width is used, clamped
                                  to the slot band width. Set `width` or
                                  `height` to scale a logo down.
                                type: number
                              height:
                                minimum: 1
                                maximum: 14400
                                description: >-
                                  Rendered image height in PDF points. When
                                  omitted, height follows the aspect ratio of
                                  the resolved width.
                                type: number
                              fit:
                                description: >-
                                  Block-only. How the image fills its
                                  width/height box: `none` (intrinsic sizing),
                                  `contain`, `cover`, or `fill`. Used with
                                  `height` for hero-style layouts.
                                anyOf:
                                  - const: none
                                    type: string
                                  - const: contain
                                    type: string
                                  - const: cover
                                    type: string
                                  - const: fill
                                    type: string
                              align:
                                description: >-
                                  Block-only. Horizontal alignment of the image
                                  within the content area: `start` (left edge in
                                  LTR), `center`, or `end` (right edge in LTR).
                                  Ignored for inline images (line flow controls
                                  position).
                                anyOf:
                                  - const: start
                                    type: string
                                  - const: center
                                    type: string
                                  - const: end
                                    type: string
                              opacity:
                                minimum: 0
                                maximum: 1
                                description: Image opacity from 0 to 1.
                                type: number
                          - additionalProperties: false
                            type: object
                            required:
                              - kind
                            properties:
                              kind:
                                const: pageNumber
                                type: string
                              style:
                                additionalProperties: false
                                type: object
                                properties:
                                  font:
                                    pattern: ^\S(.*\S)?$
                                    description: >-
                                      Font slot as `<role>.<variant>` — role is
                                      `body`, `heading`, or a custom
                                      `typography.named` role; variant is one of
                                      regular, italic, bold, boldItalic (see
                                      `enums.fontVariant`; e.g. `heading.bold`).
                                      The shape is checked semantically at
                                      validate, not by this pattern: a
                                      misspelled variant, an undeclared role, a
                                      missing `.variant`, or a value that reads
                                      like a family name is rejected with a
                                      `didYouMean` pointing at the fix (use
                                      `set.family` for a typeface).
                                    type: string
                                  size:
                                    minimum: 1
                                    maximum: 999
                                    description: Font size in points
                                    type: number
                                  color:
                                    pattern: ^#([0-9a-fA-F]{3}|[0-9a-fA-F]{6})$
                                    description: Color as `#RGB` or `#RRGGBB`
                                    type: string
                                  opacity:
                                    minimum: 0
                                    maximum: 1
                                    description: Text opacity from 0 to 1
                                    type: number
                          - additionalProperties: false
                            type: object
                            required:
                              - kind
                            properties:
                              kind:
                                const: totalPages
                                type: string
                              style:
                                additionalProperties: false
                                type: object
                                properties:
                                  font:
                                    pattern: ^\S(.*\S)?$
                                    description: >-
                                      Font slot as `<role>.<variant>` — role is
                                      `body`, `heading`, or a custom
                                      `typography.named` role; variant is one of
                                      regular, italic, bold, boldItalic (see
                                      `enums.fontVariant`; e.g. `heading.bold`).
                                      The shape is checked semantically at
                                      validate, not by this pattern: a
                                      misspelled variant, an undeclared role, a
                                      missing `.variant`, or a value that reads
                                      like a family name is rejected with a
                                      `didYouMean` pointing at the fix (use
                                      `set.family` for a typeface).
                                    type: string
                                  size:
                                    minimum: 1
                                    maximum: 999
                                    description: Font size in points
                                    type: number
                                  color:
                                    pattern: ^#([0-9a-fA-F]{3}|[0-9a-fA-F]{6})$
                                    description: Color as `#RGB` or `#RRGGBB`
                                    type: string
                                  opacity:
                                    minimum: 0
                                    maximum: 1
                                    description: Text opacity from 0 to 1
                                    type: number
                          - additionalProperties: false
                            type: object
                            required:
                              - kind
                            properties:
                              kind:
                                const: documentTitle
                                type: string
                              style:
                                additionalProperties: false
                                type: object
                                properties:
                                  font:
                                    pattern: ^\S(.*\S)?$
                                    description: >-
                                      Font slot as `<role>.<variant>` — role is
                                      `body`, `heading`, or a custom
                                      `typography.named` role; variant is one of
                                      regular, italic, bold, boldItalic (see
                                      `enums.fontVariant`; e.g. `heading.bold`).
                                      The shape is checked semantically at
                                      validate, not by this pattern: a
                                      misspelled variant, an undeclared role, a
                                      missing `.variant`, or a value that reads
                                      like a family name is rejected with a
                                      `didYouMean` pointing at the fix (use
                                      `set.family` for a typeface).
                                    type: string
                                  size:
                                    minimum: 1
                                    maximum: 999
                                    description: Font size in points
                                    type: number
                                  color:
                                    pattern: ^#([0-9a-fA-F]{3}|[0-9a-fA-F]{6})$
                                    description: Color as `#RGB` or `#RRGGBB`
                                    type: string
                                  opacity:
                                    minimum: 0
                                    maximum: 1
                                    description: Text opacity from 0 to 1
                                    type: number
                          - additionalProperties: false
                            type: object
                            required:
                              - kind
                            properties:
                              kind:
                                const: sectionTitle
                                type: string
                              depth:
                                description: Heading depth from 1 (top level) to 6
                                anyOf:
                                  - const: 1
                                    type: number
                                  - const: 2
                                    type: number
                                  - const: 3
                                    type: number
                                  - const: 4
                                    type: number
                                  - const: 5
                                    type: number
                                  - const: 6
                                    type: number
                              style:
                                additionalProperties: false
                                type: object
                                properties:
                                  font:
                                    pattern: ^\S(.*\S)?$
                                    description: >-
                                      Font slot as `<role>.<variant>` — role is
                                      `body`, `heading`, or a custom
                                      `typography.named` role; variant is one of
                                      regular, italic, bold, boldItalic (see
                                      `enums.fontVariant`; e.g. `heading.bold`).
                                      The shape is checked semantically at
                                      validate, not by this pattern: a
                                      misspelled variant, an undeclared role, a
                                      missing `.variant`, or a value that reads
                                      like a family name is rejected with a
                                      `didYouMean` pointing at the fix (use
                                      `set.family` for a typeface).
                                    type: string
                                  size:
                                    minimum: 1
                                    maximum: 999
                                    description: Font size in points
                                    type: number
                                  color:
                                    pattern: ^#([0-9a-fA-F]{3}|[0-9a-fA-F]{6})$
                                    description: Color as `#RGB` or `#RRGGBB`
                                    type: string
                                  opacity:
                                    minimum: 0
                                    maximum: 1
                                    description: Text opacity from 0 to 1
                                    type: number
                          - additionalProperties: false
                            type: object
                            required:
                              - kind
                            properties:
                              kind:
                                const: sectionIndex
                                type: string
                              depth:
                                description: Heading depth from 1 (top level) to 6
                                anyOf:
                                  - const: 1
                                    type: number
                                  - const: 2
                                    type: number
                                  - const: 3
                                    type: number
                                  - const: 4
                                    type: number
                                  - const: 5
                                    type: number
                                  - const: 6
                                    type: number
                              format:
                                description: >-
                                  Section ordinal format: `twoDigit` (at least
                                  two digits: 01, 12; ordinals ≥ 100 render in
                                  full) or `decimal` (1, 2, …)
                                anyOf:
                                  - const: twoDigit
                                    type: string
                                  - const: decimal
                                    type: string
                              style:
                                additionalProperties: false
                                type: object
                                properties:
                                  font:
                                    pattern: ^\S(.*\S)?$
                                    description: >-
                                      Font slot as `<role>.<variant>` — role is
                                      `body`, `heading`, or a custom
                                      `typography.named` role; variant is one of
                                      regular, italic, bold, boldItalic (see
                                      `enums.fontVariant`; e.g. `heading.bold`).
                                      The shape is checked semantically at
                                      validate, not by this pattern: a
                                      misspelled variant, an undeclared role, a
                                      missing `.variant`, or a value that reads
                                      like a family name is rejected with a
                                      `didYouMean` pointing at the fix (use
                                      `set.family` for a typeface).
                                    type: string
                                  size:
                                    minimum: 1
                                    maximum: 999
                                    description: Font size in points
                                    type: number
                                  color:
                                    pattern: ^#([0-9a-fA-F]{3}|[0-9a-fA-F]{6})$
                                    description: Color as `#RGB` or `#RRGGBB`
                                    type: string
                                  opacity:
                                    minimum: 0
                                    maximum: 1
                                    description: Text opacity from 0 to 1
                                    type: number
                    style:
                      additionalProperties: false
                      type: object
                      properties:
                        font:
                          pattern: ^\S(.*\S)?$
                          description: >-
                            Font slot as `<role>.<variant>` — role is `body`,
                            `heading`, or a custom `typography.named` role;
                            variant is one of regular, italic, bold, boldItalic
                            (see `enums.fontVariant`; e.g. `heading.bold`). The
                            shape is checked semantically at validate, not by
                            this pattern: a misspelled variant, an undeclared
                            role, a missing `.variant`, or a value that reads
                            like a family name is rejected with a `didYouMean`
                            pointing at the fix (use `set.family` for a
                            typeface).
                          type: string
                        family:
                          description: >-
                            A text family: a hosted weighted key, a declared
                            Google Fonts display name, or a `typography.named`
                            role reference
                          anyOf:
                            - const: inter
                              type: string
                            - const: lora
                              type: string
                            - const: source-serif-4
                              type: string
                            - pattern: ^[A-Za-z][A-Za-z0-9 ]{0,63}$
                              description: >-
                                Google Fonts display name from the declared pool
                                (e.g. `Playfair Display`)
                              type: string
                            - pattern: ^[a-z][a-z0-9-]{0,15}$
                              description: >-
                                Reference to a custom role declared in
                                `typography.named` (e.g. `display`)
                              type: string
                        size:
                          minimum: 1
                          maximum: 999
                          description: Font size in points
                          type: number
                        color:
                          pattern: ^#([0-9a-fA-F]{3}|[0-9a-fA-F]{6})$
                          description: Color as `#RGB` or `#RRGGBB`
                          type: string
                        spaceBefore:
                          minimum: 0
                          maximum: 9999
                          description: Vertical space reserved above the block, in points
                          type: number
                        spaceAfter:
                          minimum: 0
                          maximum: 9999
                          description: Vertical space reserved below the block, in points
                          type: number
                        lineHeight:
                          minimum: 1
                          maximum: 10
                          description: Line height as a multiple of the font size
                          type: number
                        align:
                          type: string
                          enum:
                            - left
                            - right
                            - center
                            - justify
                        letterSpacing:
                          minimum: -100
                          maximum: 100
                          description: >-
                            Extra spacing between characters in points; negative
                            values tighten
                          type: number
                        opacity:
                          minimum: 0
                          maximum: 1
                          description: Text opacity from 0 to 1
                          type: number
                        inline:
                          additionalProperties: false
                          type: object
                          properties:
                            strong:
                              additionalProperties: false
                              type: object
                              properties:
                                color:
                                  description: >-
                                    Color as `#RGB` or `#RRGGBB`, or `inherit`
                                    to use the inherited color
                                  anyOf:
                                    - pattern: ^#([0-9a-fA-F]{3}|[0-9a-fA-F]{6})$
                                      description: Color as `#RGB` or `#RRGGBB`
                                      type: string
                                    - const: inherit
                                      type: string
                            emphasis:
                              additionalProperties: false
                              type: object
                              properties:
                                color:
                                  description: >-
                                    Color as `#RGB` or `#RRGGBB`, or `inherit`
                                    to use the inherited color
                                  anyOf:
                                    - pattern: ^#([0-9a-fA-F]{3}|[0-9a-fA-F]{6})$
                                      description: Color as `#RGB` or `#RRGGBB`
                                      type: string
                                    - const: inherit
                                      type: string
                            delete:
                              additionalProperties: false
                              type: object
                              properties:
                                color:
                                  description: >-
                                    Color as `#RGB` or `#RRGGBB`, or `inherit`
                                    to use the inherited color
                                  anyOf:
                                    - pattern: ^#([0-9a-fA-F]{3}|[0-9a-fA-F]{6})$
                                      description: Color as `#RGB` or `#RRGGBB`
                                      type: string
                                    - const: inherit
                                      type: string
                                decorationStyle:
                                  type: string
                                  enum:
                                    - solid
                                    - double
                                    - dotted
                                    - dashed
                                    - wavy
                                decorationColor:
                                  description: >-
                                    Color as `#RGB` or `#RRGGBB`, or `inherit`
                                    to use the inherited color
                                  anyOf:
                                    - pattern: ^#([0-9a-fA-F]{3}|[0-9a-fA-F]{6})$
                                      description: Color as `#RGB` or `#RRGGBB`
                                      type: string
                                    - const: inherit
                                      type: string
                            mark:
                              additionalProperties: false
                              type: object
                              properties:
                                color:
                                  description: >-
                                    Color as `#RGB` or `#RRGGBB`, or `inherit`
                                    to use the inherited color
                                  anyOf:
                                    - pattern: ^#([0-9a-fA-F]{3}|[0-9a-fA-F]{6})$
                                      description: Color as `#RGB` or `#RRGGBB`
                                      type: string
                                    - const: inherit
                                      type: string
                                background:
                                  description: >-
                                    Background fill behind highlighted text as
                                    `#RGB`/`#RRGGBB`, or `null` to suppress
                                  anyOf:
                                    - pattern: ^#([0-9a-fA-F]{3}|[0-9a-fA-F]{6})$
                                      description: Color as `#RGB` or `#RRGGBB`
                                      type: string
                                    - type: 'null'
                                backgroundPadding:
                                  additionalProperties: false
                                  type: object
                                  properties:
                                    top:
                                      minimum: 0
                                      maximum: 9999
                                      description: Top padding, in points
                                      type: number
                                    right:
                                      minimum: 0
                                      maximum: 9999
                                      description: Right padding, in points
                                      type: number
                                    bottom:
                                      minimum: 0
                                      maximum: 9999
                                      description: Bottom padding, in points
                                      type: number
                                    left:
                                      minimum: 0
                                      maximum: 9999
                                      description: Left padding, in points
                                      type: number
                                    x:
                                      minimum: 0
                                      maximum: 9999
                                      description: >-
                                        Horizontal padding applied to both left
                                        and right when those sides are omitted,
                                        in points
                                      type: number
                                    'y':
                                      minimum: 0
                                      maximum: 9999
                                      description: >-
                                        Vertical padding applied to both top and
                                        bottom when those sides are omitted, in
                                        points
                                      type: number
                                backgroundRadius:
                                  minimum: 0
                                  maximum: 14400
                                  description: >-
                                    Corner radius for each highlight background
                                    segment, in points
                                  type: number
                            subscript:
                              additionalProperties: false
                              type: object
                              properties:
                                color:
                                  description: >-
                                    Color as `#RGB` or `#RRGGBB`, or `inherit`
                                    to use the inherited color
                                  anyOf:
                                    - pattern: ^#([0-9a-fA-F]{3}|[0-9a-fA-F]{6})$
                                      description: Color as `#RGB` or `#RRGGBB`
                                      type: string
                                    - const: inherit
                                      type: string
                                sizeScale:
                                  minimum: 0.4
                                  maximum: 1
                                  description: >-
                                    Optical scale relative to the surrounding
                                    run (fraction of base size)
                                  type: number
                                riseFraction:
                                  minimum: 0
                                  maximum: 1
                                  description: >-
                                    Baseline offset as a fraction of base size
                                    (not PDF points — contrast with code
                                    `baselineShift`). The renderer applies the
                                    sign (up for superscript, down for
                                    subscript)
                                  type: number
                            superscript:
                              additionalProperties: false
                              type: object
                              properties:
                                color:
                                  description: >-
                                    Color as `#RGB` or `#RRGGBB`, or `inherit`
                                    to use the inherited color
                                  anyOf:
                                    - pattern: ^#([0-9a-fA-F]{3}|[0-9a-fA-F]{6})$
                                      description: Color as `#RGB` or `#RRGGBB`
                                      type: string
                                    - const: inherit
                                      type: string
                                sizeScale:
                                  minimum: 0.4
                                  maximum: 1
                                  description: >-
                                    Optical scale relative to the surrounding
                                    run (fraction of base size)
                                  type: number
                                riseFraction:
                                  minimum: 0
                                  maximum: 1
                                  description: >-
                                    Baseline offset as a fraction of base size
                                    (not PDF points — contrast with code
                                    `baselineShift`). The renderer applies the
                                    sign (up for superscript, down for
                                    subscript)
                                  type: number
                            link:
                              additionalProperties: false
                              type: object
                              properties:
                                color:
                                  description: >-
                                    Color as `#RGB` or `#RRGGBB`, or `inherit`
                                    to use the inherited color
                                  anyOf:
                                    - pattern: ^#([0-9a-fA-F]{3}|[0-9a-fA-F]{6})$
                                      description: Color as `#RGB` or `#RRGGBB`
                                      type: string
                                    - const: inherit
                                      type: string
                                decoration:
                                  type: string
                                  enum:
                                    - underline
                                    - lineThrough
                                    - none
                                decorationStyle:
                                  type: string
                                  enum:
                                    - solid
                                    - double
                                    - dotted
                                    - dashed
                                    - wavy
                                decorationColor:
                                  description: >-
                                    Color as `#RGB` or `#RRGGBB`, or `inherit`
                                    to use the inherited color
                                  anyOf:
                                    - pattern: ^#([0-9a-fA-F]{3}|[0-9a-fA-F]{6})$
                                      description: Color as `#RGB` or `#RRGGBB`
                                      type: string
                                    - const: inherit
                                      type: string
                            code:
                              additionalProperties: false
                              description: >-
                                Style overrides for inline code spans (`` `code`
                                ``): font, optical size scale, text color,
                                background fill/padding/border/radius, baseline
                                shift, opacity, and letter spacing. Pass
                                `background: null` or `backgroundBorder: null`
                                to suppress those.
                              type: object
                              properties:
                                font:
                                  pattern: ^\S(.*\S)?$
                                  description: >-
                                    Font slot as `<role>.<variant>` — role is
                                    `body`, `heading`, or a custom
                                    `typography.named` role; variant is one of
                                    regular, italic, bold, boldItalic (see
                                    `enums.fontVariant`; e.g. `heading.bold`).
                                    The shape is checked semantically at
                                    validate, not by this pattern: a misspelled
                                    variant, an undeclared role, a missing
                                    `.variant`, or a value that reads like a
                                    family name is rejected with a `didYouMean`
                                    pointing at the fix (use `set.family` for a
                                    typeface).
                                  type: string
                                sizeScale:
                                  minimum: 0.85
                                  maximum: 0.88
                                  description: >-
                                    Optical scale relative to the surrounding
                                    run. Accepted range is the 0.85–0.88 band;
                                    out-of-range values are rejected
                                  type: number
                                color:
                                  description: >-
                                    Color as `#RGB` or `#RRGGBB`, or `inherit`
                                    to use the inherited color
                                  anyOf:
                                    - pattern: ^#([0-9a-fA-F]{3}|[0-9a-fA-F]{6})$
                                      description: Color as `#RGB` or `#RRGGBB`
                                      type: string
                                    - const: inherit
                                      type: string
                                background:
                                  description: >-
                                    Background fill behind the code run as
                                    `#RGB`/`#RRGGBB`, or `null` to suppress
                                  anyOf:
                                    - pattern: ^#([0-9a-fA-F]{3}|[0-9a-fA-F]{6})$
                                      description: Color as `#RGB` or `#RRGGBB`
                                      type: string
                                    - type: 'null'
                                backgroundPadding:
                                  additionalProperties: false
                                  type: object
                                  properties:
                                    top:
                                      minimum: 0
                                      maximum: 9999
                                      description: Top padding, in points
                                      type: number
                                    right:
                                      minimum: 0
                                      maximum: 9999
                                      description: Right padding, in points
                                      type: number
                                    bottom:
                                      minimum: 0
                                      maximum: 9999
                                      description: Bottom padding, in points
                                      type: number
                                    left:
                                      minimum: 0
                                      maximum: 9999
                                      description: Left padding, in points
                                      type: number
                                    x:
                                      minimum: 0
                                      maximum: 9999
                                      description: >-
                                        Horizontal padding applied to both left
                                        and right when those sides are omitted,
                                        in points
                                      type: number
                                    'y':
                                      minimum: 0
                                      maximum: 9999
                                      description: >-
                                        Vertical padding applied to both top and
                                        bottom when those sides are omitted, in
                                        points
                                      type: number
                                backgroundBorder:
                                  description: >-
                                    Micro-border around each cloned background
                                    segment, or `null` to suppress
                                  anyOf:
                                    - additionalProperties: false
                                      type: object
                                      required:
                                        - width
                                        - color
                                      properties:
                                        width:
                                          minimum: 0.1
                                          maximum: 50
                                          description: Border thickness in points
                                          type: number
                                        color:
                                          pattern: ^#([0-9a-fA-F]{3}|[0-9a-fA-F]{6})$
                                          description: Color as `#RGB` or `#RRGGBB`
                                          type: string
                                        opacity:
                                          minimum: 0
                                          maximum: 1
                                          description: Border opacity from 0 to 1
                                          type: number
                                        dash:
                                          description: >-
                                            Dash pattern as `[dash, gap]` lengths in
                                            points; both `0` is rejected
                                          type: array
                                          items:
                                            minimum: 0
                                            maximum: 1000
                                            type: number
                                          minItems: 2
                                          maxItems: 2
                                    - type: 'null'
                                backgroundRadius:
                                  minimum: 0
                                  maximum: 14400
                                  description: >-
                                    Corner radius for each background segment,
                                    in points
                                  type: number
                                baselineShift:
                                  minimum: -999
                                  maximum: 999
                                  description: >-
                                    PDF text-rise adjustment in points; positive
                                    values raise the code glyphs
                                  type: number
                                opacity:
                                  minimum: 0
                                  maximum: 1
                                  description: Fill opacity from 0 to 1
                                  type: number
                                letterSpacing:
                                  minimum: -100
                                  maximum: 100
                                  description: >-
                                    Extra spacing between code glyphs in points;
                                    negative values tighten
                                  type: number
                bottomCenter:
                  additionalProperties: false
                  type: object
                  required:
                    - content
                  properties:
                    content:
                      minItems: 1
                      maxItems: 16
                      description: Ordered fragments concatenated to fill the slot
                      type: array
                      items:
                        description: >-
                          A header/footer fragment: literal text, an image
                          (logo/letterhead), page numbers, document title,
                          running section title, or section ordinal at a heading
                          depth. An `image` fragment must be the only fragment
                          in its slot — it is not mixed with text fragments.
                        anyOf:
                          - additionalProperties: false
                            type: object
                            required:
                              - kind
                              - value
                            properties:
                              kind:
                                const: text
                                type: string
                              value:
                                minLength: 1
                                maxLength: 256
                                pattern: \S
                                description: Literal text for this fragment
                                type: string
                              style:
                                additionalProperties: false
                                type: object
                                properties:
                                  font:
                                    pattern: ^\S(.*\S)?$
                                    description: >-
                                      Font slot as `<role>.<variant>` — role is
                                      `body`, `heading`, or a custom
                                      `typography.named` role; variant is one of
                                      regular, italic, bold, boldItalic (see
                                      `enums.fontVariant`; e.g. `heading.bold`).
                                      The shape is checked semantically at
                                      validate, not by this pattern: a
                                      misspelled variant, an undeclared role, a
                                      missing `.variant`, or a value that reads
                                      like a family name is rejected with a
                                      `didYouMean` pointing at the fix (use
                                      `set.family` for a typeface).
                                    type: string
                                  size:
                                    minimum: 1
                                    maximum: 999
                                    description: Font size in points
                                    type: number
                                  color:
                                    pattern: ^#([0-9a-fA-F]{3}|[0-9a-fA-F]{6})$
                                    description: Color as `#RGB` or `#RRGGBB`
                                    type: string
                                  opacity:
                                    minimum: 0
                                    maximum: 1
                                    description: Text opacity from 0 to 1
                                    type: number
                          - additionalProperties: false
                            type: object
                            required:
                              - kind
                              - url
                            properties:
                              kind:
                                const: image
                                type: string
                              url:
                                minLength: 1
                                maxLength: 1048576
                                pattern: ^(https://|data:image/)
                                description: >-
                                  HTTPS or base64 `data:image/...` URL of the
                                  header/footer image (typically a brand logo or
                                  letterhead). Fetched under the same fixed,
                                  non-configurable image policy as Markdown
                                  images (private IPs blocked, DNS-rebinding
                                  mitigation, 10 MiB cap); a fetch or decode
                                  failure degrades to a diagnostic and the image
                                  is omitted rather than failing the render.
                                  Rendered as a decorative PDF/UA pagination
                                  artifact (no alt text).
                                type: string
                              width:
                                minimum: 1
                                maximum: 14400
                                description: >-
                                  Rendered image width in PDF points. When
                                  omitted, the intrinsic width is used, clamped
                                  to the slot band width. Set `width` or
                                  `height` to scale a logo down.
                                type: number
                              height:
                                minimum: 1
                                maximum: 14400
                                description: >-
                                  Rendered image height in PDF points. When
                                  omitted, height follows the aspect ratio of
                                  the resolved width.
                                type: number
                              fit:
                                description: >-
                                  Block-only. How the image fills its
                                  width/height box: `none` (intrinsic sizing),
                                  `contain`, `cover`, or `fill`. Used with
                                  `height` for hero-style layouts.
                                anyOf:
                                  - const: none
                                    type: string
                                  - const: contain
                                    type: string
                                  - const: cover
                                    type: string
                                  - const: fill
                                    type: string
                              align:
                                description: >-
                                  Block-only. Horizontal alignment of the image
                                  within the content area: `start` (left edge in
                                  LTR), `center`, or `end` (right edge in LTR).
                                  Ignored for inline images (line flow controls
                                  position).
                                anyOf:
                                  - const: start
                                    type: string
                                  - const: center
                                    type: string
                                  - const: end
                                    type: string
                              opacity:
                                minimum: 0
                                maximum: 1
                                description: Image opacity from 0 to 1.
                                type: number
                          - additionalProperties: false
                            type: object
                            required:
                              - kind
                            properties:
                              kind:
                                const: pageNumber
                                type: string
                              style:
                                additionalProperties: false
                                type: object
                                properties:
                                  font:
                                    pattern: ^\S(.*\S)?$
                                    description: >-
                                      Font slot as `<role>.<variant>` — role is
                                      `body`, `heading`, or a custom
                                      `typography.named` role; variant is one of
                                      regular, italic, bold, boldItalic (see
                                      `enums.fontVariant`; e.g. `heading.bold`).
                                      The shape is checked semantically at
                                      validate, not by this pattern: a
                                      misspelled variant, an undeclared role, a
                                      missing `.variant`, or a value that reads
                                      like a family name is rejected with a
                                      `didYouMean` pointing at the fix (use
                                      `set.family` for a typeface).
                                    type: string
                                  size:
                                    minimum: 1
                                    maximum: 999
                                    description: Font size in points
                                    type: number
                                  color:
                                    pattern: ^#([0-9a-fA-F]{3}|[0-9a-fA-F]{6})$
                                    description: Color as `#RGB` or `#RRGGBB`
                                    type: string
                                  opacity:
                                    minimum: 0
                                    maximum: 1
                                    description: Text opacity from 0 to 1
                                    type: number
                          - additionalProperties: false
                            type: object
                            required:
                              - kind
                            properties:
                              kind:
                                const: totalPages
                                type: string
                              style:
                                additionalProperties: false
                                type: object
                                properties:
                                  font:
                                    pattern: ^\S(.*\S)?$
                                    description: >-
                                      Font slot as `<role>.<variant>` — role is
                                      `body`, `heading`, or a custom
                                      `typography.named` role; variant is one of
                                      regular, italic, bold, boldItalic (see
                                      `enums.fontVariant`; e.g. `heading.bold`).
                                      The shape is checked semantically at
                                      validate, not by this pattern: a
                                      misspelled variant, an undeclared role, a
                                      missing `.variant`, or a value that reads
                                      like a family name is rejected with a
                                      `didYouMean` pointing at the fix (use
                                      `set.family` for a typeface).
                                    type: string
                                  size:
                                    minimum: 1
                                    maximum: 999
                                    description: Font size in points
                                    type: number
                                  color:
                                    pattern: ^#([0-9a-fA-F]{3}|[0-9a-fA-F]{6})$
                                    description: Color as `#RGB` or `#RRGGBB`
                                    type: string
                                  opacity:
                                    minimum: 0
                                    maximum: 1
                                    description: Text opacity from 0 to 1
                                    type: number
                          - additionalProperties: false
                            type: object
                            required:
                              - kind
                            properties:
                              kind:
                                const: documentTitle
                                type: string
                              style:
                                additionalProperties: false
                                type: object
                                properties:
                                  font:
                                    pattern: ^\S(.*\S)?$
                                    description: >-
                                      Font slot as `<role>.<variant>` — role is
                                      `body`, `heading`, or a custom
                                      `typography.named` role; variant is one of
                                      regular, italic, bold, boldItalic (see
                                      `enums.fontVariant`; e.g. `heading.bold`).
                                      The shape is checked semantically at
                                      validate, not by this pattern: a
                                      misspelled variant, an undeclared role, a
                                      missing `.variant`, or a value that reads
                                      like a family name is rejected with a
                                      `didYouMean` pointing at the fix (use
                                      `set.family` for a typeface).
                                    type: string
                                  size:
                                    minimum: 1
                                    maximum: 999
                                    description: Font size in points
                                    type: number
                                  color:
                                    pattern: ^#([0-9a-fA-F]{3}|[0-9a-fA-F]{6})$
                                    description: Color as `#RGB` or `#RRGGBB`
                                    type: string
                                  opacity:
                                    minimum: 0
                                    maximum: 1
                                    description: Text opacity from 0 to 1
                                    type: number
                          - additionalProperties: false
                            type: object
                            required:
                              - kind
                            properties:
                              kind:
                                const: sectionTitle
                                type: string
                              depth:
                                description: Heading depth from 1 (top level) to 6
                                anyOf:
                                  - const: 1
                                    type: number
                                  - const: 2
                                    type: number
                                  - const: 3
                                    type: number
                                  - const: 4
                                    type: number
                                  - const: 5
                                    type: number
                                  - const: 6
                                    type: number
                              style:
                                additionalProperties: false
                                type: object
                                properties:
                                  font:
                                    pattern: ^\S(.*\S)?$
                                    description: >-
                                      Font slot as `<role>.<variant>` — role is
                                      `body`, `heading`, or a custom
                                      `typography.named` role; variant is one of
                                      regular, italic, bold, boldItalic (see
                                      `enums.fontVariant`; e.g. `heading.bold`).
                                      The shape is checked semantically at
                                      validate, not by this pattern: a
                                      misspelled variant, an undeclared role, a
                                      missing `.variant`, or a value that reads
                                      like a family name is rejected with a
                                      `didYouMean` pointing at the fix (use
                                      `set.family` for a typeface).
                                    type: string
                                  size:
                                    minimum: 1
                                    maximum: 999
                                    description: Font size in points
                                    type: number
                                  color:
                                    pattern: ^#([0-9a-fA-F]{3}|[0-9a-fA-F]{6})$
                                    description: Color as `#RGB` or `#RRGGBB`
                                    type: string
                                  opacity:
                                    minimum: 0
                                    maximum: 1
                                    description: Text opacity from 0 to 1
                                    type: number
                          - additionalProperties: false
                            type: object
                            required:
                              - kind
                            properties:
                              kind:
                                const: sectionIndex
                                type: string
                              depth:
                                description: Heading depth from 1 (top level) to 6
                                anyOf:
                                  - const: 1
                                    type: number
                                  - const: 2
                                    type: number
                                  - const: 3
                                    type: number
                                  - const: 4
                                    type: number
                                  - const: 5
                                    type: number
                                  - const: 6
                                    type: number
                              format:
                                description: >-
                                  Section ordinal format: `twoDigit` (at least
                                  two digits: 01, 12; ordinals ≥ 100 render in
                                  full) or `decimal` (1, 2, …)
                                anyOf:
                                  - const: twoDigit
                                    type: string
                                  - const: decimal
                                    type: string
                              style:
                                additionalProperties: false
                                type: object
                                properties:
                                  font:
                                    pattern: ^\S(.*\S)?$
                                    description: >-
                                      Font slot as `<role>.<variant>` — role is
                                      `body`, `heading`, or a custom
                                      `typography.named` role; variant is one of
                                      regular, italic, bold, boldItalic (see
                                      `enums.fontVariant`; e.g. `heading.bold`).
                                      The shape is checked semantically at
                                      validate, not by this pattern: a
                                      misspelled variant, an undeclared role, a
                                      missing `.variant`, or a value that reads
                                      like a family name is rejected with a
                                      `didYouMean` pointing at the fix (use
                                      `set.family` for a typeface).
                                    type: string
                                  size:
                                    minimum: 1
                                    maximum: 999
                                    description: Font size in points
                                    type: number
                                  color:
                                    pattern: ^#([0-9a-fA-F]{3}|[0-9a-fA-F]{6})$
                                    description: Color as `#RGB` or `#RRGGBB`
                                    type: string
                                  opacity:
                                    minimum: 0
                                    maximum: 1
                                    description: Text opacity from 0 to 1
                                    type: number
                    style:
                      additionalProperties: false
                      type: object
                      properties:
                        font:
                          pattern: ^\S(.*\S)?$
                          description: >-
                            Font slot as `<role>.<variant>` — role is `body`,
                            `heading`, or a custom `typography.named` role;
                            variant is one of regular, italic, bold, boldItalic
                            (see `enums.fontVariant`; e.g. `heading.bold`). The
                            shape is checked semantically at validate, not by
                            this pattern: a misspelled variant, an undeclared
                            role, a missing `.variant`, or a value that reads
                            like a family name is rejected with a `didYouMean`
                            pointing at the fix (use `set.family` for a
                            typeface).
                          type: string
                        family:
                          description: >-
                            A text family: a hosted weighted key, a declared
                            Google Fonts display name, or a `typography.named`
                            role reference
                          anyOf:
                            - const: inter
                              type: string
                            - const: lora
                              type: string
                            - const: source-serif-4
                              type: string
                            - pattern: ^[A-Za-z][A-Za-z0-9 ]{0,63}$
                              description: >-
                                Google Fonts display name from the declared pool
                                (e.g. `Playfair Display`)
                              type: string
                            - pattern: ^[a-z][a-z0-9-]{0,15}$
                              description: >-
                                Reference to a custom role declared in
                                `typography.named` (e.g. `display`)
                              type: string
                        size:
                          minimum: 1
                          maximum: 999
                          description: Font size in points
                          type: number
                        color:
                          pattern: ^#([0-9a-fA-F]{3}|[0-9a-fA-F]{6})$
                          description: Color as `#RGB` or `#RRGGBB`
                          type: string
                        spaceBefore:
                          minimum: 0
                          maximum: 9999
                          description: Vertical space reserved above the block, in points
                          type: number
                        spaceAfter:
                          minimum: 0
                          maximum: 9999
                          description: Vertical space reserved below the block, in points
                          type: number
                        lineHeight:
                          minimum: 1
                          maximum: 10
                          description: Line height as a multiple of the font size
                          type: number
                        align:
                          type: string
                          enum:
                            - left
                            - right
                            - center
                            - justify
                        letterSpacing:
                          minimum: -100
                          maximum: 100
                          description: >-
                            Extra spacing between characters in points; negative
                            values tighten
                          type: number
                        opacity:
                          minimum: 0
                          maximum: 1
                          description: Text opacity from 0 to 1
                          type: number
                        inline:
                          additionalProperties: false
                          type: object
                          properties:
                            strong:
                              additionalProperties: false
                              type: object
                              properties:
                                color:
                                  description: >-
                                    Color as `#RGB` or `#RRGGBB`, or `inherit`
                                    to use the inherited color
                                  anyOf:
                                    - pattern: ^#([0-9a-fA-F]{3}|[0-9a-fA-F]{6})$
                                      description: Color as `#RGB` or `#RRGGBB`
                                      type: string
                                    - const: inherit
                                      type: string
                            emphasis:
                              additionalProperties: false
                              type: object
                              properties:
                                color:
                                  description: >-
                                    Color as `#RGB` or `#RRGGBB`, or `inherit`
                                    to use the inherited color
                                  anyOf:
                                    - pattern: ^#([0-9a-fA-F]{3}|[0-9a-fA-F]{6})$
                                      description: Color as `#RGB` or `#RRGGBB`
                                      type: string
                                    - const: inherit
                                      type: string
                            delete:
                              additionalProperties: false
                              type: object
                              properties:
                                color:
                                  description: >-
                                    Color as `#RGB` or `#RRGGBB`, or `inherit`
                                    to use the inherited color
                                  anyOf:
                                    - pattern: ^#([0-9a-fA-F]{3}|[0-9a-fA-F]{6})$
                                      description: Color as `#RGB` or `#RRGGBB`
                                      type: string
                                    - const: inherit
                                      type: string
                                decorationStyle:
                                  type: string
                                  enum:
                                    - solid
                                    - double
                                    - dotted
                                    - dashed
                                    - wavy
                                decorationColor:
                                  description: >-
                                    Color as `#RGB` or `#RRGGBB`, or `inherit`
                                    to use the inherited color
                                  anyOf:
                                    - pattern: ^#([0-9a-fA-F]{3}|[0-9a-fA-F]{6})$
                                      description: Color as `#RGB` or `#RRGGBB`
                                      type: string
                                    - const: inherit
                                      type: string
                            mark:
                              additionalProperties: false
                              type: object
                              properties:
                                color:
                                  description: >-
                                    Color as `#RGB` or `#RRGGBB`, or `inherit`
                                    to use the inherited color
                                  anyOf:
                                    - pattern: ^#([0-9a-fA-F]{3}|[0-9a-fA-F]{6})$
                                      description: Color as `#RGB` or `#RRGGBB`
                                      type: string
                                    - const: inherit
                                      type: string
                                background:
                                  description: >-
                                    Background fill behind highlighted text as
                                    `#RGB`/`#RRGGBB`, or `null` to suppress
                                  anyOf:
                                    - pattern: ^#([0-9a-fA-F]{3}|[0-9a-fA-F]{6})$
                                      description: Color as `#RGB` or `#RRGGBB`
                                      type: string
                                    - type: 'null'
                                backgroundPadding:
                                  additionalProperties: false
                                  type: object
                                  properties:
                                    top:
                                      minimum: 0
                                      maximum: 9999
                                      description: Top padding, in points
                                      type: number
                                    right:
                                      minimum: 0
                                      maximum: 9999
                                      description: Right padding, in points
                                      type: number
                                    bottom:
                                      minimum: 0
                                      maximum: 9999
                                      description: Bottom padding, in points
                                      type: number
                                    left:
                                      minimum: 0
                                      maximum: 9999
                                      description: Left padding, in points
                                      type: number
                                    x:
                                      minimum: 0
                                      maximum: 9999
                                      description: >-
                                        Horizontal padding applied to both left
                                        and right when those sides are omitted,
                                        in points
                                      type: number
                                    'y':
                                      minimum: 0
                                      maximum: 9999
                                      description: >-
                                        Vertical padding applied to both top and
                                        bottom when those sides are omitted, in
                                        points
                                      type: number
                                backgroundRadius:
                                  minimum: 0
                                  maximum: 14400
                                  description: >-
                                    Corner radius for each highlight background
                                    segment, in points
                                  type: number
                            subscript:
                              additionalProperties: false
                              type: object
                              properties:
                                color:
                                  description: >-
                                    Color as `#RGB` or `#RRGGBB`, or `inherit`
                                    to use the inherited color
                                  anyOf:
                                    - pattern: ^#([0-9a-fA-F]{3}|[0-9a-fA-F]{6})$
                                      description: Color as `#RGB` or `#RRGGBB`
                                      type: string
                                    - const: inherit
                                      type: string
                                sizeScale:
                                  minimum: 0.4
                                  maximum: 1
                                  description: >-
                                    Optical scale relative to the surrounding
                                    run (fraction of base size)
                                  type: number
                                riseFraction:
                                  minimum: 0
                                  maximum: 1
                                  description: >-
                                    Baseline offset as a fraction of base size
                                    (not PDF points — contrast with code
                                    `baselineShift`). The renderer applies the
                                    sign (up for superscript, down for
                                    subscript)
                                  type: number
                            superscript:
                              additionalProperties: false
                              type: object
                              properties:
                                color:
                                  description: >-
                                    Color as `#RGB` or `#RRGGBB`, or `inherit`
                                    to use the inherited color
                                  anyOf:
                                    - pattern: ^#([0-9a-fA-F]{3}|[0-9a-fA-F]{6})$
                                      description: Color as `#RGB` or `#RRGGBB`
                                      type: string
                                    - const: inherit
                                      type: string
                                sizeScale:
                                  minimum: 0.4
                                  maximum: 1
                                  description: >-
                                    Optical scale relative to the surrounding
                                    run (fraction of base size)
                                  type: number
                                riseFraction:
                                  minimum: 0
                                  maximum: 1
                                  description: >-
                                    Baseline offset as a fraction of base size
                                    (not PDF points — contrast with code
                                    `baselineShift`). The renderer applies the
                                    sign (up for superscript, down for
                                    subscript)
                                  type: number
                            link:
                              additionalProperties: false
                              type: object
                              properties:
                                color:
                                  description: >-
                                    Color as `#RGB` or `#RRGGBB`, or `inherit`
                                    to use the inherited color
                                  anyOf:
                                    - pattern: ^#([0-9a-fA-F]{3}|[0-9a-fA-F]{6})$
                                      description: Color as `#RGB` or `#RRGGBB`
                                      type: string
                                    - const: inherit
                                      type: string
                                decoration:
                                  type: string
                                  enum:
                                    - underline
                                    - lineThrough
                                    - none
                                decorationStyle:
                                  type: string
                                  enum:
                                    - solid
                                    - double
                                    - dotted
                                    - dashed
                                    - wavy
                                decorationColor:
                                  description: >-
                                    Color as `#RGB` or `#RRGGBB`, or `inherit`
                                    to use the inherited color
                                  anyOf:
                                    - pattern: ^#([0-9a-fA-F]{3}|[0-9a-fA-F]{6})$
                                      description: Color as `#RGB` or `#RRGGBB`
                                      type: string
                                    - const: inherit
                                      type: string
                            code:
                              additionalProperties: false
                              description: >-
                                Style overrides for inline code spans (`` `code`
                                ``): font, optical size scale, text color,
                                background fill/padding/border/radius, baseline
                                shift, opacity, and letter spacing. Pass
                                `background: null` or `backgroundBorder: null`
                                to suppress those.
                              type: object
                              properties:
                                font:
                                  pattern: ^\S(.*\S)?$
                                  description: >-
                                    Font slot as `<role>.<variant>` — role is
                                    `body`, `heading`, or a custom
                                    `typography.named` role; variant is one of
                                    regular, italic, bold, boldItalic (see
                                    `enums.fontVariant`; e.g. `heading.bold`).
                                    The shape is checked semantically at
                                    validate, not by this pattern: a misspelled
                                    variant, an undeclared role, a missing
                                    `.variant`, or a value that reads like a
                                    family name is rejected with a `didYouMean`
                                    pointing at the fix (use `set.family` for a
                                    typeface).
                                  type: string
                                sizeScale:
                                  minimum: 0.85
                                  maximum: 0.88
                                  description: >-
                                    Optical scale relative to the surrounding
                                    run. Accepted range is the 0.85–0.88 band;
                                    out-of-range values are rejected
                                  type: number
                                color:
                                  description: >-
                                    Color as `#RGB` or `#RRGGBB`, or `inherit`
                                    to use the inherited color
                                  anyOf:
                                    - pattern: ^#([0-9a-fA-F]{3}|[0-9a-fA-F]{6})$
                                      description: Color as `#RGB` or `#RRGGBB`
                                      type: string
                                    - const: inherit
                                      type: string
                                background:
                                  description: >-
                                    Background fill behind the code run as
                                    `#RGB`/`#RRGGBB`, or `null` to suppress
                                  anyOf:
                                    - pattern: ^#([0-9a-fA-F]{3}|[0-9a-fA-F]{6})$
                                      description: Color as `#RGB` or `#RRGGBB`
                                      type: string
                                    - type: 'null'
                                backgroundPadding:
                                  additionalProperties: false
                                  type: object
                                  properties:
                                    top:
                                      minimum: 0
                                      maximum: 9999
                                      description: Top padding, in points
                                      type: number
                                    right:
                                      minimum: 0
                                      maximum: 9999
                                      description: Right padding, in points
                                      type: number
                                    bottom:
                                      minimum: 0
                                      maximum: 9999
                                      description: Bottom padding, in points
                                      type: number
                                    left:
                                      minimum: 0
                                      maximum: 9999
                                      description: Left padding, in points
                                      type: number
                                    x:
                                      minimum: 0
                                      maximum: 9999
                                      description: >-
                                        Horizontal padding applied to both left
                                        and right when those sides are omitted,
                                        in points
                                      type: number
                                    'y':
                                      minimum: 0
                                      maximum: 9999
                                      description: >-
                                        Vertical padding applied to both top and
                                        bottom when those sides are omitted, in
                                        points
                                      type: number
                                backgroundBorder:
                                  description: >-
                                    Micro-border around each cloned background
                                    segment, or `null` to suppress
                                  anyOf:
                                    - additionalProperties: false
                                      type: object
                                      required:
                                        - width
                                        - color
                                      properties:
                                        width:
                                          minimum: 0.1
                                          maximum: 50
                                          description: Border thickness in points
                                          type: number
                                        color:
                                          pattern: ^#([0-9a-fA-F]{3}|[0-9a-fA-F]{6})$
                                          description: Color as `#RGB` or `#RRGGBB`
                                          type: string
                                        opacity:
                                          minimum: 0
                                          maximum: 1
                                          description: Border opacity from 0 to 1
                                          type: number
                                        dash:
                                          description: >-
                                            Dash pattern as `[dash, gap]` lengths in
                                            points; both `0` is rejected
                                          type: array
                                          items:
                                            minimum: 0
                                            maximum: 1000
                                            type: number
                                          minItems: 2
                                          maxItems: 2
                                    - type: 'null'
                                backgroundRadius:
                                  minimum: 0
                                  maximum: 14400
                                  description: >-
                                    Corner radius for each background segment,
                                    in points
                                  type: number
                                baselineShift:
                                  minimum: -999
                                  maximum: 999
                                  description: >-
                                    PDF text-rise adjustment in points; positive
                                    values raise the code glyphs
                                  type: number
                                opacity:
                                  minimum: 0
                                  maximum: 1
                                  description: Fill opacity from 0 to 1
                                  type: number
                                letterSpacing:
                                  minimum: -100
                                  maximum: 100
                                  description: >-
                                    Extra spacing between code glyphs in points;
                                    negative values tighten
                                  type: number
                bottomRight:
                  additionalProperties: false
                  type: object
                  required:
                    - content
                  properties:
                    content:
                      minItems: 1
                      maxItems: 16
                      description: Ordered fragments concatenated to fill the slot
                      type: array
                      items:
                        description: >-
                          A header/footer fragment: literal text, an image
                          (logo/letterhead), page numbers, document title,
                          running section title, or section ordinal at a heading
                          depth. An `image` fragment must be the only fragment
                          in its slot — it is not mixed with text fragments.
                        anyOf:
                          - additionalProperties: false
                            type: object
                            required:
                              - kind
                              - value
                            properties:
                              kind:
                                const: text
                                type: string
                              value:
                                minLength: 1
                                maxLength: 256
                                pattern: \S
                                description: Literal text for this fragment
                                type: string
                              style:
                                additionalProperties: false
                                type: object
                                properties:
                                  font:
                                    pattern: ^\S(.*\S)?$
                                    description: >-
                                      Font slot as `<role>.<variant>` — role is
                                      `body`, `heading`, or a custom
                                      `typography.named` role; variant is one of
                                      regular, italic, bold, boldItalic (see
                                      `enums.fontVariant`; e.g. `heading.bold`).
                                      The shape is checked semantically at
                                      validate, not by this pattern: a
                                      misspelled variant, an undeclared role, a
                                      missing `.variant`, or a value that reads
                                      like a family name is rejected with a
                                      `didYouMean` pointing at the fix (use
                                      `set.family` for a typeface).
                                    type: string
                                  size:
                                    minimum: 1
                                    maximum: 999
                                    description: Font size in points
                                    type: number
                                  color:
                                    pattern: ^#([0-9a-fA-F]{3}|[0-9a-fA-F]{6})$
                                    description: Color as `#RGB` or `#RRGGBB`
                                    type: string
                                  opacity:
                                    minimum: 0
                                    maximum: 1
                                    description: Text opacity from 0 to 1
                                    type: number
                          - additionalProperties: false
                            type: object
                            required:
                              - kind
                              - url
                            properties:
                              kind:
                                const: image
                                type: string
                              url:
                                minLength: 1
                                maxLength: 1048576
                                pattern: ^(https://|data:image/)
                                description: >-
                                  HTTPS or base64 `data:image/...` URL of the
                                  header/footer image (typically a brand logo or
                                  letterhead). Fetched under the same fixed,
                                  non-configurable image policy as Markdown
                                  images (private IPs blocked, DNS-rebinding
                                  mitigation, 10 MiB cap); a fetch or decode
                                  failure degrades to a diagnostic and the image
                                  is omitted rather than failing the render.
                                  Rendered as a decorative PDF/UA pagination
                                  artifact (no alt text).
                                type: string
                              width:
                                minimum: 1
                                maximum: 14400
                                description: >-
                                  Rendered image width in PDF points. When
                                  omitted, the intrinsic width is used, clamped
                                  to the slot band width. Set `width` or
                                  `height` to scale a logo down.
                                type: number
                              height:
                                minimum: 1
                                maximum: 14400
                                description: >-
                                  Rendered image height in PDF points. When
                                  omitted, height follows the aspect ratio of
                                  the resolved width.
                                type: number
                              fit:
                                description: >-
                                  Block-only. How the image fills its
                                  width/height box: `none` (intrinsic sizing),
                                  `contain`, `cover`, or `fill`. Used with
                                  `height` for hero-style layouts.
                                anyOf:
                                  - const: none
                                    type: string
                                  - const: contain
                                    type: string
                                  - const: cover
                                    type: string
                                  - const: fill
                                    type: string
                              align:
                                description: >-
                                  Block-only. Horizontal alignment of the image
                                  within the content area: `start` (left edge in
                                  LTR), `center`, or `end` (right edge in LTR).
                                  Ignored for inline images (line flow controls
                                  position).
                                anyOf:
                                  - const: start
                                    type: string
                                  - const: center
                                    type: string
                                  - const: end
                                    type: string
                              opacity:
                                minimum: 0
                                maximum: 1
                                description: Image opacity from 0 to 1.
                                type: number
                          - additionalProperties: false
                            type: object
                            required:
                              - kind
                            properties:
                              kind:
                                const: pageNumber
                                type: string
                              style:
                                additionalProperties: false
                                type: object
                                properties:
                                  font:
                                    pattern: ^\S(.*\S)?$
                                    description: >-
                                      Font slot as `<role>.<variant>` — role is
                                      `body`, `heading`, or a custom
                                      `typography.named` role; variant is one of
                                      regular, italic, bold, boldItalic (see
                                      `enums.fontVariant`; e.g. `heading.bold`).
                                      The shape is checked semantically at
                                      validate, not by this pattern: a
                                      misspelled variant, an undeclared role, a
                                      missing `.variant`, or a value that reads
                                      like a family name is rejected with a
                                      `didYouMean` pointing at the fix (use
                                      `set.family` for a typeface).
                                    type: string
                                  size:
                                    minimum: 1
                                    maximum: 999
                                    description: Font size in points
                                    type: number
                                  color:
                                    pattern: ^#([0-9a-fA-F]{3}|[0-9a-fA-F]{6})$
                                    description: Color as `#RGB` or `#RRGGBB`
                                    type: string
                                  opacity:
                                    minimum: 0
                                    maximum: 1
                                    description: Text opacity from 0 to 1
                                    type: number
                          - additionalProperties: false
                            type: object
                            required:
                              - kind
                            properties:
                              kind:
                                const: totalPages
                                type: string
                              style:
                                additionalProperties: false
                                type: object
                                properties:
                                  font:
                                    pattern: ^\S(.*\S)?$
                                    description: >-
                                      Font slot as `<role>.<variant>` — role is
                                      `body`, `heading`, or a custom
                                      `typography.named` role; variant is one of
                                      regular, italic, bold, boldItalic (see
                                      `enums.fontVariant`; e.g. `heading.bold`).
                                      The shape is checked semantically at
                                      validate, not by this pattern: a
                                      misspelled variant, an undeclared role, a
                                      missing `.variant`, or a value that reads
                                      like a family name is rejected with a
                                      `didYouMean` pointing at the fix (use
                                      `set.family` for a typeface).
                                    type: string
                                  size:
                                    minimum: 1
                                    maximum: 999
                                    description: Font size in points
                                    type: number
                                  color:
                                    pattern: ^#([0-9a-fA-F]{3}|[0-9a-fA-F]{6})$
                                    description: Color as `#RGB` or `#RRGGBB`
                                    type: string
                                  opacity:
                                    minimum: 0
                                    maximum: 1
                                    description: Text opacity from 0 to 1
                                    type: number
                          - additionalProperties: false
                            type: object
                            required:
                              - kind
                            properties:
                              kind:
                                const: documentTitle
                                type: string
                              style:
                                additionalProperties: false
                                type: object
                                properties:
                                  font:
                                    pattern: ^\S(.*\S)?$
                                    description: >-
                                      Font slot as `<role>.<variant>` — role is
                                      `body`, `heading`, or a custom
                                      `typography.named` role; variant is one of
                                      regular, italic, bold, boldItalic (see
                                      `enums.fontVariant`; e.g. `heading.bold`).
                                      The shape is checked semantically at
                                      validate, not by this pattern: a
                                      misspelled variant, an undeclared role, a
                                      missing `.variant`, or a value that reads
                                      like a family name is rejected with a
                                      `didYouMean` pointing at the fix (use
                                      `set.family` for a typeface).
                                    type: string
                                  size:
                                    minimum: 1
                                    maximum: 999
                                    description: Font size in points
                                    type: number
                                  color:
                                    pattern: ^#([0-9a-fA-F]{3}|[0-9a-fA-F]{6})$
                                    description: Color as `#RGB` or `#RRGGBB`
                                    type: string
                                  opacity:
                                    minimum: 0
                                    maximum: 1
                                    description: Text opacity from 0 to 1
                                    type: number
                          - additionalProperties: false
                            type: object
                            required:
                              - kind
                            properties:
                              kind:
                                const: sectionTitle
                                type: string
                              depth:
                                description: Heading depth from 1 (top level) to 6
                                anyOf:
                                  - const: 1
                                    type: number
                                  - const: 2
                                    type: number
                                  - const: 3
                                    type: number
                                  - const: 4
                                    type: number
                                  - const: 5
                                    type: number
                                  - const: 6
                                    type: number
                              style:
                                additionalProperties: false
                                type: object
                                properties:
                                  font:
                                    pattern: ^\S(.*\S)?$
                                    description: >-
                                      Font slot as `<role>.<variant>` — role is
                                      `body`, `heading`, or a custom
                                      `typography.named` role; variant is one of
                                      regular, italic, bold, boldItalic (see
                                      `enums.fontVariant`; e.g. `heading.bold`).
                                      The shape is checked semantically at
                                      validate, not by this pattern: a
                                      misspelled variant, an undeclared role, a
                                      missing `.variant`, or a value that reads
                                      like a family name is rejected with a
                                      `didYouMean` pointing at the fix (use
                                      `set.family` for a typeface).
                                    type: string
                                  size:
                                    minimum: 1
                                    maximum: 999
                                    description: Font size in points
                                    type: number
                                  color:
                                    pattern: ^#([0-9a-fA-F]{3}|[0-9a-fA-F]{6})$
                                    description: Color as `#RGB` or `#RRGGBB`
                                    type: string
                                  opacity:
                                    minimum: 0
                                    maximum: 1
                                    description: Text opacity from 0 to 1
                                    type: number
                          - additionalProperties: false
                            type: object
                            required:
                              - kind
                            properties:
                              kind:
                                const: sectionIndex
                                type: string
                              depth:
                                description: Heading depth from 1 (top level) to 6
                                anyOf:
                                  - const: 1
                                    type: number
                                  - const: 2
                                    type: number
                                  - const: 3
                                    type: number
                                  - const: 4
                                    type: number
                                  - const: 5
                                    type: number
                                  - const: 6
                                    type: number
                              format:
                                description: >-
                                  Section ordinal format: `twoDigit` (at least
                                  two digits: 01, 12; ordinals ≥ 100 render in
                                  full) or `decimal` (1, 2, …)
                                anyOf:
                                  - const: twoDigit
                                    type: string
                                  - const: decimal
                                    type: string
                              style:
                                additionalProperties: false
                                type: object
                                properties:
                                  font:
                                    pattern: ^\S(.*\S)?$
                                    description: >-
                                      Font slot as `<role>.<variant>` — role is
                                      `body`, `heading`, or a custom
                                      `typography.named` role; variant is one of
                                      regular, italic, bold, boldItalic (see
                                      `enums.fontVariant`; e.g. `heading.bold`).
                                      The shape is checked semantically at
                                      validate, not by this pattern: a
                                      misspelled variant, an undeclared role, a
                                      missing `.variant`, or a value that reads
                                      like a family name is rejected with a
                                      `didYouMean` pointing at the fix (use
                                      `set.family` for a typeface).
                                    type: string
                                  size:
                                    minimum: 1
                                    maximum: 999
                                    description: Font size in points
                                    type: number
                                  color:
                                    pattern: ^#([0-9a-fA-F]{3}|[0-9a-fA-F]{6})$
                                    description: Color as `#RGB` or `#RRGGBB`
                                    type: string
                                  opacity:
                                    minimum: 0
                                    maximum: 1
                                    description: Text opacity from 0 to 1
                                    type: number
                    style:
                      additionalProperties: false
                      type: object
                      properties:
                        font:
                          pattern: ^\S(.*\S)?$
                          description: >-
                            Font slot as `<role>.<variant>` — role is `body`,
                            `heading`, or a custom `typography.named` role;
                            variant is one of regular, italic, bold, boldItalic
                            (see `enums.fontVariant`; e.g. `heading.bold`). The
                            shape is checked semantically at validate, not by
                            this pattern: a misspelled variant, an undeclared
                            role, a missing `.variant`, or a value that reads
                            like a family name is rejected with a `didYouMean`
                            pointing at the fix (use `set.family` for a
                            typeface).
                          type: string
                        family:
                          description: >-
                            A text family: a hosted weighted key, a declared
                            Google Fonts display name, or a `typography.named`
                            role reference
                          anyOf:
                            - const: inter
                              type: string
                            - const: lora
                              type: string
                            - const: source-serif-4
                              type: string
                            - pattern: ^[A-Za-z][A-Za-z0-9 ]{0,63}$
                              description: >-
                                Google Fonts display name from the declared pool
                                (e.g. `Playfair Display`)
                              type: string
                            - pattern: ^[a-z][a-z0-9-]{0,15}$
                              description: >-
                                Reference to a custom role declared in
                                `typography.named` (e.g. `display`)
                              type: string
                        size:
                          minimum: 1
                          maximum: 999
                          description: Font size in points
                          type: number
                        color:
                          pattern: ^#([0-9a-fA-F]{3}|[0-9a-fA-F]{6})$
                          description: Color as `#RGB` or `#RRGGBB`
                          type: string
                        spaceBefore:
                          minimum: 0
                          maximum: 9999
                          description: Vertical space reserved above the block, in points
                          type: number
                        spaceAfter:
                          minimum: 0
                          maximum: 9999
                          description: Vertical space reserved below the block, in points
                          type: number
                        lineHeight:
                          minimum: 1
                          maximum: 10
                          description: Line height as a multiple of the font size
                          type: number
                        align:
                          type: string
                          enum:
                            - left
                            - right
                            - center
                            - justify
                        letterSpacing:
                          minimum: -100
                          maximum: 100
                          description: >-
                            Extra spacing between characters in points; negative
                            values tighten
                          type: number
                        opacity:
                          minimum: 0
                          maximum: 1
                          description: Text opacity from 0 to 1
                          type: number
                        inline:
                          additionalProperties: false
                          type: object
                          properties:
                            strong:
                              additionalProperties: false
                              type: object
                              properties:
                                color:
                                  description: >-
                                    Color as `#RGB` or `#RRGGBB`, or `inherit`
                                    to use the inherited color
                                  anyOf:
                                    - pattern: ^#([0-9a-fA-F]{3}|[0-9a-fA-F]{6})$
                                      description: Color as `#RGB` or `#RRGGBB`
                                      type: string
                                    - const: inherit
                                      type: string
                            emphasis:
                              additionalProperties: false
                              type: object
                              properties:
                                color:
                                  description: >-
                                    Color as `#RGB` or `#RRGGBB`, or `inherit`
                                    to use the inherited color
                                  anyOf:
                                    - pattern: ^#([0-9a-fA-F]{3}|[0-9a-fA-F]{6})$
                                      description: Color as `#RGB` or `#RRGGBB`
                                      type: string
                                    - const: inherit
                                      type: string
                            delete:
                              additionalProperties: false
                              type: object
                              properties:
                                color:
                                  description: >-
                                    Color as `#RGB` or `#RRGGBB`, or `inherit`
                                    to use the inherited color
                                  anyOf:
                                    - pattern: ^#([0-9a-fA-F]{3}|[0-9a-fA-F]{6})$
                                      description: Color as `#RGB` or `#RRGGBB`
                                      type: string
                                    - const: inherit
                                      type: string
                                decorationStyle:
                                  type: string
                                  enum:
                                    - solid
                                    - double
                                    - dotted
                                    - dashed
                                    - wavy
                                decorationColor:
                                  description: >-
                                    Color as `#RGB` or `#RRGGBB`, or `inherit`
                                    to use the inherited color
                                  anyOf:
                                    - pattern: ^#([0-9a-fA-F]{3}|[0-9a-fA-F]{6})$
                                      description: Color as `#RGB` or `#RRGGBB`
                                      type: string
                                    - const: inherit
                                      type: string
                            mark:
                              additionalProperties: false
                              type: object
                              properties:
                                color:
                                  description: >-
                                    Color as `#RGB` or `#RRGGBB`, or `inherit`
                                    to use the inherited color
                                  anyOf:
                                    - pattern: ^#([0-9a-fA-F]{3}|[0-9a-fA-F]{6})$
                                      description: Color as `#RGB` or `#RRGGBB`
                                      type: string
                                    - const: inherit
                                      type: string
                                background:
                                  description: >-
                                    Background fill behind highlighted text as
                                    `#RGB`/`#RRGGBB`, or `null` to suppress
                                  anyOf:
                                    - pattern: ^#([0-9a-fA-F]{3}|[0-9a-fA-F]{6})$
                                      description: Color as `#RGB` or `#RRGGBB`
                                      type: string
                                    - type: 'null'
                                backgroundPadding:
                                  additionalProperties: false
                                  type: object
                                  properties:
                                    top:
                                      minimum: 0
                                      maximum: 9999
                                      description: Top padding, in points
                                      type: number
                                    right:
                                      minimum: 0
                                      maximum: 9999
                                      description: Right padding, in points
                                      type: number
                                    bottom:
                                      minimum: 0
                                      maximum: 9999
                                      description: Bottom padding, in points
                                      type: number
                                    left:
                                      minimum: 0
                                      maximum: 9999
                                      description: Left padding, in points
                                      type: number
                                    x:
                                      minimum: 0
                                      maximum: 9999
                                      description: >-
                                        Horizontal padding applied to both left
                                        and right when those sides are omitted,
                                        in points
                                      type: number
                                    'y':
                                      minimum: 0
                                      maximum: 9999
                                      description: >-
                                        Vertical padding applied to both top and
                                        bottom when those sides are omitted, in
                                        points
                                      type: number
                                backgroundRadius:
                                  minimum: 0
                                  maximum: 14400
                                  description: >-
                                    Corner radius for each highlight background
                                    segment, in points
                                  type: number
                            subscript:
                              additionalProperties: false
                              type: object
                              properties:
                                color:
                                  description: >-
                                    Color as `#RGB` or `#RRGGBB`, or `inherit`
                                    to use the inherited color
                                  anyOf:
                                    - pattern: ^#([0-9a-fA-F]{3}|[0-9a-fA-F]{6})$
                                      description: Color as `#RGB` or `#RRGGBB`
                                      type: string
                                    - const: inherit
                                      type: string
                                sizeScale:
                                  minimum: 0.4
                                  maximum: 1
                                  description: >-
                                    Optical scale relative to the surrounding
                                    run (fraction of base size)
                                  type: number
                                riseFraction:
                                  minimum: 0
                                  maximum: 1
                                  description: >-
                                    Baseline offset as a fraction of base size
                                    (not PDF points — contrast with code
                                    `baselineShift`). The renderer applies the
                                    sign (up for superscript, down for
                                    subscript)
                                  type: number
                            superscript:
                              additionalProperties: false
                              type: object
                              properties:
                                color:
                                  description: >-
                                    Color as `#RGB` or `#RRGGBB`, or `inherit`
                                    to use the inherited color
                                  anyOf:
                                    - pattern: ^#([0-9a-fA-F]{3}|[0-9a-fA-F]{6})$
                                      description: Color as `#RGB` or `#RRGGBB`
                                      type: string
                                    - const: inherit
                                      type: string
                                sizeScale:
                                  minimum: 0.4
                                  maximum: 1
                                  description: >-
                                    Optical scale relative to the surrounding
                                    run (fraction of base size)
                                  type: number
                                riseFraction:
                                  minimum: 0
                                  maximum: 1
                                  description: >-
                                    Baseline offset as a fraction of base size
                                    (not PDF points — contrast with code
                                    `baselineShift`). The renderer applies the
                                    sign (up for superscript, down for
                                    subscript)
                                  type: number
                            link:
                              additionalProperties: false
                              type: object
                              properties:
                                color:
                                  description: >-
                                    Color as `#RGB` or `#RRGGBB`, or `inherit`
                                    to use the inherited color
                                  anyOf:
                                    - pattern: ^#([0-9a-fA-F]{3}|[0-9a-fA-F]{6})$
                                      description: Color as `#RGB` or `#RRGGBB`
                                      type: string
                                    - const: inherit
                                      type: string
                                decoration:
                                  type: string
                                  enum:
                                    - underline
                                    - lineThrough
                                    - none
                                decorationStyle:
                                  type: string
                                  enum:
                                    - solid
                                    - double
                                    - dotted
                                    - dashed
                                    - wavy
                                decorationColor:
                                  description: >-
                                    Color as `#RGB` or `#RRGGBB`, or `inherit`
                                    to use the inherited color
                                  anyOf:
                                    - pattern: ^#([0-9a-fA-F]{3}|[0-9a-fA-F]{6})$
                                      description: Color as `#RGB` or `#RRGGBB`
                                      type: string
                                    - const: inherit
                                      type: string
                            code:
                              additionalProperties: false
                              description: >-
                                Style overrides for inline code spans (`` `code`
                                ``): font, optical size scale, text color,
                                background fill/padding/border/radius, baseline
                                shift, opacity, and letter spacing. Pass
                                `background: null` or `backgroundBorder: null`
                                to suppress those.
                              type: object
                              properties:
                                font:
                                  pattern: ^\S(.*\S)?$
                                  description: >-
                                    Font slot as `<role>.<variant>` — role is
                                    `body`, `heading`, or a custom
                                    `typography.named` role; variant is one of
                                    regular, italic, bold, boldItalic (see
                                    `enums.fontVariant`; e.g. `heading.bold`).
                                    The shape is checked semantically at
                                    validate, not by this pattern: a misspelled
                                    variant, an undeclared role, a missing
                                    `.variant`, or a value that reads like a
                                    family name is rejected with a `didYouMean`
                                    pointing at the fix (use `set.family` for a
                                    typeface).
                                  type: string
                                sizeScale:
                                  minimum: 0.85
                                  maximum: 0.88
                                  description: >-
                                    Optical scale relative to the surrounding
                                    run. Accepted range is the 0.85–0.88 band;
                                    out-of-range values are rejected
                                  type: number
                                color:
                                  description: >-
                                    Color as `#RGB` or `#RRGGBB`, or `inherit`
                                    to use the inherited color
                                  anyOf:
                                    - pattern: ^#([0-9a-fA-F]{3}|[0-9a-fA-F]{6})$
                                      description: Color as `#RGB` or `#RRGGBB`
                                      type: string
                                    - const: inherit
                                      type: string
                                background:
                                  description: >-
                                    Background fill behind the code run as
                                    `#RGB`/`#RRGGBB`, or `null` to suppress
                                  anyOf:
                                    - pattern: ^#([0-9a-fA-F]{3}|[0-9a-fA-F]{6})$
                                      description: Color as `#RGB` or `#RRGGBB`
                                      type: string
                                    - type: 'null'
                                backgroundPadding:
                                  additionalProperties: false
                                  type: object
                                  properties:
                                    top:
                                      minimum: 0
                                      maximum: 9999
                                      description: Top padding, in points
                                      type: number
                                    right:
                                      minimum: 0
                                      maximum: 9999
                                      description: Right padding, in points
                                      type: number
                                    bottom:
                                      minimum: 0
                                      maximum: 9999
                                      description: Bottom padding, in points
                                      type: number
                                    left:
                                      minimum: 0
                                      maximum: 9999
                                      description: Left padding, in points
                                      type: number
                                    x:
                                      minimum: 0
                                      maximum: 9999
                                      description: >-
                                        Horizontal padding applied to both left
                                        and right when those sides are omitted,
                                        in points
                                      type: number
                                    'y':
                                      minimum: 0
                                      maximum: 9999
                                      description: >-
                                        Vertical padding applied to both top and
                                        bottom when those sides are omitted, in
                                        points
                                      type: number
                                backgroundBorder:
                                  description: >-
                                    Micro-border around each cloned background
                                    segment, or `null` to suppress
                                  anyOf:
                                    - additionalProperties: false
                                      type: object
                                      required:
                                        - width
                                        - color
                                      properties:
                                        width:
                                          minimum: 0.1
                                          maximum: 50
                                          description: Border thickness in points
                                          type: number
                                        color:
                                          pattern: ^#([0-9a-fA-F]{3}|[0-9a-fA-F]{6})$
                                          description: Color as `#RGB` or `#RRGGBB`
                                          type: string
                                        opacity:
                                          minimum: 0
                                          maximum: 1
                                          description: Border opacity from 0 to 1
                                          type: number
                                        dash:
                                          description: >-
                                            Dash pattern as `[dash, gap]` lengths in
                                            points; both `0` is rejected
                                          type: array
                                          items:
                                            minimum: 0
                                            maximum: 1000
                                            type: number
                                          minItems: 2
                                          maxItems: 2
                                    - type: 'null'
                                backgroundRadius:
                                  minimum: 0
                                  maximum: 14400
                                  description: >-
                                    Corner radius for each background segment,
                                    in points
                                  type: number
                                baselineShift:
                                  minimum: -999
                                  maximum: 999
                                  description: >-
                                    PDF text-rise adjustment in points; positive
                                    values raise the code glyphs
                                  type: number
                                opacity:
                                  minimum: 0
                                  maximum: 1
                                  description: Fill opacity from 0 to 1
                                  type: number
                                letterSpacing:
                                  minimum: -100
                                  maximum: 100
                                  description: >-
                                    Extra spacing between code glyphs in points;
                                    negative values tighten
                                  type: number
            inset:
              additionalProperties: false
              type: object
              properties:
                top:
                  minimum: 0
                  maximum: 2880
                  description: Distance of the header from the top page edge, in points
                  type: number
                bottom:
                  minimum: 0
                  maximum: 2880
                  description: Distance of the footer from the bottom page edge, in points
                  type: number
            watermark:
              description: >-
                Decorative watermark behind body content: static `text` or
                per-page `sectionIndex` ordinal at a heading depth
              anyOf:
                - additionalProperties: false
                  type: object
                  required:
                    - text
                  properties:
                    text:
                      minLength: 1
                      maxLength: 256
                      pattern: \S
                      description: >-
                        Static watermark text drawn behind body content on every
                        page
                      type: string
                    color:
                      pattern: ^#([0-9a-fA-F]{3}|[0-9a-fA-F]{6})$
                      description: Color as `#RGB` or `#RRGGBB`
                      type: string
                    opacity:
                      minimum: 0
                      maximum: 1
                      description: Text opacity from 0 to 1
                      type: number
                    fontSize:
                      minimum: 1
                      maximum: 999
                      description: Font size in points
                      type: number
                    position:
                      description: >-
                        Anchor for decorative watermark text within the page
                        (behind body content)
                      anyOf:
                        - const: center
                          type: string
                        - const: top-left
                          type: string
                        - const: top-right
                          type: string
                        - const: bottom-left
                          type: string
                        - const: bottom-right
                          type: string
                - additionalProperties: false
                  type: object
                  required:
                    - sectionIndex
                  properties:
                    sectionIndex:
                      additionalProperties: false
                      type: object
                      properties:
                        depth:
                          description: Heading depth from 1 (top level) to 6
                          anyOf:
                            - const: 1
                              type: number
                            - const: 2
                              type: number
                            - const: 3
                              type: number
                            - const: 4
                              type: number
                            - const: 5
                              type: number
                            - const: 6
                              type: number
                        format:
                          description: >-
                            Section ordinal format for per-page watermark text
                            (`twoDigit` default: at least two digits; ordinals ≥
                            100 render in full)
                          anyOf:
                            - const: twoDigit
                              type: string
                            - const: decimal
                              type: string
                    color:
                      pattern: ^#([0-9a-fA-F]{3}|[0-9a-fA-F]{6})$
                      description: Color as `#RGB` or `#RRGGBB`
                      type: string
                    opacity:
                      minimum: 0
                      maximum: 1
                      description: Text opacity from 0 to 1
                      type: number
                    fontSize:
                      minimum: 1
                      maximum: 999
                      description: Font size in points
                      type: number
                    position:
                      description: >-
                        Anchor for decorative watermark text within the page
                        (behind body content)
                      anyOf:
                        - const: center
                          type: string
                        - const: top-left
                          type: string
                        - const: top-right
                          type: string
                        - const: bottom-left
                          type: string
                        - const: bottom-right
                          type: string
            decorations:
              maxItems: 8
              description: >-
                Non-text margin graphics composed alongside the six-slot grid
                (header/footer divider rules)
              type: array
              items:
                additionalProperties: false
                description: >-
                  Non-text furniture graphic. `rule` draws a horizontal hairline
                  in a header or footer band
                type: object
                required:
                  - kind
                  - band
                  - placement
                properties:
                  kind:
                    const: rule
                    type: string
                  band:
                    type: string
                    enum:
                      - header
                      - footer
                  placement:
                    description: >-
                      Rule placement relative to the band text block. `inner`
                      draws toward the body: below header text or above footer
                      text
                    const: inner
                    type: string
                  style:
                    additionalProperties: false
                    description: >-
                      Stroke overrides for a furniture rule decoration. Omitted
                      fields fall back to furniture rule defaults (0.5 pt
                      hairline, 6 pt offset)
                    type: object
                    properties:
                      color:
                        pattern: ^#([0-9a-fA-F]{3}|[0-9a-fA-F]{6})$
                        description: Color as `#RGB` or `#RRGGBB`
                        type: string
                      width:
                        minimum: 0.1
                        maximum: 50
                        description: Rule line thickness in points
                        type: number
                      opacity:
                        minimum: 0
                        maximum: 1
                        description: Rule opacity from 0 to 1
                        type: number
                      dash:
                        description: Dash pattern as `[dash, gap]` lengths in points
                        type: array
                        items:
                          minimum: 0
                          maximum: 1000
                          type: number
                        minItems: 2
                        maxItems: 2
                      inset:
                        minimum: 0
                        maximum: 14400
                        description: >-
                          Horizontal inset from each side of the content area,
                          in points
                        type: number
                      offset:
                        minimum: 0
                        maximum: 999
                        description: >-
                          Vertical gap between the band text and the rule, in
                          points
                        type: number
                      lineCap:
                        type: string
                        enum:
                          - butt
                          - round
                          - projecting
            pageOverrides:
              maxItems: 64
              description: >-
                Arbitrary per-page furniture exceptions keyed by page index,
                page number, or section-start events. Later matching entries win
                per field; cover/closing sugar applies afterward on pages 1 and
                the final page
              type: array
              items:
                additionalProperties: false
                description: >-
                  Per-page furniture exception. Later entries win per field when
                  multiple overrides match the same page. Cover/closing sugar
                  (`omitFirstPage`, `firstPage`, `omitLastPage`, `lastPage`)
                  applies after overrides on pages 1 and the final page
                type: object
                required:
                  - match
                properties:
                  match:
                    description: >-
                      Selects pages by zero-based index, one-based page number,
                      or section-start events at a heading depth
                    anyOf:
                      - additionalProperties: false
                        type: object
                        required:
                          - pageIndex
                        properties:
                          pageIndex:
                            minimum: 0
                            description: >-
                              Zero-based page index to match (same coordinate as
                              engine `pageIndex`)
                            anyOf:
                              - format: integer
                                default: '0'
                                type: string
                              - minimum: 0
                                description: >-
                                  Zero-based page index to match (same
                                  coordinate as engine `pageIndex`)
                                type: integer
                      - additionalProperties: false
                        type: object
                        required:
                          - pageNumber
                        properties:
                          pageNumber:
                            minimum: 1
                            description: >-
                              One-based page number to match (same coordinate as
                              engine `pageNumber`)
                            anyOf:
                              - format: integer
                                default: '0'
                                type: string
                              - minimum: 1
                                description: >-
                                  One-based page number to match (same
                                  coordinate as engine `pageNumber`)
                                type: integer
                      - additionalProperties: false
                        type: object
                        required:
                          - sectionStarts
                        properties:
                          sectionStarts:
                            additionalProperties: false
                            description: >-
                              Matches pages where a heading at the given depth
                              begins (optionally filtered by exact title text)
                            type: object
                            required:
                              - depth
                            properties:
                              depth:
                                description: Heading depth from 1 (top level) to 6
                                anyOf:
                                  - const: 1
                                    type: number
                                  - const: 2
                                    type: number
                                  - const: 3
                                    type: number
                                  - const: 4
                                    type: number
                                  - const: 5
                                    type: number
                                  - const: 6
                                    type: number
                              textEquals:
                                minLength: 1
                                maxLength: 512
                                description: >-
                                  When set, matches only when a heading at
                                  `depth` with this exact plaintext starts on
                                  the page
                                type: string
                  slots:
                    additionalProperties: false
                    description: >-
                      Content for each of the six header and footer positions
                      (top/bottom × left/center/right)
                    type: object
                    properties:
                      topLeft:
                        additionalProperties: false
                        type: object
                        required:
                          - content
                        properties:
                          content:
                            minItems: 1
                            maxItems: 16
                            description: Ordered fragments concatenated to fill the slot
                            type: array
                            items:
                              description: >-
                                A header/footer fragment: literal text, an image
                                (logo/letterhead), page numbers, document title,
                                running section title, or section ordinal at a
                                heading depth. An `image` fragment must be the
                                only fragment in its slot — it is not mixed with
                                text fragments.
                              anyOf:
                                - additionalProperties: false
                                  type: object
                                  required:
                                    - kind
                                    - value
                                  properties:
                                    kind:
                                      const: text
                                      type: string
                                    value:
                                      minLength: 1
                                      maxLength: 256
                                      pattern: \S
                                      description: Literal text for this fragment
                                      type: string
                                    style:
                                      additionalProperties: false
                                      type: object
                                      properties:
                                        font:
                                          pattern: ^\S(.*\S)?$
                                          description: >-
                                            Font slot as `<role>.<variant>` — role
                                            is `body`, `heading`, or a custom
                                            `typography.named` role; variant is one
                                            of regular, italic, bold, boldItalic
                                            (see `enums.fontVariant`; e.g.
                                            `heading.bold`). The shape is checked
                                            semantically at validate, not by this
                                            pattern: a misspelled variant, an
                                            undeclared role, a missing `.variant`,
                                            or a value that reads like a family name
                                            is rejected with a `didYouMean` pointing
                                            at the fix (use `set.family` for a
                                            typeface).
                                          type: string
                                        size:
                                          minimum: 1
                                          maximum: 999
                                          description: Font size in points
                                          type: number
                                        color:
                                          pattern: ^#([0-9a-fA-F]{3}|[0-9a-fA-F]{6})$
                                          description: Color as `#RGB` or `#RRGGBB`
                                          type: string
                                        opacity:
                                          minimum: 0
                                          maximum: 1
                                          description: Text opacity from 0 to 1
                                          type: number
                                - additionalProperties: false
                                  type: object
                                  required:
                                    - kind
                                    - url
                                  properties:
                                    kind:
                                      const: image
                                      type: string
                                    url:
                                      minLength: 1
                                      maxLength: 1048576
                                      pattern: ^(https://|data:image/)
                                      description: >-
                                        HTTPS or base64 `data:image/...` URL of
                                        the header/footer image (typically a
                                        brand logo or letterhead). Fetched under
                                        the same fixed, non-configurable image
                                        policy as Markdown images (private IPs
                                        blocked, DNS-rebinding mitigation, 10
                                        MiB cap); a fetch or decode failure
                                        degrades to a diagnostic and the image
                                        is omitted rather than failing the
                                        render. Rendered as a decorative PDF/UA
                                        pagination artifact (no alt text).
                                      type: string
                                    width:
                                      minimum: 1
                                      maximum: 14400
                                      description: >-
                                        Rendered image width in PDF points. When
                                        omitted, the intrinsic width is used,
                                        clamped to the slot band width. Set
                                        `width` or `height` to scale a logo
                                        down.
                                      type: number
                                    height:
                                      minimum: 1
                                      maximum: 14400
                                      description: >-
                                        Rendered image height in PDF points.
                                        When omitted, height follows the aspect
                                        ratio of the resolved width.
                                      type: number
                                    fit:
                                      description: >-
                                        Block-only. How the image fills its
                                        width/height box: `none` (intrinsic
                                        sizing), `contain`, `cover`, or `fill`.
                                        Used with `height` for hero-style
                                        layouts.
                                      anyOf:
                                        - const: none
                                          type: string
                                        - const: contain
                                          type: string
                                        - const: cover
                                          type: string
                                        - const: fill
                                          type: string
                                    align:
                                      description: >-
                                        Block-only. Horizontal alignment of the
                                        image within the content area: `start`
                                        (left edge in LTR), `center`, or `end`
                                        (right edge in LTR). Ignored for inline
                                        images (line flow controls position).
                                      anyOf:
                                        - const: start
                                          type: string
                                        - const: center
                                          type: string
                                        - const: end
                                          type: string
                                    opacity:
                                      minimum: 0
                                      maximum: 1
                                      description: Image opacity from 0 to 1.
                                      type: number
                                - additionalProperties: false
                                  type: object
                                  required:
                                    - kind
                                  properties:
                                    kind:
                                      const: pageNumber
                                      type: string
                                    style:
                                      additionalProperties: false
                                      type: object
                                      properties:
                                        font:
                                          pattern: ^\S(.*\S)?$
                                          description: >-
                                            Font slot as `<role>.<variant>` — role
                                            is `body`, `heading`, or a custom
                                            `typography.named` role; variant is one
                                            of regular, italic, bold, boldItalic
                                            (see `enums.fontVariant`; e.g.
                                            `heading.bold`). The shape is checked
                                            semantically at validate, not by this
                                            pattern: a misspelled variant, an
                                            undeclared role, a missing `.variant`,
                                            or a value that reads like a family name
                                            is rejected with a `didYouMean` pointing
                                            at the fix (use `set.family` for a
                                            typeface).
                                          type: string
                                        size:
                                          minimum: 1
                                          maximum: 999
                                          description: Font size in points
                                          type: number
                                        color:
                                          pattern: ^#([0-9a-fA-F]{3}|[0-9a-fA-F]{6})$
                                          description: Color as `#RGB` or `#RRGGBB`
                                          type: string
                                        opacity:
                                          minimum: 0
                                          maximum: 1
                                          description: Text opacity from 0 to 1
                                          type: number
                                - additionalProperties: false
                                  type: object
                                  required:
                                    - kind
                                  properties:
                                    kind:
                                      const: totalPages
                                      type: string
                                    style:
                                      additionalProperties: false
                                      type: object
                                      properties:
                                        font:
                                          pattern: ^\S(.*\S)?$
                                          description: >-
                                            Font slot as `<role>.<variant>` — role
                                            is `body`, `heading`, or a custom
                                            `typography.named` role; variant is one
                                            of regular, italic, bold, boldItalic
                                            (see `enums.fontVariant`; e.g.
                                            `heading.bold`). The shape is checked
                                            semantically at validate, not by this
                                            pattern: a misspelled variant, an
                                            undeclared role, a missing `.variant`,
                                            or a value that reads like a family name
                                            is rejected with a `didYouMean` pointing
                                            at the fix (use `set.family` for a
                                            typeface).
                                          type: string
                                        size:
                                          minimum: 1
                                          maximum: 999
                                          description: Font size in points
                                          type: number
                                        color:
                                          pattern: ^#([0-9a-fA-F]{3}|[0-9a-fA-F]{6})$
                                          description: Color as `#RGB` or `#RRGGBB`
                                          type: string
                                        opacity:
                                          minimum: 0
                                          maximum: 1
                                          description: Text opacity from 0 to 1
                                          type: number
                                - additionalProperties: false
                                  type: object
                                  required:
                                    - kind
                                  properties:
                                    kind:
                                      const: documentTitle
                                      type: string
                                    style:
                                      additionalProperties: false
                                      type: object
                                      properties:
                                        font:
                                          pattern: ^\S(.*\S)?$
                                          description: >-
                                            Font slot as `<role>.<variant>` — role
                                            is `body`, `heading`, or a custom
                                            `typography.named` role; variant is one
                                            of regular, italic, bold, boldItalic
                                            (see `enums.fontVariant`; e.g.
                                            `heading.bold`). The shape is checked
                                            semantically at validate, not by this
                                            pattern: a misspelled variant, an
                                            undeclared role, a missing `.variant`,
                                            or a value that reads like a family name
                                            is rejected with a `didYouMean` pointing
                                            at the fix (use `set.family` for a
                                            typeface).
                                          type: string
                                        size:
                                          minimum: 1
                                          maximum: 999
                                          description: Font size in points
                                          type: number
                                        color:
                                          pattern: ^#([0-9a-fA-F]{3}|[0-9a-fA-F]{6})$
                                          description: Color as `#RGB` or `#RRGGBB`
                                          type: string
                                        opacity:
                                          minimum: 0
                                          maximum: 1
                                          description: Text opacity from 0 to 1
                                          type: number
                                - additionalProperties: false
                                  type: object
                                  required:
                                    - kind
                                  properties:
                                    kind:
                                      const: sectionTitle
                                      type: string
                                    depth:
                                      description: Heading depth from 1 (top level) to 6
                                      anyOf:
                                        - const: 1
                                          type: number
                                        - const: 2
                                          type: number
                                        - const: 3
                                          type: number
                                        - const: 4
                                          type: number
                                        - const: 5
                                          type: number
                                        - const: 6
                                          type: number
                                    style:
                                      additionalProperties: false
                                      type: object
                                      properties:
                                        font:
                                          pattern: ^\S(.*\S)?$
                                          description: >-
                                            Font slot as `<role>.<variant>` — role
                                            is `body`, `heading`, or a custom
                                            `typography.named` role; variant is one
                                            of regular, italic, bold, boldItalic
                                            (see `enums.fontVariant`; e.g.
                                            `heading.bold`). The shape is checked
                                            semantically at validate, not by this
                                            pattern: a misspelled variant, an
                                            undeclared role, a missing `.variant`,
                                            or a value that reads like a family name
                                            is rejected with a `didYouMean` pointing
                                            at the fix (use `set.family` for a
                                            typeface).
                                          type: string
                                        size:
                                          minimum: 1
                                          maximum: 999
                                          description: Font size in points
                                          type: number
                                        color:
                                          pattern: ^#([0-9a-fA-F]{3}|[0-9a-fA-F]{6})$
                                          description: Color as `#RGB` or `#RRGGBB`
                                          type: string
                                        opacity:
                                          minimum: 0
                                          maximum: 1
                                          description: Text opacity from 0 to 1
                                          type: number
                                - additionalProperties: false
                                  type: object
                                  required:
                                    - kind
                                  properties:
                                    kind:
                                      const: sectionIndex
                                      type: string
                                    depth:
                                      description: Heading depth from 1 (top level) to 6
                                      anyOf:
                                        - const: 1
                                          type: number
                                        - const: 2
                                          type: number
                                        - const: 3
                                          type: number
                                        - const: 4
                                          type: number
                                        - const: 5
                                          type: number
                                        - const: 6
                                          type: number
                                    format:
                                      description: >-
                                        Section ordinal format: `twoDigit` (at
                                        least two digits: 01, 12; ordinals ≥ 100
                                        render in full) or `decimal` (1, 2, …)
                                      anyOf:
                                        - const: twoDigit
                                          type: string
                                        - const: decimal
                                          type: string
                                    style:
                                      additionalProperties: false
                                      type: object
                                      properties:
                                        font:
                                          pattern: ^\S(.*\S)?$
                                          description: >-
                                            Font slot as `<role>.<variant>` — role
                                            is `body`, `heading`, or a custom
                                            `typography.named` role; variant is one
                                            of regular, italic, bold, boldItalic
                                            (see `enums.fontVariant`; e.g.
                                            `heading.bold`). The shape is checked
                                            semantically at validate, not by this
                                            pattern: a misspelled variant, an
                                            undeclared role, a missing `.variant`,
                                            or a value that reads like a family name
                                            is rejected with a `didYouMean` pointing
                                            at the fix (use `set.family` for a
                                            typeface).
                                          type: string
                                        size:
                                          minimum: 1
                                          maximum: 999
                                          description: Font size in points
                                          type: number
                                        color:
                                          pattern: ^#([0-9a-fA-F]{3}|[0-9a-fA-F]{6})$
                                          description: Color as `#RGB` or `#RRGGBB`
                                          type: string
                                        opacity:
                                          minimum: 0
                                          maximum: 1
                                          description: Text opacity from 0 to 1
                                          type: number
                          style:
                            additionalProperties: false
                            type: object
                            properties:
                              font:
                                pattern: ^\S(.*\S)?$
                                description: >-
                                  Font slot as `<role>.<variant>` — role is
                                  `body`, `heading`, or a custom
                                  `typography.named` role; variant is one of
                                  regular, italic, bold, boldItalic (see
                                  `enums.fontVariant`; e.g. `heading.bold`). The
                                  shape is checked semantically at validate, not
                                  by this pattern: a misspelled variant, an
                                  undeclared role, a missing `.variant`, or a
                                  value that reads like a family name is
                                  rejected with a `didYouMean` pointing at the
                                  fix (use `set.family` for a typeface).
                                type: string
                              family:
                                description: >-
                                  A text family: a hosted weighted key, a
                                  declared Google Fonts display name, or a
                                  `typography.named` role reference
                                anyOf:
                                  - const: inter
                                    type: string
                                  - const: lora
                                    type: string
                                  - const: source-serif-4
                                    type: string
                                  - pattern: ^[A-Za-z][A-Za-z0-9 ]{0,63}$
                                    description: >-
                                      Google Fonts display name from the
                                      declared pool (e.g. `Playfair Display`)
                                    type: string
                                  - pattern: ^[a-z][a-z0-9-]{0,15}$
                                    description: >-
                                      Reference to a custom role declared in
                                      `typography.named` (e.g. `display`)
                                    type: string
                              size:
                                minimum: 1
                                maximum: 999
                                description: Font size in points
                                type: number
                              color:
                                pattern: ^#([0-9a-fA-F]{3}|[0-9a-fA-F]{6})$
                                description: Color as `#RGB` or `#RRGGBB`
                                type: string
                              spaceBefore:
                                minimum: 0
                                maximum: 9999
                                description: >-
                                  Vertical space reserved above the block, in
                                  points
                                type: number
                              spaceAfter:
                                minimum: 0
                                maximum: 9999
                                description: >-
                                  Vertical space reserved below the block, in
                                  points
                                type: number
                              lineHeight:
                                minimum: 1
                                maximum: 10
                                description: Line height as a multiple of the font size
                                type: number
                              align:
                                type: string
                                enum:
                                  - left
                                  - right
                                  - center
                                  - justify
                              letterSpacing:
                                minimum: -100
                                maximum: 100
                                description: >-
                                  Extra spacing between characters in points;
                                  negative values tighten
                                type: number
                              opacity:
                                minimum: 0
                                maximum: 1
                                description: Text opacity from 0 to 1
                                type: number
                              inline:
                                additionalProperties: false
                                type: object
                                properties:
                                  strong:
                                    additionalProperties: false
                                    type: object
                                    properties:
                                      color:
                                        description: >-
                                          Color as `#RGB` or `#RRGGBB`, or
                                          `inherit` to use the inherited color
                                        anyOf:
                                          - pattern: ^#([0-9a-fA-F]{3}|[0-9a-fA-F]{6})$
                                            description: Color as `#RGB` or `#RRGGBB`
                                            type: string
                                          - const: inherit
                                            type: string
                                  emphasis:
                                    additionalProperties: false
                                    type: object
                                    properties:
                                      color:
                                        description: >-
                                          Color as `#RGB` or `#RRGGBB`, or
                                          `inherit` to use the inherited color
                                        anyOf:
                                          - pattern: ^#([0-9a-fA-F]{3}|[0-9a-fA-F]{6})$
                                            description: Color as `#RGB` or `#RRGGBB`
                                            type: string
                                          - const: inherit
                                            type: string
                                  delete:
                                    additionalProperties: false
                                    type: object
                                    properties:
                                      color:
                                        description: >-
                                          Color as `#RGB` or `#RRGGBB`, or
                                          `inherit` to use the inherited color
                                        anyOf:
                                          - pattern: ^#([0-9a-fA-F]{3}|[0-9a-fA-F]{6})$
                                            description: Color as `#RGB` or `#RRGGBB`
                                            type: string
                                          - const: inherit
                                            type: string
                                      decorationStyle:
                                        type: string
                                        enum:
                                          - solid
                                          - double
                                          - dotted
                                          - dashed
                                          - wavy
                                      decorationColor:
                                        description: >-
                                          Color as `#RGB` or `#RRGGBB`, or
                                          `inherit` to use the inherited color
                                        anyOf:
                                          - pattern: ^#([0-9a-fA-F]{3}|[0-9a-fA-F]{6})$
                                            description: Color as `#RGB` or `#RRGGBB`
                                            type: string
                                          - const: inherit
                                            type: string
                                  mark:
                                    additionalProperties: false
                                    type: object
                                    properties:
                                      color:
                                        description: >-
                                          Color as `#RGB` or `#RRGGBB`, or
                                          `inherit` to use the inherited color
                                        anyOf:
                                          - pattern: ^#([0-9a-fA-F]{3}|[0-9a-fA-F]{6})$
                                            description: Color as `#RGB` or `#RRGGBB`
                                            type: string
                                          - const: inherit
                                            type: string
                                      background:
                                        description: >-
                                          Background fill behind highlighted text
                                          as `#RGB`/`#RRGGBB`, or `null` to
                                          suppress
                                        anyOf:
                                          - pattern: ^#([0-9a-fA-F]{3}|[0-9a-fA-F]{6})$
                                            description: Color as `#RGB` or `#RRGGBB`
                                            type: string
                                          - type: 'null'
                                      backgroundPadding:
                                        additionalProperties: false
                                        type: object
                                        properties:
                                          top:
                                            minimum: 0
                                            maximum: 9999
                                            description: Top padding, in points
                                            type: number
                                          right:
                                            minimum: 0
                                            maximum: 9999
                                            description: Right padding, in points
                                            type: number
                                          bottom:
                                            minimum: 0
                                            maximum: 9999
                                            description: Bottom padding, in points
                                            type: number
                                          left:
                                            minimum: 0
                                            maximum: 9999
                                            description: Left padding, in points
                                            type: number
                                          x:
                                            minimum: 0
                                            maximum: 9999
                                            description: >-
                                              Horizontal padding applied to both left
                                              and right when those sides are omitted,
                                              in points
                                            type: number
                                          'y':
                                            minimum: 0
                                            maximum: 9999
                                            description: >-
                                              Vertical padding applied to both top and
                                              bottom when those sides are omitted, in
                                              points
                                            type: number
                                      backgroundRadius:
                                        minimum: 0
                                        maximum: 14400
                                        description: >-
                                          Corner radius for each highlight
                                          background segment, in points
                                        type: number
                                  subscript:
                                    additionalProperties: false
                                    type: object
                                    properties:
                                      color:
                                        description: >-
                                          Color as `#RGB` or `#RRGGBB`, or
                                          `inherit` to use the inherited color
                                        anyOf:
                                          - pattern: ^#([0-9a-fA-F]{3}|[0-9a-fA-F]{6})$
                                            description: Color as `#RGB` or `#RRGGBB`
                                            type: string
                                          - const: inherit
                                            type: string
                                      sizeScale:
                                        minimum: 0.4
                                        maximum: 1
                                        description: >-
                                          Optical scale relative to the
                                          surrounding run (fraction of base size)
                                        type: number
                                      riseFraction:
                                        minimum: 0
                                        maximum: 1
                                        description: >-
                                          Baseline offset as a fraction of base
                                          size (not PDF points — contrast with
                                          code `baselineShift`). The renderer
                                          applies the sign (up for superscript,
                                          down for subscript)
                                        type: number
                                  superscript:
                                    additionalProperties: false
                                    type: object
                                    properties:
                                      color:
                                        description: >-
                                          Color as `#RGB` or `#RRGGBB`, or
                                          `inherit` to use the inherited color
                                        anyOf:
                                          - pattern: ^#([0-9a-fA-F]{3}|[0-9a-fA-F]{6})$
                                            description: Color as `#RGB` or `#RRGGBB`
                                            type: string
                                          - const: inherit
                                            type: string
                                      sizeScale:
                                        minimum: 0.4
                                        maximum: 1
                                        description: >-
                                          Optical scale relative to the
                                          surrounding run (fraction of base size)
                                        type: number
                                      riseFraction:
                                        minimum: 0
                                        maximum: 1
                                        description: >-
                                          Baseline offset as a fraction of base
                                          size (not PDF points — contrast with
                                          code `baselineShift`). The renderer
                                          applies the sign (up for superscript,
                                          down for subscript)
                                        type: number
                                  link:
                                    additionalProperties: false
                                    type: object
                                    properties:
                                      color:
                                        description: >-
                                          Color as `#RGB` or `#RRGGBB`, or
                                          `inherit` to use the inherited color
                                        anyOf:
                                          - pattern: ^#([0-9a-fA-F]{3}|[0-9a-fA-F]{6})$
                                            description: Color as `#RGB` or `#RRGGBB`
                                            type: string
                                          - const: inherit
                                            type: string
                                      decoration:
                                        type: string
                                        enum:
                                          - underline
                                          - lineThrough
                                          - none
                                      decorationStyle:
                                        type: string
                                        enum:
                                          - solid
                                          - double
                                          - dotted
                                          - dashed
                                          - wavy
                                      decorationColor:
                                        description: >-
                                          Color as `#RGB` or `#RRGGBB`, or
                                          `inherit` to use the inherited color
                                        anyOf:
                                          - pattern: ^#([0-9a-fA-F]{3}|[0-9a-fA-F]{6})$
                                            description: Color as `#RGB` or `#RRGGBB`
                                            type: string
                                          - const: inherit
                                            type: string
                                  code:
                                    additionalProperties: false
                                    description: >-
                                      Style overrides for inline code spans (``
                                      `code` ``): font, optical size scale, text
                                      color, background
                                      fill/padding/border/radius, baseline
                                      shift, opacity, and letter spacing. Pass
                                      `background: null` or `backgroundBorder:
                                      null` to suppress those.
                                    type: object
                                    properties:
                                      font:
                                        pattern: ^\S(.*\S)?$
                                        description: >-
                                          Font slot as `<role>.<variant>` — role
                                          is `body`, `heading`, or a custom
                                          `typography.named` role; variant is one
                                          of regular, italic, bold, boldItalic
                                          (see `enums.fontVariant`; e.g.
                                          `heading.bold`). The shape is checked
                                          semantically at validate, not by this
                                          pattern: a misspelled variant, an
                                          undeclared role, a missing `.variant`,
                                          or a value that reads like a family name
                                          is rejected with a `didYouMean` pointing
                                          at the fix (use `set.family` for a
                                          typeface).
                                        type: string
                                      sizeScale:
                                        minimum: 0.85
                                        maximum: 0.88
                                        description: >-
                                          Optical scale relative to the
                                          surrounding run. Accepted range is the
                                          0.85–0.88 band; out-of-range values are
                                          rejected
                                        type: number
                                      color:
                                        description: >-
                                          Color as `#RGB` or `#RRGGBB`, or
                                          `inherit` to use the inherited color
                                        anyOf:
                                          - pattern: ^#([0-9a-fA-F]{3}|[0-9a-fA-F]{6})$
                                            description: Color as `#RGB` or `#RRGGBB`
                                            type: string
                                          - const: inherit
                                            type: string
                                      background:
                                        description: >-
                                          Background fill behind the code run as
                                          `#RGB`/`#RRGGBB`, or `null` to suppress
                                        anyOf:
                                          - pattern: ^#([0-9a-fA-F]{3}|[0-9a-fA-F]{6})$
                                            description: Color as `#RGB` or `#RRGGBB`
                                            type: string
                                          - type: 'null'
                                      backgroundPadding:
                                        additionalProperties: false
                                        type: object
                                        properties:
                                          top:
                                            minimum: 0
                                            maximum: 9999
                                            description: Top padding, in points
                                            type: number
                                          right:
                                            minimum: 0
                                            maximum: 9999
                                            description: Right padding, in points
                                            type: number
                                          bottom:
                                            minimum: 0
                                            maximum: 9999
                                            description: Bottom padding, in points
                                            type: number
                                          left:
                                            minimum: 0
                                            maximum: 9999
                                            description: Left padding, in points
                                            type: number
                                          x:
                                            minimum: 0
                                            maximum: 9999
                                            description: >-
                                              Horizontal padding applied to both left
                                              and right when those sides are omitted,
                                              in points
                                            type: number
                                          'y':
                                            minimum: 0
                                            maximum: 9999
                                            description: >-
                                              Vertical padding applied to both top and
                                              bottom when those sides are omitted, in
                                              points
                                            type: number
                                      backgroundBorder:
                                        description: >-
                                          Micro-border around each cloned
                                          background segment, or `null` to
                                          suppress
                                        anyOf:
                                          - additionalProperties: false
                                            type: object
                                            required:
                                              - width
                                              - color
                                            properties:
                                              width:
                                                minimum: 0.1
                                                maximum: 50
                                                description: Border thickness in points
                                                type: number
                                              color:
                                                pattern: ^#([0-9a-fA-F]{3}|[0-9a-fA-F]{6})$
                                                description: Color as `#RGB` or `#RRGGBB`
                                                type: string
                                              opacity:
                                                minimum: 0
                                                maximum: 1
                                                description: Border opacity from 0 to 1
                                                type: number
                                              dash:
                                                description: >-
                                                  Dash pattern as `[dash, gap]` lengths in
                                                  points; both `0` is rejected
                                                type: array
                                                items:
                                                  minimum: 0
                                                  maximum: 1000
                                                  type: number
                                                minItems: 2
                                                maxItems: 2
                                          - type: 'null'
                                      backgroundRadius:
                                        minimum: 0
                                        maximum: 14400
                                        description: >-
                                          Corner radius for each background
                                          segment, in points
                                        type: number
                                      baselineShift:
                                        minimum: -999
                                        maximum: 999
                                        description: >-
                                          PDF text-rise adjustment in points;
                                          positive values raise the code glyphs
                                        type: number
                                      opacity:
                                        minimum: 0
                                        maximum: 1
                                        description: Fill opacity from 0 to 1
                                        type: number
                                      letterSpacing:
                                        minimum: -100
                                        maximum: 100
                                        description: >-
                                          Extra spacing between code glyphs in
                                          points; negative values tighten
                                        type: number
                      topCenter:
                        additionalProperties: false
                        type: object
                        required:
                          - content
                        properties:
                          content:
                            minItems: 1
                            maxItems: 16
                            description: Ordered fragments concatenated to fill the slot
                            type: array
                            items:
                              description: >-
                                A header/footer fragment: literal text, an image
                                (logo/letterhead), page numbers, document title,
                                running section title, or section ordinal at a
                                heading depth. An `image` fragment must be the
                                only fragment in its slot — it is not mixed with
                                text fragments.
                              anyOf:
                                - additionalProperties: false
                                  type: object
                                  required:
                                    - kind
                                    - value
                                  properties:
                                    kind:
                                      const: text
                                      type: string
                                    value:
                                      minLength: 1
                                      maxLength: 256
                                      pattern: \S
                                      description: Literal text for this fragment
                                      type: string
                                    style:
                                      additionalProperties: false
                                      type: object
                                      properties:
                                        font:
                                          pattern: ^\S(.*\S)?$
                                          description: >-
                                            Font slot as `<role>.<variant>` — role
                                            is `body`, `heading`, or a custom
                                            `typography.named` role; variant is one
                                            of regular, italic, bold, boldItalic
                                            (see `enums.fontVariant`; e.g.
                                            `heading.bold`). The shape is checked
                                            semantically at validate, not by this
                                            pattern: a misspelled variant, an
                                            undeclared role, a missing `.variant`,
                                            or a value that reads like a family name
                                            is rejected with a `didYouMean` pointing
                                            at the fix (use `set.family` for a
                                            typeface).
                                          type: string
                                        size:
                                          minimum: 1
                                          maximum: 999
                                          description: Font size in points
                                          type: number
                                        color:
                                          pattern: ^#([0-9a-fA-F]{3}|[0-9a-fA-F]{6})$
                                          description: Color as `#RGB` or `#RRGGBB`
                                          type: string
                                        opacity:
                                          minimum: 0
                                          maximum: 1
                                          description: Text opacity from 0 to 1
                                          type: number
                                - additionalProperties: false
                                  type: object
                                  required:
                                    - kind
                                    - url
                                  properties:
                                    kind:
                                      const: image
                                      type: string
                                    url:
                                      minLength: 1
                                      maxLength: 1048576
                                      pattern: ^(https://|data:image/)
                                      description: >-
                                        HTTPS or base64 `data:image/...` URL of
                                        the header/footer image (typically a
                                        brand logo or letterhead). Fetched under
                                        the same fixed, non-configurable image
                                        policy as Markdown images (private IPs
                                        blocked, DNS-rebinding mitigation, 10
                                        MiB cap); a fetch or decode failure
                                        degrades to a diagnostic and the image
                                        is omitted rather than failing the
                                        render. Rendered as a decorative PDF/UA
                                        pagination artifact (no alt text).
                                      type: string
                                    width:
                                      minimum: 1
                                      maximum: 14400
                                      description: >-
                                        Rendered image width in PDF points. When
                                        omitted, the intrinsic width is used,
                                        clamped to the slot band width. Set
                                        `width` or `height` to scale a logo
                                        down.
                                      type: number
                                    height:
                                      minimum: 1
                                      maximum: 14400
                                      description: >-
                                        Rendered image height in PDF points.
                                        When omitted, height follows the aspect
                                        ratio of the resolved width.
                                      type: number
                                    fit:
                                      description: >-
                                        Block-only. How the image fills its
                                        width/height box: `none` (intrinsic
                                        sizing), `contain`, `cover`, or `fill`.
                                        Used with `height` for hero-style
                                        layouts.
                                      anyOf:
                                        - const: none
                                          type: string
                                        - const: contain
                                          type: string
                                        - const: cover
                                          type: string
                                        - const: fill
                                          type: string
                                    align:
                                      description: >-
                                        Block-only. Horizontal alignment of the
                                        image within the content area: `start`
                                        (left edge in LTR), `center`, or `end`
                                        (right edge in LTR). Ignored for inline
                                        images (line flow controls position).
                                      anyOf:
                                        - const: start
                                          type: string
                                        - const: center
                                          type: string
                                        - const: end
                                          type: string
                                    opacity:
                                      minimum: 0
                                      maximum: 1
                                      description: Image opacity from 0 to 1.
                                      type: number
                                - additionalProperties: false
                                  type: object
                                  required:
                                    - kind
                                  properties:
                                    kind:
                                      const: pageNumber
                                      type: string
                                    style:
                                      additionalProperties: false
                                      type: object
                                      properties:
                                        font:
                                          pattern: ^\S(.*\S)?$
                                          description: >-
                                            Font slot as `<role>.<variant>` — role
                                            is `body`, `heading`, or a custom
                                            `typography.named` role; variant is one
                                            of regular, italic, bold, boldItalic
                                            (see `enums.fontVariant`; e.g.
                                            `heading.bold`). The shape is checked
                                            semantically at validate, not by this
                                            pattern: a misspelled variant, an
                                            undeclared role, a missing `.variant`,
                                            or a value that reads like a family name
                                            is rejected with a `didYouMean` pointing
                                            at the fix (use `set.family` for a
                                            typeface).
                                          type: string
                                        size:
                                          minimum: 1
                                          maximum: 999
                                          description: Font size in points
                                          type: number
                                        color:
                                          pattern: ^#([0-9a-fA-F]{3}|[0-9a-fA-F]{6})$
                                          description: Color as `#RGB` or `#RRGGBB`
                                          type: string
                                        opacity:
                                          minimum: 0
                                          maximum: 1
                                          description: Text opacity from 0 to 1
                                          type: number
                                - additionalProperties: false
                                  type: object
                                  required:
                                    - kind
                                  properties:
                                    kind:
                                      const: totalPages
                                      type: string
                                    style:
                                      additionalProperties: false
                                      type: object
                                      properties:
                                        font:
                                          pattern: ^\S(.*\S)?$
                                          description: >-
                                            Font slot as `<role>.<variant>` — role
                                            is `body`, `heading`, or a custom
                                            `typography.named` role; variant is one
                                            of regular, italic, bold, boldItalic
                                            (see `enums.fontVariant`; e.g.
                                            `heading.bold`). The shape is checked
                                            semantically at validate, not by this
                                            pattern: a misspelled variant, an
                                            undeclared role, a missing `.variant`,
                                            or a value that reads like a family name
                                            is rejected with a `didYouMean` pointing
                                            at the fix (use `set.family` for a
                                            typeface).
                                          type: string
                                        size:
                                          minimum: 1
                                          maximum: 999
                                          description: Font size in points
                                          type: number
                                        color:
                                          pattern: ^#([0-9a-fA-F]{3}|[0-9a-fA-F]{6})$
                                          description: Color as `#RGB` or `#RRGGBB`
                                          type: string
                                        opacity:
                                          minimum: 0
                                          maximum: 1
                                          description: Text opacity from 0 to 1
                                          type: number
                                - additionalProperties: false
                                  type: object
                                  required:
                                    - kind
                                  properties:
                                    kind:
                                      const: documentTitle
                                      type: string
                                    style:
                                      additionalProperties: false
                                      type: object
                                      properties:
                                        font:
                                          pattern: ^\S(.*\S)?$
                                          description: >-
                                            Font slot as `<role>.<variant>` — role
                                            is `body`, `heading`, or a custom
                                            `typography.named` role; variant is one
                                            of regular, italic, bold, boldItalic
                                            (see `enums.fontVariant`; e.g.
                                            `heading.bold`). The shape is checked
                                            semantically at validate, not by this
                                            pattern: a misspelled variant, an
                                            undeclared role, a missing `.variant`,
                                            or a value that reads like a family name
                                            is rejected with a `didYouMean` pointing
                                            at the fix (use `set.family` for a
                                            typeface).
                                          type: string
                                        size:
                                          minimum: 1
                                          maximum: 999
                                          description: Font size in points
                                          type: number
                                        color:
                                          pattern: ^#([0-9a-fA-F]{3}|[0-9a-fA-F]{6})$
                                          description: Color as `#RGB` or `#RRGGBB`
                                          type: string
                                        opacity:
                                          minimum: 0
                                          maximum: 1
                                          description: Text opacity from 0 to 1
                                          type: number
                                - additionalProperties: false
                                  type: object
                                  required:
                                    - kind
                                  properties:
                                    kind:
                                      const: sectionTitle
                                      type: string
                                    depth:
                                      description: Heading depth from 1 (top level) to 6
                                      anyOf:
                                        - const: 1
                                          type: number
                                        - const: 2
                                          type: number
                                        - const: 3
                                          type: number
                                        - const: 4
                                          type: number
                                        - const: 5
                                          type: number
                                        - const: 6
                                          type: number
                                    style:
                                      additionalProperties: false
                                      type: object
                                      properties:
                                        font:
                                          pattern: ^\S(.*\S)?$
                                          description: >-
                                            Font slot as `<role>.<variant>` — role
                                            is `body`, `heading`, or a custom
                                            `typography.named` role; variant is one
                                            of regular, italic, bold, boldItalic
                                            (see `enums.fontVariant`; e.g.
                                            `heading.bold`). The shape is checked
                                            semantically at validate, not by this
                                            pattern: a misspelled variant, an
                                            undeclared role, a missing `.variant`,
                                            or a value that reads like a family name
                                            is rejected with a `didYouMean` pointing
                                            at the fix (use `set.family` for a
                                            typeface).
                                          type: string
                                        size:
                                          minimum: 1
                                          maximum: 999
                                          description: Font size in points
                                          type: number
                                        color:
                                          pattern: ^#([0-9a-fA-F]{3}|[0-9a-fA-F]{6})$
                                          description: Color as `#RGB` or `#RRGGBB`
                                          type: string
                                        opacity:
                                          minimum: 0
                                          maximum: 1
                                          description: Text opacity from 0 to 1
                                          type: number
                                - additionalProperties: false
                                  type: object
                                  required:
                                    - kind
                                  properties:
                                    kind:
                                      const: sectionIndex
                                      type: string
                                    depth:
                                      description: Heading depth from 1 (top level) to 6
                                      anyOf:
                                        - const: 1
                                          type: number
                                        - const: 2
                                          type: number
                                        - const: 3
                                          type: number
                                        - const: 4
                                          type: number
                                        - const: 5
                                          type: number
                                        - const: 6
                                          type: number
                                    format:
                                      description: >-
                                        Section ordinal format: `twoDigit` (at
                                        least two digits: 01, 12; ordinals ≥ 100
                                        render in full) or `decimal` (1, 2, …)
                                      anyOf:
                                        - const: twoDigit
                                          type: string
                                        - const: decimal
                                          type: string
                                    style:
                                      additionalProperties: false
                                      type: object
                                      properties:
                                        font:
                                          pattern: ^\S(.*\S)?$
                                          description: >-
                                            Font slot as `<role>.<variant>` — role
                                            is `body`, `heading`, or a custom
                                            `typography.named` role; variant is one
                                            of regular, italic, bold, boldItalic
                                            (see `enums.fontVariant`; e.g.
                                            `heading.bold`). The shape is checked
                                            semantically at validate, not by this
                                            pattern: a misspelled variant, an
                                            undeclared role, a missing `.variant`,
                                            or a value that reads like a family name
                                            is rejected with a `didYouMean` pointing
                                            at the fix (use `set.family` for a
                                            typeface).
                                          type: string
                                        size:
                                          minimum: 1
                                          maximum: 999
                                          description: Font size in points
                                          type: number
                                        color:
                                          pattern: ^#([0-9a-fA-F]{3}|[0-9a-fA-F]{6})$
                                          description: Color as `#RGB` or `#RRGGBB`
                                          type: string
                                        opacity:
                                          minimum: 0
                                          maximum: 1
                                          description: Text opacity from 0 to 1
                                          type: number
                          style:
                            additionalProperties: false
                            type: object
                            properties:
                              font:
                                pattern: ^\S(.*\S)?$
                                description: >-
                                  Font slot as `<role>.<variant>` — role is
                                  `body`, `heading`, or a custom
                                  `typography.named` role; variant is one of
                                  regular, italic, bold, boldItalic (see
                                  `enums.fontVariant`; e.g. `heading.bold`). The
                                  shape is checked semantically at validate, not
                                  by this pattern: a misspelled variant, an
                                  undeclared role, a missing `.variant`, or a
                                  value that reads like a family name is
                                  rejected with a `didYouMean` pointing at the
                                  fix (use `set.family` for a typeface).
                                type: string
                              family:
                                description: >-
                                  A text family: a hosted weighted key, a
                                  declared Google Fonts display name, or a
                                  `typography.named` role reference
                                anyOf:
                                  - const: inter
                                    type: string
                                  - const: lora
                                    type: string
                                  - const: source-serif-4
                                    type: string
                                  - pattern: ^[A-Za-z][A-Za-z0-9 ]{0,63}$
                                    description: >-
                                      Google Fonts display name from the
                                      declared pool (e.g. `Playfair Display`)
                                    type: string
                                  - pattern: ^[a-z][a-z0-9-]{0,15}$
                                    description: >-
                                      Reference to a custom role declared in
                                      `typography.named` (e.g. `display`)
                                    type: string
                              size:
                                minimum: 1
                                maximum: 999
                                description: Font size in points
                                type: number
                              color:
                                pattern: ^#([0-9a-fA-F]{3}|[0-9a-fA-F]{6})$
                                description: Color as `#RGB` or `#RRGGBB`
                                type: string
                              spaceBefore:
                                minimum: 0
                                maximum: 9999
                                description: >-
                                  Vertical space reserved above the block, in
                                  points
                                type: number
                              spaceAfter:
                                minimum: 0
                                maximum: 9999
                                description: >-
                                  Vertical space reserved below the block, in
                                  points
                                type: number
                              lineHeight:
                                minimum: 1
                                maximum: 10
                                description: Line height as a multiple of the font size
                                type: number
                              align:
                                type: string
                                enum:
                                  - left
                                  - right
                                  - center
                                  - justify
                              letterSpacing:
                                minimum: -100
                                maximum: 100
                                description: >-
                                  Extra spacing between characters in points;
                                  negative values tighten
                                type: number
                              opacity:
                                minimum: 0
                                maximum: 1
                                description: Text opacity from 0 to 1
                                type: number
                              inline:
                                additionalProperties: false
                                type: object
                                properties:
                                  strong:
                                    additionalProperties: false
                                    type: object
                                    properties:
                                      color:
                                        description: >-
                                          Color as `#RGB` or `#RRGGBB`, or
                                          `inherit` to use the inherited color
                                        anyOf:
                                          - pattern: ^#([0-9a-fA-F]{3}|[0-9a-fA-F]{6})$
                                            description: Color as `#RGB` or `#RRGGBB`
                                            type: string
                                          - const: inherit
                                            type: string
                                  emphasis:
                                    additionalProperties: false
                                    type: object
                                    properties:
                                      color:
                                        description: >-
                                          Color as `#RGB` or `#RRGGBB`, or
                                          `inherit` to use the inherited color
                                        anyOf:
                                          - pattern: ^#([0-9a-fA-F]{3}|[0-9a-fA-F]{6})$
                                            description: Color as `#RGB` or `#RRGGBB`
                                            type: string
                                          - const: inherit
                                            type: string
                                  delete:
                                    additionalProperties: false
                                    type: object
                                    properties:
                                      color:
                                        description: >-
                                          Color as `#RGB` or `#RRGGBB`, or
                                          `inherit` to use the inherited color
                                        anyOf:
                                          - pattern: ^#([0-9a-fA-F]{3}|[0-9a-fA-F]{6})$
                                            description: Color as `#RGB` or `#RRGGBB`
                                            type: string
                                          - const: inherit
                                            type: string
                                      decorationStyle:
                                        type: string
                                        enum:
                                          - solid
                                          - double
                                          - dotted
                                          - dashed
                                          - wavy
                                      decorationColor:
                                        description: >-
                                          Color as `#RGB` or `#RRGGBB`, or
                                          `inherit` to use the inherited color
                                        anyOf:
                                          - pattern: ^#([0-9a-fA-F]{3}|[0-9a-fA-F]{6})$
                                            description: Color as `#RGB` or `#RRGGBB`
                                            type: string
                                          - const: inherit
                                            type: string
                                  mark:
                                    additionalProperties: false
                                    type: object
                                    properties:
                                      color:
                                        description: >-
                                          Color as `#RGB` or `#RRGGBB`, or
                                          `inherit` to use the inherited color
                                        anyOf:
                                          - pattern: ^#([0-9a-fA-F]{3}|[0-9a-fA-F]{6})$
                                            description: Color as `#RGB` or `#RRGGBB`
                                            type: string
                                          - const: inherit
                                            type: string
                                      background:
                                        description: >-
                                          Background fill behind highlighted text
                                          as `#RGB`/`#RRGGBB`, or `null` to
                                          suppress
                                        anyOf:
                                          - pattern: ^#([0-9a-fA-F]{3}|[0-9a-fA-F]{6})$
                                            description: Color as `#RGB` or `#RRGGBB`
                                            type: string
                                          - type: 'null'
                                      backgroundPadding:
                                        additionalProperties: false
                                        type: object
                                        properties:
                                          top:
                                            minimum: 0
                                            maximum: 9999
                                            description: Top padding, in points
                                            type: number
                                          right:
                                            minimum: 0
                                            maximum: 9999
                                            description: Right padding, in points
                                            type: number
                                          bottom:
                                            minimum: 0
                                            maximum: 9999
                                            description: Bottom padding, in points
                                            type: number
                                          left:
                                            minimum: 0
                                            maximum: 9999
                                            description: Left padding, in points
                                            type: number
                                          x:
                                            minimum: 0
                                            maximum: 9999
                                            description: >-
                                              Horizontal padding applied to both left
                                              and right when those sides are omitted,
                                              in points
                                            type: number
                                          'y':
                                            minimum: 0
                                            maximum: 9999
                                            description: >-
                                              Vertical padding applied to both top and
                                              bottom when those sides are omitted, in
                                              points
                                            type: number
                                      backgroundRadius:
                                        minimum: 0
                                        maximum: 14400
                                        description: >-
                                          Corner radius for each highlight
                                          background segment, in points
                                        type: number
                                  subscript:
                                    additionalProperties: false
                                    type: object
                                    properties:
                                      color:
                                        description: >-
                                          Color as `#RGB` or `#RRGGBB`, or
                                          `inherit` to use the inherited color
                                        anyOf:
                                          - pattern: ^#([0-9a-fA-F]{3}|[0-9a-fA-F]{6})$
                                            description: Color as `#RGB` or `#RRGGBB`
                                            type: string
                                          - const: inherit
                                            type: string
                                      sizeScale:
                                        minimum: 0.4
                                        maximum: 1
                                        description: >-
                                          Optical scale relative to the
                                          surrounding run (fraction of base size)
                                        type: number
                                      riseFraction:
                                        minimum: 0
                                        maximum: 1
                                        description: >-
                                          Baseline offset as a fraction of base
                                          size (not PDF points — contrast with
                                          code `baselineShift`). The renderer
                                          applies the sign (up for superscript,
                                          down for subscript)
                                        type: number
                                  superscript:
                                    additionalProperties: false
                                    type: object
                                    properties:
                                      color:
                                        description: >-
                                          Color as `#RGB` or `#RRGGBB`, or
                                          `inherit` to use the inherited color
                                        anyOf:
                                          - pattern: ^#([0-9a-fA-F]{3}|[0-9a-fA-F]{6})$
                                            description: Color as `#RGB` or `#RRGGBB`
                                            type: string
                                          - const: inherit
                                            type: string
                                      sizeScale:
                                        minimum: 0.4
                                        maximum: 1
                                        description: >-
                                          Optical scale relative to the
                                          surrounding run (fraction of base size)
                                        type: number
                                      riseFraction:
                                        minimum: 0
                                        maximum: 1
                                        description: >-
                                          Baseline offset as a fraction of base
                                          size (not PDF points — contrast with
                                          code `baselineShift`). The renderer
                                          applies the sign (up for superscript,
                                          down for subscript)
                                        type: number
                                  link:
                                    additionalProperties: false
                                    type: object
                                    properties:
                                      color:
                                        description: >-
                                          Color as `#RGB` or `#RRGGBB`, or
                                          `inherit` to use the inherited color
                                        anyOf:
                                          - pattern: ^#([0-9a-fA-F]{3}|[0-9a-fA-F]{6})$
                                            description: Color as `#RGB` or `#RRGGBB`
                                            type: string
                                          - const: inherit
                                            type: string
                                      decoration:
                                        type: string
                                        enum:
                                          - underline
                                          - lineThrough
                                          - none
                                      decorationStyle:
                                        type: string
                                        enum:
                                          - solid
                                          - double
                                          - dotted
                                          - dashed
                                          - wavy
                                      decorationColor:
                                        description: >-
                                          Color as `#RGB` or `#RRGGBB`, or
                                          `inherit` to use the inherited color
                                        anyOf:
                                          - pattern: ^#([0-9a-fA-F]{3}|[0-9a-fA-F]{6})$
                                            description: Color as `#RGB` or `#RRGGBB`
                                            type: string
                                          - const: inherit
                                            type: string
                                  code:
                                    additionalProperties: false
                                    description: >-
                                      Style overrides for inline code spans (``
                                      `code` ``): font, optical size scale, text
                                      color, background
                                      fill/padding/border/radius, baseline
                                      shift, opacity, and letter spacing. Pass
                                      `background: null` or `backgroundBorder:
                                      null` to suppress those.
                                    type: object
                                    properties:
                                      font:
                                        pattern: ^\S(.*\S)?$
                                        description: >-
                                          Font slot as `<role>.<variant>` — role
                                          is `body`, `heading`, or a custom
                                          `typography.named` role; variant is one
                                          of regular, italic, bold, boldItalic
                                          (see `enums.fontVariant`; e.g.
                                          `heading.bold`). The shape is checked
                                          semantically at validate, not by this
                                          pattern: a misspelled variant, an
                                          undeclared role, a missing `.variant`,
                                          or a value that reads like a family name
                                          is rejected with a `didYouMean` pointing
                                          at the fix (use `set.family` for a
                                          typeface).
                                        type: string
                                      sizeScale:
                                        minimum: 0.85
                                        maximum: 0.88
                                        description: >-
                                          Optical scale relative to the
                                          surrounding run. Accepted range is the
                                          0.85–0.88 band; out-of-range values are
                                          rejected
                                        type: number
                                      color:
                                        description: >-
                                          Color as `#RGB` or `#RRGGBB`, or
                                          `inherit` to use the inherited color
                                        anyOf:
                                          - pattern: ^#([0-9a-fA-F]{3}|[0-9a-fA-F]{6})$
                                            description: Color as `#RGB` or `#RRGGBB`
                                            type: string
                                          - const: inherit
                                            type: string
                                      background:
                                        description: >-
                                          Background fill behind the code run as
                                          `#RGB`/`#RRGGBB`, or `null` to suppress
                                        anyOf:
                                          - pattern: ^#([0-9a-fA-F]{3}|[0-9a-fA-F]{6})$
                                            description: Color as `#RGB` or `#RRGGBB`
                                            type: string
                                          - type: 'null'
                                      backgroundPadding:
                                        additionalProperties: false
                                        type: object
                                        properties:
                                          top:
                                            minimum: 0
                                            maximum: 9999
                                            description: Top padding, in points
                                            type: number
                                          right:
                                            minimum: 0
                                            maximum: 9999
                                            description: Right padding, in points
                                            type: number
                                          bottom:
                                            minimum: 0
                                            maximum: 9999
                                            description: Bottom padding, in points
                                            type: number
                                          left:
                                            minimum: 0
                                            maximum: 9999
                                            description: Left padding, in points
                                            type: number
                                          x:
                                            minimum: 0
                                            maximum: 9999
                                            description: >-
                                              Horizontal padding applied to both left
                                              and right when those sides are omitted,
                                              in points
                                            type: number
                                          'y':
                                            minimum: 0
                                            maximum: 9999
                                            description: >-
                                              Vertical padding applied to both top and
                                              bottom when those sides are omitted, in
                                              points
                                            type: number
                                      backgroundBorder:
                                        description: >-
                                          Micro-border around each cloned
                                          background segment, or `null` to
                                          suppress
                                        anyOf:
                                          - additionalProperties: false
                                            type: object
                                            required:
                                              - width
                                              - color
                                            properties:
                                              width:
                                                minimum: 0.1
                                                maximum: 50
                                                description: Border thickness in points
                                                type: number
                                              color:
                                                pattern: ^#([0-9a-fA-F]{3}|[0-9a-fA-F]{6})$
                                                description: Color as `#RGB` or `#RRGGBB`
                                                type: string
                                              opacity:
                                                minimum: 0
                                                maximum: 1
                                                description: Border opacity from 0 to 1
                                                type: number
                                              dash:
                                                description: >-
                                                  Dash pattern as `[dash, gap]` lengths in
                                                  points; both `0` is rejected
                                                type: array
                                                items:
                                                  minimum: 0
                                                  maximum: 1000
                                                  type: number
                                                minItems: 2
                                                maxItems: 2
                                          - type: 'null'
                                      backgroundRadius:
                                        minimum: 0
                                        maximum: 14400
                                        description: >-
                                          Corner radius for each background
                                          segment, in points
                                        type: number
                                      baselineShift:
                                        minimum: -999
                                        maximum: 999
                                        description: >-
                                          PDF text-rise adjustment in points;
                                          positive values raise the code glyphs
                                        type: number
                                      opacity:
                                        minimum: 0
                                        maximum: 1
                                        description: Fill opacity from 0 to 1
                                        type: number
                                      letterSpacing:
                                        minimum: -100
                                        maximum: 100
                                        description: >-
                                          Extra spacing between code glyphs in
                                          points; negative values tighten
                                        type: number
                      topRight:
                        additionalProperties: false
                        type: object
                        required:
                          - content
                        properties:
                          content:
                            minItems: 1
                            maxItems: 16
                            description: Ordered fragments concatenated to fill the slot
                            type: array
                            items:
                              description: >-
                                A header/footer fragment: literal text, an image
                                (logo/letterhead), page numbers, document title,
                                running section title, or section ordinal at a
                                heading depth. An `image` fragment must be the
                                only fragment in its slot — it is not mixed with
                                text fragments.
                              anyOf:
                                - additionalProperties: false
                                  type: object
                                  required:
                                    - kind
                                    - value
                                  properties:
                                    kind:
                                      const: text
                                      type: string
                                    value:
                                      minLength: 1
                                      maxLength: 256
                                      pattern: \S
                                      description: Literal text for this fragment
                                      type: string
                                    style:
                                      additionalProperties: false
                                      type: object
                                      properties:
                                        font:
                                          pattern: ^\S(.*\S)?$
                                          description: >-
                                            Font slot as `<role>.<variant>` — role
                                            is `body`, `heading`, or a custom
                                            `typography.named` role; variant is one
                                            of regular, italic, bold, boldItalic
                                            (see `enums.fontVariant`; e.g.
                                            `heading.bold`). The shape is checked
                                            semantically at validate, not by this
                                            pattern: a misspelled variant, an
                                            undeclared role, a missing `.variant`,
                                            or a value that reads like a family name
                                            is rejected with a `didYouMean` pointing
                                            at the fix (use `set.family` for a
                                            typeface).
                                          type: string
                                        size:
                                          minimum: 1
                                          maximum: 999
                                          description: Font size in points
                                          type: number
                                        color:
                                          pattern: ^#([0-9a-fA-F]{3}|[0-9a-fA-F]{6})$
                                          description: Color as `#RGB` or `#RRGGBB`
                                          type: string
                                        opacity:
                                          minimum: 0
                                          maximum: 1
                                          description: Text opacity from 0 to 1
                                          type: number
                                - additionalProperties: false
                                  type: object
                                  required:
                                    - kind
                                    - url
                                  properties:
                                    kind:
                                      const: image
                                      type: string
                                    url:
                                      minLength: 1
                                      maxLength: 1048576
                                      pattern: ^(https://|data:image/)
                                      description: >-
                                        HTTPS or base64 `data:image/...` URL of
                                        the header/footer image (typically a
                                        brand logo or letterhead). Fetched under
                                        the same fixed, non-configurable image
                                        policy as Markdown images (private IPs
                                        blocked, DNS-rebinding mitigation, 10
                                        MiB cap); a fetch or decode failure
                                        degrades to a diagnostic and the image
                                        is omitted rather than failing the
                                        render. Rendered as a decorative PDF/UA
                                        pagination artifact (no alt text).
                                      type: string
                                    width:
                                      minimum: 1
                                      maximum: 14400
                                      description: >-
                                        Rendered image width in PDF points. When
                                        omitted, the intrinsic width is used,
                                        clamped to the slot band width. Set
                                        `width` or `height` to scale a logo
                                        down.
                                      type: number
                                    height:
                                      minimum: 1
                                      maximum: 14400
                                      description: >-
                                        Rendered image height in PDF points.
                                        When omitted, height follows the aspect
                                        ratio of the resolved width.
                                      type: number
                                    fit:
                                      description: >-
                                        Block-only. How the image fills its
                                        width/height box: `none` (intrinsic
                                        sizing), `contain`, `cover`, or `fill`.
                                        Used with `height` for hero-style
                                        layouts.
                                      anyOf:
                                        - const: none
                                          type: string
                                        - const: contain
                                          type: string
                                        - const: cover
                                          type: string
                                        - const: fill
                                          type: string
                                    align:
                                      description: >-
                                        Block-only. Horizontal alignment of the
                                        image within the content area: `start`
                                        (left edge in LTR), `center`, or `end`
                                        (right edge in LTR). Ignored for inline
                                        images (line flow controls position).
                                      anyOf:
                                        - const: start
                                          type: string
                                        - const: center
                                          type: string
                                        - const: end
                                          type: string
                                    opacity:
                                      minimum: 0
                                      maximum: 1
                                      description: Image opacity from 0 to 1.
                                      type: number
                                - additionalProperties: false
                                  type: object
                                  required:
                                    - kind
                                  properties:
                                    kind:
                                      const: pageNumber
                                      type: string
                                    style:
                                      additionalProperties: false
                                      type: object
                                      properties:
                                        font:
                                          pattern: ^\S(.*\S)?$
                                          description: >-
                                            Font slot as `<role>.<variant>` — role
                                            is `body`, `heading`, or a custom
                                            `typography.named` role; variant is one
                                            of regular, italic, bold, boldItalic
                                            (see `enums.fontVariant`; e.g.
                                            `heading.bold`). The shape is checked
                                            semantically at validate, not by this
                                            pattern: a misspelled variant, an
                                            undeclared role, a missing `.variant`,
                                            or a value that reads like a family name
                                            is rejected with a `didYouMean` pointing
                                            at the fix (use `set.family` for a
                                            typeface).
                                          type: string
                                        size:
                                          minimum: 1
                                          maximum: 999
                                          description: Font size in points
                                          type: number
                                        color:
                                          pattern: ^#([0-9a-fA-F]{3}|[0-9a-fA-F]{6})$
                                          description: Color as `#RGB` or `#RRGGBB`
                                          type: string
                                        opacity:
                                          minimum: 0
                                          maximum: 1
                                          description: Text opacity from 0 to 1
                                          type: number
                                - additionalProperties: false
                                  type: object
                                  required:
                                    - kind
                                  properties:
                                    kind:
                                      const: totalPages
                                      type: string
                                    style:
                                      additionalProperties: false
                                      type: object
                                      properties:
                                        font:
                                          pattern: ^\S(.*\S)?$
                                          description: >-
                                            Font slot as `<role>.<variant>` — role
                                            is `body`, `heading`, or a custom
                                            `typography.named` role; variant is one
                                            of regular, italic, bold, boldItalic
                                            (see `enums.fontVariant`; e.g.
                                            `heading.bold`). The shape is checked
                                            semantically at validate, not by this
                                            pattern: a misspelled variant, an
                                            undeclared role, a missing `.variant`,
                                            or a value that reads like a family name
                                            is rejected with a `didYouMean` pointing
                                            at the fix (use `set.family` for a
                                            typeface).
                                          type: string
                                        size:
                                          minimum: 1
                                          maximum: 999
                                          description: Font size in points
                                          type: number
                                        color:
                                          pattern: ^#([0-9a-fA-F]{3}|[0-9a-fA-F]{6})$
                                          description: Color as `#RGB` or `#RRGGBB`
                                          type: string
                                        opacity:
                                          minimum: 0
                                          maximum: 1
                                          description: Text opacity from 0 to 1
                                          type: number
                                - additionalProperties: false
                                  type: object
                                  required:
                                    - kind
                                  properties:
                                    kind:
                                      const: documentTitle
                                      type: string
                                    style:
                                      additionalProperties: false
                                      type: object
                                      properties:
                                        font:
                                          pattern: ^\S(.*\S)?$
                                          description: >-
                                            Font slot as `<role>.<variant>` — role
                                            is `body`, `heading`, or a custom
                                            `typography.named` role; variant is one
                                            of regular, italic, bold, boldItalic
                                            (see `enums.fontVariant`; e.g.
                                            `heading.bold`). The shape is checked
                                            semantically at validate, not by this
                                            pattern: a misspelled variant, an
                                            undeclared role, a missing `.variant`,
                                            or a value that reads like a family name
                                            is rejected with a `didYouMean` pointing
                                            at the fix (use `set.family` for a
                                            typeface).
                                          type: string
                                        size:
                                          minimum: 1
                                          maximum: 999
                                          description: Font size in points
                                          type: number
                                        color:
                                          pattern: ^#([0-9a-fA-F]{3}|[0-9a-fA-F]{6})$
                                          description: Color as `#RGB` or `#RRGGBB`
                                          type: string
                                        opacity:
                                          minimum: 0
                                          maximum: 1
                                          description: Text opacity from 0 to 1
                                          type: number
                                - additionalProperties: false
                                  type: object
                                  required:
                                    - kind
                                  properties:
                                    kind:
                                      const: sectionTitle
                                      type: string
                                    depth:
                                      description: Heading depth from 1 (top level) to 6
                                      anyOf:
                                        - const: 1
                                          type: number
                                        - const: 2
                                          type: number
                                        - const: 3
                                          type: number
                                        - const: 4
                                          type: number
                                        - const: 5
                                          type: number
                                        - const: 6
                                          type: number
                                    style:
                                      additionalProperties: false
                                      type: object
                                      properties:
                                        font:
                                          pattern: ^\S(.*\S)?$
                                          description: >-
                                            Font slot as `<role>.<variant>` — role
                                            is `body`, `heading`, or a custom
                                            `typography.named` role; variant is one
                                            of regular, italic, bold, boldItalic
                                            (see `enums.fontVariant`; e.g.
                                            `heading.bold`). The shape is checked
                                            semantically at validate, not by this
                                            pattern: a misspelled variant, an
                                            undeclared role, a missing `.variant`,
                                            or a value that reads like a family name
                                            is rejected with a `didYouMean` pointing
                                            at the fix (use `set.family` for a
                                            typeface).
                                          type: string
                                        size:
                                          minimum: 1
                                          maximum: 999
                                          description: Font size in points
                                          type: number
                                        color:
                                          pattern: ^#([0-9a-fA-F]{3}|[0-9a-fA-F]{6})$
                                          description: Color as `#RGB` or `#RRGGBB`
                                          type: string
                                        opacity:
                                          minimum: 0
                                          maximum: 1
                                          description: Text opacity from 0 to 1
                                          type: number
                                - additionalProperties: false
                                  type: object
                                  required:
                                    - kind
                                  properties:
                                    kind:
                                      const: sectionIndex
                                      type: string
                                    depth:
                                      description: Heading depth from 1 (top level) to 6
                                      anyOf:
                                        - const: 1
                                          type: number
                                        - const: 2
                                          type: number
                                        - const: 3
                                          type: number
                                        - const: 4
                                          type: number
                                        - const: 5
                                          type: number
                                        - const: 6
                                          type: number
                                    format:
                                      description: >-
                                        Section ordinal format: `twoDigit` (at
                                        least two digits: 01, 12; ordinals ≥ 100
                                        render in full) or `decimal` (1, 2, …)
                                      anyOf:
                                        - const: twoDigit
                                          type: string
                                        - const: decimal
                                          type: string
                                    style:
                                      additionalProperties: false
                                      type: object
                                      properties:
                                        font:
                                          pattern: ^\S(.*\S)?$
                                          description: >-
                                            Font slot as `<role>.<variant>` — role
                                            is `body`, `heading`, or a custom
                                            `typography.named` role; variant is one
                                            of regular, italic, bold, boldItalic
                                            (see `enums.fontVariant`; e.g.
                                            `heading.bold`). The shape is checked
                                            semantically at validate, not by this
                                            pattern: a misspelled variant, an
                                            undeclared role, a missing `.variant`,
                                            or a value that reads like a family name
                                            is rejected with a `didYouMean` pointing
                                            at the fix (use `set.family` for a
                                            typeface).
                                          type: string
                                        size:
                                          minimum: 1
                                          maximum: 999
                                          description: Font size in points
                                          type: number
                                        color:
                                          pattern: ^#([0-9a-fA-F]{3}|[0-9a-fA-F]{6})$
                                          description: Color as `#RGB` or `#RRGGBB`
                                          type: string
                                        opacity:
                                          minimum: 0
                                          maximum: 1
                                          description: Text opacity from 0 to 1
                                          type: number
                          style:
                            additionalProperties: false
                            type: object
                            properties:
                              font:
                                pattern: ^\S(.*\S)?$
                                description: >-
                                  Font slot as `<role>.<variant>` — role is
                                  `body`, `heading`, or a custom
                                  `typography.named` role; variant is one of
                                  regular, italic, bold, boldItalic (see
                                  `enums.fontVariant`; e.g. `heading.bold`). The
                                  shape is checked semantically at validate, not
                                  by this pattern: a misspelled variant, an
                                  undeclared role, a missing `.variant`, or a
                                  value that reads like a family name is
                                  rejected with a `didYouMean` pointing at the
                                  fix (use `set.family` for a typeface).
                                type: string
                              family:
                                description: >-
                                  A text family: a hosted weighted key, a
                                  declared Google Fonts display name, or a
                                  `typography.named` role reference
                                anyOf:
                                  - const: inter
                                    type: string
                                  - const: lora
                                    type: string
                                  - const: source-serif-4
                                    type: string
                                  - pattern: ^[A-Za-z][A-Za-z0-9 ]{0,63}$
                                    description: >-
                                      Google Fonts display name from the
                                      declared pool (e.g. `Playfair Display`)
                                    type: string
                                  - pattern: ^[a-z][a-z0-9-]{0,15}$
                                    description: >-
                                      Reference to a custom role declared in
                                      `typography.named` (e.g. `display`)
                                    type: string
                              size:
                                minimum: 1
                                maximum: 999
                                description: Font size in points
                                type: number
                              color:
                                pattern: ^#([0-9a-fA-F]{3}|[0-9a-fA-F]{6})$
                                description: Color as `#RGB` or `#RRGGBB`
                                type: string
                              spaceBefore:
                                minimum: 0
                                maximum: 9999
                                description: >-
                                  Vertical space reserved above the block, in
                                  points
                                type: number
                              spaceAfter:
                                minimum: 0
                                maximum: 9999
                                description: >-
                                  Vertical space reserved below the block, in
                                  points
                                type: number
                              lineHeight:
                                minimum: 1
                                maximum: 10
                                description: Line height as a multiple of the font size
                                type: number
                              align:
                                type: string
                                enum:
                                  - left
                                  - right
                                  - center
                                  - justify
                              letterSpacing:
                                minimum: -100
                                maximum: 100
                                description: >-
                                  Extra spacing between characters in points;
                                  negative values tighten
                                type: number
                              opacity:
                                minimum: 0
                                maximum: 1
                                description: Text opacity from 0 to 1
                                type: number
                              inline:
                                additionalProperties: false
                                type: object
                                properties:
                                  strong:
                                    additionalProperties: false
                                    type: object
                                    properties:
                                      color:
                                        description: >-
                                          Color as `#RGB` or `#RRGGBB`, or
                                          `inherit` to use the inherited color
                                        anyOf:
                                          - pattern: ^#([0-9a-fA-F]{3}|[0-9a-fA-F]{6})$
                                            description: Color as `#RGB` or `#RRGGBB`
                                            type: string
                                          - const: inherit
                                            type: string
                                  emphasis:
                                    additionalProperties: false
                                    type: object
                                    properties:
                                      color:
                                        description: >-
                                          Color as `#RGB` or `#RRGGBB`, or
                                          `inherit` to use the inherited color
                                        anyOf:
                                          - pattern: ^#([0-9a-fA-F]{3}|[0-9a-fA-F]{6})$
                                            description: Color as `#RGB` or `#RRGGBB`
                                            type: string
                                          - const: inherit
                                            type: string
                                  delete:
                                    additionalProperties: false
                                    type: object
                                    properties:
                                      color:
                                        description: >-
                                          Color as `#RGB` or `#RRGGBB`, or
                                          `inherit` to use the inherited color
                                        anyOf:
                                          - pattern: ^#([0-9a-fA-F]{3}|[0-9a-fA-F]{6})$
                                            description: Color as `#RGB` or `#RRGGBB`
                                            type: string
                                          - const: inherit
                                            type: string
                                      decorationStyle:
                                        type: string
                                        enum:
                                          - solid
                                          - double
                                          - dotted
                                          - dashed
                                          - wavy
                                      decorationColor:
                                        description: >-
                                          Color as `#RGB` or `#RRGGBB`, or
                                          `inherit` to use the inherited color
                                        anyOf:
                                          - pattern: ^#([0-9a-fA-F]{3}|[0-9a-fA-F]{6})$
                                            description: Color as `#RGB` or `#RRGGBB`
                                            type: string
                                          - const: inherit
                                            type: string
                                  mark:
                                    additionalProperties: false
                                    type: object
                                    properties:
                                      color:
                                        description: >-
                                          Color as `#RGB` or `#RRGGBB`, or
                                          `inherit` to use the inherited color
                                        anyOf:
                                          - pattern: ^#([0-9a-fA-F]{3}|[0-9a-fA-F]{6})$
                                            description: Color as `#RGB` or `#RRGGBB`
                                            type: string
                                          - const: inherit
                                            type: string
                                      background:
                                        description: >-
                                          Background fill behind highlighted text
                                          as `#RGB`/`#RRGGBB`, or `null` to
                                          suppress
                                        anyOf:
                                          - pattern: ^#([0-9a-fA-F]{3}|[0-9a-fA-F]{6})$
                                            description: Color as `#RGB` or `#RRGGBB`
                                            type: string
                                          - type: 'null'
                                      backgroundPadding:
                                        additionalProperties: false
                                        type: object
                                        properties:
                                          top:
                                            minimum: 0
                                            maximum: 9999
                                            description: Top padding, in points
                                            type: number
                                          right:
                                            minimum: 0
                                            maximum: 9999
                                            description: Right padding, in points
                                            type: number
                                          bottom:
                                            minimum: 0
                                            maximum: 9999
                                            description: Bottom padding, in points
                                            type: number
                                          left:
                                            minimum: 0
                                            maximum: 9999
                                            description: Left padding, in points
                                            type: number
                                          x:
                                            minimum: 0
                                            maximum: 9999
                                            description: >-
                                              Horizontal padding applied to both left
                                              and right when those sides are omitted,
                                              in points
                                            type: number
                                          'y':
                                            minimum: 0
                                            maximum: 9999
                                            description: >-
                                              Vertical padding applied to both top and
                                              bottom when those sides are omitted, in
                                              points
                                            type: number
                                      backgroundRadius:
                                        minimum: 0
                                        maximum: 14400
                                        description: >-
                                          Corner radius for each highlight
                                          background segment, in points
                                        type: number
                                  subscript:
                                    additionalProperties: false
                                    type: object
                                    properties:
                                      color:
                                        description: >-
                                          Color as `#RGB` or `#RRGGBB`, or
                                          `inherit` to use the inherited color
                                        anyOf:
                                          - pattern: ^#([0-9a-fA-F]{3}|[0-9a-fA-F]{6})$
                                            description: Color as `#RGB` or `#RRGGBB`
                                            type: string
                                          - const: inherit
                                            type: string
                                      sizeScale:
                                        minimum: 0.4
                                        maximum: 1
                                        description: >-
                                          Optical scale relative to the
                                          surrounding run (fraction of base size)
                                        type: number
                                      riseFraction:
                                        minimum: 0
                                        maximum: 1
                                        description: >-
                                          Baseline offset as a fraction of base
                                          size (not PDF points — contrast with
                                          code `baselineShift`). The renderer
                                          applies the sign (up for superscript,
                                          down for subscript)
                                        type: number
                                  superscript:
                                    additionalProperties: false
                                    type: object
                                    properties:
                                      color:
                                        description: >-
                                          Color as `#RGB` or `#RRGGBB`, or
                                          `inherit` to use the inherited color
                                        anyOf:
                                          - pattern: ^#([0-9a-fA-F]{3}|[0-9a-fA-F]{6})$
                                            description: Color as `#RGB` or `#RRGGBB`
                                            type: string
                                          - const: inherit
                                            type: string
                                      sizeScale:
                                        minimum: 0.4
                                        maximum: 1
                                        description: >-
                                          Optical scale relative to the
                                          surrounding run (fraction of base size)
                                        type: number
                                      riseFraction:
                                        minimum: 0
                                        maximum: 1
                                        description: >-
                                          Baseline offset as a fraction of base
                                          size (not PDF points — contrast with
                                          code `baselineShift`). The renderer
                                          applies the sign (up for superscript,
                                          down for subscript)
                                        type: number
                                  link:
                                    additionalProperties: false
                                    type: object
                                    properties:
                                      color:
                                        description: >-
                                          Color as `#RGB` or `#RRGGBB`, or
                                          `inherit` to use the inherited color
                                        anyOf:
                                          - pattern: ^#([0-9a-fA-F]{3}|[0-9a-fA-F]{6})$
                                            description: Color as `#RGB` or `#RRGGBB`
                                            type: string
                                          - const: inherit
                                            type: string
                                      decoration:
                                        type: string
                                        enum:
                                          - underline
                                          - lineThrough
                                          - none
                                      decorationStyle:
                                        type: string
                                        enum:
                                          - solid
                                          - double
                                          - dotted
                                          - dashed
                                          - wavy
                                      decorationColor:
                                        description: >-
                                          Color as `#RGB` or `#RRGGBB`, or
                                          `inherit` to use the inherited color
                                        anyOf:
                                          - pattern: ^#([0-9a-fA-F]{3}|[0-9a-fA-F]{6})$
                                            description: Color as `#RGB` or `#RRGGBB`
                                            type: string
                                          - const: inherit
                                            type: string
                                  code:
                                    additionalProperties: false
                                    description: >-
                                      Style overrides for inline code spans (``
                                      `code` ``): font, optical size scale, text
                                      color, background
                                      fill/padding/border/radius, baseline
                                      shift, opacity, and letter spacing. Pass
                                      `background: null` or `backgroundBorder:
                                      null` to suppress those.
                                    type: object
                                    properties:
                                      font:
                                        pattern: ^\S(.*\S)?$
                                        description: >-
                                          Font slot as `<role>.<variant>` — role
                                          is `body`, `heading`, or a custom
                                          `typography.named` role; variant is one
                                          of regular, italic, bold, boldItalic
                                          (see `enums.fontVariant`; e.g.
                                          `heading.bold`). The shape is checked
                                          semantically at validate, not by this
                                          pattern: a misspelled variant, an
                                          undeclared role, a missing `.variant`,
                                          or a value that reads like a family name
                                          is rejected with a `didYouMean` pointing
                                          at the fix (use `set.family` for a
                                          typeface).
                                        type: string
                                      sizeScale:
                                        minimum: 0.85
                                        maximum: 0.88
                                        description: >-
                                          Optical scale relative to the
                                          surrounding run. Accepted range is the
                                          0.85–0.88 band; out-of-range values are
                                          rejected
                                        type: number
                                      color:
                                        description: >-
                                          Color as `#RGB` or `#RRGGBB`, or
                                          `inherit` to use the inherited color
                                        anyOf:
                                          - pattern: ^#([0-9a-fA-F]{3}|[0-9a-fA-F]{6})$
                                            description: Color as `#RGB` or `#RRGGBB`
                                            type: string
                                          - const: inherit
                                            type: string
                                      background:
                                        description: >-
                                          Background fill behind the code run as
                                          `#RGB`/`#RRGGBB`, or `null` to suppress
                                        anyOf:
                                          - pattern: ^#([0-9a-fA-F]{3}|[0-9a-fA-F]{6})$
                                            description: Color as `#RGB` or `#RRGGBB`
                                            type: string
                                          - type: 'null'
                                      backgroundPadding:
                                        additionalProperties: false
                                        type: object
                                        properties:
                                          top:
                                            minimum: 0
                                            maximum: 9999
                                            description: Top padding, in points
                                            type: number
                                          right:
                                            minimum: 0
                                            maximum: 9999
                                            description: Right padding, in points
                                            type: number
                                          bottom:
                                            minimum: 0
                                            maximum: 9999
                                            description: Bottom padding, in points
                                            type: number
                                          left:
                                            minimum: 0
                                            maximum: 9999
                                            description: Left padding, in points
                                            type: number
                                          x:
                                            minimum: 0
                                            maximum: 9999
                                            description: >-
                                              Horizontal padding applied to both left
                                              and right when those sides are omitted,
                                              in points
                                            type: number
                                          'y':
                                            minimum: 0
                                            maximum: 9999
                                            description: >-
                                              Vertical padding applied to both top and
                                              bottom when those sides are omitted, in
                                              points
                                            type: number
                                      backgroundBorder:
                                        description: >-
                                          Micro-border around each cloned
                                          background segment, or `null` to
                                          suppress
                                        anyOf:
                                          - additionalProperties: false
                                            type: object
                                            required:
                                              - width
                                              - color
                                            properties:
                                              width:
                                                minimum: 0.1
                                                maximum: 50
                                                description: Border thickness in points
                                                type: number
                                              color:
                                                pattern: ^#([0-9a-fA-F]{3}|[0-9a-fA-F]{6})$
                                                description: Color as `#RGB` or `#RRGGBB`
                                                type: string
                                              opacity:
                                                minimum: 0
                                                maximum: 1
                                                description: Border opacity from 0 to 1
                                                type: number
                                              dash:
                                                description: >-
                                                  Dash pattern as `[dash, gap]` lengths in
                                                  points; both `0` is rejected
                                                type: array
                                                items:
                                                  minimum: 0
                                                  maximum: 1000
                                                  type: number
                                                minItems: 2
                                                maxItems: 2
                                          - type: 'null'
                                      backgroundRadius:
                                        minimum: 0
                                        maximum: 14400
                                        description: >-
                                          Corner radius for each background
                                          segment, in points
                                        type: number
                                      baselineShift:
                                        minimum: -999
                                        maximum: 999
                                        description: >-
                                          PDF text-rise adjustment in points;
                                          positive values raise the code glyphs
                                        type: number
                                      opacity:
                                        minimum: 0
                                        maximum: 1
                                        description: Fill opacity from 0 to 1
                                        type: number
                                      letterSpacing:
                                        minimum: -100
                                        maximum: 100
                                        description: >-
                                          Extra spacing between code glyphs in
                                          points; negative values tighten
                                        type: number
                      bottomLeft:
                        additionalProperties: false
                        type: object
                        required:
                          - content
                        properties:
                          content:
                            minItems: 1
                            maxItems: 16
                            description: Ordered fragments concatenated to fill the slot
                            type: array
                            items:
                              description: >-
                                A header/footer fragment: literal text, an image
                                (logo/letterhead), page numbers, document title,
                                running section title, or section ordinal at a
                                heading depth. An `image` fragment must be the
                                only fragment in its slot — it is not mixed with
                                text fragments.
                              anyOf:
                                - additionalProperties: false
                                  type: object
                                  required:
                                    - kind
                                    - value
                                  properties:
                                    kind:
                                      const: text
                                      type: string
                                    value:
                                      minLength: 1
                                      maxLength: 256
                                      pattern: \S
                                      description: Literal text for this fragment
                                      type: string
                                    style:
                                      additionalProperties: false
                                      type: object
                                      properties:
                                        font:
                                          pattern: ^\S(.*\S)?$
                                          description: >-
                                            Font slot as `<role>.<variant>` — role
                                            is `body`, `heading`, or a custom
                                            `typography.named` role; variant is one
                                            of regular, italic, bold, boldItalic
                                            (see `enums.fontVariant`; e.g.
                                            `heading.bold`). The shape is checked
                                            semantically at validate, not by this
                                            pattern: a misspelled variant, an
                                            undeclared role, a missing `.variant`,
                                            or a value that reads like a family name
                                            is rejected with a `didYouMean` pointing
                                            at the fix (use `set.family` for a
                                            typeface).
                                          type: string
                                        size:
                                          minimum: 1
                                          maximum: 999
                                          description: Font size in points
                                          type: number
                                        color:
                                          pattern: ^#([0-9a-fA-F]{3}|[0-9a-fA-F]{6})$
                                          description: Color as `#RGB` or `#RRGGBB`
                                          type: string
                                        opacity:
                                          minimum: 0
                                          maximum: 1
                                          description: Text opacity from 0 to 1
                                          type: number
                                - additionalProperties: false
                                  type: object
                                  required:
                                    - kind
                                    - url
                                  properties:
                                    kind:
                                      const: image
                                      type: string
                                    url:
                                      minLength: 1
                                      maxLength: 1048576
                                      pattern: ^(https://|data:image/)
                                      description: >-
                                        HTTPS or base64 `data:image/...` URL of
                                        the header/footer image (typically a
                                        brand logo or letterhead). Fetched under
                                        the same fixed, non-configurable image
                                        policy as Markdown images (private IPs
                                        blocked, DNS-rebinding mitigation, 10
                                        MiB cap); a fetch or decode failure
                                        degrades to a diagnostic and the image
                                        is omitted rather than failing the
                                        render. Rendered as a decorative PDF/UA
                                        pagination artifact (no alt text).
                                      type: string
                                    width:
                                      minimum: 1
                                      maximum: 14400
                                      description: >-
                                        Rendered image width in PDF points. When
                                        omitted, the intrinsic width is used,
                                        clamped to the slot band width. Set
                                        `width` or `height` to scale a logo
                                        down.
                                      type: number
                                    height:
                                      minimum: 1
                                      maximum: 14400
                                      description: >-
                                        Rendered image height in PDF points.
                                        When omitted, height follows the aspect
                                        ratio of the resolved width.
                                      type: number
                                    fit:
                                      description: >-
                                        Block-only. How the image fills its
                                        width/height box: `none` (intrinsic
                                        sizing), `contain`, `cover`, or `fill`.
                                        Used with `height` for hero-style
                                        layouts.
                                      anyOf:
                                        - const: none
                                          type: string
                                        - const: contain
                                          type: string
                                        - const: cover
                                          type: string
                                        - const: fill
                                          type: string
                                    align:
                                      description: >-
                                        Block-only. Horizontal alignment of the
                                        image within the content area: `start`
                                        (left edge in LTR), `center`, or `end`
                                        (right edge in LTR). Ignored for inline
                                        images (line flow controls position).
                                      anyOf:
                                        - const: start
                                          type: string
                                        - const: center
                                          type: string
                                        - const: end
                                          type: string
                                    opacity:
                                      minimum: 0
                                      maximum: 1
                                      description: Image opacity from 0 to 1.
                                      type: number
                                - additionalProperties: false
                                  type: object
                                  required:
                                    - kind
                                  properties:
                                    kind:
                                      const: pageNumber
                                      type: string
                                    style:
                                      additionalProperties: false
                                      type: object
                                      properties:
                                        font:
                                          pattern: ^\S(.*\S)?$
                                          description: >-
                                            Font slot as `<role>.<variant>` — role
                                            is `body`, `heading`, or a custom
                                            `typography.named` role; variant is one
                                            of regular, italic, bold, boldItalic
                                            (see `enums.fontVariant`; e.g.
                                            `heading.bold`). The shape is checked
                                            semantically at validate, not by this
                                            pattern: a misspelled variant, an
                                            undeclared role, a missing `.variant`,
                                            or a value that reads like a family name
                                            is rejected with a `didYouMean` pointing
                                            at the fix (use `set.family` for a
                                            typeface).
                                          type: string
                                        size:
                                          minimum: 1
                                          maximum: 999
                                          description: Font size in points
                                          type: number
                                        color:
                                          pattern: ^#([0-9a-fA-F]{3}|[0-9a-fA-F]{6})$
                                          description: Color as `#RGB` or `#RRGGBB`
                                          type: string
                                        opacity:
                                          minimum: 0
                                          maximum: 1
                                          description: Text opacity from 0 to 1
                                          type: number
                                - additionalProperties: false
                                  type: object
                                  required:
                                    - kind
                                  properties:
                                    kind:
                                      const: totalPages
                                      type: string
                                    style:
                                      additionalProperties: false
                                      type: object
                                      properties:
                                        font:
                                          pattern: ^\S(.*\S)?$
                                          description: >-
                                            Font slot as `<role>.<variant>` — role
                                            is `body`, `heading`, or a custom
                                            `typography.named` role; variant is one
                                            of regular, italic, bold, boldItalic
                                            (see `enums.fontVariant`; e.g.
                                            `heading.bold`). The shape is checked
                                            semantically at validate, not by this
                                            pattern: a misspelled variant, an
                                            undeclared role, a missing `.variant`,
                                            or a value that reads like a family name
                                            is rejected with a `didYouMean` pointing
                                            at the fix (use `set.family` for a
                                            typeface).
                                          type: string
                                        size:
                                          minimum: 1
                                          maximum: 999
                                          description: Font size in points
                                          type: number
                                        color:
                                          pattern: ^#([0-9a-fA-F]{3}|[0-9a-fA-F]{6})$
                                          description: Color as `#RGB` or `#RRGGBB`
                                          type: string
                                        opacity:
                                          minimum: 0
                                          maximum: 1
                                          description: Text opacity from 0 to 1
                                          type: number
                                - additionalProperties: false
                                  type: object
                                  required:
                                    - kind
                                  properties:
                                    kind:
                                      const: documentTitle
                                      type: string
                                    style:
                                      additionalProperties: false
                                      type: object
                                      properties:
                                        font:
                                          pattern: ^\S(.*\S)?$
                                          description: >-
                                            Font slot as `<role>.<variant>` — role
                                            is `body`, `heading`, or a custom
                                            `typography.named` role; variant is one
                                            of regular, italic, bold, boldItalic
                                            (see `enums.fontVariant`; e.g.
                                            `heading.bold`). The shape is checked
                                            semantically at validate, not by this
                                            pattern: a misspelled variant, an
                                            undeclared role, a missing `.variant`,
                                            or a value that reads like a family name
                                            is rejected with a `didYouMean` pointing
                                            at the fix (use `set.family` for a
                                            typeface).
                                          type: string
                                        size:
                                          minimum: 1
                                          maximum: 999
                                          description: Font size in points
                                          type: number
                                        color:
                                          pattern: ^#([0-9a-fA-F]{3}|[0-9a-fA-F]{6})$
                                          description: Color as `#RGB` or `#RRGGBB`
                                          type: string
                                        opacity:
                                          minimum: 0
                                          maximum: 1
                                          description: Text opacity from 0 to 1
                                          type: number
                                - additionalProperties: false
                                  type: object
                                  required:
                                    - kind
                                  properties:
                                    kind:
                                      const: sectionTitle
                                      type: string
                                    depth:
                                      description: Heading depth from 1 (top level) to 6
                                      anyOf:
                                        - const: 1
                                          type: number
                                        - const: 2
                                          type: number
                                        - const: 3
                                          type: number
                                        - const: 4
                                          type: number
                                        - const: 5
                                          type: number
                                        - const: 6
                                          type: number
                                    style:
                                      additionalProperties: false
                                      type: object
                                      properties:
                                        font:
                                          pattern: ^\S(.*\S)?$
                                          description: >-
                                            Font slot as `<role>.<variant>` — role
                                            is `body`, `heading`, or a custom
                                            `typography.named` role; variant is one
                                            of regular, italic, bold, boldItalic
                                            (see `enums.fontVariant`; e.g.
                                            `heading.bold`). The shape is checked
                                            semantically at validate, not by this
                                            pattern: a misspelled variant, an
                                            undeclared role, a missing `.variant`,
                                            or a value that reads like a family name
                                            is rejected with a `didYouMean` pointing
                                            at the fix (use `set.family` for a
                                            typeface).
                                          type: string
                                        size:
                                          minimum: 1
                                          maximum: 999
                                          description: Font size in points
                                          type: number
                                        color:
                                          pattern: ^#([0-9a-fA-F]{3}|[0-9a-fA-F]{6})$
                                          description: Color as `#RGB` or `#RRGGBB`
                                          type: string
                                        opacity:
                                          minimum: 0
                                          maximum: 1
                                          description: Text opacity from 0 to 1
                                          type: number
                                - additionalProperties: false
                                  type: object
                                  required:
                                    - kind
                                  properties:
                                    kind:
                                      const: sectionIndex
                                      type: string
                                    depth:
                                      description: Heading depth from 1 (top level) to 6
                                      anyOf:
                                        - const: 1
                                          type: number
                                        - const: 2
                                          type: number
                                        - const: 3
                                          type: number
                                        - const: 4
                                          type: number
                                        - const: 5
                                          type: number
                                        - const: 6
                                          type: number
                                    format:
                                      description: >-
                                        Section ordinal format: `twoDigit` (at
                                        least two digits: 01, 12; ordinals ≥ 100
                                        render in full) or `decimal` (1, 2, …)
                                      anyOf:
                                        - const: twoDigit
                                          type: string
                                        - const: decimal
                                          type: string
                                    style:
                                      additionalProperties: false
                                      type: object
                                      properties:
                                        font:
                                          pattern: ^\S(.*\S)?$
                                          description: >-
                                            Font slot as `<role>.<variant>` — role
                                            is `body`, `heading`, or a custom
                                            `typography.named` role; variant is one
                                            of regular, italic, bold, boldItalic
                                            (see `enums.fontVariant`; e.g.
                                            `heading.bold`). The shape is checked
                                            semantically at validate, not by this
                                            pattern: a misspelled variant, an
                                            undeclared role, a missing `.variant`,
                                            or a value that reads like a family name
                                            is rejected with a `didYouMean` pointing
                                            at the fix (use `set.family` for a
                                            typeface).
                                          type: string
                                        size:
                                          minimum: 1
                                          maximum: 999
                                          description: Font size in points
                                          type: number
                                        color:
                                          pattern: ^#([0-9a-fA-F]{3}|[0-9a-fA-F]{6})$
                                          description: Color as `#RGB` or `#RRGGBB`
                                          type: string
                                        opacity:
                                          minimum: 0
                                          maximum: 1
                                          description: Text opacity from 0 to 1
                                          type: number
                          style:
                            additionalProperties: false
                            type: object
                            properties:
                              font:
                                pattern: ^\S(.*\S)?$
                                description: >-
                                  Font slot as `<role>.<variant>` — role is
                                  `body`, `heading`, or a custom
                                  `typography.named` role; variant is one of
                                  regular, italic, bold, boldItalic (see
                                  `enums.fontVariant`; e.g. `heading.bold`). The
                                  shape is checked semantically at validate, not
                                  by this pattern: a misspelled variant, an
                                  undeclared role, a missing `.variant`, or a
                                  value that reads like a family name is
                                  rejected with a `didYouMean` pointing at the
                                  fix (use `set.family` for a typeface).
                                type: string
                              family:
                                description: >-
                                  A text family: a hosted weighted key, a
                                  declared Google Fonts display name, or a
                                  `typography.named` role reference
                                anyOf:
                                  - const: inter
                                    type: string
                                  - const: lora
                                    type: string
                                  - const: source-serif-4
                                    type: string
                                  - pattern: ^[A-Za-z][A-Za-z0-9 ]{0,63}$
                                    description: >-
                                      Google Fonts display name from the
                                      declared pool (e.g. `Playfair Display`)
                                    type: string
                                  - pattern: ^[a-z][a-z0-9-]{0,15}$
                                    description: >-
                                      Reference to a custom role declared in
                                      `typography.named` (e.g. `display`)
                                    type: string
                              size:
                                minimum: 1
                                maximum: 999
                                description: Font size in points
                                type: number
                              color:
                                pattern: ^#([0-9a-fA-F]{3}|[0-9a-fA-F]{6})$
                                description: Color as `#RGB` or `#RRGGBB`
                                type: string
                              spaceBefore:
                                minimum: 0
                                maximum: 9999
                                description: >-
                                  Vertical space reserved above the block, in
                                  points
                                type: number
                              spaceAfter:
                                minimum: 0
                                maximum: 9999
                                description: >-
                                  Vertical space reserved below the block, in
                                  points
                                type: number
                              lineHeight:
                                minimum: 1
                                maximum: 10
                                description: Line height as a multiple of the font size
                                type: number
                              align:
                                type: string
                                enum:
                                  - left
                                  - right
                                  - center
                                  - justify
                              letterSpacing:
                                minimum: -100
                                maximum: 100
                                description: >-
                                  Extra spacing between characters in points;
                                  negative values tighten
                                type: number
                              opacity:
                                minimum: 0
                                maximum: 1
                                description: Text opacity from 0 to 1
                                type: number
                              inline:
                                additionalProperties: false
                                type: object
                                properties:
                                  strong:
                                    additionalProperties: false
                                    type: object
                                    properties:
                                      color:
                                        description: >-
                                          Color as `#RGB` or `#RRGGBB`, or
                                          `inherit` to use the inherited color
                                        anyOf:
                                          - pattern: ^#([0-9a-fA-F]{3}|[0-9a-fA-F]{6})$
                                            description: Color as `#RGB` or `#RRGGBB`
                                            type: string
                                          - const: inherit
                                            type: string
                                  emphasis:
                                    additionalProperties: false
                                    type: object
                                    properties:
                                      color:
                                        description: >-
                                          Color as `#RGB` or `#RRGGBB`, or
                                          `inherit` to use the inherited color
                                        anyOf:
                                          - pattern: ^#([0-9a-fA-F]{3}|[0-9a-fA-F]{6})$
                                            description: Color as `#RGB` or `#RRGGBB`
                                            type: string
                                          - const: inherit
                                            type: string
                                  delete:
                                    additionalProperties: false
                                    type: object
                                    properties:
                                      color:
                                        description: >-
                                          Color as `#RGB` or `#RRGGBB`, or
                                          `inherit` to use the inherited color
                                        anyOf:
                                          - pattern: ^#([0-9a-fA-F]{3}|[0-9a-fA-F]{6})$
                                            description: Color as `#RGB` or `#RRGGBB`
                                            type: string
                                          - const: inherit
                                            type: string
                                      decorationStyle:
                                        type: string
                                        enum:
                                          - solid
                                          - double
                                          - dotted
                                          - dashed
                                          - wavy
                                      decorationColor:
                                        description: >-
                                          Color as `#RGB` or `#RRGGBB`, or
                                          `inherit` to use the inherited color
                                        anyOf:
                                          - pattern: ^#([0-9a-fA-F]{3}|[0-9a-fA-F]{6})$
                                            description: Color as `#RGB` or `#RRGGBB`
                                            type: string
                                          - const: inherit
                                            type: string
                                  mark:
                                    additionalProperties: false
                                    type: object
                                    properties:
                                      color:
                                        description: >-
                                          Color as `#RGB` or `#RRGGBB`, or
                                          `inherit` to use the inherited color
                                        anyOf:
                                          - pattern: ^#([0-9a-fA-F]{3}|[0-9a-fA-F]{6})$
                                            description: Color as `#RGB` or `#RRGGBB`
                                            type: string
                                          - const: inherit
                                            type: string
                                      background:
                                        description: >-
                                          Background fill behind highlighted text
                                          as `#RGB`/`#RRGGBB`, or `null` to
                                          suppress
                                        anyOf:
                                          - pattern: ^#([0-9a-fA-F]{3}|[0-9a-fA-F]{6})$
                                            description: Color as `#RGB` or `#RRGGBB`
                                            type: string
                                          - type: 'null'
                                      backgroundPadding:
                                        additionalProperties: false
                                        type: object
                                        properties:
                                          top:
                                            minimum: 0
                                            maximum: 9999
                                            description: Top padding, in points
                                            type: number
                                          right:
                                            minimum: 0
                                            maximum: 9999
                                            description: Right padding, in points
                                            type: number
                                          bottom:
                                            minimum: 0
                                            maximum: 9999
                                            description: Bottom padding, in points
                                            type: number
                                          left:
                                            minimum: 0
                                            maximum: 9999
                                            description: Left padding, in points
                                            type: number
                                          x:
                                            minimum: 0
                                            maximum: 9999
                                            description: >-
                                              Horizontal padding applied to both left
                                              and right when those sides are omitted,
                                              in points
                                            type: number
                                          'y':
                                            minimum: 0
                                            maximum: 9999
                                            description: >-
                                              Vertical padding applied to both top and
                                              bottom when those sides are omitted, in
                                              points
                                            type: number
                                      backgroundRadius:
                                        minimum: 0
                                        maximum: 14400
                                        description: >-
                                          Corner radius for each highlight
                                          background segment, in points
                                        type: number
                                  subscript:
                                    additionalProperties: false
                                    type: object
                                    properties:
                                      color:
                                        description: >-
                                          Color as `#RGB` or `#RRGGBB`, or
                                          `inherit` to use the inherited color
                                        anyOf:
                                          - pattern: ^#([0-9a-fA-F]{3}|[0-9a-fA-F]{6})$
                                            description: Color as `#RGB` or `#RRGGBB`
                                            type: string
                                          - const: inherit
                                            type: string
                                      sizeScale:
                                        minimum: 0.4
                                        maximum: 1
                                        description: >-
                                          Optical scale relative to the
                                          surrounding run (fraction of base size)
                                        type: number
                                      riseFraction:
                                        minimum: 0
                                        maximum: 1
                                        description: >-
                                          Baseline offset as a fraction of base
                                          size (not PDF points — contrast with
                                          code `baselineShift`). The renderer
                                          applies the sign (up for superscript,
                                          down for subscript)
                                        type: number
                                  superscript:
                                    additionalProperties: false
                                    type: object
                                    properties:
                                      color:
                                        description: >-
                                          Color as `#RGB` or `#RRGGBB`, or
                                          `inherit` to use the inherited color
                                        anyOf:
                                          - pattern: ^#([0-9a-fA-F]{3}|[0-9a-fA-F]{6})$
                                            description: Color as `#RGB` or `#RRGGBB`
                                            type: string
                                          - const: inherit
                                            type: string
                                      sizeScale:
                                        minimum: 0.4
                                        maximum: 1
                                        description: >-
                                          Optical scale relative to the
                                          surrounding run (fraction of base size)
                                        type: number
                                      riseFraction:
                                        minimum: 0
                                        maximum: 1
                                        description: >-
                                          Baseline offset as a fraction of base
                                          size (not PDF points — contrast with
                                          code `baselineShift`). The renderer
                                          applies the sign (up for superscript,
                                          down for subscript)
                                        type: number
                                  link:
                                    additionalProperties: false
                                    type: object
                                    properties:
                                      color:
                                        description: >-
                                          Color as `#RGB` or `#RRGGBB`, or
                                          `inherit` to use the inherited color
                                        anyOf:
                                          - pattern: ^#([0-9a-fA-F]{3}|[0-9a-fA-F]{6})$
                                            description: Color as `#RGB` or `#RRGGBB`
                                            type: string
                                          - const: inherit
                                            type: string
                                      decoration:
                                        type: string
                                        enum:
                                          - underline
                                          - lineThrough
                                          - none
                                      decorationStyle:
                                        type: string
                                        enum:
                                          - solid
                                          - double
                                          - dotted
                                          - dashed
                                          - wavy
                                      decorationColor:
                                        description: >-
                                          Color as `#RGB` or `#RRGGBB`, or
                                          `inherit` to use the inherited color
                                        anyOf:
                                          - pattern: ^#([0-9a-fA-F]{3}|[0-9a-fA-F]{6})$
                                            description: Color as `#RGB` or `#RRGGBB`
                                            type: string
                                          - const: inherit
                                            type: string
                                  code:
                                    additionalProperties: false
                                    description: >-
                                      Style overrides for inline code spans (``
                                      `code` ``): font, optical size scale, text
                                      color, background
                                      fill/padding/border/radius, baseline
                                      shift, opacity, and letter spacing. Pass
                                      `background: null` or `backgroundBorder:
                                      null` to suppress those.
                                    type: object
                                    properties:
                                      font:
                                        pattern: ^\S(.*\S)?$
                                        description: >-
                                          Font slot as `<role>.<variant>` — role
                                          is `body`, `heading`, or a custom
                                          `typography.named` role; variant is one
                                          of regular, italic, bold, boldItalic
                                          (see `enums.fontVariant`; e.g.
                                          `heading.bold`). The shape is checked
                                          semantically at validate, not by this
                                          pattern: a misspelled variant, an
                                          undeclared role, a missing `.variant`,
                                          or a value that reads like a family name
                                          is rejected with a `didYouMean` pointing
                                          at the fix (use `set.family` for a
                                          typeface).
                                        type: string
                                      sizeScale:
                                        minimum: 0.85
                                        maximum: 0.88
                                        description: >-
                                          Optical scale relative to the
                                          surrounding run. Accepted range is the
                                          0.85–0.88 band; out-of-range values are
                                          rejected
                                        type: number
                                      color:
                                        description: >-
                                          Color as `#RGB` or `#RRGGBB`, or
                                          `inherit` to use the inherited color
                                        anyOf:
                                          - pattern: ^#([0-9a-fA-F]{3}|[0-9a-fA-F]{6})$
                                            description: Color as `#RGB` or `#RRGGBB`
                                            type: string
                                          - const: inherit
                                            type: string
                                      background:
                                        description: >-
                                          Background fill behind the code run as
                                          `#RGB`/`#RRGGBB`, or `null` to suppress
                                        anyOf:
                                          - pattern: ^#([0-9a-fA-F]{3}|[0-9a-fA-F]{6})$
                                            description: Color as `#RGB` or `#RRGGBB`
                                            type: string
                                          - type: 'null'
                                      backgroundPadding:
                                        additionalProperties: false
                                        type: object
                                        properties:
                                          top:
                                            minimum: 0
                                            maximum: 9999
                                            description: Top padding, in points
                                            type: number
                                          right:
                                            minimum: 0
                                            maximum: 9999
                                            description: Right padding, in points
                                            type: number
                                          bottom:
                                            minimum: 0
                                            maximum: 9999
                                            description: Bottom padding, in points
                                            type: number
                                          left:
                                            minimum: 0
                                            maximum: 9999
                                            description: Left padding, in points
                                            type: number
                                          x:
                                            minimum: 0
                                            maximum: 9999
                                            description: >-
                                              Horizontal padding applied to both left
                                              and right when those sides are omitted,
                                              in points
                                            type: number
                                          'y':
                                            minimum: 0
                                            maximum: 9999
                                            description: >-
                                              Vertical padding applied to both top and
                                              bottom when those sides are omitted, in
                                              points
                                            type: number
                                      backgroundBorder:
                                        description: >-
                                          Micro-border around each cloned
                                          background segment, or `null` to
                                          suppress
                                        anyOf:
                                          - additionalProperties: false
                                            type: object
                                            required:
                                              - width
                                              - color
                                            properties:
                                              width:
                                                minimum: 0.1
                                                maximum: 50
                                                description: Border thickness in points
                                                type: number
                                              color:
                                                pattern: ^#([0-9a-fA-F]{3}|[0-9a-fA-F]{6})$
                                                description: Color as `#RGB` or `#RRGGBB`
                                                type: string
                                              opacity:
                                                minimum: 0
                                                maximum: 1
                                                description: Border opacity from 0 to 1
                                                type: number
                                              dash:
                                                description: >-
                                                  Dash pattern as `[dash, gap]` lengths in
                                                  points; both `0` is rejected
                                                type: array
                                                items:
                                                  minimum: 0
                                                  maximum: 1000
                                                  type: number
                                                minItems: 2
                                                maxItems: 2
                                          - type: 'null'
                                      backgroundRadius:
                                        minimum: 0
                                        maximum: 14400
                                        description: >-
                                          Corner radius for each background
                                          segment, in points
                                        type: number
                                      baselineShift:
                                        minimum: -999
                                        maximum: 999
                                        description: >-
                                          PDF text-rise adjustment in points;
                                          positive values raise the code glyphs
                                        type: number
                                      opacity:
                                        minimum: 0
                                        maximum: 1
                                        description: Fill opacity from 0 to 1
                                        type: number
                                      letterSpacing:
                                        minimum: -100
                                        maximum: 100
                                        description: >-
                                          Extra spacing between code glyphs in
                                          points; negative values tighten
                                        type: number
                      bottomCenter:
                        additionalProperties: false
                        type: object
                        required:
                          - content
                        properties:
                          content:
                            minItems: 1
                            maxItems: 16
                            description: Ordered fragments concatenated to fill the slot
                            type: array
                            items:
                              description: >-
                                A header/footer fragment: literal text, an image
                                (logo/letterhead), page numbers, document title,
                                running section title, or section ordinal at a
                                heading depth. An `image` fragment must be the
                                only fragment in its slot — it is not mixed with
                                text fragments.
                              anyOf:
                                - additionalProperties: false
                                  type: object
                                  required:
                                    - kind
                                    - value
                                  properties:
                                    kind:
                                      const: text
                                      type: string
                                    value:
                                      minLength: 1
                                      maxLength: 256
                                      pattern: \S
                                      description: Literal text for this fragment
                                      type: string
                                    style:
                                      additionalProperties: false
                                      type: object
                                      properties:
                                        font:
                                          pattern: ^\S(.*\S)?$
                                          description: >-
                                            Font slot as `<role>.<variant>` — role
                                            is `body`, `heading`, or a custom
                                            `typography.named` role; variant is one
                                            of regular, italic, bold, boldItalic
                                            (see `enums.fontVariant`; e.g.
                                            `heading.bold`). The shape is checked
                                            semantically at validate, not by this
                                            pattern: a misspelled variant, an
                                            undeclared role, a missing `.variant`,
                                            or a value that reads like a family name
                                            is rejected with a `didYouMean` pointing
                                            at the fix (use `set.family` for a
                                            typeface).
                                          type: string
                                        size:
                                          minimum: 1
                                          maximum: 999
                                          description: Font size in points
                                          type: number
                                        color:
                                          pattern: ^#([0-9a-fA-F]{3}|[0-9a-fA-F]{6})$
                                          description: Color as `#RGB` or `#RRGGBB`
                                          type: string
                                        opacity:
                                          minimum: 0
                                          maximum: 1
                                          description: Text opacity from 0 to 1
                                          type: number
                                - additionalProperties: false
                                  type: object
                                  required:
                                    - kind
                                    - url
                                  properties:
                                    kind:
                                      const: image
                                      type: string
                                    url:
                                      minLength: 1
                                      maxLength: 1048576
                                      pattern: ^(https://|data:image/)
                                      description: >-
                                        HTTPS or base64 `data:image/...` URL of
                                        the header/footer image (typically a
                                        brand logo or letterhead). Fetched under
                                        the same fixed, non-configurable image
                                        policy as Markdown images (private IPs
                                        blocked, DNS-rebinding mitigation, 10
                                        MiB cap); a fetch or decode failure
                                        degrades to a diagnostic and the image
                                        is omitted rather than failing the
                                        render. Rendered as a decorative PDF/UA
                                        pagination artifact (no alt text).
                                      type: string
                                    width:
                                      minimum: 1
                                      maximum: 14400
                                      description: >-
                                        Rendered image width in PDF points. When
                                        omitted, the intrinsic width is used,
                                        clamped to the slot band width. Set
                                        `width` or `height` to scale a logo
                                        down.
                                      type: number
                                    height:
                                      minimum: 1
                                      maximum: 14400
                                      description: >-
                                        Rendered image height in PDF points.
                                        When omitted, height follows the aspect
                                        ratio of the resolved width.
                                      type: number
                                    fit:
                                      description: >-
                                        Block-only. How the image fills its
                                        width/height box: `none` (intrinsic
                                        sizing), `contain`, `cover`, or `fill`.
                                        Used with `height` for hero-style
                                        layouts.
                                      anyOf:
                                        - const: none
                                          type: string
                                        - const: contain
                                          type: string
                                        - const: cover
                                          type: string
                                        - const: fill
                                          type: string
                                    align:
                                      description: >-
                                        Block-only. Horizontal alignment of the
                                        image within the content area: `start`
                                        (left edge in LTR), `center`, or `end`
                                        (right edge in LTR). Ignored for inline
                                        images (line flow controls position).
                                      anyOf:
                                        - const: start
                                          type: string
                                        - const: center
                                          type: string
                                        - const: end
                                          type: string
                                    opacity:
                                      minimum: 0
                                      maximum: 1
                                      description: Image opacity from 0 to 1.
                                      type: number
                                - additionalProperties: false
                                  type: object
                                  required:
                                    - kind
                                  properties:
                                    kind:
                                      const: pageNumber
                                      type: string
                                    style:
                                      additionalProperties: false
                                      type: object
                                      properties:
                                        font:
                                          pattern: ^\S(.*\S)?$
                                          description: >-
                                            Font slot as `<role>.<variant>` — role
                                            is `body`, `heading`, or a custom
                                            `typography.named` role; variant is one
                                            of regular, italic, bold, boldItalic
                                            (see `enums.fontVariant`; e.g.
                                            `heading.bold`). The shape is checked
                                            semantically at validate, not by this
                                            pattern: a misspelled variant, an
                                            undeclared role, a missing `.variant`,
                                            or a value that reads like a family name
                                            is rejected with a `didYouMean` pointing
                                            at the fix (use `set.family` for a
                                            typeface).
                                          type: string
                                        size:
                                          minimum: 1
                                          maximum: 999
                                          description: Font size in points
                                          type: number
                                        color:
                                          pattern: ^#([0-9a-fA-F]{3}|[0-9a-fA-F]{6})$
                                          description: Color as `#RGB` or `#RRGGBB`
                                          type: string
                                        opacity:
                                          minimum: 0
                                          maximum: 1
                                          description: Text opacity from 0 to 1
                                          type: number
                                - additionalProperties: false
                                  type: object
                                  required:
                                    - kind
                                  properties:
                                    kind:
                                      const: totalPages
                                      type: string
                                    style:
                                      additionalProperties: false
                                      type: object
                                      properties:
                                        font:
                                          pattern: ^\S(.*\S)?$
                                          description: >-
                                            Font slot as `<role>.<variant>` — role
                                            is `body`, `heading`, or a custom
                                            `typography.named` role; variant is one
                                            of regular, italic, bold, boldItalic
                                            (see `enums.fontVariant`; e.g.
                                            `heading.bold`). The shape is checked
                                            semantically at validate, not by this
                                            pattern: a misspelled variant, an
                                            undeclared role, a missing `.variant`,
                                            or a value that reads like a family name
                                            is rejected with a `didYouMean` pointing
                                            at the fix (use `set.family` for a
                                            typeface).
                                          type: string
                                        size:
                                          minimum: 1
                                          maximum: 999
                                          description: Font size in points
                                          type: number
                                        color:
                                          pattern: ^#([0-9a-fA-F]{3}|[0-9a-fA-F]{6})$
                                          description: Color as `#RGB` or `#RRGGBB`
                                          type: string
                                        opacity:
                                          minimum: 0
                                          maximum: 1
                                          description: Text opacity from 0 to 1
                                          type: number
                                - additionalProperties: false
                                  type: object
                                  required:
                                    - kind
                                  properties:
                                    kind:
                                      const: documentTitle
                                      type: string
                                    style:
                                      additionalProperties: false
                                      type: object
                                      properties:
                                        font:
                                          pattern: ^\S(.*\S)?$
                                          description: >-
                                            Font slot as `<role>.<variant>` — role
                                            is `body`, `heading`, or a custom
                                            `typography.named` role; variant is one
                                            of regular, italic, bold, boldItalic
                                            (see `enums.fontVariant`; e.g.
                                            `heading.bold`). The shape is checked
                                            semantically at validate, not by this
                                            pattern: a misspelled variant, an
                                            undeclared role, a missing `.variant`,
                                            or a value that reads like a family name
                                            is rejected with a `didYouMean` pointing
                                            at the fix (use `set.family` for a
                                            typeface).
                                          type: string
                                        size:
                                          minimum: 1
                                          maximum: 999
                                          description: Font size in points
                                          type: number
                                        color:
                                          pattern: ^#([0-9a-fA-F]{3}|[0-9a-fA-F]{6})$
                                          description: Color as `#RGB` or `#RRGGBB`
                                          type: string
                                        opacity:
                                          minimum: 0
                                          maximum: 1
                                          description: Text opacity from 0 to 1
                                          type: number
                                - additionalProperties: false
                                  type: object
                                  required:
                                    - kind
                                  properties:
                                    kind:
                                      const: sectionTitle
                                      type: string
                                    depth:
                                      description: Heading depth from 1 (top level) to 6
                                      anyOf:
                                        - const: 1
                                          type: number
                                        - const: 2
                                          type: number
                                        - const: 3
                                          type: number
                                        - const: 4
                                          type: number
                                        - const: 5
                                          type: number
                                        - const: 6
                                          type: number
                                    style:
                                      additionalProperties: false
                                      type: object
                                      properties:
                                        font:
                                          pattern: ^\S(.*\S)?$
                                          description: >-
                                            Font slot as `<role>.<variant>` — role
                                            is `body`, `heading`, or a custom
                                            `typography.named` role; variant is one
                                            of regular, italic, bold, boldItalic
                                            (see `enums.fontVariant`; e.g.
                                            `heading.bold`). The shape is checked
                                            semantically at validate, not by this
                                            pattern: a misspelled variant, an
                                            undeclared role, a missing `.variant`,
                                            or a value that reads like a family name
                                            is rejected with a `didYouMean` pointing
                                            at the fix (use `set.family` for a
                                            typeface).
                                          type: string
                                        size:
                                          minimum: 1
                                          maximum: 999
                                          description: Font size in points
                                          type: number
                                        color:
                                          pattern: ^#([0-9a-fA-F]{3}|[0-9a-fA-F]{6})$
                                          description: Color as `#RGB` or `#RRGGBB`
                                          type: string
                                        opacity:
                                          minimum: 0
                                          maximum: 1
                                          description: Text opacity from 0 to 1
                                          type: number
                                - additionalProperties: false
                                  type: object
                                  required:
                                    - kind
                                  properties:
                                    kind:
                                      const: sectionIndex
                                      type: string
                                    depth:
                                      description: Heading depth from 1 (top level) to 6
                                      anyOf:
                                        - const: 1
                                          type: number
                                        - const: 2
                                          type: number
                                        - const: 3
                                          type: number
                                        - const: 4
                                          type: number
                                        - const: 5
                                          type: number
                                        - const: 6
                                          type: number
                                    format:
                                      description: >-
                                        Section ordinal format: `twoDigit` (at
                                        least two digits: 01, 12; ordinals ≥ 100
                                        render in full) or `decimal` (1, 2, …)
                                      anyOf:
                                        - const: twoDigit
                                          type: string
                                        - const: decimal
                                          type: string
                                    style:
                                      additionalProperties: false
                                      type: object
                                      properties:
                                        font:
                                          pattern: ^\S(.*\S)?$
                                          description: >-
                                            Font slot as `<role>.<variant>` — role
                                            is `body`, `heading`, or a custom
                                            `typography.named` role; variant is one
                                            of regular, italic, bold, boldItalic
                                            (see `enums.fontVariant`; e.g.
                                            `heading.bold`). The shape is checked
                                            semantically at validate, not by this
                                            pattern: a misspelled variant, an
                                            undeclared role, a missing `.variant`,
                                            or a value that reads like a family name
                                            is rejected with a `didYouMean` pointing
                                            at the fix (use `set.family` for a
                                            typeface).
                                          type: string
                                        size:
                                          minimum: 1
                                          maximum: 999
                                          description: Font size in points
                                          type: number
                                        color:
                                          pattern: ^#([0-9a-fA-F]{3}|[0-9a-fA-F]{6})$
                                          description: Color as `#RGB` or `#RRGGBB`
                                          type: string
                                        opacity:
                                          minimum: 0
                                          maximum: 1
                                          description: Text opacity from 0 to 1
                                          type: number
                          style:
                            additionalProperties: false
                            type: object
                            properties:
                              font:
                                pattern: ^\S(.*\S)?$
                                description: >-
                                  Font slot as `<role>.<variant>` — role is
                                  `body`, `heading`, or a custom
                                  `typography.named` role; variant is one of
                                  regular, italic, bold, boldItalic (see
                                  `enums.fontVariant`; e.g. `heading.bold`). The
                                  shape is checked semantically at validate, not
                                  by this pattern: a misspelled variant, an
                                  undeclared role, a missing `.variant`, or a
                                  value that reads like a family name is
                                  rejected with a `didYouMean` pointing at the
                                  fix (use `set.family` for a typeface).
                                type: string
                              family:
                                description: >-
                                  A text family: a hosted weighted key, a
                                  declared Google Fonts display name, or a
                                  `typography.named` role reference
                                anyOf:
                                  - const: inter
                                    type: string
                                  - const: lora
                                    type: string
                                  - const: source-serif-4
                                    type: string
                                  - pattern: ^[A-Za-z][A-Za-z0-9 ]{0,63}$
                                    description: >-
                                      Google Fonts display name from the
                                      declared pool (e.g. `Playfair Display`)
                                    type: string
                                  - pattern: ^[a-z][a-z0-9-]{0,15}$
                                    description: >-
                                      Reference to a custom role declared in
                                      `typography.named` (e.g. `display`)
                                    type: string
                              size:
                                minimum: 1
                                maximum: 999
                                description: Font size in points
                                type: number
                              color:
                                pattern: ^#([0-9a-fA-F]{3}|[0-9a-fA-F]{6})$
                                description: Color as `#RGB` or `#RRGGBB`
                                type: string
                              spaceBefore:
                                minimum: 0
                                maximum: 9999
                                description: >-
                                  Vertical space reserved above the block, in
                                  points
                                type: number
                              spaceAfter:
                                minimum: 0
                                maximum: 9999
                                description: >-
                                  Vertical space reserved below the block, in
                                  points
                                type: number
                              lineHeight:
                                minimum: 1
                                maximum: 10
                                description: Line height as a multiple of the font size
                                type: number
                              align:
                                type: string
                                enum:
                                  - left
                                  - right
                                  - center
                                  - justify
                              letterSpacing:
                                minimum: -100
                                maximum: 100
                                description: >-
                                  Extra spacing between characters in points;
                                  negative values tighten
                                type: number
                              opacity:
                                minimum: 0
                                maximum: 1
                                description: Text opacity from 0 to 1
                                type: number
                              inline:
                                additionalProperties: false
                                type: object
                                properties:
                                  strong:
                                    additionalProperties: false
                                    type: object
                                    properties:
                                      color:
                                        description: >-
                                          Color as `#RGB` or `#RRGGBB`, or
                                          `inherit` to use the inherited color
                                        anyOf:
                                          - pattern: ^#([0-9a-fA-F]{3}|[0-9a-fA-F]{6})$
                                            description: Color as `#RGB` or `#RRGGBB`
                                            type: string
                                          - const: inherit
                                            type: string
                                  emphasis:
                                    additionalProperties: false
                                    type: object
                                    properties:
                                      color:
                                        description: >-
                                          Color as `#RGB` or `#RRGGBB`, or
                                          `inherit` to use the inherited color
                                        anyOf:
                                          - pattern: ^#([0-9a-fA-F]{3}|[0-9a-fA-F]{6})$
                                            description: Color as `#RGB` or `#RRGGBB`
                                            type: string
                                          - const: inherit
                                            type: string
                                  delete:
                                    additionalProperties: false
                                    type: object
                                    properties:
                                      color:
                                        description: >-
                                          Color as `#RGB` or `#RRGGBB`, or
                                          `inherit` to use the inherited color
                                        anyOf:
                                          - pattern: ^#([0-9a-fA-F]{3}|[0-9a-fA-F]{6})$
                                            description: Color as `#RGB` or `#RRGGBB`
                                            type: string
                                          - const: inherit
                                            type: string
                                      decorationStyle:
                                        type: string
                                        enum:
                                          - solid
                                          - double
                                          - dotted
                                          - dashed
                                          - wavy
                                      decorationColor:
                                        description: >-
                                          Color as `#RGB` or `#RRGGBB`, or
                                          `inherit` to use the inherited color
                                        anyOf:
                                          - pattern: ^#([0-9a-fA-F]{3}|[0-9a-fA-F]{6})$
                                            description: Color as `#RGB` or `#RRGGBB`
                                            type: string
                                          - const: inherit
                                            type: string
                                  mark:
                                    additionalProperties: false
                                    type: object
                                    properties:
                                      color:
                                        description: >-
                                          Color as `#RGB` or `#RRGGBB`, or
                                          `inherit` to use the inherited color
                                        anyOf:
                                          - pattern: ^#([0-9a-fA-F]{3}|[0-9a-fA-F]{6})$
                                            description: Color as `#RGB` or `#RRGGBB`
                                            type: string
                                          - const: inherit
                                            type: string
                                      background:
                                        description: >-
                                          Background fill behind highlighted text
                                          as `#RGB`/`#RRGGBB`, or `null` to
                                          suppress
                                        anyOf:
                                          - pattern: ^#([0-9a-fA-F]{3}|[0-9a-fA-F]{6})$
                                            description: Color as `#RGB` or `#RRGGBB`
                                            type: string
                                          - type: 'null'
                                      backgroundPadding:
                                        additionalProperties: false
                                        type: object
                                        properties:
                                          top:
                                            minimum: 0
                                            maximum: 9999
                                            description: Top padding, in points
                                            type: number
                                          right:
                                            minimum: 0
                                            maximum: 9999
                                            description: Right padding, in points
                                            type: number
                                          bottom:
                                            minimum: 0
                                            maximum: 9999
                                            description: Bottom padding, in points
                                            type: number
                                          left:
                                            minimum: 0
                                            maximum: 9999
                                            description: Left padding, in points
                                            type: number
                                          x:
                                            minimum: 0
                                            maximum: 9999
                                            description: >-
                                              Horizontal padding applied to both left
                                              and right when those sides are omitted,
                                              in points
                                            type: number
                                          'y':
                                            minimum: 0
                                            maximum: 9999
                                            description: >-
                                              Vertical padding applied to both top and
                                              bottom when those sides are omitted, in
                                              points
                                            type: number
                                      backgroundRadius:
                                        minimum: 0
                                        maximum: 14400
                                        description: >-
                                          Corner radius for each highlight
                                          background segment, in points
                                        type: number
                                  subscript:
                                    additionalProperties: false
                                    type: object
                                    properties:
                                      color:
                                        description: >-
                                          Color as `#RGB` or `#RRGGBB`, or
                                          `inherit` to use the inherited color
                                        anyOf:
                                          - pattern: ^#([0-9a-fA-F]{3}|[0-9a-fA-F]{6})$
                                            description: Color as `#RGB` or `#RRGGBB`
                                            type: string
                                          - const: inherit
                                            type: string
                                      sizeScale:
                                        minimum: 0.4
                                        maximum: 1
                                        description: >-
                                          Optical scale relative to the
                                          surrounding run (fraction of base size)
                                        type: number
                                      riseFraction:
                                        minimum: 0
                                        maximum: 1
                                        description: >-
                                          Baseline offset as a fraction of base
                                          size (not PDF points — contrast with
                                          code `baselineShift`). The renderer
                                          applies the sign (up for superscript,
                                          down for subscript)
                                        type: number
                                  superscript:
                                    additionalProperties: false
                                    type: object
                                    properties:
                                      color:
                                        description: >-
                                          Color as `#RGB` or `#RRGGBB`, or
                                          `inherit` to use the inherited color
                                        anyOf:
                                          - pattern: ^#([0-9a-fA-F]{3}|[0-9a-fA-F]{6})$
                                            description: Color as `#RGB` or `#RRGGBB`
                                            type: string
                                          - const: inherit
                                            type: string
                                      sizeScale:
                                        minimum: 0.4
                                        maximum: 1
                                        description: >-
                                          Optical scale relative to the
                                          surrounding run (fraction of base size)
                                        type: number
                                      riseFraction:
                                        minimum: 0
                                        maximum: 1
                                        description: >-
                                          Baseline offset as a fraction of base
                                          size (not PDF points — contrast with
                                          code `baselineShift`). The renderer
                                          applies the sign (up for superscript,
                                          down for subscript)
                                        type: number
                                  link:
                                    additionalProperties: false
                                    type: object
                                    properties:
                                      color:
                                        description: >-
                                          Color as `#RGB` or `#RRGGBB`, or
                                          `inherit` to use the inherited color
                                        anyOf:
                                          - pattern: ^#([0-9a-fA-F]{3}|[0-9a-fA-F]{6})$
                                            description: Color as `#RGB` or `#RRGGBB`
                                            type: string
                                          - const: inherit
                                            type: string
                                      decoration:
                                        type: string
                                        enum:
                                          - underline
                                          - lineThrough
                                          - none
                                      decorationStyle:
                                        type: string
                                        enum:
                                          - solid
                                          - double
                                          - dotted
                                          - dashed
                                          - wavy
                                      decorationColor:
                                        description: >-
                                          Color as `#RGB` or `#RRGGBB`, or
                                          `inherit` to use the inherited color
                                        anyOf:
                                          - pattern: ^#([0-9a-fA-F]{3}|[0-9a-fA-F]{6})$
                                            description: Color as `#RGB` or `#RRGGBB`
                                            type: string
                                          - const: inherit
                                            type: string
                                  code:
                                    additionalProperties: false
                                    description: >-
                                      Style overrides for inline code spans (``
                                      `code` ``): font, optical size scale, text
                                      color, background
                                      fill/padding/border/radius, baseline
                                      shift, opacity, and letter spacing. Pass
                                      `background: null` or `backgroundBorder:
                                      null` to suppress those.
                                    type: object
                                    properties:
                                      font:
                                        pattern: ^\S(.*\S)?$
                                        description: >-
                                          Font slot as `<role>.<variant>` — role
                                          is `body`, `heading`, or a custom
                                          `typography.named` role; variant is one
                                          of regular, italic, bold, boldItalic
                                          (see `enums.fontVariant`; e.g.
                                          `heading.bold`). The shape is checked
                                          semantically at validate, not by this
                                          pattern: a misspelled variant, an
                                          undeclared role, a missing `.variant`,
                                          or a value that reads like a family name
                                          is rejected with a `didYouMean` pointing
                                          at the fix (use `set.family` for a
                                          typeface).
                                        type: string
                                      sizeScale:
                                        minimum: 0.85
                                        maximum: 0.88
                                        description: >-
                                          Optical scale relative to the
                                          surrounding run. Accepted range is the
                                          0.85–0.88 band; out-of-range values are
                                          rejected
                                        type: number
                                      color:
                                        description: >-
                                          Color as `#RGB` or `#RRGGBB`, or
                                          `inherit` to use the inherited color
                                        anyOf:
                                          - pattern: ^#([0-9a-fA-F]{3}|[0-9a-fA-F]{6})$
                                            description: Color as `#RGB` or `#RRGGBB`
                                            type: string
                                          - const: inherit
                                            type: string
                                      background:
                                        description: >-
                                          Background fill behind the code run as
                                          `#RGB`/`#RRGGBB`, or `null` to suppress
                                        anyOf:
                                          - pattern: ^#([0-9a-fA-F]{3}|[0-9a-fA-F]{6})$
                                            description: Color as `#RGB` or `#RRGGBB`
                                            type: string
                                          - type: 'null'
                                      backgroundPadding:
                                        additionalProperties: false
                                        type: object
                                        properties:
                                          top:
                                            minimum: 0
                                            maximum: 9999
                                            description: Top padding, in points
                                            type: number
                                          right:
                                            minimum: 0
                                            maximum: 9999
                                            description: Right padding, in points
                                            type: number
                                          bottom:
                                            minimum: 0
                                            maximum: 9999
                                            description: Bottom padding, in points
                                            type: number
                                          left:
                                            minimum: 0
                                            maximum: 9999
                                            description: Left padding, in points
                                            type: number
                                          x:
                                            minimum: 0
                                            maximum: 9999
                                            description: >-
                                              Horizontal padding applied to both left
                                              and right when those sides are omitted,
                                              in points
                                            type: number
                                          'y':
                                            minimum: 0
                                            maximum: 9999
                                            description: >-
                                              Vertical padding applied to both top and
                                              bottom when those sides are omitted, in
                                              points
                                            type: number
                                      backgroundBorder:
                                        description: >-
                                          Micro-border around each cloned
                                          background segment, or `null` to
                                          suppress
                                        anyOf:
                                          - additionalProperties: false
                                            type: object
                                            required:
                                              - width
                                              - color
                                            properties:
                                              width:
                                                minimum: 0.1
                                                maximum: 50
                                                description: Border thickness in points
                                                type: number
                                              color:
                                                pattern: ^#([0-9a-fA-F]{3}|[0-9a-fA-F]{6})$
                                                description: Color as `#RGB` or `#RRGGBB`
                                                type: string
                                              opacity:
                                                minimum: 0
                                                maximum: 1
                                                description: Border opacity from 0 to 1
                                                type: number
                                              dash:
                                                description: >-
                                                  Dash pattern as `[dash, gap]` lengths in
                                                  points; both `0` is rejected
                                                type: array
                                                items:
                                                  minimum: 0
                                                  maximum: 1000
                                                  type: number
                                                minItems: 2
                                                maxItems: 2
                                          - type: 'null'
                                      backgroundRadius:
                                        minimum: 0
                                        maximum: 14400
                                        description: >-
                                          Corner radius for each background
                                          segment, in points
                                        type: number
                                      baselineShift:
                                        minimum: -999
                                        maximum: 999
                                        description: >-
                                          PDF text-rise adjustment in points;
                                          positive values raise the code glyphs
                                        type: number
                                      opacity:
                                        minimum: 0
                                        maximum: 1
                                        description: Fill opacity from 0 to 1
                                        type: number
                                      letterSpacing:
                                        minimum: -100
                                        maximum: 100
                                        description: >-
                                          Extra spacing between code glyphs in
                                          points; negative values tighten
                                        type: number
                      bottomRight:
                        additionalProperties: false
                        type: object
                        required:
                          - content
                        properties:
                          content:
                            minItems: 1
                            maxItems: 16
                            description: Ordered fragments concatenated to fill the slot
                            type: array
                            items:
                              description: >-
                                A header/footer fragment: literal text, an image
                                (logo/letterhead), page numbers, document title,
                                running section title, or section ordinal at a
                                heading depth. An `image` fragment must be the
                                only fragment in its slot — it is not mixed with
                                text fragments.
                              anyOf:
                                - additionalProperties: false
                                  type: object
                                  required:
                                    - kind
                                    - value
                                  properties:
                                    kind:
                                      const: text
                                      type: string
                                    value:
                                      minLength: 1
                                      maxLength: 256
                                      pattern: \S
                                      description: Literal text for this fragment
                                      type: string
                                    style:
                                      additionalProperties: false
                                      type: object
                                      properties:
                                        font:
                                          pattern: ^\S(.*\S)?$
                                          description: >-
                                            Font slot as `<role>.<variant>` — role
                                            is `body`, `heading`, or a custom
                                            `typography.named` role; variant is one
                                            of regular, italic, bold, boldItalic
                                            (see `enums.fontVariant`; e.g.
                                            `heading.bold`). The shape is checked
                                            semantically at validate, not by this
                                            pattern: a misspelled variant, an
                                            undeclared role, a missing `.variant`,
                                            or a value that reads like a family name
                                            is rejected with a `didYouMean` pointing
                                            at the fix (use `set.family` for a
                                            typeface).
                                          type: string
                                        size:
                                          minimum: 1
                                          maximum: 999
                                          description: Font size in points
                                          type: number
                                        color:
                                          pattern: ^#([0-9a-fA-F]{3}|[0-9a-fA-F]{6})$
                                          description: Color as `#RGB` or `#RRGGBB`
                                          type: string
                                        opacity:
                                          minimum: 0
                                          maximum: 1
                                          description: Text opacity from 0 to 1
                                          type: number
                                - additionalProperties: false
                                  type: object
                                  required:
                                    - kind
                                    - url
                                  properties:
                                    kind:
                                      const: image
                                      type: string
                                    url:
                                      minLength: 1
                                      maxLength: 1048576
                                      pattern: ^(https://|data:image/)
                                      description: >-
                                        HTTPS or base64 `data:image/...` URL of
                                        the header/footer image (typically a
                                        brand logo or letterhead). Fetched under
                                        the same fixed, non-configurable image
                                        policy as Markdown images (private IPs
                                        blocked, DNS-rebinding mitigation, 10
                                        MiB cap); a fetch or decode failure
                                        degrades to a diagnostic and the image
                                        is omitted rather than failing the
                                        render. Rendered as a decorative PDF/UA
                                        pagination artifact (no alt text).
                                      type: string
                                    width:
                                      minimum: 1
                                      maximum: 14400
                                      description: >-
                                        Rendered image width in PDF points. When
                                        omitted, the intrinsic width is used,
                                        clamped to the slot band width. Set
                                        `width` or `height` to scale a logo
                                        down.
                                      type: number
                                    height:
                                      minimum: 1
                                      maximum: 14400
                                      description: >-
                                        Rendered image height in PDF points.
                                        When omitted, height follows the aspect
                                        ratio of the resolved width.
                                      type: number
                                    fit:
                                      description: >-
                                        Block-only. How the image fills its
                                        width/height box: `none` (intrinsic
                                        sizing), `contain`, `cover`, or `fill`.
                                        Used with `height` for hero-style
                                        layouts.
                                      anyOf:
                                        - const: none
                                          type: string
                                        - const: contain
                                          type: string
                                        - const: cover
                                          type: string
                                        - const: fill
                                          type: string
                                    align:
                                      description: >-
                                        Block-only. Horizontal alignment of the
                                        image within the content area: `start`
                                        (left edge in LTR), `center`, or `end`
                                        (right edge in LTR). Ignored for inline
                                        images (line flow controls position).
                                      anyOf:
                                        - const: start
                                          type: string
                                        - const: center
                                          type: string
                                        - const: end
                                          type: string
                                    opacity:
                                      minimum: 0
                                      maximum: 1
                                      description: Image opacity from 0 to 1.
                                      type: number
                                - additionalProperties: false
                                  type: object
                                  required:
                                    - kind
                                  properties:
                                    kind:
                                      const: pageNumber
                                      type: string
                                    style:
                                      additionalProperties: false
                                      type: object
                                      properties:
                                        font:
                                          pattern: ^\S(.*\S)?$
                                          description: >-
                                            Font slot as `<role>.<variant>` — role
                                            is `body`, `heading`, or a custom
                                            `typography.named` role; variant is one
                                            of regular, italic, bold, boldItalic
                                            (see `enums.fontVariant`; e.g.
                                            `heading.bold`). The shape is checked
                                            semantically at validate, not by this
                                            pattern: a misspelled variant, an
                                            undeclared role, a missing `.variant`,
                                            or a value that reads like a family name
                                            is rejected with a `didYouMean` pointing
                                            at the fix (use `set.family` for a
                                            typeface).
                                          type: string
                                        size:
                                          minimum: 1
                                          maximum: 999
                                          description: Font size in points
                                          type: number
                                        color:
                                          pattern: ^#([0-9a-fA-F]{3}|[0-9a-fA-F]{6})$
                                          description: Color as `#RGB` or `#RRGGBB`
                                          type: string
                                        opacity:
                                          minimum: 0
                                          maximum: 1
                                          description: Text opacity from 0 to 1
                                          type: number
                                - additionalProperties: false
                                  type: object
                                  required:
                                    - kind
                                  properties:
                                    kind:
                                      const: totalPages
                                      type: string
                                    style:
                                      additionalProperties: false
                                      type: object
                                      properties:
                                        font:
                                          pattern: ^\S(.*\S)?$
                                          description: >-
                                            Font slot as `<role>.<variant>` — role
                                            is `body`, `heading`, or a custom
                                            `typography.named` role; variant is one
                                            of regular, italic, bold, boldItalic
                                            (see `enums.fontVariant`; e.g.
                                            `heading.bold`). The shape is checked
                                            semantically at validate, not by this
                                            pattern: a misspelled variant, an
                                            undeclared role, a missing `.variant`,
                                            or a value that reads like a family name
                                            is rejected with a `didYouMean` pointing
                                            at the fix (use `set.family` for a
                                            typeface).
                                          type: string
                                        size:
                                          minimum: 1
                                          maximum: 999
                                          description: Font size in points
                                          type: number
                                        color:
                                          pattern: ^#([0-9a-fA-F]{3}|[0-9a-fA-F]{6})$
                                          description: Color as `#RGB` or `#RRGGBB`
                                          type: string
                                        opacity:
                                          minimum: 0
                                          maximum: 1
                                          description: Text opacity from 0 to 1
                                          type: number
                                - additionalProperties: false
                                  type: object
                                  required:
                                    - kind
                                  properties:
                                    kind:
                                      const: documentTitle
                                      type: string
                                    style:
                                      additionalProperties: false
                                      type: object
                                      properties:
                                        font:
                                          pattern: ^\S(.*\S)?$
                                          description: >-
                                            Font slot as `<role>.<variant>` — role
                                            is `body`, `heading`, or a custom
                                            `typography.named` role; variant is one
                                            of regular, italic, bold, boldItalic
                                            (see `enums.fontVariant`; e.g.
                                            `heading.bold`). The shape is checked
                                            semantically at validate, not by this
                                            pattern: a misspelled variant, an
                                            undeclared role, a missing `.variant`,
                                            or a value that reads like a family name
                                            is rejected with a `didYouMean` pointing
                                            at the fix (use `set.family` for a
                                            typeface).
                                          type: string
                                        size:
                                          minimum: 1
                                          maximum: 999
                                          description: Font size in points
                                          type: number
                                        color:
                                          pattern: ^#([0-9a-fA-F]{3}|[0-9a-fA-F]{6})$
                                          description: Color as `#RGB` or `#RRGGBB`
                                          type: string
                                        opacity:
                                          minimum: 0
                                          maximum: 1
                                          description: Text opacity from 0 to 1
                                          type: number
                                - additionalProperties: false
                                  type: object
                                  required:
                                    - kind
                                  properties:
                                    kind:
                                      const: sectionTitle
                                      type: string
                                    depth:
                                      description: Heading depth from 1 (top level) to 6
                                      anyOf:
                                        - const: 1
                                          type: number
                                        - const: 2
                                          type: number
                                        - const: 3
                                          type: number
                                        - const: 4
                                          type: number
                                        - const: 5
                                          type: number
                                        - const: 6
                                          type: number
                                    style:
                                      additionalProperties: false
                                      type: object
                                      properties:
                                        font:
                                          pattern: ^\S(.*\S)?$
                                          description: >-
                                            Font slot as `<role>.<variant>` — role
                                            is `body`, `heading`, or a custom
                                            `typography.named` role; variant is one
                                            of regular, italic, bold, boldItalic
                                            (see `enums.fontVariant`; e.g.
                                            `heading.bold`). The shape is checked
                                            semantically at validate, not by this
                                            pattern: a misspelled variant, an
                                            undeclared role, a missing `.variant`,
                                            or a value that reads like a family name
                                            is rejected with a `didYouMean` pointing
                                            at the fix (use `set.family` for a
                                            typeface).
                                          type: string
                                        size:
                                          minimum: 1
                                          maximum: 999
                                          description: Font size in points
                                          type: number
                                        color:
                                          pattern: ^#([0-9a-fA-F]{3}|[0-9a-fA-F]{6})$
                                          description: Color as `#RGB` or `#RRGGBB`
                                          type: string
                                        opacity:
                                          minimum: 0
                                          maximum: 1
                                          description: Text opacity from 0 to 1
                                          type: number
                                - additionalProperties: false
                                  type: object
                                  required:
                                    - kind
                                  properties:
                                    kind:
                                      const: sectionIndex
                                      type: string
                                    depth:
                                      description: Heading depth from 1 (top level) to 6
                                      anyOf:
                                        - const: 1
                                          type: number
                                        - const: 2
                                          type: number
                                        - const: 3
                                          type: number
                                        - const: 4
                                          type: number
                                        - const: 5
                                          type: number
                                        - const: 6
                                          type: number
                                    format:
                                      description: >-
                                        Section ordinal format: `twoDigit` (at
                                        least two digits: 01, 12; ordinals ≥ 100
                                        render in full) or `decimal` (1, 2, …)
                                      anyOf:
                                        - const: twoDigit
                                          type: string
                                        - const: decimal
                                          type: string
                                    style:
                                      additionalProperties: false
                                      type: object
                                      properties:
                                        font:
                                          pattern: ^\S(.*\S)?$
                                          description: >-
                                            Font slot as `<role>.<variant>` — role
                                            is `body`, `heading`, or a custom
                                            `typography.named` role; variant is one
                                            of regular, italic, bold, boldItalic
                                            (see `enums.fontVariant`; e.g.
                                            `heading.bold`). The shape is checked
                                            semantically at validate, not by this
                                            pattern: a misspelled variant, an
                                            undeclared role, a missing `.variant`,
                                            or a value that reads like a family name
                                            is rejected with a `didYouMean` pointing
                                            at the fix (use `set.family` for a
                                            typeface).
                                          type: string
                                        size:
                                          minimum: 1
                                          maximum: 999
                                          description: Font size in points
                                          type: number
                                        color:
                                          pattern: ^#([0-9a-fA-F]{3}|[0-9a-fA-F]{6})$
                                          description: Color as `#RGB` or `#RRGGBB`
                                          type: string
                                        opacity:
                                          minimum: 0
                                          maximum: 1
                                          description: Text opacity from 0 to 1
                                          type: number
                          style:
                            additionalProperties: false
                            type: object
                            properties:
                              font:
                                pattern: ^\S(.*\S)?$
                                description: >-
                                  Font slot as `<role>.<variant>` — role is
                                  `body`, `heading`, or a custom
                                  `typography.named` role; variant is one of
                                  regular, italic, bold, boldItalic (see
                                  `enums.fontVariant`; e.g. `heading.bold`). The
                                  shape is checked semantically at validate, not
                                  by this pattern: a misspelled variant, an
                                  undeclared role, a missing `.variant`, or a
                                  value that reads like a family name is
                                  rejected with a `didYouMean` pointing at the
                                  fix (use `set.family` for a typeface).
                                type: string
                              family:
                                description: >-
                                  A text family: a hosted weighted key, a
                                  declared Google Fonts display name, or a
                                  `typography.named` role reference
                                anyOf:
                                  - const: inter
                                    type: string
                                  - const: lora
                                    type: string
                                  - const: source-serif-4
                                    type: string
                                  - pattern: ^[A-Za-z][A-Za-z0-9 ]{0,63}$
                                    description: >-
                                      Google Fonts display name from the
                                      declared pool (e.g. `Playfair Display`)
                                    type: string
                                  - pattern: ^[a-z][a-z0-9-]{0,15}$
                                    description: >-
                                      Reference to a custom role declared in
                                      `typography.named` (e.g. `display`)
                                    type: string
                              size:
                                minimum: 1
                                maximum: 999
                                description: Font size in points
                                type: number
                              color:
                                pattern: ^#([0-9a-fA-F]{3}|[0-9a-fA-F]{6})$
                                description: Color as `#RGB` or `#RRGGBB`
                                type: string
                              spaceBefore:
                                minimum: 0
                                maximum: 9999
                                description: >-
                                  Vertical space reserved above the block, in
                                  points
                                type: number
                              spaceAfter:
                                minimum: 0
                                maximum: 9999
                                description: >-
                                  Vertical space reserved below the block, in
                                  points
                                type: number
                              lineHeight:
                                minimum: 1
                                maximum: 10
                                description: Line height as a multiple of the font size
                                type: number
                              align:
                                type: string
                                enum:
                                  - left
                                  - right
                                  - center
                                  - justify
                              letterSpacing:
                                minimum: -100
                                maximum: 100
                                description: >-
                                  Extra spacing between characters in points;
                                  negative values tighten
                                type: number
                              opacity:
                                minimum: 0
                                maximum: 1
                                description: Text opacity from 0 to 1
                                type: number
                              inline:
                                additionalProperties: false
                                type: object
                                properties:
                                  strong:
                                    additionalProperties: false
                                    type: object
                                    properties:
                                      color:
                                        description: >-
                                          Color as `#RGB` or `#RRGGBB`, or
                                          `inherit` to use the inherited color
                                        anyOf:
                                          - pattern: ^#([0-9a-fA-F]{3}|[0-9a-fA-F]{6})$
                                            description: Color as `#RGB` or `#RRGGBB`
                                            type: string
                                          - const: inherit
                                            type: string
                                  emphasis:
                                    additionalProperties: false
                                    type: object
                                    properties:
                                      color:
                                        description: >-
                                          Color as `#RGB` or `#RRGGBB`, or
                                          `inherit` to use the inherited color
                                        anyOf:
                                          - pattern: ^#([0-9a-fA-F]{3}|[0-9a-fA-F]{6})$
                                            description: Color as `#RGB` or `#RRGGBB`
                                            type: string
                                          - const: inherit
                                            type: string
                                  delete:
                                    additionalProperties: false
                                    type: object
                                    properties:
                                      color:
                                        description: >-
                                          Color as `#RGB` or `#RRGGBB`, or
                                          `inherit` to use the inherited color
                                        anyOf:
                                          - pattern: ^#([0-9a-fA-F]{3}|[0-9a-fA-F]{6})$
                                            description: Color as `#RGB` or `#RRGGBB`
                                            type: string
                                          - const: inherit
                                            type: string
                                      decorationStyle:
                                        type: string
                                        enum:
                                          - solid
                                          - double
                                          - dotted
                                          - dashed
                                          - wavy
                                      decorationColor:
                                        description: >-
                                          Color as `#RGB` or `#RRGGBB`, or
                                          `inherit` to use the inherited color
                                        anyOf:
                                          - pattern: ^#([0-9a-fA-F]{3}|[0-9a-fA-F]{6})$
                                            description: Color as `#RGB` or `#RRGGBB`
                                            type: string
                                          - const: inherit
                                            type: string
                                  mark:
                                    additionalProperties: false
                                    type: object
                                    properties:
                                      color:
                                        description: >-
                                          Color as `#RGB` or `#RRGGBB`, or
                                          `inherit` to use the inherited color
                                        anyOf:
                                          - pattern: ^#([0-9a-fA-F]{3}|[0-9a-fA-F]{6})$
                                            description: Color as `#RGB` or `#RRGGBB`
                                            type: string
                                          - const: inherit
                                            type: string
                                      background:
                                        description: >-
                                          Background fill behind highlighted text
                                          as `#RGB`/`#RRGGBB`, or `null` to
                                          suppress
                                        anyOf:
                                          - pattern: ^#([0-9a-fA-F]{3}|[0-9a-fA-F]{6})$
                                            description: Color as `#RGB` or `#RRGGBB`
                                            type: string
                                          - type: 'null'
                                      backgroundPadding:
                                        additionalProperties: false
                                        type: object
                                        properties:
                                          top:
                                            minimum: 0
                                            maximum: 9999
                                            description: Top padding, in points
                                            type: number
                                          right:
                                            minimum: 0
                                            maximum: 9999
                                            description: Right padding, in points
                                            type: number
                                          bottom:
                                            minimum: 0
                                            maximum: 9999
                                            description: Bottom padding, in points
                                            type: number
                                          left:
                                            minimum: 0
                                            maximum: 9999
                                            description: Left padding, in points
                                            type: number
                                          x:
                                            minimum: 0
                                            maximum: 9999
                                            description: >-
                                              Horizontal padding applied to both left
                                              and right when those sides are omitted,
                                              in points
                                            type: number
                                          'y':
                                            minimum: 0
                                            maximum: 9999
                                            description: >-
                                              Vertical padding applied to both top and
                                              bottom when those sides are omitted, in
                                              points
                                            type: number
                                      backgroundRadius:
                                        minimum: 0
                                        maximum: 14400
                                        description: >-
                                          Corner radius for each highlight
                                          background segment, in points
                                        type: number
                                  subscript:
                                    additionalProperties: false
                                    type: object
                                    properties:
                                      color:
                                        description: >-
                                          Color as `#RGB` or `#RRGGBB`, or
                                          `inherit` to use the inherited color
                                        anyOf:
                                          - pattern: ^#([0-9a-fA-F]{3}|[0-9a-fA-F]{6})$
                                            description: Color as `#RGB` or `#RRGGBB`
                                            type: string
                                          - const: inherit
                                            type: string
                                      sizeScale:
                                        minimum: 0.4
                                        maximum: 1
                                        description: >-
                                          Optical scale relative to the
                                          surrounding run (fraction of base size)
                                        type: number
                                      riseFraction:
                                        minimum: 0
                                        maximum: 1
                                        description: >-
                                          Baseline offset as a fraction of base
                                          size (not PDF points — contrast with
                                          code `baselineShift`). The renderer
                                          applies the sign (up for superscript,
                                          down for subscript)
                                        type: number
                                  superscript:
                                    additionalProperties: false
                                    type: object
                                    properties:
                                      color:
                                        description: >-
                                          Color as `#RGB` or `#RRGGBB`, or
                                          `inherit` to use the inherited color
                                        anyOf:
                                          - pattern: ^#([0-9a-fA-F]{3}|[0-9a-fA-F]{6})$
                                            description: Color as `#RGB` or `#RRGGBB`
                                            type: string
                                          - const: inherit
                                            type: string
                                      sizeScale:
                                        minimum: 0.4
                                        maximum: 1
                                        description: >-
                                          Optical scale relative to the
                                          surrounding run (fraction of base size)
                                        type: number
                                      riseFraction:
                                        minimum: 0
                                        maximum: 1
                                        description: >-
                                          Baseline offset as a fraction of base
                                          size (not PDF points — contrast with
                                          code `baselineShift`). The renderer
                                          applies the sign (up for superscript,
                                          down for subscript)
                                        type: number
                                  link:
                                    additionalProperties: false
                                    type: object
                                    properties:
                                      color:
                                        description: >-
                                          Color as `#RGB` or `#RRGGBB`, or
                                          `inherit` to use the inherited color
                                        anyOf:
                                          - pattern: ^#([0-9a-fA-F]{3}|[0-9a-fA-F]{6})$
                                            description: Color as `#RGB` or `#RRGGBB`
                                            type: string
                                          - const: inherit
                                            type: string
                                      decoration:
                                        type: string
                                        enum:
                                          - underline
                                          - lineThrough
                                          - none
                                      decorationStyle:
                                        type: string
                                        enum:
                                          - solid
                                          - double
                                          - dotted
                                          - dashed
                                          - wavy
                                      decorationColor:
                                        description: >-
                                          Color as `#RGB` or `#RRGGBB`, or
                                          `inherit` to use the inherited color
                                        anyOf:
                                          - pattern: ^#([0-9a-fA-F]{3}|[0-9a-fA-F]{6})$
                                            description: Color as `#RGB` or `#RRGGBB`
                                            type: string
                                          - const: inherit
                                            type: string
                                  code:
                                    additionalProperties: false
                                    description: >-
                                      Style overrides for inline code spans (``
                                      `code` ``): font, optical size scale, text
                                      color, background
                                      fill/padding/border/radius, baseline
                                      shift, opacity, and letter spacing. Pass
                                      `background: null` or `backgroundBorder:
                                      null` to suppress those.
                                    type: object
                                    properties:
                                      font:
                                        pattern: ^\S(.*\S)?$
                                        description: >-
                                          Font slot as `<role>.<variant>` — role
                                          is `body`, `heading`, or a custom
                                          `typography.named` role; variant is one
                                          of regular, italic, bold, boldItalic
                                          (see `enums.fontVariant`; e.g.
                                          `heading.bold`). The shape is checked
                                          semantically at validate, not by this
                                          pattern: a misspelled variant, an
                                          undeclared role, a missing `.variant`,
                                          or a value that reads like a family name
                                          is rejected with a `didYouMean` pointing
                                          at the fix (use `set.family` for a
                                          typeface).
                                        type: string
                                      sizeScale:
                                        minimum: 0.85
                                        maximum: 0.88
                                        description: >-
                                          Optical scale relative to the
                                          surrounding run. Accepted range is the
                                          0.85–0.88 band; out-of-range values are
                                          rejected
                                        type: number
                                      color:
                                        description: >-
                                          Color as `#RGB` or `#RRGGBB`, or
                                          `inherit` to use the inherited color
                                        anyOf:
                                          - pattern: ^#([0-9a-fA-F]{3}|[0-9a-fA-F]{6})$
                                            description: Color as `#RGB` or `#RRGGBB`
                                            type: string
                                          - const: inherit
                                            type: string
                                      background:
                                        description: >-
                                          Background fill behind the code run as
                                          `#RGB`/`#RRGGBB`, or `null` to suppress
                                        anyOf:
                                          - pattern: ^#([0-9a-fA-F]{3}|[0-9a-fA-F]{6})$
                                            description: Color as `#RGB` or `#RRGGBB`
                                            type: string
                                          - type: 'null'
                                      backgroundPadding:
                                        additionalProperties: false
                                        type: object
                                        properties:
                                          top:
                                            minimum: 0
                                            maximum: 9999
                                            description: Top padding, in points
                                            type: number
                                          right:
                                            minimum: 0
                                            maximum: 9999
                                            description: Right padding, in points
                                            type: number
                                          bottom:
                                            minimum: 0
                                            maximum: 9999
                                            description: Bottom padding, in points
                                            type: number
                                          left:
                                            minimum: 0
                                            maximum: 9999
                                            description: Left padding, in points
                                            type: number
                                          x:
                                            minimum: 0
                                            maximum: 9999
                                            description: >-
                                              Horizontal padding applied to both left
                                              and right when those sides are omitted,
                                              in points
                                            type: number
                                          'y':
                                            minimum: 0
                                            maximum: 9999
                                            description: >-
                                              Vertical padding applied to both top and
                                              bottom when those sides are omitted, in
                                              points
                                            type: number
                                      backgroundBorder:
                                        description: >-
                                          Micro-border around each cloned
                                          background segment, or `null` to
                                          suppress
                                        anyOf:
                                          - additionalProperties: false
                                            type: object
                                            required:
                                              - width
                                              - color
                                            properties:
                                              width:
                                                minimum: 0.1
                                                maximum: 50
                                                description: Border thickness in points
                                                type: number
                                              color:
                                                pattern: ^#([0-9a-fA-F]{3}|[0-9a-fA-F]{6})$
                                                description: Color as `#RGB` or `#RRGGBB`
                                                type: string
                                              opacity:
                                                minimum: 0
                                                maximum: 1
                                                description: Border opacity from 0 to 1
                                                type: number
                                              dash:
                                                description: >-
                                                  Dash pattern as `[dash, gap]` lengths in
                                                  points; both `0` is rejected
                                                type: array
                                                items:
                                                  minimum: 0
                                                  maximum: 1000
                                                  type: number
                                                minItems: 2
                                                maxItems: 2
                                          - type: 'null'
                                      backgroundRadius:
                                        minimum: 0
                                        maximum: 14400
                                        description: >-
                                          Corner radius for each background
                                          segment, in points
                                        type: number
                                      baselineShift:
                                        minimum: -999
                                        maximum: 999
                                        description: >-
                                          PDF text-rise adjustment in points;
                                          positive values raise the code glyphs
                                        type: number
                                      opacity:
                                        minimum: 0
                                        maximum: 1
                                        description: Fill opacity from 0 to 1
                                        type: number
                                      letterSpacing:
                                        minimum: -100
                                        maximum: 100
                                        description: >-
                                          Extra spacing between code glyphs in
                                          points; negative values tighten
                                        type: number
                  watermark:
                    description: >-
                      Per-page watermark override, or `null` to suppress the
                      default watermark on matching pages
                    anyOf:
                      - description: >-
                          Decorative watermark behind body content: static
                          `text` or per-page `sectionIndex` ordinal at a heading
                          depth
                        anyOf:
                          - additionalProperties: false
                            type: object
                            required:
                              - text
                            properties:
                              text:
                                minLength: 1
                                maxLength: 256
                                pattern: \S
                                description: >-
                                  Static watermark text drawn behind body
                                  content on every page
                                type: string
                              color:
                                pattern: ^#([0-9a-fA-F]{3}|[0-9a-fA-F]{6})$
                                description: Color as `#RGB` or `#RRGGBB`
                                type: string
                              opacity:
                                minimum: 0
                                maximum: 1
                                description: Text opacity from 0 to 1
                                type: number
                              fontSize:
                                minimum: 1
                                maximum: 999
                                description: Font size in points
                                type: number
                              position:
                                description: >-
                                  Anchor for decorative watermark text within
                                  the page (behind body content)
                                anyOf:
                                  - const: center
                                    type: string
                                  - const: top-left
                                    type: string
                                  - const: top-right
                                    type: string
                                  - const: bottom-left
                                    type: string
                                  - const: bottom-right
                                    type: string
                          - additionalProperties: false
                            type: object
                            required:
                              - sectionIndex
                            properties:
                              sectionIndex:
                                additionalProperties: false
                                type: object
                                properties:
                                  depth:
                                    description: Heading depth from 1 (top level) to 6
                                    anyOf:
                                      - const: 1
                                        type: number
                                      - const: 2
                                        type: number
                                      - const: 3
                                        type: number
                                      - const: 4
                                        type: number
                                      - const: 5
                                        type: number
                                      - const: 6
                                        type: number
                                  format:
                                    description: >-
                                      Section ordinal format for per-page
                                      watermark text (`twoDigit` default: at
                                      least two digits; ordinals ≥ 100 render in
                                      full)
                                    anyOf:
                                      - const: twoDigit
                                        type: string
                                      - const: decimal
                                        type: string
                              color:
                                pattern: ^#([0-9a-fA-F]{3}|[0-9a-fA-F]{6})$
                                description: Color as `#RGB` or `#RRGGBB`
                                type: string
                              opacity:
                                minimum: 0
                                maximum: 1
                                description: Text opacity from 0 to 1
                                type: number
                              fontSize:
                                minimum: 1
                                maximum: 999
                                description: Font size in points
                                type: number
                              position:
                                description: >-
                                  Anchor for decorative watermark text within
                                  the page (behind body content)
                                anyOf:
                                  - const: center
                                    type: string
                                  - const: top-left
                                    type: string
                                  - const: top-right
                                    type: string
                                  - const: bottom-left
                                    type: string
                                  - const: bottom-right
                                    type: string
                      - type: 'null'
                  decorations:
                    description: >-
                      Per-page decoration list, or `null` to suppress default
                      decorations on matching pages
                    anyOf:
                      - maxItems: 8
                        description: >-
                          Per-page decoration overrides replacing the default
                          list on matching pages
                        type: array
                        items:
                          additionalProperties: false
                          description: >-
                            Non-text furniture graphic. `rule` draws a
                            horizontal hairline in a header or footer band
                          type: object
                          required:
                            - kind
                            - band
                            - placement
                          properties:
                            kind:
                              const: rule
                              type: string
                            band:
                              description: >-
                                Header or footer margin band that carries
                                running furniture
                              anyOf:
                                - const: header
                                  type: string
                                - const: footer
                                  type: string
                            placement:
                              description: >-
                                Rule placement relative to the band text block.
                                `inner` draws toward the body: below header text
                                or above footer text
                              const: inner
                              type: string
                            style:
                              additionalProperties: false
                              description: >-
                                Stroke overrides for a furniture rule
                                decoration. Omitted fields fall back to
                                furniture rule defaults (0.5 pt hairline, 6 pt
                                offset)
                              type: object
                              properties:
                                color:
                                  pattern: ^#([0-9a-fA-F]{3}|[0-9a-fA-F]{6})$
                                  description: Color as `#RGB` or `#RRGGBB`
                                  type: string
                                width:
                                  minimum: 0.1
                                  maximum: 50
                                  description: Rule line thickness in points
                                  type: number
                                opacity:
                                  minimum: 0
                                  maximum: 1
                                  description: Rule opacity from 0 to 1
                                  type: number
                                dash:
                                  description: >-
                                    Dash pattern as `[dash, gap]` lengths in
                                    points
                                  type: array
                                  items:
                                    minimum: 0
                                    maximum: 1000
                                    type: number
                                  minItems: 2
                                  maxItems: 2
                                inset:
                                  minimum: 0
                                  maximum: 14400
                                  description: >-
                                    Horizontal inset from each side of the
                                    content area, in points
                                  type: number
                                offset:
                                  minimum: 0
                                  maximum: 999
                                  description: >-
                                    Vertical gap between the band text and the
                                    rule, in points
                                  type: number
                                lineCap:
                                  description: How line ends are drawn
                                  anyOf:
                                    - const: butt
                                      type: string
                                    - const: round
                                      type: string
                                    - const: projecting
                                      type: string
                      - type: 'null'
                  omit:
                    description: >-
                      When true, suppresses all furniture on matching pages
                      (slots, watermark, and decorations). Do not combine with
                      `slots`, `watermark`, or `decorations`
                    type: boolean
        outline:
          additionalProperties: false
          description: >-
            PDF outline (bookmarks). When omitted, an outline is emitted with
            the default depth range `[1, 6]` for any document containing
            headings. Pass `depthRange` alone to constrain depths. Set `enabled:
            false` to suppress the outline entirely. Passing `depthRange`
            together with `enabled: false` returns 400 — choose one intent.
          type: object
          properties:
            enabled:
              description: Whether to generate the PDF outline (bookmarks)
              type: boolean
            depthRange:
              description: Inclusive `[min, max]` heading depths included in the outline
              type: array
              items:
                description: Heading depth from 1 (top level) to 6
                anyOf:
                  - const: 1
                    type: number
                  - const: 2
                    type: number
                  - const: 3
                    type: number
                  - const: 4
                    type: number
                  - const: 5
                    type: number
                  - const: 6
                    type: number
              minItems: 2
              maxItems: 2
        imageSequence:
          additionalProperties: false
          description: >-
            Lay out staged images as pages without hand-authored Markdown: one
            per page or tiled in a grid, `fit` contain/cover, `orientation:
            auto` matching each page to its image. Defaults: `fit` is `contain`
            for `one_per_page` and `cover` for `grid`; `orientation` is `auto`;
            `size` is `A4`; `padding` is `0` (full-bleed). The sequence renders
            after the Markdown body; with empty `markdown` the document is the
            sequence alone. Each image still decodes against the per-render
            megapixel cap, so downscale very large folders or split them across
            renders. See `components.examples.RenderRequest.WithImageSequence`
          type: object
          required:
            - items
            - layout
          properties:
            items:
              minItems: 1
              maxItems: 256
              description: >-
                Staged images in render order (the agent does the folder-walk
                and ordering; this field is only the layout)
              type: array
              items:
                additionalProperties: false
                type: object
                required:
                  - asset
                properties:
                  asset:
                    pattern: ^blink://asset/[A-Za-z0-9_-]{43}$
                    description: >-
                      A staged image handle `blink://asset/<sha256>` (stage via
                      the `upload_image` tool); the handle is resolved per
                      credential at render time
                    type: string
                  alt:
                    minLength: 1
                    maxLength: 1024
                    description: >-
                      Accessible description emitted as the figure `/Alt`.
                      Recommended for PDF/UA-1; an item without `alt` is tagged
                      as a decorative artifact
                    type: string
            layout:
              type: string
              enum:
                - one_per_page
                - grid
            fit:
              type: string
              enum:
                - contain
                - cover
            orientation:
              type: string
              enum:
                - auto
                - portrait
                - landscape
            grid:
              additionalProperties: false
              description: Grid geometry; required when `layout` is `grid`
              type: object
              required:
                - columns
              properties:
                columns:
                  minimum: 2
                  maximum: 6
                  description: Columns per page (2–6)
                  anyOf:
                    - format: integer
                      default: '0'
                      type: string
                    - minimum: 2
                      maximum: 6
                      description: Columns per page (2–6)
                      type: integer
                rows:
                  minimum: 1
                  maximum: 12
                  description: >-
                    Rows per page (1–12). Defaults to filling the page from
                    `columns` and the cell aspect
                  anyOf:
                    - format: integer
                      default: '0'
                      type: string
                    - minimum: 1
                      maximum: 12
                      description: >-
                        Rows per page (1–12). Defaults to filling the page from
                        `columns` and the cell aspect
                      type: integer
                gap:
                  minimum: 0
                  maximum: 2880
                  description: Gap between cells in points. Default `8`
                  type: number
            size:
              description: >-
                Page size as a named preset (`A4`, `Letter`, …) or an explicit
                `[width, height]` pair in points
              anyOf:
                - const: A3
                  type: string
                - const: A4
                  type: string
                - const: A5
                  type: string
                - const: B4
                  type: string
                - const: B5
                  type: string
                - const: Letter
                  type: string
                - const: Legal
                  type: string
                - const: Tabloid
                  type: string
                - const: HalfLetter
                  type: string
                - type: array
                  items:
                    minimum: 1
                    maximum: 14400
                    type: number
                  minItems: 2
                  maxItems: 2
            padding:
              anyOf:
                - minimum: 0
                  maximum: 2880
                  description: Uniform margin in points applied to all four sides
                  type: number
                - additionalProperties: false
                  type: object
                  required:
                    - top
                    - right
                    - bottom
                    - left
                  properties:
                    top:
                      minimum: 0
                      maximum: 2880
                      description: Top margin in points
                      type: number
                    right:
                      minimum: 0
                      maximum: 2880
                      description: Right margin in points
                      type: number
                    bottom:
                      minimum: 0
                      maximum: 2880
                      description: Bottom margin in points
                      type: number
                    left:
                      minimum: 0
                      maximum: 2880
                      description: Left margin in points
                      type: number
            furniture:
              description: >-
                Keep the document header/footer on sequence pages. Default
                `false` (full-bleed). The free-tier watermark always applies
                regardless
              type: boolean
        pinRemoteImages:
          description: >-
            When true, each remote `http(s)://` image is fetched once and its
            bytes are reused on later renders of the same request, so repeated
            renders produce a byte-identical PDF even if the origin changes;
            reuse lasts up to 24 hours, after which the image is fetched again.
            Defaults to false, fetching every remote image fresh on each render.
          type: boolean
    Render.ValidateOk:
      type: object
      required:
        - valid
        - resolvedTheme
      properties:
        valid:
          description: The request body passed TypeBox validation and semantic checks
          const: true
          type: boolean
        contentDigest:
          description: >-
            Canonical per-account render digest when the caller is
            authenticated; used by MCP delivery deduplication and returned again
            as the x-blinkpdf-content-digest response header on a later render.
            For renders whose Markdown references `blink://asset/<id>` handles,
            the digest additionally varies by the calling credential, so two API
            keys of one account never share an asset-resolved render or its
            cached signed link; renders without asset handles stay per-account.
            It is a digest of the request/config, NOT a hash of the output PDF
            bytes — an inert change (a rule that matches nothing) shifts the
            digest without changing the rendered bytes, so compare the file
            bytes to detect a visual change.
          type: string
        account:
          description: Opaque owning account id when the caller is authenticated.
          type: string
        tier:
          description: >-
            The caller's enforcement billing tier (`free`/`pro`/`business`) when
            authenticated, so a client can report the per-tier request-body
            limit without a second call. Absent for an unauthenticated
            (db-less/auth-disabled) validate.
          type: string
        resolvedTheme:
          description: >-
            Which design theme this request resolved to. Always present on a
            successful validate (`report-clean` with `fellBack: false` when no
            theme was requested), so an agent can confirm the bundle the render
            will use.
          type: object
          required:
            - slug
            - fellBack
          properties:
            slug:
              description: >-
                The design theme actually applied — always a catalog slug
                (`report-clean` when no theme was requested or an unknown one
                fell back).
              type: string
            requested:
              description: >-
                The `theme` slug the caller sent, present only when one was
                supplied.
              type: string
            fellBack:
              description: >-
                True when the requested `theme` was unrecognized and
                `report-clean` was substituted — a non-blocking fallback, never
                a hard error.
              type: boolean
            didYouMean:
              description: >-
                Closest known slug to an unrecognized request, when one is near
                enough to suggest.
              type: string
        typography:
          type: object
          required:
            - declared
            - active
            - assignments
            - unused
          properties:
            declared:
              type: array
              items:
                type: string
            active:
              description: >-
                The body/heading families this request configures (its intent).
                These are not coverage-checked here, so the family a
                multi-script document actually renders in may differ —
                cross-reference `?preview=glyphs` and the render
                `X-Render-Fonts`/`X-Render-Font-Fallback` headers.
              type: object
              required:
                - body
                - heading
              properties:
                body:
                  description: >-
                    The configured body family (request intent), not necessarily
                    the family the render embeds. When this family cannot cover
                    a codepoint used in body text, the render falls back to
                    `inter` for the whole body role — the effective family is
                    then reported by the render `X-Render-Fonts` header (and
                    flagged by `X-Render-Font-Fallback`). Use `?preview=glyphs`
                    to predict those fallbacks render-free.
                  type: string
                heading:
                  description: >-
                    The configured heading family (request intent), not
                    necessarily the family the render embeds. When this family
                    cannot cover a codepoint used in heading text, the render
                    falls back to `inter` for the whole heading role — the
                    effective family is then reported by the render
                    `X-Render-Fonts` header (and flagged by
                    `X-Render-Font-Fallback`). Use `?preview=glyphs` to predict
                    those fallbacks render-free.
                  type: string
            assignments:
              type: array
              items:
                type: object
                required:
                  - role
                  - family
                properties:
                  role:
                    type: string
                  family:
                    type: string
            unused:
              type: array
              items:
                type: string
            resolvedWeights:
              description: >-
                Effective per-role (and per heading depth) weights resolved from
                `variantMap`, so a per-level weight is confirmable without
                rendering.
              type: array
              items:
                type: object
                required:
                  - role
                  - family
                properties:
                  role:
                    type: string
                  depth:
                    type: number
                  family:
                    type: string
                  regular:
                    type: number
                  italic:
                    type: number
                  bold:
                    type: number
                  boldItalic:
                    type: number
        rules:
          description: >-
            Per-rule match preview: how many nodes each `rules[]` entry touched
            and where, so an agent can iterate without spending a render. A
            `matched: 0` entry is a likely typo in the selector.
          type: array
          items:
            type: object
            required:
              - index
              - selector
              - category
              - matched
              - nodes
            properties:
              index:
                description: Index of the rule in the request `rules` array
                type: number
              selector:
                description: Canonical (normalized) form of the selector
                type: object
                patternProperties:
                  ^(.*)$: {}
              category:
                type: string
                enum:
                  - block
                  - inline
              matched:
                description: Number of document nodes the rule matched
                type: number
              nodes:
                description: >-
                  Matched node ids in document order. A node id is
                  `<label>@<line>:<column>` where `<label>` is the node type,
                  except a matched table *cell* (a
                  `column`/`row`/`region`-scoped table rule) which is labelled
                  `cell@<line>:<column>` so it is distinguishable from its
                  whole-table `table@<line>:<column>` id.
                type: array
                items:
                  type: string
              warning:
                type: string
                enum:
                  - rule_no_match
                  - depth_out_of_range
                  - invalid_axis_for_type
        pages:
          description: >-
            Total page count from a dry-run pagination, present only when
            `?preview=layout` is requested. No PDF bytes are produced.
          type: number
        layout:
          description: >-
            Per-node page assignment from the dry-run pagination, present only
            when `?preview=layout` is requested. Cross-reference `node` with
            `rules[].nodes`/`resolved`; `split` marks nodes that cross a page
            boundary. A figure `caption@…` node appears after its `image@…`.
          type: array
          items:
            type: object
            required:
              - node
              - page
            properties:
              node:
                description: >-
                  Node id (`<label>@<line>:<column>`), the same ids as
                  `rules[].nodes`. Layout is per top-level block, so a table
                  appears once under its whole-table id
                  (`table@<table-line>:<col>`); its cells (the
                  `cell@<line>:<col>` ids that appear in `resolved` when a
                  `column`/`row`/`region` rule matched) are not listed
                  separately — a cell inherits its table’s page assignment.
                type: string
              page:
                description: 1-based page the node begins on
                type: number
              split:
                description: Present when the node’s content spans a page break
                const: true
                type: boolean
              spanPages:
                description: >-
                  Number of pages the node spans, present only when greater than
                  one — distinguishes a single break from an atomic block
                  (code/table) fanning out across many pages
                type: number
              splitAt:
                description: >-
                  1-based line index at which the node’s text first crosses a
                  page break
                type: number
              widowRisk:
                description: >-
                  Present when a heading lands at the bottom of its page with
                  its following content pushed to the next page
                const: true
                type: boolean
              widowRiskResolvedPage:
                description: >-
                  1-based page the heading is relocated to at render time when
                  `widowRisk` fires (kept with its following content), so the
                  advisory `page` can be reconciled with the rendered page
                type: number
              softFitReclaimPt:
                description: >-
                  Total soft-fit reclaim applied while placing this node, in PDF
                  points (present only when greater than zero). Engine-applied
                  observation; does not change placement when read.
                type: number
              clubWidowCut:
                description: >-
                  Present when a mid-block page cut ran under the default
                  club/widow band policy (engine-applied)
                const: true
                type: boolean
              keepWithNextJump:
                description: >-
                  Present when a whole-unit page jump ran with a non-zero
                  keep-with-next probe (engine-applied)
                const: true
                type: boolean
              blankGuardAllowedJump:
                description: >-
                  Present when a whole-unit or preferred atomic jump ran after
                  blank-guard consultation allowed it (engine-applied)
                const: true
                type: boolean
              blankGuardDeniedJump:
                description: >-
                  Present when blank policy blocked a geometric whole-unit or
                  preferred atomic jump (engine-applied)
                const: true
                type: boolean
              keepBondDropped:
                description: >-
                  Present when blank policy dropped keep-with-next last-line
                  extra mid-band so the bond did not force an earlier cut
                  (engine-applied; not a whole-unit jump denial)
                const: true
                type: boolean
        unmatchedPageOverrides:
          description: >-
            `furniture.pageOverrides` whose `pageNumber`/`pageIndex` selector
            matches no page in the paginated document (a silently-inert
            override), each as `{ index, reason }`. Present only with
            `?preview=layout`, and only when at least one override is unmatched.
            A `sectionStarts` override is content-dependent and not reported
            here.
          type: array
          items:
            type: object
            required:
              - index
              - reason
            properties:
              index:
                description: Index of the override in `furniture.pageOverrides`.
                type: number
              reason:
                description: >-
                  Why it matched nothing, naming the offending
                  `pageNumber`/`pageIndex` against the resolved page count.
                type: string
        resolvedImages:
          description: >-
            Per-image resolved geometry from the dry-run layout, present only
            when `?preview=layout` is requested, in public top-left PDF points
            (origin at the page top-left, Y growing downward). One entry per
            drawn image in document order — empty for a document with no images
            — so a caller can assert resolved boxes without inspecting the PDF.
          type: array
          items:
            type: object
            required:
              - index
              - url
              - mode
              - layer
              - page
              - box
            properties:
              index:
                description: >-
                  0-based document image index in source order (block images
                  first, then inline), stable between this preview and the
                  rendered PDF
                type: number
              url:
                description: The Markdown image source URL
                type: string
              mode:
                type: string
                enum:
                  - block
                  - inline
                  - wrap
                  - pin
                  - bleed
              layer:
                type: string
                enum:
                  - content
                  - page-background
                  - page-foreground
              page:
                description: >-
                  1-based page the image lands on; a repeating `pin`/`bleed`
                  image yields one entry per page it lands on
                type: number
              box:
                description: >-
                  The image’s drawn rectangle in public top-left PDF points
                  (origin at the page top-left, Y growing downward)
                type: object
                required:
                  - x
                  - 'y'
                  - width
                  - height
                properties:
                  x:
                    description: >-
                      Left edge X in PDF points, measured from the page left
                      edge
                    type: number
                  'y':
                    description: >-
                      Top edge Y in PDF points, measured down from the page top
                      edge
                    type: number
                  width:
                    description: Drawn width in PDF points, after sizing and fit
                    type: number
                  height:
                    description: Drawn height in PDF points, after sizing and fit
                    type: number
        resolved:
          description: >-
            Present (an object) whenever `?preview=resolved` is requested — `{}`
            when no rule matched any node, so "checked, nothing applied" is
            distinguishable from "not checked". The **rule-contributed** `set`
            per *matched* node (the post-cascade merge of every rule that
            targeted it), keyed by node id (`<label>@<line>:<column>`, the same
            ids as `rules[].nodes`; a matched table cell is keyed
            `cell@<line>:<column>`, distinct from its whole-table `table@…` id).
            Every id in `rules[].nodes` appears here so the two reconcile
            deterministically — a node a rule matched but whose props were all
            inapplicable or fully shadowed maps to `{}`. It is a cascade
            *delta*, not the full effective style: a node no rule matched is
            absent, and theme defaults for properties no rule sets are applied
            at render time and are not echoed here. Effective body/heading
            families and per-depth weights are in `typography.active` /
            `typography.resolvedWeights`.
          type: object
          patternProperties:
            ^(.*)$:
              type: object
              patternProperties:
                ^(.*)$: {}
        glyphs:
          description: >-
            Present only when `?preview=glyphs` is requested. Codepoints in the
            document with no covering glyph in the resolved font cascade (the
            tofu render would otherwise produce), predicted render-free without
            fetching images. Empty array means full coverage.
          type: array
          items:
            type: object
            required:
              - code
              - severity
              - message
            properties:
              code:
                description: Glyph diagnostic code
                type: string
              severity:
                description: Severity bucket (error/warn/info)
                type: string
              message:
                description: Names the uncovered codepoint and the font lacking it
                type: string
        numbering:
          description: >-
            Present when `numbering.enabled` is true and at least one heading is
            numbered: the render-free resolved counter string per numbered
            heading, in document order, honoring `numbering`
            format/prefix/depthRange and any per-heading `set.numbering`
            skip/reset. Lets a caller confirm `1.` vs `Chapter 1.` without a
            render. A heading skipped or outside the depth range is absent.
          type: array
          items:
            type: object
            required:
              - node
              - label
            properties:
              node:
                description: >-
                  Heading node id (`heading@<line>:<column>`), matching
                  `rules[].nodes`/`resolved`
                type: string
              label:
                description: >-
                  The exact counter string the render prefixes to this heading
                  (e.g. `1.`, `1.2.`, `Chapter 1.`)
                type: string
        typographyNotes:
          description: >-
            Informational typography notes: `variant_collapsed` when a
            variantMap flattens bold onto regular, `weight_not_in_fetch` when a
            mapped weight is not fetched. Never invalidates the request.
          type: array
          items:
            type: object
            required:
              - code
              - family
            properties:
              code:
                type: string
                enum:
                  - variant_collapsed
                  - weight_not_in_fetch
                  - variant_role_unknown
                  - variant_map_family_unresolved
                  - google_font_axis_ignored
                  - google_font_weight_snapped
              family:
                description: Pool family the note applies to
                type: string
              weight:
                description: Offending CSS weight (present for `weight_not_in_fetch`)
                type: number
              suggestUrl:
                description: >-
                  Corrected googleFontsUrl that adds the missing weight
                  (`weight_not_in_fetch`)
                type: string
              role:
                description: >-
                  Unrecognized variantMap role (present for
                  `variant_role_unknown`)
                type: string
              axis:
                description: >-
                  Google Fonts axis tag accepted but ignored (present for
                  `google_font_axis_ignored`), e.g. `opsz`
                type: string
        staticWarnings:
          description: >-
            Cheap render-free diagnostics from the resolved rule sets, e.g. a
            circle mask on a non-square image box. Always present on a
            successful validate (an empty array when there are no warnings or no
            `rules`), so an empty list means "checked, no warnings" rather than
            "not checked". Never invalidates the request.
          type: array
          items:
            type: object
            required:
              - code
              - node
              - hint
            properties:
              code:
                type: string
                enum:
                  - mask_circle_nonsquare
                  - overlay_no_margin
                  - syntax_highlight_unsupported_language
                  - align_value_not_applicable
                  - table_widths_column_mismatch
                  - table_widths_degenerate
                  - table_widths_partial_zero
                  - internal_link_unresolved
                  - heading_level_skip
                  - ordered_marker_literal
                  - unordered_marker_counter_format
                  - image_url_blocked
                  - image_url_malformed
                  - image_empty_alt
                  - furniture_no_content
                  - furniture_fragment_empty
                  - page_override_inert
                  - numbering_depth_unmatched
                  - outline_depth_unmatched
              node:
                description: Node id (`type@line:column`) the warning applies to
                type: string
              hint:
                description: Actionable fix for the author
                type: string
        imageDiagnostics:
          description: >-
            Render-time image and layout diagnostics computed render-free —
            decode failures, remote fetch/SSRF rejections, oversize, unsupported
            MIME, rule overlay/mask asset failures, and layout warnings such as
            a wrap image placed as a block because it is taller than the page,
            or a table row forced to split — in source order where available,
            each object byte-identical to the entry render serializes into
            `X-Render-Diagnostics`. Always present on a successful validate (an
            empty array when nothing fires), so an empty list means "checked,
            nothing to report" rather than "not checked". This closes the
            dry-run gap where a malformed image or a forced layout change
            rendered as `degraded` but validate reported `valid: true` with no
            signal. Glyph, typography, and rule advisories stay in their own
            fields (`glyphs`, `typographyNotes`, `ruleWarnings`).
          type: array
          items:
            type: object
            required:
              - severity
              - code
              - message
              - help
            properties:
              severity:
                type: string
                enum:
                  - info
                  - warn
                  - error
              code:
                description: >-
                  Stable diagnostic code, identical to the `code` render reports
                  in `X-Render-Diagnostics` (e.g. `image-decode-failed`,
                  `image-fetch-failed`, `image-source-rejected`,
                  `image-fit-to-column`, or a layout code such as
                  `wrap-image-too-tall-downgraded`, `table-row-split-forced`).
                type: string
              message:
                description: >-
                  Human-readable, agent-actionable explanation, byte-identical
                  to the render diagnostic for the same image.
                type: string
              resource:
                description: >-
                  Windowed locator (the image URL or a snippet), capped to ~80
                  chars with a middle ellipsis — a locator, never the full
                  asset.
                type: string
              httpStatus:
                description: >-
                  HTTP status when the diagnostic stems from a remote fetch
                  failure (`image-fetch-failed`).
                type: number
              scaleFactor:
                description: >-
                  Uniform downscale factor in `(0, 1)` for `image-fit-to-column`
                  / `image-low-resolution`; absent otherwise.
                type: number
              effectiveDpi:
                description: >-
                  Effective print resolution in DPI for `image-fit-to-column` /
                  `image-low-resolution`; absent otherwise.
                type: number
              help:
                description: >-
                  Reference doc deep-link for the diagnostic family (a
                  `blinkpdf://reference/…` URI).
                type: string
        ruleWarnings:
          description: >-
            Non-blocking advisories for rules that pass schema validation but
            are semantically inert (§5.3): a `set` property not valid for the
            selected node category, a selector axis not valid for the selected
            type, a heading `depth` outside 1–6, or a selector that combines
            more than one position axis (`first`/`last`/`nth`). A rule that
            matched zero nodes is reported here as a `rule_no_match` advisory
            (and also inline as `rules[].warning` for convenience), matching the
            render `X-Render-Rule-Warnings` header so the same condition reads
            identically on validate and render. Never invalidates the request.
          type: array
          items:
            type: object
            required:
              - index
              - code
              - hint
            properties:
              index:
                description: Index of the rule in the request `rules` array
                type: number
              code:
                type: string
                enum:
                  - set_prop_not_applicable
                  - set_prop_partial
                  - depth_out_of_range
                  - invalid_axis_for_type
                  - conflicting_position_axis
                  - ordered_marker_literal
                  - ordered_marker_is_bullet
                  - align_needs_cell_scope
                  - set_action_inert
                  - rule_fully_shadowed
                  - rule_no_match
              hint:
                description: Actionable fix for the author
                type: string
              prop:
                description: '`set` property that does not apply (`set_prop_not_applicable`)'
                type: string
              axis:
                description: Selector axis not valid for the type (`invalid_axis_for_type`)
                type: string
              type:
                description: Selected node type(s) checked against
                type: string
              depth:
                description: Out-of-range heading depth (`depth_out_of_range`)
                type: number
    Error.ValidationFailed:
      type: object
      required:
        - type
        - title
        - status
        - errors
      description: >-
        RFC 9457 problem document for a render-validation failure (a TypeBox
        schema violation, a cross-field semantic check, or both). Every
        field-level problem of one request — schema and semantic together — is
        collected into the `errors` array, so all problems are visible in a
        single response rather than one per round-trip. Semantic checks include
        `googleFontsUrl`/`googleFontsUrls` mutual exclusion, an undeclared
        `typography.pool` entry, and a `rules` `set.family`/`set.font` reference
        to an undeclared family or role.
      properties:
        type:
          type: string
          format: uri
          description: Problem type URI (https://blinkpdf.io/errors/validation_failed).
        title:
          type: string
          description: Short, human-readable summary of the problem type.
        status:
          type: integer
          description: HTTP status code generated for this problem (always 400).
        errors:
          type: array
          description: >-
            Every field-level violation of the request, each with a JSON Pointer
            `pointer`, a `detail` explanation, and the machine-readable `kind`.
            Members may also carry allowed keys/values, relocation hints, and
            did-you-mean suggestions.
          items:
            type: object
            required:
              - type
              - pointer
              - detail
              - kind
            properties:
              type:
                type: string
                format: uri
                description: >-
                  Problem type URI for this member
                  (https://blinkpdf.io/errors/validation_failed).
              pointer:
                type: string
                description: >-
                  RFC 6901 JSON Pointer to the offending field,
                  fragment-prefixed (`#/pageSize`, `#/margins/top`).
              detail:
                type: string
                description: Human-readable explanation of this field-level violation.
              property:
                type: string
              kind:
                type: string
                enum:
                  - additional_property
                  - missing_property
                  - invalid_value
                  - constraint
              allowedKeys:
                type: array
                items:
                  type: string
              allowedValues:
                type: array
                items:
                  type: string
              requiredKeys:
                type: array
                items:
                  type: string
              variants:
                type: array
                description: >-
                  Accepted variant shapes when the failing value is an
                  object-valued union. Each entry publishes only
                  when?/keys/required/enums — never internal numericRanges or
                  nestedObjects.
                items:
                  type: object
                  required:
                    - keys
                    - required
                  properties:
                    when:
                      type: object
                      description: >-
                        Discriminant when a required key pins a single literal
                        (`{ kind: "grid" }`).
                      properties:
                        key:
                          type: string
                        value:
                          type: string
                    keys:
                      type: array
                      items:
                        type: string
                      description: All keys this variant accepts.
                    required:
                      type: array
                      items:
                        type: string
                      description: Keys this variant requires.
                    enums:
                      type: object
                      description: >-
                        Allowed literal values per enum-valued key inside this
                        variant. Additional properties are string arrays.
                        Internal numericRanges/nestedObjects are never
                        published.
                      additionalProperties:
                        type: array
                        items:
                          type: string
              relocate:
                type: object
                properties:
                  path:
                    type: string
                  dotPath:
                    type: string
                  allowedKeys:
                    type: array
                    items:
                      type: string
              relocateCandidates:
                type: array
                description: >-
                  Additional relocation targets when the property name appears
                  in multiple schema branches.
                items:
                  type: object
                  properties:
                    path:
                      type: string
                    dotPath:
                      type: string
                    allowedKeys:
                      type: array
                      items:
                        type: string
              didYouMean:
                type: array
                description: >-
                  Near-miss suggestions. Each entry carries exactly one of `key`
                  (a misspelled property name) or `value` (a bad enum/literal
                  value), plus an optional `index` pinpointing the OR-array
                  element it corrects.
                items:
                  type: object
                  properties:
                    key:
                      type: string
                    value:
                      type: string
                    index:
                      type: integer
              appliesTo:
                type: array
                items:
                  type: string
                description: >-
                  Node types where the rejected `rules[].set` property is valid,
                  present when it is valid for some other type, so an agent can
                  switch the selected type without parsing the message.
        schema:
          type: string
          description: >-
            Present on `POST /v1/render` validation failures. MCP resource URI
            for the compact per-path render contract index
            (`blinkpdf://reference/path-index`).
        errorsTruncated:
          type: boolean
          description: >-
            True when members were dropped or compacted to satisfy the response
            byte cap.
    Error.SingleFault:
      type: object
      required:
        - error
      description: >-
        Single-cause invalid-input envelope (RFC 9457 reserves the `errors`
        array for the multi-violation validation path; these single-cause faults
        do not use it). The `error` discriminator identifies the kind of
        failure: `invalid_body` (malformed JSON), `invalid_input` (an
        unrecognized or unsupported query parameter), `content_not_paginable`
        (the content cannot be laid out on the chosen page — e.g. a table cell
        taller than a single page), `font_family_not_available` (unknown font
        family — `available` lists supported keys), `invalid_google_fonts_url`
        (the `googleFontsUrl` value is not a supported Google Fonts URL form,
        declares no families, or declares too many), or `google_font_not_found`
        (a declared family does not exist on Google Fonts — `families` lists the
        ones not found, and `didYouMean` carries a near-miss family suggestion
        when a missing name is a typo of a sibling family declared in the same
        request).
      properties:
        error:
          type: string
          enum:
            - invalid_body
            - invalid_input
            - content_not_paginable
            - font_family_not_available
            - invalid_google_fonts_url
            - google_font_not_found
        code:
          type: string
          description: >-
            Canonical machine discriminator, mirroring `error` verbatim. Present
            on every single-cause error envelope so a client can branch on a
            single `code` field regardless of the specific error. The MCP server
            maps this to a broad retry category and preserves the specific name
            as `restErrorName`.
        detail:
          type: string
        available:
          type: array
          items:
            type: string
          description: >-
            Present when `error` is `font_family_not_available`. Lists every
            registered font key.
        families:
          type: array
          items:
            type: string
          description: >-
            Present when `error` is `google_font_not_found`. Lists the declared
            family names that do not exist on Google Fonts.
        didYouMean:
          type: array
          items:
            type: object
            properties:
              key:
                type: string
              value:
                type: string
              index:
                type: integer
          description: >-
            Present on a `google_font_not_found` error when a missing family
            name is a typo of a sibling family declared in the same request.
            Each entry carries `value` (the existing family the missing name
            appears to be a misspelling of).
    Error.Unauthorized:
      type: object
      required:
        - error
      properties:
        error:
          type: string
          enum:
            - unauthorized
    Error.MethodNotAllowed:
      type: object
      required:
        - error
      properties:
        error:
          type: string
          enum:
            - method_not_allowed
    Error.PayloadTooLarge:
      type: object
      required:
        - error
      properties:
        error:
          type: string
          enum:
            - payload_too_large
    Error.RateLimited:
      type: object
      required:
        - error
      description: >-
        Post-auth tier rate exhaustion and post-auth concurrency exhaustion both
        use `error: rate_limited`; distinguish them by `detail` (tier rate vs
        concurrency/plan copy). Render audit rows use separate `status` values
        (`rate_limited` vs `concurrency_limited`).
      properties:
        error:
          type: string
          enum:
            - rate_limited
        detail:
          type: string
    Error.Internal:
      type: object
      required:
        - error
      description: Unexpected server error. No additional details are provided.
      properties:
        error:
          type: string
          enum:
            - internal_error
        detail:
          type: string
    Error.ServiceUnavailable:
      type: object
      required:
        - error
      description: >-
        Transient outage shared by every 503. `font_source_unavailable` is a
        font catalogue read failure (`POST /v1/render`, `GET /v1/fonts`);
        `service_unavailable` is a subscription tier-lookup failure, fail-closed
        (`GET /v1/fonts`). Both are retryable. Each route documents which codes
        it can emit.
      properties:
        error:
          type: string
          enum:
            - service_unavailable
            - font_source_unavailable
        detail:
          type: string
  responses:
    Responses.BadRequest:
      description: >-
        Invalid input. A render-validation failure returns the RFC 9457
        `Error.ValidationFailed` problem document with every schema and semantic
        violation collected in `errors`; a single-cause fault (malformed body,
        unknown query parameter, unknown font family, or an unusable Google
        Fonts reference) returns the `Error.SingleFault` envelope.
      content:
        application/json:
          schema:
            oneOf:
              - $ref: '#/components/schemas/Error.ValidationFailed'
              - $ref: '#/components/schemas/Error.SingleFault'
          examples:
            validationFailed:
              $ref: '#/components/examples/Error.ValidationFailed'
            semanticValidationFailed:
              $ref: '#/components/examples/Error.SemanticValidationFailed'
            invalidBody:
              $ref: '#/components/examples/Error.InvalidBody'
            invalidInput:
              $ref: '#/components/examples/Error.InvalidInput'
            fontFamilyNotAvailable:
              $ref: '#/components/examples/Error.FontFamilyNotAvailable'
            invalidGoogleFontsUrl:
              $ref: '#/components/examples/Error.InvalidGoogleFontsUrl'
            googleFontNotFound:
              $ref: '#/components/examples/Error.GoogleFontNotFound'
    Responses.Unauthorized:
      description: >-
        Missing or invalid `x-api-key` (must be a valid, enabled `bp_*` key;
        documentation endpoints and health are exempt)
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/Error.Unauthorized'
          examples:
            unauthorized:
              $ref: '#/components/examples/Error.Unauthorized'
    Responses.MethodNotAllowed:
      description: >-
        Method not allowed on `/v1/render` (only POST is accepted); response
        carries `Allow: POST`.
      headers:
        Allow:
          schema:
            type: string
            enum:
              - POST
          description: Methods accepted on this path
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/Error.MethodNotAllowed'
          examples:
            methodNotAllowed:
              $ref: '#/components/examples/Error.MethodNotAllowed'
    Responses.PayloadTooLarge:
      description: >-
        Serialized JSON request body exceeds the caller's plan tier limit
        (`getTechnicalLimits`: free 128 KiB, pro 2 MiB, business 5 MiB).
        Enforcement uses the UTF-8 byte length of `JSON.stringify(body)` after
        parse, so a missing or incorrect `Content-Length` header cannot bypass
        the cap.
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/Error.PayloadTooLarge'
          examples:
            payloadTooLarge:
              $ref: '#/components/examples/Error.PayloadTooLarge'
    Responses.RateLimited:
      description: >-
        Rate or concurrency limit exceeded (post-auth per-tier limits from
        `getTechnicalLimits`: free 10/min + 1 concurrent, pro 120/min + 10
        concurrent, business 600/min + 40 concurrent; a high pre-auth per-IP
        flood shield also exists but is sized above every plan rate and never
        binds first for plan traffic). Post-auth tier rate and concurrency
        blocks both return `error: rate_limited` but use different `detail`
        strings; audit rows distinguish `rate_limited` vs `concurrency_limited`.
        Tier-specific responses may include upgrade guidance in `detail`. The
        response carries `Retry-After` and defensive security headers.
      headers:
        Retry-After:
          schema:
            minimum: 1
            type: integer
          description: Seconds remaining until the rate-limit window resets. Always >= 1.
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/Error.RateLimited'
          examples:
            rateLimited:
              $ref: '#/components/examples/Error.RateLimited'
    Responses.InternalError:
      description: Unexpected server error. No additional details are provided.
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/Error.Internal'
          examples:
            internal:
              $ref: '#/components/examples/Error.Internal'
    Responses.SourceUnavailable:
      description: >-
        Font catalogue temporarily unavailable (`font_source_unavailable`). This
        is a transient condition. A `Retry-After` header indicates when the
        client may retry.
      headers:
        Retry-After:
          schema:
            minimum: 1
            type: integer
          description: Seconds the client should wait before retrying. Defaults to 30.
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/Error.ServiceUnavailable'
          examples:
            fontSourceUnavailable:
              $ref: '#/components/examples/Error.FontSourceUnavailable'
  examples:
    Error.ValidationFailed:
      summary: Schema and semantic violations collected together
      description: >-
        Every problem of one request is reported at once: a TypeBox schema
        violation (an unknown property, with accepted keys and a `didYouMean`)
        alongside a cross-field semantic check, each as one `errors` member with
        a JSON Pointer `pointer`.
      value:
        type: https://blinkpdf.io/errors/validation_failed
        title: Validation failed
        status: 400
        schema: blinkpdf://reference/path-index
        errors:
          - type: https://blinkpdf.io/errors/validation_failed
            pointer: '#/rule'
            detail: Unknown property 'rule' at body
            kind: additional_property
            property: rule
            allowedKeys:
              - fontStack
              - furniture
              - googleFontsUrl
              - googleFontsUrls
              - markdown
              - metadata
              - numbering
              - outline
              - page
              - rules
              - typography
              - viewer
            didYouMean:
              - key: rules
          - type: https://blinkpdf.io/errors/validation_failed
            pointer: '#/metadata/modificationDate'
            detail: >-
              metadata.modificationDate must not be earlier than
              metadata.creationDate (modification cannot precede creation)
            kind: constraint
    Error.SemanticValidationFailed:
      summary: Cross-field semantic check failed (errors array)
      value:
        type: https://blinkpdf.io/errors/validation_failed
        title: Validation failed
        status: 400
        schema: blinkpdf://reference/path-index
        errors:
          - type: https://blinkpdf.io/errors/validation_failed
            pointer: '#/metadata/modificationDate'
            detail: >-
              metadata.modificationDate must not be earlier than
              metadata.creationDate (modification cannot precede creation)
            kind: constraint
    Error.InvalidBody:
      summary: Malformed JSON in the request body
      value:
        error: invalid_body
        detail: Unexpected end of JSON input
    Error.InvalidInput:
      summary: Unrecognized query parameter
      value:
        error: invalid_input
        detail: >-
          Unknown query parameter 'foobar'. POST /v1/render takes no query
          parameters.
    Error.FontFamilyNotAvailable:
      summary: Unknown font family
      value:
        error: font_family_not_available
        detail: Font family 'unknown' is not registered
        available:
          - inter
          - noto-emoji-mono
          - twemoji-mozilla
          - jetbrains-mono
    Error.InvalidGoogleFontsUrl:
      summary: Unsupported or malformed googleFontsUrl
      value:
        error: invalid_google_fonts_url
        detail: >-
          googleFontsUrl: unsupported host 'fonts.example.com'. Use a Google
          Fonts CSS URL (https://fonts.googleapis.com/css2?family=… or
          /css?family=…), a specimen page
          (https://fonts.google.com/specimen/<Family>), or a share link
          (https://fonts.google.com/share?selection.family=…).
    Error.GoogleFontNotFound:
      summary: Family does not exist on Google Fonts
      value:
        error: google_font_not_found
        detail: >-
          Google Fonts family 'Playfare Display' was not found. Check the family
          name on fonts.google.com and update the googleFontsUrl.
    Error.Unauthorized:
      summary: Missing or invalid x-api-key (bp_*)
      value:
        error: unauthorized
    Error.MethodNotAllowed:
      summary: Non-POST method on /v1/render
      value:
        error: method_not_allowed
    Error.PayloadTooLarge:
      summary: Request body exceeds the configured cap
      value:
        error: payload_too_large
    Error.RateLimited:
      summary: >-
        Per-tier rate limit exceeded (concurrency exhaustion uses the same error
        code with a different detail string)
      value:
        error: rate_limited
        detail: >-
          Tier rate limit exceeded. Retry after the Retry-After interval or
          upgrade for higher sustained throughput.
    Error.Internal:
      summary: Unexpected server error (no details provided)
      value:
        error: internal_error
    Error.FontSourceUnavailable:
      summary: Transient failure loading a requested font
      value:
        error: font_source_unavailable
        detail: Font asset temporarily unavailable; retry shortly.
  securitySchemes:
    apiKey:
      type: apiKey
      in: header
      name: x-api-key
      description: >-
        API key issued from your Blink PDF account, prefixed `bp_`. Send it in
        the `x-api-key` header on every request. The documentation and health
        endpoints are exempt.

````