> ## 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.

# Render Markdown to PDF

> Renders Markdown source into a PDF. The caller may select a font cascade via the `fontStack` field (an ordered list of hosted family keys — every family is available on every plan) or bring Google Fonts families by passing `googleFontsUrl` (legacy alias of the first entry) or `googleFontsUrls` (one or two CSS API, specimen, or share URLs copied from fonts.google.com; available on every plan). `googleFontsUrl` and `googleFontsUrls` are mutually exclusive. URLs are merged into a pool (max 4 distinct families). Positional defaults: first family of URL 1 → body; first family of URL 2 (or second family of URL 1 when only one URL) → heading. The optional `typography` object unifies pool overrides, up to two custom `named` roles (each binding a pool family or hosted key to a name referenced by rule `set.font`), per-family static weight maps (`variantMap`), and hosted heading variant policy (`headingVariant`). Body, heading, and per-depth heading families are assigned with `rules` (`select` + `set.family`); positional URL defaults apply otherwise. `set.family` accepts hosted weighted keys, Google display names from the pool, or named-role references. With Google Fonts present, the Google family takes the body/heading slot, so a weighted hosted family left in `fontStack` is ignored and reported as a `fontstack_weighted_dropped` note in `X-Render-Typography-Notes`; the stack then supplies only emoji and code families (omitting it applies the companion default). A malformed or unsupported Google Fonts URL returns **400** `invalid_google_fonts_url`; a family that does not exist on Google Fonts returns **400** `google_font_not_found`. When a non-default body/heading font cannot cover characters used in the document (for example list markers or accented letters), the render automatically falls back to the default `inter` family for body and heading text; the response then carries `X-Render-Font-Fallback: inter` plus the glyph diagnostics that triggered the fallback. `glyphFallback` lets the caller choose a different family for this fallback instead of the automatic `inter` default — a document-level, last-resort family applied per glyph, so only the codepoints the primary fonts miss route to it while every codepoint the primary fonts already cover keeps its requested family; when set, `X-Render-Font-Fallback` reports the chosen family instead of `inter`. Images are accepted via standard Markdown syntax (`data:` URLs are inlined; `http(s):` URLs are fetched). Remote images are subject to strict security policies (private IP addresses are rejected and mixed content is disabled). For accessibility, set the document language with `viewer.language` (a BCP 47 tag such as `es-ES`), which becomes the PDF `/Lang`; `viewer` also carries page-layout, page-mode, and viewer-preference hints. Rendering issues are reported via `X-Render-Status`, `X-Render-Rendered-As-Requested`, and when present `X-Render-Diagnostics` (JSON array of actionable objects).

Identical markdown and configuration are deduplicated per account for 60 seconds via a canonical content digest and an in-process LRU cache: cache hits return the stored PDF without re-rendering or billing (`x-blinkpdf-cache: hit`). Authenticated renders echo that digest as the `x-blinkpdf-content-digest` response header — the same value `POST /v1/render/validate` returns — so a client can correlate a validate with its later render. It is a digest of the request/config, **not** a hash of the output PDF bytes: an inert change (a rule matching nothing) shifts the digest without changing the rendered bytes, so compare the file bytes to detect a visual change. Optional `x-idempotency-key` still deduplicates safe client retries across the billing period; reusing a key with a different body returns **409** `idempotency_conflict` before rendering. Caching and idempotency are independent: a cache hit replays bytes without re-rendering, whereas a reused idempotency key can re-render (cache miss) yet still not increment the usage counter. The `x-blinkpdf-billing` response header reports which of the three outcomes occurred (`counted`, `deduped-cache`, `deduped-idempotent`) — read it rather than inferring billing from the usage counter staying flat.

Pass an optional `theme` slug to apply a ready-made design preset that resolves server-side to a fixed bundle of `typography`, `page`, `furniture`, `numbering`, and styling `rules`, then merged under anything you send yourself — your `page`/`typography`/`furniture` fields and your `rules` win on every conflict, and declaring your own font (`googleFontsUrl(s)`, `typography.body`/`heading`, or a weighted `fontStack`) drops the theme's font entirely. Theme fonts are bundled (hosted) families, so a theme never depends on Google at render time and the same source plus the same theme always renders the same bytes. The theme is chosen by you; the service never inspects your Markdown to pick one. An unrecognized slug falls back to `report-clean` (the unstyled default) without failing the render; `POST /v1/render/validate` echoes the resolved theme in its `resolvedTheme` field. Available themes (slug — use it when):
report-clean — generic report or deep-dive; the clean default
report-executive — 1–2 page executive brief or summary
report-data — report dense with tables and KPIs
blog-modern — casual web post or article
blog-dark — screen-first dev post on a dark sheet
blog-editorial — long-form magazine-style narrative
academic-classic — traditional numbered journal paper
academic-modern — modern preprint or working paper
thesis — thesis or long monograph with chapters
docs-light — README, guide, or technical docs
docs-dark — terminal-tone docs or notes
api-reference — API/endpoint reference
corporate — formal company report or memo
proposal — proposal, quote, or SOW
invoice — invoice or receipt

This endpoint always renders bytes; any query parameter (including `?preview=`) is rejected with **400** `invalid_input` (preview modes `resolved`/`layout` live on `POST /v1/render/validate`). Rules that pass validation but never apply (a `set` property or selector axis not valid for the selected node type, a heading `depth` outside 1–6, or a rule that matched zero nodes in the rendered document) are reported non-blockingly via the `X-Render-Rule-Warnings` response header; resolved `set` values that render inert (a non-square circle mask, an all-zero table `widths`) are reported via `X-Render-Static-Warnings`.



## OpenAPI

````yaml /openapi.json post /v1/render
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:
    post:
      tags:
        - Render
      summary: Render Markdown to PDF
      description: >-
        Renders Markdown source into a PDF. The caller may select a font cascade
        via the `fontStack` field (an ordered list of hosted family keys — every
        family is available on every plan) or bring Google Fonts families by
        passing `googleFontsUrl` (legacy alias of the first entry) or
        `googleFontsUrls` (one or two CSS API, specimen, or share URLs copied
        from fonts.google.com; available on every plan). `googleFontsUrl` and
        `googleFontsUrls` are mutually exclusive. URLs are merged into a pool
        (max 4 distinct families). Positional defaults: first family of URL 1 →
        body; first family of URL 2 (or second family of URL 1 when only one
        URL) → heading. The optional `typography` object unifies pool overrides,
        up to two custom `named` roles (each binding a pool family or hosted key
        to a name referenced by rule `set.font`), per-family static weight maps
        (`variantMap`), and hosted heading variant policy (`headingVariant`).
        Body, heading, and per-depth heading families are assigned with `rules`
        (`select` + `set.family`); positional URL defaults apply otherwise.
        `set.family` accepts hosted weighted keys, Google display names from the
        pool, or named-role references. With Google Fonts present, the Google
        family takes the body/heading slot, so a weighted hosted family left in
        `fontStack` is ignored and reported as a `fontstack_weighted_dropped`
        note in `X-Render-Typography-Notes`; the stack then supplies only emoji
        and code families (omitting it applies the companion default). A
        malformed or unsupported Google Fonts URL returns **400**
        `invalid_google_fonts_url`; a family that does not exist on Google Fonts
        returns **400** `google_font_not_found`. When a non-default body/heading
        font cannot cover characters used in the document (for example list
        markers or accented letters), the render automatically falls back to the
        default `inter` family for body and heading text; the response then
        carries `X-Render-Font-Fallback: inter` plus the glyph diagnostics that
        triggered the fallback. `glyphFallback` lets the caller choose a
        different family for this fallback instead of the automatic `inter`
        default — a document-level, last-resort family applied per glyph, so
        only the codepoints the primary fonts miss route to it while every
        codepoint the primary fonts already cover keeps its requested family;
        when set, `X-Render-Font-Fallback` reports the chosen family instead of
        `inter`. Images are accepted via standard Markdown syntax (`data:` URLs
        are inlined; `http(s):` URLs are fetched). Remote images are subject to
        strict security policies (private IP addresses are rejected and mixed
        content is disabled). For accessibility, set the document language with
        `viewer.language` (a BCP 47 tag such as `es-ES`), which becomes the PDF
        `/Lang`; `viewer` also carries page-layout, page-mode, and
        viewer-preference hints. Rendering issues are reported via
        `X-Render-Status`, `X-Render-Rendered-As-Requested`, and when present
        `X-Render-Diagnostics` (JSON array of actionable objects).


        Identical markdown and configuration are deduplicated per account for 60
        seconds via a canonical content digest and an in-process LRU cache:
        cache hits return the stored PDF without re-rendering or billing
        (`x-blinkpdf-cache: hit`). Authenticated renders echo that digest as the
        `x-blinkpdf-content-digest` response header — the same value `POST
        /v1/render/validate` returns — so a client can correlate a validate with
        its later render. It is a digest of the request/config, **not** a hash
        of the output PDF bytes: an inert change (a rule matching nothing)
        shifts the digest without changing the rendered bytes, so compare the
        file bytes to detect a visual change. Optional `x-idempotency-key` still
        deduplicates safe client retries across the billing period; reusing a
        key with a different body returns **409** `idempotency_conflict` before
        rendering. Caching and idempotency are independent: a cache hit replays
        bytes without re-rendering, whereas a reused idempotency key can
        re-render (cache miss) yet still not increment the usage counter. The
        `x-blinkpdf-billing` response header reports which of the three outcomes
        occurred (`counted`, `deduped-cache`, `deduped-idempotent`) — read it
        rather than inferring billing from the usage counter staying flat.


        Pass an optional `theme` slug to apply a ready-made design preset that
        resolves server-side to a fixed bundle of `typography`, `page`,
        `furniture`, `numbering`, and styling `rules`, then merged under
        anything you send yourself — your `page`/`typography`/`furniture` fields
        and your `rules` win on every conflict, and declaring your own font
        (`googleFontsUrl(s)`, `typography.body`/`heading`, or a weighted
        `fontStack`) drops the theme's font entirely. Theme fonts are bundled
        (hosted) families, so a theme never depends on Google at render time and
        the same source plus the same theme always renders the same bytes. The
        theme is chosen by you; the service never inspects your Markdown to pick
        one. An unrecognized slug falls back to `report-clean` (the unstyled
        default) without failing the render; `POST /v1/render/validate` echoes
        the resolved theme in its `resolvedTheme` field. Available themes (slug
        — use it when):

        report-clean — generic report or deep-dive; the clean default

        report-executive — 1–2 page executive brief or summary

        report-data — report dense with tables and KPIs

        blog-modern — casual web post or article

        blog-dark — screen-first dev post on a dark sheet

        blog-editorial — long-form magazine-style narrative

        academic-classic — traditional numbered journal paper

        academic-modern — modern preprint or working paper

        thesis — thesis or long monograph with chapters

        docs-light — README, guide, or technical docs

        docs-dark — terminal-tone docs or notes

        api-reference — API/endpoint reference

        corporate — formal company report or memo

        proposal — proposal, quote, or SOW

        invoice — invoice or receipt


        This endpoint always renders bytes; any query parameter (including
        `?preview=`) is rejected with **400** `invalid_input` (preview modes
        `resolved`/`layout` live on `POST /v1/render/validate`). Rules that pass
        validation but never apply (a `set` property or selector axis not valid
        for the selected node type, a heading `depth` outside 1–6, or a rule
        that matched zero nodes in the rendered document) are reported
        non-blockingly via the `X-Render-Rule-Warnings` response header;
        resolved `set` values that render inert (a non-square circle mask, an
        all-zero table `widths`) are reported via `X-Render-Static-Warnings`.
      operationId: renderMarkdown
      parameters:
        - name: x-idempotency-key
          in: header
          required: false
          schema:
            type: string
          description: >-
            Optional client-supplied idempotency token. When present, usage
            metering deduplicates on (key, user_id) so retries with the same
            body do not double-count. Reusing the key with a different request
            body returns 409 `idempotency_conflict` (no PDF, no usage headers).
      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'
            examples:
              minimal:
                $ref: '#/components/examples/RenderRequest.Minimal'
              styled:
                $ref: '#/components/examples/RenderRequest.Styled'
              withPageBackground:
                $ref: '#/components/examples/RenderRequest.WithPageBackground'
              withFurniture:
                $ref: '#/components/examples/RenderRequest.WithFurniture'
              withImages:
                $ref: '#/components/examples/RenderRequest.WithImages'
              withLocalAssets:
                $ref: '#/components/examples/RenderRequest.WithLocalAssets'
              withImageSequence:
                $ref: '#/components/examples/RenderRequest.WithImageSequence'
              withImageStyles:
                $ref: '#/components/examples/RenderRequest.WithImageStyles'
              withImageOverrides:
                $ref: '#/components/examples/RenderRequest.WithImageOverrides'
              withTableStyles:
                $ref: '#/components/examples/RenderRequest.WithTableStyles'
              withOutline:
                $ref: '#/components/examples/RenderRequest.WithOutline'
              withHeadingStructural:
                $ref: '#/components/examples/RenderRequest.WithHeadingStructural'
              withHeadingNumbering:
                $ref: '#/components/examples/RenderRequest.WithHeadingNumbering'
              withBlockquoteStyles:
                $ref: '#/components/examples/RenderRequest.WithBlockquoteStyles'
              withCodeStyles:
                $ref: '#/components/examples/RenderRequest.WithCodeStyles'
              withGlyphFallback:
                $ref: '#/components/examples/RenderRequest.WithGlyphFallback'
        required: true
      responses:
        '200':
          description: >-
            PDF bytes. Every successful render includes `X-Render-Status` (`ok`
            or `degraded`) and `X-Render-Rendered-As-Requested` (`true` when the
            PDF matches the requested content: no error-severity issues such as
            missing images or glyphs, and no `image-fetch-skipped` warnings).
            When issues occurred, `X-Render-Diagnostics` carries a
            base64url-encoded JSON array of objects with `severity`, `code`,
            `message`, optional `resource` and `httpStatus`, and `help` (a
            `blinkpdf://reference/…` URI). If the array was truncated to fit
            header size limits, `X-Render-Diagnostics-Truncated` is `true` (the
            header may be omitted when even a single entry cannot fit). When the
            request maps a font weight that the Google Fonts URL does not fetch,
            `X-Render-Typography-Notes` carries the same `weight_not_in_fetch`
            advisory (base64url JSON) that POST /v1/render/validate reports, so
            a direct render is not silent about it. Public free-plan API renders
            carry a non-removable bottom-center footer ("Made with Blink PDF"
            plus the Blink PDF brand mark); the response schema and status code
            are unchanged.
          headers:
            X-Render-Status:
              schema:
                type: string
                enum:
                  - ok
                  - degraded
              description: >-
                Whether the PDF rendered without warn- or error-level issues
                (`degraded` when any warn/error diagnostic was emitted).
            X-Render-Ms:
              schema:
                type: integer
                minimum: 0
              description: >-
                Wall-clock milliseconds from when the render handler accepted
                the request until the successful 200 response is ready,
                including cache lookup, font and asset resolution, PDF
                generation (on a cache miss), usage metering, and header
                assembly. On a cache hit the value reflects handler time without
                re-rendering. Omitted on non-200 responses.
            X-Render-Rendered-As-Requested:
              schema:
                type: string
                enum:
                  - 'true'
                  - 'false'
              description: >-
                `false` when error-severity issues changed the document (e.g.
                missing remote images, missing glyphs), when
                `image-fetch-skipped` (warn) omitted images, when a layout
                warning changed an element's shape (e.g.
                `wrap-image-too-tall-downgraded`, `table-row-split-forced`),
                when a font degraded to `inter`, or when a requested `theme`
                slug was unrecognized and fell back to the default
                (`X-Render-Theme-Fallback` then names it). `true` otherwise,
                including info-only signals such as `image-source-remote` and
                warns like `title-omitted`.
            X-Render-Diagnostics:
              schema:
                type: string
              description: >-
                Base64url-encoded UTF-8 JSON array of actionable diagnostics
                (`severity`, `code`, `message`, `help`, and when applicable
                `resource`, `httpStatus`). `resource` is windowed to ~80 chars
                with a middle ellipsis (a locator, not the full URL/snippet), so
                a long `data:`/`https` URL cannot crowd out other diagnostics
                from the header budget. Omitted when the render had no
                diagnostics to report.
            X-Render-Diagnostics-Summary:
              schema:
                type: string
              description: >-
                Plain-text companion to `X-Render-Diagnostics`: the diagnostic
                count and distinct codes, so a client reading only headers
                notices them without decoding the base64url field. Present
                whenever `X-Render-Diagnostics` is.
            X-Render-Diagnostics-Truncated:
              schema:
                type: string
                enum:
                  - 'true'
              description: >-
                Present when the diagnostics JSON was truncated to fit header
                size limits; highest-severity entries are retained first.
            X-Render-Diagnostics-Total:
              schema:
                type: string
              description: >-
                Full count of actionable diagnostics before header truncation,
                present only with `X-Render-Diagnostics-Truncated`. Lets a
                client recover the true count (e.g. the exact glyph count a
                `?preview=glyphs` predicted) even though the
                `X-Render-Diagnostics` array was capped.
            X-Render-Rule-Warnings:
              schema:
                type: string
              description: >-
                Base64url-encoded UTF-8 JSON array of non-blocking rule
                advisories — rules that pass validation but never apply (a `set`
                property or selector axis not valid for the selected node type,
                a heading `depth` outside 1–6, or a rule that matched zero nodes
                in the rendered document). Omitted when no rule is inert.
                Mirrors the `ruleWarnings` of POST /v1/render/validate; emitted
                on 200 and replayed on cache hits.
            X-Render-Rule-Warnings-Summary:
              schema:
                type: string
              description: >-
                Plain-text companion to `X-Render-Rule-Warnings`: the advisory
                count and distinct codes, so a client reading only headers
                notices inert rules without decoding the base64url field.
                Present whenever `X-Render-Rule-Warnings` is.
            X-Render-Rule-Warnings-Truncated:
              schema:
                type: string
                enum:
                  - 'true'
              description: >-
                Present when the rule-advisory JSON was capped to fit header
                size limits.
            X-Render-Static-Warnings:
              schema:
                type: string
              description: >-
                Base64url-encoded UTF-8 JSON array of render-free static
                advisories — resolved `set` values that render inert (a
                non-square circle mask, an unhonored align, an all-zero table
                `widths`). Omitted when none. Mirrors the `staticWarnings` of
                POST /v1/render/validate so a caller that renders directly still
                sees them; emitted on 200 and replayed on cache hits.
            X-Render-Static-Warnings-Summary:
              schema:
                type: string
              description: >-
                Plain-text companion to `X-Render-Static-Warnings`: the advisory
                count and distinct codes, so a client reading only headers
                notices inert values without decoding the base64url field.
                Present whenever `X-Render-Static-Warnings` is.
            X-Render-Static-Warnings-Truncated:
              schema:
                type: string
                enum:
                  - 'true'
              description: >-
                Present when the static-advisory JSON was capped to fit header
                size limits.
            X-Render-Typography-Notes:
              schema:
                type: string
              description: >-
                Base64url-encoded UTF-8 JSON array of informational typography
                notes (`code`, `family`, and for `weight_not_in_fetch` the
                `weight` and a `suggestUrl`). Codes include
                `weight_not_in_fetch` (a mapped weight is not among the fetched
                axes) and `fontstack_weighted_dropped` (a weighted hosted family
                in `fontStack` was ignored because Google Fonts supplied the
                body/heading slot). Surfaces the same notes as POST
                /v1/render/validate so a caller that renders directly still
                learns of them. Omitted when there are none; emitted on 200 and
                replayed on cache hits.
            X-Render-Typography-Notes-Summary:
              schema:
                type: string
              description: >-
                Plain-text companion to `X-Render-Typography-Notes`: the note
                count and distinct codes, so a client reading only headers
                notices a weight gap without decoding the base64url field.
                Present whenever `X-Render-Typography-Notes` is.
            X-Render-Typography-Notes-Truncated:
              schema:
                type: string
                enum:
                  - 'true'
              description: >-
                Present when the typography-notes JSON was capped to fit header
                size limits.
            X-Render-Font-Fallback:
              schema:
                type: string
              description: >-
                Present when a body/heading font fell back to a per-glyph
                fallback family because the requested font could not cover
                characters used in the document. Reports the family that
                actually covered the fallback glyph: the default `inter` when
                the request omits `glyphFallback` (the same lowercase hosted key
                used in `fontStack`/`X-Render-Fonts`, not the display name
                "Inter"), or the caller-chosen family from `glyphFallback`
                otherwise, named the same way `X-Render-Fonts` names families
                (lowercase hosted key, or Google display name). The
                de-duplicated triggering glyph diagnostics are included in
                `X-Render-Diagnostics`, and a fallback render is reported as not
                rendered-as-requested.
            X-Render-Fonts:
              schema:
                type: string
              description: >-
                The families applied to each text role, after any Inter
                fallback, as `body=<family>; heading=<family>` followed by `;
                code=<family>` and `; emoji=<family>` when those roles resolve
                to a family (e.g. `body=Playfair Display; heading=Source Sans 3;
                code=jetbrains-mono; emoji=twemoji-mozilla`). A hosted family is
                named by its lowercase key (`inter`, `jetbrains-mono`); a Google
                family by its display name. A role that fell back shows `inter`.
                A further `; heading-by-depth=<depth>:<family>,...` clause is
                appended only when a rule targeting a specific heading depth
                (1–6) sets a family that differs from `heading` (e.g.
                `heading-by-depth=2:Lora,3:Playfair Display`); it is omitted
                when no such rule applies or every depth it targets already
                matches `heading`, so the common case keeps its unchanged header
                shape. Emitted on every successful 200 and replayed on cache
                hits, so a caller can confirm the applied typefaces — including
                any depth-scoped override — without inspecting the PDF.
            X-Render-Theme-Fallback:
              schema:
                type: string
              description: >-
                Present when a requested `theme` slug was unrecognized and
                resolved to the default `report-clean` bundle, as
                `applied=<slug>; requested=<slug>; didYouMean=<slug>` (the
                `requested` and `didYouMean` clauses appear only when
                applicable). Mirrors the `resolvedTheme` field of POST
                /v1/render/validate so a caller rendering directly still learns
                of the fallback. Omitted when the theme resolved exactly or none
                was requested.
            X-Request-Id:
              schema:
                type: string
              description: Request identifier for support and retry diagnostics.
            X-BlinkPDF-Usage-PDFs-This-Period:
              schema:
                minimum: 1
                type: integer
              description: >-
                Current render-unit usage for the caller in the active billing
                period (a render bills 1–16 units by decoded image area).
                Emitted only when the render is attributable to a billing
                period.
            X-BlinkPDF-Period-Start:
              schema:
                type: string
                format: date-time
              description: >-
                ISO-8601 anchor timestamp of the current billing period
                (anniversary for paid; calendar month start UTC for free).
            X-BlinkPDF-Usage-Included:
              schema:
                type: integer
                minimum: 0
              description: >-
                The plan's included render-unit volume for the period. Emitted
                only when per-plan limits are active for the caller.
            X-BlinkPDF-Usage-Overage:
              schema:
                type: integer
                minimum: 0
              description: >-
                Render units beyond the included volume this period (`max(0,
                used - included)`). Billed as overage at the close of the
                billing cycle. Emitted only when per-plan limits are active.
            X-BlinkPDF-Usage-Event-Id:
              schema:
                type: string
              description: >-
                Server-generated id of the metering event this render maps to —
                the stable handle for reconciling a single render against the
                usage ledger. On an idempotent replay it is the id of the
                original event, so a retry surfaces the same id (pairs with
                `X-BlinkPDF-Billing: deduped-idempotent`). Emitted only when the
                render is attributable to a billing period. Not PII.
            X-BlinkPDF-Account:
              schema:
                type: string
              description: >-
                Opaque, stable account id of the authenticated caller (the
                owning user). Downstream services use it to attribute stored
                artifacts. The value is not PII.
            X-BlinkPDF-Key-Id:
              schema:
                type: string
              description: >-
                Opaque, stable id of the specific API key used for this render.
                Downstream services use it to attribute which key generated a
                download link. Not the key secret, and not PII.
            X-BlinkPDF-Key-Name:
              schema:
                type: string
              description: >-
                The API key's user-assigned label, when set. A mutable
                convenience for human-readable attribution; resolve the stable
                id via the API-keys surface. Omitted when the key has no name.
            X-BlinkPDF-Tier:
              schema:
                type: string
                enum:
                  - free
                  - pro
                  - business
              description: >-
                The caller's billing tier for this render. The stored PDF and
                its signed download link remain available for 24 hours on every
                plan.
            X-BlinkPDF-Cache:
              schema:
                type: string
                enum:
                  - hit
                  - miss
              description: >-
                `hit` when the PDF was replayed from the per-account render
                cache without re-rendering or billing; `miss` when it was
                freshly rendered. Present only when caching is active for the
                request. Answers whether the document was re-rendered — not
                whether quota was spent (see `X-BlinkPDF-Billing`).
            X-BlinkPDF-Cache-Age:
              schema:
                type: integer
                minimum: 0
              description: >-
                Seconds since the cached PDF was first rendered. Present only
                with `X-BlinkPDF-Cache: hit`.
            X-BlinkPDF-Content-Digest:
              schema:
                type: string
              description: >-
                Canonical per-account digest of the request and configuration —
                the same value `POST /v1/render/validate` returns and the key
                the render cache deduplicates on. For renders whose Markdown
                references `blink://asset/<id>` handles, it 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, **not** a hash of the output bytes: an inert
                change (a rule matching nothing) shifts it without changing the
                rendered PDF, so compare the file bytes to detect a visual
                change. Present on authenticated renders when caching is active.
            X-BlinkPDF-Billing:
              schema:
                type: string
                enum:
                  - counted
                  - deduped-cache
                  - deduped-idempotent
              description: >-
                Quota outcome of the render, independent of the cache outcome:
                `counted` billed one render against the period; `deduped-cache`
                replayed the render cache without billing (`X-BlinkPDF-Cache:
                hit`); `deduped-idempotent` re-rendered (`X-BlinkPDF-Cache:
                miss`) but a reused `x-idempotency-key` suppressed the charge —
                the Stripe-style `Idempotent-Replayed: true` case. The
                authoritative signal for whether this call incremented the usage
                counter — do not infer it from
                `X-BlinkPDF-Usage-PDFs-This-Period` staying flat. Emitted only
                when the render is attributable to a billing period.
          content:
            application/pdf:
              schema:
                type: string
                format: binary
        '400':
          $ref: '#/components/responses/Responses.BadRequest'
        '401':
          $ref: '#/components/responses/Responses.Unauthorized'
        '402':
          $ref: '#/components/responses/Responses.SpendCapReached'
        '405':
          $ref: '#/components/responses/Responses.MethodNotAllowed'
        '409':
          $ref: '#/components/responses/Responses.IdempotencyConflict'
        '413':
          $ref: '#/components/responses/Responses.PayloadTooLarge'
        '422':
          $ref: '#/components/responses/Responses.ImageTooLarge'
        '429':
          $ref: '#/components/responses/Responses.RateLimited'
        '500':
          $ref: '#/components/responses/Responses.InternalError'
        '502':
          description: >-
            502 Bad Gateway. A reverse proxy or load balancer in front of the
            service returned an error before the application could process the
            request. This response is not generated by the service itself. The
            response body (if present) is HTML. Clients should treat 502 as a
            transient infrastructure issue and retry with exponential backoff.
          content:
            text/html:
              schema:
                type: string
                format: html
        '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
    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.SpendCapReached:
      type: object
      required:
        - error
      description: >-
        Returned when paid plan access is required: a plan volume limit was
        reached (`spend_cap_reached` — spend cap for paid; calendar monthly 250
        render units for free). The detail names the exhausted limit.
      properties:
        error:
          type: string
          enum:
            - spend_cap_reached
        detail:
          type: string
    Error.MethodNotAllowed:
      type: object
      required:
        - error
      properties:
        error:
          type: string
          enum:
            - method_not_allowed
    Error.IdempotencyConflict:
      type: object
      required:
        - error
      description: >-
        Returned when an idempotency key is reused with a different render
        request.
      properties:
        error:
          type: string
          enum:
            - idempotency_conflict
        detail:
          type: string
    Error.PayloadTooLarge:
      type: object
      required:
        - error
      properties:
        error:
          type: string
          enum:
            - payload_too_large
    Error.ImageTooLarge:
      type: object
      required:
        - error
      description: >-
        Returned when an image is rejected before decoding: a single image
        exceeds 24 megapixels, or the summed pixel area of all images in the
        request exceeds 48 megapixels.
      properties:
        error:
          type: string
          enum:
            - image_too_large
        detail:
          type: string
    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
  examples:
    RenderRequest.Minimal:
      summary: Minimal valid request
      description: >-
        Just the Markdown source. The title is derived from the first heading
        (`Hello`) since no `metadata.title` is supplied.
      value:
        markdown: |-
          # Hello

          World
    RenderRequest.Styled:
      summary: With a heading style rule
      description: >-
        A single rule recolors and centers depth-1 (`# H1`) headings; everything
        else uses safe defaults. The `select` picks the nodes, `set` carries the
        overrides.
      value:
        markdown: |-
          # Heading

          Body copy
        metadata:
          title: Styled demo
        rules:
          - select:
              type: heading
              depth: 1
            set:
              color: '#1a73e8'
              align: center
    RenderRequest.WithPageBackground:
      summary: With full-sheet page background
      description: >-
        Paints the entire media box on every page before body content. Omit
        `page.background` for the default white viewer appearance.
      value:
        markdown: |-
          # Report

          Body text on a tinted sheet.
        metadata:
          title: Tinted report
        page:
          size: A4
          background:
            color: '#f8fafc'
    RenderRequest.WithFurniture:
      summary: Running headers and footers on every page
      description: >-
        Configures the six-slot page furniture grid. `omitFirstPage: true`
        suppresses furniture on the cover page only; `omitLastPage: true`
        suppresses furniture on the closing page when the document has more than
        one page; `firstPage` and `lastPage` override those pages with distinct
        slot maps. Fragments support literal text, an `image` fragment for a
        logo or letterhead (an HTTPS or `data:` URL, drawn as a decorative
        artifact and the only fragment allowed in its slot), and the
        `pageNumber`, `totalPages`, `documentTitle`, `sectionTitle`, and
        `sectionIndex` placeholders. `decorations` adds header/footer divider
        rules.
      value:
        markdown: |-
          # 01 · ECONOMÍA

          Section body copy.
        metadata:
          title: Editorial data document
        page:
          size: A4
          margin:
            top: 72
            right: 72
            bottom: 72
            left: 72
        furniture:
          omitFirstPage: true
          inset:
            top: 36
            bottom: 36
          slots:
            topLeft:
              content:
                - kind: text
                  value: LEE CON LALA
                  style:
                    font: body.italic
                    size: 9
                    color: '#8f7d42'
            topRight:
              content:
                - kind: sectionIndex
                  depth: 1
                  format: twoDigit
                  style:
                    size: 9
                    color: '#8f7d42'
                - kind: text
                  value: ' · '
                  style:
                    size: 9
                    color: '#8f7d42'
                - kind: sectionTitle
                  depth: 1
                  style:
                    font: body.italic
                    size: 9
                    color: '#8f7d42'
            bottomLeft:
              content:
                - kind: text
                  value: '@LEE_CON_LALA'
                  style:
                    font: body.italic
                    size: 9
                    color: '#8f7d42'
            bottomRight:
              content:
                - kind: text
                  value: SOY LAURA · EXPLICO EL MUNDO DE FÁCIL
                  style:
                    font: body.italic
                    size: 9
                    color: '#8f7d42'
          watermark:
            sectionIndex:
              depth: 1
              format: twoDigit
            color: '#efe7d5'
            opacity: 0.4
            position: top-right
            fontSize: 120
          decorations:
            - kind: rule
              band: header
              placement: inner
              style:
                color: '#8f7d42'
                width: 0.5
                offset: 6
            - kind: rule
              band: footer
              placement: inner
              style:
                color: '#8f7d42'
                width: 0.5
                offset: 6
    RenderRequest.WithImages:
      summary: With image references
      description: >-
        Uses a standard Markdown image URL. `data:` URLs are parsed inline;
        `http(s)://` URLs are fetched by the service under strict security
        defaults (private IP rejection always active, mixed content disabled).
      value:
        markdown: |-
          # Invoice

          ![Brand](data:image/png;base64,iVBORw0KGgo=)

          Thank you.
        metadata:
          title: Invoice 0042
    RenderRequest.WithLocalAssets:
      summary: With a staged local image referenced by handle
      description: >-
        References a previously staged local image from the Markdown as
        `blink://asset/<sha256>`, where the handle is the base64url SHA-256 of
        the image bytes. The bytes are uploaded out of band (not in this request
        body) and fetched at render time, so they do not count toward the
        per-tier request input size limit. The request body carries only the
        handle reference.
      value:
        markdown: |-
          # Cover

          ![Brand](blink://asset/_rvne6mHniC1wVvEQSVNEBOS091eI7xRpKocXY2gl-E)
        metadata:
          title: Brochure
    RenderRequest.WithImageSequence:
      summary: Lay staged images out as pages (scanned-folder replica)
      description: >-
        Renders a folder of staged images as pages without hand-authored
        Markdown via `imageSequence`. `layout: "one_per_page"` places one image
        per page and `orientation: "auto"` matches each page to its image
        (landscape for wide, portrait for tall), faithfully replicating a
        scanned document. With empty `markdown` the document is the sequence
        alone; set `layout: "grid"` with `grid.columns` for a contact-sheet
        instead. Each image is fetched at render time and counts toward the
        per-render decode limit.
      value:
        markdown: ''
        imageSequence:
          items:
            - asset: blink://asset/vQ3AentNdEk-p-qJV2_3_JAK4G0z95psdQGk_rKaoI0
              alt: Scanned page 1
            - asset: blink://asset/ohhxmCRbZwuiL0_Dw0ab_hPLpipZINTdvKPbmycqXMY
          layout: one_per_page
          orientation: auto
        metadata:
          title: Scanned report
    RenderRequest.WithImageStyles:
      summary: Image styling with border, shadow, and alignment
      description: >-
        A rule selecting every `image` node centers the figure, caps its width,
        draws a 1pt grey border with rounded corners, and adds a soft drop
        shadow. Narrow the `select` (for example with `text` matching the alt
        text) to target a single image.
      value:
        markdown: >-
          # Brand


          ![Logo](data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAADUlEQVR42mP8/5+hHgAHggJ/PchI7wAAAABJRU5ErkJggg==)
        metadata:
          title: Image styles demo
        rules:
          - select:
              type: image
            set:
              align: center
              sizePt: 400
              spaceBefore: 12
              spaceAfter: 12
              border:
                width: 1
                color: '#cccccc'
              borderRadius: 8
              shadow:
                offsetX: 0
                offsetY: 4
                blur: 8
                color: '#000000'
                opacity: 0.15
              opacity: 1
    RenderRequest.WithImageOverrides:
      summary: Style one specific image by position, without a rule
      description: >-
        Targets the first image in the document (`match.index: 0`, counting
        block images then inline images) with a border and rounded corners — an
        ergonomic shortcut for the common "style this one image" case that would
        otherwise need a full `rules` entry. Match by `{ url }` instead of `{
        index }` to target an image by its exact Markdown source URL.
      value:
        markdown: >-
          # Brand


          ![Logo](data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAADUlEQVR42mP8/5+hHgAHggJ/PchI7wAAAABJRU5ErkJggg==)
        metadata:
          title: Image overrides demo
        imageOverrides:
          - match:
              index: 0
            style:
              sizePct: 40
              border:
                width: 1
                color: '#cccccc'
              borderRadius: 8
    RenderRequest.WithTableStyles:
      summary: Custom table borders, striping, header, and column widths
      description: >-
        A rule selecting every `table` node draws a header-underline border,
        recolors the header background and zebra striping, sets the cell font
        size and vertical alignment, and pins explicit column widths (in PDF
        points).
      value:
        markdown: |-
          # Report

          | Metric | Q1 | Q2 |
          | --- | --- | --- |
          | Revenue | 10 | 14 |
          | Cost | 6 | 7 |
        metadata:
          title: Table styles demo
        rules:
          - select:
              type: table
            set:
              borders:
                kind: header
                stroke:
                  width: 1
                  color: '#1a73e8'
              headerBackground: '#eef3fb'
              stripe:
                odd: '#f7f9fc'
              cell:
                fontSize: 10
                valign: middle
              widths:
                - 120
                - 130
                - 130
    RenderRequest.WithOutline:
      summary: PDF bookmark tree (outline) constrained to specific depths
      description: >-
        When omitted an outline is emitted (depths [1,6]) for documents with
        headings. Pass `depthRange` to constrain which depths appear. The
        explicit form `{ enabled: true, depthRange }` is also accepted. Pass `{
        enabled: false }` to suppress the outline entirely.
      value:
        markdown: |-
          # Chapter 1

          Intro.

          ## Section 1.1

          Details.

          # Chapter 2

          More.
        metadata:
          title: Outline demo
        outline:
          depthRange:
            - 1
            - 2
    RenderRequest.WithHeadingStructural:
      summary: 'Heading pagination: forced page breaks and keep-with-next'
      description: >-
        A rule selecting depth-2 headings sets pagination policy:
        `pageBreakBefore` starts a new page before each match; `keepWithNext`
        keeps the heading with its following block (images, paragraphs, lists).
        Combine with `<!-- pagebreak -->` in Markdown for breaks that are not
        tied to a heading.
      value:
        markdown: |-
          # Cover

          Intro body.

          ## Stat one

          ![chart](https://example.com/a.png)

          ## Stat two

          ![chart](https://example.com/b.png)
        metadata:
          title: Structural pagination demo
        rules:
          - select:
              type: heading
              depth: 2
            set:
              pageBreakBefore: true
              keepWithNext: true
    RenderRequest.WithHeadingNumbering:
      summary: Automatic heading numbering with per-depth formats
      description: >-
        Enables auto-numbering and customizes the H1 segment to use upper Roman
        numerals (`I.`, `II.`, ...). Deeper depths fall back to the default
        decimal format. `trailingSeparator` controls the gap between the number
        and the heading text.
      value:
        markdown: |-
          # Introduction

          Body.

          ## Background

          More.

          # Method

          Text.
        metadata:
          title: Numbered headings demo
        numbering:
          enabled: true
          trailingSeparator: ' — '
          byDepth:
            '1':
              format: upper-roman
    RenderRequest.WithBlockquoteStyles:
      summary: Custom blockquote and GFM alert styling
      description: >-
        Two rules: one recolors the depth-1 blockquote bar, the other targets
        the `warning` GFM alert (via `select.kind`) and recolors its side bar.
        Other depths and alert kinds retain the GitHub-style palette.
      value:
        markdown: |-
          # Notice

          > A regular quote.

          > [!WARNING]
          > Watch out for this.
        metadata:
          title: Blockquote styles demo
        rules:
          - select:
              type: blockquote
              depth: 1
            set:
              borderLeft:
                width: 4
                color: '#0969da'
          - select:
              type: blockquote
              kind: warning
            set:
              borderLeft:
                width: 4
                color: '#cf222e'
    RenderRequest.WithCodeStyles:
      summary: Custom fenced code block and inline code styling
      description: >-
        Two rules on independent node types: a `codeBlock` rule sets a dark
        theme, disables line numbers, and recolors the keyword token, while an
        `inlineCode` rule adds a background fill to `` `inline code` `` spans.
        The two surfaces never affect each other.
      value:
        markdown: |-
          # Snippet

          Call `render()` inline, then:

          ```ts
          const answer = 42;
          ```
        metadata:
          title: Code styles demo
        rules:
          - select:
              type: codeBlock
            set:
              theme: charcoal-midnight
              lineNumbers: false
              syntaxColors:
                keyword: '#c792ea'
          - select:
              type: inlineCode
            set:
              background: '#f1f5f9'
              backgroundRadius: 3
    RenderRequest.WithGlyphFallback:
      summary: Cover an out-of-coverage codepoint with a chosen fallback family
      description: >-
        The requested Google Fonts family does not cover the Cyrillic word in
        this document. `glyphFallback` routes only that uncovered codepoint to
        the hosted `inter` family, keeping every other character in the
        requested font — a per-glyph, last-resort substitution, not a
        whole-document font change. Omit `glyphFallback` to use the automatic
        `inter` default instead.
      value:
        markdown: |-
          # Report

          Привет means hello in Russian.
        metadata:
          title: Glyph fallback demo
        googleFontsUrl: https://fonts.google.com/specimen/Playfair+Display
        glyphFallback: inter
    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.SpendCapReached:
      summary: Plan monthly spend cap reached
      value:
        error: spend_cap_reached
        detail: >-
          The monthly spend cap for this plan has been reached. Usage that
          exceeds the included volume is paused until the next billing period.
          Raise the spend cap or upgrade the plan to continue.
    Error.MethodNotAllowed:
      summary: Non-POST method on /v1/render
      value:
        error: method_not_allowed
    Error.IdempotencyConflict:
      summary: Idempotency key reused with a different request
      value:
        error: idempotency_conflict
        detail: The idempotency key was already used with a different render request.
    Error.PayloadTooLarge:
      summary: Request body exceeds the configured cap
      value:
        error: payload_too_large
    Error.ImageTooLarge:
      summary: An image exceeds the per-image or total megapixel limit
      value:
        error: image_too_large
        detail: >-
          A single image exceeds 24 MP, or total decoded image area exceeds 48
          MP.
    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.
  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.SpendCapReached:
      description: >-
        Paid plan access required: a plan volume limit has been reached
        (`spend_cap_reached` — spend cap for paid; free calendar 250 render
        units monthly). Detail in body names the exhausted limit. Response may
        carry `X-BlinkPDF-Usage-*` headers.
      headers:
        X-BlinkPDF-Usage-PDFs-This-Period:
          schema:
            type: integer
            minimum: 0
          description: Current render-unit usage in the active billing period.
        X-BlinkPDF-Usage-Included:
          schema:
            type: integer
            minimum: 0
          description: The plan's included render-unit volume for the period.
        X-BlinkPDF-Period-Start:
          schema:
            type: string
            format: date-time
          description: ISO-8601 anchor (anniversary for paid, calendar month for free).
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/Error.SpendCapReached'
          examples:
            spendCapReached:
              $ref: '#/components/examples/Error.SpendCapReached'
    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.IdempotencyConflict:
      description: >-
        The supplied idempotency key was already used with a different request
        body.
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/Error.IdempotencyConflict'
          examples:
            idempotencyConflict:
              $ref: '#/components/examples/Error.IdempotencyConflict'
    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.ImageTooLarge:
      description: >-
        An image was rejected before decoding because a single image exceeds 24
        megapixels or the combined image area exceeds 48 megapixels. Reduce
        image resolution and retry.
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/Error.ImageTooLarge'
          examples:
            imageTooLarge:
              $ref: '#/components/examples/Error.ImageTooLarge'
    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'
  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.

````